diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 2b9fa0915a1..c376a496a4a 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -542,7 +542,7 @@ "akv" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/device/taperecorder{pixel_y = 0},/obj/machinery/atmospherics/pipe/manifold/hidden/scrubbers{dir = 8; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{dir = 2; icon_state = "redfull"; tag = "icon-redfull (NORTHWEST)"},/area/security/main) "akw" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/security/main) "akx" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/turf/simulated/floor,/area/security/main) -"aky" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/effect/landmark/nations{name = "Brigston"},/turf/simulated/floor,/area/security/main) +"aky" = (/obj/machinery/hologram/holopad,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "akz" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 9},/turf/simulated/floor,/area/security/main) "akA" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/hatch/gamma{locked = 1; req_access_txt = "1"; use_power = 0},/turf/simulated/floor{icon_state = "dark"},/area/security/main) "akB" = (/turf/simulated/floor/plating/airless,/turf/simulated/floor/plating/airless/catwalk{tag = "icon-catwalk6"; icon_state = "catwalk6"},/area/solar/auxstarboard) @@ -3163,7 +3163,7 @@ "biQ" = (/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biR" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor,/area/bridge) "biS" = (/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) -"biT" = (/obj/machinery/hologram/holopad,/obj/effect/landmark/nations{name = "People's Republic of Commandzakstan"},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) +"biT" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "biU" = (/obj/machinery/atmospherics/unary/vent_pump{on = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) "biV" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/obj/item/device/radio/beacon,/obj/effect/landmark{name = "Marauder Entry"},/turf/simulated/floor,/area/bridge) "biW" = (/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; tag = ""},/turf/simulated/floor,/area/bridge) @@ -4725,7 +4725,7 @@ "bMS" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/disposalpipe/segment,/turf/simulated/floor{dir = 1; icon_state = "whitered"},/area/medical/research{name = "Research Division"}) "bMT" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/turf/simulated/floor{dir = 1; icon_state = "whiteredcorner"},/area/medical/research{name = "Research Division"}) "bMU" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor{dir = 5; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) -"bMV" = (/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 1; level = 1},/obj/effect/landmark/nations{name = "Scientopia"},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) +"bMV" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "bMW" = (/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/turf/simulated/floor{dir = 9; icon_state = "whitehall"},/area/medical/research{name = "Research Division"}) "bMX" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/obj/structure/cable{icon_state = "0-2"; pixel_y = 1; d2 = 2},/turf/simulated/floor/plating,/area/crew_quarters/hor) "bMY" = (/obj/effect/spawner/window/reinforced,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d2 = 8; icon_state = "0-8"},/turf/simulated/floor/plating,/area/crew_quarters/hor) @@ -5744,7 +5744,6 @@ "cgx" = (/obj/structure/disposalpipe/junction{dir = 8; icon_state = "pipe-j2"; tag = "icon-pipe-j1 (WEST)"},/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"; tag = ""},/obj/structure/cable{d1 = 2; d2 = 4; icon_state = "2-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgy" = (/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/disposalpipe/junction{dir = 8},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgz" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) -"cgA" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/effect/landmark/nations{name = "Medistan"},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgB" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 4; on = 1},/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/obj/structure/cable{d1 = 2; d2 = 8; icon_state = "2-8"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgC" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/atmospherics/pipe/manifold/hidden/supply{dir = 4; initialize_directions = 11; level = 1},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"; pixel_x = 0; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) "cgD" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 1; d2 = 4; icon_state = "1-4"; tag = ""},/turf/simulated/floor{icon_state = "white"},/area/medical/medbay2) @@ -6548,7 +6547,6 @@ "cvV" = (/obj/machinery/door/firedoor{dir = 8; name = "Firelock West"},/obj/machinery/door/airlock/glass_engineering{name = "Engineering"; req_access_txt = "32"; req_one_access_txt = "0"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvW" = (/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cvX" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) -"cvY" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/effect/landmark/nations{name = "Atmosia"},/turf/simulated/floor,/area/engine/break_room) "cvZ" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply{level = 1},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor,/area/engine/break_room) "cwa" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{level = 1},/obj/effect/spawner/window/reinforced,/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/poddoor{density = 0; icon_state = "pdoor0"; id_tag = "atmos"; name = "Atmos Blast Door"; opacity = 0},/turf/simulated/floor/plating,/area/atmos/control) "cwb" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 8},/turf/simulated/floor,/area/atmos/control) @@ -8311,7 +8309,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGafxacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafyafyafAaeAafyafyafAaeAaaaagSaifaigaihagSaiiaijaikailaimainaioaipagvaiqairahhaisaitaiuahUaivaiwaixaiyaizaiAaiBaiCaiDaiEaiFaiGaiFaiHahAaieaieaieaieaieaieaieaieahAaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaagQaaaaaaaaaaiIaaaaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaabaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAafAafyaiJaeAafAafyaiKaeAaaaagSaiLaiMaiNagSaiOaiOaiOaiOaiPaiQaiRaiSagvaiTaiUaiVaiWaiXaiYahUaiZajaajbajcajdajeajfajgaiDaiEajhaiGajhajiahAaieaieaieaieaieaieaieaieahAagQagQajjaabagQagQagQagQagQagQagQagQagQagQagQagQagQagQaabaabajkajlajmaabaabagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaafxaabajnaabafxaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaeAajoajpajqajrajoajpajqajsajtajuajuajuajuajuajuajuajuajvajwajxajyajzajAajBajCajDajEajFajGahUajHajIajJajKajdajeajKajgajLaiEaiCaiCajMajNajOaieaieaieaieaieaieaieaieahAaabaabaabaabaabaabaaaaabaaaaabaabaabaabaabaabaabaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakyakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxaabaabaaaajQaaaaabaabafxafxacGacGacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAajRajSajTafyajUajVajWajXajtajYajZakaakbakcakdakdajuakeakfakgakhakiajBakjakkaklakmaknajFakoakpakqakqajKakraksaktakuakvakwakxakxakzaiCakAaieaieaieaieaieaieaieaieahAaabakBakCakCakCakDakCakCakCakCakDakCakCakCakCakEaabaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaaaaabaaaaaaajQaaaaaaaabaaaaabaaaaaaacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAakFafyakGakHakIakJakKakLajtakMakNakOakOakPakQakRajuakSakTakUakVakiakWakXakYakZalaalbalcaldaleakqalfalgalhalialjalkallalmaiCaiCaiCalnajOaieaieaieaieaieaieaieaieahAaabaloaabaabaabaloaabaaaaaaaabaloaabaabaaaaaaaloaabaaaaabaabajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaabalpalpalpalpalpaaaalqaaaalpalpalpalpalpaabacGaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaeAalralsakGafyaltakJalualvajtalwalxalyalzakQakQakRajualAalBalCalDalEajBalFalGaklalHalIajFalJalKalLalLalMajdalNalOalPalQaiCaiFaiGaiCalRahAahAahAahAahAahAahAahAahAahAaabaloaabaaaajkajlajmaaaaaaajkajlajmaaaaaaajkajlajmaabaabaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaalSalTalTalTalTalUalValWalXalXalXalXalYaaaacGaaaaaaaaaalZamaamaamaambamcaaaaaaaaaaeAaeAaeAamdamdameamfamgamdajuamhamiamjamkamlammamnajuamoampamqakVamrajGamsamtamuamvamwajGamxamyamzamAamBamCamDamEamFamGaiCajhamHamIamJahAamKamKamKamKamKaaaaaaaaaaaaaabaloaabaaaajkajPajmaaaaaaajkajPajmaaaaaaajkajPajmaaaaaaaaaajkajPajmaaaaaaagQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8356,7 +8354,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbdDaJrbdEbdFbdGbdHbdIbdJbdHbdKbdLbdHbdHbdMbdNbdObdPbdQbdQbdQbdRbdQbdSbdTaDEbdUbdVbdWbcobdXbdYbdZbeabebbecbedbeebefbegbehbeibcobejbekbctbelbembenbcvbeobepbeqbcvberbesbetberberberbeuaXJaXObcDaaaaaaaaaaaaaaaaaaaaabcEbevbewbexbeybezbeAbeBbeCbeDbeEbeFbcEaaaaaaaaaaaaaaaaaaaaabcKbeGaYibeHaMebeIbcNbcSbcSbcSbcSbcSbeJbeKbcSbcSbcSbeLbeMbeMbeNbeObePbeQbeRbeSbeTbeUaVbbeVbeWbeXbeYbeYbeXbeZbfaaVbaVhayHaRDbfbbfcaTvbbPbbQaTvbfdbfdaRDaRDbfeaRDaQbbffbbWbbZbfgbfgbfhbbZaQbaQbaQbbfibatbfjbfjbfkbfjbatbflbaAaabaaaaaabfmaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabdCbfnbfobfnbfnbfnbfnbfnbfnbfobfnbfnbfpaJrbfqbfrbfsaJrbftaJrbfubfvbfwbfxbfyaDEbdVbdVbfzbcobfAbecbecbecbecbecbedbfBbecbecbecbfCbcobejbfDbctbfEbfFbfGbcvbfHbfIbfJbcvbfKbfLbfMbfNbfObesbeuaXJaXObcDaaaaaaaaaaaabcEbcEbcEbcEbfPbfQbfRbfSbfTbfUbfVbfWbfXbfYbfZbcEbcEbcEbcEaaaaaaaaaaaabcKbeGaYibgabgbbgcbgdbgebgfbgcbggbghbgibgjbgkbglbcSbeLbgmbeMbgnbgobeMbgpbgqbgrbgsbeMbgtbgubgvbeXbeYbeYbeXbgwbgxaVbaVhaKsaRDbdjaTvbbPbbPbbQbbPaTvaTvbgybgzaTvbgAaQbbgBbgCbgDbfgbfgbgEbgDbgFaQbbgGbgHbatbgIbgIbgJbgIbatbdAbaAbgKbaAbaAbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaCuaCuaInaInaInaInaInaInaInaInaInaCuaDEbgLbgMbgNbgNbgNbgNbgNbgNbgObgNbgNbgNaDEbdVbejbgPbcobgQbecbecbgRbgSbgTbgUbgRbecbecbecbgVbcobejbekbctbgWbgXbgYbcvbgZbhabhbbcvbhcbhdbhebhfbhgbesbhhbhiaXObcDbcDbhjbcEbcEbcEbhkbhlbhmbhnbhobhobhpbhqbhobhrbhobhsbhtbhubhvbhwbhxbcEbcEbcEbhjbcKbcKbeGaYiaYiaMebhybhzbgkbhAbcSbhBbhCbcSbhDbhEbglbcSbeLbeMbeMbhFbhGbhHbhIbhJbhKbhLbeMbhMbgubhNbeXbeYbeYbhObhPbhQaVbaVhayHaRDbhRbhSbhTbbPbbQbhUaTvaTvbhVaTvbhWbhXaQbbhYbhZbiabfgbfgbibbiabicaQbbidbgHbatbatbatbavbatbatbiebifbigbihbiibijaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSbiTbiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikaabaInaLAaJtbilbgNbimbinbiobipbiqbirbisbitbgNbiubivbiwbixbcobiybecbecbgRbgTbizbiAbgRbecbecbiBbiCbcobejbekbctbctbiDbctbcvbiEbiFbiGbcvbiHbhfbiIbhfbiJbesbeubiKaXOaXPaXPbiLbiMbiNbcEbiObfRbiPbhobhobiQbiRbiSakybiSbiUbiVbiWbiXbiYbiZbjabcEbjbbiMbjcbjdbjebeGaYiaYibjfbcSbjgbcSbcSbcSbjhbjibcSbhDbjjbglbcSbeLbeMbeMbjkbjlbjmbjnbjobjpbhLbjqaVbbjrbhNbeXbeYbeYbeXbhPbjsaVbbjtbjuaRDbjvaRDaRDbjwbbQbjxbjyaTvbjzbjAaWSbjBbdvbjCbjDbjEbjFbjFbjGbjHbjIbdvbjJbjKbatbjLbatbavbatbatbjMbaAbgKbaAbaAbgKaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikbjNaInaKzaKBbfqbgNbimbjObjPbimbjQbjRbjSbjTbgNbjUaFmbjWbcsbcobjXbjYbjZbkabkbbkcbkdbkebkebkebkfbkgbcobejbivbkhbkibkjbkkbcvbcvbcvbcvbcvbklbkmbknbkobkpbesbeubiKaXJaXJaXJbkqbkrbksbktbkubkvbhobkwbkxbkybkzbkAbkBbkCbkDbkEbkFbkGbkubkHbkIbkJbkKbkLbkMbkNbkObkPaYibkQaMebcSbkRbkSbglbcSbkTbkUbcSbkVbkWbglbcSbeLbeMbeMbeMbeNbeMbkXbeMbjpbhLbkYaVbbkZbhNbeXbeYbeYbeXbhPblaaVbblbblcbldbleblfblgblhblibljbljbljbljbljbljblkbllblmbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbatbatbavbatbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikblsbltblublvbfqbgNblwbimblxblxblxblybimblzbgNblAblBbjWblCblCblCblCblDblCblEbecblFblGblHblHblIblJbcoblKblLblMblNblOblPblQblRblSblRblTblTblTblTblTblUberbeublVblWblXblYblZbmabmbbmcbmdbkBbmebmfbmgbmgbmgbmgbmhbmgbmibmjbmkbmlbmebmmbmnbcEbmobmpbmqbmrbmsbmtaYiaYibjfbcSbmubcSbcSbcSaRebcSbcSbmvbmvbmwbmwbmxbeMbeMbmybmzbeMbeMbeMbmAbmBbmCaVbbgxbhNbeXbeXbeXbeXbhPbmDaVbbmEbmFbmFbmGbmFbmHbbPbbPbbPbbPbmIbbPbbPbbPbmJblobfgbfgbfgbfgbfgbfgbfgblnbloblpbgHbatbfjbfjbfkbfjbatbmKbaAbmLbmMbmNbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabikbikbikbikbikbikbikbikbikbikbikbikbikaInaInaKzbmPbcjbmQbimbmRblxblxblxblybmRbimbgNbmSbmTbjWblCbmUbmVbmWbmXblCbmYbmZbnabcobnbbncbndbnebcobejbnfbngbngbnhbngbngbngbngbnibnjbnjbnjbnkbnjbnlbnmbnnbnobnpbnqbnqbnqbnqbnqbnqbnrbnsbnrbmgbmgbntbnubnvbnwbnxbnybntbnzbmgbnAbnBbnAbnAbnAbnAbnAbnAbnAbmtaYiaYiaMebnCbnDbcSbnEbcSbnFbcSbnGbnHbnIbmwbnJaUTbnKbnLaUTaUTbnMbnNbnNbnNaUTaUTaVbbnObnPbnQbnQbnQbnQbnPbnRaVbbnSbmFbmFbmGbnTaRDbnUbnVbnWbnXbnYbnZboabobbocaQbbodaRSboebfgbfgboeaRSbofaQbbogbgHbatbgIbgIbgJbgIbatblqbaAblrblrblrbaAaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaQfaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8375,7 +8373,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbGVbGWbGVbGXbGYbGZbGYbGYbGYbGYbHabyvbAfbHbbngbngbHcbpIbAibFvbHdbtLbHebHfbHfbHgbHhbHibHjbHkbHlbHmbHnbHobHpbHqbHrbHsbCpbCqbAEbvjbHtbHubHvbHwbHxbvjaaabEkbHybHzbHybHybHybHybHybHAbHybHBbvvbFXbucbHCbHDbHDbHEbHFbEybHGbHHbHIbHJbHKbHLbHMbHIbHNbHObHPbHQbHRbHSbHTbHTbHUbHVbHWbHXbHYbHZbIabIbbIcbIdbIebIfbIfbIgbIhbIibxGbIjbxJbxJbIkbIlbEUbImbInbIobIpbIqbIrbIsbItbIubIvbIubusbusbIwbEXbEXbIxbIxbIxbIxbIxbEXbFfbFjbFhbFjbFjbIybFfaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbIBbAebFqbFrbFrbFrbAebAebyvbAfbICbIDbngbIEbpIbAibFvbIFbtLbIGbpIbrsbpIbIHbDXbvvbIIbHlbHmbIJbIKbILbIMbINbIObIPbIQbIRbISbISbITbIUbIVbvjbvjaaabEkbHybIWbIXbIYbIZbJabJbbJcbJdbJebvvbFXbCHbJfbJgbJhbJibJjbEybJkbJlbJmbJnbJobJpbJqbJrbJsbJtbJubJvbJwbJxbJybJzbJAbJBbJCbJDbJEbGwbJFbGybJGbJHbvYbJIbJJbJKbJLbJLbxGbJMbJNbJObxGbJPbEUbJQbxGbJRbJSbJTbJUbJVbJWbJXbJYbJZbKabKbbKcbKdbKebKfbKfbKgbKhbKibKjbKkbDzbDAbKlbDAbDzbKmaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbKnbAebFqbAebAebAebAebAebyvbAfbICbKobngbKpbpIbKqbKrbpIbKsbpHbpIbpIbKtbtLbDXbvvbIIbHlbHmbCpbKubKvbKwbKxbKybKzbKAbKBbKCbKDbwXbKEbKFbwXbwYbwYbKGbHybKHbKIbKJbKKbKLbKLbKMbKNbKObvvbKPbucbEybKQbEubKRbKSbEybJkbKTbKUbKVbKWbKXbKYbKUbJkbKZbLabLbbLbbLbbLcbLbbLdbLdbLebLfbLgbLhbLhbLibLgbLgbLhbLhbLjbLkbLjbLjbxGbxGbxGbxGbxGbLlbLmbBobxGbLnbLobLpbLqbLqbLrbLsbLtbLubLvbLwbLxbLybLzbLAbLAbLBbJVbLCbEXbLDbLDbLDbLEbEXbLFaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabmObmObmObmObmObmObmObmObmOaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbMVbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbIzbIAbIzbFobLGbLHbAebAebAebLGbAebyvbAfbICbLIbngbLJbpIbAibFvbpIbnmbLKbpIbpIbLLbtLbDXbvvbLMbHlbLNbCpbLObLPbLQbLRbLSbKzbLTbLUbLVbLWbLXbLYbLZbMaaaaaaaaaabHybMbbMcbMdbMdbMebMfbMgbHybMhbMibFXbMjbMkbMlbMmbMnbMobMpbMqbJlbMrbMsbMtbMubMvbMrbJkbKZbMwbMxbMybMzbMAbMBbLdbMCbMDbMEbLgbMFbMGbMHbMIbMJbMKbMLbKabMMbLqbLqbMNbMObLqbMPbMQbMRbMSbMTbLqbMUbiTbMWbMXbMYbMZbNabNbbNabNabNabIwbEXbEXbIxbIxbEXbNcbNdbNebNfbNgbNhbNibLDaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbNjbNkbNjbNlbNmbNnbNnbNnbNnbNnbNobNpbNqbICbNrbngbNsbNtbNubNvbNwbNxbNybNybNybNzbNzbNAbvvbNBbNCbHmbCpbNDbNEbNFbKvbNGbKzbNHbNIbNJbNKbNLbFNbNMbMaaaaaaaaaabHybNNbNObNPbNQbMebMfbMgbHybNRbNSbNTbNUbNVbNWbNXbNYbNZbOabObbOcbKUbKUbOdbOebKUbKUbJkbKZbOfbOgbOhbOibOjbOkbLdbOlbOmbOnbOobOpbOqbOrbOrbOsbOtbOubOvbOwbJVbJVbOxbJVbOybJVbOzbJVbOAbOBbOBbOCbODbOEbOFbOGbOHbOIbOJbOKbOLbNabOMbONaaaaaaaaabEXbOObOPbOQbORbOSbOTbOUbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQbFnbBRbBRbngbngbBRbBRbBRbBRbBRbngbngbBRbBRbBRbngbOVbOVbOVbOWbOVbNzbOXbOYbOZbPabNzbDXbvvbPbbPcbPcbCpbCpbCpbCpbCpbPdbKzbISbIRbPebNKbPgbPhbMabMabvjbvjbvjbHybHzbHybHybHybHybHybHybHybPibvvbPjbPkbPlbPmbPnbPlbPlbPobPpbPqbPrbPsbPtbPubPvbPwbMqbPxbPybPzbPAbPBbPCbPDbPEbPFbPGbPHbPIbPJbPKbPLbMHbPMbLhbLhbPNbPObPNbPPbPQbPPbPPbPPbPRbPSbPTbPTbPUbPVbPWbPXbOFbPYbPZbQabQbbQcbQdbNabOMbONaaaaaaaaabEXbQebQfbEXbKjbEXbEXbKjbEXaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabBQbBQbBQbBQbBQbBQbBQaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabQgaabaaaaaaaaaaaabOVbQhbQibQjbQkbNzbQlbQmbQnbQobNzbDXbvvbQpbQqbQrbQsbQtbQubQvbQwbQxbQybQzbQAbQBbQCbQDbQEbQFbQGbQHbQIbQJbQKbQLbQMbQNbubbQObvvbQPbQQbQRbvvbQSbPlbQTbQUbQVbQWbQXbJkbQYbQZbRabRbbRcbRdbRebRfbRgbRhbRibLbbRjbOibRkbRlbRmbRnbRobRpbLgbRqbMHbMHbMHbRrbLhbPNbRsbRtbRubRvbRwbRxbRybPPbRzbRAbRBbPTbPTbRCbPWbRDbREbRFbRGbRHbRIbRJbRKbNabRLbwoaaaaaaaaabEXbEXbEXbEXaaaaaaaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8388,7 +8386,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbF aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaabFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmbFmaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaabUEcaVcaWcaXbUEbUIbUIbUIbOVcaYcaZcaZcaZbOVbOVbUTcbacbacbbcbcbUTcbdcbebUVbZHbYnbYnbYncbfbUZbYpbYqbYqcbgcbhcbicbjcbkcblbVfbVfbVfbVfbVfcbmbVfbVfcbncbobVkbVkcbpbVkbVnbVkbVkbPlcbqcbqbPlbPlcbrcbscbtcbucbvcbwcbxcbycbzcbAcbBcaocapcbCcbDcbEcbFcbGcbHbVAcbIcbJcbKcbLcbMcbNcbOcbPcbQcbPcbRcbRcbRcbPcbScbPcbPcbTcbUbZmbZmbPTcbVbZnbPXcbWcbXcbYcbZccaccbccccccccdcceccfccgcchcciccjcckcclccmccnccoccpccqccrccscctaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWgbWhccuccvccvbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaccwbTgccxbTgccycczaabaaabOVbOVbUIbUIbUIbOVaaabUTccAccBccCccDbZFccEccFbUVccGccHccIbYnccJccKccLccMccNccOccPbUZccQccRccSccTccUccUccUccUccVccWccXccYccYccZccZcdacdbcdcbVibPlcddcdecdfcdgcdhbYKcdicbtcdjcdkcdlcdmbSwcdncdocdpcdqcdrcdrcdscdrcdrcdrcdtbVAcducdvcdwcdxcdycdzcdAcbPcdBcdCcdDcdEcdFcdCcdGcdHcdCcdIcdJbRBbPTbPTcdKcdLcdMcdNcdOcdPcdQcdRcdScdTcdUcdVcdWcdXcdYcdZceacebceaceccebcebcebcedceecefcegcehaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhbWhceibXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbXZbWhbWhaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabFlbFlbFlbFlbFlbFlbFlbFlbFlaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabaabcejbUTbUTbUTcekbUTbUTcelbUVcemcenceocepceqcercescetceucevcewccKcexceycezceAceBceBceBceBceCceDceEceFceGceFceHceIceJceKceLceMceNceOcePceQceRceSceTceUceVceWceXceYceZcfacfbcfccfdcfdcfdcfecffcfgcfhcficfjcfjcfkcfjcflcfmcfncfocbPcfpcfqcfrcfscfrcftcfucfvcdCbPTcfwbPTbPTcfxcfybZnbBxbEXbUAcfzbUAbUAcfAcfBcfCcfDcfEcebcfFcfGcfHcdUcfHcdUcfIcdUcdUbUAcfJcfKcfLcfMaabaabaabaabaabaabaabaabaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcfObXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzcgAcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcfPcfQcfRbUTcfSbUVcfTcfUcfVbZHcfWcfXcfYbYpcfZcgacgbcfXcgccgdcgecgfcgfcggcghcgicgjcgkcglcgmbGycgnbVicgobGybGycgpcgqcgrcgscgtceQcgucgvcgwcgxcgycgzbMVcgBcgCcgzcgzcgDcgEcgEcgEcgEcgEcgGcgFcgHcgJcgJcgKcgLcgMcgNcgOcgPcbPcgQcgRcgScgTcgScgUcgVcfrcgWcgXcgYbBxcgZbBxcfybZnbBxbEXchachbchcbUAbUAbUAbUAbUAchdcdUchechfcfIcdUchgcdUbZpcdUchhbUAchichjchkbUAaabaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhchlchlchlchlchlchlchmbXZchnchlcfObXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejchochpchqbUTcfSchrchrchrchrchrchrbUZbUZbUZbUZbUZbUZbUZchschtchuchvchwchxchychychzchAcglbGybGychBchCchDbGybGybGychEchFchGceOchHchIchJcgEchKchLchMbSqchLchNcfdcfdcfdcfdcfdcfdcfdcfdcfdcgIbSqchOchPchQchRchSchTchUchVcbPchWchXcfrchYcfrchZciacibciccidciecifbBxcigcfybZncihbEXbFeciicijcikbwobxXbxXbUAcilcimcinciocipciqcirciscitciucivbUAciwcixciycizaacaacaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaciAbXXbXXbXXbXXbXXbXXbXXciBciCbXZbXZbXZbXZciDbYabWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacejcejcejcejbUTcfScejaaaaaaaaaaaaciEbaTciGciHciIciJciKciLciMciNciOciPciQciRciSciSciTciUciVciWciWciWciWciXciWbGybGybPlciYciZcjacjbcjccjdchScjecjfcjgcjhcjicjjcjkcfdcfdcjlcjpcjpcjpcjpckNclSckUcjqcjqcjrcjscjtcbAcjucjvcbPcjwcjxcjycjzcjAcfrcjBcbPcbPbEXcjCbEXbEXbEXcjDcjEcjFbEXbxXciicjGcjHbwobwobwobUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAbUAaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaabWhccvccvccvccvccvccvcjIbXZccuccvcjJbXZbXZbXZbXZbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacAjaaaaabaabcjKcjKcjKcjKcjKcjKcjLcjKbUTcelcjMaaacjNcjOcjPcjQcjRcjScjTcjUcjVcjWcjXcjYcjZckackbckcckdckeckfckgckhciVckickjckjckjckkciWbGybGycklcklcklcklckmcklckncknckocklcklckpcklckqckrckscktcksclZaPKcmacmmcmlcmocmnckzckAckBckCckDckEckFcdccbPcbPckGcbPckHcbPckIckJckKcgnckLckMckvckOckPckQckRckSckPbxXciickTbxXbxXckVckWckXchabxXbxXbxXbxXbxXbxXbxXckYckZbONaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabWhbXZbXZbXZbXZbXZbXZcfNbXZcjJbXZbXZbXZbXZbXZbWhbWhaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa @@ -8401,7 +8399,7 @@ aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdcsecsfcsgcsgcshcsicsjcskcslcsmcsncsocspcspcspcsqcsrcsscstcstcsucsvcswcsxcsycsxcsxcsxcswcsxcsxcszcsAcsBcsCcgdcbkcsDcsEcsFcsGcgfcsHcmQcsIcsJcsKcsLcsMcsNcsObGybGycpFcsPcsQcsRcsScsTcsUcpFcsVcsTcsWcsXcsRcsYcwraaaaaaaaacEjdbAdbzdbAdbAdbCdbBdbEdbDdbycwFbVibGycuscoDcwpaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaaaaactdckPcxGckSctdctfctgcthctictjctkctlcpXcpXctmctnctoctpctqbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaabaabaabaabaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccsdctuctvctwctvctxctyctzctActBctCctBctDctEctEctFctEcgdctGcblcblctEctHctEctEctEctEctEctEctEctEctEctEctIctJctKctLctMctNctOctPctQctRctSctTctUctVctWctXctYctZcuacnqcubcuccudcuecufcugcuhcuicpFcujcqKcugcukcqJculcwraaaaaaaaadbFcmkdbGdbJdbIdbCdbKdbMdbLdbOdbNceFceJdbPcoDcwpaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaaaackPcurcyFcutckPcnCcnCcnCcnCcnCcnCcuuctlcuvcuwcuxcuycnCcnCbwocvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacsccuBctvcuCcuDcuEcuFcuGcuHcuIcuJcuKcuLcuMcuNcuOcuPcuQcuRceAcuSceAcuNcuTcuNcuNcuNcuNcuNcuNcuNcuNcuNcuNcuUctEcuVcuWcuXcuYcuZcvacvbcvccvdcvecvfcvgcvhcvicvjcvkcsLceJcvlcvmcvncqKcqJcqKcqKcvocpFcvpcqKcqKcqNcqJcyGcwraaaaaaaaadbFdbRdbQdbTdbSdbVdbUdbXdbWdbybGychCcyHcuscoAaaaaaaaaaaaaaaaaabckPckPckPckPckPckPckPckPckPcvucxScvwckPcxOcxOcyIckPaabcnCcnCcvAcnCcvBcvCcvDcnCcyKcyJcvzbxXcxHaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa -aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvYcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa +aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaadbabLcrjcrjcrjcrjcrjcrjcvFcvGcvGcvHctBcvIcrjcrmcvJcvKcvKcvLcvKcvMcvKcvKcvNcvOcvKcvKcvOcvOcvOcvKcvKcvKcvKcvPcvQcvRcvScvTcvUcvVcvWcvXcvWcvWcvWcvWcvZcwacwbcwccwdcsObGycvrcwecwfcwgcwhcwicwjcwkcpFcwlcwjcwmcqNcwncwocpMaaaaaaaaadbFdbZdbYdcadbIdccdcbdbUczRdbycyObVibVicuscoAaaaaaaaaaaaaaaaaaackPcwtcwucwvcwwcwxcwycwzcwAcwBcxScwDckPcxOcBZcyPckPaabaabcwGcwHcwIcwJcwKcwLcwGbxXbxXcvzczfbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacGacGacGafxafxacGafxafxafxagiafxafxaabagiaqZaaaaabaabcwNcwNcwNcrjcwOcwPcwQcwRcwScwTcwUcwVcwWcwXcwYcwZcxacxbcxccxdcxecxfcxgcvKcxfcxhcxicxjcxjcxkcvKcxlcxmcxncxocbkcxpcxqcxrcxscxtcxucxtcxvcxwcxxcxycxzcxAcsOcsOcvrcwecpMcpMcxBcpMcpMcxCcxDcxEcxEcxEcxFcxEcyUcpMaaaaaaaaadbFdbFdbFdbFdbFdbydcedcgdcfdbybGybGyczhcuscoAaaaaaaaaaaaaaaaaaackPcxOcxPcxOcxQcxRcqUcxScwAcxTczicxTckPcxOcxOcMpckPaabaaacwGcxWcxXcwJcwJcxYcwGczjbxXcvzbzNczMaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaaaaacGaaaaaaaabaabaaaaabaabaaaaaaaabaabaabaaaaqZaaaaaaaaaaabaabcwNcrjcrjcrjcrjcrjcrjcrjcrjcybcwWcwXcyccydcyecyfcyfcyfcyfcygcyhcyicxjcyjcxjcxjcykcxjcylcymcyncyocxocbkcypcyqcyrcxscyscytcyucxscyvcywcyxcyycyzcyAcyBcyCcyDcyEcyEcAaczUcAdcAccAeczTcALceJcAhbGycAMcoAcoAcoAcoAcoAaaaaaaaaaaaadcidchdckdcjdbydclbVibVicuscoAcoAcoAcoAcoAaaaaaackPcxOcxOcxOcyZczaczbczcczdczecAiczgckPcAVcAYcAWckPaaaaaacwGczkcwJczlcwJczmcwGbxXbxXcvzczMbwoaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacyacyacyacyacyacyacyaaaaaaaaaaaaaaaaaaaaaaacGaaaczoczpczqaaaczoczpczqaaaczoczpczqaabczraabaaaaaaaaaaaaaabaabaabaaaaaaaaaaaaaaaaaaczscwWcwXcztcxjcykczucxjcxjcxjczvcxjcztcztcxjcxjcxjcxjczwczxcymczyctEczzcbkcyqcyqczAcxsczBczCczDcxsczEctWczFczGczHczIczJczKbGyczLcdcczLbGycBacAZcBccBccBccBccBPcBNcBNcBNcBNcBNcBQcoAaaaaaaaaaaaadcidchdckdcmdcnbGyckObVicusbGybGybGycgmcoAaaaaaackPcwAcwAcwAcwAczWcqUczXczYczZcCfcAbckPcCGcCYcCIckPaaaaaacwGcAfcAgcDLcwJcDNcwGcEdbxXcvzbwoaabaabaabaabaaaaaaaaaaaaaahaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index ac699c42a53..a4e432bb1e3 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -50,6 +50,9 @@ Pipelines + Other Objects -> Pipe network stored = new(src, make_from = src) /obj/machinery/atmospherics/Destroy() + if(stored) + qdel(stored) + stored = null for(var/mob/living/M in src) //ventcrawling is serious business M.remove_ventcrawl() M.forceMove(loc) diff --git a/code/__DEFINES/hud.dm b/code/__DEFINES/hud.dm index 3e3e219792b..293ba1f18ea 100644 --- a/code/__DEFINES/hud.dm +++ b/code/__DEFINES/hud.dm @@ -8,4 +8,3 @@ #define IMPTRACK_HUD 7 // tracking implant #define SPECIALROLE_HUD 8 // AntagHUD image #define STATUS_HUD_OOC 9 // STATUS_HUD without virus db check for someone being ill. -#define NATIONS_HUD 10 //Show nations icons during nations gamemode diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index a81a99c540b..00faf1864f9 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -31,11 +31,6 @@ var/datum/job/J = new T joblist[J.title] = J - paths = subtypesof(/datum/nations) - for(var/T in paths) - var/datum/nations/N = new T - all_nations[N.name] = N - paths = subtypesof(/datum/superheroes) for(var/T in paths) var/datum/superheroes/S = new T diff --git a/code/_globalvars/lists/mobs.dm b/code/_globalvars/lists/mobs.dm index 452911908bc..c13ae732cee 100644 --- a/code/_globalvars/lists/mobs.dm +++ b/code/_globalvars/lists/mobs.dm @@ -2,7 +2,6 @@ var/global/list/all_species[0] var/global/list/all_languages[0] var/global/list/language_keys[0] // Table of say codes for all languages -var/global/list/all_nations[0] var/global/list/all_superheroes[0] var/global/list/whitelisted_species = list() diff --git a/code/_globalvars/lists/objects.dm b/code/_globalvars/lists/objects.dm index a001c55082f..e43177c0965 100644 --- a/code/_globalvars/lists/objects.dm +++ b/code/_globalvars/lists/objects.dm @@ -8,7 +8,6 @@ var/global/list/side_effects = list() //list of all medical sideeffects types var/global/list/mechas_list = list() //list of all mechs. Used by hostile mobs target tracking. var/global/list/spacepods_list = list() //list of all space pods. Used by hostile mobs target tracking. var/global/list/joblist = list() //list of all jobstypes, minus borg and AI -var/global/list/flag_list = list() //list of flags during Nations gamemode var/global/list/airlocks = list() //list of all airlocks var/global/list/singularities = list() //list of all singularities var/global/list/janitorial_equipment = list() //list of janitorial equipment diff --git a/code/controllers/Processes/supply.dm b/code/controllers/Processes/supply.dm index aa4ba1e52ab..2c16473f990 100644 --- a/code/controllers/Processes/supply.dm +++ b/code/controllers/Processes/supply.dm @@ -1,6 +1,6 @@ /datum/controller/process/supply/setup() name = "supply" - schedule_interval = 300 // every 30 seconds + schedule_interval = 10 // every second /datum/controller/process/supply/doWork() supply_controller.process() \ No newline at end of file diff --git a/code/datums/helper_datums/teleport.dm b/code/datums/helper_datums/teleport.dm index 048eaa55fd3..fc8e01984f9 100644 --- a/code/datums/helper_datums/teleport.dm +++ b/code/datums/helper_datums/teleport.dm @@ -167,18 +167,4 @@ if(istype(teleatom, /mob/living)) var/mob/living/MM = teleatom MM << "The bluespace interface on your bag of holding interferes with the teleport!" - return 1 - -/datum/teleport/instant/science/teleportChecks() - if(istype(teleatom, /obj/item/flag/nation)) // Don't let nation's flags get teleported either --Fox - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 - - if(!isemptylist(teleatom.search_contents_for(/obj/item/flag/nation))) - if(istype(teleatom, /mob/living)) - var/mob/living/MM = teleatom - MM.visible_message("The portal rejects [MM]!","The flag that you're carrying seems to be unable to pass through the portal. Better drop it if you want to go through.") - else - teleatom.visible_message("The portal rejects [teleatom]!") - return 0 return 1 \ No newline at end of file diff --git a/code/datums/mind.dm b/code/datums/mind.dm index f781ace9a90..0efec301d83 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -55,7 +55,6 @@ var/datum/faction/faction //associated faction var/datum/changeling/changeling //changeling holder - var/datum/nations/nation //associated nation for CTF var/datum/vampire/vampire //vampire holder var/rev_cooldown = 0 diff --git a/code/game/dna/dna_modifier.dm b/code/game/dna/dna_modifier.dm index 33a952ace87..b0dcf14933f 100644 --- a/code/game/dna/dna_modifier.dm +++ b/code/game/dna/dna_modifier.dm @@ -79,7 +79,7 @@ component_parts += new /obj/item/stack/cable_coil(null, 1) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/dna_scannernew/RefreshParts() scan_level = 0 damage_coeff = 0 @@ -190,7 +190,7 @@ return if(L == user) return - visible_message("[user] puts [L.name] into the DNA Scanner.", 3) + visible_message("[user] puts [L.name] into the DNA Scanner.") put_in(L) if(user.pulling == L) user.pulling = null @@ -316,21 +316,21 @@ for(var/atom/movable/A as mob|obj in src) A.forceMove(src.loc) qdel(src) - + // Checks if occupants can be irradiated/mutated - prevents exploits where wearing full rad protection would still let you gain mutations /obj/machinery/dna_scannernew/proc/radiation_check() if(!occupant) return 1 - + if(ishuman(occupant)) var/mob/living/carbon/human/H = occupant if((H.species.flags & NO_DNA_RAD)) return 1 - + var/radiation_protection = occupant.run_armor_check(null, "rad", "Your clothes feel warm.", "Your clothes feel warm.") if (radiation_protection > NEGATE_MUTATION_THRESHOLD) return 1 - + return 0 /obj/machinery/computer/scan_consolenew @@ -445,9 +445,9 @@ if(..(user)) return - if(stat & (NOPOWER|BROKEN)) - return - + if(stat & (NOPOWER|BROKEN)) + return + ui_interact(user) /** @@ -588,10 +588,10 @@ return 1 // return 1 forces an update to all Nano uis attached to src var/radiation = (((src.radiation_intensity*3)+src.radiation_duration*3) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - if(src.connected.radiation_check()) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + if (prob(95)) if(prob(75)) randmutb(src.connected.occupant) @@ -691,29 +691,29 @@ if (!src.connected.occupant) return 1 - + if (prob((80 + (src.radiation_duration / 2)))) var/radiation = (src.radiation_intensity+src.radiation_duration) src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + if(src.connected.radiation_check()) return 1 - + block = miniscrambletarget(num2text(selected_ui_target), src.radiation_intensity, src.radiation_duration) src.connected.occupant.dna.SetUISubBlock(src.selected_ui_block,src.selected_ui_subblock,block) src.connected.occupant.UpdateAppearance() else var/radiation = ((src.radiation_intensity*2)+src.radiation_duration) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) if(src.connected.radiation_check()) return 1 - + if (prob(20+src.radiation_intensity)) randmutb(src.connected.occupant) domutcheck(src.connected.occupant,src.connected) else randmuti(src.connected.occupant) - src.connected.occupant.UpdateAppearance() + src.connected.occupant.UpdateAppearance() return 1 // return 1 forces an update to all Nano uis attached to src //////////////////////////////////////////////////////// @@ -755,16 +755,16 @@ sleep(10*src.radiation_duration) // sleep for radiation_duration seconds irradiating = 0 - src.connected.locked = lock_state - - if(src.connected.occupant) + src.connected.locked = lock_state + + if(src.connected.occupant) if (prob((80 + ((src.radiation_duration / 2) + (connected.precision_coeff ** 3))))) var/radiation = ((src.radiation_intensity+src.radiation_duration) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 - + var/real_SE_block=selected_se_block block = miniscramble(block, src.radiation_intensity, src.radiation_duration) if(prob(20)) @@ -782,7 +782,7 @@ if(src.connected.radiation_check()) return 1 - + if (prob(80-src.radiation_duration)) //testing("Random bad mut!") randmutb(src.connected.occupant) @@ -893,8 +893,8 @@ src.connected.locked = lock_state var/radiation = (rand(20,50) / connected.damage_coeff) - src.connected.occupant.apply_effect(radiation,IRRADIATE,0) - + src.connected.occupant.apply_effect(radiation,IRRADIATE,0) + if(src.connected.radiation_check()) return 1 diff --git a/code/game/gamemodes/epidemic/epidemic.dm b/code/game/gamemodes/epidemic/epidemic.dm deleted file mode 100644 index e64100e2a12..00000000000 --- a/code/game/gamemodes/epidemic/epidemic.dm +++ /dev/null @@ -1,224 +0,0 @@ -/datum/game_mode/epidemic - name = "epidemic" - config_tag = "epidemic" - required_players = 1 - required_players_secret = 15 - - var/const/waittime_l = 300 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 600 //upper bound on time before intercept arrives (in tenths of seconds) - var/checkwin_counter =0 - var/finished = 0 - - var/cruiser_arrival - - var/virus_name = "" - - var/stage = 0 - var/doctors = 0 - -/////////////////////////// -//Announces the game type// -/////////////////////////// -/datum/game_mode/epidemic/announce() - world << "The current game mode is - Epidemic!" - world << "A deadly epidemic is spreading on the station. Find a cure as fast as possible, and keep your distance to anyone who speaks in a hoarse voice!" - - -/////////////////////////////////////////////////////////////////////////////// -//Gets the round setup, cancelling if there's not enough players at the start// -/////////////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/pre_setup() - doctors = 0 - for(var/mob/new_player/player in world) - if(player.mind.assigned_role in list("Chief Medical Officer","Medical Doctor")) - doctors++ - break - - if(doctors < 1) - return 0 - - return 1 - -/datum/game_mode/epidemic/proc/cruiser_seconds() - return (cruiser_arrival - world.time) / 10 - -////////////////////// INTERCEPT //////////////////////// -/// OVERWRITE THE INTERCEPT WITH A QUARANTINE WARNING /// -///////////////////////////////////////////////////////// - -/datum/game_mode/epidemic/send_intercept() - var/intercepttext = "CONFIDENTIAL REPORT
" - virus_name = "X-[rand(1,99)]™" - intercepttext += "Warning: Pathogen [virus_name] has been detected on [station_name()].

" - intercepttext += "Code violet quarantine of [station_name()] put under immediate effect.
" - intercepttext += "Class [rand(2,5)] cruiser has been dispatched. ETA: [round(cruiser_seconds() / 60)] minutes.
" - intercepttext += "
Instructions
" - intercepttext += "* ELIMINATE THREAT WITH EXTREME PREJUDICE. [virus_name] IS HIGHLY CONTAGIOUS. INFECTED CREW MEMBERS MUST BE QUARANTINED IMMEDIATELY.
" - intercepttext += "* [station_name()] is under QUARANTINE. Any vessels outbound from [station_name()] will be tracked down and destroyed.
" - intercepttext += "* The existence of [virus_name] is highly confidential. To prevent a panic, only high-ranking staff members are authorized to know of its existence. Crew members that illegally obtained knowledge of [virus_name] are to be neutralized.
" - intercepttext += "* A cure is to be researched immediately, but Nanotrasen intellectual property must be respected. To prevent knowledge of [virus_name] from falling into unauthorized hands, all medical staff that work with the pathogen must be enhanced with a Nanotrasen loyality implant.
" - - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - - world << sound('sound/AI/commandreport.ogg') - - // add an extra law to the AI to make sure it cooperates with the heads - var/extra_law = "Crew authorized to know of pathogen [virus_name]'s existence are: Heads of command, any crew member with loyalty implant. Do not allow unauthorized personnel to gain knowledge of [virus_name]. Aid authorized personnel in quarantining and neutrlizing the outbreak. This law overrides all other laws." - for(var/mob/living/silicon/ai/M in world) - M.add_ion_law(extra_law) - M << "\red " + extra_law - -/datum/game_mode/epidemic/proc/announce_to_kill_crew() - var/intercepttext = "CONFIDENTIAL REPORT
" - intercepttext += "PATHOGEN [virus_name] IS STILL PRESENT ON [station_name()]. IN COMPLIANCE WITH NANOTRASEN LAWS FOR INTERSTELLAR SAFETY, EMERGENCY SAFETY MEASURES HAVE BEEN AUTHORIZED. ALL INFECTED CREW MEMBERS ON [station_name()] ARE TO BE NEUTRALIZED AND DISPOSED OF IN A MANNER THAT WILL DESTROY ALL TRACES OF THE PATHOGEN. FAILURE TO COMPLY WILL RESULT IN IMMEDIATE DESTRUCTION OF [station_name].
" - intercepttext += "CRUISER WILL ARRIVE IN [round(cruiser_seconds()/60)] MINUTES
" - - for (var/obj/machinery/computer/communications/comm in world) - if (!(comm.stat & (BROKEN | NOPOWER)) && comm.prints_intercept) - var/obj/item/weapon/paper/intercept = new /obj/item/weapon/paper( comm.loc ) - intercept.name = "paper" - intercept.info = intercepttext - - comm.messagetitle.Add("Cent. Com. CONFIDENTIAL REPORT") - comm.messagetext.Add(intercepttext) - world << sound('sound/AI/commandreport.ogg') - - -/datum/game_mode/epidemic/post_setup() - // make sure viral outbreak events don't happen on this mode - EventTypes.Remove(/datum/event/viralinfection) - - // scan the crew for possible infectees - var/list/crew = list() - for(var/mob/living/carbon/human/H in world) if(H.client) - // heads should not be infected - if(H.mind.assigned_role in command_positions) continue - crew += H - - if(crew.len < 2) - world << "\red There aren't enough players for this mode!" - world << "\red Rebooting world in 5 seconds." - - if(blackbox) - blackbox.save_all_data_to_sql() - sleep(50) - world.Reboot() - - var/datum/disease2/disease/lethal = new - lethal.makerandom(1) - lethal.infectionchance = 5 - - // the more doctors, the more will be infected - var/lethal_amount = doctors * 2 - - // keep track of initial infectees - var/list/infectees = list() - - for(var/i = 0, i < lethal_amount, i++) - var/mob/living/carbon/human/H = pick(crew) - if(lethal.uniqueID in H.virus2) - i-- - continue - H.virus2["[lethal.uniqueID]"] = lethal.getcopy() - infectees += H - - var/mob/living/carbon/human/patient_zero = pick(infectees) - var/datum/disease2/disease/V = patient_zero.virus2["[lethal.uniqueID]"] - V.stage = 3 - - cruiser_arrival = world.time + (10 * 90 * 60) - stage = 1 - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - - - ..() - - -/datum/game_mode/epidemic/process() - if(stage == 1 && cruiser_seconds() < 60 * 30) - announce_to_kill_crew() - stage = 2 - else if(stage == 2 && cruiser_seconds() <= 60 * 5) - command_announcement.Announce("Inbound cruiser detected on collision course. Scans indicate the ship to be armed and ready to fire. Estimated time of arrival: 5 minutes.", "[station_name()] Early Warning System") - stage = 3 - else if(stage == 3 && cruiser_seconds() <= 0) - crew_lose() - stage = 4 - - checkwin_counter++ - if(checkwin_counter >= 20) - if(!finished) - ticker.mode.check_win() - checkwin_counter = 0 - return 0 - -////////////////////////////////////// -//Checks if the revs have won or not// -////////////////////////////////////// -/datum/game_mode/epidemic/check_win() - var/alive = 0 - var/sick = 0 - for(var/mob/living/carbon/human/H in world) - if(H.key && H.stat != 2) alive++ - if(H.virus2.len && H.stat != 2) sick++ - - if(alive == 0) - finished = 2 - if(sick == 0) - finished = 1 - return - -/////////////////////////////// -//Checks if the round is over// -/////////////////////////////// -/datum/game_mode/epidemic/check_finished() - if(finished != 0) - return 1 - else - return 0 - -/////////////////////////////////////////// -///Handle crew failure(station explodes)/// -/////////////////////////////////////////// -/datum/game_mode/epidemic/proc/crew_lose() - ticker.mode:explosion_in_progress = 1 - for(var/mob/M in world) - if(M.client) - M << 'sound/machines/Alarm.ogg' - world << "\blueIncoming missile detected.. Impact in 10.." - for (var/i=9 to 1 step -1) - sleep(10) - world << "\blue[i].." - sleep(10) - enter_allowed = 0 - if(ticker) - ticker.station_explosion_cinematic(0,null) - if(ticker.mode) - ticker.mode:station_was_nuked = 1 - ticker.mode:explosion_in_progress = 0 - finished = 2 - return - - -////////////////////////////////////////////////////////////////////// -//Announces the end of the game with all relavent information stated// -////////////////////////////////////////////////////////////////////// -/datum/game_mode/epidemic/declare_completion() - if(finished == 1) - feedback_set_details("round_end_result","win - epidemic cured") - world << "\red The virus outbreak was contained! The crew wins!" - else if(finished == 2) - feedback_set_details("round_end_result","loss - rev heads killed") - world << "\red The crew succumbed to the epidemic!" - ..() - return 1 \ No newline at end of file diff --git a/code/game/gamemodes/meme/meme.dm b/code/game/gamemodes/meme/meme.dm deleted file mode 100644 index 0f9bb44babe..00000000000 --- a/code/game/gamemodes/meme/meme.dm +++ /dev/null @@ -1,181 +0,0 @@ -//This file was auto-corrected by findeclaration.exe on 29/05/2012 15:03:04 - -/datum/game_mode/var/list/memes = list() - -/datum/game_mode/meme - name = "Memetic Anomaly" - config_tag = "meme" - required_players = 3 - required_players_secret = 10 - restricted_jobs = list("AI", "Cyborg") - recommended_enemies = 2 // need at least a meme and a host - votable = 0 // temporarily disable this mode for voting - - - - var/var/list/datum/mind/first_hosts = list() - var/var/list/assigned_hosts = list() - - var/const/prob_int_murder_target = 50 // intercept names the assassination target half the time - var/const/prob_right_murder_target_l = 25 // lower bound on probability of naming right assassination target - var/const/prob_right_murder_target_h = 50 // upper bound on probability of naimg the right assassination target - - var/const/prob_int_item = 50 // intercept names the theft target half the time - var/const/prob_right_item_l = 25 // lower bound on probability of naming right theft target - var/const/prob_right_item_h = 50 // upper bound on probability of naming the right theft target - - var/const/prob_int_sab_target = 50 // intercept names the sabotage target half the time - var/const/prob_right_sab_target_l = 25 // lower bound on probability of naming right sabotage target - var/const/prob_right_sab_target_h = 50 // upper bound on probability of naming right sabotage target - - var/const/prob_right_killer_l = 25 //lower bound on probability of naming the right operative - var/const/prob_right_killer_h = 50 //upper bound on probability of naming the right operative - var/const/prob_right_objective_l = 25 //lower bound on probability of determining the objective correctly - var/const/prob_right_objective_h = 50 //upper bound on probability of determining the objective correctly - - var/const/waittime_l = 600 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 1800 //upper bound on time before intercept arrives (in tenths of seconds) - -/datum/game_mode/meme/announce() - world << "The current game mode is - Meme!" - world << "An unknown creature has infested the mind of a crew member. Find and destroy it by any means necessary." - -/datum/game_mode/meme/can_start() - if(!..()) - return 0 - - // for every 10 players, get 1 meme, and for each meme, get a host - // also make sure that there's at least one meme and one host - recommended_enemies = max(src.num_players() / 20 * 2, 2) - - var/list/datum/mind/possible_memes = get_players_for_role(BE_MEME) - - if(possible_memes.len < 2) - log_admin("MODE FAILURE: MEME. NOT ENOUGH MEME CANDIDATES.") - return 0 // not enough candidates for meme - - // for each 2 possible memes, add one meme and one host - while(possible_memes.len >= 2) - var/datum/mind/meme = pick(possible_memes) - possible_memes.Remove(meme) - - var/datum/mind/first_host = pick(possible_memes) - possible_memes.Remove(first_host) - - modePlayer += meme - modePlayer += first_host - memes += meme - first_hosts += first_host - - // so that we can later know which host belongs to which meme - assigned_hosts[meme.key] = first_host - - meme.assigned_role = "MODE" //So they aren't chosen for other jobs. - meme.special_role = "Meme" - - return 1 - -/datum/game_mode/meme/pre_setup() - return 1 - - -/datum/game_mode/meme/post_setup() - // create a meme and enter it - for(var/datum/mind/meme in memes) - var/mob/living/parasite/meme/M = new - var/mob/original = meme.current - meme.transfer_to(M) - M.clearHUD() - - // get the host for this meme - var/datum/mind/first_host = assigned_hosts[meme.key] - // this is a redundant check, but I don't think the above works.. - // if picking hosts works with this method, remove the method above - if(!first_host) - first_host = pick(first_hosts) - first_hosts.Remove(first_host) - M.enter_host(first_host.current) - forge_meme_objectives(meme, first_host) - - del original - - log_admin("Created [memes.len] memes.") - - spawn (rand(waittime_l, waittime_h)) - send_intercept() - ..() - return - - -/datum/game_mode/proc/forge_meme_objectives(var/datum/mind/meme, var/datum/mind/first_host) - // meme always needs to attune X hosts - var/datum/objective/meme_attune/attune_objective = new - attune_objective.owner = meme - attune_objective.gen_amount_goal(3,6) - meme.objectives += attune_objective - - // generate some random objectives, use standard traitor objectives - var/job = first_host.assigned_role - - for(var/datum/objective/o in SelectObjectives(job, meme)) - o.owner = meme - meme.objectives += o - - greet_meme(meme) - - return - -/datum/game_mode/proc/greet_meme(var/datum/mind/meme, var/you_are=1) - if (you_are) - meme.current << "\red You are a meme!" - - var/obj_count = 1 - for(var/datum/objective/objective in meme.objectives) - meme.current << "Objective #[obj_count]: [objective.explanation_text]" - obj_count++ - return - -/datum/game_mode/meme/check_finished() - var/memes_alive = 0 - for(var/datum/mind/meme in memes) - if(!istype(meme.current,/mob/living)) - continue - if(meme.current.stat==2) - continue - memes_alive++ - - if (memes_alive) - return ..() - else - return 1 - -/datum/game_mode/proc/auto_declare_completion_meme() - for(var/datum/mind/meme in memes) - var/memewin = 1 - var/attuned = 0 - if((meme.current) && istype(meme.current,/mob/living/parasite/meme)) - world << "The meme was [meme.current.key]." - world << "The last host was [meme.current:host.key]." - world << "Hosts attuned: [attuned]" - - var/count = 1 - for(var/datum/objective/objective in meme.objectives) - if(objective.check_completion()) - world << "Objective #[count]: [objective.explanation_text] \green Success" - feedback_add_details("meme_objective","[objective.type]|SUCCESS") - else - world << "Objective #[count]: [objective.explanation_text] \red Failed" - feedback_add_details("meme_objective","[objective.type]|FAIL") - memewin = 0 - count++ - - else - memewin = 0 - - if(memewin) - world << "The meme was successful!" - feedback_add_details("meme_success","SUCCESS") - else - world << "The meme has failed!" - feedback_add_details("meme_success","FAIL") - return 1 diff --git a/code/game/gamemodes/mutiny/key_pinpointer.dm b/code/game/gamemodes/mutiny/key_pinpointer.dm index 9bee2b92c92..4d4596ab229 100644 --- a/code/game/gamemodes/mutiny/key_pinpointer.dm +++ b/code/game/gamemodes/mutiny/key_pinpointer.dm @@ -33,17 +33,3 @@ user << "It is calibrated for the Emergency Secondary Authentication Key." else user << "It is switched off." - -/datum/supply_packs/key_pinpointer - name = "Authentication Key Pinpointer crate" - contains = list(/obj/item/weapon/pinpointer/advpinpointer/auth_key) - cost = 250 - containertype = /obj/structure/closet/crate - containername = "Authentication Key Pinpointer crate" - access = access_heads - group = "Operations" - - New() - // This crate is only accessible during mutiny rounds - if (istype(ticker.mode,/datum/game_mode/mutiny)) - ..() diff --git a/code/game/gamemodes/nations/flag_pinpointer.dm b/code/game/gamemodes/nations/flag_pinpointer.dm deleted file mode 100644 index 776932bbb7b..00000000000 --- a/code/game/gamemodes/nations/flag_pinpointer.dm +++ /dev/null @@ -1,65 +0,0 @@ -/obj/item/weapon/pinpointer/advpinpointer/flag - name = "\improper Flag Pinpointer" - desc = "Tracks the position of every nation's flag." - -/obj/item/weapon/pinpointer/advpinpointer/flag/attack_self() - switch(mode) - if (0) - mode = 1 - active = 1 - target = locate(/obj/item/flag/nation/atmos) - point_at(target) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (1) - mode = 2 - target = locate(/obj/item/flag/nation/sec) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (2) - mode = 3 - target = locate(/obj/item/flag/nation/cargo) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (3) - mode = 4 - target = locate(/obj/item/flag/nation/command) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (4) - mode = 5 - target = locate(/obj/item/flag/nation/med) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - if (5) - mode = 6 - target = locate(/obj/item/flag/nation/rnd) - usr << "\blue You calibrate \the [src] to locate the [target.name]" - else - mode = 0 - active = 0 - icon_state = "pinoff" - usr << "\blue You switch \the [src] off." - -/obj/item/weapon/pinpointer/advpinpointer/flag/examine(mob/user) - switch(mode) - if (1) - user << "Is is calibrated for the [target.name]" - if (2) - user << "Is is calibrated for the [target.name]" - if (3) - user << "Is is calibrated for the [target.name]" - if (4) - user << "Is is calibrated for the [target.name]" - if (5) - user << "Is is calibrated for the [target.name]" - else - user << "It is switched off." - -/datum/supply_packs/key_pinpointer_nations - name = "Nations Flag Pinpointer crate" - contains = list(/obj/item/weapon/pinpointer/advpinpointer/flag) - cost = 20 - containertype = /obj/structure/closet/crate - containername = "Nations Flag Pinpointer crate" - access = access_heads - group = "Operations" - - New() - if (istype(ticker.mode,/datum/game_mode/nations)) - ..() diff --git a/code/game/gamemodes/nations/flagprocs.dm b/code/game/gamemodes/nations/flagprocs.dm deleted file mode 100644 index aa516de1f3d..00000000000 --- a/code/game/gamemodes/nations/flagprocs.dm +++ /dev/null @@ -1,142 +0,0 @@ -/obj/item/flag/nation - density = 1 - anchored = 1 - var/turf/startloc = null - var/captured = 0 - var/list/vassals = list() - var/datum/nations/liege = null - var/datum/nations/nation = null - -/obj/item/flag/nation/New() - ..() - flag_list += src - -/obj/item/flag/nation/fire_act() - return - -/obj/item/flag/nation/Ignite() - return - -/obj/item/flag/nation/light() - return - -/obj/item/flag/nation/attackby(var/obj/item/weapon/W, var/mob/user, params) - return - - -/obj/item/flag/nation/ex_act() - return - -/obj/item/flag/nation/blob_act() - return - - -/obj/item/flag/nation/attack_hand(mob/user as mob) - if(user.mind) - if(user.mind.nation) - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(istype(user.mind.nation,nation)) //Same team as flag - if(liege && liege == F.liege) - user << "You can't steal your liege's flags!" - return - else if(loc != startloc) - loc = startloc - user.visible_message("[user] sends [src] back to base!", "You return [src] to your base!") - return - else - user << "You can't move your flag from it's home location!" - return - else - if(captured && Adjacent(F.startloc)) - user << "This flag has already been captured by your team!" - return - else if(..()) - captured = 0 - anchored = 0 - var/obj/item/flag/nation/N = null - if(liege) - N = locate(liege.flagpath) - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && liege && nation) - if(H.mind.nation.name == liege.name) //we have to check based on the name var since they will be different instances of the nation datum - H.mind.current << "You are no longer the liege of [nation]!" - if(H.mind.nation.name == nation.name) - H.mind.current << "You are no longer vassals of [liege]!" - if(N) - N.vassals -= nation - liege = null - else - user << "You are not part of a nation and therefore cannot pick up any flags!" - return - return - -/obj/item/flag/nation/dropped(mob/user as mob) - ..() - spawn(20) - anchored = 1 - var/obj/item/flag/nation/F = locate(user.mind.nation.flagpath) - if(F.loc != F.startloc) return - for(var/obj/item/flag/nation/S in orange(1,F.startloc)) - if(S == src) - captured = 1 - liege = F.nation - F.vassals += nation - //Announce capture/vassalage here. - for(var/mob/living/carbon/human/H in player_list) - if(H.mind && H.mind.nation && F.nation && nation) - if(H.mind.nation.name == F.nation.name) - H.mind.current << "You have just vassalized [nation]! They must now obey any members of your nation!" - continue - if(H.mind.nation.name == nation.name) - H.mind.current << "You are now vassals of [liege]! You must now obey the orders of any of their members!" - continue - //Check for Victory - for(var/obj/item/flag/nation/N in flag_list) - if(F.nation && N.nation) - if(F.nation.name == N.nation.name) - continue - if(N.liege && F.nation) - if(N.captured && N.liege.name == F.nation.name) - continue - else - return - ticker.mode.declare_completion(F.nation) - - - -//Nations/Department flags --Nations Gamemode Specific -/obj/item/flag/nation/cargo - name = "Cargonia flag" - desc = "The flag of the independent, sovereign nation of Cargonia." - icon_state = "cargoflag" - nation = new /datum/nations/cargonia - -/obj/item/flag/nation/med - name = "Medistan flag" - desc = "The flag of the independent, sovereign nation of Medistan." - icon_state = "medflag" - nation = new /datum/nations/medistan - -/obj/item/flag/nation/sec - name = "Brigston flag" - desc = "The flag of the independent, sovereign nation of Brigston." - icon_state = "secflag" - nation = new /datum/nations/brigston - -/obj/item/flag/nation/rnd - name = "Scientopia flag" - desc = "The flag of the independent, sovereign nation of Scientopia." - icon_state = "rndflag" - nation = new /datum/nations/scientopia - -/obj/item/flag/nation/atmos - name = "Atmosia flag" - desc = "The flag of the independent, sovereign nation of Atmosia." - icon_state = "atmosflag" - nation = new /datum/nations/atmosia - -/obj/item/flag/nation/command - name = "People's Republic of Commandzakstan flag" - desc = "The flag of the independent, sovereign nation of the People's Republic of Commandzakstan." - icon_state = "ntflag" - nation = new /datum/nations/command \ No newline at end of file diff --git a/code/game/gamemodes/nations/nationdatums.dm b/code/game/gamemodes/nations/nationdatums.dm deleted file mode 100644 index 27ccb2ed2cc..00000000000 --- a/code/game/gamemodes/nations/nationdatums.dm +++ /dev/null @@ -1,30 +0,0 @@ -/datum/nations - var/name - var/flagpath - -/datum/nations/atmosia - name = "Atmosia" - flagpath = /obj/item/flag/nation/atmos - -/datum/nations/brigston - name = "Brigston" - flagpath = /obj/item/flag/nation/sec - -/datum/nations/cargonia - name = "Cargonia" - flagpath = /obj/item/flag/nation/cargo - -/datum/nations/command - name = "People's Republic of Commandzakstan" - flagpath = /obj/item/flag/nation/command - -/datum/nations/medistan - name = "Medistan" - flagpath = /obj/item/flag/nation/med - -/datum/nations/scientopia - name = "Scientopia" - flagpath = /obj/item/flag/nation/rnd - - - diff --git a/code/game/gamemodes/nations/nations.dm b/code/game/gamemodes/nations/nations.dm deleted file mode 100644 index 9efc2e4f6f4..00000000000 --- a/code/game/gamemodes/nations/nations.dm +++ /dev/null @@ -1,439 +0,0 @@ -var/global/no_synthetic = 0 - -datum/game_mode/nations - name = "nations" - config_tag = "nations" - required_players_secret = 25 - var/const/waittime_l = 1200 //lower bound on time before intercept arrives (in tenths of seconds) - var/const/waittime_h = 3000 //upper bound on time before intercept arrives (in tenths of seconds) - var/kickoff = 0 - var/victory = 0 - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - -/datum/game_mode/nations/pre_pre_setup() - no_synthetic = 1 - -/datum/game_mode/nations/post_setup() - spawn (rand(waittime_l, waittime_h)) - remove_flags() - spawn(50) - kickoff=1 - send_intercept() - split_teams() - spawn_flags() - populate_vars() - for(var/mob/M in player_list) - if(!istype(M,/mob/new_player)) - M << sound('sound/effects/purge_siren.ogg') - return ..() - -/datum/game_mode/nations/send_intercept() - command_announcement.Announce("Due to recent and COMPLETELY UNFOUNDED allegations of massive fraud and insider trading \ - affecting trillions of investors, the Nanotrasen Corporation has decided to liquidate all \ - assets of the Centcom Division in order to pay the massive legal fees that will be incurred \ - during the following centuries long court process. Therefore, all current employment contracts \ - are IMMEDIATELY TERMINATED. Nanotrasen will be unable to send a rescue shuttle to carry you home,\ - however they remain willing for the time being to continue trading cargo. Have a pleasant \ - day.", "FINAL TRANSMISSION, CENTCOM COMMAND.") - - - -/datum/game_mode/nations/proc/remove_flags() - for(var/obj/item/flag/F in world) - qdel(F) - -/datum/game_mode/nations/proc/spawn_flags() - - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - new /obj/item/flag/nation/atmos(get_turf(N)) - if("Brigston") - new /obj/item/flag/nation/sec(get_turf(N)) - if("Cargonia") - new /obj/item/flag/nation/cargo(get_turf(N)) - if("People's Republic of Commandzakstan") - new /obj/item/flag/nation/command(get_turf(N)) - if("Medistan") - new /obj/item/flag/nation/med(get_turf(N)) - if("Scientopia") - new /obj/item/flag/nation/rnd(get_turf(N)) - -/datum/game_mode/nations/proc/split_teams() - - for(var/mob/living/carbon/human/H in player_list) - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - continue - else - message_admins("[H.name] with [H.mind.assigned_role] could not find any nation to assign!") - continue - -/datum/game_mode/nations/proc/populate_vars() - for(var/obj/effect/landmark/nations/N in landmarks_list) - switch(N.name) - if("Atmosia") - for(var/obj/item/flag/nation/atmos/A in flag_list) - A.startloc = get_turf(N) - continue - if("Brigston") - for(var/obj/item/flag/nation/sec/B in flag_list) - B.startloc = get_turf(N) - continue - if("Cargonia") - for(var/obj/item/flag/nation/cargo/C in flag_list) - C.startloc = get_turf(N) - continue - if("People's Republic of Commandzakstan") - for(var/obj/item/flag/nation/command/D in flag_list) - D.startloc = get_turf(N) - continue - if("Medistan") - for(var/obj/item/flag/nation/med/M in flag_list) - M.startloc = get_turf(N) - continue - if("Scientopia") - for(var/obj/item/flag/nation/rnd/S in flag_list) - S.startloc = get_turf(N) - continue - -/datum/game_mode/nations/check_finished() - if(victory) - return 1 - return 0 - -/datum/game_mode/nations/declare_completion(var/datum/nations/N) - world << "[N.name] has captured all of the station. All glory to [N.name]" - victory = 1 - - - -/mob/proc/nations_status() - set category = "OOC" - set name = "Nation Status" - set desc = "Information on your nation and your allies." - - if (!( ticker )) return - if (ticker.mode.name != "nations") return - if(!mind) return - if(!mind.nation) return - - var/obj/item/flag/nation/F = locate(mind.nation.flagpath) - - var/dat = "Nation Status

Nation Status

" - - dat += "You are part of the nation of [mind.nation.name].
" - dat += "You -cannot- defect to another nation. Doing so or helping
" - dat += "another nation you are not a vassal of is bannable.
" - - dat += "
" - if(F.liege) - dat += "You are currently the vassal of [F.liege.name] and must obey
" - dat += "the commands of ANY of their members.
" - else - dat += "You are not currently vassalized by anyone! Protect your flag!
" - dat += "
Liege
" - - dat += "
" - if(F.vassals.len) - for(var/datum/nations/V in F.vassals) - dat += "[V.name] is your vassal and must obey the commands of ANY of your members." - else - dat += "You do not currently have any vassals! Capture flags to vassalize!
" - dat += "
Vassals
" - dat += "
" - dat += "The following are considered OUTLAWED by the Geneva Space Convention and will result" - dat += "in severe consequences if used in warfare:
" - dat += "Scientopia - Large Scale Bombs - Nuclear Warfare" - dat += "Atmosia - Using atmos as a weapon - Chemical Warfare" - dat += "Medistan - Releasing harmful viruses - Biological Warfare" - dat += "
Geneva Space Convention
" - - dat += "" - usr << browse(dat, "window=nationstatus;size=400x500") - -/mob/proc/respawn_self() - set category = "OOC" - set name = "Respawn Character" - set desc = "Respawn yourself (15 minute cooldown)." - - if (!( ticker )) - usr << "\blue The round hasn't started!" - return - if(stat!=2) - usr << "\blue You must be dead to respawn." - return - if (ticker.mode.name != "nations") - usr << "\blue Respawn is disabled." - return - if(!mind) - return - if(!mind.nation) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(!mind.assigned_role in get_all_jobs()) - src << "It appears you're not part of a nation. Use Respawn as NPC instead." - return - if(mind.special_role) - src << "It appears you beame an antag and are longer part of a nation. Use Respawn as NPC instead." - return - else - var/deathtime = world.time - src.timeofdeath - var/deathtimeminutes = round(deathtime / 600) - var/pluralcheck = "minute" - if(deathtimeminutes == 0) - pluralcheck = "" - else if(deathtimeminutes == 1) - pluralcheck = " [deathtimeminutes] minute and" - else if(deathtimeminutes > 1) - pluralcheck = " [deathtimeminutes] minutes and" - var/deathtimeseconds = round((deathtime - deathtimeminutes * 600) / 10,1) - usr << "You have been dead for[pluralcheck] [deathtimeseconds] seconds." - if (deathtime < 9000) - usr << "You must wait 15 minutes to respawn!" - return - else - - //Ok, it's not a xeno or a monkey. So, spawn a human. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. - - var/datum/data/record/record_found //Referenced to later to either randomize or not randomize the character. - if(mind) //mind isn't currently in use by someone/something - /*Try and locate a record for the person being respawned through data_core. - This isn't an exact science but it does the trick more often than not.*/ - var/id = md5("[real_name][mind.assigned_role]") - for(var/datum/data/record/t in data_core.locked) - if(t.fields["id"]==id) - record_found = t//We shall now reference the record. - break - - if(record_found)//If they have a record we can determine a few things. - new_character.real_name = record_found.fields["name"] - new_character.gender = record_found.fields["sex"] - new_character.age = record_found.fields["age"] - new_character.b_type = record_found.fields["b_type"] - else - new_character.gender = pick(MALE,FEMALE) - var/datum/preferences/A = new() - A.copy_to(new_character) - - if(!new_character.real_name) - if(new_character.gender == MALE) - new_character.real_name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names)) - else - new_character.real_name = capitalize(pick(first_names_female)) + " " + capitalize(pick(last_names)) - new_character.name = new_character.real_name - - if(mind) - mind.transfer_to(new_character) //be careful when doing stuff like this! I've already checked the mind isn't in use - new_character.mind.special_verbs = list() - else - new_character.mind_initialize() - if(!new_character.mind.assigned_role) new_character.mind.assigned_role = "Civilian"//If they somehow got a null assigned role. - - //DNA - if(record_found)//Pull up their name from database records if they did have a mind. - new_character.dna = new()//Let's first give them a new DNA. - new_character.dna.unique_enzymes = record_found.fields["b_dna"]//Enzymes are based on real name but we'll use the record for conformity. - - // I HATE BYOND. HATE. HATE. - N3X - var/list/newSE= record_found.fields["enzymes"] - var/list/newUI = record_found.fields["identity"] - new_character.dna.SE = newSE.Copy() //This is the default of enzymes so I think it's safe to go with. - new_character.dna.UpdateSE() - new_character.UpdateAppearance(newUI.Copy())//Now we configure their appearance based on their unique identity, same as with a DNA machine or somesuch. - else//If they have no records, we just do a random DNA for them, based on their random appearance/savefile. - new_character.dna.ready_dna(new_character) - - new_character.key = key - - job_master.EquipRank(new_character, new_character.mind.assigned_role, 1)//Or we simply equip them. - - if(!record_found)//If there are no records for them. If they have a record, this info is already in there. MODE people are not announced anyway. - data_core.manifest_inject(new_character) - - new_character << "You have been fully respawned. Get back in the fight!." - new_character.hud_updateflag |= 1 << NATIONS_HUD - return new_character - - - -/** - * LateSpawn hook. - * Called in newplayer.dm when a humanoid character joins the round after it started. - * Parameters: var/mob/living/carbon/human, var/rank - */ -/hook/latespawn/proc/give_latejoiners_nations(var/mob/living/carbon/human/H) - var/datum/game_mode/nations/mode = get_nations_mode() - if (!mode) return 1 - - if(!mode.kickoff) return 1 - - var/list/cargonians = list("Quartermaster","Cargo Technician","Shaft Miner") - if(H.mind) - if(H.mind.assigned_role in engineering_positions) - H.mind.nation = all_nations["Atmosia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudatmosia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in medical_positions) - H.mind.nation = all_nations["Medistan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudmedistan") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in science_positions) - H.mind.nation = all_nations["Scientopia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudscientopia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in security_positions) - H.mind.nation = all_nations["Brigston"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudbrigston") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in cargonians) - H.mind.nation = all_nations["Cargonia"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcargonia") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in support_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else if(H.mind.assigned_role in command_positions) - H.mind.nation = all_nations["People's Republic of Commandzakstan"] - H.hud_updateflag |= 1 << NATIONS_HUD - var/I = image('icons/mob/hud.dmi', loc = H.mind.current, icon_state = "hudcommand") - H.client.images += I - H.verbs += /mob/proc/respawn_self - H.verbs += /mob/proc/nations_status - H.verbs -= /mob/living/verb/ghost - H.equip_or_collect(new /obj/item/weapon/pinpointer/advpinpointer/flag(H), slot_r_hand) - H << "You are now part of the great sovereign nation of [H.mind.nation.name]!" - return 1 - else - message_admins("[key_name_admin(H)] with [H.mind.assigned_role] could not find any nation to assign!") - return 1 - message_admins("[key_name_admin(H)] latejoined with no mind.") - return 1 - -/proc/get_nations_mode() - if(!ticker || !istype(ticker.mode, /datum/game_mode/nations)) - return null - - return ticker.mode \ No newline at end of file diff --git a/code/game/jobs/job_controller.dm b/code/game/jobs/job_controller.dm index 2ff04e63f6a..0de351c4917 100644 --- a/code/game/jobs/job_controller.dm +++ b/code/game/jobs/job_controller.dm @@ -14,29 +14,16 @@ var/global/datum/controller/occupations/job_master proc/SetupOccupations(var/list/faction = list("Station")) - if(no_synthetic) - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) -list(/datum/job/ai,/datum/job/cyborg) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - else - occupations = list() - var/list/all_jobs = subtypesof(/datum/job) - if(!all_jobs.len) - world << "\red \b Error setting up jobs, no job datums found" - return 0 - for(var/J in all_jobs) - var/datum/job/job = new J() - if(!job) continue - if(!job.faction in faction) continue - occupations += job - + occupations = list() + var/list/all_jobs = subtypesof(/datum/job) + if(!all_jobs.len) + world << "\red \b Error setting up jobs, no job datums found" + return 0 + for(var/J in all_jobs) + var/datum/job/job = new J() + if(!job) continue + if(!job.faction in faction) continue + occupations += job return 1 diff --git a/code/game/machinery/OpTable.dm b/code/game/machinery/OpTable.dm index d7cf74d8137..6a0bd412e8f 100644 --- a/code/game/machinery/OpTable.dm +++ b/code/game/machinery/OpTable.dm @@ -92,7 +92,7 @@ if (C == user) user.visible_message("[user] climbs on the operating table.","You climb on the operating table.") else - visible_message("[C] has been laid on the operating table by [user].", 3) + visible_message("[C] has been laid on the operating table by [user].") if (C.client) C.client.perspective = EYE_PERSPECTIVE C.client.eye = src diff --git a/code/game/machinery/Sleeper.dm b/code/game/machinery/Sleeper.dm index 6cb48aef355..2459e1cc121 100644 --- a/code/game/machinery/Sleeper.dm +++ b/code/game/machinery/Sleeper.dm @@ -308,7 +308,7 @@ user.visible_message("[user] adds \a [G] to \the [src]!", "You add \a [G] to \the [src]!") src.updateUsrDialog() return - + else user << "\red The sleeper has a beaker already." return @@ -354,7 +354,7 @@ usr << "[G:affecting.name] will not fit into the sleeper because they have a slime latched onto their head." return - visible_message("[user] starts putting [G:affecting:name] into the sleeper.", 3) + visible_message("[user] starts putting [G:affecting:name] into the sleeper.") if(do_after(user, 20, target = G:affecting)) if(src.occupant) @@ -555,9 +555,9 @@ usr << "[L.name] will not fit into the sleeper because they have a slime latched onto their head." return if(L == user) - visible_message("[user] starts climbing into the sleeper.", 3) + visible_message("[user] starts climbing into the sleeper.") else - visible_message("[user] starts putting [L.name] into the sleeper.", 3) + visible_message("[user] starts putting [L.name] into the sleeper.") if(do_after(user, 20, target = L)) if(src.occupant) @@ -599,7 +599,7 @@ if(M.Victim == usr) usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into the sleeper.", 3) + visible_message("[usr] starts climbing into the sleeper.") if(do_after(usr, 20, target = usr)) if(src.occupant) usr << "\blue The sleeper is already occupied!" diff --git a/code/game/machinery/adv_med.dm b/code/game/machinery/adv_med.dm index 4ffe2a33052..1d6e07b04c6 100644 --- a/code/game/machinery/adv_med.dm +++ b/code/game/machinery/adv_med.dm @@ -28,7 +28,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 2) RefreshParts() - + /obj/machinery/bodyscanner/upgraded/New() ..() component_parts = list() @@ -129,9 +129,9 @@ usr << "[L.name] will not fit into the body scanner because they have a slime latched onto their head." return if(L == user) - visible_message("[user] climbs into the body scanner.", 3) + visible_message("[user] climbs into the body scanner.") else - visible_message("[user] puts [L.name] into the body scanner.", 3) + visible_message("[user] puts [L.name] into the body scanner.") if (L.client) L.client.perspective = EYE_PERSPECTIVE @@ -350,21 +350,21 @@ /obj/machinery/body_scanconsole/attack_ai(user as mob) return attack_hand(user) - + /obj/machinery/body_scanconsole/attack_ghost(user as mob) return attack_hand(user) /obj/machinery/body_scanconsole/attack_hand(user as mob) if(stat & (NOPOWER|BROKEN)) return - + if (panel_open) user << "Close the maintenance panel first." return - + if(!src.connected) findscanner() - + if (src.connected) if(!connected.occupant) user << "The scanner is empty." diff --git a/code/game/machinery/bots/bots.dm b/code/game/machinery/bots/bots.dm index 7491a88c9a8..b4286afa676 100644 --- a/code/game/machinery/bots/bots.dm +++ b/code/game/machinery/bots/bots.dm @@ -109,7 +109,9 @@ /obj/machinery/bot/Destroy() aibots -= src qdel(Radio) + Radio = null qdel(botcard) + botcard = null return ..() /obj/machinery/bot/proc/add_to_beacons(bot_filter) //Master filter control for bots. Must be placed in the bot's local New() to support map spawned bots. diff --git a/code/game/machinery/bots/mulebot.dm b/code/game/machinery/bots/mulebot.dm index d9e640258a6..8df634c0b50 100644 --- a/code/game/machinery/bots/mulebot.dm +++ b/code/game/machinery/bots/mulebot.dm @@ -82,6 +82,9 @@ var/global/mulebot_count = 0 unload(0) qdel(wires) wires = null + if(cell) + qdel(cell) + cell = null return ..() // attack by item diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index b4e9dc9822c..2db4a6a64e8 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -19,7 +19,7 @@ /obj/machinery/computer/HolodeckControl/attack_hand(var/mob/user as mob) if(..()) return 1 - + user.set_machine(src) var/dat @@ -195,7 +195,7 @@ if(!..()) return - + if(active) if(!checkInteg(linkedholodeck)) damaged = 1 @@ -348,10 +348,10 @@ /obj/structure/table/holotable name = "table" -/obj/structure/table/holotable/attack_alien(mob/user as mob) +/obj/structure/table/holotable/attack_alien(mob/user as mob) return attack_hand(user) -/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) +/obj/structure/table/holotable/attack_animal(mob/living/simple_animal/user as mob) return attack_hand(user) /obj/structure/table/holotable/attack_hand(mob/user as mob) @@ -387,11 +387,11 @@ pressure_resistance = 4*ONE_ATMOSPHERE anchored = 1.0 flags = ON_BORDER - + /obj/structure/rack/holorack name = "rack" -/obj/structure/rack/holorack/attack_alien(mob/user as mob) +/obj/structure/rack/holorack/attack_alien(mob/user as mob) return attack_hand(user) /obj/structure/rack/holorack/attack_animal(mob/living/simple_animal/user as mob) @@ -480,12 +480,12 @@ return G.affecting.loc = src.loc G.affecting.Weaken(5) - visible_message("[G.assailant] dunks [G.affecting] into the [src]!", 3) + visible_message("[G.assailant] dunks [G.affecting] into the [src]!") qdel(W) return else if (istype(W, /obj/item) && get_dist(src,user)<2) user.drop_item(src) - visible_message("[user] dunks [W] into the [src]!", 3) + visible_message("[user] dunks [W] into the [src]!") return /obj/structure/holohoop/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) @@ -495,9 +495,9 @@ return if(prob(50)) I.loc = src.loc - visible_message("Swish! \the [I] lands in \the [src].", 3) + visible_message("Swish! \the [I] lands in \the [src].") else - visible_message("\The [I] bounces off of \the [src]'s rim!", 3) + visible_message("\The [I] bounces off of \the [src]'s rim!") return 0 else return ..(mover, target, height, air_group) diff --git a/code/game/machinery/computer/station_alert.dm b/code/game/machinery/computer/station_alert.dm index 19a5d8e59ee..9f1238c56d2 100644 --- a/code/game/machinery/computer/station_alert.dm +++ b/code/game/machinery/computer/station_alert.dm @@ -25,6 +25,7 @@ /obj/machinery/computer/station_alert/Destroy() alarm_monitor.unregister(src) qdel(alarm_monitor) + alarm_monitor = null return ..() /obj/machinery/computer/station_alert/attack_ai(mob/user) diff --git a/code/game/machinery/cryo.dm b/code/game/machinery/cryo.dm index 1a3361425d9..ceb15bc79b7 100644 --- a/code/game/machinery/cryo.dm +++ b/code/game/machinery/cryo.dm @@ -49,7 +49,7 @@ component_parts += new /obj/item/weapon/stock_parts/console_screen(null) component_parts += new /obj/item/stack/cable_coil(null, 1) RefreshParts() - + /obj/machinery/atmospherics/unary/cryo_cell/construction() ..(dir,dir) @@ -113,9 +113,9 @@ return if(put_mob(L)) if(L == user) - visible_message("[user] climbs into the cryo cell.", 3) + visible_message("[user] climbs into the cryo cell.") else - visible_message("[user] puts [L.name] into the cryo cell.", 3) + visible_message("[user] puts [L.name] into the cryo cell.") if(user.pulling == L) user.pulling = null @@ -157,11 +157,11 @@ /obj/machinery/atmospherics/unary/cryo_cell/attack_ghost(mob/user) return attack_hand(user) - + /obj/machinery/atmospherics/unary/cryo_cell/attack_hand(mob/user) if(user == occupant) return - + if(panel_open) usr << "\blue Close the maintenance panel first." return diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 24c7acc269e..f509cb9026d 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -110,7 +110,7 @@ user << "\The [I] is no longer in storage." return - visible_message("The console beeps happily as it disgorges \the [I].", 3) + visible_message("The console beeps happily as it disgorges \the [I].") I.loc = get_turf(src) frozen_items -= I @@ -125,7 +125,7 @@ user << "There is nothing to recover from storage." return - visible_message("The console beeps happily as it disgorges the desired objects.", 3) + visible_message("The console beeps happily as it disgorges the desired objects.") for(var/obj/item/I in frozen_items) I.loc = get_turf(src) @@ -420,7 +420,7 @@ else announce.autosay("[occupant.real_name] [on_store_message]", "[on_store_name]") - visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.", 3) + visible_message("\The [src] hums and hisses as it moves [occupant.real_name] into storage.") // Delete the mob. qdel(occupant) @@ -458,7 +458,7 @@ if(willing) - visible_message("[user] starts putting [G:affecting:name] into \the [src].", 3) + visible_message("[user] starts putting [G:affecting:name] into \the [src].") if(do_after(user, 20, target = G:affecting)) if(!M || !G || !G:affecting) return @@ -547,9 +547,9 @@ if(willing) if(L == user) - visible_message("[user] starts climbing into the cryo pod.", 3) + visible_message("[user] starts climbing into the cryo pod.") else - visible_message("[user] starts putting [L] into the cryo pod.", 3) + visible_message("[user] starts putting [L] into the cryo pod.") if(do_after(user, 20, target = L)) if(!L) return @@ -637,7 +637,7 @@ usr << "You're too busy getting your life sucked out of you." return - visible_message("[usr] starts climbing into \the [src].", 3) + visible_message("[usr] starts climbing into \the [src].") if(do_after(usr, 20, target = usr)) diff --git a/code/game/machinery/poolcontroller.dm b/code/game/machinery/poolcontroller.dm index 6a865e923eb..f9898a3de00 100644 --- a/code/game/machinery/poolcontroller.dm +++ b/code/game/machinery/poolcontroller.dm @@ -8,30 +8,27 @@ var/temperature = "normal" //The temperature of the pool, starts off on normal, which has no effects. var/temperaturecolor = "" //used for nanoUI fancyness var/srange = 5 //The range of the search for pool turfs, change this for bigger or smaller pools. - var/linkedmist = list() //Used to keep track of created mist - var/misted = 0 //Used to check for mist. + var/list/linkedmist = list() //Used to keep track of created mist + /obj/machinery/poolcontroller/New() //This proc automatically happens on world start for(var/turf/simulated/floor/beach/water/W in range(srange,src)) //Search for /turf/simulated/floor/beach/water in the range of var/srange - src.linkedturfs += W //Add found pool turfs to the central list. + linkedturfs += W //Add found pool turfs to the central list. ..() //Changed to call parent as per MarkvA's recommendation /obj/machinery/poolcontroller/emag_act(user as mob) //Emag_act, this is called when it is hit with a cryptographic sequencer. if(!emagged) //If it is not already emagged, emag it. - user << "\red You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. + user << "You disable \the [src]'s temperature safeguards." //Inform the mob of what emagging does. emagged = 1 //Set the emag var to true. /obj/machinery/poolcontroller/attackby(obj/item/P as obj, mob/user as mob, params) //Proc is called when a user hits the pool controller with something. - if(istype(P,/obj/item/device/multitool)) //If the mob hits the pool controller with a multitool, reset the emagged status if(emagged) //Check the emag status - user << "\red You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. + user << "You re-enable \the [src]'s temperature safeguards." //Inform the user that they have just fixed the safeguards. emagged = 0 //Set the emagged var to false. - return else - user << "\red Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. + user << "Nothing happens." //If not emagged, don't do anything, and don't tell the user that it can be emagged. - return //Return, nothing else needs to be done. else //If it's not a multitool, defer to /obj/machinery/attackby ..() @@ -51,18 +48,14 @@ continue if(isobserver(M)) continue + if(M.stat == DEAD) + continue //End sanity checks, go on switch(temperature) //Apply different effects based on what the temperature is set to. if("scalding") //Burn the mob. M.bodytemperature = min(500, M.bodytemperature + 35) //heat mob at 35k(elvin) per cycle M << "The water is searing hot!" - if("frigid") //Freeze the mob. - M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle - M << "The water is freezing!" - - if("normal") //Normal temp does nothing, because it's just room temperature water. - if("warm") //Gently warm the mob. M.bodytemperature = min(330, M.bodytemperature + 10) //Heats up mobs to just over normal, not enough to burn if(prob(50)) //inform the mob of warm water half the time @@ -73,22 +66,30 @@ if(prob(50)) //inform the mob of cold water half the time M << "The water is chilly." //Inform the mob it's chilly water. + if("frigid") //Freeze the mob. + M.bodytemperature = max(80, M.bodytemperature - 35) //cool mob at -35k per cycle + M << "The water is freezing!" + + if(ishuman(M)) //Make sure they are human before typecasting. var/mob/living/carbon/human/drownee = M //Typecast them as human. - if(drownee.stat == DEAD) //Check stat, if they are dead, ignore them. - continue - if(drownee && drownee.lying && !drownee.internal && !(drownee.species.flags & NO_BREATHE) && !(drownee.species.name == "Skrell" || drownee.species.name =="Neara") && !(NO_BREATH in drownee.mutations)) - //Establish that there is a mob, the mob is lying down, has no internals, species does breathe, is not a skrell/neara, and does not have NO_BREATHE - if(drownee.stat != CONSCIOUS) //Mob is in critical. + if(drownee && drownee.lying) //Mob lying down + if(drownee.internal) + continue //Has internals, no drowning + if((drownee.species.flags & NO_BREATHE) || (NO_BREATHE in drownee.mutations)) + continue //doesn't breathe, no drowning + if(drownee.get_species() == "Skrell" || drownee.get_species() == "Neara") + continue //fish things don't drown + + if(drownee.stat) //Mob is in critical. drownee.adjustOxyLoss(9) //Kill em quickly. add_logs(drownee, src, "drowned") drownee.visible_message("\The [drownee] appears to be drowning!","You're quickly drowning!") //inform them that they are fucked. else - if(!drownee.internal) //double check they have no internals, just in case. - drownee.adjustOxyLoss(5) //5 oxyloss per cycle. - add_logs(drownee, src, "drowned") - if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. - drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* + drownee.adjustOxyLoss(5) //5 oxyloss per cycle. + add_logs(drownee, src, "drowned") + if(prob(35)) //35% chance to tell them what is going on. They should probably figure it out before then. + drownee.visible_message("\The [drownee] flails, almost like they are drowning!","You're lacking air!") //*gasp* *gasp* *gasp* *gasp* *gasp* for(var/obj/effect/decal/cleanable/decal in W) animate(decal, alpha = 10, time = 20) @@ -96,23 +97,23 @@ qdel(decal) /obj/machinery/poolcontroller/proc/miston() //Spawn /obj/effect/mist (from the shower) on all linked pool tiles + if(linkedmist.len) + return + for(var/turf/simulated/floor/beach/water/W in linkedturfs) var/M = new /obj/effect/mist(W) - if(misted) - return linkedmist += M - misted = 1 //var just to keep track of when the mist on proc has been called. - /obj/machinery/poolcontroller/proc/mistoff() //Delete all /obj/effect/mist from all linked pool tiles. for(var/obj/effect/mist/M in linkedmist) qdel(M) - misted = 0 //no mist left, turn off the tracking var + linkedmist.Cut() + /obj/machinery/poolcontroller/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] - data["currentTemp"] = capitalize(src.temperature) + data["currentTemp"] = temperature data["emagged"] = emagged data["TempColor"] = temperaturecolor @@ -122,33 +123,36 @@ ui.set_initial_data(data) ui.open() + + /obj/machinery/poolcontroller/Topic(href, href_list) - if(..()) return 1 + if(..()) + return 1 switch(href_list["temp"]) if("Scalding") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "scalding" - src.temperaturecolor = "#FF0000" + temperature = "scalding" + temperaturecolor = "#FF0000" miston() if("Frigid") - if(!src.emagged) + if(!emagged) return 0 - src.temperature = "frigid" - src.temperaturecolor = "#00CCCC" + temperature = "frigid" + temperaturecolor = "#00CCCC" mistoff() if("Warm") - src.temperature = "warm" - src.temperaturecolor = "#990000" + temperature = "warm" + temperaturecolor = "#990000" mistoff() if("Cool") - src.temperature = "cool" - src.temperaturecolor = "#009999" + temperature = "cool" + temperaturecolor = "#009999" mistoff() if("Normal") - src.temperature = "normal" - src.temperaturecolor = "" + temperature = "normal" + temperaturecolor = "" mistoff() return 1 \ No newline at end of file diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index e697eed0fea..8cdd74790ac 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -389,7 +389,7 @@ src.SUIT = null if(src.MASK) src.MASK = null - visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.", 3) + visible_message("With a loud whining noise, the Suit Storage Unit's door grinds open. Puffs of ashen smoke come out of its chamber.") src.isbroken = 1 src.isopen = 1 src.islocked = 0 @@ -484,7 +484,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) usr << "It's too cluttered inside for you to fit in!" return - visible_message("[usr] starts squeezing into the suit storage unit!", 3) + visible_message("[usr] starts squeezing into the suit storage unit!") if(do_after(usr, 10, target = usr)) usr.stop_pulling() usr.client.perspective = EYE_PERSPECTIVE @@ -528,7 +528,7 @@ if ( (src.OCCUPANT) || (src.HELMET) || (src.SUIT) ) //Unit needs to be absolutely empty user << "The unit's storage area is too cluttered." return - visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.", 3) + visible_message("[user] starts putting [G.affecting.name] into the Suit Storage Unit.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return //derpcheck var/mob/M = G.affecting @@ -685,7 +685,7 @@ user << "\red There is no room inside the cycler for [G.affecting.name]." return - visible_message("[user] starts putting [G.affecting.name] into the suit cycler.", 3) + visible_message("[user] starts putting [G.affecting.name] into the suit cycler.") if(do_after(user, 20, target = G:affecting)) if(!G || !G.affecting) return diff --git a/code/game/mecha/mech_bay.dm b/code/game/mecha/mech_bay.dm index 8588baa80df..f50bc1327dd 100644 --- a/code/game/mecha/mech_bay.dm +++ b/code/game/mecha/mech_bay.dm @@ -116,6 +116,8 @@ recharge_console.voltage = MC * 10 /obj/machinery/mech_bay_recharge_port/Destroy() + qdel(pr_recharger) + pr_recharger = null recharge_console.recharge_port = null recharge_floor.recharge_port = null return ..() diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index 47a47cbd7e5..9f1cc0e0849 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -529,7 +529,7 @@ /obj/mecha/attack_animal(mob/living/simple_animal/user as mob) src.log_message("Attack by simple animal. Attacker - [user].",1) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else user.do_attack_animation(src) if(!prob(src.deflect_chance)) diff --git a/code/game/objects/effects/landmarks.dm b/code/game/objects/effects/landmarks.dm index 5cc9eefd1cb..8d6aa799fd8 100644 --- a/code/game/objects/effects/landmarks.dm +++ b/code/game/objects/effects/landmarks.dm @@ -102,19 +102,6 @@ ..() return QDEL_HINT_HARDDEL_NOW -/obj/effect/landmark/nations - name = "nations" - icon = 'icons/mob/screen1.dmi' - icon_state = "x" - anchored = 1.0 - -/obj/effect/landmark/nations/New() - ..() - tag = "nations*[name]" - invisibility = 101 - - return 1 - /obj/effect/landmark/start name = "start" icon = 'icons/mob/screen1.dmi' diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 842501da8a1..cfb3cd14c7c 100755 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -62,6 +62,7 @@ var/global/list/obj/item/device/pda/PDAs = list() var/ownrank = null // this one is rank, never alt title var/obj/item/device/paicard/pai = null // A slot for a personal AI device + var/retro_mode = 0 /obj/item/device/pda/medical default_cartridge = /obj/item/weapon/cartridge/medical @@ -401,6 +402,8 @@ var/global/list/obj/item/device/pda/PDAs = list() data["idInserted"] = (id ? 1 : 0) data["idLink"] = (id ? text("[id.registered_name], [id.assignment]") : "--------") + data["useRetro"] = retro_mode + data["cart_loaded"] = cartridge ? 1:0 if(cartridge) var/cartdata[0] @@ -574,6 +577,9 @@ var/global/list/obj/item/device/pda/PDAs = list() mode = 0 else if(mode >= 40 && mode <= 49)//Fix for cartridges. Redirects to refresh the menu. cartridge.mode = mode + if("Retro") + retro_mode = !retro_mode + ui_interact(user) if ("Authenticate")//Checks for ID id_check(U, 1) if("UpdateInfo") @@ -1138,7 +1144,7 @@ var/global/list/obj/item/device/pda/PDAs = list() if(T.ptank) atmosanalyzer_scan(T.ptank.air_contents, user, T) else if (istype(A, /obj/machinery/portable_atmospherics/scrubber/huge)) var/obj/machinery/portable_atmospherics/scrubber/huge/T = A - atmosanalyzer_scan(T.air_contents, user, T) + atmosanalyzer_scan(T.air_contents, user, T) else if (istype(A, /obj/machinery/atmospherics/unary/tank)) var/obj/machinery/atmospherics/unary/tank/T = A atmosanalyzer_scan(T.air_contents, user, T) @@ -1276,4 +1282,3 @@ var/global/list/obj/item/device/pda/PDAs = list() /obj/item/device/pda/emp_act(severity) for(var/atom/A in src) A.emp_act(severity) - \ No newline at end of file diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 74a612762e7..e7337e1042d 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -162,7 +162,7 @@ REAGENT SCANNER user.show_message("\t Damage Specifics: [OX] - [TX] - [BU] - [BR]") user.show_message("\blue Body Temperature: [M.bodytemperature-T0C]°C ([M.bodytemperature*1.8-459.67]°F)", 1) if(M.timeofdeath && (M.stat == DEAD || (M.status_flags & FAKEDEATH))) - user.show_message("\blue Time of Death: [M.timeofdeath]") + user.show_message("\blue Time of Death: [worldtime2text(M.timeofdeath)]") if(istype(M, /mob/living/carbon/human) && mode == 1) var/mob/living/carbon/human/H = M var/list/damaged = H.get_damaged_organs(1,1) diff --git a/code/game/objects/items/devices/sensor_device.dm b/code/game/objects/items/devices/sensor_device.dm index 730f81f0bdb..6172a603ce5 100644 --- a/code/game/objects/items/devices/sensor_device.dm +++ b/code/game/objects/items/devices/sensor_device.dm @@ -1,5 +1,5 @@ /obj/item/device/sensor_device - name = "handheld crew monitor" + name = "handheld crew monitor" desc = "A miniature machine that tracks suit sensors across the station." icon = 'icons/obj/device.dmi' icon_state = "scanner" @@ -7,10 +7,15 @@ slot_flags = SLOT_BELT origin_tech = "biotech=3;materials=3;magnets=3" var/datum/nano_module/crew_monitor/crew_monitor - + /obj/item/device/sensor_device/New() crew_monitor = new(src) +/obj/item/device/sensor_device/Destroy() + qdel(crew_monitor) + crew_monitor = null + return ..() + /obj/item/device/sensor_device/attack_self(mob/user as mob) ui_interact(user) diff --git a/code/game/objects/items/flag.dm b/code/game/objects/items/flag.dm index 6ff7e24a85e..32171b19fbe 100644 --- a/code/game/objects/items/flag.dm +++ b/code/game/objects/items/flag.dm @@ -156,7 +156,7 @@ desc = "A flag proudly proclaiming the superior heritage of Unathi." icon_state = "unathiflag" -//Nation Flags (Able to spawn outside Nations gamemode) +//Department Flags /obj/item/flag/cargo name = "Cargonia flag" diff --git a/code/game/objects/items/weapons/flamethrower.dm b/code/game/objects/items/weapons/flamethrower.dm index 40ac8e93bdd..8524a6cbcf2 100644 --- a/code/game/objects/items/weapons/flamethrower.dm +++ b/code/game/objects/items/weapons/flamethrower.dm @@ -25,10 +25,13 @@ /obj/item/weapon/flamethrower/Destroy() if(weldtool) qdel(weldtool) + weldtool = null if(igniter) qdel(igniter) + igniter = null if(ptank) qdel(ptank) + ptank = null return ..() diff --git a/code/game/objects/items/weapons/grenades/smokebomb.dm b/code/game/objects/items/weapons/grenades/smokebomb.dm index 2b7e7b7f854..d8ef1d9591b 100644 --- a/code/game/objects/items/weapons/grenades/smokebomb.dm +++ b/code/game/objects/items/weapons/grenades/smokebomb.dm @@ -15,6 +15,7 @@ Destroy() qdel(smoke) + smoke = null return ..() prime() diff --git a/code/game/objects/items/weapons/storage/bags.dm b/code/game/objects/items/weapons/storage/bags.dm index 034483583fd..bd4dd452887 100644 --- a/code/game/objects/items/weapons/storage/bags.dm +++ b/code/game/objects/items/weapons/storage/bags.dm @@ -37,7 +37,7 @@ max_w_class = 2 storage_slots = 30 can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") /obj/item/weapon/storage/bag/trash/suicide_act(mob/user) user.visible_message("[user] puts the [src.name] over their head and starts chomping at the insides! Disgusting!") @@ -88,7 +88,7 @@ storage_slots = 7 display_contents_with_number = 0 //or else this will lead to stupid behavior. can_hold = list() // any - cant_hold = list("/obj/item/weapon/disk/nuclear","/obj/item/flag/nation") + cant_hold = list("/obj/item/weapon/disk/nuclear") var/head = 0 /obj/item/weapon/storage/bag/plasticbag/mob_can_equip(M as mob, slot) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index dc560095e3d..bc65d324d82 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -1,6 +1,5 @@ /obj //var/datum/module/mod //not used - var/w_amt = 0 // waster amounts var/origin_tech = null //Used by R&D to determine what research bonuses it grants. var/reliability = 100 //Used by SOME devices to determine how reliable they are. var/crit_fail = 0 diff --git a/code/game/objects/structures/morgue.dm b/code/game/objects/structures/morgue.dm index ee2b57d19d7..d23de20410c 100644 --- a/code/game/objects/structures/morgue.dm +++ b/code/game/objects/structures/morgue.dm @@ -318,9 +318,6 @@ return else - if(!isemptylist(search_contents_for(/obj/item/flag/nation))) - usr << "You get the feeling that you shouldn't cremate one of the items in the cremator." - return for (var/mob/M in viewers(src)) M.show_message("\red You hear a roar as the crematorium activates.", 1) @@ -417,7 +414,7 @@ usr << "\red Access denied." return -/hook/Login/proc/update_morgue(var/client/client, var/mob/L) +/hook/Login/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null @@ -440,8 +437,8 @@ Morgue = B.loc if (Morgue) Morgue.update() - -/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) + +/hook/Logout/proc/update_morgue(var/client/client, var/mob/L) //Update morgues on login/logout if (L.stat == DEAD) var/obj/structure/morgue/Morgue = null diff --git a/code/game/supplyshuttle.dm b/code/game/supplyshuttle.dm index 7960132730e..35cf2d31425 100644 --- a/code/game/supplyshuttle.dm +++ b/code/game/supplyshuttle.dm @@ -146,7 +146,7 @@ var/list/mechtoys = list( //processing_interval = 300 //supply points var/points = 50 - var/points_per_process = 1 + var/points_per_process = 0.05 var/points_per_slip = 2 var/points_per_crate = 5 var/points_per_plasma = 5 @@ -168,21 +168,14 @@ var/list/mechtoys = list( /datum/controller/supply/New() ordernum = rand(1,9000) -//Supply shuttle ticker - handles supply point regeneration and shuttle travelling between centcomm and the station -/datum/controller/supply/proc/process() for(var/typepath in subtypesof(/datum/supply_packs)) var/datum/supply_packs/P = new typepath() - if(P.name == "HEADER") - qdel(P) - continue + if(P.name == "HEADER") continue supply_packs[P.name] = P - spawn(0) - if(processing) - iteration++ - points += points_per_process - - //sleep(processing_interval) +//Supply shuttle ticker - handles supply point regeneration and shuttle travelling between centcomm and the station +/datum/controller/supply/proc/process() + points += points_per_process //To stop things being sent to centcomm which should not be sent to centcomm. Recursively checks for these types. /datum/controller/supply/proc/forbidden_atoms_check(atom/A) @@ -190,8 +183,6 @@ var/list/mechtoys = list( return 1 if(istype(A,/obj/item/weapon/disk/nuclear)) return 1 - if(istype(A,/obj/item/flag/nation)) - return 1 if(istype(A,/obj/machinery/nuclearbomb)) return 1 if(istype(A,/obj/item/device/radio/beacon)) diff --git a/code/game/turfs/simulated/floor.dm b/code/game/turfs/simulated/floor.dm index d565f163781..9b2e9b7064d 100644 --- a/code/game/turfs/simulated/floor.dm +++ b/code/game/turfs/simulated/floor.dm @@ -44,6 +44,14 @@ var/list/wood_icons = list("wood","wood-broken") else icon_regular_floor = icon_state + +/turf/simulated/floor/Destroy() + if(floor_tile) + qdel(floor_tile) + floor_tile = null + return ..() + + //turf/simulated/floor/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) // if ((istype(mover, /obj/machinery/vehicle) && !(src.burnt))) // if (!( locate(/obj/machinery/mass_driver, src) )) diff --git a/code/game/vehicles/spacepods/spacepod.dm b/code/game/vehicles/spacepods/spacepod.dm index 635ee587290..d1525fde451 100644 --- a/code/game/vehicles/spacepods/spacepod.dm +++ b/code/game/vehicles/spacepods/spacepod.dm @@ -128,7 +128,7 @@ /obj/spacepod/attack_animal(mob/living/simple_animal/user as mob) if(user.melee_damage_upper == 0) - user.emote("[user.friendly] [src]") + user.custom_emote(1, "[user.friendly] [src]") else var/damage = rand(user.melee_damage_lower, user.melee_damage_upper) deal_damage(damage) diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 92691e78d69..064878a7696 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -477,22 +477,6 @@ dat += "Head not found!" dat += "" - if(ticker.mode.name == "nations") - dat += "
" - for(var/obj/item/flag/nation/N in world) - dat += "" - dat += "
Flags(s)
[N.name], " - var/atom/flag_loc = N.loc - while(!istype(flag_loc, /turf)) - if(istype(flag_loc, /mob)) - var/mob/M = flag_loc - dat += "carried by [M.real_name] " - if(istype(flag_loc, /obj)) - var/obj/O = flag_loc - dat += "in \a [O.name] " - flag_loc = flag_loc.loc - dat += "in [flag_loc.loc] at ([flag_loc.x], [flag_loc.y], [flag_loc.z])
" - if(istype(ticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/mode = ticker.mode dat += "
" diff --git a/code/modules/admin/verbs/onlyoneteam.dm b/code/modules/admin/verbs/onlyoneteam.dm index 23f4df6116b..016b4c891a0 100644 --- a/code/modules/admin/verbs/onlyoneteam.dm +++ b/code/modules/admin/verbs/onlyoneteam.dm @@ -2,12 +2,12 @@ if(!ticker) alert("The game hasn't started yet!") return - + var/list/incompatible_species = list("Plasmaman") for(var/mob/living/carbon/human/H in player_list) - if(H.stat == DEAD || !(H.client)) + if(H.stat == DEAD || !(H.client)) continue - if(is_special_character(H)) + if(is_special_character(H)) continue if(H.species.name in incompatible_species) H.set_species("Human") @@ -55,7 +55,7 @@ H.species.equip(H) H.regenerate_icons() - + message_admins("[key_name_admin(usr)] used DODGEBAWWWWWWWL! -NO ATTACK LOGS WILL BE SENT TO ADMINS FROM THIS POINT FORTH-", 1) log_admin("[key_name(usr)] used dodgeball.") nologevent = 1 @@ -85,6 +85,6 @@ return else playsound(src, 'sound/items/dodgeball.ogg', 50, 1) - visible_message("[H] HAS BEEN ELIMINATED!", 3) + visible_message("[H] HAS BEEN ELIMINATED!") H.melt() return diff --git a/code/modules/assembly/igniter.dm b/code/modules/assembly/igniter.dm index ceb621e2e18..29c13f4a6bc 100644 --- a/code/modules/assembly/igniter.dm +++ b/code/modules/assembly/igniter.dm @@ -3,34 +3,43 @@ desc = "A small electronic device able to ignite combustable substances." icon_state = "igniter" materials = list(MAT_METAL=500, MAT_GLASS=50) - w_amt = 10 origin_tech = "magnets=1" + var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread - describe() - return "The igniter is [secured?"secured.":"unsecured."]" +/obj/item/device/assembly/igniter/New() + ..() + sparks.set_up(2, 0, src) + sparks.attach(src) +/obj/item/device/assembly/igniter/Destroy() + qdel(sparks) + sparks = null + return ..() + + +/obj/item/device/assembly/igniter/describe() + return "The igniter is [secured?"secured.":"unsecured."]" + + +/obj/item/device/assembly/igniter/activate() + if(!..()) return 0//Cooldown check + var/turf/location = get_turf(loc) + if(location) location.hotspot_expose(1000,1000) + if (istype(src.loc,/obj/item/device/assembly_holder)) + if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) + var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc + if (tank) + tank.explode() + if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) + var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc + if(beakerbomb) + beakerbomb.heat_beaker() + + sparks.start() + return 1 + + +/obj/item/device/assembly/igniter/attack_self(mob/user as mob) activate() - if(!..()) return 0//Cooldown check - var/turf/location = get_turf(loc) - if(location) location.hotspot_expose(1000,1000) - if (istype(src.loc,/obj/item/device/assembly_holder)) - if (istype(src.loc.loc, /obj/structure/reagent_dispensers/fueltank/)) - var/obj/structure/reagent_dispensers/fueltank/tank = src.loc.loc - if (tank) - tank.explode() - if (istype(src.loc.loc, /obj/item/weapon/reagent_containers/glass/beaker/)) - var/obj/item/weapon/reagent_containers/glass/beaker/beakerbomb = src.loc.loc - if(beakerbomb) - beakerbomb.heat_beaker() - - var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread - s.set_up(3, 1, src) - s.start() - - return 1 - - - attack_self(mob/user as mob) - activate() - add_fingerprint(user) - return \ No newline at end of file + add_fingerprint(user) + return \ No newline at end of file diff --git a/code/modules/assembly/shock_kit.dm b/code/modules/assembly/shock_kit.dm index 70a822cd8fb..d34dc9e4c76 100644 --- a/code/modules/assembly/shock_kit.dm +++ b/code/modules/assembly/shock_kit.dm @@ -11,7 +11,9 @@ /obj/item/assembly/shock_kit/Destroy() qdel(part1) + part1 = null qdel(part2) + part2 = null return ..() /obj/item/assembly/shock_kit/attackby(obj/item/weapon/W as obj, mob/user as mob, params) diff --git a/code/modules/assembly/signaler.dm b/code/modules/assembly/signaler.dm index 86b4037b1b9..fe33be50f48 100644 --- a/code/modules/assembly/signaler.dm +++ b/code/modules/assembly/signaler.dm @@ -27,6 +27,12 @@ spawn(1) // For things that set the frequency directly set_frequency(frequency) return + + Destroy() + if(radio_controller) + radio_controller.remove_object(src,frequency) + return ..() + describe() return "\The [src]'s power light is [receiving?"on":"off"]" diff --git a/code/modules/examine/descriptions/engineering.dm b/code/modules/examine/descriptions/engineering.dm index c3f9b9b21fa..c8842c21bc7 100644 --- a/code/modules/examine/descriptions/engineering.dm +++ b/code/modules/examine/descriptions/engineering.dm @@ -1,4 +1,4 @@ -/obj/machinery/power/supermatter +/obj/machinery/power/supermatter_shard description_info = "When energized by a laser (or something hitting it), it emits radiation and heat. If the heat reaches above 7000 kelvin, it will send an alert and start taking damage. \ After integrity falls to zero percent, it will delaminate, causing a massive explosion, station-wide radiation spikes, and hallucinations. \ Supermatter reacts badly to oxygen in the atmosphere. It'll also heat up really quick if it is in vacuum.
\ diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index c483f1ee750..ed5441c06f1 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -119,7 +119,7 @@ Works together with spawning an observer, noted above. if(antagHUD) var/list/target_list = list() for(var/mob/living/target in oview(src, 14)) - if(target.mind && (target.mind.special_role || issilicon(target) || target.mind.nation)) + if(target.mind && (target.mind.special_role || issilicon(target))) target_list += target if(target_list.len) assess_targets(target_list, src) @@ -146,7 +146,6 @@ Works together with spawning an observer, noted above. var/client/C = U.client for(var/mob/living/carbon/human/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] - C.images += target.hud_list[NATIONS_HUD] // ??? THE SNOWFLAKE IS KILLING ME for(var/mob/living/silicon/target in target_list) C.images += target.hud_list[SPECIALROLE_HUD] @@ -172,10 +171,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Ghost" set desc = "Relinquish your life and enter the land of the dead." - if(ticker && ticker.mode.name == "nations") - usr << "\blue Ghosting is disabled." - return - var/mob/M = src if(stat == DEAD) diff --git a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm index 0fd832ebc0c..dff7ffb59af 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/humanoid.dm @@ -171,7 +171,7 @@ /mob/living/carbon/alien/humanoid/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/alien/larva/larva.dm b/code/modules/mob/living/carbon/alien/larva/larva.dm index 8ddae961d5f..5bda4880e27 100644 --- a/code/modules/mob/living/carbon/alien/larva/larva.dm +++ b/code/modules/mob/living/carbon/alien/larva/larva.dm @@ -107,7 +107,7 @@ /mob/living/carbon/alien/larva/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/brain/brain_item.dm b/code/modules/mob/living/carbon/brain/brain_item.dm index 3981a18f59d..10b8d580447 100644 --- a/code/modules/mob/living/carbon/brain/brain_item.dm +++ b/code/modules/mob/living/carbon/brain/brain_item.dm @@ -18,6 +18,12 @@ /obj/item/organ/brain/attack_self(mob/user as mob) return //let's not have players taken out of the round as easily as a click, once you have their brain. +/obj/item/organ/brain/surgeryize() + if(!owner) + return + owner.ear_damage = 0 //Yeah, didn't you...hear? The ears are totally inside the brain. + owner.ear_deaf = 0 + /obj/item/organ/brain/xeno name = "thinkpan" desc = "It looks kind of like an enormous wad of purple bubblegum." diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index c008ba43de7..58fe87e70b1 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -36,7 +36,6 @@ hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ..() @@ -395,7 +394,7 @@ /mob/living/carbon/human/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index a7056b0abc8..6f0f4f22626 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -75,10 +75,10 @@ emp_act unEquip(c_hand) if (affected.status & ORGAN_ROBOT) - emote("me", 1, "drops what they were holding, their [affected.name] malfunctioning!") + custom_emote(1, "drops what they were holding, their [affected.name] malfunctioning!") else var/emote_scream = pick("screams in pain and", "lets out a sharp cry and", "cries out and") - emote("me", 1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!") + custom_emote(1, "[(species && species.flags & NO_PAIN) ? "" : emote_scream ] drops what they were holding in their [affected.name]!") if(used_weapon) var/obj/item/W = used_weapon diff --git a/code/modules/mob/living/carbon/human/human_organs.dm b/code/modules/mob/living/carbon/human/human_organs.dm index 7654b0d2e3b..63ffbf93de8 100644 --- a/code/modules/mob/living/carbon/human/human_organs.dm +++ b/code/modules/mob/living/carbon/human/human_organs.dm @@ -117,7 +117,7 @@ unEquip(r_hand) var/emote_scream = pick("screams in pain and ", "lets out a sharp cry and ", "cries out and ") - emote("me", 1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") + custom_emote(1, "[(species.flags & NO_PAIN) ? "" : emote_scream ]drops what they were holding in their [E.name]!") else if(E.is_malfunctioning()) @@ -130,7 +130,7 @@ continue unEquip(r_hand) - emote("me", 1, "drops what they were holding, their [E.name] malfunctioning!") + custom_emote(1, "drops what they were holding, their [E.name] malfunctioning!") var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread() spark_system.set_up(5, 0, src) diff --git a/code/modules/mob/living/carbon/human/life.dm b/code/modules/mob/living/carbon/human/life.dm index a1f7c39281d..d2117d84cfa 100644 --- a/code/modules/mob/living/carbon/human/life.dm +++ b/code/modules/mob/living/carbon/human/life.dm @@ -1234,9 +1234,6 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc if(see_override) //Override all see_invisible = see_override - if(ticker && ticker.mode.name == "nations") - process_nations() - if(healths) if (analgesic) healths.icon_state = "health_health_numb" @@ -1507,7 +1504,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("It hurts so much!", "You really need some painkillers..", "Dear god, the pain!") if(shock_stage >= 30) - if(shock_stage == 30) emote("me",1,"is having trouble keeping their eyes open.") + if(shock_stage == 30) custom_emote(1,"is having trouble keeping their eyes open.") eye_blurry = max(2, eye_blurry) stuttering = max(stuttering, 5) @@ -1515,7 +1512,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") if(shock_stage >=60) - if(shock_stage == 60) emote("me",1,"'s body becomes limp.") + if(shock_stage == 60) custom_emote(1,"falls limp.") if (prob(2)) src << ""+pick("The pain is excrutiating!", "Please, just end the pain!", "Your whole body is going numb!") Weaken(20) @@ -1531,7 +1528,7 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc Paralyse(5) if(shock_stage == 150) - emote("me",1,"can no longer stand, collapsing!") + custom_emote(1,"can no longer stand, collapsing!") Weaken(20) if(shock_stage >= 150) @@ -1820,34 +1817,8 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc holder.icon_state = "hudshadowlingthrall" hud_list[SPECIALROLE_HUD] = holder - - if(hud_updateflag & 1 << NATIONS_HUD) - var/image/holder = hud_list[NATIONS_HUD] - holder.icon_state = "hudblank" - - if(mind && mind.nation) - switch(mind.nation.name) - if("Atmosia") - holder.icon_state = "hudatmosia" - if("Brigston") - holder.icon_state = "hudbrigston" - if("Cargonia") - holder.icon_state = "hudcargonia" - if("People's Republic of Commandzakstan") - holder.icon_state = "hudcommand" - if("Medistan") - holder.icon_state = "hudmedistan" - if("Scientopia") - holder.icon_state = "hudscientopia" - - hud_list[NATIONS_HUD] = holder hud_updateflag = 0 -/mob/living/carbon/human/proc/process_nations() - var/client/C = client - for(var/mob/living/carbon/human/H in view(src, 14)) - C.images += H.hud_list[NATIONS_HUD] - /mob/living/carbon/human/handle_silent() if(..()) speech_problem_flag = 1 @@ -1882,4 +1853,4 @@ var/global/list/brutefireloss_overlays = list("1" = image("icon" = 'icons/mob/sc // Need this in species. //#undef HUMAN_MAX_OXYLOSS -//#undef HUMAN_CRIT_MAX_OXYLOSS +//#undef HUMAN_CRIT_MAX_OXYLOSS \ No newline at end of file diff --git a/code/modules/mob/living/carbon/metroid/metroid.dm b/code/modules/mob/living/carbon/metroid/metroid.dm index 3806584a0d6..eb6c98be037 100644 --- a/code/modules/mob/living/carbon/metroid/metroid.dm +++ b/code/modules/mob/living/carbon/metroid/metroid.dm @@ -252,7 +252,7 @@ /mob/living/carbon/slime/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0160049cbc6..ae308c560b2 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -183,7 +183,6 @@ var/list/ai_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") ai_list += src ..() @@ -596,7 +595,7 @@ var/list/ai_verbs_default = list( /mob/living/silicon/ai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 8c79ef206a9..c52db6883b0 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -207,7 +207,7 @@ /mob/living/silicon/pai/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) @@ -445,7 +445,7 @@ "You apply some [W] at [src.name]'s damaged areas.") else user << "All [src.name]'s systems are nominal." - + return else if(W.force) visible_message("[user.name] attacks [src] with [W]!") diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1fd0280cf1e..579bcec93d4 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -149,7 +149,6 @@ var/list/robot_verbs_default = list( hud_list[IMPCHEM_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[IMPTRACK_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") - hud_list[NATIONS_HUD] = image('icons/mob/hud.dmi', src, "hudblank") scanner.Grant(src) /mob/living/silicon/robot/proc/init(var/alien=0) @@ -910,7 +909,7 @@ var/list/robot_verbs_default = list( /mob/living/silicon/robot/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/simple_animal/constructs.dm b/code/modules/mob/living/simple_animal/constructs.dm index 3b6e7320717..875d6cfcf95 100644 --- a/code/modules/mob/living/simple_animal/constructs.dm +++ b/code/modules/mob/living/simple_animal/constructs.dm @@ -64,10 +64,10 @@ /mob/living/simple_animal/construct/attack_animal(mob/living/simple_animal/M as mob) if(istype(M, /mob/living/simple_animal/construct/builder)) health += 5 - M.emote("mends some of \the [src]'s wounds.") + M.custom_emote(1,"mends some of \the [src]'s wounds.") else if(M.melee_damage_upper <= 0) - M.emote("[M.friendly] \the [src]") + M.custom_emote(1, "[M.friendly] \the [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index b13714ae552..44735915da3 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -39,7 +39,7 @@ if(!stat && !resting && !buckled) for(var/mob/living/simple_animal/mouse/M in view(1,src)) if(!M.stat && Adjacent(M)) - emote("me", 1, "splats \the [M]!") + custom_emote(1, "splats \the [M]!") M.splat() movement_target = null stop_automated_movement = 0 diff --git a/code/modules/mob/living/simple_animal/friendly/corgi.dm b/code/modules/mob/living/simple_animal/friendly/corgi.dm index b7e705e2079..c6bed1b1c26 100644 --- a/code/modules/mob/living/simple_animal/friendly/corgi.dm +++ b/code/modules/mob/living/simple_animal/friendly/corgi.dm @@ -94,7 +94,7 @@ user << "[src] is wearing too much armor! You can't reach \his skin." visible_message("[user] gently taps [src] with [O].") if(health>0 && prob(15)) - emote("me", 1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") + custom_emote(1, "looks at [user] with [pick("an amused","an annoyed","a confused","a resentful", "a happy", "an excited")] expression.") return if (istype(O, /obj/item/weapon/razor)) @@ -464,10 +464,10 @@ movement_target.attack_animal(src) else if(ishuman(movement_target.loc) ) if(prob(20)) - emote("me", 1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") + custom_emote(1, "stares at [movement_target.loc]'s [movement_target] with a sad puppy-face") if(prob(1)) - emote("me", 1, pick("dances around.","chases its tail!")) + custom_emote(1, pick("dances around.","chases its tail!")) spawn(0) if (ckey == null) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) @@ -594,7 +594,7 @@ if(!stat && !resting && !buckled) if(prob(1)) if (ckey == null) - emote("me", 1, pick("dances around.","chases her tail.")) + custom_emote(1, pick("dances around.","chases her tail.")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i @@ -612,10 +612,10 @@ if(change > 0) if(M && stat != DEAD) // Added check to see if this mob (the corgi) is dead to fix issue 2454 flick_overlay(image('icons/mob/animal.dmi',src,"heart-ani2",MOB_LAYER+1), list(M.client), 20) - emote("me", 1, "yaps happily!") + custom_emote(1, "yaps happily!") else if(M && stat != DEAD) // Same check here, even though emote checks it as well (poor form to check it only in the help case) - emote("me", 1, "growls!") + custom_emote(1, "growls!") /mob/living/simple_animal/pet/corgi/Ian/borgi name = "E-N" diff --git a/code/modules/mob/living/simple_animal/friendly/pug.dm b/code/modules/mob/living/simple_animal/friendly/pug.dm index 224d46dd8f7..a819602719a 100644 --- a/code/modules/mob/living/simple_animal/friendly/pug.dm +++ b/code/modules/mob/living/simple_animal/friendly/pug.dm @@ -24,7 +24,7 @@ if(!stat && !resting && !buckled) if(prob(1)) - emote("me", 1, pick("chases its tail.")) + custom_emote(1, pick("chases its tail.")) spawn(0) for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2)) dir = i diff --git a/code/modules/mob/living/simple_animal/hostile/bat.dm b/code/modules/mob/living/simple_animal/hostile/bat.dm index a2b56219f56..0c2174d131e 100644 --- a/code/modules/mob/living/simple_animal/hostile/bat.dm +++ b/code/modules/mob/living/simple_animal/hostile/bat.dm @@ -50,13 +50,13 @@ /mob/living/simple_animal/hostile/scarybat/FindTarget() . = ..() if(.) - emote("flutters towards [.]") + custom_emote(1, "flutters towards [.]") /mob/living/simple_animal/hostile/scarybat/Found(var/atom/A)//This is here as a potential override to pick a specific target if available if(istype(A) && A == owner) return 0 return ..() - + /mob/living/simple_animal/hostile/scarybat/CanAttack(var/atom/the_target)//This is here as a potential override to pick a specific target if available if(istype(the_target) && the_target == owner) return 0 diff --git a/code/modules/mob/living/simple_animal/hostile/bear.dm b/code/modules/mob/living/simple_animal/hostile/bear.dm index 514d2d313bd..05b8740e671 100644 --- a/code/modules/mob/living/simple_animal/hostile/bear.dm +++ b/code/modules/mob/living/simple_animal/hostile/bear.dm @@ -86,7 +86,7 @@ if(stance_step in list(1,4,7)) //every 3 ticks var/action = pick( list( "growls at [target]", "stares angrily at [target]", "prepares to attack [target]", "closely watches [target]" ) ) if(action) - emote(action) + custom_emote(1, action) if(!found_mob) stance_step-- @@ -97,7 +97,7 @@ if(HOSTILE_STANCE_ATTACKING) if(stance_step >= 20) //attacks for 20 ticks, then it gets tired and needs to rest - emote( "is worn out and needs to rest" ) + custom_emote(1, "is worn out and needs to rest" ) stance = HOSTILE_STANCE_TIRED stance_step = 0 walk(src, 0) //This stops the bear's walking @@ -125,14 +125,14 @@ /mob/living/simple_animal/hostile/bear/FindTarget() . = ..() if(.) - emote("stares alertly at [.]") + custom_emote(1, "stares alertly at [.]") stance = HOSTILE_STANCE_ALERT /mob/living/simple_animal/hostile/bear/LoseTarget() ..(5) /mob/living/simple_animal/hostile/bear/AttackingTarget() - emote( pick( list("slashes at [target]", "bites [target]") ) ) + custom_emote(1, pick( list("slashes at [target]", "bites [target]") ) ) var/damage = rand(20,30) diff --git a/code/modules/mob/living/simple_animal/hostile/carp.dm b/code/modules/mob/living/simple_animal/hostile/carp.dm index 93b90107133..5c8c80d5bde 100644 --- a/code/modules/mob/living/simple_animal/hostile/carp.dm +++ b/code/modules/mob/living/simple_animal/hostile/carp.dm @@ -48,7 +48,7 @@ /mob/living/simple_animal/hostile/carp/FindTarget() . = ..() if(.) - emote("me", 1, "gnashes at [.]!") + custom_emote(1, "gnashes at [.]!") /mob/living/simple_animal/hostile/carp/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/faithless.dm b/code/modules/mob/living/simple_animal/hostile/faithless.dm index 06988408c83..bbcacd234fe 100644 --- a/code/modules/mob/living/simple_animal/hostile/faithless.dm +++ b/code/modules/mob/living/simple_animal/hostile/faithless.dm @@ -39,7 +39,7 @@ /mob/living/simple_animal/hostile/faithless/FindTarget() . = ..() if(.) - emote("me", 1, "wails at [.]!") + custom_emote(1, "wails at [.]!") /mob/living/simple_animal/hostile/faithless/AttackingTarget() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/mimic.dm b/code/modules/mob/living/simple_animal/hostile/mimic.dm index dd42262bdcd..6246b286841 100644 --- a/code/modules/mob/living/simple_animal/hostile/mimic.dm +++ b/code/modules/mob/living/simple_animal/hostile/mimic.dm @@ -41,7 +41,7 @@ /mob/living/simple_animal/hostile/mimic/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/mimic/Die() ..() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm index c3e4ed577f9..37f675f532e 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/drone.dm @@ -161,7 +161,7 @@ ..() qdel(src) -/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() +/mob/living/simple_animal/hostile/retaliate/malf_drone/Destroy() //Seriously, what the actual hell. //some random debris left behind if(has_loot) var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm index 01178af83f2..93d510de9ff 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/undead.dm @@ -59,7 +59,7 @@ /mob/living/simple_animal/hostile/retaliate/ghost/FindTarget() . = ..() if(.) - emote("wails at [.]") + custom_emote(1, "wails at [.]") /mob/living/simple_animal/hostile/retaliate/ghost/Life() if(target) diff --git a/code/modules/mob/living/simple_animal/hostile/tree.dm b/code/modules/mob/living/simple_animal/hostile/tree.dm index 2d49cbf836d..a5138f08d08 100644 --- a/code/modules/mob/living/simple_animal/hostile/tree.dm +++ b/code/modules/mob/living/simple_animal/hostile/tree.dm @@ -40,7 +40,7 @@ /mob/living/simple_animal/hostile/tree/FindTarget() . = ..() if(.) - emote("growls at [.]") + custom_emote(1, "growls at [.]") /mob/living/simple_animal/hostile/tree/AttackingTarget() . =..() diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index c3ab9221a20..84d92ee5985 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -343,7 +343,7 @@ //Search for item to steal parrot_interest = search_for_item() if(parrot_interest) - emote("looks in [parrot_interest]'s direction and takes flight") + custom_emote(1,"looks in [parrot_interest]'s direction and takes flight") parrot_state = PARROT_SWOOP | PARROT_STEAL icon_state = "parrot_fly" return @@ -365,7 +365,7 @@ if(AM) if(istype(AM, /obj/item) || isliving(AM)) //If stealable item parrot_interest = AM - emote("turns and flies towards [parrot_interest]") + custom_emote(1,"turns and flies towards [parrot_interest]") parrot_state = PARROT_SWOOP | PARROT_STEAL return else //Else it's a perch @@ -479,11 +479,11 @@ var/obj/item/organ/external/affecting = H.get_organ(ran_zone(pick(parrot_dam_zone))) H.apply_damage(damage, BRUTE, affecting, H.run_armor_check(affecting, "melee"), sharp=1) - emote(pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) + custom_emote(1, pick("pecks [H]'s [affecting].", "cuts [H]'s [affecting] with its talons.")) else L.adjustBruteLoss(damage) - emote(pick("pecks at [L].", "claws [L].")) + custom_emote(1, pick("pecks at [L].", "claws [L].")) return //Otherwise, fly towards the mob! diff --git a/code/modules/mob/living/simple_animal/simple_animal.dm b/code/modules/mob/living/simple_animal/simple_animal.dm index 954aaa7f77b..9ca93519fb5 100644 --- a/code/modules/mob/living/simple_animal/simple_animal.dm +++ b/code/modules/mob/living/simple_animal/simple_animal.dm @@ -154,23 +154,23 @@ else randomValue -= speak.len if(emote_see && randomValue <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) else say(pick(speak)) else if(!(emote_hear && emote_hear.len) && (emote_see && emote_see.len)) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) if((emote_hear && emote_hear.len) && !(emote_see && emote_see.len)) - emote(pick(emote_hear),2) + custom_emote(2, pick(emote_hear)) if((emote_hear && emote_hear.len) && (emote_see && emote_see.len)) var/length = emote_hear.len + emote_see.len var/pick = rand(1,length) if(pick <= emote_see.len) - emote(pick(emote_see),1) + custom_emote(1, pick(emote_see)) else - emote(pick(emote_hear),2) + custom_emote(2,pick(emote_hear)) //Atmos @@ -274,7 +274,7 @@ /mob/living/simple_animal/attack_animal(mob/living/simple_animal/M as mob) if(M.melee_damage_upper == 0) - M.emote("me", 1, "[M.friendly] [src]") + M.custom_emote(1, "[M.friendly] [src]") else M.do_attack_animation(src) if(M.attack_sound) diff --git a/code/modules/mob/login.dm b/code/modules/mob/login.dm index 5f902a9eeb4..a1478496ff7 100644 --- a/code/modules/mob/login.dm +++ b/code/modules/mob/login.dm @@ -30,7 +30,9 @@ client.images = null //remove the images such as AIs being unable to see runes client.screen = list() //remove hud items just in case - if(hud_used) qdel(hud_used) //remove the hud objects + if(hud_used) + qdel(hud_used) //remove the hud objects + hud_used = null hud_used = new /datum/hud(src) next_move = 1 diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 10157afd00a..85f5b0e167d 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -3,6 +3,7 @@ dead_mob_list -= src living_mob_list -= src qdel(hud_used) + hud_used = null if(mind && mind.current == src) spellremove(src) ghostize() diff --git a/code/modules/organs/organ.dm b/code/modules/organs/organ.dm index a93d2a278a8..e7d4fd89eba 100644 --- a/code/modules/organs/organ.dm +++ b/code/modules/organs/organ.dm @@ -323,4 +323,7 @@ var/list/organ_cache = list() if(fingerprintslast) O.fingerprintslast = fingerprintslast user.put_in_active_hand(O) - qdel(src) \ No newline at end of file + qdel(src) + +/obj/item/organ/proc/surgeryize() + return \ No newline at end of file diff --git a/code/modules/organs/organ_internal.dm b/code/modules/organs/organ_internal.dm index 5438fdd3ec3..46d7f01b0d9 100644 --- a/code/modules/organs/organ_internal.dm +++ b/code/modules/organs/organ_internal.dm @@ -33,10 +33,10 @@ if(is_bruised()) if(prob(2)) - spawn owner.emote("me", 1, "coughs up blood!") + spawn owner.custom_emote(1, "coughs up blood!") owner.drip(10) if(prob(4)) - spawn owner.emote("me", 1, "gasps for air!") + spawn owner.custom_emote(1, "gasps for air!") owner.losebreath += 5 /obj/item/organ/kidneys @@ -81,6 +81,14 @@ owner.b_eyes ? owner.b_eyes : 0 ) +/obj/item/organ/eyes/surgeryize() + if(!owner) + return + owner.disabilities &= ~NEARSIGHTED + owner.sdisabilities &= ~BLIND + owner.eye_blurry = 0 + owner.eye_blind = 0 + /obj/item/organ/liver name = "liver" icon_state = "liver" diff --git a/code/modules/power/singularity/singularity.dm b/code/modules/power/singularity/singularity.dm index c4170888d3d..338f3830766 100644 --- a/code/modules/power/singularity/singularity.dm +++ b/code/modules/power/singularity/singularity.dm @@ -45,6 +45,7 @@ /obj/singularity/Destroy() processing_objects.Remove(src) singularities -= src + target = null return ..() /obj/singularity/Move(atom/newloc, direct) diff --git a/code/modules/power/supermatter/supermatter.dm b/code/modules/power/supermatter/supermatter.dm index f9b97b7f26a..597a078b320 100644 --- a/code/modules/power/supermatter/supermatter.dm +++ b/code/modules/power/supermatter/supermatter.dm @@ -72,6 +72,7 @@ /obj/machinery/power/supermatter_shard/Destroy() investigate_log("has been destroyed.", "supermatter") qdel(radio) + radio = null return ..() /obj/machinery/power/supermatter_shard/proc/explode() @@ -233,7 +234,7 @@ /obj/machinery/power/supermatter_shard/attack_ai(mob/user as mob) ui_interact(user) - + /obj/machinery/power/supermatter_shard/attack_ghost(mob/user as mob) ui_interact(user) @@ -242,16 +243,16 @@ "You reach out and touch \the [src]. Everything starts burning and all you can hear is ringing. Your last thought is \"That was not a wise decision.\"",\ "You hear an uneartly ringing, then what sounds like a shrilling kettle as you are washed with a wave of heat.") - playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) - + playsound(get_turf(src), 'sound/effects/supermatter.ogg', 50, 1) + Consume(user) - + /obj/machinery/power/supermatter_shard/proc/get_integrity() var/integrity = damage / explosion_point integrity = round(100 - integrity * 100) integrity = integrity < 0 ? 0 : integrity return integrity - + // This is purely informational UI that may be accessed by AIs or robots /obj/machinery/power/supermatter_shard/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) var/data[0] diff --git a/code/modules/reagents/newchem/medicine.dm b/code/modules/reagents/newchem/medicine.dm index e20a8d1c491..9905345926b 100644 --- a/code/modules/reagents/newchem/medicine.dm +++ b/code/modules/reagents/newchem/medicine.dm @@ -513,16 +513,25 @@ datum/reagent/morphine/addiction_act_stage4(var/mob/living/M as mob) datum/reagent/oculine/on_mob_life(var/mob/living/M as mob) if(!M) M = holder.my_atom - M.eye_blurry = max(M.eye_blurry-5 , 0) - M.eye_blind = max(M.eye_blind-5 , 0) - if(ishuman(M)) - var/mob/living/carbon/human/H = M - var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] - if(istype(E)) - if(E.damage > 0) - E.damage -= 1 + if(prob(80)) + if(ishuman(M)) + var/mob/living/carbon/human/H = M + var/obj/item/organ/eyes/E = H.internal_organs_by_name["eyes"] + if(istype(E)) + E.damage = max(E.damage-1, 0) + M.eye_blurry = max(M.eye_blurry-1 , 0) + M.ear_damage = max(M.ear_damage-1, 0) + if(prob(50)) + M.disabilities &= ~NEARSIGHTED + if(prob(30)) + M.sdisabilities &= ~BLIND + M.eye_blind = 0 + if(M.ear_damage <= 25) + if(prob(30)) + M.ear_deaf = 0 ..() return + /datum/chemical_reaction/oculine name = "Oculine" id = "oculine" diff --git a/code/modules/reagents/newchem/other.dm b/code/modules/reagents/newchem/other.dm index 6b63bb397f2..7e1e9899993 100644 --- a/code/modules/reagents/newchem/other.dm +++ b/code/modules/reagents/newchem/other.dm @@ -290,7 +290,7 @@ datum/reagent/fartonium/on_mob_life(var/mob/living/M as mob) M << "Something isn't right!" M.adjustBruteLoss(1) if(2) - M.emote("me",1,"strains, but nothing happens.") + M.custom_emote(1,"strains, but nothing happens.") M.adjustBruteLoss(2) if(3) M.emote("scream") diff --git a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm index 02e1f4a65cd..809a8dfd34d 100644 --- a/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm +++ b/code/modules/reagents/oldchem/chemical_reaction/chemical_reaction_med.dm @@ -30,13 +30,6 @@ result_amount = 2 mix_message = "The solvent extracts an antibiotic compound from the fungus." - audioline - name = "Audioline" - id = "audioline" - result = "audioline" - required_reagents = list("spaceacillin" = 1, "salglu_solution" = 1, "epinephrine" = 1) - result_amount = 3 - rezadone name = "Rezadone" id = "rezadone" diff --git a/code/modules/reagents/oldchem/reagents/reagents_med.dm b/code/modules/reagents/oldchem/reagents/reagents_med.dm index 696fa6354a5..a9f2d48bb19 100644 --- a/code/modules/reagents/oldchem/reagents/reagents_med.dm +++ b/code/modules/reagents/oldchem/reagents/reagents_med.dm @@ -61,20 +61,6 @@ ..() return -/datum/reagent/audioline - name = "Audioline" - id = "audioline" - description = "Heals ear damage." - reagent_state = LIQUID - color = "#6600FF" // rgb: 100, 165, 255 - -/datum/reagent/audioline/on_mob_life(var/mob/living/M as mob) - if(!M) M = holder.my_atom - M.ear_damage = 0 - M.ear_deaf = 0 - ..() - return - /datum/reagent/mitocholide name = "Mitocholide" id = "mitocholide" @@ -91,7 +77,7 @@ for(var/name in H.internal_organs_by_name) var/obj/item/organ/I = H.internal_organs_by_name[name] if(I.damage > 0) - I.damage -= 0.20 + I.damage = max(I.damage-0.4, 0) ..() return diff --git a/code/modules/reagents/reagent_containers/food/snacks.dm b/code/modules/reagents/reagent_containers/food/snacks.dm index 4213eb145ce..34c2cd5de23 100644 --- a/code/modules/reagents/reagent_containers/food/snacks.dm +++ b/code/modules/reagents/reagent_containers/food/snacks.dm @@ -1652,82 +1652,40 @@ icon_state = "monkeycube" bitesize = 12 filling_color = "#ADAC7F" - var/monkey_type = "Monkey" /obj/item/weapon/reagent_containers/food/snacks/monkeycube/New() ..() reagents.add_reagent("protein",10) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O as obj, mob/user as mob, proximity) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/afterattack(obj/O, mob/user, proximity) if(!proximity) return if(istype(O,/obj/structure/sink) && !wrapped) - user << "You place [name] under a stream of water..." - if(loc == user) - user.unEquip(src) - forceMove(get_turf(src)) + user << "You place [src] under a stream of water..." + user.drop_item() + forceMove(get_turf(O)) return Expand() ..() -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/attack_self(mob/user) if(wrapped) Unwrap(user) -/* -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/On_Consume(var/mob/M) - M << "Something inside of you suddently expands!" - - - if (istype(M, /mob/living/carbon/human)) - //Do not try to understand. - var/obj/item/weapon/surprise = new/obj/item/weapon(M) - var/mob/living/carbon/monkey/ook = new monkey_type(null) //no other way to get access to the vars, alas - surprise.icon = ook.icon - surprise.icon_state = ook.icon_state - surprise.name = "malformed [ook.name]" - surprise.desc = "Looks like \a very deformed [ook.name], a little small for its kind. It shows no signs of life." - qdel(ook) //rip nullspace monkey - surprise.transform *= 0.6 - surprise.add_blood(M) - var/mob/living/carbon/human/H = M - var/obj/item/organ/external/E = H.get_organ("chest") - E.fracture() - for (var/obj/item/organ/I in E.internal_organs) - I.take_damage(rand(I.min_bruised_damage, I.min_broken_damage+1)) - - if (!E.hidden && prob(60)) //set it snuggly - E.hidden = surprise - E.cavity = 0 - else //someone is having a bad day - E.createwound(CUT, 30) - E.embed(surprise) - else if (issmall(M)) - M.visible_message("[M] suddenly tears in half!") - var/mob/living/carbon/monkey/ook = new monkey_type(M.loc) - ook.name = "malformed [ook.name]" - ook.transform *= 0.6 - ook.add_blood(M) - M.gib() - ..() -*/ - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/water_act(volume, temperature) if(volume >= 5) return Expand() /obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand() - for(var/mob/M in viewers(src,7)) - M << "\red \The [src] expands!" - var/mob/living/carbon/human/H = new (src) + visible_message("[src] expands!") + var/mob/living/carbon/human/H = new (get_turf(src)) H.set_species(monkey_type) qdel(src) -/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user as mob) +/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Unwrap(mob/user) icon_state = "monkeycube" desc = "Just add water!" - user << "You unwrap the cube." + user << "You unwrap the cube." wrapped = 0 - return /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped desc = "Still wrapped in some paper." @@ -1737,22 +1695,23 @@ /obj/item/weapon/reagent_containers/food/snacks/monkeycube/farwacube name = "farwa cube" monkey_type = "Farwa" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/farwacube name = "farwa cube" monkey_type = "Farwa" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wolpincube name = "wolpin cube" monkey_type = "Wolpin" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/wolpincube name = "wolpin cube" monkey_type = "Wolpin" - /obj/item/weapon/reagent_containers/food/snacks/monkeycube/stokcube name = "stok cube" monkey_type = "Stok" + /obj/item/weapon/reagent_containers/food/snacks/monkeycube/wrapped/stokcube name = "stok cube" monkey_type = "Stok" diff --git a/code/modules/surgery/organs_internal.dm b/code/modules/surgery/organs_internal.dm index 6fe84897c3b..6b29f969743 100644 --- a/code/modules/surgery/organs_internal.dm +++ b/code/modules/surgery/organs_internal.dm @@ -150,6 +150,8 @@ var/obj/item/organ/external/affected = target.get_organ(target_zone) for(var/obj/item/organ/I in affected.internal_organs) + if(I) + I.surgeryize() if(I && I.damage > 0) if(I.robotic < 2) user.visible_message("\blue [user] treats damage to [target]'s [I.name] with [tool_name].", \ @@ -193,7 +195,7 @@ if (!..()) return 0 - + var/obj/item/organ/external/affected = target.get_organ(target_zone) if(!(affected && !(affected.status & ORGAN_ROBOT))) @@ -310,7 +312,7 @@ if(!istype(O)) return 0 - + if((affected.status & ORGAN_ROBOT) && !(O.status & ORGAN_ROBOT)) user << "You cannot install a naked organ into a robotic body." return 2 diff --git a/code/modules/virus2/effect.dm b/code/modules/virus2/effect.dm index e73fea39d27..7b1c38e4bef 100644 --- a/code/modules/virus2/effect.dm +++ b/code/modules/virus2/effect.dm @@ -552,7 +552,7 @@ stage = 3 activate(var/mob/living/carbon/mob,var/multiplier) if(prob(30)) - mob.emote("me",1,"is sweating profusely!") + mob.custom_emote(1,"is sweating profusely!") if(istype(mob.loc,/turf/simulated)) var/turf/simulated/T = mob.loc @@ -583,7 +583,7 @@ if(pick(0,1)) mob.say(pick("Uh HUH!", "Thank you, Thank you very much...", "I ain't nothin' but a hound dog!", "Swing low, sweet chariot!")) else - mob.emote("me",1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) + mob.custom_emote(1,pick("curls his lip!", "gyrates his hips!", "thrusts his hips!")) if(istype(mob, /mob/living/carbon/human)) var/mob/living/carbon/human/H = mob if(H.species.name == "Human" && !(H.f_style == "Pompadour")) @@ -945,7 +945,7 @@ var/list/compatible_mobs = list(/mob/living/carbon/human) name = "Wheezing" stage = 1 activate(var/mob/living/carbon/mob,var/multiplier) - mob.emote("me",1,"wheezes.") + mob.custom_emote(1,"wheezes.") /datum/disease2/effect/optimistic_minor diff --git a/config/example/config.txt b/config/example/config.txt index 076a0e80766..6f5485ba6e6 100644 --- a/config/example/config.txt +++ b/config/example/config.txt @@ -86,7 +86,6 @@ PROBABILITY RAGINMAGES 0 PROBABILITY BORER 0 PROBABILITY XENOS 2 PROBABILITY MUTINY 1 -PROBABILITY NATIONS 0 PROBABILITY METEOR 0 ## Hash out to disable random events during the round. diff --git a/icons/mob/hud.dmi b/icons/mob/hud.dmi index 2a7d6de6cb6..cc0fcbf3e09 100644 Binary files a/icons/mob/hud.dmi and b/icons/mob/hud.dmi differ diff --git a/nano/css/shared.css b/nano/css/shared.css index 861fd9e165c..786b577e615 100644 --- a/nano/css/shared.css +++ b/nano/css/shared.css @@ -445,6 +445,11 @@ div.notice { white-space: nowrap; } +.pdanote { + color: #cd6500; + font-weight: bold; +} + /* DNA Modifier styling */ .dnaBlock { float: left; diff --git a/nano/js/nano_base_helpers.js b/nano/js/nano_base_helpers.js index 40c6b6077e5..28a41518010 100644 --- a/nano/js/nano_base_helpers.js +++ b/nano/js/nano_base_helpers.js @@ -102,6 +102,10 @@ NanoBaseHelpers = function () parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ","); return parts.join("."); }, + // Capitalize the first letter of a string. From http://stackoverflow.com/questions/1026069/capitalize-the-first-letter-of-string-in-javascript + capitalizeFirstLetter: function(string) { + return string.charAt(0).toUpperCase() + string.slice(1); + }, // Display a bar. Used to show health, capacity, etc. displayBar: function(value, rangeMin, rangeMax, styleClass, showText) { diff --git a/nano/templates/pda.tmpl b/nano/templates/pda.tmpl index 8b2920bb23b..753e06f299e 100644 --- a/nano/templates/pda.tmpl +++ b/nano/templates/pda.tmpl @@ -3,16 +3,90 @@ Title: PDA UI Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm --> +{{if data.useRetro}} + + + +{{/if}} {{if data.owner}}
Functions:
- - {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'fixedLeft')}} - {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'fixedLeftWide')}} {{/if}} - {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'fixedLeft')}} {{/if}} + + {{:helper.link('Close', 'gear', {'choice' : "Close"}, null, 'pdalink fixedLeft')}} + {{if data.idInserted}} {{:helper.link('Update PDA Info', 'eject', {'choice' : "UpdateInfo"}, null, 'pdalink fixedLeftWide')}} {{/if}} + {{if data.mode != 0}} {{:helper.link('Return', 'arrowreturn-1-w', {'choice' : "Return"}, null, 'pdalink fixedLeft')}} {{/if}} + {{:helper.link('Toggle R.E.T.R.O. mode', 'gear', {'choice': "Retro"}, null, 'floatRight')}}

