diff --git a/_maps/map_files/MetaStation/MetaStation.v40C.dmm b/_maps/map_files/MetaStation/MetaStation.v40C.dmm index f1ee0117307..78c2b73dfe0 100644 --- a/_maps/map_files/MetaStation/MetaStation.v40C.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v40C.dmm @@ -3160,7 +3160,7 @@ "biN" = (/obj/structure/closet/secure_closet/hop,/obj/machinery/alarm{dir = 8; icon_state = "alarm0"; pixel_x = 24},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 0; pixel_y = 32},/turf/simulated/floor/wood,/area/crew_quarters/heads) "biO" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/item/weapon/storage/fancy/donut_box,/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/bridge) "biP" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{dir = 4; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) -"biQ" = (/obj/structure/table/wood,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Maltese Falcon - Backroom"; dir = 2; network = list("SS13")},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) +"biQ" = (/obj/structure/table/wood,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/machinery/camera{c_tag = "Maltese Falcon - Backroom"; dir = 2; network = list("SS13")},/obj/item/stack/cable_coil,/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/sheet/metal{amount = 50},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "biR" = (/turf/simulated/floor/plasteel{icon_state = "warningcorner"; dir = 4},/area/quartermaster/storage) "biS" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 2; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) "biT" = (/obj/machinery/light,/obj/machinery/firealarm{dir = 1; pixel_y = -24},/obj/structure/rack,/obj/item/weapon/storage/secure/briefcase,/obj/item/clothing/mask/cigarette/cigar,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkblue"; tag = "icon-darkbluecorners (WEST)"},/area/bridge) @@ -4023,12 +4023,12 @@ "bzs" = (/obj/machinery/door/airlock/command{name = "Emergency Escape"; req_access = null; req_access_txt = "20"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bzt" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden{dir = 4},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/hallway/primary/central) "bzu" = (/obj/machinery/vending/cigarette{pixel_y = 2; products = list(/obj/item/weapon/storage/fancy/cigarettes/cigpack_syndicate = 7, /obj/item/weapon/storage/fancy/cigarettes/cigpack_uplift = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_robust = 2, /obj/item/weapon/storage/fancy/cigarettes/cigpack_carp = 3, /obj/item/weapon/storage/fancy/cigarettes/cigpack_midori = 1, /obj/item/weapon/storage/box/matches = 10, /obj/item/weapon/lighter/random = 4, /obj/item/weapon/storage/fancy/rollingpapers = 5)},/turf/simulated/floor/wood,/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) -"bzv" = (/obj/structure/table,/obj/structure/sign/maltesefalcon/right{pixel_y = 32},/obj/item/weapon/book/manual/barman_recipes{pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) -"bzw" = (/obj/machinery/camera{c_tag = "Maltese Falcon - Bar"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Bar"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/rag{pixel_y = 5},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) +"bzv" = (/obj/structure/table,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/obj/machinery/chem_dispenser/drinks,/obj/structure/sign/barsign{pixel_y = 32},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) +"bzw" = (/obj/machinery/camera{c_tag = "Maltese Falcon - Bar"; dir = 2; network = list("SS13")},/obj/machinery/requests_console{department = "Bar"; departmentType = 2; pixel_x = 0; pixel_y = 30},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/rag{pixel_y = 5},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/food/drinks/shaker,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "bzx" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/fancy/carpet{tag = "icon-carpet11-12"; icon_state = "carpet11-12"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bzy" = (/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "bzz" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/disposalpipe/segment{dir = 1; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) -"bzA" = (/obj/structure/table,/obj/structure/sign/maltesefalcon/left{pixel_y = 32},/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/machinery/firealarm{dir = 8; pixel_x = -26; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) +"bzA" = (/obj/structure/table,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "bzB" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Maltese Falcon APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "bzC" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) "bzD" = (/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/wood,/area/crew_quarters/bar{name = "\improper Maltese Falcon"}) @@ -7945,7 +7945,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaaaaHDbawaHDaHDaHDaHDaHDaHDbawaHDaaaaTqbsAbsBbsCbcybsDbsEbsFbsEbsGbcybsHbsIbsJbsKbuebsMbsNbsKbsKbsObsPbsQbsRbsKbsKbsSbsKbsKbsKbsTbsUbsVbsVbsWbsXbsYbsZbnabiwbizbixbnabiAbiLbiBbiNbthbhYbiSbhTbiTbiYbiVbqVbjabqVbjebjNbjMbjPbjObjRbjQbeubtubtvbtwbtxbtybeubeubeubewbtzbtAbpobtBbtCbtDbpobtEbtFbtGbtHbtIbjAbtKbtLbtMbtNbtObtPbtQbtRbtSbtTbtUbtVaocbpwbtWbtXbksbtYbtZbjGbjEbucbudbvebufbugbnUbuhbuibujbjHbjIaTpaaaaaabulbpPaahaaaaaaaahaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaahaaabumbunbpNaaaaahaVRbuobupbuqburbjJbutbuubuvbuwbuxbuybjKbuAbuBbuCbjLbuEbuFbqhbuGbuHaUAaaaaVRaUwaUCaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaHDaahaaaaahaaaaHDbuIaHDbuJbuKbbVbuLaHDbuIaHDaHDaTqbdQbuMbuNbcybuObsEbuPbsEbuQbcybuRbuSbuTbuUbuVbuWbuXbuYbuZbvabvbbvcbuVbuVbuVbvdbuVbvtbvfbuXbvgbuVbuVbvhbvibvjbsZbnabvkbvlbvmbvnbvmbvobvmbvmbthbkGbkFbvrbvrbvrbvRbxgbvubvvbxlbvrbvrbvrblFblGbhUbeubvzbvAbvBbvCbvDbeubvEbvFbvGbvHbtAbfTbvIbvJbvKbpobvLbvMbvNbmnbprbpraocaocbvPaocaocaocbvQbxmaocaocbvSbvTaocbvUbtWbvVbksbgLbgLbgLbgLbvWbgLbgLbvXbvYbvZbksbksbwabjSbktbwcaaabnXbwdaaaaahaaaaaaaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaahaaabumbunbpNaahbwebwfbwgbwhbwibkubofbkvbwlbwmbwnbwobwpbofbwqbwrbwsbojbwtbwubqhbqiaUAaaaaVRaUwaUCaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaHDaHDbauaHDaTqaHDbawaHDbwvaXcbwwbwxaHDbawaHDbwybwzbwAbqlbqmbcybwBbwCbqpbwCbwDbcybwEbwFbwGbcybwHbwIbwJbcybcybwKbcybwLbwLbkDbwNbwObkDbwLbwLbwLbwLbwLbwLbxnbwPbwQbwRbwSbwTbwUbwVbwWbwVbwXbwYbwZbmobnkbnfbxdbxebxdbxdbxfbnlbxhbvrbvrbxibvrbonboobeubxpbxobxwbxvbyMbyLbeubxqbepbxraXQbxsbpobpobpobpobpobxtbxubprbprbprbzgbyRbprbxxbxybxzaocavVbxAaocbxBbxCbxDbxEbxFbxGbxHbxIbxJbxKbxLbxJbxMbxNbgLbxObxPbxQbxRbkUbxTbkVblabxVbpLbxWbxXaahaahaahaahaahaaaaahaaaaahaaaaahaaaaahaaaaaaaaaaaaaaaaaaaahbmqaaabumbxYboabxZbyabodbmraUwaUzbybbycbydbyebyfbygbofbofbyhbyibyjbojbojbykbylbymaUAaaaaVRaUwaUCaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaHDbynaXcaXebyobypaXcaXcbyqbyraYIbysbytbytbytbyubyvbywbyxbyybyzbyAbyBbyCbyDbyEbyzbyFbyGbyHbyIbyIbyJbyIbyIaowbyKbzhbwLbzjblbbyObyPbyQbwLbzmbySbwLbzmbySbwLbwPbcAbhHbnablkblAblzbnablBblDblCblEbthboFbopbvrbznboKboIbasbasboobzqbpfboZbvrbrdbrsbeubzubzrbmpbzpbmvbzxbzsbztbepbewaXQbexbprbzAbzvbzwbAabzybzzbAYbprbzBbzCbzDbzEbzFbzGbzHaocaocaocaocaocaocbzIaocbzJbzKbzLbzMbzNbzNbzNbzNbzNbzMbzMbzNbzPbzQbzRbzSbzTbzUbzVbzWbzMbzMbzMaahaaaaaaaaaaahaaaaahaaaaahaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaQxbfbaUwaUCbzXaUzbzYbzZbmHbAbbAcbAdbAebAfbAgbAhbAibAjaYyaYybAkaUzaUzbkTaTpaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaHDbynaXcaXebyobypaXcaXcbyqbyraYIbysbytbytbytbyubyvbywbyxbyybyzbyAbyBbyCbyDbyEbyzbyFbyGbyHbyIbyIbyJbyIbyIaowbyKbzhbwLbzjblbbyObyPbyQbwLbzmbySbwLbzmbySbwLbwPbcAbhHbnablkblAblzbnablBblDblCblEbthboFbopbvrbznboKboIbasbasboobzqbpfboZbvrbrdbrsbeubzubzrbmpbzpbmvbzxbzsbztbepbewaXQbexbprbzvbzAbzwbAabzybzzbAYbprbzBbzCbzDbzEbzFbzGbzHaocaocaocaocaocaocbzIaocbzJbzKbzLbzMbzNbzNbzNbzNbzNbzMbzMbzNbzPbzQbzRbzSbzTbzUbzVbzWbzMbzMbzMaahaaaaaaaaaaahaaaaahaaaaahaaaaafaaaaafaaaaaaaaaaaaaaaaaaaaaaahaahaahaahaahaahaahaQxbfbaUwaUCbzXaUzbzYbzZbmHbAbbAcbAdbAebAfbAgbAhbAibAjaYyaYybAkaUzaUzbkTaTpaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaHDaYEaYFaYFbAlaYFbAmbAnbAobAobApbAobAqbArbAsbAtbAubAvbAwbAxbmzbAybAzbAAbABbACbADbAEbAFbAGbAHbAIbAJbAKbyIbALbAMaosbwLbANbAObyObyPbyQbwLbAPbAQbwLbAPbAQbwLbARbcAbhHbnabnabngbnabnabnabnibnhbBabnabtmbsLbttbasbqVbqVbnNbvObxabBdbBcbBebzdbzcbzfbzebBibBgborbBmbosbBpbeubBnbepbBoaXQbexbprbCNbBqbzybBrbzybBsbzybBtbBubzHbBvbBwbBxbBybBzbBAbBBbBCbBDbBEaocbBFaocbBGbtWbBHbzMbBIbBJbBKbBLbBMbzMbBNbBObBPbBQbotbBSbBTbBUbBVbBWbBXbBYbzMaahaahaahaahaahaahaahaaaaafaaabBZaaabCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQxaVRbCbaUCaaaaUzbCcbCdbCebAbbCfbCgbChbCibCjbCkbClbAbaUzaaaaaaaaaaVRaUwaUCaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaHDaHDaTqaHDbauaHDaTqaHDaHDaHDaTqaHDaTqaTqaTqbkWbkXalWbCoalWalWbCpbCqbCpbCrbCpbCpbCpbCpbyIbyIbCsbCtbyIbyIbyIbCualObwLbCvbCwbyObCxbwLbwLbCybwLbwLbCzbwLbwLbCAbcAbhHbCBbCCbCDbCEbCFbCGbCDbCDbCHbCIboobCQbxdbCUbCVbzibCMbCWbCObCPbCYbCXbvrbDabzObeubDgbDfbEmbDtbECbEBbeubCZbepbewaXQbexbprbEDbDbbDcbDbbDdbDebEEbEIbBubzHbDhbDibzHbDjbDkbDlbDmbDnbDobDpaocbvTaocbDqbDrbDsbotboNbDvbDwbDxbDybzMbDzbDAbDBbDCbotbDEbDFbDGbDHbDIbDJbDKbzMaahboOboOboOboOboOaahaaabCaaaabBZaaabCaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQxaVRbCbaUCaaaaUzbDLbDMbDNbAbbDObDPbDQbDRbDSbDTbDUbAbaUzaaaaaaaRIbgNaUwaUCaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaHDbDYbdQbDZalWbyKavibEabCpbEbbEcbEdbEebEfbEgbCpbEhbEhbEibEjbEkbElbyIbCubGdbwLbEnbEobyObyPbEpboSbCwbErbEsbEtbEubkDbwPbcAbhHbGrboTbEwboUboUboUboUboUbEAbGHbHRbHzbhUbhUbhUbpabpcbpbbpebpdbhUbhUbhUbIabHRbJrbeubzebeubeubeubevbeubEJbepbEKbELbexbLIbENbENbENbEObENbEPbENbEQbBubBubERbBubBubzHbESbETbEUbEVbEWbphaocbzIaocbEYbDrbEZbpibFbbDGbFcbFdbFebpjbFgbFhbFibFjbotbFkbFlbFmbFnbFobFpbFqbpkbFsbppbFubFvbFvboOaahaaabCaaaabBZaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaQxaVRbCbaUCaaaaUzaUzaUzaUzbAbbFwbFxbFybCjbFzbFAbFBbAbaUzaaaaVRbFCaTkbFDaTpaQxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index d16fd238d93..13d50d56e6a 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -1382,9 +1382,9 @@ "aAD" = (/turf/simulated/wall,/area/storage/primary) "aAE" = (/turf/simulated/wall/r_wall,/area/storage/primary) "aAF" = (/obj/structure/closet/secure_closet/freezer/money,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/nuke_storage) -"aAG" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 6},/area/ai_monitored/nuke_storage) -"aAH" = (/obj/machinery/light/small{dir = 1},/obj/machinery/alarm{pixel_y = 23},/turf/simulated/floor/plasteel{icon_state = "vault"},/area/ai_monitored/nuke_storage) -"aAI" = (/obj/machinery/power/apc{dir = 1; name = "Vault APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/ai_monitored/nuke_storage) +"aAG" = (/obj/machinery/light_switch{pixel_y = 28},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aAH" = (/obj/machinery/power/apc{dir = 1; name = "Vault APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable{icon_state = "0-2"; d2 = 2},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aAI" = (/obj/machinery/alarm{pixel_y = 23},/obj/machinery/light{dir = 1},/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) "aAJ" = (/obj/structure/filingcabinet,/obj/item/weapon/folder/documents,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/nuke_storage) "aAK" = (/obj/machinery/gateway{dir = 10},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/gateway) "aAL" = (/obj/machinery/gateway,/obj/structure/cable{icon_state = "0-2"; d2 = 2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/gateway) @@ -1455,9 +1455,9 @@ "aBY" = (/turf/simulated/floor/plasteel,/area/storage/primary) "aBZ" = (/obj/machinery/vending/tool,/turf/simulated/floor/plasteel,/area/storage/primary) "aCa" = (/obj/machinery/atmospherics/unary/vent_scrubber{dir = 4; on = 1; scrub_N2O = 0; scrub_Toxins = 0},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/nuke_storage) -"aCb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 6},/area/ai_monitored/nuke_storage) -"aCc" = (/obj/machinery/nuclearbomb{r_code = "LOLNO"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/nuke_storage) -"aCd" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/ai_monitored/nuke_storage) +"aCb" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aCc" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 5},/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aCd" = (/obj/machinery/nuclearbomb/selfdestruct{layer = 2},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 8},/area/ai_monitored/nuke_storage) "aCe" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/ai_monitored/nuke_storage) "aCf" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/gateway) "aCg" = (/obj/structure/window/reinforced,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/gateway) @@ -1528,9 +1528,9 @@ "aDt" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (EAST)"; dir = 4},/turf/simulated/floor/plasteel,/area/storage/primary) "aDu" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/storage/primary) "aDv" = (/obj/structure/closet/crate{name = "Gold Crate"},/obj/item/stack/sheet/mineral/gold{pixel_x = -1; pixel_y = 5},/obj/item/stack/sheet/mineral/gold{pixel_y = 2},/obj/item/stack/sheet/mineral/gold{pixel_x = 1; pixel_y = -2},/obj/item/weapon/storage/belt/champion,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/nuke_storage) -"aDw" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 6},/area/ai_monitored/nuke_storage) -"aDx" = (/turf/simulated/floor/plasteel{icon_state = "vault"},/area/ai_monitored/nuke_storage) -"aDy" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/ai_monitored/nuke_storage) +"aDw" = (/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aDx" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/bluegrid{icon_state = "gcircuit"; luminosity = 2},/area/ai_monitored/nuke_storage) +"aDy" = (/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 6},/area/ai_monitored/nuke_storage) "aDz" = (/obj/item/weapon/coin/silver{pixel_x = 7; pixel_y = 12},/obj/item/weapon/coin/silver{pixel_x = 12; pixel_y = 7},/obj/item/weapon/coin/silver{pixel_x = 4; pixel_y = 8},/obj/item/weapon/coin/silver{pixel_x = -6; pixel_y = 5},/obj/item/weapon/coin/silver{pixel_x = 5; pixel_y = -8},/obj/structure/closet/crate{name = "Silver Crate"},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/ai_monitored/nuke_storage) "aDA" = (/obj/machinery/camera{c_tag = "Gateway"; dir = 4; network = list("SS13")},/obj/structure/table,/obj/structure/sign/biohazard{pixel_x = -32},/obj/item/weapon/storage/firstaid/regular,/turf/simulated/floor/plasteel,/area/gateway) "aDB" = (/obj/structure/table,/obj/item/weapon/paper/pamphlet,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel,/area/gateway) @@ -1595,7 +1595,7 @@ "aEI" = (/obj/structure/table,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 4},/turf/simulated/floor/plasteel,/area/storage/primary) "aEJ" = (/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 1},/area/ai_monitored/nuke_storage) "aEK" = (/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "vault"},/area/ai_monitored/nuke_storage) -"aEL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/motion{c_tag = "Vault"; dir = 1; network = list("MiniSat")},/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/ai_monitored/nuke_storage) +"aEL" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/camera/motion{c_tag = "Vault"; dir = 1; network = list("MiniSat")},/obj/machinery/light,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 10},/area/ai_monitored/nuke_storage) "aEM" = (/obj/structure/safe,/obj/item/clothing/head/bearpelt,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass/shotglass,/obj/item/weapon/gun/projectile/revolver/russian,/obj/item/ammo_box/a357,/obj/item/weapon/reagent_containers/food/drinks/bottle/vodka/badminka,/turf/simulated/floor/plasteel{icon_state = "vault"; dir = 4},/area/ai_monitored/nuke_storage) "aEN" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/meter,/obj/machinery/atmospherics/pipe/manifold/supply/hidden{tag = "icon-manifold-b-f (WEST)"; dir = 8},/turf/simulated/floor/plating,/area/maintenance/fpmaint) "aEO" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/wall/r_wall,/area/gateway) @@ -1777,7 +1777,7 @@ "aIi" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/wall,/area/crew_quarters/theatre) "aIj" = (/obj/machinery/door/airlock/maintenance{name = "Bar Maintenance"; req_access_txt = "12"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plating,/area/maintenance/fsmaint2) "aIk" = (/turf/simulated/wall,/area/crew_quarters/bar) -"aIl" = (/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/crew_quarters/bar) +"aIl" = (/obj/item/weapon/reagent_containers/food/drinks/shaker,/obj/item/weapon/gun/projectile/revolver/doublebarrel,/obj/structure/table/wood,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/item/stack/cable_coil,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aIm" = (/obj/structure/disposalpipe/segment,/turf/simulated/floor/wood,/area/crew_quarters/bar) "aIn" = (/obj/structure/sink/kitchen{pixel_y = 28},/turf/simulated/floor/wood,/area/crew_quarters/bar) "aIo" = (/obj/machinery/door/window/southleft{base_state = "left"; dir = 2; icon_state = "left"; name = "Bar Delivery"; req_access_txt = "25"},/turf/simulated/floor/plasteel{icon_state = "delivery"},/area/crew_quarters/bar) @@ -2110,7 +2110,7 @@ "aOD" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aOE" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/item/device/radio/intercom{pixel_y = 25},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aOF" = (/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) -"aOG" = (/obj/item/stack/packageWrap,/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/item/weapon/reagent_containers/glass/rag,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) +"aOG" = (/obj/machinery/firealarm{dir = 4; pixel_x = 24},/obj/structure/table,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/chem_dispenser/drinks/beer,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aOH" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/crew_quarters/kitchen) "aOI" = (/obj/machinery/door/airlock{name = "Kitchen cold room"; req_access_txt = "28"},/obj/structure/disposalpipe/segment,/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/crew_quarters/kitchen) "aOJ" = (/turf/simulated/floor/plasteel{dir = 9; icon_state = "green"},/area/hydroponics) @@ -2325,7 +2325,7 @@ "aSK" = (/obj/structure/table/reinforced,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aSL" = (/obj/effect/landmark/start{name = "Bartender"},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aSM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) -"aSN" = (/obj/machinery/requests_console{department = "Bar"; departmentType = 2; pixel_x = 30; pixel_y = 0},/obj/item/weapon/book/manual/barman_recipes,/obj/machinery/camera{c_tag = "Bar"; dir = 8; network = list("SS13")},/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) +"aSN" = (/obj/machinery/requests_console{department = "Bar"; departmentType = 2; pixel_x = 30; pixel_y = 0},/obj/machinery/camera{c_tag = "Bar"; dir = 8; network = list("SS13")},/obj/structure/table,/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden,/obj/machinery/chem_dispenser/drinks,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aSO" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/wall,/area/crew_quarters/kitchen) "aSP" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "aSQ" = (/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{tag = "icon-manifold-r-f (NORTH)"; dir = 1},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) @@ -2489,7 +2489,7 @@ "aVS" = (/obj/structure/table,/obj/item/weapon/reagent_containers/food/condiment/peppermill{pixel_x = 3},/obj/item/weapon/reagent_containers/food/condiment/saltshaker{pixel_x = -3; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aVT" = (/obj/structure/table/reinforced,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aVU" = (/obj/machinery/door/window/southright{name = "Bar Door"; req_access_txt = "0"; req_one_access_txt = "25;28"},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) -"aVV" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) +"aVV" = (/obj/structure/table/reinforced,/obj/machinery/computer/security/telescreen/entertainment{pixel_x = 32},/obj/item/weapon/book/manual/barman_recipes,/obj/item/weapon/reagent_containers/glass/rag,/turf/simulated/floor/plasteel{icon_state = "bar"},/area/crew_quarters/bar) "aVW" = (/obj/effect/landmark/start{name = "Cook"},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "aVX" = (/obj/structure/table,/obj/machinery/reagentgrinder,/obj/machinery/requests_console{department = "Kitchen"; departmentType = 2; pixel_x = 30; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "cafeteria"},/area/crew_quarters/kitchen) "aVY" = (/turf/simulated/floor/plasteel{icon_state = "green"; dir = 4},/area/hydroponics) @@ -2713,8 +2713,7 @@ "bai" = (/obj/machinery/power/apc{cell_type = 2500; dir = 1; name = "Captain's Office APC"; pixel_y = 24},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/wood,/area/crew_quarters/captain) "baj" = (/turf/simulated/floor/wood,/area/crew_quarters/captain) "bak" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/glass{name = "Diner"},/turf/simulated/floor/plasteel,/area/crew_quarters/bar) -"bal" = (/obj/structure/sign/maltesefalcon/left,/turf/simulated/wall,/area/crew_quarters/bar) -"bam" = (/obj/structure/sign/maltesefalcon/right{pixel_y = 0},/turf/simulated/wall,/area/crew_quarters/bar) +"bal" = (/obj/structure/sign/barsign,/turf/simulated/wall,/area/crew_quarters/bar) "ban" = (/turf/simulated/wall,/area/hallway/primary/starboard) "bao" = (/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard) "bap" = (/obj/machinery/camera{c_tag = "Starboard Primary Hallway 2"; dir = 2; network = list("SS13")},/turf/simulated/floor/plasteel{dir = 1; icon_state = "whitecorner"},/area/hallway/primary/starboard) @@ -6584,10 +6583,10 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMawZaxaawZaxbaxaaxaaxcawZaxaaxdaxeaxfaxfaxgamHavTatJaxhanSanSaxiaxjamHaxkarvarvarvarvarvarvaxlatJaxmanSamHasvasvaxnapNaqCaxoaxpaxqaxqaxraxqaxsaxqaxqaxtaxoaxuaxvaxvaxvaxvaxvaxvaxvavZaxwaxxaxyaxzaxAaxBaxCaxDaxEaxFaxGaxHaxIaxJaxKaxLamwaxMacAaeUapTaqOaqPaxNaqRaxOaxPaxQaxQaxQaxRaxSaxTaxUaxVaulaxWaxXaxYaHFayaaybatiaycaydaqcaqcaqcaqcaqcaydapWapWapWallallallanKallallaoyallallarjallallayeallallaoyallarjavuallallaoyallamlavuarjawSayfaroaygavGayhayiayjavGaykaroaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarpavMaylavMaBGaxaaxaaMBavMaylavMayqayraxbaysamHavTavXaytasAasAasCayuayuallasnallayuayuayuayuayvaywauQauNauNauNauNayxapNarBaxoaaaaafaaaayyaaaayzaaaaafaaaaxoaxuaxvayAayBayCayDayEaxvavZayFayGayHayIayJayKayLayMayMayNayOayOayOayPaxKayQamwayRacAaeUapTarQarSarSaySarUayTayUayVayWayXayYayZayZazaayZapWazbazcazdazeazfazgapWaydaqcaqcaqcaqcaqcaydapWaqoamlawTazhallallallaqoamlallaqoarjallaziamlallazjamlallazkazlallazmamlallaoyaoyarjaznazoaroazpavGazqazrazqavGazsaroaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagaafaafaafaafaztaqpazuatBavMaymaynayoaypavMatBazuavMaqpazvazwamHazxazyazzazAatGazBayuazCazDazEazFazGazHazCayuazIazJazKawdawdawdawdawdazLazMaxoaafazNazNazOazNazPazNazNaafaxoaxuaxvazQazRazSazTazQaxvazUazVazWazXazYazZaAaaAbaAcaAdaAeaAfayOayOayOaAgayQamwaAhacAaeUapTapTapTapTapTaAiaAjaAkayZayZayZayZayZaAlaAmaAnayZapWapWapWapWaAoaApapWaydaqcaqcaqcaqcaqcaydapWallamlaAqazhallaArallamlamlallamlarjallamlamlallamlamlallarjasjallamlamlallaAsamlarjawSaAtaroaroaroaroaroaroaroaroaroabtabtabtabtabtaafaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaysaAvaAvaAwaAxaAvaAvaAyayuazCazEaAzaAAazEazEazCayuaqCaABaACaADaADaADaADaADaADaADaAEaaaazNaAFaAGaAHaAIaAJazNaaaaxoaxuaxvazQaAKaALaAMazQaxvawaazLaxxaANaAOaAPaAQaARaAbaASaATayOayOaAUayOaAgayQamwayRacAaeUapTaqOaqPaAVaqRaxOaAWayZaAXaAmaAYaAYayZaAlaAZaAnayZaBaaBbaBcaBdaBeaApaafaBfaBgaBgaBgaBgaBgaBhaaaallamlaBiaBjallallallallallallaBkaBlallallallallallallaBmaBnaBoaBpaBpaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBzaBAaBBaBCaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaajxaekaBEaekaeZaeZaeZaeZaekaBEaBFaelaqpaBGaBHaBIaBJaBKaBLaBMaBNaBOayuazCazEazEaBPazEazEazCayuaBQaBRaBSaBTaBUaBVaBWaBXaBYaBZaAEaafazNaCaaCbaCcaCdaCeazNaafaxoaxuaxvaCfaCgaChaCiaCjaxvapNaCkaxxaClaCmaCnayOaCnaCoaCpaCqaCraAgaxKaCsaxKayQamwayRacAaeUapTarQarRarSaCtarUaCuayZaCvaAmaAmaAmazaaCwaCxaCyayZaCzaCAaCBaCCaCDaApaaaaafaaaaafaaaaafaaaaafaaaallavuaCEaBsaCFaCGallasiamlavuarjamlallaaaallawTaBsaBsaCHaCIaCJaCJaCJaCJaCJaCKaCLaCMaCNaCOaCOaCOaCPaCQaCRaCSaCTaCUaCVaCWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaekaCXaOualQaCZaDaaDbaDcaDdaDealQaDgaDfavMaBGaDhaAvaDiaDjaDkaDlaDmaDnayuaDoazEazEazEazEaDpaDqbRJaDsaDtaDuaBYaBYaBYaBYaBYaBYaBYaAEaaaazNaDvaDwaDxaDyaDzazNaaaaxoaxuaxvaDAaDBaDCaDDaDEaxvapNaDFaxxaxxaDGaATaDHaATaDIaxxaxxaDJaDKaxKaDLaxKayQamwayRacAaeUapTapTapTapTapTaDMaDNaDOaDPaDQaDRaDRaDRaDSayZaDTayZaDUaDVaDWaBdaBeaApallallallallallallallallallallallallallaDXallallallallawTaBtaDYaDZaEaaDZaEbaEcaEdaEdaEeaEfaEfaEfaEfaEfaEgaEhaEiaEiaEiaEiaEiaEiaBDaEjaEkaElaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaEmaEmaEnalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaBGaEqaAvaEraEsaEtaEuaEvaEwayuaExazEaEyaEzaEzaEAaEBaECaEDaEEaEFaEGaEGaEGaEGaEGaEHaEIaAEaafazNaEJaDwaEKaELaEMazNaafaxoaENaEOaEPaEQaDCaERaESaETaEUaEVaxKaEWaEXaDJaDJaDJaEYaEZaxKaFaaFaaxKaDJaxKaFbaoeaFcacAaeUaeUaeUaeUaeUamXawvaFdaFeaFfaFgaFeaFhaFeaFiaFeaFjayZaFkaFlaFmaBdaFnaFoaFpaFqaFraFsaFtaFuaFuaFuaFuaFvaFwaFuaFuaFxaFyaFzaFAaBpaFBaFCaFDaFEaFFaFEaFGaFHaEfaEfaFIaEfaFJaFKaFLaEfaEiaFMaEiaFNaFOaFPaFQaFRaFSaFTaFUaFVaFWaFXaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaylavMavMavMavMavMavMaylavMaaaaqpaAuaysaAvaAvaAwaAxaAvaAvaAyayuazCazEaAzaAAazEazEazCayuaqCaABaACaADaADaADaADaADaADaADaAEaaaazNaAFaAGaAIaAHaAJazNaaaaxoaxuaxvazQaAKaALaAMazQaxvawaazLaxxaANaAOaAPaAQaARaAbaASaATayOayOaAUayOaAgayQamwayRacAaeUapTaqOaqPaAVaqRaxOaAWayZaAXaAmaAYaAYayZaAlaAZaAnayZaBaaBbaBcaBdaBeaApaafaBfaBgaBgaBgaBgaBgaBhaaaallamlaBiaBjallallallallallallaBkaBlallallallallallallaBmaBnaBoaBpaBpaBpaBqaBraBsaBtaBuaBvaBwaBxaByaBzaBAaBBaBCaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaajxaekaBEaekaeZaeZaeZaeZaekaBEaBFaelaqpaBGaBHaBIaBJaBKaBLaBMaBNaBOayuazCazEazEaBPazEazEazCayuaBQaBRaBSaBTaBUaBVaBWaBXaBYaBZaAEaafazNaCaaCbaCdaCcaCeazNaafaxoaxuaxvaCfaCgaChaCiaCjaxvapNaCkaxxaClaCmaCnayOaCnaCoaCpaCqaCraAgaxKaCsaxKayQamwayRacAaeUapTarQarRarSaCtarUaCuayZaCvaAmaAmaAmazaaCwaCxaCyayZaCzaCAaCBaCCaCDaApaaaaafaaaaafaaaaafaaaaafaaaallavuaCEaBsaCFaCGallasiamlavuarjamlallaaaallawTaBsaBsaCHaCIaCJaCJaCJaCJaCJaCKaCLaCMaCNaCOaCOaCOaCPaCQaCRaCSaCTaCUaCVaCWaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaajxaekaekaCXaOualQaCZaDaaDbaDcaDdaDealQaDgaDfavMaBGaDhaAvaDiaDjaDkaDlaDmaDnayuaDoazEazEazEazEaDpaDqbRJaDsaDtaDuaBYaBYaBYaBYaBYaBYaBYaAEaaaazNaDvaDwaDwaDxaDzazNaaaaxoaxuaxvaDAaDBaDCaDDaDEaxvapNaDFaxxaxxaDGaATaDHaATaDIaxxaxxaDJaDKaxKaDLaxKayQamwayRacAaeUapTapTapTapTapTaDMaDNaDOaDPaDQaDRaDRaDRaDSayZaDTayZaDUaDVaDWaBdaBeaApallallallallallallallallallallallallallaDXallallallallawTaBtaDYaDZaEaaDZaEbaEcaEdaEdaEeaEfaEfaEfaEfaEfaEgaEhaEiaEiaEiaEiaEiaEiaBDaEjaEkaElaBDaBDaBDaafaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaEmaEmaEnalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaBGaEqaAvaEraEsaEtaEuaEvaEwayuaExazEaEyaEzaEzaEAaEBaECaEDaEEaEFaEGaEGaEGaEGaEGaEHaEIaAEaafazNaEJaDyaEKaELaEMazNaafaxoaENaEOaEPaEQaDCaERaESaETaEUaEVaxKaEWaEXaDJaDJaDJaEYaEZaxKaFaaFaaxKaDJaxKaFbaoeaFcacAaeUaeUaeUaeUaeUamXawvaFdaFeaFfaFgaFeaFhaFeaFiaFeaFjayZaFkaFlaFmaBdaFnaFoaFpaFqaFraFsaFtaFuaFuaFuaFuaFvaFwaFuaFuaFxaFyaFzaFAaBpaFBaFCaFDaFEaFFaFEaFGaFHaEfaEfaFIaEfaFJaFKaFLaEfaEiaFMaEiaFNaFOaFPaFQaFRaFSaFTaFUaFVaFWaFXaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaFZaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZalQalQaGaalQaEoalQaEoaGbaEoalQaEoalQaDgaEpavMaBGaGcaAvaAvaGdaGeaGfaGgaAvayuayuayuayuaGhazEazEaGiayuaGjaGkaBYaBYaBYaGlaBYaBYaBYaGmaAEaaaazNazNaGnaGoaGnazNazNaaaaxoaxuaxvaGpaGqaGraGsaGtaxvapNaGuaxKaGvaEXaDJaDJaDJaEYaGwaxKaAgaAgaxKaCsaxKaGxaGyaGzacAamXacAacAacAacAacAaGAaGBayZaGCaAmayZaGDayZaGEayZaGFayZaGGaGHaFmaBdaGIaGJaGKaGLaGMaGMaGNaGMaGMaGOaGMaGPaGQauwauwauwauwaGRaGSaGTaGUaGVamlaGWaGWaGWaGWaGXaEfaGYaGZaHaaHbaHcaHdaEfaHeaHfaEiaHgaHhaHiaHjaFRaHkaEjaEkaCTaHlaHmaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeZaHnaHnaHoalQaEoalQaEoalQaEoalQaEoalQaDgaEpavMaHpaHqaHraHsaHsaHtaHuaxaaHvaHwaHxaHyayuaHzazEazEaHAayuaHBaHCaBYaHDaHEaOwaHGaHHaHIaHJaAEaaaaafaaaaHKaHLaHKaaaaafaaaaxoaxuaxvaDCaHMaHNaHOaHPaxvapNasJaxKaHQaHRaDJaDJaDJaHSaHTaxKaaaaaaaHUaHVaHWaHXaHYbzZaIaaIbaHUaaaaaaaIcaIdaIeaIfayZaIgaAmaAmaAmaCxaAmaAmaAmayZaBdaIhaIiaBdaBdaApaIjaIkaIkaIlaImaInaIkaIoaIkaIpaIqaIpaIraIpaIsaGWaGWaItaGWaGWaGWaGWaIuaIvaGWaGXaEfaGZaIwaIxaIyaIzaIAaEfaIBaICaIDaIEaIFaIGaIHaIIaIJaBAaIKaFVaFWaILaFYaaaaaaaaaaaaaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaanTaekaekaCXaCYalQalQalQalQalQalQaIMalQaDgaINavMaBGaxaaIOaIPaIPaIPaIPaIPaIPaIPaIQaxaayuaIRaISaIRayuayuaITaIUaIVaADaADaADaADaIVaIWaIXaAEaIYaIZaIZaJaaJbaJaaIZaIZaJcaxoaJdaxvaJeaxvaJfaJfaJgaxvaJhaJiaxKaxKaxKaAgaDHaAgaxKaxKaxKaHUaHUaHUaJjaHYaHYaHYaHYaHYaJkaHUaHUaHUaIcaJlaIeaJmayZayZayZayZayZayZayZayZayZayZaJnaJoaJpaJqaJraJsaJtaJuaIkaJvaImaJwaJxaJwaIpaJyaJzaIpaJAaIpaJBaJCaJDaJEaJFaJFaJFaJGaJHaJIaGWaGXaEfaJJaIwaJKaIyaIzaJLaEfaJMaJNaJOaJPaJQaJRaJSaJTaJUaJVaJWaCTaHlaHmaFYaaaaafaafaafaafaafaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -6602,7 +6601,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaUFavMavMaBGaUGaUHaUIaUJaUKaULaUMaUNaTraTtaRTaUOaUPaUQaOcaOeaURaUSaUTaUUaUTaUVaUWaUVaUVaUVaUXaUYaOeaUZaVaaVbaVcaVdaVeaVfaVgaOcaVhaOsaViaVjaVkaVlaVlaQRaHYaHYaHYaHYaHYaVmaVnaVoaVpaVqaVraVsaVtaVuaVvaVwaVxaVyaVzaVAaVBaVCaVDaVsaVEaVFaVGaVHaVIaVJaVKaVLaVMaHYaHYaIkaVNaVOaVPaVQaOCaVRaVSaVQaODaPUaVTaVTaVUaVVaIpaUeaUeaUeaVWaUeaUeaUkaVXaIpaNwaUnaQhaQhaUpaQhaVYaNwaGWaVZaWaaWbaWcaWdaWeaWfaWfaWfaWfaWfaWfaWgaWhaWiaWiaWiaWiaWiaWjaWkaWlaWhaWmaWnaWoaWpaNRaWqaLDaafaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaWraWsatBaWsaxaaxaaRTaWtaWuaWvaWvaWvaWwaWxaWyaRTaWzaQEaUQaWAaWAaWAaWBaWCaWAaWDaWEaWFaWGaWHaWHaWIaWJaOeaWKaWLaWMaWNaWOaWPaWPaWQaWRaWRaWSaWSaWSaWSaWSaWTaOsaHYaHYaWUaWVaWWaWXaWYaWZaOtaXaaXbaXcaXdaXeaXfaXfaXgaXhaXiaXjaXkaXlaXmaXcaXnaXaaOtaWZaWYaXoaXpaWVaXqaHYaHYaRdaOCaXraXsaOCaOCaOCaXsaOCaODaOCaPUaPUaOCaOCaXtaXuaXvaUeaUeaUeaUeaXwaXxaIpaXyaXzaQhaXAaXBaXCaXzaXDaGWaXEaXFaXFaXGaXHaXIaXJaXKaXLaXJaXJaXJaXMaXNaXOaXPaXPaXPaXPaXPaXQaXRaXNaXSaXTaXUaXVaNRaXWaLDaaaaafaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavMavMaBGaxaaXXaTraXYaWvaWvaWvaXZaYaaTraRTaYbaYcaUQaWAaYdaYeaYfaYgaWAaYhaYiaYjaOeaYkaYlaYmaRZaOeaYnaYoaYpaYpaYpaYpaYqaYpaYpaYraYsaYsaYsaYtaYsaYuaYvaKAaKAaYwaYxaYxaYxaYxaYxaYxaYyaYzaYAaYBaXgaYCaYDaYDaYEaYFaYDaYCaXiaYGaYHaYIaYJaYHaYHaYHaYHaYHaYHaYKaKAaKAaIkaYLaYMaYNaYOaOCaOCaOCaYPaYQaYRaOCaYSaYTaYUaIpaIpaIpaYVaYWaYWaYWaIpaIpaIpaYXaQhaQhaYYaYZaZaaZbaYYaGWaZcaXFaZdaEfaZeaZfaZgaZhaZiaZjaTgaUuaZkaBDaZlaEjaZmaQqaQqaZmaEjaZnaBDaZoaZpaZqaROaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaZraNZaZsaRTaTtaZtaTtaTraZuaZvaZwaTtaRTaZxaZyaZzaWAaWAaWAaZAaZBaWAaZCaZDaZEaOeaYkaYlaYmaRZaOeaYnaYoaYpaZFaZGaZGaZGaZHaYpaZIaZJaZKaZLaYvaYvaYvaYvaHYaHYaZMaZNaZOaZPaZQaZRaZSaZTaZUaZVaZWaZXaYDaYDaZYaZZaZYaYDaYDbaababbacbadbaebafbagbahbaibajaYHaXqaHYaHYaIkaIkaIkaIkaIkbakaRdbakbalbamaIkaIkaIkaIkaIkbanbaobaobaobaobaobaobapbaobanaYYbaqbaqaYYbaraXFaXFaXFbanaZcaXFaZdaEfaEfaEfbasbatbasaEfbasaEfaEfaBDaBDbaubaubaubaubaubauaBDaBDbavaNRbawaROaNRaNRaRQaPdaPdaRQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMaZraNZaZsaRTaTtaZtaTtaTraZuaZvaZwaTtaRTaZxaZyaZzaWAaWAaWAaZAaZBaWAaZCaZDaZEaOeaYkaYlaYmaRZaOeaYnaYoaYpaZFaZGaZGaZGaZHaYpaZIaZJaZKaZLaYvaYvaYvaYvaHYaHYaZMaZNaZOaZPaZQaZRaZSaZTaZUaZVaZWaZXaYDaYDaZYaZZaZYaYDaYDbaababbacbadbaebafbagbahbaibajaYHaXqaHYaHYaIkaIkaIkaIkaIkbakaRdbakbalaIkaIkaIkaIkaIkaIkbanbaobaobaobaobaobaobapbaobanaYYbaqbaqaYYbaraXFaXFaXFbanaZcaXFaZdaEfaEfaEfbasbatbasaEfbasaEfaEfaBDaBDbaubaubaubaubaubauaBDaBDbavaNRbawaROaNRaNRaRQaPdaPdaRQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafaafaafaafaqpaqpavMavMavMavMavMavMavMavMaqpaqparpaQyaxaaRTaRTaRUaRTaRTaRTaRVaRTaRTaRTbaxbaybazaWAbaAbaBaZAbaCaWAbaDbaEbaDaOeaYkaYlaYmaRZaOeaYnaYoaYpaZGbaFbaFaZGbaFaYpaZIbaGbaHbaHbaIbaJbaKaYvbaLaHYaWUbXubaNbaObaPbaQbaQbaRbaSbaTaZWbaUaYDaYDaZYbaVaZYaYDaYDbaWbabbaXbaYbaZbbabbbbbcbajbbdaYHaXqbbecrtaGybbfaXFaXFaXFaXFaXFaXFaXFaXFbbgaXFaXFaXFaXFbbhaXFaXFaXFaXFaXFaXFaXFaXFbbfaXFaXFaXFaXFbaraXFaXFaXFbbibbjaXFaXFbbkaXFaXFaXFbblaXFaXFaXFaXFaXFbbhbbmaXFaXFaXFaXFaXFaXFbbfbbnaRNaNRbbobbpbbqbbraLDaLDaLDaQuaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavMavQavPavPavPavPavPavPavPavPavQavPbbsbbtaxabbuaRWbbvaWPaWPaWPbbwbbxbbyaOcbbzbbAbbBaWAaWAaWAbbCbbDaWAaOeaOeaOeaOeaYkaYlbbEbbFaOeaYnaYoaYpaZGbbGaZGbaFbbHaYpaZIbbIbaHbaHbaHbbJbbKaYvbbLaHYaWUbXvbbMbaObbNbbObbPbbQbbRbbSaZWbbTaZYaYDbbUbbVbbUaYDaZYbbWbabbbXbbYbbZbcabcbbbcbajbajaYHbccaHYaHYaGybbfaXFaXFaXFaXFaXFaXFaXFaXFbcdaXFaXFaXFaXFaXFaXFbcebcfbcfbcfbcgaXFaXFbbfaXFaXFaXFaXFbaraXFaXFbchaWbbciaWbaWbaWbaWbaWbaWbbcjaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbaWbbckbclbcmbcnbcnbcoaROaNRaNRbcpaPdaPdbcpaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafavMawZaxaawZaxbaxaaxaaxcawZaxaawZaxbaxabcqaHqbcrbcsbctbcrbcrbcrbcubcvaOcaOcaOcbcwaUQaWAaYdbcxbcybczaWAbcAbcBbcAaOeaOeaOebcCbcDaOcaYnaYoaYpbcEaZGbaFbcFbcGaYpaZIaYvbcHbaHbaHbcIbcJbcKbcLaHYaWUbXvbcMbaObbNbcNbcObcPbaSbaOaZWbcQbcRaYDbcSbcTbcUaYDbcVbcWbabbcXbcYbcZbdabdabdbbajbdcaYHbddbdecuAaGybbfaXFaXFbdfaXFbdgbdhbdhbdhbdibdhbdhbdhbdjaXFaXFaXFaXFaXFaXFbdkbdlbdmbbfaXFaXFaXFaXFbarbdnbdobdpbdqbdraXFaXFaXFaXFaXFbdsbdtaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFaXFbbfbdubdvbdwbdxaROaNRaNSaLDaLDaLDaLDaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/__DEFINES/clothing.dm b/code/__DEFINES/clothing.dm index c11a9acb068..6e9734c1fa5 100644 --- a/code/__DEFINES/clothing.dm +++ b/code/__DEFINES/clothing.dm @@ -80,3 +80,9 @@ #define THERMAL_PROTECTION_ARM_RIGHT 0.075 #define THERMAL_PROTECTION_HAND_LEFT 0.025 #define THERMAL_PROTECTION_HAND_RIGHT 0.025 + +//flags for female outfits: How much the game can safely "take off" the uniform without it looking weird + +#define NO_FEMALE_UNIFORM 0 +#define FEMALE_UNIFORM_FULL 1 +#define FEMALE_UNIFORM_TOP 2 \ No newline at end of file diff --git a/code/datums/spells/ethereal_jaunt.dm b/code/datums/spells/ethereal_jaunt.dm index ca5a143768b..dc098de63f3 100644 --- a/code/datums/spells/ethereal_jaunt.dm +++ b/code/datums/spells/ethereal_jaunt.dm @@ -82,7 +82,7 @@ ..() /obj/effect/dummy/spell_jaunt/relaymove(var/mob/user, direction) - if (!src.canmove || reappearing) return + if (!src.canmove || reappearing || !direction) return var/turf/newLoc = get_step(src,direction) if(!(newLoc.flags & NOJAUNT)) loc = newLoc diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index 313a3a76fbc..239228a2a0b 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -244,18 +244,18 @@ var/list/uplink_items = list() cost = 2 gamemodes = list(/datum/game_mode/nuclear) -/datum/uplink_item/ammo/bullstun - name = "Drum Magazine - 12g Stun Slug" - desc = "An additional 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're completely non-lethal would be lying." +/datum/uplink_item/ammo/bullbuck + name = "Drum Magazine - 12g Buckshot" + desc = "An additional 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy." item = /obj/item/ammo_box/magazine/m12g cost = 2 gamemodes = list(/datum/game_mode/nuclear) -/datum/uplink_item/ammo/bullbuck - name = "Drum Magazine - 12g Buckshot" - desc = "An alternative 8-round buckshot magazine for use in the Bulldog shotgun. Front towards enemy." - item = /obj/item/ammo_box/magazine/m12g/buckshot - cost = 2 +/datum/uplink_item/ammo/bullstun + name = "Drum Magazine - 12g Stun Slug" + desc = "An alternative 8-round stun slug magazine for use in the Bulldog shotgun. Saying that they're completely non-lethal would be lying." + item = /obj/item/ammo_box/magazine/m12g/stun + cost = 3 gamemodes = list(/datum/game_mode/nuclear) /datum/uplink_item/ammo/bulldragon diff --git a/code/datums/wires/alarm.dm b/code/datums/wires/alarm.dm index 55618670b32..e2fd697198d 100644 --- a/code/datums/wires/alarm.dm +++ b/code/datums/wires/alarm.dm @@ -11,7 +11,7 @@ var/const/AALARM_WIRE_AALARM = 16 /datum/wires/alarm/CanUse(var/mob/living/L) var/obj/machinery/alarm/A = holder - if(A.panel_open) + if(A.panel_open && A.buildstage == 2) return 1 return 0 diff --git a/code/game/gamemodes/changeling/changeling_power.dm b/code/game/gamemodes/changeling/changeling_power.dm index e7a1808c429..51e51392e59 100644 --- a/code/game/gamemodes/changeling/changeling_power.dm +++ b/code/game/gamemodes/changeling/changeling_power.dm @@ -61,7 +61,7 @@ if(req_stat < user.stat) user << "We are incapacitated." return 0 - if((user.status_flags & FAKEDEATH) && name!="Regenerate") + if((user.status_flags & FAKEDEATH) && name!="Revive") user << "We are incapacitated." return 0 if(c.geneticdamage > max_genetic_damage) diff --git a/code/game/gamemodes/changeling/powers/tiny_prick.dm b/code/game/gamemodes/changeling/powers/tiny_prick.dm index 177450f199c..2309d3ed850 100644 --- a/code/game/gamemodes/changeling/powers/tiny_prick.dm +++ b/code/game/gamemodes/changeling/powers/tiny_prick.dm @@ -174,6 +174,5 @@ obj/effect/proc_holder/changeling/sting/cryo add_logs(user, target, "stung", object="cryo sting") if(target.reagents) target.reagents.add_reagent("frostoil", 30) - target.reagents.add_reagent("ice", 30) feedback_add_details("changeling_powers","CS") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index df34865feeb..d97869e1a22 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -2,7 +2,7 @@ var/bomb_set /obj/machinery/nuclearbomb name = "nuclear fission explosive" - desc = "Uh oh. RUN!!!!" + desc = "You probably shouldn't stick around to see if this is armed." icon = 'icons/obj/stationobjs.dmi' icon_state = "nuclearbomb0" density = 1 @@ -17,6 +17,15 @@ var/bomb_set use_power = 0 var/previous_level = "" var/lastentered = "" + var/immobile = 0 //Not all nukes should be moved + +/obj/machinery/nuclearbomb/selfdestruct + name = "station self-destruct terminal" + desc = "For when it all gets too much to bear. Do not taunt." + icon = 'icons/obj/machines/bignuke.dmi' + anchored = 1 //stops it being moved + immobile = 1 //prevents it from ever being moved + layer = 4 /obj/machinery/nuclearbomb/process() if (src.timing) @@ -140,8 +149,10 @@ var/bomb_set src.timing = 0 bomb_set = 0 if (href_list["anchor"]) - if(!isinspace()) + if(!isinspace()&&(!immobile)) src.anchored = !( src.anchored ) + else if(immobile) + usr << "This device is immovable!" else usr << "There is nothing to anchor to!" src.add_fingerprint(usr) @@ -149,6 +160,7 @@ var/bomb_set if ((M.client && M.machine == src)) src.attack_hand(M) + /obj/machinery/nuclearbomb/ex_act(severity, target) return @@ -214,6 +226,21 @@ var/bomb_set return return +/* +This is here to make the tiles around the station mininuke change when it's armed. +*/ + +/obj/machinery/nuclearbomb/selfdestruct/proc/SetTurfs() + if(loc == initial(loc)) + var/text_icon_state = "[timing ? "rcircuitanim" : "gcircuit"]" + for(var/turf/simulated/floor/bluegrid/T in orange(src, 1)) + T.icon_state = text_icon_state + +/obj/machinery/nuclearbomb/selfdestruct/Topic() + ..() + SetTurfs() + + //==========DAT FUKKEN DISK=============== /obj/item/weapon/disk/nuclear diff --git a/code/game/gamemodes/wizard/rightandwrong.dm b/code/game/gamemodes/wizard/rightandwrong.dm index 0ca67b25a25..c0e34cfd3b9 100644 --- a/code/game/gamemodes/wizard/rightandwrong.dm +++ b/code/game/gamemodes/wizard/rightandwrong.dm @@ -1,7 +1,7 @@ //In this file: Summon Magic/Summon Guns/Summon Events /proc/rightandwrong(var/summon_type, var/mob/user, var/survivor_probability) //0 = Summon Guns, 1 = Summon Magic - var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","uzi","crossbow","saw","car","boltaction","speargun") + var/list/gunslist = list("taser","egun","laser","revolver","detective","c20r","nuclear","deagle","gyrojet","pulse","suppressed","cannon","doublebarrel","shotgun","combatshotgun","bulldog","mateba","sabr","crossbow","saw","car","boltaction","speargun") var/list/magiclist = list("fireball","smoke","blind","mindswap","forcewall","knock","horsemask","charge", "summonitem", "wandnothing", "wanddeath", "wandresurrection", "wandpolymorph", "wandteleport", "wanddoor", "wandfireball", "staffchange", "staffhealing", "armor", "scrying", "staffdoor", "special") var/list/magicspeciallist = list("staffchange","staffanimation", "wandbelt", "contract", "staffchaos") diff --git a/code/game/jobs/job/science.dm b/code/game/jobs/job/science.dm index 1d0f43c62e3..27451f9dedd 100644 --- a/code/game/jobs/job/science.dm +++ b/code/game/jobs/job/science.dm @@ -81,6 +81,7 @@ Roboticist default_pda = /obj/item/device/pda/roboticist default_headset = /obj/item/device/radio/headset/headset_sci + default_pda_slot = slot_l_store access = list(access_robotics, access_tox, access_tox_storage, access_tech_storage, access_morgue, access_research, access_mineral_storeroom, access_xenobiology, access_genetics) minimal_access = list(access_robotics, access_tech_storage, access_morgue, access_research, access_mineral_storeroom) @@ -89,4 +90,4 @@ Roboticist H.equip_to_slot_or_del(new /obj/item/clothing/under/rank/roboticist(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sneakers/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/suit/toggle/labcoat(H), slot_wear_suit) - H.equip_to_slot_or_del(new /obj/item/weapon/storage/toolbox/mechanical(H), slot_l_hand) \ No newline at end of file + H.equip_to_slot_or_del(new /obj/item/weapon/storage/belt/utility/full(H), slot_belt) \ No newline at end of file diff --git a/code/game/machinery/alarm.dm b/code/game/machinery/alarm.dm index 8623d0a7fc4..ed795747706 100644 --- a/code/game/machinery/alarm.dm +++ b/code/game/machinery/alarm.dm @@ -664,10 +664,7 @@ table tr:first-child th:first-child { border: none;} if(panel_open) switch(buildstage) if(2) - if(wires.wires_status == (2 ** wires.wire_count) - 1) // All wires cut - icon_state = "alarm_b2" - else - icon_state = "alarmx" + icon_state = "alarmx" if(1) icon_state = "alarm_b2" if(0) @@ -773,7 +770,7 @@ table tr:first-child th:first-child { border: none;} /obj/machinery/alarm/attackby(obj/item/W as obj, mob/user as mob) switch(buildstage) if(2) - if(istype(W, /obj/item/weapon/wirecutters) && wires.wires_status == (2 ** wires.wire_count) - 1) //this checks for all wires to be cut, disregard the ammount of wires, binary fuckery with the wires_status + if(istype(W, /obj/item/weapon/wirecutters) && panel_open && (wires.wires_status == 27 || wires.wires_status == 31)) //this checks for all wires to be cut, except the syphon wire which is optional. playsound(src.loc, 'sound/items/Wirecutter.ogg', 50, 1) user << "You cut the final wires." var/obj/item/stack/cable_coil/cable = new /obj/item/stack/cable_coil( src.loc ) @@ -803,12 +800,12 @@ table tr:first-child th:first-child { border: none;} user << "Access denied." return if(1) - if(istype(W, /obj/item/weapon/crowbar) && wires.wires_status == (2 ** wires.wire_count) - 1) + if(istype(W, /obj/item/weapon/crowbar)) user.visible_message("[user.name] removes the electronics from [src.name].",\ "You start prying out the circuit.") playsound(src.loc, 'sound/items/Crowbar.ogg', 50, 1) if (do_after(user, 20)) - if (buildstage ==1) + if (buildstage == 1) user <<"You remove the air alarm electronics." new /obj/item/weapon/airalarm_electronics( src.loc ) playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) @@ -828,6 +825,11 @@ table tr:first-child th:first-child { border: none;} cable.use(5) user << "You wire the air alarm." wires.wires_status = 0 + aidisabled = 0 + locked = 1 + mode = 1 + shorted = 0 + post_alert(0) buildstage = 2 update_icon() return diff --git a/code/game/machinery/computer/communications.dm b/code/game/machinery/computer/communications.dm index 0d68cace971..710b1db4bd8 100644 --- a/code/game/machinery/computer/communications.dm +++ b/code/game/machinery/computer/communications.dm @@ -19,7 +19,6 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 var/aistate = STATE_DEFAULT var/message_cooldown = 0 var/ai_message_cooldown = 0 - var/centcom_message_cooldown = 0 var/tmp_alertlevel = 0 var/const/STATE_DEFAULT = 1 var/const/STATE_CALLSHUTTLE = 2 @@ -113,6 +112,8 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if("announce") if(src.authenticated==2 && !message_cooldown) make_announcement(usr) + else if (src.authenticated==2 && message_cooldown) + usr << "Intercomms recharging. Please stand by." if("callshuttle") src.state = STATE_DEFAULT @@ -203,7 +204,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(CM.cooldownLeft()) usr << "Arrays recycling. Please stand by." return - var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to Centcom via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to Centcomm.", "") if(!input || !(usr in view(1,src))) return Centcomm_announce(input, usr) @@ -218,18 +219,33 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 if(CM.cooldownLeft()) usr << "Arrays recycling. Please stand by." return - var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "To abort, send an empty message.", "") + var/input = stripped_input(usr, "Please choose a message to transmit to \[ABNORMAL ROUTING COORDINATES\] via quantum entanglement. Please be aware that this process is very expensive, and abuse will lead to... termination. Transmission does not guarantee a response.", "Send a message to /??????/.", "") if(!input || !(usr in view(1,src))) return Syndicate_announce(input, usr) usr << "Message transmitted." log_say("[key_name(usr)] has made a Syndicate announcement: [input]") + CM.lastTimeUsed = world.time if("RestoreBackup") usr << "Backup routing data restored!" src.emagged = 0 src.updateDialog() + if("nukerequest") //When there's no other way + if(src.authenticated==2) + if(CM.cooldownLeft()) + usr << "Arrays recycling. Please stand by." + return + var/input = stripped_input(usr, "Please enter the reason for requesting the nuclear self-destruct codes. Misuse of the nuclear request system will not be tolerated under any circumstances. Transmission does not guarantee a response.", "Self Destruct Code Request.","") + if(!input || !(usr in view(1,src))) + return + Nuke_request(input, usr) + usr << "Request sent." + log_say("[key_name(usr)] has requested the nuclear codes from Centcomm") + priority_announce("The codes for the on-station nuclear self-destruct have been requested by [usr]. Confirmation or denial of this request will be sent shortly.", "Nuclear Self Destruct Codes Requested",'sound/AI/commandreport.ogg') + + CM.lastTimeUsed = world.time // AI interface @@ -371,6 +387,7 @@ var/const/CALL_SHUTTLE_REASON_LENGTH = 12 dat += "
\[ Make a Captain's Announcement \]" dat += "
\[ Change Alert Level \]" dat += "
\[ Emergency Maintenance Access \]" + dat += "
\[ Request Nuclear Authentication Codes \]" if(src.emagged == 0) dat += "
\[ Send Message to Centcom \]" else diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index f418d8daeb2..616cfbe650c 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -344,6 +344,8 @@ obj/mecha/proc/can_use(mob/user) return ..() /obj/mecha/relaymove(mob/user,direction) + if(!direction) + return if(user != src.occupant) //While not "realistic", this piece is player friendly. user.forceMove(get_turf(src)) user << "You climb out from [src]" diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm deleted file mode 100644 index 4a6920fa50b..00000000000 --- a/code/game/objects/effects/effect_system.dm +++ /dev/null @@ -1,1055 +0,0 @@ -/* This is an attempt to make some easily reusable "particle" type effect, to stop the code -constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one -defined, then set up when it is created with New(). Then this same system can just be reused each time -it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam -would spawn and follow the beaker, even if it is carried or thrown. -*/ - - -/obj/effect/effect - name = "effect" - icon = 'icons/effects/effects.dmi' - mouse_opacity = 0 - unacidable = 1//So effect are not targeted by alien acid. - pass_flags = PASSTABLE | PASSGRILLE - -/obj/effect/effect/water - name = "water" - icon = 'icons/effects/effects.dmi' - icon_state = "extinguish" - var/life = 15.0 - mouse_opacity = 0 - -/obj/effect/effect/smoke - name = "smoke" - icon = 'icons/effects/water.dmi' - icon_state = "smoke" - opacity = 1 - anchored = 0.0 - mouse_opacity = 0 - var/amount = 8.0 - -/obj/effect/proc/delete() - loc = null - if(reagents) - reagents.delete() - return - -/datum/effect/effect/proc/fadeOut(var/atom/A, var/frames = 16) - if(A.alpha == 0) //Handle already transparent case - return - if(frames == 0) - frames = 1 //We will just assume that by 0 frames, the coder meant "during one frame". - var/step = A.alpha / frames - for(var/i = 0, i < frames, i++) - A.alpha -= step - sleep(world.tick_lag) - return - -/obj/effect/effect/water/New() - ..() - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX - spawn( 70 ) - delete() - return - return - -/obj/effect/effect/water/Move(turf/newloc) - //var/turf/T = src.loc - //if (istype(T, /turf)) - // T.firelevel = 0 //TODO: FIX - if (--src.life < 1) - //SN src = null - delete() - if(newloc.density) - return 0 - .=..() - -/obj/effect/effect/water/Bump(atom/A) - if(reagents) - reagents.reaction(A) - return ..() - - -/datum/effect/effect/system - var/number = 3 - var/cardinals = 0 - var/turf/location - var/atom/holder - var/setup = 0 - -/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - setup = 1 - -/datum/effect/effect/system/proc/attach(atom/atom) - holder = atom - -/datum/effect/effect/system/proc/start() - - -///////////////////////////////////////////// -// GENERIC STEAM SPREAD SYSTEM - -//Usage: set_up(number of bits of steam, use North/South/East/West only, spawn location) -// The attach(atom/atom) proc is optional, and can be called to attach the effect -// to something, like a smoking beaker, so then you can just call start() and the steam -// will always spawn at the items location, even if it's moved. - -/* Example: -var/datum/effect/system/steam_spread/steam = new /datum/effect/system/steam_spread() -- creates new system -steam.set_up(5, 0, mob.loc) -- sets up variables -OPTIONAL: steam.attach(mob) -steam.start() -- spawns the effect -*/ -///////////////////////////////////////////// -/obj/effect/effect/steam - name = "steam" - icon = 'icons/effects/effects.dmi' - icon_state = "extinguish" - density = 0 - -/datum/effect/effect/system/steam_spread - -/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - -/datum/effect/effect/system/steam_spread/start() - var/i = 0 - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - -/datum/effect/effect/system/spark_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location) - src.total_sparks++ - var/direction - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - -/datum/effect/effect/system/lightning_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/sparks/electricity/sparks = new /obj/effect/effect/sparks/electricity(src.location) - src.total_sparks++ - var/direction - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 10) - n = 10 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - - -/datum/effect/effect/system/harmless_smoke_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/harmless_smoke/smoke = new /obj/effect/effect/harmless_smoke(src.location) - src.total_smoke++ - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 20) - n = 20 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - -/datum/effect/effect/system/bad_smoke_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/bad_smoke/smoke = new /obj/effect/effect/bad_smoke(src.location) - src.total_smoke++ - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i 20) - n = 20 - number = n - cardinals = c - carry.copy_to(chemholder, carry.total_volume) - - - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - - if(!silent) - var/contained = "" - for(var/reagent in carry.reagent_list) - contained += " [reagent] " - if(contained) - contained = "\[[contained]\]" - var/area/A = get_area(location) - - var/where = "[A.name] | [location.x], [location.y]" - var/whereLink = "[where]" - - if(carry.my_atom.fingerprintslast) - var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) - var/more = "" - if(M) - more = "(?)" - message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) - log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") - else - message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) - log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") - -/datum/effect/effect/system/chem_smoke_spread/start() - var/i = 0 - - var/color = mix_color_from_reagents(chemholder.reagents.reagent_list) - - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/chem_smoke/smoke = new /obj/effect/effect/chem_smoke(src.location) - src.total_smoke++ - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - - if(chemholder.reagents.total_volume != 1) // can't split 1 very well - chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / number) // copy reagents to each smoke, divide evenly - - if(color) - smoke.color = color // give the smoke color, if it has any to begin with - else - // if no color, just use the old smoke icon - smoke.icon = 'icons/effects/96x96.dmi' - smoke.icon_state = "smoke" - - for(i=0, i 20) - n = 20 - number = n - cardinals = c - if(istype(loca, /turf/)) - location = loca - else - location = get_turf(loca) - if(direct) - direction = direct - - -/datum/effect/effect/system/sleep_smoke_spread/start() - var/i = 0 - for(i=0, i 20) - return - spawn(0) - if(holder) - src.location = get_turf(holder) - var/obj/effect/effect/sleep_smoke/smoke = new /obj/effect/effect/sleep_smoke(src.location) - src.total_smoke++ - var/direction = src.direction - if(!direction) - if(src.cardinals) - direction = pick(cardinal) - else - direction = pick(alldirs) - for(i=0, i= 1) - M.do_attack_animation(src) - M << "You smash apart the foam wall." - qdel(src) - return - -/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user) - ..(user, 1) - if(prob(75 - metal*25)) - user.visible_message("[user] smashes through the foamed metal.", \ - "You smash through the metal foam wall.") - qdel(src) - return 1 - -/obj/structure/foamedmetal/attack_hand(var/mob/user) - user << "You hit the metal foam but bounce off it." - -/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user) - - if (istype(I, /obj/item/weapon/grab)) - var/obj/item/weapon/grab/G = I - G.affecting.loc = src.loc - visible_message("[G.assailant] smashes [G.affecting] through the foamed metal wall.") - qdel(I) - qdel(src) - return - - if(prob(I.force*20 - metal*25)) - user.visible_message("[user] smashes through the foamed metal.", \ - "You smash through the foamed metal with \the [I].") - qdel(src) - else - user << "You hit the metal foam to no effect." - -/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5) - return !density - -/obj/structure/foamedmetal/CanAtmosPass() - return !density - -/datum/effect/effect/system/reagents_explosion - var/amount // TNT equivalent - var/flashing = 0 // does explosion creates flash effect? - var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion - -/datum/effect/effect/system/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0) - amount = amt - if(istype(loc, /turf/)) - location = loc - else - location = get_turf(loc) - - flashing = flash - flashing_factor = flash_fact - - return - -/datum/effect/effect/system/reagents_explosion/start() - if (amount <= 2) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(2, 1, location) - s.start() - - location.visible_message("The solution violently explodes!", \ - "You hear an explosion!") - for(var/mob/M in viewers(1, location)) - if (prob (50 * amount)) - M << "The explosion knocks you down." - M.Weaken(rand(1,5)) - return - else - var/devastation = -1 - var/heavy = -1 - var/light = -1 - var/flash = -1 - - // Clamp all values to MAX_EXPLOSION_RANGE - if (round(amount/12) > 0) - devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12)) - - if (round(amount/6) > 0) - heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6)) - - if (round(amount/3) > 0) - light = min (MAX_EX_LIGHT_RANGE, light + round(amount/3)) - - if (flash && flashing_factor) - flash += (round(amount/4) * flashing_factor) - - location.visible_message("The solution violently explodes!", \ - "You hear an explosion!") - - explosion(location, devastation, heavy, light, flash) diff --git a/code/game/objects/effects/effect_system/effect_system.dm b/code/game/objects/effects/effect_system/effect_system.dm new file mode 100644 index 00000000000..f085bf60e04 --- /dev/null +++ b/code/game/objects/effects/effect_system/effect_system.dm @@ -0,0 +1,51 @@ +/* This is an attempt to make some easily reusable "particle" type effect, to stop the code +constantly having to be rewritten. An item like the jetpack that uses the ion_trail_follow system, just has one +defined, then set up when it is created with New(). Then this same system can just be reused each time +it needs to create more trails.A beaker could have a steam_trail_follow system set up, then the steam +would spawn and follow the beaker, even if it is carried or thrown. +*/ + + +/obj/effect/effect + name = "effect" + icon = 'icons/effects/effects.dmi' + mouse_opacity = 0 + unacidable = 1//So effect are not targeted by alien acid. + pass_flags = PASSTABLE | PASSGRILLE + +/obj/effect/proc/delete() + loc = null + if(reagents) + reagents.delete() + return + +/datum/effect/effect/proc/fadeOut(var/atom/A, var/frames = 16) + if(A.alpha == 0) //Handle already transparent case + return + if(frames == 0) + frames = 1 //We will just assume that by 0 frames, the coder meant "during one frame". + var/step = A.alpha / frames + for(var/i = 0, i < frames, i++) + A.alpha -= step + sleep(world.tick_lag) + return + +/datum/effect/effect/system + var/number = 3 + var/cardinals = 0 + var/turf/location + var/atom/holder + var/setup = 0 + +/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) + if(n > 10) + n = 10 + number = n + cardinals = c + location = loc + setup = 1 + +/datum/effect/effect/system/proc/attach(atom/atom) + holder = atom + +/datum/effect/effect/system/proc/start() \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_foam.dm b/code/game/objects/effects/effect_system/effects_foam.dm new file mode 100644 index 00000000000..b5f2e0abbab --- /dev/null +++ b/code/game/objects/effects/effect_system/effects_foam.dm @@ -0,0 +1,250 @@ +// Foam +// Similar to smoke, but spreads out more + +/obj/effect/effect/foam + name = "foam" + icon_state = "foam" + opacity = 0 + anchored = 1 + density = 0 + layer = TURF_LAYER + 0.1 + mouse_opacity = 0 + var/amount = 3 + var/expand = 1 + animate_movement = 0 + var/metal = 0 + var/lifetime = 6 + + +/obj/effect/effect/foam/metal/aluminium + name = "aluminium foam" + metal = 1 + icon_state = "mfoam" + + +/obj/effect/effect/foam/metal/iron + name = "iron foam" + metal = 2 + + +/obj/effect/effect/foam/New(loc) + ..(loc) + create_reagents(1000) //limited by the size of the reagent holder anyway. + SSobj.processing.Add(src) + playsound(src, 'sound/effects/bubbles2.ogg', 80, 1, -3) + + +/obj/effect/effect/foam/metal/New(loc) + ..() + var/obj/structure/foamedmetal/M = new(src.loc) + M.metal = metal + M.updateicon() + + +/obj/effect/effect/foam/proc/kill_foam() + SSobj.processing.Remove(src) + flick("[icon_state]-disolve", src) + spawn(5) + delete() + + +/obj/effect/effect/foam/process() + lifetime-- + if(lifetime < 1) + kill_foam() + if(--amount < 0) + return + for(var/atom/M in view(1,src)) + if(M == src) + continue + reagents.reaction(M, TOUCH) + spread_foam() + + +/obj/effect/effect/foam/Crossed(var/atom/movable/AM) + if(istype(AM, /mob/living/carbon)) + var/mob/living/carbon/M = AM + M.slip(5, 2, src) + + +/obj/effect/effect/foam/metal/Crossed(var/atom/movable/AM) + return + + +/obj/effect/effect/foam/proc/spread_foam() + for(var/direction in cardinal) + var/turf/T = get_step(src,direction) + if(!T) + continue + + if(!T.Enter(src)) + continue + + var/obj/effect/effect/foam/foundfoam = locate() in T //Don't spread foam where there's already foam! + if(foundfoam) + continue + + var/obj/effect/effect/foam/F = new type(T) + F.amount = amount + reagents.copy_to(F, (reagents.total_volume)) + F.color = color + + +/obj/effect/effect/foam/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + if(prob(max(0, exposed_temperature - 475))) //foam dissolves when heated + kill_foam() + + +/obj/effect/effect/foam/metal/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) + return + + +/////////////////////////////////////////////// +//FOAM EFFECT DATUM +/datum/effect/effect/system/foam_spread + var/amount = 5 // the size of the foam spread. + var/obj/chemholder + var/obj/effect/effect/foam/foamtype = /obj/effect/effect/foam + var/metal = 0 + + +/datum/effect/effect/system/foam_spread/metal + foamtype = /obj/effect/effect/foam/metal + + +/datum/effect/effect/system/foam_spread/New() + ..() + chemholder = new/obj() + var/datum/reagents/R = new/datum/reagents(1000) + chemholder.reagents = R + R.my_atom = chemholder + + +/datum/effect/effect/system/foam_spread/set_up(amt=5, loca, var/datum/reagents/carry = null) + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + + amount = round(sqrt(amt / 3), 1) + carry.copy_to(chemholder, carry.total_volume) + + +/datum/effect/effect/system/foam_spread/metal/set_up(amt=5, loca, var/datum/reagents/carry = null, var/metaltype) + ..() + metal = metaltype + +/datum/effect/effect/system/foam_spread/start() + var/obj/effect/effect/foam/foundfoam = locate() + if(foundfoam)//If there was already foam where we start, we add our foaminess to it. + foundfoam.amount += amount + else + var/obj/effect/effect/foam/F = new foamtype(src.location) + var/foamcolor = mix_color_from_reagents(chemholder.reagents.reagent_list) + chemholder.reagents.copy_to(F, chemholder.reagents.total_volume) + F.color = foamcolor + F.amount = amount + F.metal = metal + + +////////////////////////////////////////////////////////// +// FOAM STRUCTURE. Formed by metal foams. Dense and opaque, but easy to break +/obj/structure/foamedmetal + icon = 'icons/effects/effects.dmi' + icon_state = "metalfoam" + density = 1 + opacity = 1 // changed in New() + anchored = 1 + unacidable = 1 + name = "foamed metal" + desc = "A lightweight foamed metal wall." + gender = PLURAL + var/metal = 1 // 1=aluminium, 2=iron + +/obj/structure/foamedmetal/New() + ..() + air_update_turf(1) + + +/obj/structure/foamedmetal/Destroy() + density = 0 + air_update_turf(1) + ..() + + +/obj/structure/foamedmetal/Move() + var/turf/T = loc + ..() + move_update_air(T) + + +/obj/structure/foamedmetal/proc/updateicon() + if(metal == 1) + icon_state = "metalfoam" + else + icon_state = "ironfoam" + + +/obj/structure/foamedmetal/ex_act(severity, target) + qdel(src) + + +/obj/structure/foamedmetal/blob_act() + qdel(src) + + +/obj/structure/foamedmetal/bullet_act() + ..() + if(metal==1 || prob(50)) + qdel(src) + + +/obj/structure/foamedmetal/attack_paw(var/mob/user) + attack_hand(user) + return + + +/obj/structure/foamedmetal/attack_animal(var/mob/living/simple_animal/M) + if(M.environment_smash >= 1) + M.do_attack_animation(src) + M << "You smash apart the foam wall." + qdel(src) + return + + +/obj/structure/foamedmetal/attack_hulk(mob/living/carbon/human/user) + ..(user, 1) + if(prob(75 - metal*25)) + user.visible_message("[user] smashes through the foamed metal.", \ + "You smash through the metal foam wall.") + qdel(src) + return 1 + + +/obj/structure/foamedmetal/attack_hand(var/mob/user) + user << "You hit the metal foam but bounce off it." + + +/obj/structure/foamedmetal/attackby(var/obj/item/I, var/mob/user) + if (istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + G.affecting.loc = src.loc + visible_message("[G.assailant] smashes [G.affecting] through the foamed metal wall.") + qdel(I) + qdel(src) + return + + if(prob(I.force*20 - metal*25)) + user.visible_message("[user] smashes through the foamed metal.", \ + "You smash through the foamed metal with \the [I].") + qdel(src) + else + user << "You hit the metal foam to no effect." + + +/obj/structure/foamedmetal/CanPass(atom/movable/mover, turf/target, height=1.5) + return !density + + +/obj/structure/foamedmetal/CanAtmosPass() + return !density \ No newline at end of file diff --git a/code/game/objects/effects/effect_system/effects_other.dm b/code/game/objects/effects/effect_system/effects_other.dm new file mode 100644 index 00000000000..05994439ca0 --- /dev/null +++ b/code/game/objects/effects/effect_system/effects_other.dm @@ -0,0 +1,105 @@ + +///////////////////////////////////////////// +//////// Attach an Ion trail to any object, that spawns when it moves (like for the jetpack) +/// just pass in the object to attach it to in set_up +/// Then do start() to start it and stop() to stop it, obviously +/// and don't call start() in a loop that will be repeated otherwise it'll get spammed! +///////////////////////////////////////////// + +/obj/effect/effect/ion_trails + name = "ion trails" + icon_state = "ion_trails" + anchored = 1.0 + +/datum/effect/effect/system/ion_trail_follow + var/turf/oldposition + var/processing = 1 + var/on = 1 + +/datum/effect/effect/system/ion_trail_follow/set_up(atom/atom) + attach(atom) + + +/datum/effect/effect/system/ion_trail_follow/start() //Whoever is responsible for this abomination of code should become an hero + if(!src.on) + src.on = 1 + src.processing = 1 + if(src.processing) + src.processing = 0 + var/turf/T = get_turf(src.holder) + if(T != src.oldposition) + if(!has_gravity(T)) + var/obj/effect/effect/ion_trails/I = new /obj/effect/effect/ion_trails(src.oldposition) + I.dir = src.holder.dir + flick("ion_fade", I) + I.icon_state = "blank" + spawn( 20 ) + if(I) + I.delete() + src.oldposition = T + spawn(2) + if(src.on) + src.processing = 1 + src.start() + +/datum/effect/effect/system/ion_trail_follow/proc/stop() + src.processing = 0 + src.on = 0 + oldposition = null + + + +//Reagent-based explosion effect +/datum/effect/effect/system/reagents_explosion + var/amount // TNT equivalent + var/flashing = 0 // does explosion creates flash effect? + var/flashing_factor = 0 // factor of how powerful the flash effect relatively to the explosion + +/datum/effect/effect/system/reagents_explosion/set_up (amt, loc, flash = 0, flash_fact = 0) + amount = amt + if(istype(loc, /turf/)) + location = loc + else + location = get_turf(loc) + + flashing = flash + flashing_factor = flash_fact + + return + +/datum/effect/effect/system/reagents_explosion/start() + if (amount <= 2) + var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread + s.set_up(2, 1, location) + s.start() + + location.visible_message("The solution violently explodes!", \ + "You hear an explosion!") + for(var/mob/M in viewers(1, location)) + if (prob (50 * amount)) + M << "The explosion knocks you down." + M.Weaken(rand(1,5)) + return + else + var/devastation = -1 + var/heavy = -1 + var/light = -1 + var/flash = -1 + + // Clamp all values to MAX_EXPLOSION_RANGE + if (round(amount/12) > 0) + devastation = min (MAX_EX_DEVESTATION_RANGE, devastation + round(amount/12)) + + if (round(amount/6) > 0) + heavy = min (MAX_EX_HEAVY_RANGE, heavy + round(amount/6)) + + if (round(amount/3) > 0) + light = min (MAX_EX_LIGHT_RANGE, light + round(amount/3)) + + if (flash && flashing_factor) + flash += (round(amount/4) * flashing_factor) + + location.visible_message("The solution violently explodes!", \ + "You hear an explosion!") + + explosion(location, devastation, heavy, light, flash) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm new file mode 100644 index 00000000000..efca03256f6 --- /dev/null +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -0,0 +1,414 @@ +///////////////////////////////////////////// +//// SMOKE SYSTEMS +// direct can be optionally added when set_up, to make the smoke always travel in one direction +// in case you wanted a vent to always smoke north for example +///////////////////////////////////////////// + +/obj/effect/effect/smoke + name = "smoke" + icon = 'icons/effects/water.dmi' + icon_state = "smoke" + opacity = 1 + anchored = 0.0 + mouse_opacity = 0 + var/amount = 8.0 + +/obj/effect/effect/harmless_smoke + name = "smoke" + icon_state = "smoke" + opacity = 1 + anchored = 0.0 + mouse_opacity = 0 + var/amount = 6.0 + //Remove this bit to use the old smoke + icon = 'icons/effects/96x96.dmi' + pixel_x = -32 + pixel_y = -32 + +/obj/effect/effect/harmless_smoke/New() + ..() + spawn (100) + delete() + return + +/obj/effect/effect/harmless_smoke/Move() + ..() + return + +/datum/effect/effect/system/harmless_smoke_spread + var/total_smoke = 0 // To stop it being spammed and lagging! + var/direction + +/datum/effect/effect/system/harmless_smoke_spread/set_up(n = 5, c = 0, loca, direct) + if(n > 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + if(direct) + direction = direct + + +/datum/effect/effect/system/harmless_smoke_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/harmless_smoke/smoke = new /obj/effect/effect/harmless_smoke(src.location) + src.total_smoke++ + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 20) + n = 20 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + if(direct) + direction = direct + +/datum/effect/effect/system/bad_smoke_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/bad_smoke/smoke = new /obj/effect/effect/bad_smoke(src.location) + src.total_smoke++ + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 20) + n = 20 + number = n + cardinals = c + carry.copy_to(chemholder, carry.total_volume) + + + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + + if(direct) + direction = direct + + if(!silent) + var/contained = "" + for(var/reagent in carry.reagent_list) + contained += " [reagent] " + if(contained) + contained = "\[[contained]\]" + var/area/A = get_area(location) + + var/where = "[A.name] | [location.x], [location.y]" + var/whereLink = "[where]" + + if(carry.my_atom.fingerprintslast) + var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) + var/more = "" + if(M) + more = "(?)" + message_admins("A chemical smoke reaction has taken place in ([whereLink])[contained]. Last associated key is [carry.my_atom.fingerprintslast][more].", 0, 1) + log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") + else + message_admins("A chemical smoke reaction has taken place in ([whereLink]). No associated key.", 0, 1) + log_game("A chemical smoke reaction has taken place in ([where])[contained]. No associated key.") + + +/datum/effect/effect/system/chem_smoke_spread/start() + var/i = 0 + + var/color = mix_color_from_reagents(chemholder.reagents.reagent_list) + + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/chem_smoke/smoke = new /obj/effect/effect/chem_smoke(src.location) + src.total_smoke++ + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + + if(chemholder.reagents.total_volume != 1) // can't split 1 very well + chemholder.reagents.copy_to(smoke, chemholder.reagents.total_volume / number) // copy reagents to each smoke, divide evenly + + if(color) + smoke.color = color // give the smoke color, if it has any to begin with + else + // if no color, just use the old smoke icon + smoke.icon = 'icons/effects/96x96.dmi' + smoke.icon_state = "smoke" + + for(i=0, i 20) + n = 20 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + if(direct) + direction = direct + + +/datum/effect/effect/system/sleep_smoke_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/sleep_smoke/smoke = new /obj/effect/effect/sleep_smoke(src.location) + src.total_smoke++ + var/direction = src.direction + if(!direction) + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + +/datum/effect/effect/system/spark_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/sparks/sparks = new /obj/effect/effect/sparks(src.location) + src.total_sparks++ + var/direction + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 10) + n = 10 + number = n + cardinals = c + if(istype(loca, /turf/)) + location = loca + else + location = get_turf(loca) + +/datum/effect/effect/system/lightning_spread/start() + var/i = 0 + for(i=0, i 20) + return + spawn(0) + if(holder) + src.location = get_turf(holder) + var/obj/effect/effect/sparks/electricity/sparks = new /obj/effect/effect/sparks/electricity(src.location) + src.total_sparks++ + var/direction + if(src.cardinals) + direction = pick(cardinal) + else + direction = pick(alldirs) + for(i=0, i 10) + n = 10 + number = n + cardinals = c + location = loc + +/datum/effect/effect/system/steam_spread/start() + var/i = 0 + for(i=0, i[AM] sets off \icon[src] [src]!") + triggermine(AM, minepayload) - if(istype(M, /mob/living/carbon/human) || istype(M, /mob/living/carbon/monkey)) - for(var/mob/O in viewers(world.view, src.loc)) - O << "[M] triggered the \icon[src] [src]" - triggered = 1 - call(src,triggerproc)(M) - -/obj/effect/mine/proc/triggerrad(obj) +/obj/effect/mine/proc/triggermine(mob/victim, var/triggertype) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(3, 1, src) s.start() - obj:radiation += 50 - randmutb(obj) - domutcheck(obj) - qdel(src) -/obj/effect/mine/proc/triggerstun(obj) - if(ismob(obj)) - var/mob/M = obj - M.Stun(30) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - qdel(src) + switch(triggertype) + if("explosive") + explosion(loc, 0, 1, 2, 3) + if("triggerkick") + if(isliving(victim) && victim.client) + victim << "You have been kicked FOR NO REISIN!" + del(victim.client) + if("triggerplasma") + atmos_spawn_air(SPAWN_TOXINS, 360) + if("triggern2o") + atmos_spawn_air(SPAWN_N2O, 360) + if("triggerstun") + if(isliving(victim)) + victim.Weaken(8) -/obj/effect/mine/proc/triggern2o(obj) - atmos_spawn_air("n2o", 360) - qdel(src) -/obj/effect/mine/proc/triggerplasma(obj) - atmos_spawn_air(SPAWN_HEAT | SPAWN_TOXINS, 360) + triggered = 1 qdel(src) -/obj/effect/mine/proc/triggerkick(obj) - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - del(obj:client) - qdel(src) - -/obj/effect/mine/proc/explode(obj) - explosion(loc, 0, 1, 2, 3) - qdel(src) - -/obj/effect/mine/dnascramble - name = "radiation mine" - icon_state = "uglymine" - triggerproc = "triggerrad" - /obj/effect/mine/plasma name = "plasma mine" icon_state = "uglymine" - triggerproc = "triggerplasma" - -/obj/effect/mine/kick - name = "kick mine" - icon_state = "uglymine" - triggerproc = "triggerkick" + minepayload = "triggerplasma" /obj/effect/mine/n2o name = "\improper N2O mine" icon_state = "uglymine" - triggerproc = "triggern2o" + minepayload = "triggern2o" /obj/effect/mine/stun name = "stun mine" icon_state = "uglymine" - triggerproc = "triggerstun" \ No newline at end of file + minepayload = "triggerstun" + +/obj/effect/mine/kickmine + name = "kick mine" + icon_state = "uglymine" + minepayload = "triggerkick" \ No newline at end of file diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index f29d9f39c9e..538e98cb003 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -61,7 +61,7 @@ /obj/item/bodybag = 1, /obj/item/clothing/glasses/meson = 2, /obj/item/clothing/glasses/sunglasses = 1, - /obj/item/clothing/gloves/color/white{color = "yellow"; desc = "The colors are a bit dodgy."; icon_state = "yellow"; item_color = "yellow"; item_state = "ygloves"; name = "insulated gloves"} = 1, + /obj/item/clothing/gloves/color/yellow/fake = 1, /obj/item/clothing/head/hardhat = 1, /obj/item/clothing/head/hardhat/red = 1, /obj/item/clothing/head/that{throwforce = 1; throwing = 1} = 1, diff --git a/code/game/objects/items/devices/chameleonproj.dm b/code/game/objects/items/devices/chameleonproj.dm index 2ed698dd029..6319441cb71 100644 --- a/code/game/objects/items/devices/chameleonproj.dm +++ b/code/game/objects/items/devices/chameleonproj.dm @@ -125,7 +125,8 @@ master.disrupt() /obj/effect/dummy/chameleon/relaymove(var/mob/user, direction) - if(istype(loc, /turf/space)) return //No magical space movement! + if(istype(loc, /turf/space) || !direction) + return //No magical space movement! if(can_move) can_move = 0 diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index b43cd46e735..af2c66c518c 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -101,6 +101,11 @@ desc = "A roll of cloth roughly cut from something that can stop bleeding, but does not heal wounds." stop_bleeding = 900 +/obj/item/stack/medical/gauze/cyborg/ + m_amt = 0 + is_cyborg = 1 + cost = 250 + /obj/item/stack/medical/ointment name = "ointment" desc = "Used to treat those nasty burn wounds." diff --git a/code/game/objects/items/weapons/janisigns.dm b/code/game/objects/items/weapons/janisigns.dm index 56977c086f9..3844bff42ad 100644 --- a/code/game/objects/items/weapons/janisigns.dm +++ b/code/game/objects/items/weapons/janisigns.dm @@ -29,6 +29,7 @@ var/obj/effect/overlay/holograph/H = locate() in T if(H) user << "You use [src] to destroy [H]." + signs.Remove(H) qdel(H) else if(signs.len < max_signs) diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index c3ac412ca4e..0b6f3428996 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -7,6 +7,12 @@ slot_flags = SLOT_BELT attack_verb = list("whipped", "lashed", "disciplined") +/obj/item/weapon/storage/belt/update_icon() + overlays.Cut() + for(var/obj/item/I in contents) + overlays += "[I.name]" + ..() + /obj/item/weapon/storage/belt/utility name = "toolbelt" //Carn: utility belt is nicer, but it bamboozles the text parsing. desc = "Holds tools." diff --git a/code/game/objects/items/weapons/stunbaton.dm b/code/game/objects/items/weapons/stunbaton.dm index daec4abc4b9..0a4f729b1d8 100644 --- a/code/game/objects/items/weapons/stunbaton.dm +++ b/code/game/objects/items/weapons/stunbaton.dm @@ -13,6 +13,7 @@ var/status = 0 var/obj/item/weapon/stock_parts/cell/high/bcell = null var/hitcost = 1000 + var/losspertick = 5 /obj/item/weapon/melee/baton/suicide_act(mob/user) user.visible_message("[user] is putting the live [name] in \his mouth! It looks like \he's trying to commit suicide.") @@ -44,6 +45,25 @@ else return 0 +/obj/item/weapon/melee/baton/proc/update_process() + if(status) + SSobj.processing |= src + else + SSobj.processing.Remove(src) + +/obj/item/weapon/melee/baton/process() + if(bcell) + if(bcell.charge < hitcost) + status = 0 + update_icon() + if(status) + if(isrobot(loc)) + var/mob/living/silicon/robot/R = loc + if(R && R.cell) + R.cell.use(losspertick) + else + bcell.use(losspertick) + /obj/item/weapon/melee/baton/update_icon() if(status) icon_state = "[initial(name)]_active" @@ -51,6 +71,7 @@ icon_state = "[initial(name)]_nocell" else icon_state = "[initial(name)]" + update_process() /obj/item/weapon/melee/baton/examine(mob/user) ..() diff --git a/code/game/objects/structures/barsigns.dm b/code/game/objects/structures/barsigns.dm new file mode 100644 index 00000000000..b578631912b --- /dev/null +++ b/code/game/objects/structures/barsigns.dm @@ -0,0 +1,122 @@ +/obj/structure/sign/barsign // All Signs are 64 by 32 pixels, they take two tiles + name = "Bar Sign" + desc = "A bar sign with no writing on it" + icon = 'icons/obj/barsigns.dmi' + icon_state = "empty" + req_access = list(access_bar) + var/list/barsigns=list() + +/obj/structure/sign/barsign/New() + ..() + +//filling the barsigns list + for(var/bartype in typesof(/datum/barsign) - /datum/barsign) + var/datum/barsign/signinfo = new bartype + barsigns += signinfo + +//randomly assigning a sign + set_sign(pick(barsigns)) + +/obj/structure/sign/barsign/proc/set_sign(var/datum/barsign/sign) + if(!istype(sign)) + return + icon_state = sign.icon + name = sign.name + if(sign.desc) + desc = sign.desc + else + desc = "It displays \"[name]\"." + +/obj/structure/sign/barsign/attack_ai(mob/user as mob) + return src.attack_hand(user) + +/obj/structure/sign/barsign/attack_hand(mob/user as mob) + if (!src.allowed(user)) + user << "Access denied." + return + + pick_sign() + +/obj/structure/sign/barsign/emp_act(severity) + var/prev_icon = icon_state + icon_state = "empbarsign" + sleep(300*severity) //measured in deci-seconds + icon_state = prev_icon + + +/obj/structure/sign/barsign/proc/pick_sign() + var/picked_name = input("Available Signage", "Bar Sign") as null|anything in barsigns + if(!picked_name) + return + + set_sign(picked_name) + + +//Code below is to define useless variables for datums. It errors without these + +/datum/barsign + var/name = "Name" + var/icon = "Icon" + var/desc = "desc" + +//Anything below this is where all the specific signs are. If people want to add more signs, add them below. + +/datum/barsign/maltesefalcon + name = "Maltese Falcon" + icon = "maltesefalcon" + desc = "The Maltese Faclon, Space Bar and Grill" + +/datum/barsign/thebark + name = "The Bark" + icon = "thebark" + desc = "Ian's bar of choice" + +/datum/barsign/harmbaton + name = "The Harmbaton" + icon = "theharmbaton" + desc = "A great dining experience for both security members and assistants" + +/datum/barsign/thesingulo + name = "The Singulo" + icon = "thesingulo" + desc = "Where people go that'd rather not be called by their name" + +/datum/barsign/thedrunkcarp + name = "The Drunk Carp" + icon = "thedrunkcarp" + desc = "Don't drink and Swim" + +/datum/barsign/scotchservinwill + name = "Scotch Servin Willy's" + icon = "scotchservinwill" + desc = "Willy sure moved up in the world from clown to bartender" + +/datum/barsign/officerbeersky + name = "Officer Beersky's" + icon = "officerbeersky" + desc = "Man eat a dong, these drinks are great" + +/datum/barsign/thecavern + name = "The Cavern" + icon = "thecavern" + desc = "Fine drinks while listening to some fine tunes" + +/datum/barsign/theouterspess + name = "The Outer Spess" + icon = "theouterspess" + desc = "This bar isn't actually located in outer space" + +/datum/barsign/slipperyshots + name = "Slippery Shots" + icon = "slipperyshots" + desc = "Slippery slope to drunkeness with our shots!" + +/datum/barsign/thegreytide + name = "The Grey Tide" + icon = "thegreytide" + desc = "Take a break from toolboxing and enjoy a lazy beer!" + +/datum/barsign/honkednloaded + name = "Honked 'n' Loaded" + icon = "honkednloaded" + desc = "Honk." \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm index c42e8b38396..efebaa75f45 100644 --- a/code/game/objects/structures/crates_lockers/closets/crittercrate.dm +++ b/code/game/objects/structures/crates_lockers/closets/crittercrate.dm @@ -22,7 +22,7 @@ return ..() if(content_mob != null && already_opened == 0) - for(var/i = 0, i <= amount, i++) + for(var/i = 1, i <= amount, i++) new content_mob(loc) already_opened = 1 ..() diff --git a/code/game/turfs/simulated/floor/light_floor.dm b/code/game/turfs/simulated/floor/light_floor.dm index 51f52b5de4c..361fda4bdd1 100644 --- a/code/game/turfs/simulated/floor/light_floor.dm +++ b/code/game/turfs/simulated/floor/light_floor.dm @@ -2,65 +2,73 @@ * * Light floor */ - /turf/simulated/floor/light - name = "Light floor" - luminosity = 5 - icon_state = "light_on" - floor_tile = /obj/item/stack/tile/light - broken_states = list("light_broken") - var/on = 1 - var/state //0 = fine, 1 = flickering, 2 = breaking, 3 = broken - + name = "Light floor" + luminosity = 5 + icon_state = "light_on" + floor_tile = /obj/item/stack/tile/light + broken_states = list("light_broken") + var/on = 1 + var/state //0 = fine, 1 = flickering, 2 = breaking, 3 = broken + var/list/coloredlights = list("g", "r", "y", "b", "p", "w", "s","o","g") + var/currentcolor = 1 /turf/simulated/floor/light/New() - ..() - spawn(5) //needed because when placing a light floor tile it will take a short while before setting state - if(istype(builtin_tile, /obj/item/stack/tile/light)) - var/obj/item/stack/tile/light/L = builtin_tile - L.state = state - update_icon() - + ..() + spawn(5) //needed because when placing a light floor tile it will take a short while before setting state + if(istype(builtin_tile, /obj/item/stack/tile/light)) + var/obj/item/stack/tile/light/L = builtin_tile + L.state = state + update_icon() /turf/simulated/floor/light/update_icon() - if(!..()) - return 0 - if(on) - switch(state) - if(0) - icon_state = "light_on" - SetLuminosity(1) - if(1) - var/num = pick("1","2","3","4") - icon_state = "light_on_flicker[num]" - SetLuminosity(1) - if(2) - icon_state = "light_on_broken" - SetLuminosity(1) - if(3) - icon_state = "light_off" - SetLuminosity(0) - else - SetLuminosity(0) - icon_state = "light_off" - + ..() + if(on) + switch(state) + if(0) + icon_state = "light_on_[coloredlights[currentcolor]]" + SetLuminosity(1) + if(1) + var/num = pick("1","2","3","4") + icon_state = "light_on_flicker[num]" + SetLuminosity(1) + if(2) + icon_state = "light_on_broken" + SetLuminosity(1) + if(3) + icon_state = "light_off" + SetLuminosity(0) + else + SetLuminosity(0) + icon_state = "light_off" /turf/simulated/floor/light/ChangeTurf(turf/T as turf) - SetLuminosity(0) - ..() - + SetLuminosity(0) + ..() /turf/simulated/floor/light/attack_hand(mob/user as mob) - on = !on - update_icon() - ..() + if(!on) + on = 1 + currentcolor = 1 + return + else + currentcolor++ + if ( currentcolor > coloredlights.len) + on = 0 + update_icon() + ..() //I am not sure what the parent procs have for attack_hand, best to check later. + +/turf/simulated/floor/light/attack_ai(mob/user) + attack_hand(user) + + /turf/simulated/floor/light/attackby(obj/item/C as obj, mob/user as mob) - if(..()) - return - if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles - if(state) - user.drop_item() - qdel(C) - state = 0 //fixing it by bashing it with a light bulb, fun eh? - update_icon() - user << "You replace the light bulb." - else - user << "The lightbulb seems fine, no need to replace it." - return + if(..()) + return + if(istype(C,/obj/item/weapon/light/bulb)) //only for light tiles + if(state) + user.drop_item() + qdel(C) + state = 0 //fixing it by bashing it with a light bulb, fun eh? + update_icon() + user << "You replace the light bulb." + else + user << "The lightbulb seems fine, no need to replace it." + return diff --git a/code/game/turfs/turf.dm b/code/game/turfs/turf.dm index f90bed96b57..b2b510e5457 100644 --- a/code/game/turfs/turf.dm +++ b/code/game/turfs/turf.dm @@ -92,7 +92,7 @@ var/mob/O = M if(!O.lastarea) O.lastarea = get_area(O.loc) - O.update_gravity(O.mob_has_gravity()) +// O.update_gravity(O.mob_has_gravity()) var/loopsanity = 100 for(var/atom/A in range(1)) diff --git a/code/modules/admin/verbs/adminjump.dm b/code/modules/admin/verbs/adminjump.dm index 8ec36f3d008..41442e9cdd8 100644 --- a/code/modules/admin/verbs/adminjump.dm +++ b/code/modules/admin/verbs/adminjump.dm @@ -1,11 +1,11 @@ -/client/proc/jumptoarea(area/A in sortedAreas) +/client/proc/jumptoarea(area/A in sortedAreas) set name = "Jump to Area" set desc = "Area to jump to" set category = "Admin" if(!src.holder) src << "Only administrators may use this command." return - + if(!A) return @@ -19,8 +19,8 @@ var/turf/T = pick_n_take(turfs) if(!T) src << "Nowhere to jump to!" - return - admin_forcemove(usr, T) + return + admin_forcemove(usr, T) log_admin("[key_name(usr)] jumped to [A]") message_admins("[key_name_admin(usr)] jumped to [A]") feedback_add_details("admin_verb","JA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! @@ -151,17 +151,12 @@ /proc/admin_forcemove(var/mob/mover, var/atom/newloc) var/startdensity = mover.density var/startflags = mover.pass_flags - var/startincorporeal = 0 - if(istype(mover, /mob/living)) - var/mob/living/L = mover - startincorporeal = L.incorporeal_move - L.incorporeal_move = 1 + var/startdestinationdensity = newloc.density mover.density = 0 mover.pass_flags = ALL newloc.density = 0 . = mover.Move(newloc) mover.density = startdensity mover.pass_flags = startflags - if(istype(mover, /mob/living)) - var/mob/living/L = mover - L.incorporeal_move = startincorporeal + newloc.density = startdestinationdensity + diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index b7131a68b98..58ece43cd47 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -36,3 +36,9 @@ var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) msg = "SYNDICATE:[key_name(Sender, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" admins << msg + +/proc/Nuke_request(var/text , var/mob/Sender) + var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN) + msg = " NUKE CODE REQUEST:[key_name(Sender, 1)] (?) (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" + admins << msg + admins << "At this current time, the nuke must have the code manually set via varedit." \ No newline at end of file diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 9a51ef9737c..3b3f2706221 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -248,6 +248,7 @@ var/next_external_rsc = 0 'nano/templates/smes.tmpl', 'nano/templates/apc.tmpl', 'nano/templates/cryo.tmpl', + 'nano/templates/solar_control.tmpl', 'nano/images/uiBackground.png', 'nano/images/uiIcons16.png', 'nano/images/uiIcons24.png', diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 7ae4d730d3c..6c831dadf68 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -200,7 +200,7 @@ BLIND // can't see anything permeability_coefficient = 0.90 slot_flags = SLOT_ICLOTHING armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) - var/fitted = 1// For use in alternate clothing styles for women, if clothes vary from a jumpsuit in shape, set this to 0 + var/fitted = FEMALE_UNIFORM_FULL // For use in alternate clothing styles for women var/has_sensor = 1//For the crew computer 2 = unable to change mode var/sensor_mode = 0 var/can_adjust = 1 @@ -259,9 +259,9 @@ BLIND // can't see anything if(hastie) user << "\A [hastie] is attached to it." -atom/proc/generate_female_clothing(index,t_color,icon) +atom/proc/generate_female_clothing(index,t_color,icon,type) var/icon/female_clothing_icon = icon("icon"=icon, "icon_state"="[t_color]_s") - var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="female_s") + var/icon/female_s = icon("icon"='icons/mob/uniform.dmi', "icon_state"="[(type == FEMALE_UNIFORM_FULL) ? "female_full" : "female_top"]") female_clothing_icon.Blend(female_s, ICON_MULTIPLY) female_clothing_icon = fcopy_rsc(female_clothing_icon) female_clothing_icons[index] = female_clothing_icon @@ -317,11 +317,13 @@ atom/proc/generate_female_clothing(index,t_color,icon) usr << "You cannot wear this suit any differently." return if(src.adjusted == 1) + src.fitted = initial(fitted) src.item_color = initial(item_color) src.item_color = src.suit_color //colored jumpsuits are shit and break without this usr << "You adjust the suit back to normal." src.adjusted = 0 else + src.fitted = NO_FEMALE_UNIFORM src.item_color += "_d" usr << "You adjust the suit to wear it more casually." src.adjusted = 1 diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 16add9a8e5f..7ce60948acb 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -2,12 +2,19 @@ name = "Optical Meson Scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." icon_state = "meson" - item_state = "glasses" + item_state = "meson" origin_tech = "magnets=2;engineering=2" darkness_view = 1 vision_flags = SEE_TURFS invis_view = SEE_INVISIBLE_MINIMUM +/obj/item/clothing/glasses/meson/night + name = "Night Vision Optical Meson Scanner" + desc = "An Optical Meson Scanner fitted with an amplified visible light spectrum overlay, providing greater visual clarity in darkness." + icon_state = "nvgmeson" + item_state = "nvgmeson" + darkness_view = 8 + /obj/item/clothing/glasses/science name = "Science Goggles" desc = "A pair of snazzy goggles used to protect against chemical spills." diff --git a/code/modules/clothing/gloves/color.dm b/code/modules/clothing/gloves/color.dm index b7b4ad452de..10b84fefedc 100644 --- a/code/modules/clothing/gloves/color.dm +++ b/code/modules/clothing/gloves/color.dm @@ -7,6 +7,10 @@ permeability_coefficient = 0.05 item_color="yellow" +/obj/item/clothing/gloves/color/yellow/fake + desc = "These gloves will protect the wearer from electric shock. They don't feel like rubber..." + siemens_coefficient = 1 + /obj/item/clothing/gloves/color/fyellow //Cheap Chinese Crap desc = "These gloves are cheap knockoffs of the coveted ones - no way this can end badly." name = "budget insulated gloves" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index c94d60b75a7..d7cd68cb6e8 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -67,6 +67,11 @@ icon = 'icons/obj/device.dmi' icon_state = "taperecorder_idle" aggressiveness = 1 //Borgs are nicecurity! + ignore_maskadjust = 1 + +/obj/item/clothing/mask/gas/sechailer/cyborg/New() + ..() + verbs -= /obj/item/clothing/mask/gas/sechailer/verb/adjust /obj/item/clothing/mask/gas/sechailer/attackby(obj/item/weapon/W as obj, mob/user as mob) if(istype(W, /obj/item/weapon/screwdriver)) diff --git a/code/modules/clothing/under/jobs/civilian.dm b/code/modules/clothing/under/jobs/civilian.dm index b889b5b7329..9237f31d8f2 100644 --- a/code/modules/clothing/under/jobs/civilian.dm +++ b/code/modules/clothing/under/jobs/civilian.dm @@ -54,7 +54,7 @@ icon_state = "clown" item_state = "clown" item_color = "clown" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 @@ -128,7 +128,7 @@ icon_state = "lawyer_purp" item_state = "lawyer_purp" item_color = "lawyer_purp" - fitted = 0 + fitted = NO_FEMALE_UNIFORM can_adjust = 1 diff --git a/code/modules/clothing/under/jobs/medsci.dm b/code/modules/clothing/under/jobs/medsci.dm index 2b28a80e6f0..1536852a593 100644 --- a/code/modules/clothing/under/jobs/medsci.dm +++ b/code/modules/clothing/under/jobs/medsci.dm @@ -85,7 +85,7 @@ item_color = "nursesuit" permeability_coefficient = 0.50 armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 10, rad = 0) - fitted = 0 + fitted = NO_FEMALE_UNIFORM can_adjust = 0 /obj/item/clothing/under/rank/medical diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c40c2da16c8..049fab17adc 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -67,7 +67,7 @@ icon_state = "sexyclown" item_state = "sexyclown" item_color = "sexyclown" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/rank/vice @@ -131,7 +131,6 @@ desc = "A jumpsuit with owl wings. Photorealistic owl feathers! Twooooo!" icon_state = "owl" item_color = "owl" - fitted = 0 can_adjust = 0 /obj/item/clothing/under/rainbow @@ -242,7 +241,7 @@ icon_state = "blackskirt" item_color = "blackskirt" body_parts_covered = CHEST|GROIN|ARMS - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/schoolgirl @@ -252,7 +251,7 @@ item_state = "schoolgirl" item_color = "schoolgirl" body_parts_covered = CHEST|GROIN|ARMS - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/schoolgirl/red @@ -312,7 +311,7 @@ item_state = "kilt" item_color = "kilt" body_parts_covered = CHEST|GROIN|FEET - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/sexymime @@ -322,7 +321,7 @@ item_state = "sexymime" item_color = "sexymime" body_parts_covered = CHEST|GROIN|LEGS - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/gladiator @@ -332,7 +331,7 @@ item_state = "gladiator" item_color = "gladiator" body_parts_covered = CHEST|GROIN|ARMS - fitted = 0 + fitted = NO_FEMALE_UNIFORM can_adjust = 0 /obj/item/clothing/under/sundress @@ -342,7 +341,7 @@ item_state = "sundress" item_color = "sundress" body_parts_covered = CHEST|GROIN - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/captainparade @@ -367,7 +366,7 @@ icon_state = "hos_parade_fem" item_state = "r_suit" item_color = "hos_parade_fem" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/assistantformal @@ -384,7 +383,7 @@ icon_state = "black_tango" item_state = "wcoat" item_color = "black_tango" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/stripeddress @@ -393,7 +392,7 @@ icon_state = "striped_dress" item_state = "stripeddress" item_color = "striped_dress" - fitted = 0 + fitted = FEMALE_UNIFORM_FULL can_adjust = 0 /obj/item/clothing/under/sailordress @@ -402,7 +401,7 @@ icon_state = "sailor_dress" item_state = "sailordress" item_color = "sailor_dress" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/redeveninggown @@ -411,7 +410,7 @@ icon_state = "red_evening_gown" item_state = "redeveninggown" item_color = "red_evening_gown" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/maid @@ -421,7 +420,7 @@ item_state = "maid" item_color = "maid" body_parts_covered = CHEST|GROIN - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/janimaid @@ -431,7 +430,7 @@ item_state = "janimaid" item_color = "janimaid" body_parts_covered = CHEST|GROIN - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/plaid_skirt @@ -440,7 +439,7 @@ icon_state = "plaid_red" item_state = "plaid_red" item_color = "plaid_red" - fitted = 0 + fitted = FEMALE_UNIFORM_TOP can_adjust = 0 /obj/item/clothing/under/plaid_skirt/blue @@ -455,4 +454,4 @@ desc = "A preppy purple skirt with a white blouse." icon_state = "plaid_purple" item_state = "plaid_purple" - item_color = "plaid_purple" \ No newline at end of file + item_color = "plaid_purple" diff --git a/code/modules/clothing/under/pants.dm b/code/modules/clothing/under/pants.dm index 15e4aa194a5..71634632206 100644 --- a/code/modules/clothing/under/pants.dm +++ b/code/modules/clothing/under/pants.dm @@ -1,7 +1,7 @@ /obj/item/clothing/under/pants gender = PLURAL body_parts_covered = GROIN|LEGS - fitted = 0 + fitted = NO_FEMALE_UNIFORM can_adjust = 0 /obj/item/clothing/under/pants/classicjeans diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index 1fb22fcd9a8..23e98a040c6 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -3,7 +3,7 @@ desc = "95% Polyester, 5% Spandex!" gender = PLURAL body_parts_covered = GROIN - fitted = 0 + fitted = NO_FEMALE_UNIFORM can_adjust = 0 /obj/item/clothing/under/shorts/red diff --git a/code/modules/food&drinks/drinks/drinks/bottle.dm b/code/modules/food&drinks/drinks/drinks/bottle.dm index e2accdd154e..5c0bdec3e23 100644 --- a/code/modules/food&drinks/drinks/drinks/bottle.dm +++ b/code/modules/food&drinks/drinks/drinks/bottle.dm @@ -152,7 +152,7 @@ /obj/item/weapon/reagent_containers/food/drinks/bottle/tequila name = "Caccavo Guaranteed Quality Tequila" desc = "Made from premium petroleum distillates, pure thalidomide and other fine quality ingredients!" - icon_state = "tequillabottle" + icon_state = "tequilabottle" list_reagents = list("tequila" = 100) /obj/item/weapon/reagent_containers/food/drinks/bottle/bottleofnothing diff --git a/code/modules/food&drinks/food/customizables.dm b/code/modules/food&drinks/food/customizables.dm index 7645b4938d6..5334814eb67 100644 --- a/code/modules/food&drinks/food/customizables.dm +++ b/code/modules/food&drinks/food/customizables.dm @@ -54,6 +54,19 @@ update_overlays(S) user << "You add the [I.name] to the [name]." update_name(S) + else if(istype(I, /obj/item/weapon/pen)) + var/txt = stripped_input(user, "What would you like the food to be called?", "Food Naming", "", 30) + if(txt) + ingMax = ingredients.len + user << "You add a last touch to the dish by renaming it." + customname = txt + if(istype(I, /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich)) + var/obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich/S = I + if(S.finished) + name = "[customname] sandwich" + return + name = "[customname] [initial(name)]" + else . = ..() return diff --git a/code/modules/food&drinks/food/snacks/dough.dm b/code/modules/food&drinks/food/snacks/dough.dm index 4c31b944901..6dc38fd8076 100644 --- a/code/modules/food&drinks/food/snacks/dough.dm +++ b/code/modules/food&drinks/food/snacks/dough.dm @@ -64,7 +64,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "pizzabread" custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pizza - list_reagents = list("nutriment" = 1) + list_reagents = list("nutriment" = 7) w_class = 3 @@ -93,7 +93,7 @@ icon = 'icons/obj/food_ingredients.dmi' icon_state = "cakebatter" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/store/cake/plain - list_reagents = list("nutriment" = 1) + list_reagents = list("nutriment" = 3) w_class = 3 // Cake batter + rolling pin = pie dough @@ -116,7 +116,7 @@ slice_path = /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase slices_num = 3 cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pie/plain - list_reagents = list("nutriment" = 1) + list_reagents = list("nutriment" = 3) w_class = 3 /obj/item/weapon/reagent_containers/food/snacks/rawpastrybase @@ -126,6 +126,7 @@ icon_state = "rawpastrybase" cooked_type = /obj/item/weapon/reagent_containers/food/snacks/pastrybase filling_color = "#CD853F" + list_reagents = list("nutriment" = 1) /obj/item/weapon/reagent_containers/food/snacks/pastrybase name = "pastry base" diff --git a/code/modules/food&drinks/food/snacks/meat.dm b/code/modules/food&drinks/food/snacks/meat.dm index fcfef646cd9..6102cad58d2 100644 --- a/code/modules/food&drinks/food/snacks/meat.dm +++ b/code/modules/food&drinks/food/snacks/meat.dm @@ -164,7 +164,7 @@ name = "meat steak" desc = "A piece of hot spicy meat." icon_state = "meatsteak" - list_reagents = list("nutriment" = 1, "vitamin" = 1) + list_reagents = list("nutriment" = 2, "vitamin" = 1) trash = /obj/item/trash/plate filling_color = "#B22222" diff --git a/code/modules/food&drinks/food/snacks_bread.dm b/code/modules/food&drinks/food/snacks_bread.dm index 27546f4c6f0..5fc55b66394 100644 --- a/code/modules/food&drinks/food/snacks_bread.dm +++ b/code/modules/food&drinks/food/snacks_bread.dm @@ -7,12 +7,13 @@ bitesize = 2 custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/sandwich filling_color = "#FFA500" + slot_flags = SLOT_HEAD // i'm going to kill myself. i'm going to murder my own self. /obj/item/weapon/reagent_containers/food/snacks/store/bread/plain name = "bread" desc = "Some plain old Earthen bread." icon_state = "bread" - list_reagents = list("nutriment" = 10) + list_reagents = list("nutriment" = 7) custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/bread slice_path = /obj/item/weapon/reagent_containers/food/snacks/breadslice/plain diff --git a/code/modules/food&drinks/food/snacks_burgers.dm b/code/modules/food&drinks/food/snacks_burgers.dm index 2d56e347f32..62612c9b47d 100644 --- a/code/modules/food&drinks/food/snacks_burgers.dm +++ b/code/modules/food&drinks/food/snacks_burgers.dm @@ -6,7 +6,7 @@ name = "burger" desc = "The cornerstone of every nutritious breakfast." icon_state = "hburger" - list_reagents = list("nutriment" = 2, "vitamin" = 2) + list_reagents = list("vitamin" = 1) bitesize = 3 /obj/item/weapon/reagent_containers/food/snacks/burger/human @@ -15,10 +15,12 @@ name = "-burger" desc = "A bloody burger." icon_state = "hburger" + list_reagents = list("vitamin" = 4) /obj/item/weapon/reagent_containers/food/snacks/burger/appendix name = "appendix burger" desc = "Tastes like appendicitis." + list_reagents = list("nutriment" = 6, "vitamin" = 6) /obj/item/weapon/reagent_containers/food/snacks/burger/fish name = "fillet -o- carp sandwich" @@ -30,6 +32,7 @@ name = "tofu burger" desc = "What.. is that meat?" icon_state = "tofuburger" + list_reagents = list("nutriment" = 2, "vitamin" = 2) /obj/item/weapon/reagent_containers/food/snacks/burger/roburger name = "roburger" @@ -48,27 +51,31 @@ name = "xenoburger" desc = "Smells caustic. Tastes like heresy." icon_state = "xburger" + list_reagents = list("nutriment" = 2, "vitamin" = 6) /obj/item/weapon/reagent_containers/food/snacks/burger/clown name = "clown burger" desc = "This tastes funny..." icon_state = "clownburger" + list_reagents = list("nutriment" = 4, "vitamin" = 6, "banana" = 6) /obj/item/weapon/reagent_containers/food/snacks/burger/mime name = "mime burger" desc = "Its taste defies language." icon_state = "mimeburger" + list_reagents = list("nutriment" = 4, "vitamin" = 6, "nothing" = 6) /obj/item/weapon/reagent_containers/food/snacks/burger/brain name = "brainburger" desc = "A strange looking burger. It looks almost sentient." icon_state = "brainburger" - list_reagents = list("nutriment" = 1, "mannitol" = 6, "vitamin" = 5) + list_reagents = list("nutriment" = 6, "mannitol" = 6, "vitamin" = 5) /obj/item/weapon/reagent_containers/food/snacks/burger/ghost name = "ghost burger" desc = "Too Spooky!" alpha = 125 + list_reagents = list("nutriment" = 5, "vitamin" = 12) /obj/item/weapon/reagent_containers/food/snacks/burger/red name = "red burger" @@ -116,6 +123,7 @@ name = "spell burger" desc = "This is absolutely Ei Nath." icon_state = "spellburger" + list_reagents = list("nutriment" = 6, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/burger/bigbite name = "big bite burger" @@ -141,3 +149,4 @@ icon_state = "superbiteburger" list_reagents = list("vitamin" = 10) w_class = 3 + volume = 80 diff --git a/code/modules/food&drinks/food/snacks_cake.dm b/code/modules/food&drinks/food/snacks_cake.dm index 1434a757545..c51750173dc 100644 --- a/code/modules/food&drinks/food/snacks_cake.dm +++ b/code/modules/food&drinks/food/snacks_cake.dm @@ -13,7 +13,7 @@ desc = "A plain cake, not a lie." icon_state = "plaincake" custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/cake - list_reagents = list("nutriment" = 5, "vitamin" = 5) + list_reagents = list("nutriment" = 10, "vitamin" = 2) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/plain name = "vanilla cake slice" @@ -27,7 +27,7 @@ icon_state = "carrotcake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/carrot slices_num = 5 - list_reagents = list("oculine" = 10, "vitamin" = 10) + list_reagents = list("nutriment" = 3, "oculine" = 5, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/carrot name = "carrot cake slice" @@ -42,7 +42,7 @@ icon_state = "braincake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brain slices_num = 5 - list_reagents = list("mannitol" = 10, "vitamin" = 10) + list_reagents = list("nutriment" = 5, "mannitol" = 10, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/brain @@ -73,7 +73,7 @@ icon_state = "orangecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/orange slices_num = 5 - list_reagents = list("vitamin" = 10) + list_reagents = list("nutriment" = 3, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/orange name = "orange cake slice" @@ -87,7 +87,7 @@ icon_state = "limecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lime slices_num = 5 - list_reagents = list("vitamin" = 10) + list_reagents = list("nutriment" = 3, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lime name = "lime cake slice" @@ -102,7 +102,7 @@ icon_state = "lemoncake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lemon slices_num = 5 - list_reagents = list("vitamin" = 10) + list_reagents = list("nutriment" = 3, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/lemon @@ -118,7 +118,7 @@ icon_state = "chocolatecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate slices_num = 5 - list_reagents = list("vitamin" = 10) + list_reagents = list("nutriment" = 3, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/chocolate @@ -134,7 +134,7 @@ icon_state = "birthdaycake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday slices_num = 5 - list_reagents = list("sprinkles" = 10, "vitamin" = 5) + list_reagents = list("nutriment" = 7, "sprinkles" = 10, "vitamin" = 5) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/birthday name = "birthday cake slice" @@ -149,7 +149,7 @@ icon_state = "applecake" slice_path = /obj/item/weapon/reagent_containers/food/snacks/cakeslice/apple slices_num = 5 - list_reagents = list("vitamin" = 10) + list_reagents = list("nutriment" = 3, "vitamin" = 10) /obj/item/weapon/reagent_containers/food/snacks/cakeslice/apple name = "apple cake slice" diff --git a/code/modules/food&drinks/food/snacks_meat.dm b/code/modules/food&drinks/food/snacks_meat.dm index 1ea51580a43..56555bbabf1 100644 --- a/code/modules/food&drinks/food/snacks_meat.dm +++ b/code/modules/food&drinks/food/snacks_meat.dm @@ -71,7 +71,7 @@ name = "faggot" desc = "A great meal all round. Not a cord of wood." icon_state = "faggot" - list_reagents = list("nutriment" = 3, "vitamin" = 1) + list_reagents = list("nutriment" = 4, "vitamin" = 1) filling_color = "#800000" /obj/item/weapon/reagent_containers/food/snacks/sausage diff --git a/code/modules/food&drinks/food/snacks_pie.dm b/code/modules/food&drinks/food/snacks_pie.dm index 6bdbc6e0cda..1c4547d3f26 100644 --- a/code/modules/food&drinks/food/snacks_pie.dm +++ b/code/modules/food&drinks/food/snacks_pie.dm @@ -9,7 +9,7 @@ desc = "A simple pie, still delicious." icon_state = "pie" custom_food_type = /obj/item/weapon/reagent_containers/food/snacks/customizable/pie - list_reagents = list("nutriment" = 1, "vitamin" = 1) + list_reagents = list("nutriment" = 8, "vitamin" = 1) /obj/item/weapon/reagent_containers/food/snacks/pie/cream name = "banana cream pie" diff --git a/code/modules/food&drinks/food/snacks_pizza.dm b/code/modules/food&drinks/food/snacks_pizza.dm index c5afdb0edd5..fc297e36675 100644 --- a/code/modules/food&drinks/food/snacks_pizza.dm +++ b/code/modules/food&drinks/food/snacks_pizza.dm @@ -11,7 +11,7 @@ icon_state = "pizzamargherita" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/margherita slices_num = 6 - list_reagents = list("vitamin" = 5) + list_reagents = list("nutriment" = 5, "vitamin" = 5) @@ -27,7 +27,7 @@ icon_state = "meatpizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/meatpizza slices_num = 6 - list_reagents = list("vitamin" = 8) + list_reagents = list("nutriment" = 5, "vitamin" = 8) /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/meatpizza name = "meatpizza slice" @@ -41,7 +41,7 @@ icon_state = "mushroompizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroompizza slices_num = 6 - list_reagents = list("vitamin" = 5) + list_reagents = list("nutriment" = 5, "vitamin" = 5) /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/mushroompizza name = "mushroom pizza slice" @@ -55,7 +55,7 @@ icon_state = "vegetablepizza" slice_path = /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/vegetablepizza slices_num = 6 - list_reagents = list("vitamin" = 5) + list_reagents = list("nutriment" = 5, "vitamin" = 5) /obj/item/weapon/reagent_containers/food/snacks/pizzaslice/vegetablepizza name = "vegetable pizza slice" @@ -226,14 +226,14 @@ /obj/item/pizzabox/margherita/New() pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/margherita(src) - pizza.reagents.add_reagent("nutrient", 30) + pizza.reagents.add_reagent("nutriment", 25) pizza.reagents.add_reagent("tomatojuice", 6) boxtag = "Margherita Deluxe" update_icon() /obj/item/pizzabox/vegetable/New() pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/vegetablepizza(src) - pizza.reagents.add_reagent("nutrient", 25) + pizza.reagents.add_reagent("nutriment", 20) pizza.reagents.add_reagent("tomatojuice", 6) pizza.reagents.add_reagent("oculine", 12) boxtag = "Gourmet Vegatable" @@ -241,13 +241,13 @@ /obj/item/pizzabox/mushroom/New() pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/mushroompizza(src) - pizza.reagents.add_reagent("nutrient", 30) + pizza.reagents.add_reagent("nutriment", 25) boxtag = "Mushroom Special" update_icon() /obj/item/pizzabox/meat/New() pizza = new /obj/item/weapon/reagent_containers/food/snacks/pizza/meatpizza(src) - pizza.reagents.add_reagent("nutrient", 30) + pizza.reagents.add_reagent("nutriment", 25) pizza.reagents.add_reagent("tomatojuice", 6) boxtag = "Meatlover's Supreme" update_icon() \ No newline at end of file diff --git a/code/modules/food&drinks/food/snacks_soup.dm b/code/modules/food&drinks/food/snacks_soup.dm index e97581a0962..742f6f0d9b5 100644 --- a/code/modules/food&drinks/food/snacks_soup.dm +++ b/code/modules/food&drinks/food/snacks_soup.dm @@ -44,7 +44,7 @@ name = "clown's tears" desc = "Not very funny." icon_state = "clownstears" - list_reagents = list("nutriment" = 1, "vitamin" = 8) + list_reagents = list("nutriment" = 1, "banana" = 5, "vitamin" = 8) /obj/item/weapon/reagent_containers/food/snacks/soup/vegetable name = "vegetable soup" @@ -74,13 +74,13 @@ name = "hot chili" desc = "A five alarm Texan Chili!" icon_state = "hotchili" - list_reagents = list("nutriment" = 1, "vitamin" = 2) + list_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2) /obj/item/weapon/reagent_containers/food/snacks/soup/coldchili name = "cold chili" desc = "This slush is barely a liquid!" icon_state = "coldchili" - list_reagents = list("nutriment" = 1, "vitamin" = 2) + list_reagents = list("nutriment" = 1, "tomatojuice" = 2, "vitamin" = 2) /obj/item/weapon/reagent_containers/food/snacks/soup/monkeysdelight name = "monkey's delight" @@ -92,7 +92,7 @@ name = "tomato soup" desc = "Drinking this feels like being a vampire! A tomato vampire..." icon_state = "tomatosoup" - list_reagents = list("nutriment" = 1, "vitamin" = 3) + list_reagents = list("nutriment" = 1, "tomatojuice" = 10, "vitamin" = 3) /obj/item/weapon/reagent_containers/food/snacks/soup/milo name = "milosoup" @@ -135,5 +135,5 @@ name = "stew" desc = "A nice and warm stew. Healthy and strong." icon_state = "stew" - list_reagents = list("nutriment" = 1, "vitamin" = 5) + list_reagents = list("nutriment" = 1, "tomatojuice" = 5, "vitamin" = 5) bitesize = 7 diff --git a/code/modules/food&drinks/recipes/drinks_recipes.dm b/code/modules/food&drinks/recipes/drinks_recipes.dm index f7fb033d912..2f23ceee03f 100644 --- a/code/modules/food&drinks/recipes/drinks_recipes.dm +++ b/code/modules/food&drinks/recipes/drinks_recipes.dm @@ -368,13 +368,6 @@ result_amount = 2 /datum/chemical_reaction/iced_beer - name = "Iced Beer" - id = "iced_beer" - result = "iced_beer" - required_reagents = list("beer" = 10, "frostoil" = 1) - result_amount = 10 - -/datum/chemical_reaction/iced_beer2 name = "Iced Beer" id = "iced_beer" result = "iced_beer" diff --git a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm index 2855d0e3dd3..aba37404d2f 100644 --- a/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm +++ b/code/modules/food&drinks/recipes/tablecraft/recipes_pastry.dm @@ -148,7 +148,7 @@ name = "Meat bun" reqs = list( /datum/reagent/consumable/soysauce = 5, - /datum/reagent/consumable/flour = 5, + /obj/item/weapon/reagent_containers/food/snacks/bun = 1, /obj/item/weapon/reagent_containers/food/snacks/faggot = 1, /obj/item/weapon/reagent_containers/food/snacks/grown/cabbage = 1 ) diff --git a/code/modules/library/lib_machines.dm b/code/modules/library/lib_machines.dm index af13630407a..24c5f811d65 100644 --- a/code/modules/library/lib_machines.dm +++ b/code/modules/library/lib_machines.dm @@ -3,19 +3,12 @@ * Contains: * Borrowbook datum * Library Public Computer + * Cachedbook datum * Library Computer * Library Scanner * Book Binder */ -/* - * Borrowbook datum - */ -datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long. - var/bookname - var/mobname - var/getdate - var/duedate /* @@ -116,11 +109,55 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f src.updateUsrDialog() return +/* + * Borrowbook datum + */ +datum/borrowbook // Datum used to keep track of who has borrowed what when and for how long. + var/bookname + var/mobname + var/getdate + var/duedate + +/* + * Cachedbook datum + */ +datum/cachedbook // Datum used to cache the SQL DB books locally in order to achieve a performance gain. + var/id + var/title + var/author + var/category + +var/global/list/datum/cachedbook/cachedbooks // List of our cached book datums + + +/proc/load_library_db_to_cache() + if(cachedbooks) + return + establish_db_connection() + if(!dbcon.IsConnected()) + return + cachedbooks = list() + var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") + query.Execute() + + while(query.NextRow()) + var/datum/cachedbook/newbook = new() + newbook.id = query.item[1] + newbook.author = query.item[2] + newbook.title = query.item[3] + newbook.category = query.item[4] + cachedbooks += newbook + + + /* * Library Computer * After 860 days, it's finally a buildable computer. */ +// TODO: Make this an actual /obj/machinery/computer that can be crafted from circuit boards and such +// It is August 22nd, 2012... This TODO has already been here for months.. I wonder how long it'll last before someone does something about it. +// It's December 25th, 2014, and this is STILL here, and it's STILL relevant. Kill me /obj/machinery/computer/libraryconsole/bookmanagement name = "book inventory management console" var/arcanecheckout = 0 @@ -132,8 +169,18 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f var/list/inventory = list() var/checkoutperiod = 5 // In minutes var/obj/machinery/libraryscanner/scanner // Book scanner that will be used when uploading books to the Archive + var/libcomp_menu + var/bibledelay = 0 // LOL NO SPAM (1 minute delay) -- Doohl - var/bibledelay = 0 +/obj/machinery/computer/libraryconsole/bookmanagement/proc/build_library_menu() + if(libcomp_menu) + return + load_library_db_to_cache() + if(!cachedbooks) + return + libcomp_menu = "" + for(var/datum/cachedbook/C in cachedbooks) + libcomp_menu += "[C.author][C.title][C.category]\[Order\]\n" /obj/machinery/computer/libraryconsole/bookmanagement/New() ..() @@ -198,23 +245,15 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f dat += "(Return to main menu)
" if(4) dat += "

External Archive

" - establish_db_connection() - if(!dbcon.IsConnected()) + build_library_menu() + + if(!cachedbooks) dat += "ERROR: Unable to contact External Archive. Please contact your system administrator for assistance." else dat += "(Order book by SS13BN)

" dat += "" dat += "" - - var/DBQuery/query = dbcon.NewQuery("SELECT id, author, title, category FROM [format_table_name("library")] WHERE isnull(deleted)") - query.Execute() - - while(query.NextRow()) - var/id = query.item[1] - var/author = query.item[2] - var/title = query.item[3] - var/category = query.item[4] - dat += "" + dat += libcomp_menu dat += "
AUTHORTITLECATEGORY
[author][title][category]\[Order\]
" dat += "
(Return to main menu)
" if(5) @@ -343,12 +382,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f if(!dbcon.IsConnected()) alert("Connection to Archive has been severed. Aborting.") else - /* - var/sqltitle = dbcon.Quote(scanner.cache.name) - var/sqlauthor = dbcon.Quote(scanner.cache.author) - var/sqlcontent = dbcon.Quote(scanner.cache.dat) - var/sqlcategory = dbcon.Quote(upload_category) - */ + var/sqltitle = sanitizeSQL(scanner.cache.name) var/sqlauthor = sanitizeSQL(scanner.cache.author) var/sqlcontent = sanitizeSQL(scanner.cache.dat) @@ -358,7 +392,7 @@ datum/borrowbook // Datum used to keep track of who has borrowed what when and f usr << query.ErrorMsg() else log_game("[usr.name]/[usr.key] has uploaded the book titled [scanner.cache.name], [length(scanner.cache.dat)] signs") - alert("Upload Complete.") + alert("Upload Complete. Uploaded title will be unavailable for printing for a short period") if(href_list["targetid"]) var/sqlid = sanitizeSQL(href_list["targetid"]) diff --git a/code/modules/mob/living/carbon/alien/alien.dm b/code/modules/mob/living/carbon/alien/alien.dm index 6ad87f9871a..fd9af671dab 100644 --- a/code/modules/mob/living/carbon/alien/alien.dm +++ b/code/modules/mob/living/carbon/alien/alien.dm @@ -60,7 +60,7 @@ /mob/living/carbon/alien/getToxLoss() return 0 -/mob/living/carbon/alien/proc/handle_environment(var/datum/gas_mixture/environment) +/mob/living/carbon/alien/handle_environment(var/datum/gas_mixture/environment) //If there are alien weeds on the ground then heal if needed or give some toxins if(locate(/obj/structure/alien/weeds) in loc) @@ -111,7 +111,7 @@ fire_alert = max(fire_alert, 2) return -/mob/living/carbon/alien/proc/handle_mutations_and_radiation() +/mob/living/carbon/alien/handle_mutations_and_radiation() // Aliens love radiation nom nom nom if (radiation) diff --git a/code/modules/mob/living/carbon/alien/humanoid/life.dm b/code/modules/mob/living/carbon/alien/humanoid/life.dm index 98379053235..3862e75e7eb 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/life.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/life.dm @@ -8,61 +8,6 @@ var/temperature_alert = 0 -/mob/living/carbon/alien/humanoid/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - if (notransform) - return - - ..() - - var/datum/gas_mixture/environment = loc.return_air() - - if (stat != DEAD) //still breathing - - //First, resolve location and get a breath - - if(SSmob.times_fired%4==2) - //Only try to take a breath every 4 seconds, unless suffocating - spawn(0) breathe() - - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. - - //Handle temperature/pressure differences between body and environment - handle_environment(environment) - - //stuff in the stomach - handle_stomach() - - //Handle being on fire - handle_fire() - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - - if(client) - handle_regular_hud_updates() - /mob/living/carbon/alien/humanoid/proc/adjust_body_temperature(current, loc_temp, boost) var/temperature = current var/difference = abs(current-loc_temp) //get difference @@ -80,7 +25,7 @@ temp_change = (temperature - current) return temp_change -/mob/living/carbon/alien/humanoid/proc/handle_regular_status_updates() +/mob/living/carbon/alien/humanoid/handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -160,7 +105,7 @@ return 1 -/mob/living/carbon/alien/humanoid/proc/handle_regular_hud_updates() +/mob/living/carbon/alien/humanoid/handle_regular_hud_updates() if (stat == 2) sight |= SEE_TURFS diff --git a/code/modules/mob/living/carbon/alien/larva/life.dm b/code/modules/mob/living/carbon/alien/larva/life.dm index b7da388c50c..1c114151162 100644 --- a/code/modules/mob/living/carbon/alien/larva/life.dm +++ b/code/modules/mob/living/carbon/alien/larva/life.dm @@ -3,63 +3,18 @@ /mob/living/carbon/alien/larva var/temperature_alert = 0 - /mob/living/carbon/alien/larva/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - if (notransform) - return - - ..() - var/datum/gas_mixture/enviroment = loc.return_air() - if (stat != DEAD) //still breathing + if(..()) // GROW! if(amount_grown < max_grown) amount_grown++ - //First, resolve location and get a breath - if(SSair.times_fired%4==2) - //Only try to take a breath every 4 seconds, unless suffocating - spawn(0) breathe() - else //Still give containing object the chance to interact - if(istype(loc, /obj/)) - var/obj/location_as_object = loc - location_as_object.handle_internal_lifeform(src, 0) - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. - - //Handle temperature/pressure differences between body and environment - handle_environment(enviroment) - - //stuff in the stomach - //handle_stomach() - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - //some kind of bug in canmove() isn't properly calling update_icons, so this is here as a placeholder update_icons() - if(client) - handle_regular_hud_updates() -/mob/living/carbon/alien/larva/proc/handle_regular_status_updates() +/mob/living/carbon/alien/larva/handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -69,6 +24,7 @@ if(health < -25 || !getorgan(/obj/item/organ/brain)) death() eye_blind = max(1, eye_blind) + silent = 0 return 1 @@ -134,7 +90,7 @@ return 1 -/mob/living/carbon/alien/larva/proc/handle_regular_hud_updates() +/mob/living/carbon/alien/larva/handle_regular_hud_updates() if (stat == 2) sight |= SEE_TURFS @@ -213,6 +169,4 @@ return 1 -/mob/living/carbon/alien/larva/proc/handle_random_events() - return diff --git a/code/modules/mob/living/carbon/alien/life.dm b/code/modules/mob/living/carbon/alien/life.dm index cf49ce09a88..ac723c4cb26 100644 --- a/code/modules/mob/living/carbon/alien/life.dm +++ b/code/modules/mob/living/carbon/alien/life.dm @@ -1,4 +1,19 @@ -/mob/living/carbon/alien/proc/handle_chemicals_in_body() + +/mob/living/carbon/alien/Life() + + if(..()) + //First, resolve location and get a breath + if(SSair.times_fired%4==2) + //Only try to take a breath every 4 seconds, unless suffocating + spawn(0) breathe() + else //Still give containing object the chance to interact + if(istype(loc, /obj/)) + var/obj/location_as_object = loc + location_as_object.handle_internal_lifeform(src, 0) + return 1 + + +/mob/living/carbon/alien/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -113,19 +128,4 @@ return 1 -/mob/living/carbon/alien/proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) - stomach_contents.Remove(M) - continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(SSmob.times_fired%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 + diff --git a/code/modules/mob/living/carbon/brain/life.dm b/code/modules/mob/living/carbon/brain/life.dm index 1a96953f239..e5237d1e774 100644 --- a/code/modules/mob/living/carbon/brain/life.dm +++ b/code/modules/mob/living/carbon/brain/life.dm @@ -1,37 +1,5 @@ -/mob/living/carbon/brain/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - ..() - if(stat != DEAD) - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - var/datum/gas_mixture/environment // Added to prevent null location errors - if(loc) - environment = loc.return_air() - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. - - //Handle temperature/pressure differences between body and environment - if(environment) // More error checking - handle_environment(environment) - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - if(client) - handle_regular_hud_updates() - - -/mob/living/carbon/brain/proc/handle_mutations_and_radiation() +/mob/living/carbon/brain/handle_mutations_and_radiation() if (radiation) if (radiation > 100) @@ -68,7 +36,7 @@ updatehealth() -/mob/living/carbon/brain/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/brain/handle_environment(datum/gas_mixture/environment) if(!environment) return var/environment_heat_capacity = environment.heat_capacity() @@ -104,7 +72,7 @@ -/mob/living/carbon/brain/proc/handle_chemicals_in_body() +/mob/living/carbon/brain/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -120,7 +88,7 @@ return //TODO: DEFERRED -/mob/living/carbon/brain/proc/handle_regular_status_updates() //TODO: comment out the unused bits >_> +/mob/living/carbon/brain/handle_regular_status_updates() //TODO: comment out the unused bits >_> updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -204,7 +172,7 @@ return 1 -/mob/living/carbon/brain/proc/handle_regular_hud_updates() +/mob/living/carbon/brain/handle_regular_hud_updates() if (stat == 2) sight |= SEE_TURFS diff --git a/code/modules/mob/living/carbon/human/blood.dm b/code/modules/mob/living/carbon/human/blood.dm index 6e5fa7cb98b..d2186a80694 100644 --- a/code/modules/mob/living/carbon/human/blood.dm +++ b/code/modules/mob/living/carbon/human/blood.dm @@ -43,7 +43,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 src << "The blood soaks through your bandage." // Takes care blood loss and regeneration -/mob/living/carbon/human/proc/handle_blood() +/mob/living/carbon/human/handle_blood() if(NOBLOOD in dna.species.specflags) return diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index 2e52e28b198..1b4832d5ab2 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -36,35 +36,14 @@ /mob/living/carbon/human/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - if (notransform) return - if(!loc) return // Fixing a null error that occurs when the mob isn't found in the world -- TLE - - ..() - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. fire_alert = 0 //Reset this here, because both breathe() and handle_environment() have a chance to set it. tinttotal = tintcheck() //here as both hud updates and status updates call it - //TODO: seperate this out - var/datum/gas_mixture/environment = loc.return_air() - - handle_regular_hud_updates() - - //Status updates, death etc. - //TODO: optimise ~Carn - handle_regular_status_updates() - - //No need to update all of these procs if the guy is dead. - if(stat != DEAD) - for(var/datum/mutation/human/HM in dna.mutations) - HM.on_life(src) - + if(..()) + if(dna) + for(var/datum/mutation/human/HM in dna.mutations) + HM.on_life(src) if(SSmob.times_fired%4==2 || failed_last_breath) //First, resolve location and get a breath breathe() //Only try to take a breath every 4 ticks, unless suffocating else //Still give containing object the chance to interact @@ -72,46 +51,12 @@ var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - //Updates the number of stored chemicals for powers - handle_changeling() - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Disabilities - handle_disabilities() - - //Blud - handle_blood() - - //Random events (vomiting etc) - handle_random_events() - - //Handle temperature/pressure differences between body and environment - handle_environment(environment) - - //Check if we're on fire - handle_fire() - - //stuff in the stomach - handle_stomach() - - - update_canmove() - //Update our name based on whether our face is obscured/disfigured name = get_visible_name() if(dna) dna.species.spec_life(src) // for mutantraces - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - /mob/living/carbon/human/calculate_affecting_pressure(var/pressure) ..() @@ -130,7 +75,7 @@ return ONE_ATMOSPHERE - pressure_difference -/mob/living/carbon/human/proc/handle_disabilities() +/mob/living/carbon/human/handle_disabilities() if (getBrainLoss() >= 60 && stat != 2) if (prob(3)) switch(pick(1,2,3)) @@ -142,7 +87,7 @@ emote("drool") -/mob/living/carbon/human/proc/handle_mutations_and_radiation() +/mob/living/carbon/human/handle_mutations_and_radiation() if(dna) dna.species.handle_mutations_and_radiation(src) @@ -152,7 +97,7 @@ return -/mob/living/carbon/human/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/human/handle_environment(datum/gas_mixture/environment) if(dna) dna.species.handle_environment(environment, src) @@ -407,13 +352,13 @@ apply_damage(0.4*discomfort, BURN, "r_arm") */ -/mob/living/carbon/human/proc/handle_chemicals_in_body() +/mob/living/carbon/human/handle_chemicals_in_body() if(dna) dna.species.handle_chemicals_in_body(src) return //TODO: DEFERRED -/mob/living/carbon/human/proc/handle_regular_status_updates() +/mob/living/carbon/human/handle_regular_status_updates() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP silent = 0 else //ALIVE. LIGHTS ARE ON @@ -451,6 +396,8 @@ if( prob(10) && health && !hal_crit ) spawn(0) emote("snore") + else if (status_flags & FAKEDEATH) + stat = UNCONSCIOUS //CONSCIOUS else stat = CONSCIOUS @@ -539,7 +486,7 @@ return 1 -/mob/living/carbon/human/proc/handle_regular_hud_updates() +/mob/living/carbon/human/handle_regular_hud_updates() if(!client) return 0 client.screen.Remove(global_hud.blurry, global_hud.druggy, global_hud.vimpaired, global_hud.darkMask) @@ -631,7 +578,7 @@ return 1 -/mob/living/carbon/human/proc/handle_random_events() +/mob/living/carbon/human/handle_random_events() // Puke if toxloss is too high if(!stat) if (getToxLoss() >= 45 && nutrition > 20) @@ -653,24 +600,8 @@ // make it so you can only puke so fast lastpuke = 0 -/mob/living/carbon/human/proc/handle_stomach() - spawn(0) - for(var/mob/living/M in stomach_contents) - if(M.loc != src) - stomach_contents.Remove(M) - continue - if(istype(M, /mob/living/carbon) && stat != 2) - if(M.stat == 2) - M.death(1) - stomach_contents.Remove(M) - qdel(M) - continue - if(SSmob.times_fired%3==1) - if(!(M.status_flags & GODMODE)) - M.adjustBruteLoss(5) - nutrition += 10 -/mob/living/carbon/human/proc/handle_changeling() +/mob/living/carbon/human/handle_changeling() if(mind && mind.changeling) mind.changeling.regenerate() diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 4894572e2fc..664ae97b833 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -262,8 +262,8 @@ Please contact me on #coderbus IRC. ~Carnie x if(dna && dna.species.sexes) var/G = (gender == FEMALE) ? "f" : "m" - if(G == "f" && U.fitted == 1) - standing = wear_female_version(t_color, 'icons/mob/uniform.dmi', UNIFORM_LAYER) + if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) + standing = wear_female_version(t_color, 'icons/mob/uniform.dmi', UNIFORM_LAYER, U.fitted) overlays_standing[UNIFORM_LAYER] = standing if(w_uniform.blood_DNA) @@ -562,11 +562,11 @@ Please contact me on #coderbus IRC. ~Carnie x apply_overlay(L_HAND_LAYER) -/mob/living/carbon/human/proc/wear_female_version(t_color, icon, layer) +/mob/living/carbon/human/proc/wear_female_version(t_color, icon, layer, type) var/index = "[t_color]_s" var/icon/female_clothing_icon = female_clothing_icons[index] if(!female_clothing_icon) //Create standing/laying icons if they don't exist - generate_female_clothing(index,t_color,icon) + generate_female_clothing(index,t_color,icon,type) var/standing = image("icon"=female_clothing_icons["[t_color]_s"], "layer"=-layer) return(standing) diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index 52ed2acedc0..006aa7f31f9 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -11,4 +11,119 @@ else if (internals) internals.icon_state = "internal0" - return \ No newline at end of file + return + +/mob/living/carbon/Life() + set invisibility = 0 + set background = BACKGROUND_ENABLED + + if (notransform) + return + if(!loc) + return + var/datum/gas_mixture/environment = loc.return_air() + + //Handle temperature/pressure differences between body and environment + handle_environment(environment) + + handle_regular_status_updates() // Status updates, death etc. + + if(stat != DEAD) + + //Updates the number of stored chemicals for powers + handle_changeling() + + //Mutations and radiation + handle_mutations_and_radiation() + + //Chemicals in the body + handle_chemicals_in_body() + + //Disabilities + handle_disabilities() + + //Blud + handle_blood() + + //Random events (vomiting etc) + handle_random_events() + + . = 1 + + handle_fire() + + //stuff in the stomach + handle_stomach() + + update_canmove() + + update_gravity(mob_has_gravity()) + + for(var/obj/item/weapon/grab/G in src) + G.process() + + if(client) + handle_regular_hud_updates() + + return . + + + + + + + + + + + + + + +//remember to remove the "proc" of the child procs of these. + +/mob/living/carbon/proc/handle_changeling() + return + +/mob/living/carbon/proc/handle_mutations_and_radiation() + return + +/mob/living/carbon/proc/handle_chemicals_in_body() + return + +/mob/living/carbon/proc/handle_disabilities() + return + +/mob/living/carbon/proc/handle_blood() + return + +/mob/living/carbon/proc/handle_random_events() + return + +/mob/living/carbon/proc/handle_environment(var/datum/gas_mixture/environment) + return + +/mob/living/carbon/proc/handle_regular_status_updates() + return + +/mob/living/carbon/proc/handle_stomach() + spawn(0) + for(var/mob/living/M in stomach_contents) + if(M.loc != src) + stomach_contents.Remove(M) + continue + if(istype(M, /mob/living/carbon) && stat != 2) + if(M.stat == 2) + M.death(1) + stomach_contents.Remove(M) + qdel(M) + continue + if(SSmob.times_fired%3==1) + if(!(M.status_flags & GODMODE)) + M.adjustBruteLoss(5) + nutrition += 10 + +/mob/living/carbon/proc/handle_regular_hud_updates() + return + + diff --git a/code/modules/mob/living/carbon/monkey/life.dm b/code/modules/mob/living/carbon/monkey/life.dm index fea7ac70960..d2015e7dc8c 100644 --- a/code/modules/mob/living/carbon/monkey/life.dm +++ b/code/modules/mob/living/carbon/monkey/life.dm @@ -10,16 +10,7 @@ /mob/living/carbon/monkey/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - if (notransform) return - ..() - - var/datum/gas_mixture/environment // Added to prevent null location errors-- TLE - if(loc) - environment = loc.return_air() - - if (stat != DEAD) //still breathing + if(..()) //First, resolve location and get a breath if(SSmob.times_fired%4==2) //Only try to take a breath every 4 seconds, unless suffocating @@ -29,42 +20,6 @@ var/obj/location_as_object = loc location_as_object.handle_internal_lifeform(src, 0) - - //Updates the number of stored chemicals for powers - handle_changeling() - - //Mutations and radiation - handle_mutations_and_radiation() - - //Chemicals in the body - handle_chemicals_in_body() - - //Disabilities - handle_disabilities() - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. - - //Handle temperature/pressure differences between body and environment - if(environment) // More error checking -- TLE - handle_environment(environment) - - //Check if we're on fire - handle_fire() - - //Status updates, death etc. - handle_regular_status_updates() - update_canmove() - - if(client) - handle_regular_hud_updates() - - // Grabbing - for(var/obj/item/weapon/grab/G in src) - G.process() - if(!client && stat == CONSCIOUS) if(prob(33) && canmove && isturf(loc) && !pulledby && !grabbed_by.len) step(src, pick(cardinal)) @@ -75,9 +30,9 @@ ..() return pressure -/mob/living/carbon/monkey/proc/handle_disabilities() +/mob/living/carbon/monkey/handle_disabilities() -/mob/living/carbon/monkey/proc/handle_mutations_and_radiation() +/mob/living/carbon/monkey/handle_mutations_and_radiation() if (radiation) if (radiation > 100) @@ -272,7 +227,7 @@ return 1 -/mob/living/carbon/monkey/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/monkey/handle_environment(datum/gas_mixture/environment) if(!environment) return var/environment_heat_capacity = environment.heat_capacity() @@ -320,7 +275,7 @@ else adjustFireLoss(5.0*discomfort) -/mob/living/carbon/monkey/proc/handle_chemicals_in_body() +/mob/living/carbon/monkey/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -342,7 +297,7 @@ return //TODO: DEFERRED -/mob/living/carbon/monkey/proc/handle_regular_status_updates() +/mob/living/carbon/monkey/handle_regular_status_updates() updatehealth() if(stat == DEAD) //DEAD. BROWN BREAD. SWIMMING WITH THE SPESS CARP @@ -412,7 +367,7 @@ return 1 -/mob/living/carbon/monkey/proc/handle_regular_hud_updates() +/mob/living/carbon/monkey/handle_regular_hud_updates() if (stat == 2) sight |= SEE_TURFS @@ -513,14 +468,14 @@ return 1 -/mob/living/carbon/monkey/proc/handle_random_events() +/mob/living/carbon/monkey/handle_random_events() if (prob(1) && prob(2)) spawn(0) emote("scratch") return -/mob/living/carbon/monkey/proc/handle_changeling() +/mob/living/carbon/monkey/handle_changeling() if(mind && mind.changeling) mind.changeling.regenerate() hud_used.lingchemdisplay.invisibility = 0 diff --git a/code/modules/mob/living/carbon/slime/life.dm b/code/modules/mob/living/carbon/slime/life.dm index 90db25b54d0..dd04410c66b 100644 --- a/code/modules/mob/living/carbon/slime/life.dm +++ b/code/modules/mob/living/carbon/slime/life.dm @@ -6,38 +6,12 @@ var/SStun = 0 // stun variable /mob/living/carbon/slime/Life() - set invisibility = 0 - set background = BACKGROUND_ENABLED - - if (src.notransform) - return - - ..() - - if(stat != DEAD) - //Chemicals in the body - handle_chemicals_in_body() - + if(..()) handle_nutrition() - handle_targets() - if (!ckey) handle_speech_and_mood() - var/datum/gas_mixture/environment - if(src.loc) - environment = loc.return_air() - - //Apparently, the person who wrote this code designed it so that - //blinded get reset each cycle and then get activated later in the - //code. Very ugly. I dont care. Moving this stuff here so its easy - //to find it. - - if(environment) - handle_environment(environment) // Handle temperature/pressure differences between body and environment - - handle_regular_status_updates() // Status updates, death etc. /mob/living/carbon/slime/proc/AIprocess() // the master AI process @@ -118,7 +92,7 @@ AIproc = 0 -/mob/living/carbon/slime/proc/handle_environment(datum/gas_mixture/environment) +/mob/living/carbon/slime/handle_environment(datum/gas_mixture/environment) if(!environment) adjustToxLoss(rand(10,20)) return @@ -167,7 +141,7 @@ temp_change = (temperature - current) return temp_change -/mob/living/carbon/slime/proc/handle_chemicals_in_body() +/mob/living/carbon/slime/handle_chemicals_in_body() if(reagents) reagents.metabolize(src) @@ -181,7 +155,7 @@ return //TODO: DEFERRED -/mob/living/carbon/slime/proc/handle_regular_status_updates() +/mob/living/carbon/slime/handle_regular_status_updates() if(is_adult) health = 200 - (getOxyLoss() + getToxLoss() + getFireLoss() + getBruteLoss() + getCloneLoss()) diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 6ad0c9fd88d..77947b7b4ff 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -24,4 +24,4 @@ if(changed) animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. \ No newline at end of file + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). \ No newline at end of file diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm index e60a6c150b1..9a4f7f5fb39 100644 --- a/code/modules/mob/living/living.dm +++ b/code/modules/mob/living/living.dm @@ -737,7 +737,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/proc/float(on) if(on && !floating) - animate(src, pixel_y = 2, time = 10, loop = -1) + animate(src, pixel_y = pixel_y + 2, time = 10, loop = -1) floating = 1 else if(!on && floating) animate(src, pixel_y = initial(pixel_y), time = 10) @@ -820,7 +820,7 @@ Sorry Giacom. Please don't be mad :( /mob/living/do_attack_animation(atom/A) ..() - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure to restart it in next life(). /mob/living/proc/do_jitter_animation(jitteriness) var/amplitude = min(4, (jitteriness/100) + 1) @@ -828,5 +828,5 @@ Sorry Giacom. Please don't be mad :( var/pixel_y_diff = rand(-amplitude/3, amplitude/3) animate(src, pixel_x = pixel_x + pixel_x_diff, pixel_y = pixel_y + pixel_y_diff , time = 2, loop = 6) animate(pixel_x = initial(pixel_x) , pixel_y = initial(pixel_y) , time = 2) - floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart the bouncing after the next movement. + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure to restart it in next life(). diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 3b3cbaa3235..1b3b9fbe187 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -786,6 +786,3 @@ var/list/ai_list = list() /mob/living/silicon/ai/attack_slime(mob/living/carbon/slime/user) return -/mob/living/silicon/ai/grabbedby(mob/living/user) - return - diff --git a/code/modules/mob/living/silicon/ai/life.dm b/code/modules/mob/living/silicon/ai/life.dm index 5de29f00059..a3fd584aac4 100644 --- a/code/modules/mob/living/silicon/ai/life.dm +++ b/code/modules/mob/living/silicon/ai/life.dm @@ -12,6 +12,8 @@ src.updatehealth() + update_gravity(mob_has_gravity()) + if (src.malfhack) if (src.malfhack.aidisabled) src << "ERROR: APC access disabled, hack attempt canceled." diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 99ca6525d46..59e4ca94bec 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -14,7 +14,11 @@ update_items() if (src.stat != DEAD) //still using power use_power() + update_canmove() + + update_gravity(mob_has_gravity()) + handle_fire() diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 5458b66ba5f..7e9beb74f84 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -87,6 +87,13 @@ modules += new /obj/item/weapon/reagent_containers/glass/beaker/large(src) modules += new /obj/item/weapon/reagent_containers/dropper(src) modules += new /obj/item/weapon/reagent_containers/syringe(src) + modules += new /obj/item/weapon/surgical_drapes(src) + modules += new /obj/item/weapon/retractor(src) + modules += new /obj/item/weapon/hemostat(src) + modules += new /obj/item/weapon/cautery(src) + modules += new /obj/item/weapon/surgicaldrill(src) + modules += new /obj/item/weapon/scalpel(src) + modules += new /obj/item/weapon/circular_saw(src) modules += new /obj/item/weapon/extinguisher/mini(src) emag = new /obj/item/weapon/reagent_containers/spray(src) @@ -96,6 +103,14 @@ var/obj/item/weapon/reagent_containers/spray/S = emag S.banned_reagents = list() + var/datum/robot_energy_storage/gauze/gauzestore = new /datum/robot_energy_storage/gauze(src) + + var/obj/item/stack/medical/gauze/cyborg/G = new /obj/item/stack/medical/gauze/cyborg(src) + G.source = gauzestore + modules += G + + storages += gauzestore + fix_modules() @@ -289,3 +304,8 @@ max_energy = 50 recharge_rate = 2 name = "Wire Synthesizer" + +/datum/robot_energy_storage/gauze + max_energy = 2500 + recharge_rate = 250 + name = "Gauze Synthesizer" \ No newline at end of file diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 1d241afcca8..461456ff887 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -418,4 +418,7 @@ /mob/living/silicon/proc/GetPhoto() if (aicamera) - return aicamera.selectpicture(aicamera) \ No newline at end of file + return aicamera.selectpicture(aicamera) + +/mob/living/silicon/grabbedby(mob/living/user) + return \ No newline at end of file diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 45dbf172af0..333f3b8b1ab 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -85,6 +85,8 @@ /mob/living/simple_animal/Life() + update_gravity(mob_has_gravity()) + //Health if(stat == DEAD) if(health > 0) @@ -462,7 +464,7 @@ else if(istype(M, childtype)) //Check for children FIRST. children++ else if(istype(M, species)) - if(M.client) + if(M.ckey) continue else if(!istype(M, childtype) && M.gender == MALE) //Better safe than sorry ;_; partner = M diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index e528a81b7ca..806f4d28237 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -69,10 +69,10 @@ /client/Center() - if (isobj(mob.loc)) + if(isobj(mob.loc)) var/obj/O = mob.loc - if (mob.canmove) - return O.relaymove(mob, 16) + if(mob.canmove) + return O.relaymove(mob, 0) return diff --git a/code/modules/power/power.dm b/code/modules/power/power.dm index 3ee6979100f..68c82ec197a 100644 --- a/code/modules/power/power.dm +++ b/code/modules/power/power.dm @@ -464,7 +464,7 @@ // return a knot cable (O-X) if one is present in the turf // null if there's none /turf/proc/get_cable_node() - if(!istype(src, /turf/simulated/floor)) + if(!src.cancable) return null for(var/obj/structure/cable/C in src) if(C.d1 == 0) diff --git a/code/modules/power/solar.dm b/code/modules/power/solar.dm index c0341f3eb52..4bd0315f263 100644 --- a/code/modules/power/solar.dm +++ b/code/modules/power/solar.dm @@ -367,36 +367,32 @@ /obj/machinery/power/solar_control/attack_hand(mob/user) if(!..()) - interact(user) + ui_interact(user) -/obj/machinery/power/solar_control/interact(mob/user) +/obj/machinery/power/solar_control/ui_interact(mob/user, ui_key = "main") - var/t = "Generated power : [round(lastgen)] W
" - t += "Orientation: [rate_control(src,"cdir","[cdir]°",1,15)] ([angle2text(cdir)])
" - t += "Tracking:
" - switch(track) - if(0) - t += "Off Timed Auto
" - if(1) - t += "Off Timed Auto
" - if(2) - t += "Off Timed Auto
" + var/data = list() - t += "Tracking Rate: [rate_control(src,"tdir","[trackrate] deg/h ([trackrate<0 ? "CCW" : "CW"])",1,30,180)]

" + data["generated"] = round(lastgen) + data["angle"] = cdir + data["direction"] = angle2text(cdir) - t += "Connected devices:
" + data["tracking_state"] = track + data["tracking_rate"] = trackrate + data["rotating_way"] = (trackrate<0 ? "CCW" : "CW") - t += "Search for devices
" - t += "Solar panels : [connected_panels.len] connected
" - t += "Solar tracker : [connected_tracker ? "Found" : "Not found"]

" + data["connected_panels"] = connected_panels.len + data["connected_tracker"] = (connected_tracker ? 1 : 0) - t += "Close" - - var/datum/browser/popup = new(user, "solar", name) - popup.set_content(t) - popup.open() - - return + var/datum/nanoui/ui = SSnano.get_open_ui(user, src, ui_key) + if (!ui) + ui = new(user, src, ui_key, "solar_control.tmpl", name, 490, 420) + ui.set_initial_data(data) + ui.open() + ui.set_auto_update(1) + else + ui.push_data(data) + return /obj/machinery/power/solar_control/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver)) @@ -445,19 +441,11 @@ targetdir = (targetdir + trackrate/abs(trackrate) + 360) % 360 //... do it nexttime += 36000/abs(trackrate) //reset the counter for the next 1° - src.updateDialog() - /obj/machinery/power/solar_control/Topic(href, href_list) if(..()) - usr << browse(null, "window=solcon") - usr.unset_machine() - return - if(href_list["close"] ) - usr << browse(null, "window=solcon") - usr.unset_machine() return - if(href_list["rate control"]) + if(href_list["rate_control"]) if(href_list["cdir"]) src.cdir = dd_range(0,359,(360+src.cdir+text2num(href_list["cdir"]))%360) src.targetdir = src.cdir @@ -486,9 +474,6 @@ connected_tracker.set_angle(SSsun.angle) set_panels(cdir) - src.updateUsrDialog() - return - //rotates the panel to the passed angle /obj/machinery/power/solar_control/proc/set_panels(var/cdir) @@ -534,9 +519,3 @@ /obj/item/weapon/paper/solar name = "paper- 'Going green! Setup your own solar array instructions.'" info = "

Welcome

At greencorps we love the environment, and space. With this package you are able to help mother nature and produce energy without any usage of fossil fuel or plasma! Singularity energy is dangerous while solar energy is safe, which is why it's better. Now here is how you setup your own solar array.

You can make a solar panel by wrenching the solar assembly onto a cable node. Adding a glass panel, reinforced or regular glass will do, will finish the construction of your solar panel. It is that easy!

Now after setting up 19 more of these solar panels you will want to create a solar tracker to keep track of our mother nature's gift, the sun. These are the same steps as before except you insert the tracker equipment circuit into the assembly before performing the final step of adding the glass. You now have a tracker! Now the last step is to add a computer to calculate the sun's movements and to send commands to the solar panels to change direction with the sun. Setting up the solar computer is the same as setting up any computer, so you should have no trouble in doing that. You do need to put a wire node under the computer, and the wire needs to be connected to the tracker.

Congratulations, you should have a working solar array. If you are having trouble, here are some tips. Make sure all solar equipment are on a cable node, even the computer. You can always deconstruct your creations if you make a mistake.

That's all to it, be safe, be green!

" - -/proc/rate_control(var/S, var/V, var/C, var/Min=1, var/Max=5, var/Limit=null) //How not to name vars - var/href = "-[href]=-[Min]'>- [(C?C : 0)] [href]=[Min]'>+[href]=[Max]'>+" - if(Limit) return "[href]=-[Limit]'>-"+rate+"[href]=[Limit]'>+" - return rate \ No newline at end of file diff --git a/code/modules/projectiles/ammunition/magazines.dm b/code/modules/projectiles/ammunition/magazines.dm index 67b56042c19..6addb24a524 100644 --- a/code/modules/projectiles/ammunition/magazines.dm +++ b/code/modules/projectiles/ammunition/magazines.dm @@ -117,29 +117,29 @@ /obj/item/ammo_box/magazine/m45 name = "handgun magazine (.45)" - icon_state = "45" + icon_state = "45-8" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" max_ammo = 8 /obj/item/ammo_box/magazine/m45/update_icon() ..() - icon_state = "[initial(icon_state)]-[ammo_count() ? "8" : "0"]" + icon_state = "45-[ammo_count() ? "8" : "0"]" /obj/item/ammo_box/magazine/smgm9mm name = "SMG magazine (9mm)" - icon_state = "smg9mm" + icon_state = "smg9mm-20" ammo_type = /obj/item/ammo_casing/c9mm caliber = "9mm" max_ammo = 20 /obj/item/ammo_box/magazine/smgm9mm/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),5)]" + icon_state = "smg9mm-[round(ammo_count(),5)]" /obj/item/ammo_box/magazine/smgm45 name = "SMG magazine (.45)" - icon_state = "c20r45" + icon_state = "c20r45-20" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/c45 caliber = ".45" @@ -147,7 +147,7 @@ /obj/item/ammo_box/magazine/smgm45/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),2)]" + icon_state = "c20r45-[round(ammo_count(),2)]" obj/item/ammo_box/magazine/tommygunm45 name = "drum magazine (.45)" @@ -184,7 +184,7 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m762 name = "box magazine (7.62mm)" - icon_state = "a762" + icon_state = "a762-50" origin_tech = "combat=2" ammo_type = /obj/item/ammo_casing/a762 caliber = "a762" @@ -192,13 +192,14 @@ obj/item/ammo_box/magazine/tommygunm45 /obj/item/ammo_box/magazine/m762/update_icon() ..() - icon_state = "[initial(icon_state)]-[round(ammo_count(),10)]" + icon_state = "a762-[round(ammo_count(),10)]" + /obj/item/ammo_box/magazine/m12g - name = "shotgun magazine (12g taser slugs)" - icon_state = "m12gs" + name = "shotgun magazine (12g buckshot)" + icon_state = "m12gb" + ammo_type = /obj/item/ammo_casing/shotgun/buckshot origin_tech = "combat=3;syndicate=1" - ammo_type = /obj/item/ammo_casing/shotgun/stunslug caliber = "shotgun" max_ammo = 8 @@ -206,14 +207,12 @@ obj/item/ammo_box/magazine/tommygunm45 ..() icon_state = "[initial(icon_state)]-[Ceiling(ammo_count(0)/8)*8]" - -/obj/item/ammo_box/magazine/m12g/buckshot - name = "shotgun magazine (12g buckshot)" - icon_state = "m12gb" - ammo_type = /obj/item/ammo_casing/shotgun/buckshot - +/obj/item/ammo_box/magazine/m12g/stun + name = "shotgun magazine (12g taser slugs)" + icon_state = "m12gs" + ammo_type = /obj/item/ammo_casing/shotgun/stunslug /obj/item/ammo_box/magazine/m12g/dragon name = "shotgun magazine (12g dragon's breath)" icon_state = "m12gf" - ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath + ammo_type = /obj/item/ammo_casing/shotgun/incendiary/dragonsbreath diff --git a/code/modules/projectiles/guns/energy/special.dm b/code/modules/projectiles/guns/energy/special.dm index a20702e8002..83a7f26c922 100644 --- a/code/modules/projectiles/guns/energy/special.dm +++ b/code/modules/projectiles/guns/energy/special.dm @@ -4,16 +4,26 @@ icon_state = "ionrifle" item_state = null //so the human update icon uses the icon_state instead. origin_tech = "combat=2;magnets=4" + can_flashlight = 1 w_class = 5 flags = CONDUCT slot_flags = SLOT_BACK ammo_type = list(/obj/item/ammo_casing/energy/ion) - pin = null /obj/item/weapon/gun/energy/ionrifle/emp_act(severity) return +/obj/item/weapon/gun/energy/ionrifle/carbine + name = "ion carbine" + desc = "The MK.II Prototype Ion Projector is a lightweight carbine version of the larger ion rifle, built to be ergonomic and efficient." + icon_state = "ioncarbine" + item_state = "ioncarbine" + origin_tech = "combat=4;magnets=4;materials=4" + w_class = 3 + slot_flags = SLOT_BELT + pin = null + /obj/item/weapon/gun/energy/decloner name = "biological demolecularisor" desc = "A gun that discharges high amounts of controlled radiation to slowly break a target into component elements." diff --git a/code/modules/reagents/Chemistry-Goon-Toxins.dm b/code/modules/reagents/Chemistry-Goon-Toxins.dm index 8c0a3b7d61c..d7066b8abd1 100644 --- a/code/modules/reagents/Chemistry-Goon-Toxins.dm +++ b/code/modules/reagents/Chemistry-Goon-Toxins.dm @@ -117,7 +117,7 @@ datum/reagent/neurotoxin2/on_mob_life(var/mob/living/M as mob) result = "neurotoxin2" required_reagents = list("space_drugs" = 1) result_amount = 1 - required_temp = 200 + required_temp = 370 datum/reagent/cyanide name = "Cyanide" diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 7671250cf46..30955e51207 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -323,6 +323,7 @@ datum/reagents/proc/handle_reactions() var/list/seen = viewers(4, get_turf(my_atom)) if(!istype(my_atom, /mob)) // No bubbling mobs + playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1) for(var/mob/M in seen) M << "\icon[my_atom] [C.mix_message]" @@ -335,8 +336,6 @@ datum/reagents/proc/handle_reactions() ME2.name = "used slime extract" ME2.desc = "This extract has been used up." - playsound(get_turf(my_atom), 'sound/effects/bubbles.ogg', 80, 1) - C.on_reaction(src, created_volume) reaction_occured = 1 break diff --git a/code/modules/reagents/Chemistry-Machinery.dm b/code/modules/reagents/Chemistry-Machinery.dm index 4f048370812..01c2b9cf303 100644 --- a/code/modules/reagents/Chemistry-Machinery.dm +++ b/code/modules/reagents/Chemistry-Machinery.dm @@ -18,6 +18,7 @@ var/recharged = 0 var/recharge_delay = 5 //Time it game ticks between recharges var/image/icon_beaker = null //cached overlay + var/uiname = "Chem Dispenser 5000" var/list/dispensable_reagents = list("hydrogen","lithium","carbon","nitrogen","oxygen","fluorine", "sodium","aluminium","silicon","phosphorus","sulfur","chlorine","potassium","iron", "copper","mercury","radium","water","ethanol","sugar","sacid","fuel","silver","iodine","bromine","stable_plasma") @@ -108,7 +109,7 @@ if (!ui) // the ui does not exist, so we'll create a new() one // for a list of parameters and their descriptions see the code docs in \code\modules\nano\nanoui.dm - ui = new(user, src, ui_key, "chem_dispenser.tmpl", "Chem Dispenser 5000", 490, 710) + ui = new(user, src, ui_key, "chem_dispenser.tmpl", "[uiname]", 490, 710) // when the ui is first opened this is the data it will use ui.set_initial_data(data) // open the new ui window @@ -1445,3 +1446,47 @@ obj/machinery/computer/pandemic/proc/replicator_cooldown(var/waittime) ui = new(user, src, ui_key, "chem_heater.tmpl", "ChemHeater", 350, 270) ui.set_initial_data(data) ui.open() + +/////////////////////////////////////////////////////////////////////////// + +/obj/machinery/chem_dispenser/drinks + name = "soda dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "soda_dispenser" + energy = 100 + max_energy = 100 + amount = 30 + recharge_delay = 5 + uiname = "Soda Dispenser" + dispensable_reagents = list("water","ice","coffee","cream","tea","icetea","cola","spacemountainwind","dr_gibb","space_up","tonic","sodawater","lemon_lime","sugar","orangejuice","limejuice","tomatojuice") + +/obj/machinery/chem_dispenser/drinks/attackby(var/obj/item/O as obj, var/mob/user as mob) + + if(default_unfasten_wrench(user, O)) + return + + if (istype(O,/obj/item/weapon/reagent_containers/glass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/drinkingglass) || \ + istype(O,/obj/item/weapon/reagent_containers/food/drinks/shaker)) + + if (beaker) + return 1 + else + src.beaker = O + user.drop_item() + O.loc = src + update_icon() + src.updateUsrDialog() + return 0 + + + +/obj/machinery/chem_dispenser/drinks/beer + name = "booze dispenser" + anchored = 1 + icon = 'icons/obj/chemical.dmi' + icon_state = "booze_dispenser" + uiname = "Booze Dispenser" + dispensable_reagents = list("lemon_lime","sugar","orangejuice","limejuice","sodawater","tonic","beer","kahlua","whiskey","wine","vodka","gin","rum","tequila","vermouth","cognac","ale") + diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index 992aefe83bc..cc00c95189d 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -187,17 +187,17 @@ datum/reagent/consumable/frostoil/on_mob_life(var/mob/living/M as mob) if(!data) data = 1 switch(data) if(1 to 15) - M.bodytemperature -= 5 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT if(holder.has_reagent("capsaicin")) holder.remove_reagent("capsaicin", 5) if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(5,20) if(15 to 25) - M.bodytemperature -= 10 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT if(istype(M, /mob/living/carbon/slime)) M.bodytemperature -= rand(10,20) if(25 to INFINITY) - M.bodytemperature -= 15 * TEMPERATURE_DAMAGE_COEFFICIENT + M.bodytemperature -= 20 * TEMPERATURE_DAMAGE_COEFFICIENT if(prob(1)) M.emote("shiver") if(istype(M, /mob/living/carbon/slime)) diff --git a/code/modules/reagents/Chemistry-Recipes.dm b/code/modules/reagents/Chemistry-Recipes.dm index e81ee2c5813..cdd38bda439 100644 --- a/code/modules/reagents/Chemistry-Recipes.dm +++ b/code/modules/reagents/Chemistry-Recipes.dm @@ -411,27 +411,18 @@ silicate mob_react = 1 /datum/chemical_reaction/foam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "The solution violently bubbles!" - - location = get_turf(holder.my_atom) for(var/mob/M in viewers(5, location)) M << "The solution spews out foam!" - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) + s.set_up(created_volume, location, holder) s.start() holder.clear_reagents() return + /datum/chemical_reaction/metalfoam name = "Metal Foam" id = "metalfoam" @@ -441,18 +432,18 @@ silicate mob_react = 1 /datum/chemical_reaction/metalfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) for(var/mob/M in viewers(5, location)) - M << "The solution spews out a metalic foam!" + M << "The solution spews out a metallic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/effect/system/foam_spread/metal/s = new() s.set_up(created_volume, location, holder, 1) s.start() + holder.clear_reagents() return + /datum/chemical_reaction/ironfoam name = "Iron Foam" id = "ironlfoam" @@ -462,21 +453,18 @@ silicate mob_react = 1 /datum/chemical_reaction/ironfoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "The solution spews out a metalic foam!" + M << "The solution spews out a metallic foam!" - var/datum/effect/effect/system/foam_spread/s = new() + var/datum/effect/effect/system/foam_spread/metal/s = new() s.set_up(created_volume, location, holder, 2) s.start() + holder.clear_reagents() return - /datum/chemical_reaction/foaming_agent name = "Foaming Agent" id = "foaming_agent" @@ -527,289 +515,6 @@ datum/chemical_reaction/pestkiller required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 -/////////////////////////////////////OLD SLIME CORE REACTIONS /////////////////////////////// -/* -/datum/chemical_reaction/slimepepper - name = "Slime Condensedcapaicin" - id = "m_condensedcapaicin" - result = "condensedcapsaicin" - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 -/datum/chemical_reaction/slimefrost - name = "Slime Frost Oil" - id = "m_frostoil" - result = "frostoil" - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 -/datum/chemical_reaction/slimeglycerol - name = "Slime Glycerol" - id = "m_glycerol" - result = "glycerol" - required_reagents = list("blood" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 1 - -/datum/chemical_reaction/slime_explosion - name = "Slime Explosion" - id = "m_explosion" - result = null - required_reagents = list("blood" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slime_explosion/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - var/datum/effect/effect/system/reagents_explosion/e = new() - e.set_up(round (created_volume/10, 1), location, 0, 0) - e.start() - - holder.clear_reagents() - return -/datum/chemical_reaction/slimejam - name = "Slime Jam" - id = "m_jam" - result = "slimejelly" - required_reagents = list("water" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slimesynthi - name = "Slime Synthetic Flesh" - id = "m_flesh" - result = null - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 2 -/datum/chemical_reaction/slimesynthi/on_reaction(var/datum/reagents/holder, var/created_volume) - var/location = get_turf(holder.my_atom) - new /obj/item/weapon/reagent_containers/food/snacks/meat/syntiflesh(location) - return - -/datum/chemical_reaction/slimeenzyme - name = "Slime Enzyme" - id = "m_enzyme" - result = "enzyme" - required_reagents = list("blood" = 1, "water" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimeplasma - name = "Slime Plasma" - id = "m_plasma" - result = "plasma" - required_reagents = list("sugar" = 1, "blood" = 2) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimevirus - name = "Slime Virus" - id = "m_virus" - result = null - required_reagents = list("sugar" = 1, "sacid" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 3 -/datum/chemical_reaction/slimevirus/on_reaction(var/datum/reagents/holder, var/created_volume) - holder.clear_reagents() - - var/virus = pick(/datum/disease/advance/flu, /datum/disease/advance/cold, \ - /datum/disease/pierrot_throat, /datum/disease/fake_gbs, \ - /datum/disease/brainrot, /datum/disease/magnitis) - - - var/datum/disease/F = new virus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) - - holder.add_reagent("cyanide", rand(1,10)) - - return - -/datum/chemical_reaction/slimeteleport - name = "Slime Teleport" - id = "m_tele" - result = null - required_reagents = list("facid" = 2, "mutagen" = 2) - required_catalysts = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimeteleport/on_reaction(var/datum/reagents/holder, var/created_volume) - - // Calculate new position (searches through beacons in world) - var/obj/item/device/radio/beacon/chosen - var/list/possible = list() - for(var/obj/item/device/radio/beacon/W in world) - possible += W - - if(possible.len > 0) - chosen = pick(possible) - - if(chosen) - // Calculate previous position for transition - - var/turf/FROM = get_turf(holder.my_atom) // the turf of origin we're travelling FROM - var/turf/TO = get_turf(chosen) // the turf of origin we're travelling TO - - playsound(TO, 'sound/effects/phasein.ogg', 100, 1) - - var/list/flashers = list() - for(var/mob/living/carbon/human/M in viewers(TO, null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) // flash dose faggots - flashers += M - - var/y_distance = TO.y - FROM.y - var/x_distance = TO.x - FROM.x - for (var/atom/movable/A in range(2, FROM )) // iterate thru list of mobs in the area - if(istype(A, /obj/item/device/radio/beacon)) continue // don't teleport beacons because that's just insanely stupid - if( A.anchored && !istype(A, /mob/dead/observer) ) continue // don't teleport anchored things (computers, tables, windows, grilles, etc) because this causes problems! - // do teleport ghosts however because hell why not - - var/turf/newloc = locate(A.x + x_distance, A.y + y_distance, TO.z) // calculate the new place - if(!A.Move(newloc)) // if the atom, for some reason, can't move, FORCE them to move! :) We try Move() first to invoke any movement-related checks the atom needs to perform after moving - A.loc = locate(A.x + x_distance, A.y + y_distance, TO.z) - - spawn() - if(ismob(A) && !(A in flashers)) // don't flash if we're already doing an effect - var/mob/M = A - if(M.client) - var/obj/blueeffect = new /obj(src) - blueeffect.screen_loc = "WEST,SOUTH to EAST,NORTH" - blueeffect.icon = 'icons/effects/effects.dmi' - blueeffect.icon_state = "shieldsparkles" - blueeffect.layer = 17 - blueeffect.mouse_opacity = 0 - M.client.screen += blueeffect - sleep(20) - M.client.screen -= blueeffect - qdel(blueeffect) -/datum/chemical_reaction/slimecrit - name = "Slime Crit" - id = "m_tele" - result = null - required_reagents = list("sacid" = 1, "blood" = 1) - required_catalysts = list("plasma" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimecrit/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/blocked = list(/mob/living/simple_animal/hostile, - /mob/living/simple_animal/hostile/pirate, - /mob/living/simple_animal/hostile/pirate/ranged, - /mob/living/simple_animal/hostile/russian, - /mob/living/simple_animal/hostile/russian/ranged, - /mob/living/simple_animal/hostile/syndicate, - /mob/living/simple_animal/hostile/syndicate/melee, - /mob/living/simple_animal/hostile/syndicate/melee/space, - /mob/living/simple_animal/hostile/syndicate/ranged, - /mob/living/simple_animal/hostile/syndicate/ranged/space, - /mob/living/simple_animal/hostile/alien/queen/large, - /mob/living/simple_animal/clown - )//exclusion list for things you don't want the reaction to create. - var/list/critters = typesof(/mob/living/simple_animal/hostile) - blocked // list of possible hostile mobs - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= created_volume, i++) - var/chosen = pick(critters) - var/mob/living/simple_animal/hostile/C = new chosen - C.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(C, pick(NORTH,SOUTH,EAST,WEST)) -/datum/chemical_reaction/slimebork - name = "Slime Bork" - id = "m_tele" - result = null - required_reagents = list("sugar" = 1, "water" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 4 -/datum/chemical_reaction/slimebork/on_reaction(var/datum/reagents/holder, var/created_volume) - - var/list/borks = typesof(/obj/item/weapon/reagent_containers/food/snacks) - /obj/item/weapon/reagent_containers/food/snacks - // BORK BORK BORK - - playsound(get_turf(holder.my_atom), 'sound/effects/phasein.ogg', 100, 1) - - for(var/mob/living/carbon/human/M in viewers(get_turf(holder.my_atom), null)) - if(M:eyecheck() <= 0) - flick("e_flash", M.flash) - - for(var/i = 1, i <= created_volume + rand(1,2), i++) - var/chosen = pick(borks) - var/obj/B = new chosen - if(B) - B.loc = get_turf(holder.my_atom) - if(prob(50)) - for(var/j = 1, j <= rand(1, 3), j++) - step(B, pick(NORTH,SOUTH,EAST,WEST)) - - - -/datum/chemical_reaction/slimechloral - name = "Slime Chloral" - id = "m_bunch" - result = "chloralhydrate" - required_reagents = list("blood" = 1, "water" = 2) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 5 -/datum/chemical_reaction/slimeretro - name = "Slime Retro" - id = "m_xeno" - result = null - required_reagents = list("sugar" = 1) - result_amount = 1 - required_container = /obj/item/slime_core - required_other = 5 -/datum/chemical_reaction/slimeretro/on_reaction(var/datum/reagents/holder, var/created_volume) - var/datum/disease/F = new /datum/disease/dna_retrovirus(0) - var/list/data = list("viruses"= list(F)) - holder.add_reagent("blood", 20, data) -/datum/chemical_reaction/slimefoam - name = "Slime Foam" - id = "m_foam" - result = null - required_reagents = list("sacid" = 1) - result_amount = 2 - required_container = /obj/item/slime_core - required_other = 5 - -/datum/chemical_reaction/slimefoam/on_reaction(var/datum/reagents/holder, var/created_volume) - - - var/location = get_turf(holder.my_atom) - for(var/mob/M in viewers(5, location)) - M << "\red The solution violently bubbles!" - - location = get_turf(holder.my_atom) - - for(var/mob/M in viewers(5, location)) - M << "\red The solution spews out foam!" - - //world << "Holder volume is [holder.total_volume]" - //for(var/datum/reagent/R in holder.reagent_list) - // world << "[R.name] = [R.volume]" - - var/datum/effect/effect/system/foam_spread/s = new() - s.set_up(created_volume, location, holder, 0) - s.start() - holder.clear_reagents() - return -*/ /////////////////////////////////////////////NEW SLIME CORE REACTIONS///////////////////////////////////////////// //Grey diff --git a/code/modules/reagents/reagent_containers/borghydro.dm b/code/modules/reagents/reagent_containers/borghydro.dm index e676ca17a92..7e2e63aba62 100644 --- a/code/modules/reagents/reagent_containers/borghydro.dm +++ b/code/modules/reagents/reagent_containers/borghydro.dm @@ -23,7 +23,7 @@ Borg Hypospray var/recharge_time = 5 //Time it takes for shots to recharge (in seconds) var/list/datum/reagents/reagent_list = list() - var/list/reagent_ids = list("omnizine", "epinephrine", "spaceacillin") + var/list/reagent_ids = list("salbutamol", "salglu_solution", "charcoal", "epinephrine", "spaceacillin") //var/list/reagent_ids = list("salbutamol", "salglu_solution", "salglu_solution", "charcoal", "ephedrine", "spaceacillin") var/list/modes = list() //Basically the inverse of reagent_ids. Instead of having numbers as "keys" and strings as values it has strings as keys and numbers as values. //Used as list for input() in shakers. diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index 50aaac4afb1..7a2f2dab5d7 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -307,6 +307,16 @@ datum/design/proc/CalcReliability(var/list/temp_techs) build_path = /obj/item/clothing/glasses/meson category = list("Equipement") +/datum/design/nvgmesons + name = "Night Vision Optical Meson Scanners" + desc = "Prototype meson scanners fitted with an extra sensor which amplifies the visible light spectrum and overlays it to the UHD display." + id = "nvgmesons" + req_tech = list("materials" = 5, "magnets" = 5, "engineering" = 4) + build_type = PROTOLATHE + materials = list("$metal" = 300, "$glass" = 400, "$plasma" = 250, "$uranium" = 1000) + build_path = /obj/item/clothing/glasses/meson/night + category = list("Equipement") + /datum/design/night_vision_goggles name = "Night Vision Goggles" desc = "Goggles that let you see through darkness unhindered." diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index aeac82800b8..5798d7eb90a 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -145,14 +145,14 @@ build_path = /obj/item/weapon/gun/energy/xray category = list("Weapons") -/datum/design/ionrifle - name = "Ion Rifle" +/datum/design/ioncarbine + name = "Ion Carbine" desc = "How to dismantle a cyborg : The gun." - id = "ionrifle" + id = "ioncarbine" req_tech = list("combat" = 5, "materials" = 4, "magnets" = 4) build_type = PROTOLATHE materials = list("$silver" = 4000, "$metal" = 6000, "$uranium" = 1000) - build_path = /obj/item/weapon/gun/energy/ionrifle + build_path = /obj/item/weapon/gun/energy/ionrifle/carbine category = list("Weapons") /datum/design/wormhole_projector diff --git a/code/modules/research/experimentor.dm b/code/modules/research/experimentor.dm index 84c2ebf1336..02d51f6ff3e 100644 --- a/code/modules/research/experimentor.dm +++ b/code/modules/research/experimentor.dm @@ -40,12 +40,6 @@ temp_list[O] = text2num(temp_list[O]) return temp_list -/obj/machinery/r_n_d/experimentor/proc/ConvertReqList2String(var/list/source_list) - var/returnString = "" - for(var/O in source_list) - returnString += "[O];" - return returnString - /* //uncomment to enable forced reactions. /obj/machinery/r_n_d/experimentor/verb/forceReaction() set name = "Force Experimentor Reaction" @@ -528,7 +522,7 @@ var/list/reqs = ConvertReqString2List(exp_on.origin_tech) for(var/T in reqs) reqs[T] = reqs[T] + 1 - exp_on.origin_tech = ConvertReqList2String(reqs) + exp_on.origin_tech = list2params(reqs) investigate_log("Experimentor has set the origin tech of [exp_on] to [exp_on.origin_tech]", "experimentor") if(globalMalf > 51 && globalMalf < 75) visible_message("[src] encounters a run-time error!") @@ -644,8 +638,8 @@ user << "[src] does not react." return else if(src.loc == user) - call(src,realProc)(user) cooldown = TRUE + call(src,realProc)(user) spawn(cooldownMax) cooldown = FALSE else @@ -698,10 +692,10 @@ R.realProc = realProc R.revealed = TRUE dupes |= R - R.throw_at(pick(oview(7,src)),10,1) + R.throw_at(pick(oview(7,get_turf(src))),10,1) counter = 0 spawn(rand(10,100)) - for(counter = 1; counter < dupes.len; counter++) + for(counter = 1; counter <= dupes.len; counter++) var/obj/item/weapon/relic/R = dupes[counter] qdel(R) diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index d634f16f058..54583c227ca 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -144,6 +144,8 @@ make_maint_all_access() feedback_inc("alert_keycard_auth_maint",1) + + /var/emergency_access = 0 /proc/make_maint_all_access() for(var/area/maintenance/A in world) @@ -159,4 +161,5 @@ D.emergency = 0 D.update_icon(0) minor_announce("Access restrictions in maintenance areas have been restored.", "Attention! Station-wide emergency rescinded:") - emergency_access = 0 \ No newline at end of file + emergency_access = 0 + diff --git a/code/modules/surgery/surgery_step.dm b/code/modules/surgery/surgery_step.dm index 07140e8596d..f4509701ac0 100644 --- a/code/modules/surgery/surgery_step.dm +++ b/code/modules/surgery/surgery_step.dm @@ -31,6 +31,8 @@ else user << "You need to expose [target]'s [parse_zone(target_zone)] to perform surgery on it!" return 1 //returns 1 so we don't stab the guy in the dick or wherever. + if(isrobot(user) && user.a_intent != "harm") //to save asimov borgs a LOT of heartache + return 1 return 0 @@ -50,7 +52,7 @@ prob_chance = implements[implement_type] prob_chance *= get_location_modifier(target) - if(prob(prob_chance)) + if(prob(prob_chance) || isrobot(user)) if(success(user, target, target_zone, tool, surgery)) advance = 1 else diff --git a/html/changelog.html b/html/changelog.html index 704288a892e..26125b15580 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,123 @@ --> +
+

