diff --git a/_maps/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm b/_maps/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm new file mode 100644 index 00000000000..4426c66cab8 --- /dev/null +++ b/_maps/RandomRuins/LavaRuins/lavaland_surface_hierophant.dmm @@ -0,0 +1,64 @@ +"a" = (/turf/closed/indestructible/riveted/hierophant,/area/ruin/unpowered/hierophant) +"b" = (/obj/effect/decal/cleanable/blood/tracks,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"c" = (/obj/effect/decal/cleanable/cobweb,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"d" = (/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"e" = (/obj/effect/gibspawner/human,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"f" = (/obj/effect/decal/cleanable/blood/gibs/limb,/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"g" = (/obj/effect/light_emitter{set_cap = 3; set_luminosity = 7},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"h" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)"; icon_state = "tracks"; dir = 4},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"i" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (EAST)"; icon_state = "tracks"; dir = 4},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"j" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"k" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"l" = (/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"m" = (/obj/effect/gibspawner/generic,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"n" = (/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"o" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHEAST)"; icon_state = "tracks"; dir = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"p" = (/obj/effect/light_emitter,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"q" = (/obj/effect/decal/cleanable/blood/old,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"r" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHWEST)"; icon_state = "tracks"; dir = 9},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"s" = (/obj/effect/decal/cleanable/blood/gibs/limb,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"t" = (/obj/effect/decal/cleanable/ash,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"u" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"v" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHEAST)"; icon_state = "tracks"; dir = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"w" = (/obj/effect/gibspawner/human,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHEAST)"; icon_state = "tracks"; dir = 6},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"x" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"y" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/obj/effect/light_emitter{set_cap = 3; set_luminosity = 7},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"z" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (NORTHWEST)"; icon_state = "tracks"; dir = 9},/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"A" = (/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHEAST)"; icon_state = "tracks"; dir = 6},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"B" = (/mob/living/simple_animal/hostile/megafauna/hierophant,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"C" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (WEST)"; icon_state = "tracks"; dir = 8},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"D" = (/obj/effect/decal/remains/human,/obj/effect/decal/cleanable/blood,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"E" = (/obj/effect/decal/cleanable/blood/gibs/up,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"F" = (/obj/effect/decal/cleanable/blood/old,/obj/effect/decal/remains/human,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"G" = (/obj/effect/decal/cleanable/blood/gibs/core,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"H" = (/obj/effect/decal/cleanable/blood,/obj/effect/decal/cleanable/blood/tracks{tag = "icon-tracks (SOUTHWEST)"; icon_state = "tracks"; dir = 10},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"I" = (/obj/effect/gibspawner/human,/obj/effect/light_emitter{set_cap = 3; set_luminosity = 5},/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) +"J" = (/obj/effect/decal/cleanable/blood/gibs/down,/turf/open/indestructible/hierophant,/area/ruin/unpowered/hierophant) + +(1,1,1) = {" +aaaaaaaaaaaabaaaaaaaaaaaa +acdddddddddddddddddddddda +adeddfddddddgdddhhhdiddda +addjddddddddkhhddddddldda +adddadddaaaaaaaaadddaddda +addddmhdhddddddddddmddnda +adddddgdddddddddddgddodda +addddddddkdopddfdddbdddda +adqdadddddadddaddddbaddda +adddadddddrdddddddddaddda +adstadddadudhhdvadhwabdda +adddadrxxmddddduddddaddda +xxyoazApddddBddddpddadyxC +addbabddddddddtdddddaddda +addbabddadDdEdddadddafdda +adddabddddddndddddqdaddda +adddabddddadddadddddadnda +adqedbddsdddpddddddddddda +addddAgddddeddddddgFdddGa +addddmdddddHdehddxdedddda +adddadddaaaaaaaaadddaddda +addlddddddddrdddddAddIdda +adddddJdddddgdddqddddddda +adnddddddFddbdddddddnddda +aaaaaaaaaaaabaaaaaaaaaaaa +"} diff --git a/_maps/map_files/MetaStation/MetaStation.dmm b/_maps/map_files/MetaStation/MetaStation.dmm index 68ee5f769bb..7a3ff07df5f 100644 --- a/_maps/map_files/MetaStation/MetaStation.dmm +++ b/_maps/map_files/MetaStation/MetaStation.dmm @@ -35087,6 +35087,7 @@ d2 = 8; icon_state = "4-8" }, +/obj/machinery/portable_atmospherics/canister/water_vapor, /mob/living/simple_animal/hostile/lizard{ name = "Wags-His-Tail"; real_name = "Wags-His-Tail" diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 602803562ed..e5297a88e7f 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -7375,13 +7375,9 @@ /turf/closed/wall/mineral/titanium/overspace, /area/shuttle/pod_1) "apG" = ( -/turf/open/space, -/turf/closed/wall/shuttle{ - dir = 2; - icon_state = "swall_f10"; - layer = 2 - }, -/area/shuttle/pod_1) +/obj/machinery/portable_atmospherics/canister/water_vapor, +/turf/open/floor/plasteel, +/area/janitor) "apH" = ( /obj/structure/grille, /obj/structure/window/shuttle, @@ -91946,7 +91942,7 @@ aLY aLY bBx bCv -bDL +apG bFk bDs bCv diff --git a/code/__DEFINES/admin.dm b/code/__DEFINES/admin.dm index 50f83c2d947..a50bf74d557 100644 --- a/code/__DEFINES/admin.dm +++ b/code/__DEFINES/admin.dm @@ -51,6 +51,6 @@ #define ADMIN_LOOKUPFLW(user) "[key_name_admin(user)][ADMIN_QUE(user)] [ADMIN_FLW(user)]" #define ADMIN_SET_SD_CODE "(SETCODE)" #define ADMIN_FULLMONTY(user) "[key_name_admin(user)] [ADMIN_QUE(user)] [ADMIN_PP(user)] [ADMIN_VV(user)] [ADMIN_SM(user)] [ADMIN_FLW(user)] [ADMIN_TP(user)]" -#define ADMIN_JMP(src) "(JMP)" +#define ADMIN_JMP(src) "(JMP)" #define COORD(src) "[src ? "([src.x],[src.y],[src.z])" : "nonexistent location"]" #define ADMIN_COORDJMP(src) "[src ? "[COORD(src)] [ADMIN_JMP(src)]" : "nonexistent location"]" diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index f7fb200c757..5f74640f7e7 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -498,6 +498,7 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE #define COLOSSUS_SCORE "Colossus Killed" #define BUBBLEGUM_SCORE "Bubblegum Killed" #define DRAKE_SCORE "Drakes Killed" +#define BIRD_SCORE "Hierophants Killed" #define BOSS_SCORE "Bosses Killed" #define TENDRIL_CLEAR_SCORE "Tendrils Killed" @@ -527,4 +528,4 @@ var/global/list/ghost_others_options = list(GHOST_OTHERS_SIMPLE, GHOST_OTHERS_DE // Caps for NTNet logging. Less than 10 would make logging useless anyway, more than 500 may make the log browser too laggy. Defaults to 100 unless user changes it. #define MAX_NTNET_LOGS 300 -#define MIN_NTNET_LOGS 10 \ No newline at end of file +#define MIN_NTNET_LOGS 10 diff --git a/code/_onclick/telekinesis.dm b/code/_onclick/telekinesis.dm index 9c783dc19ef..cf28bb9fa7b 100644 --- a/code/_onclick/telekinesis.dm +++ b/code/_onclick/telekinesis.dm @@ -121,15 +121,16 @@ var/const/tk_maxrange = 15 focus_object(target, user) return - if(focus.anchored) + if(focus.anchored || !isturf(focus.loc)) qdel(src) + return if(target == focus) target.attack_self_tk(user) return // todo: something like attack_self not laden with assumptions inherent to attack_self - if(!istype(target, /turf) && istype(focus,/obj/item) && target.Adjacent(focus)) + if(!isturf(target) && istype(focus,/obj/item) && target.Adjacent(focus)) var/obj/item/I = focus var/resolved = target.attackby(I, user, params) if(!resolved && target && I) @@ -139,7 +140,6 @@ var/const/tk_maxrange = 15 focus.throw_at(target, 10, 1,user) last_throw = world.time user.changeNext_move(CLICK_CD_MELEE) - return /proc/tkMaxRangeCheck(mob/user, atom/target, atom/focus) var/d = get_dist(user, target) @@ -155,7 +155,7 @@ var/const/tk_maxrange = 15 /obj/item/tk_grab/proc/focus_object(obj/target, mob/living/user) - if(!istype(target,/obj)) + if(!isobj(target)) return//Cant throw non objects atm might let it do mobs later if(target.anchored || !isturf(target.loc)) qdel(src) diff --git a/code/controllers/subsystem/voting.dm b/code/controllers/subsystem/voting.dm index 164de5d5521..d939e23fba0 100644 --- a/code/controllers/subsystem/voting.dm +++ b/code/controllers/subsystem/voting.dm @@ -58,15 +58,20 @@ var/datum/subsystem/vote/SSvote greatest_votes = votes //default-vote for everyone who didn't vote if(!config.vote_no_default && choices.len) - var/non_voters = (clients.len - total_votes) - if(non_voters > 0) + var/list/non_voters = directory.Copy() + non_voters -= voted + for (var/non_voter_ckey in non_voters) + var/client/C = non_voters[non_voter_ckey] + if (!C || C.is_afk()) + non_voters -= non_voter_ckey + if(non_voters.len > 0) if(mode == "restart") - choices["Continue Playing"] += non_voters + choices["Continue Playing"] += non_voters.len if(choices["Continue Playing"] >= greatest_votes) greatest_votes = choices["Continue Playing"] else if(mode == "gamemode") if(master_mode in choices) - choices[master_mode] += non_voters + choices[master_mode] += non_voters.len if(choices[master_mode] >= greatest_votes) greatest_votes = choices[master_mode] //get all options with that many votes and return them in a list diff --git a/code/datums/action.dm b/code/datums/action.dm index 775e08f8e49..ed4f2416701 100644 --- a/code/datums/action.dm +++ b/code/datums/action.dm @@ -189,6 +189,40 @@ /datum/action/item_action/toggle_helmet_light name = "Toggle Helmet Light" +/datum/action/item_action/toggle_unfriendly_fire + name = "Toggle Friendly Fire \[ON\]" + desc = "Toggles if the staff causes friendly fire." + button_icon_state = "vortex_ff_on" + +/datum/action/item_action/toggle_unfriendly_fire/Trigger() + if(..()) + UpdateButtonIcon() + +/datum/action/item_action/toggle_unfriendly_fire/UpdateButtonIcon() + if(istype(target, /obj/item/weapon/hierophant_staff)) + var/obj/item/weapon/hierophant_staff/H = target + if(H.friendly_fire_check) + button_icon_state = "vortex_ff_off" + name = "Toggle Friendly Fire \[OFF\]" + button.name = name + else + button_icon_state = "vortex_ff_on" + name = "Toggle Friendly Fire \[ON\]" + button.name = name + ..() + +/datum/action/item_action/vortex_recall + name = "Vortex Recall" + desc = "Recall yourself, and anyone nearby, to an attuned hierophant rune at any time.
If no such rune exists, will produce a rune at your location." + button_icon_state = "vortex_recall" + +/datum/action/item_action/vortex_recall/IsAvailable() + if(istype(target, /obj/item/weapon/hierophant_staff)) + var/obj/item/weapon/hierophant_staff/H = target + if(H.teleporting) + return 0 + return ..() + /datum/action/item_action/clock background_icon_state = "bg_clock" buttontooltipstyle = "clockcult" diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm index f8f46c007d7..10b1886e89e 100644 --- a/code/datums/datumvars.dm +++ b/code/datums/datumvars.dm @@ -4,10 +4,15 @@ var/global/list/internal_byond_list_vars = list("contents" = TRUE, "verbs" = TRU /datum var/var_edited = 0 //Warrenty void if seal is broken + var/datum/reagents/reagents = null + var/fingerprintslast = null /datum/proc/on_varedit(modified_var) //called whenever a var is edited var_edited = 1 +/datum/proc/on_reagent_change() + return + /client/proc/debug_variables(datum/D in world) set category = "Debug" set name = "View Variables" @@ -397,6 +402,7 @@ body html += "[html_encode(name)] = /list ([L.len])" if (L.len > 0 && !(name == "underlays" || name == "overlays" || name == "vars" || L.len > 500)) + name = "[name]" //Needs to be a string or it will go out of bounds in the internal_byond_list_vars array html += "