@@ -42,7 +116,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm ID:
- {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'fixedLeftWidest' : 'fixedLeft')}} + {{:helper.link(data.idLink, 'eject', {'choice' : "Authenticate"}, data.idInserted ? null : 'disabled', data.idInserted ? 'link fixedLeftWidest' : 'link fixedLeft')}}

@@ -66,9 +140,9 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm General:
- {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'fixedLeftWide')}} - {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'fixedLeftWide')}} - {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'fixedLeftWide')}} + {{:helper.link('Notekeeper', 'note', {'choice' : "1"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Messenger', data.newMessage ? 'mail-closed' : 'mail-open', {'choice' : "2"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Crew Manifest', 'contact', {'choice' : "41"}, null, 'pdalink fixedLeftWide')}}

@@ -79,7 +153,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Clown:
- {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'fixedLeftWide')}} + {{:helper.link('Honk Synthesizer', 'gear', {'choice' : "Honk"}, null, 'pdalink fixedLeftWide')}}

@@ -90,7 +164,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Engineering:
- {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'fixedLeftWide')}} + {{:helper.link('Power Monitor', 'alert', {'choice' : "43"}, null, 'pdalink fixedLeftWide')}}

@@ -101,8 +175,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Medical:
- {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'fixedLeftWide')}} - {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'fixedLeftWide')}} + {{:helper.link('Medical Records', 'gear', {'choice' : "44"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.scanmode == 1 ? 'Disable Med Scanner' : 'Enable Med Scanner', 'gear', {'choice' : "Medical Scan"}, null , 'pdalink fixedLeftWide')}}

@@ -113,8 +187,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Security:
- {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'fixedLeftWide')}} - {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'fixedLeftWide')}} {{/if}} + {{:helper.link('Security Records', 'gear', {'choice' : "45"}, null, 'pdalink fixedLeftWide')}} + {{if data.cartridge.radio ==1}} {{:helper.link('Security Bot Access', 'gear', {'choice' : "46"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -126,8 +200,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Quartermaster:
- {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'fixedLeftWide')}} - {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'fixedLeftWide')}} {{/if}} + {{:helper.link('Supply Records', 'gear', {'choice' : "47"}, null, 'pdalink fixedLeftWide')}} + {{if data.cartridge.radio == 3}} {{:helper.link('Delivery Bot Control', 'gear', {'choice' : "48"}, null, 'pdalink fixedLeftWide')}} {{/if}}
@@ -142,29 +216,29 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.cartridge}} {{if data.cartridge.access.access_status_display == 1}} - {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'fixedLeftWide')}} + {{:helper.link('Status Display', 'gear', {'choice' : "42"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_janitor==1}} - {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'fixedLeftWide')}} + {{:helper.link('Custodial Locator', 'gear', {'choice' : "49"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.radio == 2}} - {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'fixedLeftWide')}} + {{:helper.link('Signaler System', 'gear', {'choice' : "40"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_reagent_scanner==1}} - {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'fixedLeftWider')}} + {{:helper.link(data.scanmode == 3 ? 'Disable Reagent Scanner' : 'Enable Reagent Scanner', 'gear', {'choice' : "Reagent Scan"}, null, 'pdalink fixedLeftWider')}} {{/if}} {{if data.cartridge.access.access_engine==1}} - {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'fixedLeftWider')}} + {{:helper.link(data.scanmode == 4 ? 'Disable Halogen Counter' : 'Enable Halogen Counter', 'gear', {'choice' : "Halogen Counter"}, null, 'pdalink fixedLeftWider')}} {{/if}} {{if data.cartridge.access.access_atmos==1}} - {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'fixedLeftWide')}} + {{:helper.link(data.scanmode == 5 ? 'Disable Gas Scanner' : 'Enable Gas Scanner', 'gear', {'choice' : "Gas Scan"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{if data.cartridge.access.access_remote_door==1}} - {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'fixedLeftWide')}} + {{:helper.link('Toggle Door', 'gear', {'choice' : "Toggle Door"}, null, 'pdalink fixedLeftWide')}} {{/if}} {{/if}} - {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'fixedLeftWide')}} - {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'fixedLeftWide')}} + {{:helper.link('Atmospheric Scan', 'gear', {'choice' : "3"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.fon==1 ? 'Disable Flashlight' : 'Enable Flashlight', 'lightbulb', {'choice' : "Light"}, null,'pdalink fixedLeftWide')}}
{{if data.pai}} @@ -173,8 +247,8 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm PAI Utilities:
- {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'fixedLeft')}} - {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'fixedLeft')}} + {{:helper.link('Configuration', 'gear', {'choice' : "pai", 'option' : "1"}, null, 'pdalink fixedLeft')}} + {{:helper.link('Eject pAI', 'eject', {'choice' : "pai", 'option' : "2"}, null, 'pdalink fixedLeft')}}
{{/if}} @@ -189,13 +263,13 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
- {{:data.note}} + {{:data.note}}
- {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'fixedLeft')}} + {{:helper.link('Edit Notes', 'gear', {'choice' : "Edit"}, null, 'pdalink fixedLeft')}}
@@ -207,10 +281,10 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Messenger Functions:
- {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'fixedLeftWide')}} - {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'fixedLeftWide')}} - {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'fixedLeftWide')}} - {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'fixedLeftWider')}} + {{:helper.link(data.silent==1 ? 'Ringer: Off' : 'Ringer: On', data.silent==1 ? 'volume-off' : 'volume-on', {'choice' : "Toggle Ringer"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link(data.toff==1 ? 'Messenger: Off' : 'Messenger: On',data.toff==1 ? 'close':'check', {'choice' : "Toggle Messenger"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Set Ringtone', 'comment', {'choice' : "Ringtone"}, null, 'pdalink fixedLeftWide')}} + {{:helper.link('Delete all Conversations', 'trash', {'choice' : "Clear", 'option' : "All"}, null, 'pdalink fixedLeftWider')}}
{{if data.toff == 0}} @@ -233,16 +307,16 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm

Current Conversations

{{for data.convopdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, value.fixedLeftWider)}} + {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Select Conversation", 'convo' : value.Reference } , null, 'pdalink fixedLeftWider')}} {{if data.cartridge}} {{if data.cartridge.access.access_detonate_pda && value.Detonate}} - {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{if data.cartridge.access.access_clown}} - {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{if data.cartridge.access.access_mime}} - {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} + {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{/if}}
@@ -250,11 +324,11 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm

Other PDAs

{{for data.pdas}}
- {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, value.fixedLeftWider)}} + {{:helper.link(value.Name, 'circle-arrow-s', {'choice' : "Message", 'target' : value.Reference}, null, 'pdalink fixedLeftWider')}} {{if data.cartridge}} - {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} - {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_detonate_pda && value.Detonate}} {{:helper.link('*Detonate*', 'radiation', {'choice' : "Detonate", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_clown}} {{:helper.link('*Send Virus*', 'star', {'choice' : "Send Honk", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} + {{if data.cartridge.access.access_mime}} {{:helper.link('*Send Virus*', 'circle-arrow-s', {'choice' : "Send Silence", 'target' : value.Reference}, null, 'pdalink fixedLeft')}} {{/if}} {{/if}}
{{/for}} @@ -269,7 +343,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm Messenger Functions:
- {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'fixedLeftWide')}} + {{:helper.link('Delete Conversation', 'trash', {'choice' : "Clear", 'option' : "Convo"}, null, 'pdalink fixedLeftWide')}}

@@ -290,7 +364,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm - {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'fixedLeft')}} + {{:helper.link('Reply', 'comment', {'choice' : "Message", 'target': data.active_conversation}, null, 'pdalink fixedLeft')}} {{else data.mode== 41}} @@ -382,38 +456,38 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.reading == 1}}
- Pressure: + Pressure:
{{:helper.string('{1} kPa', data.aircontents.pressure < 80 || data.aircontents.pressure > 120 ? 'bad' : data.aircontents.pressure < 95 || data.aircontents.pressure > 110 ? 'average' : 'good' , data.aircontents.pressure)}}
- Temperature: + Temperature:
{{:helper.string('{1} °C', data.aircontents.temp < 5 || data.aircontents.temp > 35 ? 'bad' : data.aircontents.temp < 15 || data.aircontents.temp > 25 ? 'average' : 'good' , data.aircontents.temp)}}

- Oxygen: + Oxygen:
{{:helper.string('{1}%', data.aircontents.oxygen < 17 ? 'bad' : data.aircontents.oxygen < 19 ? 'average' : 'good' , data.aircontents.oxygen)}}
- Nitrogen: + Nitrogen:
{{:helper.string('{1}%', data.aircontents.nitrogen > 82 ? 'bad' : data.aircontents.nitrogen > 80 ? 'average' : 'good' , data.aircontents.nitrogen)}}
- Carbon Dioxide: + Carbon Dioxide:
{{:helper.string('{1}%', data.aircontents.carbon_dioxide > 5 ? 'bad' : 'good' , data.aircontents.carbon_dioxide)}}
- Plasma: + Plasma:
{{:helper.string('{1}%', data.aircontents.plasma > 0 ? 'bad' : 'good' , data.aircontents.plasma)}} @@ -421,7 +495,7 @@ Used In File(s): \code\game\objects\items\devices\PDA\PDA.dm
{{if data.aircontents.other > 0}}
- Unknown: + Unknown:
{{:data.aircontents.other}}% diff --git a/nano/templates/poolcontroller.tmpl b/nano/templates/poolcontroller.tmpl index 246542107a2..7f24546e4b2 100644 --- a/nano/templates/poolcontroller.tmpl +++ b/nano/templates/poolcontroller.tmpl @@ -7,39 +7,49 @@ Used In File(s): \code\game\machinery\poolcontroller.dm Current Temperature:
- {{:data.currentTemp}} + {{:helper.capitalizeFirstLetter(data.currentTemp)}}
+
+
+ Saftey Status: +
{{if data.emagged}} - WARNING: SAFE MODE OVERRIDE + WARNING: OVERRIDDEN {{else}} - Safeties Nominal + Nominal {{/if}}
+
Temperature Selection:
+ {{if data.emagged}}
- {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' })}} + {{:helper.link('Scalding', 'circle-arrow-n', { 'temp' : 'Scalding' }, data.currentTemp == "scalding" ? 'selected' : null)}}
{{/if}} +
- {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' })}} + {{:helper.link('Warm', 'circle-arrow-n', { 'temp' : 'Warm' }, data.currentTemp == "warm" ? 'selected' : null)}}
+
- {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' })}} + {{:helper.link('Normal', 'circle-arrow-e', { 'temp' : 'Normal' }, data.currentTemp == "normal" ? 'selected' : null)}}
+
- {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' })}} + {{:helper.link('Cool', 'circle-arrow-s', { 'temp' : 'Cool' }, data.currentTemp == "cool" ? 'selected' : null)}}
+ {{if data.emagged}}
- {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' })}} + {{:helper.link('Frigid', 'circle-arrow-s', { 'temp' : 'Frigid' }, data.currentTemp == "frigid" ? 'selected' : null)}}
{{/if}}
\ No newline at end of file diff --git a/paradise.dme b/paradise.dme index c0f00167daf..0a92f9542fc 100644 --- a/paradise.dme +++ b/paradise.dme @@ -351,10 +351,6 @@ #include "code\game\gamemodes\mutiny\directives\tau_ceti_needs_women_directive.dm" #include "code\game\gamemodes\mutiny\directives\terminations_directive.dm" #include "code\game\gamemodes\mutiny\directives\vox_heist.dm" -#include "code\game\gamemodes\nations\flag_pinpointer.dm" -#include "code\game\gamemodes\nations\flagprocs.dm" -#include "code\game\gamemodes\nations\nationdatums.dm" -#include "code\game\gamemodes\nations\nations.dm" #include "code\game\gamemodes\nuclear\nuclear.dm" #include "code\game\gamemodes\nuclear\nuclearbomb.dm" #include "code\game\gamemodes\nuclear\pinpointer.dm"
Blob