18 February 2015

+

Dannno updated:

+
    +
  • Added proper slurring when drunk.
  • +
+

Deantwo updated:

+
    +
  • Updated the ChemMaster's UI to the station default along with some functionality improvements.
  • +
  • You can now spam the 'Ready' button as much as you want without it setting you 'Not ready' again.
  • +
+

Dorsidwarf updated:

+
    +
  • Added the ability to call Central Command for the nuclear authentication codes. This requires a captain-level ID and admin approval, and warns the crew.
  • +
+

Gun Hog updated:

+
    +
  • E.X.P.E.R.I-MENTOR meteor storm event replaced with a fireball that targets random nearby mob.
  • +
  • EMP event range reduced.
  • +
  • Self-duplicating relics limited to 10 copies.
  • +
  • Nanotrasen has released a firmware patch for the Ore Redemption Machine, which now allows the station AI, cyborgs, and maintenance drones to smelt raw resources without the need of a valid identification card installed.
  • +
  • Nanotrasen scientists have completed their designs for a lightweight, compacted anti-armor ion weapon, without loss of efficiency. In theory, such a weapon could easily fit within standard issue backpacks and satchels. With sufficient research into weapons technology and materials, Nanotrasen believes a working prototype can be fabricated.
  • +
+

Iamgoofball updated:

