diff --git a/_maps/splurt_maps/templates/hilbertshotel.dmm b/_maps/splurt_maps/templates/hilbertshotel.dmm index 22de1e748b..ecb4d2d646 100644 --- a/_maps/splurt_maps/templates/hilbertshotel.dmm +++ b/_maps/splurt_maps/templates/hilbertshotel.dmm @@ -7,7 +7,7 @@ /turf/open/indestructible/hoteltile, /area/hilbertshotel) "br" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel{ dir = 4 }, /turf/open/floor/carpet, @@ -69,7 +69,7 @@ /area/hilbertshotel) "fv" = ( /obj/structure/lattice, -/obj/machinery/atmospherics/components/unary/outlet_injector/on/layer3, +/obj/machinery/atmospherics/components/unary/outlet_injector/hilbertshotel/layer3, /turf/open/space/bluespace, /area/hilbertshotel) "fF" = ( @@ -85,7 +85,7 @@ /turf/closed/indestructible/hotelwall, /area/hilbertshotel) "hk" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/layer3{ dir = 8 }, /turf/open/floor/carpet, @@ -160,7 +160,7 @@ /turf/closed/indestructible/hotelwall, /area/hilbertshotel) "nK" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel{ dir = 4 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ @@ -260,7 +260,7 @@ /turf/open/floor/plasteel/cafeteria, /area/hilbertshotel) "zr" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/layer3{ dir = 4 }, /turf/open/indestructible/hotelwood, @@ -455,7 +455,7 @@ /turf/open/indestructible/hotelwood, /area/hilbertshotel) "RP" = ( -/obj/machinery/atmospherics/components/unary/vent_scrubber/on/layer3{ +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/layer3{ dir = 1 }, /turf/open/indestructible/hoteltile, @@ -504,7 +504,7 @@ /turf/open/indestructible/hoteltile, /area/hilbertshotel) "Yl" = ( -/obj/machinery/atmospherics/components/unary/vent_pump/on{ +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel{ dir = 1 }, /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ diff --git a/auxmos b/auxmos index d4e49afbc4..531c270128 160000 --- a/auxmos +++ b/auxmos @@ -1 +1 @@ -Subproject commit d4e49afbc434ebff077245ea2cbb2a2903fbb28a +Subproject commit 531c27012870aa2d536c856ea215ab4fac5a2a6d diff --git a/auxmos.dll b/auxmos.dll index 913f44e5dd..468a7dfa3d 100644 Binary files a/auxmos.dll and b/auxmos.dll differ diff --git a/auxmos.pdb b/auxmos.pdb index bb76bfc6a9..9714601a7c 100644 Binary files a/auxmos.pdb and b/auxmos.pdb differ diff --git a/code/__DEFINES/colors.dm b/code/__DEFINES/colors.dm index 664b8c0c0d..adf9660585 100644 --- a/code/__DEFINES/colors.dm +++ b/code/__DEFINES/colors.dm @@ -123,6 +123,7 @@ #define COLOR_THEME_OPERATIVE "#B8221F" #define COLOR_THEME_GLASS "#75A4C4" #define COLOR_THEME_CLOCKWORK "#CFBA47" +#define COLOR_THEME_LITEWEB "#226611" ///Colors for eigenstates #define COLOR_PERIWINKLEE "#9999FF" diff --git a/code/__HELPERS/mobs.dm b/code/__HELPERS/mobs.dm index 4252e1558b..6e5ea6f9b5 100644 --- a/code/__HELPERS/mobs.dm +++ b/code/__HELPERS/mobs.dm @@ -408,8 +408,9 @@ GLOBAL_LIST_EMPTY(species_datums) override = TRUE if(HAS_TRAIT(M, TRAIT_SIXTHSENSE)) override = TRUE - if(SSticker.current_state == GAME_STATE_FINISHED) - override = TRUE + if(CONFIG_GET(flag/reveal_everything)) + if(SSticker.current_state == GAME_STATE_FINISHED) + override = TRUE if(isnewplayer(M) && !override) continue if(M.stat != DEAD && !override) diff --git a/code/__HELPERS/roundend.dm b/code/__HELPERS/roundend.dm index c63c1e1136..ba726f39c4 100644 --- a/code/__HELPERS/roundend.dm +++ b/code/__HELPERS/roundend.dm @@ -249,8 +249,7 @@ for(var/m in GLOB.player_list) var/mob/M = m H.add_hud_to(M) - - CHECK_TICK + CHECK_TICK //Set news report and mode result mode.set_round_result() @@ -274,8 +273,7 @@ // handle_hearts() if(CONFIG_GET(flag/reveal_everything)) set_observer_default_invisibility(0, "The round is over! You are now visible to the living.") - - CHECK_TICK + CHECK_TICK //These need update to actually reflect the real antagonists //Print a list of antagonists to the server log diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 934aaae79f..05507f7728 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -268,6 +268,7 @@ GLOBAL_LIST_INIT(modular_ui_styles, list( return var/mob/screenmob = viewmob || mymob hidden_inventory_update(screenmob) + extra_inventory_update(screenmob) /datum/hud/robot/show_hud(version = 0, mob/viewmob) . = ..() diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 7646297163..0d77011185 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -9,7 +9,6 @@ /atom/movable/screen name = "" icon = 'icons/mob/screen_gen.dmi' - layer = HUD_LAYER plane = HUD_PLANE animate_movement = SLIDE_STEPS speech_span = SPAN_ROBOT @@ -144,12 +143,12 @@ /atom/movable/screen/inventory/MouseEntered(location, control, params) . = ..() - add_overlays() +// add_overlays() /atom/movable/screen/inventory/MouseExited() ..() - cut_overlay(object_overlay) - QDEL_NULL(object_overlay) +// cut_overlay(object_overlay) +// QDEL_NULL(object_overlay) /atom/movable/screen/inventory/update_icon_state() if(!icon_empty) diff --git a/code/datums/mood_events/generic_negative_events.dm b/code/datums/mood_events/generic_negative_events.dm index 90982a00ec..b85a33ec3c 100644 --- a/code/datums/mood_events/generic_negative_events.dm +++ b/code/datums/mood_events/generic_negative_events.dm @@ -294,3 +294,8 @@ description = "I hate when my shoes come untied!\n" mood_change = -3 timeout = 1 MINUTES + +/datum/mood_event/sacrifice_bad + description = "Those darn savages!\n" + mood_change = -5 + timeout = 2 MINUTES diff --git a/code/datums/mood_events/generic_positive_events.dm b/code/datums/mood_events/generic_positive_events.dm index b73756c2b1..39b3212c68 100644 --- a/code/datums/mood_events/generic_positive_events.dm +++ b/code/datums/mood_events/generic_positive_events.dm @@ -205,3 +205,8 @@ /datum/mood_event/cleared_stomach description = "Feels nice to get that out of the way!\n" mood_change = 3 + +/datum/mood_event/sacrifice_good + description = "The gods are pleased with this offering!\n" + mood_change = 5 + timeout = 3 MINUTES diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 1c6c444fb4..67ba43dc4f 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -778,6 +778,24 @@ GLOBAL_LIST_EMPTY(possible_items_special) target_amount = count update_explanation_text() */ +/datum/objective/protect_object + name = "protect object" + var/obj/protect_target + +/datum/objective/protect_object/proc/set_target(obj/O) + protect_target = O + update_explanation_text() + +/datum/objective/protect_object/update_explanation_text() + . = ..() + if(protect_target) + explanation_text = "Protect \the [protect_target] at all costs." + else + explanation_text = "Free objective." + +/datum/objective/protect_object/check_completion() + return !QDELETED(protect_target) + //Changeling Objectives /datum/objective/absorb diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 1c6c6686e8..856333139f 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -961,6 +961,8 @@ GLOBAL_VAR_INIT(embedpocalypse, FALSE) // if true, all items will be able to emb outline_color = COLOR_THEME_CLOCKWORK //if you want free gbp go fix the fact that clockwork's tooltip css is glass' if("glass") outline_color = COLOR_THEME_GLASS + if("liteweb") + outline_color = COLOR_THEME_LITEWEB else //this should never happen, hopefully outline_color = COLOR_WHITE if(color) diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 5d1ff851ef..c26c3b0e0b 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -1,5 +1,5 @@ //Objects that spawn ghosts in as a certain role when they click on it, i.e. away mission bartenders. - +#define spawnOverride TRUE //Preserved terrarium/seed vault: Spawns in seed vault structures in lavaland. Ghosts become plantpeople and are advised to begin growing plants in the room near them. /obj/effect/mob_spawn/human/seed_vault name = "preserved terrarium" @@ -36,7 +36,44 @@ //Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers. -/* MOVED TO MODULAR +/obj/structure/ash_walker_eggshell + name = "ash walker egg" + desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within. The egg shell looks resistant to temperature but otherwise rather brittle." + icon = 'icons/mob/lavaland/lavaland_monsters.dmi' + icon_state = "large_egg" + resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF + max_integrity = 80 + var/obj/effect/mob_spawn/human/ash_walker/egg + +/obj/structure/ash_walker_eggshell/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) //lifted from xeno eggs + switch(damage_type) + if(BRUTE) + if(damage_amount) + playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) + else + playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) + if(BURN) + if(damage_amount) + playsound(loc, 'sound/items/welder.ogg', 100, TRUE) + +/obj/structure/ash_walker_eggshell/attack_ghost(mob/user) //Pass on ghost clicks to the mob spawner + if(egg) + egg.attack_ghost(user) + . = ..() + +/obj/structure/ash_walker_eggshell/Destroy() + if(!egg) + return ..() + var/mob/living/carbon/human/yolk = new /mob/living/carbon/human/(get_turf(src)) + yolk.fully_replace_character_name(null,random_unique_lizard_name(gender)) + yolk.set_species(/datum/species/lizard/ashwalker) + yolk.underwear = "Nude" + yolk.equipOutfit(/datum/outfit/ashwalker)//this is an authentic mess we're making + yolk.update_body() + yolk.gib() + QDEL_NULL(egg) + return ..() + /obj/effect/mob_spawn/human/ash_walker name = "ash walker egg" desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within." @@ -55,25 +92,48 @@ You have seen lights in the distance... they foreshadow the arrival of outsiders to your domain. \ Ensure your nest remains protected at all costs." assignedrole = "Ash Walker" + var/datum/team/ashwalkers/team + var/obj/structure/ash_walker_eggshell/eggshell + +/obj/effect/mob_spawn/human/ash_walker/Destroy() + eggshell = null + return ..() + +/obj/effect/mob_spawn/human/ash_walker/allow_spawn(mob/user, silent = FALSE) + if(!(user.key in team.players_spawned) || spawnOverride)//one per person unless you get a bonus spawn + return TRUE + to_chat(user, span_warning("You have exhausted your usefulness to the Necropolis.")) + return FALSE /obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn) new_spawn.real_name = random_unique_lizard_name(gender) if(is_mining_level(z)) - to_chat(new_spawn, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind.") + to_chat(new_spawn, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind. Glory to the Necropolis!") + to_chat(new_spawn, "You can expand the weather proof area provided by your shelters by using the 'New Area' key near the bottom right of your HUD.") + to_chat(new_spawn, "Dragging injured ashwalkers to the tentacle or using the sleep verb next to it youself causes the body to remade whole after a short delay!") else to_chat(new_spawn, "You have been born outside of your natural home! Whether you decide to return home, or make due with your new home is your own decision.") - if(!ishuman(new_spawn)) - return - var/mob/living/carbon/human/H = new_spawn - H.underwear = "Nude" - H.undershirt = "Nude" - H.socks = "Nude" - H.update_body() +//Ash walkers on birth understand how to make bone bows, bone arrows and ashen arrows -/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload) + if(ishuman(new_spawn)) + var/mob/living/carbon/human/H = new_spawn + H.underwear = "Nude" + H.undershirt = "Nude" + H.socks = "Nude" + H.update_body() + new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team) + team.players_spawned += (new_spawn.key) + eggshell.egg = null + QDEL_NULL(eggshell) + +/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam) . = ..() var/area/A = get_area(src) + team = ashteam + eggshell = new /obj/structure/ash_walker_eggshell(get_turf(loc)) + eggshell.egg = src + src.forceMove(eggshell) if(A) notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER, ignore_dnr_observers = TRUE) @@ -81,7 +141,6 @@ name ="Ashwalker" head = /obj/item/clothing/head/helmet/gladiator uniform = /obj/item/clothing/under/costume/gladiator/ash_walker -*/ //Timeless prisons: Spawns in Wish Granter prisons in lavaland. Ghosts become age-old users of the Wish Granter and are advised to seek repentance for their past. diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 43ef8bf54d..ebc38eb2bf 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -692,7 +692,7 @@ icon_state = "well_3" return TRUE else - to_chat(user, "You need at least tweenty-five pieces of sandstone!") + to_chat(user, "You need at least twenty-five pieces of sandstone!") return if(steps == 3 && S.tool_behaviour == TOOL_SHOVEL) S.use_tool(src, user, 80, volume=100) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 2d691149b6..9d92d08385 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -60,6 +60,7 @@ GLOBAL_PROTECT(admin_verbs_admin) /client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/ /client/proc/jumptomob, /*allows us to jump to a specific mob*/ /client/proc/jumptoturf, /*allows us to jump to a specific turf*/ + /client/proc/admin_end_shift, /*allows us to end the shift properly, also logs it*/ /client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/ /client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcom*/ // /client/proc/admin_disable_shuttle, /*allows us to disable the emergency shuttle admin-wise so that it cannot be called*/ @@ -232,6 +233,7 @@ GLOBAL_LIST_INIT(admin_verbs_hideable, list( /client/proc/cmd_admin_headset_message, /client/proc/cmd_admin_check_contents, /datum/admins/proc/access_news_network, + /client/proc/admin_end_shift, /client/proc/admin_call_shuttle, /client/proc/admin_cancel_shuttle, /client/proc/cmd_admin_direct_narrate, diff --git a/code/modules/antagonists/_common/antag_datum.dm b/code/modules/antagonists/_common/antag_datum.dm index e751f5832d..7e8b12a330 100644 --- a/code/modules/antagonists/_common/antag_datum.dm +++ b/code/modules/antagonists/_common/antag_datum.dm @@ -99,7 +99,7 @@ GLOBAL_LIST_EMPTY(antagonists) SHOULD_CALL_PARENT(TRUE) if(old_body) remove_innate_effects(old_body) - if(!soft_antag && old_body.stat != DEAD && !LAZYLEN(old_body.mind?.antag_datums)) + if(!soft_antag && old_body && old_body.stat != DEAD && !length(old_body.mind?.antag_datums)) old_body.remove_from_current_living_antags() apply_innate_effects(new_body) if(!soft_antag && new_body.stat != DEAD) diff --git a/code/modules/antagonists/ashwalker/ashwalker.dm b/code/modules/antagonists/ashwalker/ashwalker.dm new file mode 100644 index 0000000000..0ba84a201f --- /dev/null +++ b/code/modules/antagonists/ashwalker/ashwalker.dm @@ -0,0 +1,40 @@ +/datum/team/ashwalkers + name = "Ashwalkers" + show_roundend_report = FALSE + var/list/players_spawned = new + +/datum/antagonist/ashwalker + name = "\improper Ash Walker" + job_rank = ROLE_LAVALAND + show_in_antagpanel = FALSE + show_to_ghosts = TRUE + antagpanel_category = "Ash Walkers" + var/datum/team/ashwalkers/ashie_team + +/datum/antagonist/ashwalker/create_team(datum/team/team) + if(team) + ashie_team = team + objectives |= ashie_team.objectives + else + ashie_team = new + +/datum/antagonist/ashwalker/get_team() + return ashie_team + +/datum/antagonist/ashwalker/on_body_transfer(mob/living/old_body, mob/living/new_body) + . = ..() + RegisterSignal(new_body, COMSIG_MOB_EXAMINATE, .proc/on_examinate) + +/datum/antagonist/ashwalker/on_gain() + . = ..() + RegisterSignal(owner.current, COMSIG_MOB_EXAMINATE, .proc/on_examinate) + +/datum/antagonist/ashwalker/on_removal() + . = ..() + UnregisterSignal(owner.current, COMSIG_MOB_EXAMINATE) + +/datum/antagonist/ashwalker/proc/on_examinate(datum/source, atom/A) + SIGNAL_HANDLER + + if(istype(A, /obj/structure/headpike)) + SEND_SIGNAL(owner.current, COMSIG_ADD_MOOD_EVENT, "headspear", /datum/mood_event/sacrifice_good) diff --git a/code/modules/awaymissions/corpse.dm b/code/modules/awaymissions/corpse.dm index a2ac5581b9..5d6a70884a 100644 --- a/code/modules/awaymissions/corpse.dm +++ b/code/modules/awaymissions/corpse.dm @@ -33,6 +33,10 @@ var/ghost_usable = TRUE var/skip_reentry_check = FALSE //Skips the ghost role blacklist time for people who ghost/suicide/cryo +///override this to add special spawn conditions to a ghost role +/obj/effect/mob_spawn/proc/allow_spawn(mob/user, silent = FALSE) + return TRUE + //ATTACK GHOST IGNORING PARENT RETURN VALUE /obj/effect/mob_spawn/attack_ghost(mob/user, latejoinercalling) if(!SSticker.HasRoundStarted() || !loc || !ghost_usable) @@ -43,6 +47,8 @@ if(jobban_isbanned(user, banType)) to_chat(user, "You are jobanned!") return + if(!allow_spawn(user, silent = FALSE)) + return if(QDELETED(src) || QDELETED(user)) return if(isobserver(user)) diff --git a/code/modules/integrated_electronics/core/printer.dm b/code/modules/integrated_electronics/core/printer.dm index 329520ab85..3a517fac95 100644 --- a/code/modules/integrated_electronics/core/printer.dm +++ b/code/modules/integrated_electronics/core/printer.dm @@ -110,6 +110,14 @@ if(!(in_range(src, user) || issilicon(user))) return + var/client/client = user.client + if (CONFIG_GET(flag/use_exp_tracking) && client && client.get_exp_living(TRUE) < 480) // Player with less than 8 hours playtime is using this machine. + if(client.next_circuit_grief_warning < world.time) + var/turf/T = get_turf(src) + client.next_circuit_grief_warning = world.time + 15 MINUTES // Wait 15 minutes before alerting admins again + message_admins("ANTI-GRIEF: New player [ADMIN_LOOKUPFLW(user)] has touched \a [src] at [ADMIN_VERBOSEJMP(T)].") + client.touched_circuit = TRUE + if(isnull(current_category)) current_category = SScircuit.circuit_fabricator_recipe_list[1] diff --git a/code/modules/language/arachnid.dm b/code/modules/language/arachnid.dm index e68e7a181b..de2de19c74 100644 --- a/code/modules/language/arachnid.dm +++ b/code/modules/language/arachnid.dm @@ -5,7 +5,7 @@ speech_verb = "chitter" ask_verb = "chitter" exclaim_verb = "chitter" - key = "r" + key = "c" flags = NO_STUTTER | LANGUAGE_HIDE_ICON_IF_NOT_UNDERSTOOD icon_state = "arachnid" diff --git a/code/modules/language/dwarven.dm b/code/modules/language/dwarven.dm index fa8f81244b..20ba4e25b8 100644 --- a/code/modules/language/dwarven.dm +++ b/code/modules/language/dwarven.dm @@ -4,7 +4,7 @@ name = "Dwarvish" desc = "The language of the dwarves" space_chance = 100 // Each 'syllable' is its own word - key = "D" + key = "w" flags = TONGUELESS_SPEECH syllables = list("kulet", "alak", "bidok", "nicol", "anam", "gatal", "mabdug", "zustash", "sedil", "ustos", "emr", "izeg", "beming", "gost", "ntak", "tosid", "feb", "berim", "ibruk", "ermis", "thoth", "thatthil", "gistang", "libash", "lakish", "asdos", "roder", "nel", "biban", "ugog", "ish", "robek", "olmul", "nokzam", "emuth", "fer", "uvel", "dolush", "ag^k", "ucat", "ng rak", "enir", "ugath", "lisig", "etg", "erong", "osed", "lanlar", "udir", "tarmid", "s krith", "nural", "bugsud", "okag", "nazush", "nashon", "ftrid", "en''r", "dstik", "kogan", "ingish", "dudgoth", "stalk*b", "themor", "murak", "altth", "osod", "thcekut", "cog", "selsten", "egdoth", "othsin", "idek", "st", "suthmam", "im", "okab", "onlnl", "gasol", "tegir", "nam...sh", "noval", "shalig", "shin", "lek", ",,kim", "kfkdal", "stum,,m", "alud", "olom", "%lot", "rozsed", "thos", "okon", "nSerrated tendrils carefully pull [prey] to [src], absorbing the body and creating it anew.") - var/datum/mind/deadmind - if(prey.key) - deadmind = prey.mind + for(var/mob/living/H in view(src, 1)) //Only for corpse right next to/on same tile + if(H.stat) + for(var/obj/item/W in H) + if(!H.dropItemToGround(W)) + qdel(W) + if(issilicon(H)) //no advantage to sacrificing borgs... + H.gib() + visible_message(span_notice("Serrated tendrils eagerly pull [H] apart, but find nothing of interest.")) + return + + if(H.mind?.has_antag_datum(/datum/antagonist/ashwalker) && (H.key || H.get_ghost(FALSE, TRUE))) //special interactions for dead lava lizards with ghosts attached + visible_message(span_warning("Serrated tendrils carefully pull [H] to [src], absorbing the body and creating it anew.")) + var/datum/mind/deadmind + if(H.key) + deadmind = H + else + deadmind = H.get_ghost(FALSE, TRUE) + to_chat(deadmind, "Your body has been returned to the nest. You are being remade anew, and will awaken shortly.
Your memories will remain intact in your new body, as your soul is being salvaged") + SEND_SOUND(deadmind, sound('sound/magic/enter_blood.ogg',volume=100)) + addtimer(CALLBACK(src, .proc/remake_walker, H.mind, H.real_name), 20 SECONDS) + new /obj/effect/gibspawner/generic(get_turf(H)) + qdel(H) + return + + if(ismegafauna(H)) + meat_counter += 20 else - deadmind = prey.get_ghost(FALSE, TRUE) - to_chat(deadmind, "Your body has been returned to the nest. You are being remade anew, and will awaken shortly.
Your memories will remain intact in your new body, as your soul is being salvaged.") - SEND_SOUND(deadmind, sound('sound/magic/enter_blood.ogg',volume=100)) - new /obj/effect/gibspawner/generic(get_turf(prey)) - var/oldgender = prey.gender - var/oldname = prey.real_name - addtimer(CALLBACK(src, .proc/remake_walker, oldname, oldgender, deadmind), 20 SECONDS) - qdel(prey) - - continue - playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, 1) - if(issilicon(prey)) //no advantage to sacrificing borgs... - visible_message("Serrated tendrils eagerly pull [prey] apart, but find nothing of interest.") - prey.gib() + meat_counter++ + visible_message(span_warning("Serrated tendrils eagerly pull [H] to [src], tearing the body apart as its blood seeps over the eggs.")) + playsound(get_turf(src),'sound/magic/demon_consume.ogg', 100, TRUE) + var/deliverykey = H.fingerprintslast //key of whoever brought the body + var/mob/living/deliverymob = get_mob_by_key(deliverykey) //mob of said key + //there is a 40% chance that the Lava Lizard unlocks their respawn with each sacrifice + if(deliverymob && (deliverymob.mind?.has_antag_datum(/datum/antagonist/ashwalker)) && (deliverykey in ashies.players_spawned) && (prob(40))) + to_chat(deliverymob, span_warning("The Necropolis is pleased with your sacrifice. You feel confident your existence after death is secure.")) + ashies.players_spawned -= deliverykey + H.gib() obj_integrity = min(obj_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril - continue - visible_message("Serrated tendrils eagerly pull [prey] to [src], tearing the body apart as its blood seeps over the eggs.") + for(var/mob/living/L in view(src, 5)) + if(L.mind?.has_antag_datum(/datum/antagonist/ashwalker)) + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "headspear", /datum/mood_event/sacrifice_good) + else + SEND_SIGNAL(L, COMSIG_ADD_MOOD_EVENT, "headspear", /datum/mood_event/sacrifice_bad) - if(ismegafauna(prey)) - meat_counter += 20 - else - meat_counter++ - prey.gib() - obj_integrity = min(obj_integrity + max_integrity*0.05,max_integrity)//restores 5% hp of tendril +/obj/structure/lavaland/ash_walker/proc/remake_walker(datum/mind/oldmind, oldname) + var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) + M.set_species(/datum/species/lizard/ashwalker) + M.real_name = oldname + M.underwear = "Nude" + M.undershirt = "Nude" + M.socks = "Nude" + M.update_body() + M.remove_language(/datum/language/common) + oldmind.transfer_to(M) + M.mind.grab_ghost() + to_chat(M, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Necropolis!") + playsound(get_turf(M),'sound/magic/exit_blood.ogg', 100, TRUE) /obj/structure/lavaland/ash_walker/proc/spawn_mob() - if(meat_counter < ASH_WALKER_SPAWN_THRESHOLD) - return - new spawned_obj(get_step(loc, pick(GLOB.alldirs)), ashies, linked_objective) - visible_message("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!") - meat_counter -= ASH_WALKER_SPAWN_THRESHOLD + if(meat_counter >= ASH_WALKER_SPAWN_THRESHOLD) + new /obj/effect/mob_spawn/human/ash_walker(get_step(loc, pick(GLOB.alldirs)), ashies) + visible_message("One of the eggs swells to an unnatural size and tumbles free. It's ready to hatch!") + meat_counter -= ASH_WALKER_SPAWN_THRESHOLD diff --git a/code/modules/surgery/organs/tongue.dm b/code/modules/surgery/organs/tongue.dm index d9d25ba3c0..0ea6e60a61 100644 --- a/code/modules/surgery/organs/tongue.dm +++ b/code/modules/surgery/organs/tongue.dm @@ -27,6 +27,7 @@ /datum/language/dwarf, /datum/language/signlanguage, /datum/language/neokanji, + /datum/language/sylvan, /datum/language/machine, //Skyrat change - adds machine language /datum/language/modular_sand/calcic, //Skyrat change - plasmaman language /datum/language/modular_sand/dunmeri, //Skyrat change - dunmer language diff --git a/html/changelog.html b/html/changelog.html index cd8f7ca168..e09db92eca 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,93 @@ -->
+

04 February 2022

+

SakuraOran updated:

+ + +

03 February 2022

+

BlueWildrose updated:

+ +

Crowbar764 updated:

+ +

Uso15 updated:

+ + +

02 February 2022

+

SandPoot updated:

+ +

SpiWat updated:

+ + +

01 February 2022

+

BongaTheProto updated:

+ +

Crowbar764 updated:

+ + +

31 January 2022

+

BongaTheProto updated:

+ +

SandPoot updated:

+ +

SandPoot and The Last Hosea2 updated:

+ + +

30 January 2022

+

BongaTheProto updated:

+ +

radar651 updated:

+ +

29 January 2022

Arturlang updated:

- -

03 December 2021

-

BongaTheProto updated:

- -

NullFag updated:

- -

TripleShades updated:

- - -

02 December 2021

-

DeltaFire15 updated:

- - -

01 December 2021

-

BongaTheProto updated:

- -

DeltaFire15 updated:

- - -

28 November 2021

-

SandPoot updated:

- -

TripleShades updated:

- -

keronshb updated:

-
GoonStation 13 Development Team diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index a54ae1b19e..bba2e95ebc 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -31600,3 +31600,74 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. - rscadd: Added Holocollars, spiked collars, handmade collars, and casino collars, also in kinkmates and other vendors! - imageadd: New avian character customization sprites for birbs (yay) +2022-01-30: + BongaTheProto: + - rscadd: added urethral penetration interactions + radar651: + - rscadd: Adds in Weapon Permits, they even fit to your jumpsuit. + - rscadd: Heads of Staff, Minus the Captain and HOS, spawn with a weapon permit. + The Bartender also spawns with one + - rscadd: Captain, HOS and HOP spawn with a case of 20 weapon permits for distribution. + - imageadd: added in permit, compermit and barpermit +2022-01-31: + BongaTheProto: + - bugfix: Hilbert's hotel atmos system shouldn't runtime anymore + SandPoot: + - rscadd: Admins have a special shiny button to end the round ic. + - bugfix: No longer calling CHECK_TICKs for no reason. + - config: If reveal everything is false, ghosts can no longer speak to the living + when the round ends. + - rscadd: Added an outline color theme for liteweb. (used when you don't pick a + color) + - bugfix: You can once again see your previews for picking target bodyparts on your + hud. + - bugfix: Stuff on your other ear is no longer fire-proof. + - bugfix: Your items no longer go invisble if you cycle through hud modes or reconnect + into the game. + SandPoot and The Last Hosea2: + - rscadd: Added new clothing items including hats, some shoes and a duster! They're + available on the loadout and vendors. + - rscdel: Deletes file duplicates that were in the wrong place. +2022-02-01: + BongaTheProto: + - bugfix: Makes tails able to wag again + Crowbar764: + - rscadd: More buyable gear for slavers + - bugfix: Patches a few problems + - tweak: improves slaver hideout + - tweak: improves slaver shuttle +2022-02-02: + SandPoot: + - bugfix: The Oilskin Duster is now visible. + SpiWat: + - spellcheck: tweenty --> twenty +2022-02-03: + BlueWildrose: + - bugfix: Sylvan should actually be speakable for those who have taken that language + as roundstart now, and for plantpeople who naturally start with it. + - bugfix: The langauge Neo-kanji's shortcut was overlapping with the slime language, + and has been relocated from k to j. + - bugfix: The langauge Dwarvish's shortcut was potentially overlapping with drones, + and has been relocated from D to w. + - bugfix: The language Rachnidian's shortcut was getting in the way of the Ratvarian + language, so it's been moved from r to c. + Crowbar764: + - rscadd: antag consent HUD added to admin HUD + - rscadd: new 'collection tool' to teleport crew to the slaver shuttle, removing + the need to drag them through space + - rscadd: supply shop changes + - tweak: other misc slaver changes + - rscadd: Another admin grief tool + Uso15: + - bugfix: Dullahans now talk through their Heads and _not_ their necks +2022-02-04: + SakuraOran: + - rscadd: Ashwalkers can now heal, even from death, by being incapacitated (asleep/dead) + near the tendril + - rscadd: Added the ability for antags to have the "protect object" objective, which + the ashwalkers now have to protect the tendril. This is determined by if the + object is broken or not, and can be set to any object or structure that can + reasonably be destroyed + - balance: Ashwalkers get one life, and have a 40% chance to earn an additional + life when they sacrifice to the tendril. + - bugfix: fixed mobs not dropping guaranteed_butcher_results when gibbed diff --git a/html/changelogs/AutoChangeLog-pr-155.yml b/html/changelogs/AutoChangeLog-pr-155.yml deleted file mode 100644 index 8d9ec4326d..0000000000 --- a/html/changelogs/AutoChangeLog-pr-155.yml +++ /dev/null @@ -1,8 +0,0 @@ -author: radar651 -delete-after: true -changes: - - rscadd: Adds in Weapon Permits, they even fit to your jumpsuit. - - rscadd: Heads of Staff, Minus the Captain and HOS, spawn with a weapon permit. - The Bartender also spawns with one - - rscadd: Captain, HOS and HOP spawn with a case of 20 weapon permits for distribution. - - imageadd: added in permit, compermit and barpermit diff --git a/html/changelogs/AutoChangeLog-pr-159.yml b/html/changelogs/AutoChangeLog-pr-159.yml deleted file mode 100644 index a83f75f2cb..0000000000 --- a/html/changelogs/AutoChangeLog-pr-159.yml +++ /dev/null @@ -1,4 +0,0 @@ -author: BongaTheProto -delete-after: true -changes: - - rscadd: added urethral penetration interactions diff --git a/icons/obj/custom.dmi b/icons/obj/custom.dmi index d04b4b4c84..43018f4b8c 100644 Binary files a/icons/obj/custom.dmi and b/icons/obj/custom.dmi differ diff --git a/modular_citadel/code/modules/client/loadout/__donator.dm b/modular_citadel/code/modules/client/loadout/__donator.dm index 9f9488e48d..f2c7b398cf 100644 --- a/modular_citadel/code/modules/client/loadout/__donator.dm +++ b/modular_citadel/code/modules/client/loadout/__donator.dm @@ -572,3 +572,10 @@ path = SLOT_WEAR_SUIT path = /obj/item/clothing/suit/spacehoodie ckeywhitelist = list("bidlink2") + +/datum/gear/donator/pokerchips + name = "pokerchip set" + slot = SLOT_IN_BACKPACK + path = /obj/item/storage/box/pockerchips + ckeywhitelist = list("greed2323") + diff --git a/modular_citadel/code/modules/custom_loadout/custom_items.dm b/modular_citadel/code/modules/custom_loadout/custom_items.dm index ae06672098..cb1b9728af 100644 --- a/modular_citadel/code/modules/custom_loadout/custom_items.dm +++ b/modular_citadel/code/modules/custom_loadout/custom_items.dm @@ -627,3 +627,49 @@ icon = 'icons/obj/custom.dmi' mob_overlay_icon = 'icons/mob/clothing/custom_w.dmi' mutantrace_variation = NONE + +/obj/item/coin/red + name = "red pokerchip" + desc = "A red pokerchip." + icon_state = "c_red" + item_state = "c_red" + icon = 'icons/obj/custom.dmi' + +/obj/item/coin/blue + name = "blue pokerchip" + desc = "A blue pokerchip." + icon_state = "c_nlue" + item_state = "c_blue" + icon = 'icons/obj/custom.dmi' + +/obj/item/coin/green + name = "green pokerchip" + desc = "A green pokerchip." + icon_state = "c_green" + item_state = "c_green" + icon = 'icons/obj/custom.dmi' + +/obj/item/coin/black + name = "black pokerchip" + desc = "A black pokerchip." + icon_state = "c_black" + item_state = "c_black" + icon = 'icons/obj/custom.dmi' + +/obj/item/storage/box/pockerchips + name = "tray of pocker chips" + desc = "A tray of green, red, blue, and black pocker chips." + icon_state = "c_holder" + icon = 'icons/obj/custom.dmi' + illustration=null + +/obj/item/storage/box/pokerchips/PopulateContents() + for(var/i in 1 to 5) + new /obj/item/coin/red(src) + for(var/i in 1 to 10) + new /obj/item/coin/blue(src) + for(var/i in 1 to 15) + new /obj/item/coin/black(src) + for(var/i in 1 to 20) + new /obj/item/coin/green(src) + diff --git a/modular_citadel/interface/skin.dmf b/modular_citadel/interface/skin.dmf deleted file mode 100644 index 84296cbb67..0000000000 --- a/modular_citadel/interface/skin.dmf +++ /dev/null @@ -1,319 +0,0 @@ -macro "default" - - -menu "menu" - elem - name = "&File" - command = "" - saved-params = "is-checked" - elem - name = "&Quick screenshot\tF2" - command = ".screenshot auto" - category = "&File" - saved-params = "is-checked" - elem - name = "&Save screenshot as...\tShift+F2" - command = ".screenshot" - category = "&File" - saved-params = "is-checked" - elem - name = "" - command = "" - category = "&File" - saved-params = "is-checked" - elem "reconnectbutton" - name = "&Reconnect" - command = ".reconnect" - category = "&File" - saved-params = "is-checked" - elem - name = "&Quit\tAlt-F4" - command = ".quit" - category = "&File" - saved-params = "is-checked" - elem - name = "&Help" - command = "" - saved-params = "is-checked" - elem - name = "&Admin Help\tF1" - command = "adminhelp" - category = "&Help" - saved-params = "is-checked" - elem - name = "&Hotkeys" - command = "hotkeys-help" - category = "&Help" - saved-params = "is-checked" - - -window "mainwindow" - elem "mainwindow" - type = MAIN - pos = 0,0 - size = 640x440 - anchor1 = none - anchor2 = none - background-color = #242424 - is-default = true - saved-params = "pos;size;is-minimized;is-maximized" - icon = 'icons\\ss13_64.png' - macro = "default" - menu = "menu" - elem "split" - type = CHILD - pos = 0,0 - size = 637x440 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #272727 - saved-params = "splitter" - left = "mapwindow" - right = "infowindow" - is-vert = true - splitter = 75 - elem "asset_cache_browser" - type = BROWSER - pos = 0,0 - size = 200x200 - anchor1 = none - anchor2 = none - background-color = #272727 - is-visible = false - saved-params = "" - elem "tooltip" - type = BROWSER - pos = 0,0 - size = 999x999 - anchor1 = none - anchor2 = none - background-color = #272727 - is-visible = false - saved-params = "" - -window "mapwindow" - elem "mapwindow" - type = MAIN - pos = 418,0 - size = 1024x1024 - anchor1 = none - anchor2 = none - background-color = none - saved-params = "pos;size;is-minimized;is-maximized" - statusbar = false - is-pane = true - outer-size = 684x617 - inner-size = 662x561 - elem "map" - type = MAP - pos = 0,0 - size = 1024x1024 - anchor1 = 0,0 - anchor2 = 100,100 - font-family = "Arial" - font-size = 7 - is-default = true - saved-params = "icon-size" - zoom-mode = distort - style = ".center { text-align: center; }\n.maptext { font-family: 'Small Fonts'; font-size: 7px; -dm-text-outline: 1px black; color: white; line-height: 1.1; }\n.command_headset { font-weight: bold;\tfont-size: 8px; } .small { font-size: 6px; }\n.big { font-size: 8px; }\n.reallybig { font-size: 8px; }\n.extremelybig { font-size: 8px; }\n.greentext { color: #00ff00; font-size: 7px; }\n.redtext { color: #ff0000; font-size: 7px; }\n.clown { color: #ff69bf; font-size: 7px; font-weight: bold; }\n.his_grace { color: #15d512; }\n.hypnophrase { color: #0d0d0d; font-weight: bold; }\n.yell { font-weight: bold; }\n.italics { font-size: 6px; }" - -window "infowindow" - elem "infowindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - background-color = #242424 - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - elem "info" - type = CHILD - pos = 0,30 - size = 640x445 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #272727 - saved-params = "splitter" - left = "statwindow" - right = "outputwindow" - is-vert = false - elem "changelog" - type = BUTTON - pos = 16,5 - size = 104x20 - anchor1 = 3,0 - anchor2 = 19,0 - text-color = #e0e0e0 - background-color = #40628a - saved-params = "is-checked" - text = "Changelog" - command = "changelog" - elem "rules" - type = BUTTON - pos = 120,5 - size = 100x20 - anchor1 = 19,0 - anchor2 = 34,0 - text-color = #e0e0e0 - background-color = #40628a - saved-params = "is-checked" - text = "Rules" - command = "rules" - elem "wiki" - type = BUTTON - pos = 220,5 - size = 100x20 - anchor1 = 34,0 - anchor2 = 50,0 - text-color = #e0e0e0 - background-color = #40628a - saved-params = "is-checked" - text = "Wiki" - command = "wiki" - elem "discord" - type = BUTTON - pos = 320,5 - size = 100x20 - anchor1 = 50,0 - anchor2 = 66,0 - text-color = #e0e0e0 - background-color = #40628a - saved-params = "is-checked" - text = "Discord" - command = "discord" - elem "github" - type = BUTTON - pos = 420,5 - size = 100x20 - anchor1 = 66,0 - anchor2 = 81,0 - text-color = #e0e0e0 - background-color = #40628a - saved-params = "is-checked" - text = "GitHub" - command = "github" - elem "report-issue" - type = BUTTON - pos = 520,5 - size = 100x20 - anchor1 = 81,0 - anchor2 = 97,0 - font-size = 8 - text-color = #e0e0e0 - background-color = #a92c2c - saved-params = "is-checked" - text = "Report Issue" - command = "report-issue" - -window "outputwindow" - elem "outputwindow" - type = MAIN - pos = 0,0 - size = 640x480 - anchor1 = none - anchor2 = none - background-color = #272727 - saved-params = "pos;size;is-minimized;is-maximized" - titlebar = false - statusbar = false - can-close = false - can-minimize = false - can-resize = false - is-pane = true - elem "input" - type = INPUT - pos = 2,460 - size = 595x20 - anchor1 = 0,100 - anchor2 = 100,100 - background-color = #d3b5b5 - is-default = true - border = sunken - saved-params = "command" - elem "say" - type = BUTTON - pos = 600,460 - size = 37x20 - anchor1 = 100,100 - anchor2 = none - text-color = #e0e0e0 - background-color = #272727 - saved-params = "is-checked" - text = "Chat" - command = ".winset \"say.is-checked=true ? input.command=\"!say \\\"\" : input.command=\"" - is-flat = true - button-type = pushbox - elem "browseroutput" - type = BROWSER - pos = 0,0 - size = 640x456 - anchor1 = 0,0 - anchor2 = 100,100 - background-color = #272727 - is-visible = false - is-disabled = true - saved-params = "" - auto-format = false - elem "output" - type = OUTPUT - pos = 0,0 - size = 640x456 - anchor1 = 0,0 - anchor2 = 100,100 - text-color = #e0e0e0 - background-color = #272727 - is-default = true - saved-params = "" - -window "statwindow" - elem "statwindow" - type = MAIN - pos = 281,0 - size = 640x480 - anchor1 = none - anchor2 = none - background-color = #242424 - saved-params = "pos;size;is-minimized;is-maximized" - is-pane = true - elem "stat" - type = INFO - pos = 0,0 - size = 640x480 - anchor1 = 0,0 - anchor2 = 100,100 - text-color = #e0e0e0 - background-color = #272727 - is-default = true - saved-params = "" - tab-text-color = #e0e0e0 - tab-background-color = #242424 - prefix-color = #e0e0e0 - suffix-color = #e0e0e0 - -window "preferences_window" - elem "preferences_window" - type = MAIN - pos = 372,0 - size = 1280x1000 - anchor1 = none - anchor2 = none - is-visible = false - saved-params = "pos;size;is-minimized;is-maximized" - statusbar = false - elem "preferences_browser" - type = BROWSER - pos = 0,0 - size = 960x1000 - anchor1 = 0,0 - anchor2 = 75,100 - saved-params = "" - elem "character_preview_map" - type = MAP - pos = 960,0 - size = 320x1000 - anchor1 = 75,0 - anchor2 = 100,100 - right-click = true - saved-params = "zoom;letterbox;zoom-mode" - diff --git a/modular_sand/code/modules/admin/verbs/randomverbs.dm b/modular_sand/code/modules/admin/verbs/randomverbs.dm new file mode 100644 index 0000000000..5bb62c4415 --- /dev/null +++ b/modular_sand/code/modules/admin/verbs/randomverbs.dm @@ -0,0 +1,20 @@ +/client/proc/admin_end_shift() + set category = "Admin.Events" + set name = "End shift" + set desc = "Calls the shuttle as if a roundend vote passed." + + if(EMERGENCY_AT_LEAST_DOCKED) + return + + if(!check_rights(R_ADMIN)) + return + + var/confirm = alert(src, "End the shift?", "Confirm", "Yes", "No") + if(confirm != "Yes") + return + + SSshuttle.autoEnd() + SSblackbox.record_feedback("tally", "admin_verb", 1, "End Shift") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + log_admin("[key_name(usr)] ended the shift.") + message_admins("[key_name_admin(usr)] ended the shift.") + return diff --git a/modular_sand/code/modules/client/loadout/_security.dm b/modular_sand/code/modules/client/loadout/_security.dm new file mode 100644 index 0000000000..be2d6399aa --- /dev/null +++ b/modular_sand/code/modules/client/loadout/_security.dm @@ -0,0 +1,48 @@ +/datum/gear/head/brodie + name = "Brodie" + subcategory = LOADOUT_SUBCATEGORY_HEAD_JOBS + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet." + path = /obj/item/clothing/head/helmet/brodie + restricted_roles = list("Security Officer", "Warden", "Head of Security") + +/datum/gear/head/brodie/medic + name = "Medical Brodie" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has a cross indicating the wearer is a doctor." + path = /obj/item/clothing/head/helmet/brodie/medic + +/datum/gear/head/brodie/irish + name = "Irish Brodie" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has a cross indicating the wearer is an Irishman." + path = /obj/item/clothing/head/helmet/brodie/irish + +/datum/gear/head/brodie/nettan + name = "Netted Brodie" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has netting over it." + path = /obj/item/clothing/head/helmet/brodie/nettan + +/datum/gear/head/brodie/nettanf + name = "Brodie with a net and leaves" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has netting and leaves over it." + path = /obj/item/clothing/head/helmet/brodie/nettanf + +/datum/gear/head/brodie/netgreen + name = "Green netted Brodie" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has green netting over it." + path = /obj/item/clothing/head/helmet/brodie/netgreen + +/datum/gear/head/brodie/netgreenf + name = "Green netted Brodie with leaves" + description = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has green netting and leaves over it." + path = /obj/item/clothing/head/helmet/brodie/netgreenf + +/datum/gear/shoes/puttee + name = "Puttee Boots" + description = "A World War 1 era set of wool british puttees wrapped over the leg and boots." + path = /obj/item/clothing/shoes/jackboots/puttee + restricted_roles = list("Security Officer", "Warden", "Head of Security") diff --git a/modular_sand/code/modules/client/loadout/head.dm b/modular_sand/code/modules/client/loadout/head.dm new file mode 100644 index 0000000000..7ab2dda314 --- /dev/null +++ b/modular_sand/code/modules/client/loadout/head.dm @@ -0,0 +1,14 @@ +/datum/gear/head/slouch + name = "Slouch hat" + description = "An Australian Military slouch hat with one side turned up... Smells faintly of Kangaroos." + path = /obj/item/clothing/head/slouch_hat + +/datum/gear/head/lawdog + name = "Law dog" + description = "Hat of the old west law bringers like bass reeves and wyatt erp." + path = /obj/item/clothing/head/lawdog + +/datum/gear/head/gunfighter + name = "Gun fighter" + description = "One hell of a bastard wears this hat upon their head... with its hat band made out of bullet casings folks can tell you mean business." + path = /obj/item/clothing/head/gunfighter diff --git a/modular_sand/code/modules/client/loadout/suit.dm b/modular_sand/code/modules/client/loadout/suit.dm new file mode 100644 index 0000000000..be93382e3f --- /dev/null +++ b/modular_sand/code/modules/client/loadout/suit.dm @@ -0,0 +1,5 @@ +/datum/gear/suit/duster + name = "Oilskin duster" + subcategory = LOADOUT_SUBCATEGORY_SUIT_COATS + description = "A Long Duster coat with the iconic shoulder cape, Commonly used for rainy days and dusty dry days by cowboys." + path = /obj/item/clothing/suit/jacket/duster diff --git a/modular_sand/code/modules/clothing/head/helmet.dm b/modular_sand/code/modules/clothing/head/helmet.dm new file mode 100644 index 0000000000..a6c7230bfe --- /dev/null +++ b/modular_sand/code/modules/clothing/head/helmet.dm @@ -0,0 +1,51 @@ +/obj/item/clothing/head/helmet/brodie + name = "Brodie" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet." + icon = 'modular_sand/icons/obj/clothing/hats.dmi' + icon_state = "brodie" + item_state = "brodie" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' + mutantrace_variation = STYLE_NO_ANTHRO_ICON + flags_cover = null // Doesn't cover eyes. + +/obj/item/clothing/head/helmet/brodie/medic + name = "Medical Brodie" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has a cross indicating the wearer is a doctor." + icon_state = "brodie_medic" + item_state = "brodie_medic" + +/obj/item/clothing/head/helmet/brodie/irish + name = "Irish Brodie" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has a cross indicating the wearer is an Irishman." + icon_state = "brodie_irish" + item_state = "brodie_irish" + +/obj/item/clothing/head/helmet/brodie/nettan + name = "Netted Brodie" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has netting over it." + icon_state = "brodie_nettan" + item_state = "brodie_nettan" + +/obj/item/clothing/head/helmet/brodie/nettanf + name = "Brodie with a net and leaves" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has netting and leaves over it." + icon_state = "brodie_nettanf" + item_state = "brodie_nettanf" + +/obj/item/clothing/head/helmet/brodie/netgreen + name = "Green netted Brodie" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has green netting over it." + icon_state = "brodie_netgreen" + item_state = "brodie_netgreen" + +/obj/item/clothing/head/helmet/brodie/netgreenf + name = "Green netted Brodie with leaves" + desc = "The Brodie helmet is a steel combat helmet also known as the battle bowler. A World War 1 and 2 era British and commonwealth helmet\n\ + This one has green netting and leaves over it." + icon_state = "brodie_netgreenf" + item_state = "brodie_netgreenf" diff --git a/modular_sand/code/modules/clothing/head/misc.dm b/modular_sand/code/modules/clothing/head/misc.dm index 8d93981414..4b011f3e53 100644 --- a/modular_sand/code/modules/clothing/head/misc.dm +++ b/modular_sand/code/modules/clothing/head/misc.dm @@ -1,51 +1,26 @@ -/obj/item/clothing/head/goatpelt - name = "goat pelt hat" - desc = "Fuzzy and Warm!" +/obj/item/clothing/head/slouch_hat + name = "Slouch hat" + desc = "An Australian Military slouch hat with one side turned up... Smells faintly of Kangaroos." icon = 'modular_sand/icons/obj/clothing/hats.dmi' - icon_state = "goatpelt" + icon_state = "slouch" + item_state = "slouch" mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' mutantrace_variation = STYLE_NO_ANTHRO_ICON - item_state = "goatpelt" -/obj/item/clothing/head/goatpelt/king - name = "king goat pelt hat" - desc = "Fuzzy, Warm and Robust!" - icon_state = "goatpelt" - item_state = "goatpelt" - color = "#ffd700" - body_parts_covered = HEAD - armor = list("melee" = 60, "bullet" = 55, "laser" = 55, "energy" = 45, "bomb" = 100, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) - dog_fashion = null - resistance_flags = FIRE_PROOF - -/obj/item/clothing/head/goatpelt/king/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == ITEM_SLOT_HEAD) - user.faction |= "goat" - -/obj/item/clothing/head/goatpelt/king/dropped(mob/living/carbon/human/user) - if (user.head == src) - user.faction -= "goat" - ..() - -/obj/item/clothing/head/goatpope - name = "goat pope hat" - desc = "And on the seventh day King Goat said there will be cabbage!" - mob_overlay_icon = 'modular_sand/icons/mob/large-worn-icons/64x64/head.dmi' - mutantrace_variation = STYLE_NO_ANTHRO_ICON +/obj/item/clothing/head/lawdog + name = "Law dog" + desc = "Hat of the old west law bringers like bass reeves and wyatt erp." icon = 'modular_sand/icons/obj/clothing/hats.dmi' - icon_state = "goatpope" - item_state = "goatpope" - worn_x_dimension = 64 - worn_y_dimension = 64 - resistance_flags = FLAMMABLE + icon_state = "lawdog" + item_state = "lawdog" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' + mutantrace_variation = STYLE_NO_ANTHRO_ICON -/obj/item/clothing/head/goatpope/equipped(mob/living/carbon/human/user, slot) - ..() - if (slot == ITEM_SLOT_HEAD) - user.faction |= "goat" - -/obj/item/clothing/head/goatpope/dropped(mob/living/carbon/human/user, slot) - if (user.head == src) - user.faction -= "goat" - ..() +/obj/item/clothing/head/gunfighter + name = "Gun fighter" + desc = "One hell of a bastard wears this hat upon their head... with its hat band made out of bullet casings folks can tell you mean business." + icon = 'modular_sand/icons/obj/clothing/hats.dmi' + icon_state = "gunfighter" + item_state = "gunfighter" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' + mutantrace_variation = STYLE_NO_ANTHRO_ICON diff --git a/modular_sand/code/modules/clothing/head/misc_special.dm b/modular_sand/code/modules/clothing/head/misc_special.dm new file mode 100644 index 0000000000..8d93981414 --- /dev/null +++ b/modular_sand/code/modules/clothing/head/misc_special.dm @@ -0,0 +1,51 @@ +/obj/item/clothing/head/goatpelt + name = "goat pelt hat" + desc = "Fuzzy and Warm!" + icon = 'modular_sand/icons/obj/clothing/hats.dmi' + icon_state = "goatpelt" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/head.dmi' + mutantrace_variation = STYLE_NO_ANTHRO_ICON + item_state = "goatpelt" + +/obj/item/clothing/head/goatpelt/king + name = "king goat pelt hat" + desc = "Fuzzy, Warm and Robust!" + icon_state = "goatpelt" + item_state = "goatpelt" + color = "#ffd700" + body_parts_covered = HEAD + armor = list("melee" = 60, "bullet" = 55, "laser" = 55, "energy" = 45, "bomb" = 100, "bio" = 20, "rad" = 20, "fire" = 100, "acid" = 100) + dog_fashion = null + resistance_flags = FIRE_PROOF + +/obj/item/clothing/head/goatpelt/king/equipped(mob/living/carbon/human/user, slot) + ..() + if (slot == ITEM_SLOT_HEAD) + user.faction |= "goat" + +/obj/item/clothing/head/goatpelt/king/dropped(mob/living/carbon/human/user) + if (user.head == src) + user.faction -= "goat" + ..() + +/obj/item/clothing/head/goatpope + name = "goat pope hat" + desc = "And on the seventh day King Goat said there will be cabbage!" + mob_overlay_icon = 'modular_sand/icons/mob/large-worn-icons/64x64/head.dmi' + mutantrace_variation = STYLE_NO_ANTHRO_ICON + icon = 'modular_sand/icons/obj/clothing/hats.dmi' + icon_state = "goatpope" + item_state = "goatpope" + worn_x_dimension = 64 + worn_y_dimension = 64 + resistance_flags = FLAMMABLE + +/obj/item/clothing/head/goatpope/equipped(mob/living/carbon/human/user, slot) + ..() + if (slot == ITEM_SLOT_HEAD) + user.faction |= "goat" + +/obj/item/clothing/head/goatpope/dropped(mob/living/carbon/human/user, slot) + if (user.head == src) + user.faction -= "goat" + ..() diff --git a/modular_sand/code/modules/clothing/masks/miscellaneous.dm b/modular_sand/code/modules/clothing/masks/miscellaneous.dm index b1665df07e..01ba667e7f 100644 --- a/modular_sand/code/modules/clothing/masks/miscellaneous.dm +++ b/modular_sand/code/modules/clothing/masks/miscellaneous.dm @@ -1,7 +1,7 @@ /obj/item/clothing/mask/sand //keep an eye on this boy, i want a it to be a hoodie for a cloak now. name = "Sand mask" desc = "The halo appears to be floating." - icon = 'modular_sand/icons/obj/clothing/mask.dmi' + icon = 'modular_sand/icons/obj/clothing/masks.dmi' icon_state = "sand" item_state = "sand" mob_overlay_icon = 'modular_sand/icons/mob/clothing/mask.dmi' diff --git a/modular_sand/code/modules/clothing/shoes/miscellaneous.dm b/modular_sand/code/modules/clothing/shoes/miscellaneous.dm new file mode 100644 index 0000000000..1c790e9e78 --- /dev/null +++ b/modular_sand/code/modules/clothing/shoes/miscellaneous.dm @@ -0,0 +1,8 @@ +/obj/item/clothing/shoes/jackboots/puttee + name = "Putte Boots" + desc = "A World War 1 era set of wool british puttees wrapped over the leg and boots." + icon = 'modular_sand/icons/obj/clothing/shoes.dmi' + icon_state = "puttee" + item_state = "puttee" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/feet.dmi' + anthro_mob_worn_overlay = 'modular_sand/icons/mob/clothing/feet_digi.dmi' diff --git a/modular_sand/code/modules/clothing/suits/miscellaneous.dm b/modular_sand/code/modules/clothing/suits/miscellaneous.dm new file mode 100644 index 0000000000..db1b8303bb --- /dev/null +++ b/modular_sand/code/modules/clothing/suits/miscellaneous.dm @@ -0,0 +1,9 @@ +/obj/item/clothing/suit/jacket/duster + name = "Oilskin duster" + desc = "A Long Duster coat with the iconic shoulder cape, Commonly used for rainy days and dusty dry days by cowboys." + icon = 'modular_sand/icons/obj/clothing/suits.dmi' + icon_state = "duster" + item_state = "duster" + mob_overlay_icon = 'modular_sand/icons/mob/clothing/suit.dmi' + body_parts_covered = CHEST|GROIN|ARMS|LEGS + cold_protection = CHEST|GROIN|ARMS|LEGS diff --git a/modular_sand/code/modules/vending/clothesmate.dm b/modular_sand/code/modules/vending/clothesmate.dm index 8339635ffc..c4d522cb57 100644 --- a/modular_sand/code/modules/vending/clothesmate.dm +++ b/modular_sand/code/modules/vending/clothesmate.dm @@ -1,5 +1,10 @@ /obj/machinery/vending/clothing/Initialize() - products[/obj/item/clothing/head/wig] = 5 + products += list(/obj/item/clothing/head/wig = 5, + /obj/item/clothing/suit/jacket/duster = 5, + /obj/item/clothing/head/slouch_hat = 5, + /obj/item/clothing/head/lawdog = 5, + /obj/item/clothing/head/gunfighter = 5 + ) for(var/P in typesof(/datum/gear/underwear)) var/datum/gear/G = P products[initial(G.path)] = 5 diff --git a/modular_sand/code/modules/vending/wardrobes.dm b/modular_sand/code/modules/vending/wardrobes.dm new file mode 100644 index 0000000000..3b5f3e20ba --- /dev/null +++ b/modular_sand/code/modules/vending/wardrobes.dm @@ -0,0 +1,5 @@ +/obj/machinery/vending/wardrobe/sec_wardrobe/Initialize(mapload) + products[/obj/item/clothing/shoes/jackboots/puttee] = 5 + for(var/item in subtypesof(/obj/item/clothing/head/helmet/brodie)) + products[item] = 5 + . = ..() diff --git a/modular_sand/icons/mob/clothing/feet.dmi b/modular_sand/icons/mob/clothing/feet.dmi new file mode 100644 index 0000000000..79cb59931a Binary files /dev/null and b/modular_sand/icons/mob/clothing/feet.dmi differ diff --git a/modular_sand/icons/mob/clothing/feet_digi.dmi b/modular_sand/icons/mob/clothing/feet_digi.dmi new file mode 100644 index 0000000000..5513d0f6ec Binary files /dev/null and b/modular_sand/icons/mob/clothing/feet_digi.dmi differ diff --git a/modular_sand/icons/mob/clothing/head.dmi b/modular_sand/icons/mob/clothing/head.dmi index 5e7539eae8..bb0472ca29 100644 Binary files a/modular_sand/icons/mob/clothing/head.dmi and b/modular_sand/icons/mob/clothing/head.dmi differ diff --git a/modular_sand/icons/mob/clothing/suit.dmi b/modular_sand/icons/mob/clothing/suit.dmi index b250f0c247..d67f0be909 100644 Binary files a/modular_sand/icons/mob/clothing/suit.dmi and b/modular_sand/icons/mob/clothing/suit.dmi differ diff --git a/modular_sand/icons/obj/clothing/hats.dmi b/modular_sand/icons/obj/clothing/hats.dmi index 1a5b17aaf2..e393feeb57 100644 Binary files a/modular_sand/icons/obj/clothing/hats.dmi and b/modular_sand/icons/obj/clothing/hats.dmi differ diff --git a/modular_sand/icons/obj/clothing/head_muzzled.dmi b/modular_sand/icons/obj/clothing/head_muzzled.dmi deleted file mode 100644 index 07c078c353..0000000000 Binary files a/modular_sand/icons/obj/clothing/head_muzzled.dmi and /dev/null differ diff --git a/modular_sand/icons/obj/clothing/mask.dmi b/modular_sand/icons/obj/clothing/mask.dmi deleted file mode 100644 index 391e5674a5..0000000000 Binary files a/modular_sand/icons/obj/clothing/mask.dmi and /dev/null differ diff --git a/modular_sand/icons/obj/clothing/masks.dmi b/modular_sand/icons/obj/clothing/masks.dmi index 5473d67f40..da9c36c105 100644 Binary files a/modular_sand/icons/obj/clothing/masks.dmi and b/modular_sand/icons/obj/clothing/masks.dmi differ diff --git a/modular_sand/icons/obj/clothing/shoes.dmi b/modular_sand/icons/obj/clothing/shoes.dmi new file mode 100644 index 0000000000..5d1cb780b7 Binary files /dev/null and b/modular_sand/icons/obj/clothing/shoes.dmi differ diff --git a/modular_sand/icons/obj/clothing/suits.dmi b/modular_sand/icons/obj/clothing/suits.dmi index c6fe6f59e9..31c58f7724 100644 Binary files a/modular_sand/icons/obj/clothing/suits.dmi and b/modular_sand/icons/obj/clothing/suits.dmi differ diff --git a/modular_splurt/_maps/RandomRuins/LavaRuins/lavaland_surface_abandoned_shelter.dmm b/modular_splurt/_maps/RandomRuins/LavaRuins/lavaland_surface_abandoned_shelter.dmm index 7cb0ee0e7a..fb338e45d5 100644 --- a/modular_splurt/_maps/RandomRuins/LavaRuins/lavaland_surface_abandoned_shelter.dmm +++ b/modular_splurt/_maps/RandomRuins/LavaRuins/lavaland_surface_abandoned_shelter.dmm @@ -169,9 +169,7 @@ /turf/open/floor/plasteel, /area/lavaland/surface/outdoors) "wF" = ( -/obj/item/stack/sheet/mineral/uranium{ - amount = 2 - }, +/obj/item/circuitboard/machine/mining_equipment_vendor/golem, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "yv" = ( @@ -211,7 +209,7 @@ /area/lavaland/surface/outdoors) "CV" = ( /obj/machinery/door/airlock/external/glass, -/turf/template_noop, +/turf/open/floor/plasteel, /area/lavaland/surface/outdoors) "CX" = ( /obj/effect/mob_spawn/human/wandering_hermit, @@ -243,6 +241,11 @@ /obj/structure/cable, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) +"HK" = ( +/obj/structure/frame/machine, +/obj/item/circuitboard/machine/autolathe, +/turf/open/floor/plating/asteroid/basalt/lava_land_surface, +/area/lavaland/surface/outdoors) "II" = ( /obj/structure/cable{ icon_state = "1-4" @@ -362,9 +365,7 @@ /turf/open/floor/plasteel, /area/lavaland/surface/outdoors) "VT" = ( -/obj/item/stack/sheet/mineral/gold{ - amount = 5 - }, +/obj/item/card/id/mining, /turf/open/floor/plating/asteroid/basalt/lava_land_surface, /area/lavaland/surface/outdoors) "We" = ( @@ -656,7 +657,7 @@ bv Yt Pm rR -ha +VT pE Pm Br @@ -693,7 +694,7 @@ ig rp GU Br -gd +HK gd ha ha @@ -723,7 +724,7 @@ QQ QQ QQ ch -ha +wF ZP Nq ch @@ -778,7 +779,7 @@ QQ ha ha Cj -VT +ha Dr Qn Qn @@ -796,7 +797,7 @@ ha Qn Pm ha -wF +ha Dr Qn Qn diff --git a/modular_splurt/code/game/gamemodes/objectives.dm b/modular_splurt/code/game/gamemodes/objectives.dm index eafaa5d24c..b1ba57aed4 100644 --- a/modular_splurt/code/game/gamemodes/objectives.dm +++ b/modular_splurt/code/game/gamemodes/objectives.dm @@ -1,21 +1,3 @@ -/datum/objective/protect_object - name = "protect object" - var/obj/protect_target - -/datum/objective/protect_object/proc/set_target(obj/O) - protect_target = O - update_explanation_text() - -/datum/objective/protect_object/update_explanation_text() - . = ..() - if(protect_target) - explanation_text = "Protect \the [protect_target] at all costs." - else - explanation_text = "Free objective." - -/datum/objective/protect_object/check_completion() - return !QDELETED(protect_target) - /datum/objective/rescue_prisoner name = "rescue prisoner" @@ -33,4 +15,3 @@ /datum/objective/slaver name = "slave trading" explanation_text = "Earn 200,000 credits through slave trading." - diff --git a/modular_splurt/code/game/object/structures/ghost_role_spawners.dm b/modular_splurt/code/game/object/structures/ghost_role_spawners.dm index c26bb7ba19..e4239a6158 100644 --- a/modular_splurt/code/game/object/structures/ghost_role_spawners.dm +++ b/modular_splurt/code/game/object/structures/ghost_role_spawners.dm @@ -1,60 +1,11 @@ /obj/effect/mob_spawn/human/ash_walker - name = "ash walker egg" - desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within." - mob_name = "an ash walker" - job_description = "Ashwalker" - icon = 'icons/mob/lavaland/lavaland_monsters.dmi' - icon_state = "large_egg" - mob_species = /datum/species/lizard/ashwalker - roundstart = FALSE - death = FALSE - anchored = FALSE - move_resist = MOVE_FORCE_NORMAL - density = FALSE - short_desc = "You are an ash walker. Your tribe worships the Necropolis." - flavour_text = "The wastes are sacred ground, its monsters a blessed bounty. You would never willingly leave your homeland behind. \ - You have seen lights in the distance... they foreshadow the arrival of outsiders to your domain. \ - Ensure your nest remains protected at all costs." - assignedrole = "Ash Walker" - var/datum/linked_objective - var/datum/team/ashwalkers/team - var/obj/structure/ash_walker_eggshell/eggshell var/gender_bias -/obj/effect/mob_spawn/human/ash_walker/special(mob/living/new_spawn) - new_spawn.fully_replace_character_name(null,random_unique_lizard_name(gender)) - to_chat(new_spawn, "Drag the corpses of men and beasts to your nest. It will absorb them to create more of your kind.") - - new_spawn.mind.add_antag_datum(/datum/antagonist/ashwalker, team) - - if(ishuman(new_spawn)) - var/mob/living/carbon/human/H = new_spawn - H.underwear = "Nude" - H.undershirt = "Nude" - H.socks = "Nude" - H.update_body() - ADD_TRAIT(H, TRAIT_PRIMITIVE, ROUNDSTART_TRAIT) - H.remove_language(/datum/language/common) - team.players_spawned += (new_spawn.key) - eggshell.egg = null - QDEL_NULL(eggshell) - /obj/effect/mob_spawn/human/ash_walker/equip(mob/living/carbon/human/H) if(!isnull(gender_bias) && prob(90)) H.gender = gender_bias return ..() -/obj/effect/mob_spawn/human/ash_walker/Initialize(mapload, datum/team/ashwalkers/ashteam, datum/ashobjective) - . = ..() - var/area/A = get_area(src) - team = ashteam - linked_objective = ashobjective - eggshell = new /obj/structure/ash_walker_eggshell(get_turf(loc)) - eggshell.egg = src - src.forceMove(eggshell) - if(A) - notify_ghosts("An ash walker egg is ready to hatch in \the [A.name].", source = src, action=NOTIFY_ATTACK, flashwindow = FALSE, ignore_key = POLL_IGNORE_ASHWALKER) - /obj/effect/mob_spawn/human/ash_walker/western job_description = "Western Ashwalker" short_desc = "You are a Farlander. Your tribe worships the home tendril." @@ -74,49 +25,6 @@ mob_species = /datum/species/lizard/ashwalker/eastern gender_bias = MALE -/datum/outfit/ashwalker - name ="Ashwalker" - head = /obj/item/clothing/head/helmet/gladiator - uniform = /obj/item/clothing/under/costume/gladiator/ash_walker - -//Ash walker eggs: Spawns in ash walker dens in lavaland. Ghosts become unbreathing lizards that worship the Necropolis and are advised to retrieve corpses to create more ash walkers. -/obj/structure/ash_walker_eggshell - name = "ash walker egg" - desc = "A man-sized yellow egg, spawned from some unfathomable creature. A humanoid silhouette lurks within." - icon = 'icons/mob/lavaland/lavaland_monsters.dmi' - icon_state = "large_egg" - resistance_flags = LAVA_PROOF | FIRE_PROOF | FREEZE_PROOF - max_integrity = 80 - var/obj/effect/mob_spawn/human/ash_walker/egg - -/obj/structure/ash_walker_eggshell/play_attack_sound(damage_amount, damage_type = BRUTE, damage_flag = 0) //lifted from xeno eggs - switch(damage_type) - if(BRUTE) - if(damage_amount) - playsound(loc, 'sound/effects/attackblob.ogg', 100, TRUE) - else - playsound(src, 'sound/weapons/tap.ogg', 50, TRUE) - if(BURN) - if(damage_amount) - playsound(loc, 'sound/items/welder.ogg', 100, TRUE) - -/obj/structure/ash_walker_eggshell/attack_ghost(mob/user) //Pass on ghost clicks to the mob spawner - if(egg) - egg.attack_ghost(user) - . = ..() - -/obj/structure/ash_walker_eggshell/Destroy() - if(!egg) - return ..() - var/mob/living/carbon/human/yolk = new /mob/living/carbon/human/(get_turf(src)) - yolk.fully_replace_character_name(null,random_unique_lizard_name(gender)) - yolk.set_species(/datum/species/lizard/ashwalker) - yolk.underwear = "Nude" - yolk.update_body() - yolk.gib() - QDEL_NULL(egg) - return ..() - //Portable dangerous-environment sleepers: Spawns in exposed to ash storms shelter. //Characters in this role could have been conscious for a long time, surviving on the planet. They may also know Draconic language by contacting with ashwalkers. /obj/effect/mob_spawn/human/wandering_hermit diff --git a/modular_splurt/code/modules/admin/playtimes.dm b/modular_splurt/code/modules/admin/playtimes.dm index 4bafb91aa4..126631699c 100644 --- a/modular_splurt/code/modules/admin/playtimes.dm +++ b/modular_splurt/code/modules/admin/playtimes.dm @@ -4,10 +4,13 @@ var/next_chem_grief_warning = 0 var/next_canister_grief_warning = 0 var/next_ied_grief_warning = 0 + var/next_circuit_grief_warning = 0 var/touched_transfer_valve = FALSE var/used_chem_dispenser = FALSE var/touched_canister = FALSE var/crafted_ied = FALSE + var/touched_circuit = FALSE + var/uses_vpn = FALSE /client/proc/cmd_player_playtimes() set category = "Admin" @@ -89,6 +92,18 @@ flag["tooltip"] = "This player crafted an IED or Molotov." flags += list(flag) + if (C.touched_circuit) + var/list/flag = list() + flag["icon"] = "code-branch" + flag["tooltip"] = "This player touched a circuit printer." + flags += list(flag) + + if(C.uses_vpn) + var/list/flag = list() + flag["icon"] = "wifi" + flag["tooltip"] = "This player is [round(C.ip_intel*100, 0.01)]% likely to be using a Proxy/VPN" + flags += list(flag) + return flags /datum/player_playtime/ui_act(action, params) diff --git a/modular_splurt/code/modules/antagonists/ashwalker.dm b/modular_splurt/code/modules/antagonists/ashwalker.dm deleted file mode 100644 index deed8f4ae7..0000000000 --- a/modular_splurt/code/modules/antagonists/ashwalker.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/team/ashwalkers - name = "Ashwalkers" - show_roundend_report = FALSE - var/list/players_spawned = list() - -/datum/antagonist/ashwalker - name = "Ash Walker" - job_rank = ROLE_LAVALAND - show_in_antagpanel = FALSE - show_to_ghosts = TRUE - antagpanel_category = "Ash Walkers" - var/datum/team/ashwalkers/ashie_team - -/datum/antagonist/ashwalker/create_team(datum/team/team) - if(team) - ashie_team = team - objectives |= ashie_team.objectives - else - ashie_team = new - -/datum/antagonist/ashwalker/get_team() - return ashie_team diff --git a/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm new file mode 100644 index 0000000000..9ba3db985e --- /dev/null +++ b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/outlet_injector.dm @@ -0,0 +1,13 @@ +/obj/machinery/atmospherics/components/unary/outlet_injector/hilbertshotel + +/obj/machinery/atmospherics/components/unary/outlet_injector/hilbertshotel/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/turn_on), 3 SECONDS) + +/obj/machinery/atmospherics/components/unary/outlet_injector/hilbertshotel/proc/turn_on() + on = TRUE + update_appearance() + +/obj/machinery/atmospherics/components/unary/outlet_injector/hilbertshotel/layer3 + piping_layer = 3 + icon_state = "inje_map-3" diff --git a/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm new file mode 100644 index 0000000000..54eb593572 --- /dev/null +++ b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_pump.dm @@ -0,0 +1,9 @@ +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel + +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/turn_on), 3 SECONDS) + +/obj/machinery/atmospherics/components/unary/vent_pump/hilbertshotel/proc/turn_on() + on = TRUE + update_appearance() diff --git a/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm new file mode 100644 index 0000000000..4c97c0c149 --- /dev/null +++ b/modular_splurt/code/modules/atmospherics/machinery/components/unary_devices/vent_scrubber.dm @@ -0,0 +1,13 @@ +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel + +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/Initialize() + . = ..() + addtimer(CALLBACK(src, .proc/turn_on), 3 SECONDS) + +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/proc/turn_on() + on = TRUE + update_appearance() + +/obj/machinery/atmospherics/components/unary/vent_scrubber/hilbertshotel/layer3 + piping_layer = 3 + icon_state = "scrub_map-3" diff --git a/modular_splurt/code/modules/client/client_procs.dm b/modular_splurt/code/modules/client/client_procs.dm new file mode 100644 index 0000000000..d62111d09d --- /dev/null +++ b/modular_splurt/code/modules/client/client_procs.dm @@ -0,0 +1,4 @@ +/client/check_ip_intel() + . = ..() + if(ip_intel != initial(ip_intel) && ip_intel >= CONFIG_GET(number/ipintel_rating_bad)) + uses_vpn = TRUE diff --git a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm index e3ae397d11..c902e51224 100644 --- a/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm +++ b/modular_splurt/code/modules/mob/dead/new_player/sprite_accesories/tails.dm @@ -79,7 +79,7 @@ icon = 'modular_splurt/icons/mob/mam_tails.dmi' matrixed_sections = MATRIX_RED -/datum/sprite_accessory/tails_animated/mam_tails_animated +/datum/sprite_accessory/tails_animated/mam_tails_animated/shorthawk name = "Hawk - Short" icon_state = "shorthawk" icon = 'modular_splurt/icons/mob/mam_tails.dmi' diff --git a/modular_splurt/code/modules/mob/living/carbon/human/species_types/dullahan.dm b/modular_splurt/code/modules/mob/living/carbon/human/species_types/dullahan.dm new file mode 100644 index 0000000000..94689e4b6c --- /dev/null +++ b/modular_splurt/code/modules/mob/living/carbon/human/species_types/dullahan.dm @@ -0,0 +1,2 @@ +/obj/item/organ/tongue/dullahan + initial_accents = list(/datum/accent/dullahan) diff --git a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm index 78d988185b..a5fac88e7a 100644 --- a/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm +++ b/modular_splurt/code/modules/ruins/objects_and_mobs/ash_walker_den.dm @@ -1,18 +1,3 @@ -/obj/structure/lavaland/ash_walker/proc/remake_walker(oldname, oldgender, datum/mind/oldmind) - var/mob/living/carbon/human/M = new /mob/living/carbon/human(get_step(loc, pick(GLOB.alldirs))) - M.gender = oldgender - M.set_species(species) - M.real_name = oldname - M.underwear = "Nude" - M.undershirt = "Nude" - M.socks = "Nude" - M.update_body() - M.remove_language(/datum/language/common) - oldmind.transfer_to(M) - M.mind.grab_ghost() - to_chat(M, "You have been pulled back from beyond the grave, with a new body and renewed purpose. Glory to the Tendril!") - playsound(get_turf(M),'sound/magic/exit_blood.ogg', 100, TRUE) - /obj/structure/lavaland/ash_walker/western spawned_obj = /obj/effect/mob_spawn/human/ash_walker/western species = /datum/species/lizard/ashwalker/western diff --git a/tgstation.dme b/tgstation.dme index bd78d66664..4fac5f7a4a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1580,6 +1580,7 @@ #include "code\modules\antagonists\abductor\machinery\dispenser.dm" #include "code\modules\antagonists\abductor\machinery\experiment.dm" #include "code\modules\antagonists\abductor\machinery\pad.dm" +#include "code\modules\antagonists\ashwalker\ashwalker.dm" #include "code\modules\antagonists\blob\blob.dm" #include "code\modules\antagonists\blob\blob\blob_report.dm" #include "code\modules\antagonists\blob\blob\overmind.dm" @@ -2371,7 +2372,6 @@ #include "code\modules\integrated_electronics\core\special_pins\string_pin.dm" #include "code\modules\integrated_electronics\passive\passive.dm" #include "code\modules\integrated_electronics\passive\power.dm" -#include "code\modules\integrated_electronics\subtypes\access.dm" #include "code\modules\integrated_electronics\subtypes\arithmetic.dm" #include "code\modules\integrated_electronics\subtypes\atmospherics.dm" #include "code\modules\integrated_electronics\subtypes\converters.dm" @@ -3971,6 +3971,7 @@ #include "modular_sand\code\game\turfs\simulated\floor\titanium_floor.dm" #include "modular_sand\code\modules\admin\chat_commands.dm" #include "modular_sand\code\modules\admin\verbs\fix_air.dm" +#include "modular_sand\code\modules\admin\verbs\randomverbs.dm" #include "modular_sand\code\modules\arousal\arousal.dm" #include "modular_sand\code\modules\arousal\creampie.dm" #include "modular_sand\code\modules\arousal\genitals.dm" @@ -3994,25 +3995,32 @@ #include "modular_sand\code\modules\client\asset_cache.dm" #include "modular_sand\code\modules\client\preferences.dm" #include "modular_sand\code\modules\client\preferences_savefile.dm" +#include "modular_sand\code\modules\client\loadout\_security.dm" #include "modular_sand\code\modules\client\loadout\accessories.dm" #include "modular_sand\code\modules\client\loadout\backpack.dm" #include "modular_sand\code\modules\client\loadout\boxers.dm" #include "modular_sand\code\modules\client\loadout\hands.dm" +#include "modular_sand\code\modules\client\loadout\head.dm" #include "modular_sand\code\modules\client\loadout\shirts.dm" #include "modular_sand\code\modules\client\loadout\socks.dm" +#include "modular_sand\code\modules\client\loadout\suit.dm" #include "modular_sand\code\modules\client\loadout\uniform.dm" #include "modular_sand\code\modules\client\loadout\wrists.dm" #include "modular_sand\code\modules\clothing\refactor.dm" #include "modular_sand\code\modules\clothing\gloves\_gloves.dm" #include "modular_sand\code\modules\clothing\gloves\accessories.dm" +#include "modular_sand\code\modules\clothing\head\helmet.dm" #include "modular_sand\code\modules\clothing\head\misc.dm" +#include "modular_sand\code\modules\clothing\head\misc_special.dm" #include "modular_sand\code\modules\clothing\masks\hailer.dm" #include "modular_sand\code\modules\clothing\masks\miscellaneous.dm" #include "modular_sand\code\modules\clothing\neck\_neck.dm" #include "modular_sand\code\modules\clothing\outfits\standard.dm" +#include "modular_sand\code\modules\clothing\shoes\miscellaneous.dm" #include "modular_sand\code\modules\clothing\spacesuits\chronosuit.dm" #include "modular_sand\code\modules\clothing\spacesuits\hardsuit.dm" #include "modular_sand\code\modules\clothing\suits\armor.dm" +#include "modular_sand\code\modules\clothing\suits\miscellaneous.dm" #include "modular_sand\code\modules\clothing\under\costumes.dm" #include "modular_sand\code\modules\clothing\under\miscellaneous.dm" #include "modular_sand\code\modules\clothing\under\uniform.dm" @@ -4166,6 +4174,7 @@ #include "modular_sand\code\modules\vending\autodrobe.dm" #include "modular_sand\code\modules\vending\clothesmate.dm" #include "modular_sand\code\modules\vending\kinkmate.dm" +#include "modular_sand\code\modules\vending\wardrobes.dm" #include "modular_splurt\code\__HELPERS\_cit_helpers.dm" #include "modular_splurt\code\__HELPERS\cmp.dm" #include "modular_splurt\code\__HELPERS\icons.dm" @@ -4249,7 +4258,6 @@ #include "modular_splurt\code\modules\admin\verbs\discordbunker.dm" #include "modular_splurt\code\modules\admin\verbs\one_click_antag.dm" #include "modular_splurt\code\modules\admin\verbs\randomverbs.dm" -#include "modular_splurt\code\modules\antagonists\ashwalker.dm" #include "modular_splurt\code\modules\antagonists\slaver\slaver.dm" #include "modular_splurt\code\modules\antagonists\slaver\equipment\orderable_gear.dm" #include "modular_splurt\code\modules\antagonists\slaver\equipment\slaver_items.dm" @@ -4257,7 +4265,11 @@ #include "modular_splurt\code\modules\arousal\genitals_sprite_accessories.dm" #include "modular_splurt\code\modules\arousal\organs\breasts.dm" #include "modular_splurt\code\modules\arousal\organs\testicles.dm" +#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\outlet_injector.dm" +#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\vent_pump.dm" +#include "modular_splurt\code\modules\atmospherics\machinery\components\unary_devices\vent_scrubber.dm" #include "modular_splurt\code\modules\cargo\packs\armory.dm" +#include "modular_splurt\code\modules\client\client_procs.dm" #include "modular_splurt\code\modules\client\preferences.dm" #include "modular_splurt\code\modules\client\preferences_savefile.dm" #include "modular_splurt\code\modules\client\loadout\backpack.dm"