+
    +
  • Buffs the shit out of Styptic Powder and Silver Sulf, they're now viable to use. Synthflesh is still good for general treatment, but overall Styptic and Silver Sulf deal with their respective damage types way better now.
  • +
  • Improves kinetic accelerator's mining strength.
  • +
  • The kinetic accelerator's cooldown can be decreased by tweaking the thermal exchanger with a screwdriver.
  • +
  • The range can be increased with plasma sheets
  • +
+

Incoming5643 updated:

+
    +
  • Medical borgs have been given full surgery tools which they can't fail a procedure with.
  • +
  • Medical borgs also have rechargeable gauze.
  • +
  • Borg hypo's omnizine replaced with salbutamol, salglu and charcoal.
  • +
  • Slime and Jelly mutant races now actually contain slime jelly. While playing as these races you will naturally produce it internally from your nutrition, so be sure to stay well fed as losing too much is dangerous to your health! Beware of chems that clear toxins, as they can be rapidly fatal to you!
  • +
+

Jordie0608 updated:

+
    +
  • Veil render and rifts changed to spawn with vars, rifts can be closed with a nullrod.
  • +
+

Lo6a4evskiy updated:

+
    +
  • General record now contains a species field and a photo of the crewmember. Security record consoles allow you to update it with a photo taken in-game (with detective's camera, for example, or AI's).
  • +
  • Expanded functionality of security HUDs to display rank and photos.
  • +
  • Medical HUDs allow user to change others' mental and physical status. Currently has no gameplay effect other than changing records.
  • +
  • Medical HUDs can perform an examination at the distance, similrarly to how attacking yourself with help intent works. Has limited ability to detect suffocation and toxin damage.
  • +
+

Menshin updated:

+
    +
  • Solar control computers remade with NanoUI
  • +
+

Paprika updated:

+
    +
  • Added rnd requirements to borg upgrades and tweaked the prices.
  • +
  • Changed some clothing around. Added a turtleneck for the HoS. Removed 'civillian' armor and gave normal armor to the bartender and HoP. Added flash protection to the HoS' eyepatch, it functions like sunglasses now. Additionally, added the ability to store ammo on your shoulder holster as detective.
  • +
  • Removed the defib steal objective. Added a compact defibrillator for the CMO that equips to the belt. Removed defibrillators from RND. Removed the requirement for people to not wear armor to revive them with defibs. Doubled defib timers (10 minutes before permadeath).
  • +
  • Flashlights can be attached to pulse carbines.
  • +
  • Miners spawn with a brute patch.
  • +
  • Mining station's sleeper has been replaced with an IV drip and more medkits.
  • +
  • Added hard-light holotape. This holographic police or engineering hazard tape will block entry if you're running, so you need to walk to pass it. This is to help people not sprint into breaches or crime scenes.
  • +
  • Fixed being able to sling the strapless improvised shotgun on your back.
  • +
  • Reverted the price of the ebow to 12tc and removed the range limit of its bolts.
  • +
+

Sometinyprick updated:

+
    +
  • Novely pig mask prize from arcade machines, can be toggled to make you squeal like a pig.
  • +
+

Steelpoint updated:

+
    +
  • Security Cyborgs Advance Taser have been replaced with a Disabler.
  • +
+

TZK13 updated:

+
    +
  • Adds plaid skirts and new schoolgirl outfits to the autodrobe
  • +
  • Novaflowers apply a firestack for every 20 potency they have.
  • +
  • You can now juice whole watermelons instead of slices.
  • +
  • Advancements in the field of virology by Nanotrasen's finest have uncovered three new disease symptoms for further research:
  • +
  • Ocular Restoration heals any eye trauma experienced by the infected patient.
  • +
  • Revitiligo increases the pigmentation levels of the infected patient's skin.
  • +
  • Spontaneous Combustion ignites the infected patient without warning.
  • +
+

Vekter updated:

+
    +
  • Added shot glasses! Can be obtained from the Booze-o-Mat.
  • +
  • A new premium vodka has been added to the game, hidden in a special spot.
  • +
  • Due to constant attempts to break into the station's safe, the contents have been relocated and have not been replaced. We promise. There is absolutely NO reason to break into the vault's safe anymore.
  • +
  • Each shot glass now holds 15 units, and the drinker takes all 15 in one gulp instead of 5 at a time. This means you can mix certain shots (namely, the B-52 and Toxins Special) in a shot glass. Both drinks have been made exclusive to shot glasses and will no longer show their specific sprite in a normal glass.
  • +
  • Added new sprites for most alcohol in shot glasses. Everything else will show up as 'shot of... what?'.
  • +
  • Fixed shot glasses turning into regular glasses when filled.
  • +
  • Fixed tequila bottle sprites not showing up.
  • +
  • Fixed a typo!
  • +
  • Roboticists will now start with a full toolbelt instead of a toolbox.
  • +
+

drovidi updated:

+
    +
  • Blobs who burst in space will be given a 30 second warning before dying.
  • +
  • If a blob does die from bursting in space, a new crewmember will be infected.
  • +
  • If there are no blobs or infected crew left after bursting, the round will now end properly, rather than becoming endless.
  • +
+

phil235 updated:

+
    +
  • You no longer need to cut the syphon wire to deconstruct air alarms.
  • +
  • Cooking overhaul: microwave recipes are converted to tablecraft recipes.
  • +
  • Added customizable food (burger,sandwich,spaghettis,soup,salad,cake,bread,kebab,pie) with specific color depending on ingredients used.
  • +
  • Added new food ingredients (dough, flat dough, cake batter, pie dough, doughslice, bun, raw pastry base, pastry base, raw cutlet, cutlet, pizzabread). Dough is made by mixing egg and flour, then transformed by using knife, rollingpin, milk and microwave. Meat is now sliceable into rawcutlets (specific color for each meat type).
  • +
  • Changed food recipes a bit (replacing stuff with new food ingredients).
  • +
  • Repurposed the microwave to actually cook certain food items(no reagents required), renamed it microwave oven and added a power setting to it.
  • +
  • Bowl is no longer trash but a beaker-like container that is used in salad&soup recipes. Also, milk and soymilk cartons as well as flour packs are now condiment bottles.
  • +
  • Changed the hunger system a bit, sugar becomes a normal reagent again. Faster nutrition drain is now handled by a variable in junk food. Also added a slight buff to vitamin.
  • +
+

xxalpha updated:

+
    +
  • You now hear the voice of the chosen deity in prayers.
  • +
+
+

05 February 2015

Danno updated:

diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index 85105b7d0cf..87eec701043 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -2442,3 +2442,135 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. drip. Vekter: - rscadd: Added a toy red button to the Arcade cabinets. +2015-02-18: + Dannno: + - rscadd: Added proper slurring when drunk. + Deantwo: + - tweak: Updated the ChemMaster's UI to the station default along with some functionality + improvements. + - bugfix: You can now spam the 'Ready' button as much as you want without it setting + you 'Not ready' again. + Dorsidwarf: + - rscadd: Added the ability to call Central Command for the nuclear authentication + codes. This requires a captain-level ID and admin approval, and warns the crew. + Gun Hog: + - tweak: E.X.P.E.R.I-MENTOR meteor storm event replaced with a fireball that targets + random nearby mob. + - tweak: EMP event range reduced. + - bugfix: Self-duplicating relics limited to 10 copies. + - tweak: Nanotrasen has released a firmware patch for the Ore Redemption Machine, + which now allows the station AI, cyborgs, and maintenance drones to smelt raw + resources without the need of a valid identification card installed. + - tweak: Nanotrasen scientists have completed their designs for a lightweight, compacted + anti-armor ion weapon, without loss of efficiency. In theory, such a weapon + could easily fit within standard issue backpacks and satchels. With sufficient + research into weapons technology and materials, Nanotrasen believes a working + prototype can be fabricated. + Iamgoofball: + - rscadd: Buffs the shit out of Styptic Powder and Silver Sulf, they're now viable + to use. Synthflesh is still good for general treatment, but overall Styptic + and Silver Sulf deal with their respective damage types way better now. + - tweak: Improves kinetic accelerator's mining strength. + - tweak: The kinetic accelerator's cooldown can be decreased by tweaking the thermal + exchanger with a screwdriver. + - tweak: The range can be increased with plasma sheets + Incoming5643: + - rscadd: Medical borgs have been given full surgery tools which they can't fail + a procedure with. + - rscadd: Medical borgs also have rechargeable gauze. + - tweak: Borg hypo's omnizine replaced with salbutamol, salglu and charcoal. + - rscadd: Slime and Jelly mutant races now actually contain slime jelly. While playing + as these races you will naturally produce it internally from your nutrition, + so be sure to stay well fed as losing too much is dangerous to your health! + Beware of chems that clear toxins, as they can be rapidly fatal to you! + Jordie0608: + - tweak: Veil render and rifts changed to spawn with vars, rifts can be closed with + a nullrod. + Lo6a4evskiy: + - rscadd: General record now contains a species field and a photo of the crewmember. + Security record consoles allow you to update it with a photo taken in-game (with + detective's camera, for example, or AI's). + - rscadd: Expanded functionality of security HUDs to display rank and photos. + - rscadd: Medical HUDs allow user to change others' mental and physical status. + Currently has no gameplay effect other than changing records. + - rscadd: Medical HUDs can perform an examination at the distance, similrarly to + how attacking yourself with help intent works. Has limited ability to detect + suffocation and toxin damage. + Menshin: + - rscadd: Solar control computers remade with NanoUI + Paprika: + - tweak: Added rnd requirements to borg upgrades and tweaked the prices. + - rscadd: Changed some clothing around. Added a turtleneck for the HoS. Removed + 'civillian' armor and gave normal armor to the bartender and HoP. Added flash + protection to the HoS' eyepatch, it functions like sunglasses now. Additionally, + added the ability to store ammo on your shoulder holster as detective. + - rscadd: Removed the defib steal objective. Added a compact defibrillator for the + CMO that equips to the belt. Removed defibrillators from RND. Removed the requirement + for people to not wear armor to revive them with defibs. Doubled defib timers + (10 minutes before permadeath). + - rscadd: Flashlights can be attached to pulse carbines. + - rscadd: Miners spawn with a brute patch. + - tweak: Mining station's sleeper has been replaced with an IV drip and more medkits. + - rscadd: Added hard-light holotape. This holographic police or engineering hazard + tape will block entry if you're running, so you need to walk to pass it. This + is to help people not sprint into breaches or crime scenes. + - bugfix: Fixed being able to sling the strapless improvised shotgun on your back. + - tweak: Reverted the price of the ebow to 12tc and removed the range limit of its + bolts. + Sometinyprick: + - rscadd: Novely pig mask prize from arcade machines, can be toggled to make you + squeal like a pig. + Steelpoint: + - rscadd: Security Cyborgs Advance Taser have been replaced with a Disabler. + TZK13: + - rscadd: Adds plaid skirts and new schoolgirl outfits to the autodrobe + - tweak: Novaflowers apply a firestack for every 20 potency they have. + - tweak: You can now juice whole watermelons instead of slices. + - rscadd: 'Advancements in the field of virology by Nanotrasen''s finest have uncovered + three new disease symptoms for further research:' + - rscadd: Ocular Restoration heals any eye trauma experienced by the infected patient. + - rscadd: Revitiligo increases the pigmentation levels of the infected patient's + skin. + - rscadd: Spontaneous Combustion ignites the infected patient without warning. + Vekter: + - rscadd: Added shot glasses! Can be obtained from the Booze-o-Mat. + - rscadd: A new premium vodka has been added to the game, hidden in a special spot. + - tweak: Due to constant attempts to break into the station's safe, the contents + have been relocated and have not been replaced. We promise. There is absolutely + NO reason to break into the vault's safe anymore. + - tweak: Each shot glass now holds 15 units, and the drinker takes all 15 in one + gulp instead of 5 at a time. This means you can mix certain shots (namely, the + B-52 and Toxins Special) in a shot glass. Both drinks have been made exclusive + to shot glasses and will no longer show their specific sprite in a normal glass. + - rscadd: Added new sprites for most alcohol in shot glasses. Everything else will + show up as 'shot of... what?'. + - bugfix: Fixed shot glasses turning into regular glasses when filled. + - bugfix: Fixed tequila bottle sprites not showing up. + - bugfix: Fixed a typo! + - tweak: Roboticists will now start with a full toolbelt instead of a toolbox. + drovidi: + - tweak: Blobs who burst in space will be given a 30 second warning before dying. + - tweak: If a blob does die from bursting in space, a new crewmember will be infected. + - bugfix: If there are no blobs or infected crew left after bursting, the round + will now end properly, rather than becoming endless. + phil235: + - tweak: You no longer need to cut the syphon wire to deconstruct air alarms. + - rscadd: 'Cooking overhaul: microwave recipes are converted to tablecraft recipes.' + - rscadd: Added customizable food (burger,sandwich,spaghettis,soup,salad,cake,bread,kebab,pie) + with specific color depending on ingredients used. + - rscadd: Added new food ingredients (dough, flat dough, cake batter, pie dough, + doughslice, bun, raw pastry base, pastry base, raw cutlet, cutlet, pizzabread). + Dough is made by mixing egg and flour, then transformed by using knife, rollingpin, + milk and microwave. Meat is now sliceable into rawcutlets (specific color for + each meat type). + - rscadd: Changed food recipes a bit (replacing stuff with new food ingredients). + - rscadd: Repurposed the microwave to actually cook certain food items(no reagents + required), renamed it microwave oven and added a power setting to it. + - rscadd: Bowl is no longer trash but a beaker-like container that is used in salad&soup + recipes. Also, milk and soymilk cartons as well as flour packs are now condiment + bottles. + - rscadd: Changed the hunger system a bit, sugar becomes a normal reagent again. + Faster nutrition drain is now handled by a variable in junk food. Also added + a slight buff to vitamin. + xxalpha: + - rscadd: You now hear the voice of the chosen deity in prayers. diff --git a/html/changelogs/Cheridan.yml b/html/changelogs/Cheridan.yml index d26cc7b9ac2..d07478fd6c9 100644 --- a/html/changelogs/Cheridan.yml +++ b/html/changelogs/Cheridan.yml @@ -1,2 +1,4 @@ author: Cheridan -changes: [] + +changes: + - rscadd: "Foam now carries reagents, similarly to smoke. Have fun with that." \ No newline at end of file diff --git a/html/changelogs/Deantwo-PR-7445.yml b/html/changelogs/Deantwo-PR-7445.yml deleted file mode 100644 index d31b8778699..00000000000 --- a/html/changelogs/Deantwo-PR-7445.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Deantwo - -delete-after: True - -changes: - - tweak: "Updated the ChemMaster's UI to the station default along with some functionality improvements." diff --git a/html/changelogs/Deantwo-ReadySpam.yml b/html/changelogs/Deantwo-ReadySpam.yml deleted file mode 100644 index 7defe1d56f4..00000000000 --- a/html/changelogs/Deantwo-ReadySpam.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Deantwo - -delete-after: True - -changes: - - bugfix: "You can now spam the 'Ready' button as much as you want without it setting you 'Not ready' again." diff --git a/html/changelogs/Gun-Hog-PR-7582.yml b/html/changelogs/Gun-Hog-PR-7582.yml deleted file mode 100644 index 71ec4002dfe..00000000000 --- a/html/changelogs/Gun-Hog-PR-7582.yml +++ /dev/null @@ -1,9 +0,0 @@ - -author: Gun Hog - - -delete-after: True - - -changes: - - tweak: "Nanotrasen has released a firmware patch for the Ore Redemption Machine, which now allows the station AI, cyborgs, and maintenance drones to smelt raw resources without the need of a valid identification card installed." diff --git a/html/changelogs/Gun-Hog-PR-7705.yml b/html/changelogs/Gun-Hog-PR-7705.yml new file mode 100644 index 00000000000..ee62d356d9c --- /dev/null +++ b/html/changelogs/Gun-Hog-PR-7705.yml @@ -0,0 +1,9 @@ + +author: Gun Hog + + +delete-after: True + + +changes: + - tweak: "Nanotrasen has released new design specifications for the prototype combination of standard night-vision equipment and Optical Meson Scanners. We believe that this will address the concerns many Shaft Miners have concerning visiblity in a potentially unsafe environment." diff --git a/html/changelogs/Iamgoofball-Buffs.yml b/html/changelogs/Iamgoofball-Buffs.yml deleted file mode 100644 index 5763d9702db..00000000000 --- a/html/changelogs/Iamgoofball-Buffs.yml +++ /dev/null @@ -1,6 +0,0 @@ - author: Iamgoofball - -delete-after: True - -changes: - - rscadd: "Buffs the shit out of Styptic Powder and Silver Sulf, they're now viable to use. Synthflesh is still good for general treatment, but overall Styptic and Silver Sulf deal with their respective damage types way better now." \ No newline at end of file diff --git a/html/changelogs/Incoming5643-youjelly.yml b/html/changelogs/Incoming5643-youjelly.yml deleted file mode 100644 index e56bdfca10f..00000000000 --- a/html/changelogs/Incoming5643-youjelly.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Incoming5643 - -delete-after: True - -changes: - - rscadd: "Slime and Jelly mutant races now actually contain slime jelly. While playing as these races you will naturally produce it internally from your nutrition, so be sure to stay well fed as losing too much is dangerous to your health! Beware of chems that clear toxins, as they can be rapidly fatal to you!" \ No newline at end of file diff --git a/html/changelogs/Jordie0608.yml b/html/changelogs/Jordie0608.yml deleted file mode 100644 index 71485e7bcf3..00000000000 --- a/html/changelogs/Jordie0608.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Jordie0608 - -delete-after: True - -changes: - - tweak: "Veil render and rifts changed to spawn with vars, rifts can be closed with a nullrod." \ No newline at end of file diff --git a/html/changelogs/Lo6a4evskiy-PR-7257.yml b/html/changelogs/Lo6a4evskiy-PR-7257.yml deleted file mode 100644 index 507f2478826..00000000000 --- a/html/changelogs/Lo6a4evskiy-PR-7257.yml +++ /dev/null @@ -1,39 +0,0 @@ -################################ -# Example Changelog File -# -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. -# -# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) -# When it is, any changes listed below will disappear. -# -# Valid Prefixes: -# bugfix -# wip (For works in progress) -# tweak -# soundadd -# sounddel -# rscdel (general adding of nice things) -# rscadd (general deleting of nice things) -# imageadd -# imagedel -# spellcheck (typo fixes) -# experiment -# tgs (TG-ported fixes?) -################################# - -# Your name. -author: Lo6a4evskiy - -# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. -delete-after: True - -# Any changes you've made. See valid prefix list above. -# INDENT WITH TWO SPACES. NOT TABS. SPACES. -# SCREW THIS UP AND IT WON'T WORK. -# Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. -# Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. -changes: - - rscadd: "General record now contains a species field and a photo of the crewmember. Security record consoles allow you to update it with a photo taken in-game (with detective's camera, for example, or AI's)." - - rscadd: "Expanded functionality of security HUDs to display rank and photos." - - rscadd: "Medical HUDs allow user to change others' mental and physical status. Currently has no gameplay effect other than changing records." - - rscadd: "Medical HUDs can perform an examination at the distance, similrarly to how attacking yourself with help intent works. Has limited ability to detect suffocation and toxin damage." \ No newline at end of file diff --git a/html/changelogs/Steelpoint-SecBorgDisabler-7390.yml b/html/changelogs/Mandurrh-Boozebranch.yml similarity index 73% rename from html/changelogs/Steelpoint-SecBorgDisabler-7390.yml rename to html/changelogs/Mandurrh-Boozebranch.yml index 453895d2edb..46f08f2212f 100644 --- a/html/changelogs/Steelpoint-SecBorgDisabler-7390.yml +++ b/html/changelogs/Mandurrh-Boozebranch.yml @@ -1,7 +1,7 @@ ################################ -# Example Changelog File +# Mandurrh Changelog File # -# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. # # Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) # When it is, any changes listed below will disappear. @@ -12,8 +12,8 @@ # tweak # soundadd # sounddel -# rscdel (general adding of nice things) -# rscadd (general deleting of nice things) +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) # imageadd # imagedel # spellcheck (typo fixes) @@ -22,7 +22,7 @@ ################################# # Your name. -author: Steelpoint +author: Mandurrh # Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. delete-after: True @@ -33,4 +33,5 @@ delete-after: True # Also, this gets changed to [] after reading. Just remove the brackets when you add new shit. # Please surround your changes in single (') or double quotes ("). It works without them, but if you use certain characters it screws up compiling. The quotes will not show up in the changelog. changes: - - rscadd: "Security Cyborgs Advance Taser have been replaced with a Disabler. + - rscadd: "Added bays fountain machines for the bar. Soda and Beer. Allowing bartenders to have easier access to mix drinks and making more to make their job a little less boring" + diff --git a/html/changelogs/Mandurrh-barsign.yml b/html/changelogs/Mandurrh-barsign.yml new file mode 100644 index 00000000000..52ce32c68e2 --- /dev/null +++ b/html/changelogs/Mandurrh-barsign.yml @@ -0,0 +1,13 @@ + +################################# + +# Your name. +author: Mandurrrh + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + + +changes: + - rscadd: "Added interchangeable bar signs" + diff --git a/html/changelogs/Mandurrh-lightupfloor.yml b/html/changelogs/Mandurrh-lightupfloor.yml new file mode 100644 index 00000000000..6b2542b2ae1 --- /dev/null +++ b/html/changelogs/Mandurrh-lightupfloor.yml @@ -0,0 +1,10 @@ + +author: Mandurrrh + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + + +changes: + - rscadd: "Added color tiles to the light up floor tiles." + - rscadd: "Added metal, glass, and cable to bar back room at round start for bartender to make colored light dance floors." diff --git a/html/changelogs/Menshin-PR-7792.yml b/html/changelogs/Menshin-PR-7792.yml new file mode 100644 index 00000000000..718edf5a67d --- /dev/null +++ b/html/changelogs/Menshin-PR-7792.yml @@ -0,0 +1,7 @@ +author: Menshin + +delete-after: True + +changes: + - tweak : "Getting into regenerative statis now puts the changeling into unconscious state." + - bugfix: "Fixed changeling 'Revive' not working." diff --git a/html/changelogs/Paprka-ablightonrobotics.yml b/html/changelogs/Paprka-ablightonrobotics.yml deleted file mode 100644 index 1595635449b..00000000000 --- a/html/changelogs/Paprka-ablightonrobotics.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: Paprika -delete-after: True -changes: - - tweak: "Added rnd requirements to borg upgrades and tweaked the prices." \ No newline at end of file diff --git a/html/changelogs/Paprka-batonshit.yml b/html/changelogs/Paprka-batonshit.yml new file mode 100644 index 00000000000..6253da0f1e6 --- /dev/null +++ b/html/changelogs/Paprka-batonshit.yml @@ -0,0 +1,6 @@ +author: Paprka + +delete-after: True + +changes: + - tweak: "Batons now slowly lose power when left on." \ No newline at end of file diff --git a/html/changelogs/Paprka-clothessec.yml b/html/changelogs/Paprka-clothessec.yml deleted file mode 100644 index d93f0f76a9e..00000000000 --- a/html/changelogs/Paprka-clothessec.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Paprka - -delete-after: True - -changes: - - rscadd: "Changed some clothing around. Added a turtleneck for the HoS. Removed 'civillian' armor and gave normal armor to the bartender and HoP. Added flash protection to the HoS' eyepatch, it functions like sunglasses now. Additionally, added the ability to store ammo on your shoulder holster as detective." \ No newline at end of file diff --git a/html/changelogs/Paprka-defibfuckupv2.yml b/html/changelogs/Paprka-defibfuckupv2.yml deleted file mode 100644 index c24eb2a3102..00000000000 --- a/html/changelogs/Paprka-defibfuckupv2.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Paprka - -delete-after: True - -changes: - - rscadd: "Removed the defib steal objective. Added a compact defibrillator for the CMO that equips to the belt. Removed defibrillators from RND. Removed the requirement for people to not wear armor to revive them with defibs. Doubled defib timers (10 minutes before permadeath)." \ No newline at end of file diff --git a/html/changelogs/Paprka-preffer.yml b/html/changelogs/Paprka-preffer.yml deleted file mode 100644 index b648cf00005..00000000000 --- a/html/changelogs/Paprka-preffer.yml +++ /dev/null @@ -1,6 +0,0 @@ -author: Paprka - -delete-after: True - -changes: - - rscadd: "Added hard-light holotape. This holographic police or engineering hazard tape will block entry if you're running, so you need to walk to pass it. This is to help people not sprint into breaches or crime scenes." \ No newline at end of file diff --git a/html/changelogs/Paprka-simplyepicbuff.yml b/html/changelogs/Paprka-simplyepicbuff.yml deleted file mode 100644 index 896e8e2a989..00000000000 --- a/html/changelogs/Paprka-simplyepicbuff.yml +++ /dev/null @@ -1,10 +0,0 @@ -author: Paprka - -delete-after: True - - - -changes: - - - - tweak: "Reverted the price of the ebow to 12tc and removed the range limit of its bolts." \ No newline at end of file diff --git a/html/changelogs/TZK13-PR-7197.yml b/html/changelogs/TZK13-PR-7197.yml deleted file mode 100644 index 665b84e1627..00000000000 --- a/html/changelogs/TZK13-PR-7197.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: TZK13 - -delete-after: True - -changes: - - rscadd: "Advancements in the field of virology by Nanotrasen's finest have uncovered three new disease symptoms for further research:" - - rscadd: "Ocular Restoration heals any eye trauma experienced by the infected patient." - - rscadd: "Revitiligo increases the pigmentation levels of the infected patient's skin." - - rscadd: "Spontaneous Combustion ignites the infected patient without warning." \ No newline at end of file diff --git a/html/changelogs/TheVekter-PR-7574.yml b/html/changelogs/TheVekter-PR-7574.yml deleted file mode 100644 index 07978e9e85c..00000000000 --- a/html/changelogs/TheVekter-PR-7574.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: Vekter - -delete-after: True - - - rscadd: "Added shot glasses! Can be obtained from the Booze-o-Mat." - - rscadd: "A new premium vodka has been added to the game, hidden in a special spot." - - tweak: "Due to constant attempts to break into the station's safe, the contents have been relocated and have not been replaced. We promise. There is absolutely NO reason to break into the vault's safe anymore." \ No newline at end of file diff --git a/html/changelogs/TheVekter-PR-7635.yml b/html/changelogs/TheVekter-PR-7635.yml deleted file mode 100644 index 60e19416b9c..00000000000 --- a/html/changelogs/TheVekter-PR-7635.yml +++ /dev/null @@ -1,9 +0,0 @@ -author: Vekter - -delete-after: True - - - tweak: "Each shot glass now holds 15 units, and the drinker takes all 15 in one gulp instead of 5 at a time. This means you can mix certain shots (namely, the B-52 and Toxins Special) in a shot glass. Both drinks have been made exclusive to shot glasses and will no longer show their specific sprite in a normal glass." - - rscadd: "Added new sprites for most alcohol in shot glasses. Everything else will show up as 'shot of... what?'." - - bugfix: "Fixed shot glasses turning into regular glasses when filled." - - bugfix: "Fixed tequila bottle sprites not showing up." - - bugfix: "Fixed a typo!" \ No newline at end of file diff --git a/html/changelogs/dannno-slurring-7650.yml b/html/changelogs/dannno-slurring-7650.yml deleted file mode 100644 index 41cee536c56..00000000000 --- a/html/changelogs/dannno-slurring-7650.yml +++ /dev/null @@ -1,5 +0,0 @@ -author: Dannno - -delete-after: True - - - rscadd: "Added proper slurring when drunk." diff --git a/html/changelogs/drovidi-PR-7440.yml b/html/changelogs/drovidi-PR-7440.yml deleted file mode 100644 index 116b7dcf634..00000000000 --- a/html/changelogs/drovidi-PR-7440.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: drovidi - -delete-after: True - -changes: - - tweak: "Blobs who burst in space will be given a 30 second warning before dying." - - tweak: "If a blob does die from bursting in space, a new crewmember will be infected." - - bugfix: "If there are no blobs or infected crew left after bursting, the round will now end properly, rather than becoming endless." \ No newline at end of file diff --git a/html/changelogs/phil235-PR-7572.yml b/html/changelogs/phil235-PR-7572.yml deleted file mode 100644 index d0bf151c47e..00000000000 --- a/html/changelogs/phil235-PR-7572.yml +++ /dev/null @@ -1,12 +0,0 @@ -author: phil235 - -delete-after: True - -changes: - - rscadd: "Cooking overhaul: microwave recipes are converted to tablecraft recipes." - - rscadd: "Added customizable food (burger,sandwich,spaghettis,soup,salad,cake,bread,kebab,pie) with specific color depending on ingredients used." - - rscadd: "Added new food ingredients (dough, flat dough, cake batter, pie dough, doughslice, bun, raw pastry base, pastry base, raw cutlet, cutlet, pizzabread). Dough is made by mixing egg and flour, then transformed by using knife, rollingpin, milk and microwave. Meat is now sliceable into rawcutlets (specific color for each meat type)." - - rscadd: "Changed food recipes a bit (replacing stuff with new food ingredients)." - - rscadd: "Repurposed the microwave to actually cook certain food items(no reagents required), renamed it microwave oven and added a power setting to it." - - rscadd: "Bowl is no longer trash but a beaker-like container that is used in salad&soup recipes. Also, milk and soymilk cartons as well as flour packs are now condiment bottles." - - rscadd: "Changed the hunger system a bit, sugar becomes a normal reagent again. Faster nutrition drain is now handled by a variable in junk food. Also added a slight buff to vitamin." diff --git a/html/changelogs/phil235-PR-7786.yml b/html/changelogs/phil235-PR-7786.yml new file mode 100644 index 00000000000..f6de3917226 --- /dev/null +++ b/html/changelogs/phil235-PR-7786.yml @@ -0,0 +1,6 @@ +author: phil235 + +delete-after: True + +changes: + - rscdel: "Silicons can no longer be grabbed by anyone. No more silicon choking" diff --git a/html/changelogs/phil235-PR-7808.yml b/html/changelogs/phil235-PR-7808.yml new file mode 100644 index 00000000000..3a5980c9e7c --- /dev/null +++ b/html/changelogs/phil235-PR-7808.yml @@ -0,0 +1,6 @@ +author: phil235 + +delete-after: True + +changes: + - rscadd: "Custom food can now be renamed using a pen." diff --git a/icons/mob/belt.dmi b/icons/mob/belt.dmi index 06fcb90a4a2..459051e1c73 100644 Binary files a/icons/mob/belt.dmi and b/icons/mob/belt.dmi differ diff --git a/icons/mob/eyes.dmi b/icons/mob/eyes.dmi index b79cf6e60fa..306ea503fe2 100644 Binary files a/icons/mob/eyes.dmi and b/icons/mob/eyes.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 20b5c68d940..b715a21b6ec 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/inhands/clothing_lefthand.dmi b/icons/mob/inhands/clothing_lefthand.dmi index 068b386479c..df394b37f25 100644 Binary files a/icons/mob/inhands/clothing_lefthand.dmi and b/icons/mob/inhands/clothing_lefthand.dmi differ diff --git a/icons/mob/inhands/clothing_righthand.dmi b/icons/mob/inhands/clothing_righthand.dmi index 2d6006d16b8..0ad3c2436b7 100644 Binary files a/icons/mob/inhands/clothing_righthand.dmi and b/icons/mob/inhands/clothing_righthand.dmi differ diff --git a/icons/mob/inhands/guns_lefthand.dmi b/icons/mob/inhands/guns_lefthand.dmi index 90d2cf71b71..a7e40af19df 100644 Binary files a/icons/mob/inhands/guns_lefthand.dmi and b/icons/mob/inhands/guns_lefthand.dmi differ diff --git a/icons/mob/inhands/guns_righthand.dmi b/icons/mob/inhands/guns_righthand.dmi index 85a2fb942d9..60f6aa556aa 100644 Binary files a/icons/mob/inhands/guns_righthand.dmi and b/icons/mob/inhands/guns_righthand.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 871cda93fdc..efcb1eb63f0 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/ammo.dmi b/icons/obj/ammo.dmi index 9be3e8a93ff..c6a26c91778 100644 Binary files a/icons/obj/ammo.dmi and b/icons/obj/ammo.dmi differ diff --git a/icons/obj/barsigns.dmi b/icons/obj/barsigns.dmi new file mode 100644 index 00000000000..ce25b56f081 Binary files /dev/null and b/icons/obj/barsigns.dmi differ diff --git a/icons/obj/chemical.dmi b/icons/obj/chemical.dmi index 382ea940eaf..9c5ddae42c1 100644 Binary files a/icons/obj/chemical.dmi and b/icons/obj/chemical.dmi differ diff --git a/icons/obj/clothing/belts.dmi b/icons/obj/clothing/belts.dmi index 6fe896b2bb1..092a08e9596 100644 Binary files a/icons/obj/clothing/belts.dmi and b/icons/obj/clothing/belts.dmi differ diff --git a/icons/obj/clothing/glasses.dmi b/icons/obj/clothing/glasses.dmi index c6d3db0432c..f18a3018b12 100644 Binary files a/icons/obj/clothing/glasses.dmi and b/icons/obj/clothing/glasses.dmi differ diff --git a/icons/obj/drinks.dmi b/icons/obj/drinks.dmi index 0feea818c6a..f6181b0638d 100644 Binary files a/icons/obj/drinks.dmi and b/icons/obj/drinks.dmi differ diff --git a/icons/obj/guns/energy.dmi b/icons/obj/guns/energy.dmi index 8dc4f9f9293..393b957c655 100644 Binary files a/icons/obj/guns/energy.dmi and b/icons/obj/guns/energy.dmi differ diff --git a/icons/obj/machines/bignuke.dmi b/icons/obj/machines/bignuke.dmi new file mode 100644 index 00000000000..e2861d3e398 Binary files /dev/null and b/icons/obj/machines/bignuke.dmi differ diff --git a/icons/obj/machines/selfdestruct.dmi b/icons/obj/machines/selfdestruct.dmi new file mode 100644 index 00000000000..badea5e5285 Binary files /dev/null and b/icons/obj/machines/selfdestruct.dmi differ diff --git a/icons/obj/rollerbed.dmi b/icons/obj/rollerbed.dmi index cbb23919a65..fcc4e833c34 100644 Binary files a/icons/obj/rollerbed.dmi and b/icons/obj/rollerbed.dmi differ diff --git a/icons/turf/floors.dmi b/icons/turf/floors.dmi index d9d349900ad..e5bc983f5c5 100644 Binary files a/icons/turf/floors.dmi and b/icons/turf/floors.dmi differ diff --git a/nano/templates/solar_control.tmpl b/nano/templates/solar_control.tmpl new file mode 100644 index 00000000000..3f34d24f2d8 --- /dev/null +++ b/nano/templates/solar_control.tmpl @@ -0,0 +1,97 @@ + + +

Status :

+
+
+
+ Generated power : +
+
+ {{:generated)}} W +
+
+ +
+
+ Orientation : +
+ +
+ {{:angle)}}° ({{:direction}})  +
+ + {{:~link('15°', 'minus' ,{'rate_control' : '1', 'cdir' : '-15'})}} + {{:~link('1°', 'minus' , { 'rate_control' : '1', 'cdir' : '-1'})}} + {{:~link('1°', 'plus' , { 'rate_control' : '1', 'cdir' : '1'})}} + {{:~link('15°', 'plus' , { 'rate_control' : '1', 'cdir' : '15'})}} +
+
+ +

Tracking :

+ +
+
+
+ Tracker status :  +
+ + {{:~link('Off', 'close' ,{'track' : '0'}, (tracking_state == 0)?'selected':'')}} + {{:~link('Timed', 'clock' ,{'track' : '1'}, (tracking_state == 1)?'selected':'')}} + {{if connected_tracker}} + {{:~link('Auto', 'signal-diag' ,{'track' : '2'}, (tracking_state == 2)?'selected':'')}} + {{else}} + {{:~link('Auto', 'signal-diag' ,null, 'disabled')}} + {{/if}} +
+ +
+
+ Tracking rate : +
+ +
+ {{:tracking_rate)}} deg/h ({{:rotating_way}}) +
+
+ +
+ {{:~link('180°', 'minus' ,{'rate_control' : '1', 'tdir' : '-180'})}} + {{:~link('30°', 'minus' ,{'rate_control' : '1', 'tdir' : '-30'})}} + {{:~link('1°', 'minus' , { 'rate_control' : '1', 'tdir' : '-1'})}} + {{:~link('1°', 'plus' , { 'rate_control' : '1', 'tdir' : '1'})}} + {{:~link('30°', 'plus' , { 'rate_control' : '1', 'tdir' : '30'})}} + {{:~link('180°', 'plus' , { 'rate_control' : '1', 'tdir' : '180'})}} +
+
+ +

Connected devices :

+
+
+
+ Solars panels : +
+
+ {{:connected_panels)}} connected +
+
+ +
+
+ Solar tracker : +
+ +
+ {{if connected_tracker}} + Found  + {{else}} + Not found  + {{/if}} +
+
+
+
+ {{:~link('Search for devices', 'refresh' ,{'search_connected' : '1'})}} +
diff --git a/tgstation.dme b/tgstation.dme index 7b389919821..05330a54d85 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -503,7 +503,6 @@ #include "code\game\objects\effects\aliens.dm" #include "code\game\objects\effects\anomalies.dm" #include "code\game\objects\effects\bump_teleporter.dm" -#include "code\game\objects\effects\effect_system.dm" #include "code\game\objects\effects\explosion_particles.dm" #include "code\game\objects\effects\forcefields.dm" #include "code\game\objects\effects\gibs.dm" @@ -526,6 +525,12 @@ #include "code\game\objects\effects\decals\Cleanable\humans.dm" #include "code\game\objects\effects\decals\Cleanable\misc.dm" #include "code\game\objects\effects\decals\Cleanable\robots.dm" +#include "code\game\objects\effects\effect_system\effect_system.dm" +#include "code\game\objects\effects\effect_system\effects_foam.dm" +#include "code\game\objects\effects\effect_system\effects_other.dm" +#include "code\game\objects\effects\effect_system\effects_smoke.dm" +#include "code\game\objects\effects\effect_system\effects_sparks.dm" +#include "code\game\objects\effects\effect_system\effects_water.dm" #include "code\game\objects\effects\spawners\bombspawner.dm" #include "code\game\objects\effects\spawners\gibspawner.dm" #include "code\game\objects\effects\spawners\lootdrop.dm" @@ -657,6 +662,7 @@ #include "code\game\objects\items\weapons\tanks\tank_types.dm" #include "code\game\objects\items\weapons\tanks\tanks.dm" #include "code\game\objects\items\weapons\tanks\watertank.dm" +#include "code\game\objects\structures\barsigns.dm" #include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\door_assembly.dm"