diff --git a/code/__DEFINES/chat.dm b/code/__DEFINES/chat.dm index f816c0317f4c..14f0c8829dd9 100644 --- a/code/__DEFINES/chat.dm +++ b/code/__DEFINES/chat.dm @@ -36,4 +36,8 @@ /// Used for debug messages to the server #define debug2_world_log(msg) if (GLOB.Debug2) log_world("DEBUG: [msg]") /// Adds a generic box around whatever message you're sending in chat. Really makes things stand out. -#define examine_block(str) ("
" + str + "
") +#define boxed_message(str) ("
" + str + "
") +/// Adds a box around whatever message you're sending in chat. Can apply color and/or additional classes. Available colors: red, green, blue, purple. Use it like red_box +#define custom_boxed_message(classes, str) ("
" + str + "
") +/// Makes a fieldset with a neaty styled name. Can apply additional classes. +#define fieldset_block(title, content, classes) ("
" + title + "" + content + "
") diff --git a/code/controllers/subsystem/ticker.dm b/code/controllers/subsystem/ticker.dm index 2b3ac0619c5a..3961a854cf15 100644 --- a/code/controllers/subsystem/ticker.dm +++ b/code/controllers/subsystem/ticker.dm @@ -351,7 +351,7 @@ SUBSYSTEM_DEF(ticker) m = pick(memetips) if(m) - to_chat(world, span_purple(examine_block("Tip of the round: [html_encode(m)]"))) + to_chat(world, span_purple(boxed_message("Tip of the round: [html_encode(m)]"))) /datum/controller/subsystem/ticker/proc/check_queue() if(!queued_players.len) diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm index 03c244ae05d2..476d9fcc9dce 100644 --- a/code/controllers/subsystem/vote.dm +++ b/code/controllers/subsystem/vote.dm @@ -87,7 +87,7 @@ SUBSYSTEM_DEF(vote) var/log_string = replacetext(to_display, "\n", "\\n") // 'keep' the newlines, but dont actually print them as newlines log_vote(log_string) - to_chat(world, span_infoplain(vote_font("\n[to_display]"))) + to_chat(world, span_infoplain(vote_font("[to_display]"))) // Finally, doing any effects on vote completion if (final_winner) // if no one voted, or the vote cannot be won, final_winner will be null @@ -209,9 +209,9 @@ SUBSYSTEM_DEF(vote) var/to_display = current_vote.initiate_vote(vote_initiator_name, duration) log_vote(to_display) - to_chat(world, span_infoplain(vote_font("\n[span_bold(to_display)]\n\ + to_chat(world, custom_boxed_message("purple_box center", span_infoplain(vote_font("[span_bold(to_display)]
\ Type vote or click here to place your votes.\n\ - You have [DisplayTimeText(duration)] to vote."))) + You have [DisplayTimeText(duration)] to vote.")))) // And now that it's going, give everyone a voter action for(var/client/new_voter as anything in GLOB.clients) @@ -344,6 +344,7 @@ SUBSYSTEM_DEF(vote) /datum/action/vote name = "Vote!" button_icon_state = "vote" + background_icon_state = "bg_blink" /datum/action/vote/IsAvailable() return TRUE // Democracy is always available to the free people diff --git a/code/datums/components/mood.dm b/code/datums/components/mood.dm index a37fd00c3b5b..130cf3572ebc 100644 --- a/code/datums/components/mood.dm +++ b/code/datums/components/mood.dm @@ -92,7 +92,7 @@ msg += "[event.description]\n" // now we dont have to put \n in every moodlet description else msg += "I don't have much of a reaction to anything right now.\n" - to_chat(user, examine_block(msg)) + to_chat(user, boxed_message(msg)) ///Called after moodevent/s have been added/removed. /datum/component/mood/proc/update_mood() diff --git a/code/datums/mind.dm b/code/datums/mind.dm index ea9f6918706b..1b0d456ebacd 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -247,7 +247,7 @@ var/datum/skill/the_skill = i msg += "[initial(the_skill.name)] - [get_skill_level_name(the_skill)]\n" msg += "" - to_chat(user, examine_block(msg)) + to_chat(user, boxed_message(msg)) /datum/mind/proc/set_death_time() SIGNAL_HANDLER diff --git a/code/datums/votes/_vote_datum.dm b/code/datums/votes/_vote_datum.dm index 7118695bf1bb..e387e7fba48e 100644 --- a/code/datums/votes/_vote_datum.dm +++ b/code/datums/votes/_vote_datum.dm @@ -169,13 +169,14 @@ * Return a formatted string of text to be displayed to everyone. */ /datum/vote/proc/get_result_text(list/all_winners, real_winner, list/non_voters) + var/title_text = "" var/returned_text = "" if(override_question) - returned_text += span_bold(override_question) + title_text += span_bold(override_question) else - returned_text += span_bold("[capitalize(name)] Vote") + title_text += span_bold("[capitalize(name)] Vote") - returned_text += "\nWinner Selection: " + returned_text += "Winner Selection: " switch(winner_method) if(VOTE_WINNER_METHOD_NONE) returned_text += "None" @@ -215,7 +216,7 @@ returned_text += "\n" returned_text += get_winner_text(all_winners, real_winner, non_voters) - return returned_text + return fieldset_block(title_text, returned_text, "boxed_message purple_box") /** * Gets the text that displays the winning options within the result text. diff --git a/code/game/machinery/cryopod.dm b/code/game/machinery/cryopod.dm index 9bad37507a35..4b3c7a8eae08 100644 --- a/code/game/machinery/cryopod.dm +++ b/code/game/machinery/cryopod.dm @@ -450,7 +450,7 @@ MAPPING_DIRECTIONAL_HELPERS(/obj/machinery/computer/cryopod/retro, 17) wakeupmessage += " A sickly feeling along with the pangs of hunger greet you upon your awakening." sleepyhead.set_nutrition(100) sleepyhead.apply_effect(rand(3,10), EFFECT_DROWSY) - to_chat(sleepyhead, span_danger(examine_block(wakeupmessage))) + to_chat(sleepyhead, span_danger(boxed_message(wakeupmessage))) /obj/machinery/cryopod/syndicate icon_state = "sleeper_s-open" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm index c00938077751..91459a55c772 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/impact.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/impact.dm @@ -52,3 +52,7 @@ /obj/effect/projectile/impact/pgf/rifle name = "beam impact" icon_state = "impact_pgf_rifle" + +/obj/effect/projectile/impact/gauss + name = "gauss impact" + icon_state = "hc_gauss" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm index b850681c713f..97646ae50e32 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/muzzle.dm @@ -41,3 +41,6 @@ /obj/effect/projectile/muzzle/pgf/rifle icon_state = "muzzle_pgf_rifle" + +/obj/effect/projectile/muzzle/gauss + icon_state = "muzzle_gauss_rifle" diff --git a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm index d7e867ed03ac..f0ab5580e2bc 100644 --- a/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm +++ b/code/game/objects/effects/temporary_visuals/projectiles/tracer.dm @@ -79,3 +79,6 @@ /obj/effect/projectile/tracer/pgf/rifle icon_state = "beam_pgf_rifle" + +/obj/effect/projectile/tracer/gauss + icon_state = "hc_gauss" diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 4df753123bba..a981d08fb05f 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -381,7 +381,7 @@ GENE SCANNER SEND_SIGNAL(M, COMSIG_NANITE_SCAN, user, FALSE) // we handled the last
so we don't need handholding - to_chat(user, examine_block(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) + to_chat(user, boxed_message(jointext(render_list, "")), trailing_newline = FALSE, type = MESSAGE_TYPE_INFO) /proc/chemscan(mob/living/user, mob/living/M) if(istype(M) && M.reagents) @@ -399,7 +399,7 @@ GENE SCANNER else render_list += "Subject is not addicted to any reagents.\n" // we handled the last
so we don't need handholding - to_chat(user, examine_block(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) + to_chat(user, boxed_message(jointext(render_list, "")), type = MESSAGE_TYPE_INFO) /obj/item/healthanalyzer/verb/toggle_mode() set name = "Switch Verbosity" @@ -612,7 +612,7 @@ GENE SCANNER \nInstability of the last fusion reaction: [round(cached_scan_results["fusion"], 0.01)]." // we let the join apply newlines so we do need handholding - to_chat(user, examine_block(jointext(render_list, "\n")), type = MESSAGE_TYPE_INFO) + to_chat(user, boxed_message(jointext(render_list, "\n")), type = MESSAGE_TYPE_INFO) return TRUE /obj/item/nanite_scanner diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 61d8b2757836..2406d7d51564 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -692,7 +692,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that var/datum/asset/fuckywucky = get_asset_datum(/datum/asset/simple/fuckywucky) fuckywucky.send(m) SEND_SOUND(m, 'sound/misc/fuckywucky.ogg') - to_chat(m, span_purple(examine_block(""))) + to_chat(m, span_purple(boxed_message(""))) addtimer(CALLBACK(src, PROC_REF(restore_fucky_wucky)), 600) diff --git a/code/modules/buildmode/submodes/advanced.dm b/code/modules/buildmode/submodes/advanced.dm index 4fd6f30ca52b..f9eb00250c46 100644 --- a/code/modules/buildmode/submodes/advanced.dm +++ b/code/modules/buildmode/submodes/advanced.dm @@ -6,7 +6,7 @@ // of the currently selected path /datum/buildmode_mode/advanced/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Set object type")] -> Right Mouse Button on buildmode button\n\ [span_bold("Copy object type")] -> Left Mouse Button + Alt on turf/obj\n\ [span_bold("Place objects")] -> Left Mouse Button on turf/obj\n\ diff --git a/code/modules/buildmode/submodes/area_edit.dm b/code/modules/buildmode/submodes/area_edit.dm index b0d8925c0c85..c16744213e86 100644 --- a/code/modules/buildmode/submodes/area_edit.dm +++ b/code/modules/buildmode/submodes/area_edit.dm @@ -22,7 +22,7 @@ return ..() /datum/buildmode_mode/area_edit/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select corner")] -> Left Mouse Button on obj/turf/mob\n\ [span_bold("Paint area")] -> Left Mouse Button + Alt on turf/obj/mob\n\ [span_bold("Select area to paint")] -> Right Mouse Button on obj/turf/mob\n\ diff --git a/code/modules/buildmode/submodes/basic.dm b/code/modules/buildmode/submodes/basic.dm index 180331e94ba8..b35a0b240ad1 100644 --- a/code/modules/buildmode/submodes/basic.dm +++ b/code/modules/buildmode/submodes/basic.dm @@ -2,7 +2,7 @@ key = "basic" /datum/buildmode_mode/basic/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Construct / Upgrade")] -> Left Mouse Button\n\ [span_bold("Deconstruct / Delete / Downgrade")] -> Right Mouse Button\n\ [span_bold("R-Window")] -> Left Mouse Button + Ctrl\n\ diff --git a/code/modules/buildmode/submodes/boom.dm b/code/modules/buildmode/submodes/boom.dm index f0837735c641..a2ba9cadeaf0 100644 --- a/code/modules/buildmode/submodes/boom.dm +++ b/code/modules/buildmode/submodes/boom.dm @@ -8,7 +8,7 @@ var/flames = -1 /datum/buildmode_mode/boom/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Set explosion destructiveness")] -> Right Mouse Button on buildmode button\n\ [span_bold("Kaboom")] -> Mouse Button on obj\n\n\ [span_warning("NOTE:")] Using the \"Config/Launch Supplypod\" verb allows you to do this in an IC way (i.e., making a cruise missile come down from the sky and explode wherever you click!)")) diff --git a/code/modules/buildmode/submodes/copy.dm b/code/modules/buildmode/submodes/copy.dm index 4ac7f9ec4796..6f555e9dc84c 100644 --- a/code/modules/buildmode/submodes/copy.dm +++ b/code/modules/buildmode/submodes/copy.dm @@ -7,7 +7,7 @@ return ..() /datum/buildmode_mode/copy/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Spawn a copy of selected target")] -> Left Mouse Button on obj/turf/mob\n\ [span_bold("Select target to copy")] -> Right Mouse Button on obj/mob")) ) diff --git a/code/modules/buildmode/submodes/delete.dm b/code/modules/buildmode/submodes/delete.dm index 4ef4fe37156c..9d35dba3d779 100644 --- a/code/modules/buildmode/submodes/delete.dm +++ b/code/modules/buildmode/submodes/delete.dm @@ -2,7 +2,7 @@ key = "delete" /datum/buildmode_mode/delete/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Delete an object")] -> Left Mouse Button on obj/turf/mob\n\ [span_bold("Delete all objects of a type")] -> Right Mouse Button on obj/turf/mob")) ) diff --git a/code/modules/buildmode/submodes/fill.dm b/code/modules/buildmode/submodes/fill.dm index 75f4f2d221b7..20428738d7d6 100644 --- a/code/modules/buildmode/submodes/fill.dm +++ b/code/modules/buildmode/submodes/fill.dm @@ -7,7 +7,7 @@ var/atom/objholder = null /datum/buildmode_mode/fill/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select corner")] -> Left Mouse Button on turf/obj/mob\n\ [span_bold("Delete region")] -> Left Mouse Button + Alt on turf/obj/mob\n\ [span_bold("Select object type")] -> Right Mouse Button on buildmode button")) diff --git a/code/modules/buildmode/submodes/lightmaker.dm b/code/modules/buildmode/submodes/lightmaker.dm index 2b50343c641a..3b83ee64e4f9 100644 --- a/code/modules/buildmode/submodes/lightmaker.dm +++ b/code/modules/buildmode/submodes/lightmaker.dm @@ -6,7 +6,7 @@ var/light_color = COLOR_WHITE /datum/buildmode_mode/lightmaker/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Left Click")] -> Create light\n\ [span_bold("Right Click")] -> Delete light\n\ [span_bold("Right Click on Build Mode Button")] -> Change light properties")) diff --git a/code/modules/buildmode/submodes/outfit.dm b/code/modules/buildmode/submodes/outfit.dm index 56faf5d507cc..d1bb144357a3 100644 --- a/code/modules/buildmode/submodes/outfit.dm +++ b/code/modules/buildmode/submodes/outfit.dm @@ -7,7 +7,7 @@ return ..() /datum/buildmode_mode/outfit/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select outfit to equip")] -> Right Mouse Button on buildmode button\n\ [span_bold("Equip the selected outfit")] -> Left Mouse Button on mob/living/carbon/human\n\ [span_bold("Strip and delete current outfit")] -> Right Mouse Button on mob/living/carbon/human")) diff --git a/code/modules/buildmode/submodes/proccall.dm b/code/modules/buildmode/submodes/proccall.dm index 47e7130aa386..996e5736aef0 100644 --- a/code/modules/buildmode/submodes/proccall.dm +++ b/code/modules/buildmode/submodes/proccall.dm @@ -6,7 +6,7 @@ var/list/proc_args = null /datum/buildmode_mode/proccall/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Choose procedure and arguments")] -> Right Mouse Button on buildmode button\n\ [span_bold("Apply procedure on object")] -> Left Mouse Button on machinery")) ) diff --git a/code/modules/buildmode/submodes/relocate_to.dm b/code/modules/buildmode/submodes/relocate_to.dm index 3a2d52bc5d17..4d9f94ba21a8 100644 --- a/code/modules/buildmode/submodes/relocate_to.dm +++ b/code/modules/buildmode/submodes/relocate_to.dm @@ -8,7 +8,7 @@ return ..() /datum/buildmode_mode/relocate_to/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select")] -> Left Mouse Button on obj/mob\n\ [span_bold("Relocate")] -> Right Mouse Button on turf/obj/mob")) ) diff --git a/code/modules/buildmode/submodes/throwing.dm b/code/modules/buildmode/submodes/throwing.dm index 0539d2ec4f9f..14d843d1005b 100644 --- a/code/modules/buildmode/submodes/throwing.dm +++ b/code/modules/buildmode/submodes/throwing.dm @@ -8,7 +8,7 @@ return ..() /datum/buildmode_mode/throwing/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select")] -> Left Mouse Button on turf/obj/mob\n\ [span_bold("Throw")] -> Right Mouse Button on turf/obj/mob")) ) diff --git a/code/modules/buildmode/submodes/tweakcomps.dm b/code/modules/buildmode/submodes/tweakcomps.dm index 4072f8dd8f2f..cab04143707a 100644 --- a/code/modules/buildmode/submodes/tweakcomps.dm +++ b/code/modules/buildmode/submodes/tweakcomps.dm @@ -4,7 +4,7 @@ var/rating = null /datum/buildmode_mode/tweakcomps/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Choose the rating of the components")] -> Right Mouse Button on buildmode button\n\ [span_bold("Sets the chosen rating of the components on the machinery")] -> Left Mouse Button on machinery")) ) diff --git a/code/modules/buildmode/submodes/variable_edit.dm b/code/modules/buildmode/submodes/variable_edit.dm index 728c909860b5..25c0ab8d394a 100644 --- a/code/modules/buildmode/submodes/variable_edit.dm +++ b/code/modules/buildmode/submodes/variable_edit.dm @@ -10,7 +10,7 @@ return ..() /datum/buildmode_mode/varedit/show_help(client/target_client) - to_chat(target_client, span_purple(examine_block( + to_chat(target_client, span_purple(boxed_message( "[span_bold("Select var(type) & value")] -> Right Mouse Button on buildmode button\n\ [span_bold("Set var(type) & value")] -> Left Mouse Button on turf/obj/mob\n\ [span_bold("Reset var's value")] -> Right Mouse Button on turf/obj/mob")) diff --git a/code/modules/cargo/packs/ammo.dm b/code/modules/cargo/packs/ammo.dm index 077d5f49a683..54a555997568 100644 --- a/code/modules/cargo/packs/ammo.dm +++ b/code/modules/cargo/packs/ammo.dm @@ -424,6 +424,12 @@ contains = list(/obj/item/storage/box/ammo/ferropellet) cost = 250 +/datum/supply_pack/ammo/hcpellets + name = "High Conductivity Pellet Box Crate" + desc = "Contains a 48-round high conductivity pellet ammo box for gauss guns such as the Claris." + contains = list(/obj/item/storage/box/ammo/ferropellet/hc) + cost = 500 + /* ferroslugs */ /datum/supply_pack/ammo/ferroslugboxcrate @@ -432,6 +438,12 @@ contains = list(/obj/item/storage/box/ammo/ferroslug) cost = 250 +/datum/supply_pack/ammo/hcslugs + name = "High Conductivity Slug Box Crate" + desc = "Contains a twenty-round high conductivity slug for gauss guns such as the Model-H." + contains = list(/obj/item/storage/box/ammo/ferroslug/hc) + cost = 500 + /* ferro lances */ /datum/supply_pack/ammo/ferrolanceboxcrate @@ -439,3 +451,9 @@ desc = "Contains a 48-round box for high-powered gauss guns such as the GAR assault rifle." contains = list(/obj/item/storage/box/ammo/ferrolance) cost = 250 + +/datum/supply_pack/ammo/ferrolanceboxcrate + name = "High Conductivity Lance Box Crate" + desc = "Contains a 48-round box for high-powered gauss guns such as the GAR assault rifle." + contains = list(/obj/item/storage/box/ammo/ferrolance/hc) + cost = 500 diff --git a/code/modules/hydroponics/grown.dm b/code/modules/hydroponics/grown.dm index 4f2b2420ee55..482a8aae3c89 100644 --- a/code/modules/hydroponics/grown.dm +++ b/code/modules/hydroponics/grown.dm @@ -81,7 +81,7 @@ if(reag_txt) msg += reag_txt - to_chat(user, examine_block(msg)) + to_chat(user, boxed_message(msg)) else if(seed) for(var/datum/plant_gene/trait/T in seed.genes) diff --git a/code/modules/hydroponics/growninedible.dm b/code/modules/hydroponics/growninedible.dm index 8ab59cc6f658..58a317319774 100644 --- a/code/modules/hydroponics/growninedible.dm +++ b/code/modules/hydroponics/growninedible.dm @@ -40,7 +40,7 @@ var/msg = "This is \a [src]\n" if(seed) msg += seed.get_analyzer_text() - to_chat(usr, examine_block(msg)) + to_chat(usr, boxed_message(msg)) return /obj/item/grown/proc/add_juice() diff --git a/code/modules/hydroponics/hydroponics.dm b/code/modules/hydroponics/hydroponics.dm index 13faaf5f15a5..ca857e88dcca 100644 --- a/code/modules/hydroponics/hydroponics.dm +++ b/code/modules/hydroponics/hydroponics.dm @@ -570,7 +570,7 @@ msg += "Toxicity level: [span_notice("[toxic] / [HYDRO_MAX_TOXIC]")]\n" msg += "Water level: [span_notice("[waterlevel] / [maxwater]")]\n" msg += "Nutrition level: [span_notice("[reagents.total_volume] / [maxnutri]")]\n" - to_chat(user, examine_block(msg)) + to_chat(user, boxed_message(msg)) return else if(istype(O, /obj/item/cultivator)) diff --git a/code/modules/hydroponics/seeds.dm b/code/modules/hydroponics/seeds.dm index 65f47357899a..e02c3f197394 100644 --- a/code/modules/hydroponics/seeds.dm +++ b/code/modules/hydroponics/seeds.dm @@ -444,7 +444,7 @@ for(var/datum/plant_gene/reagent/Gene in genes) msg += "\n- [Gene.get_name()] -" msg += "\n*---------*" - to_chat(user, examine_block(msg)) + to_chat(user, boxed_message(msg)) return diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 081c94f4a8f9..4f3857841d7a 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -861,7 +861,7 @@ if(roundstart_quirks.len) combined_msg += "You have these quirks: [get_trait_string()]." - to_chat(src, examine_block(combined_msg.Join("\n"))) + to_chat(src, boxed_message(combined_msg.Join("\n"))) /mob/living/carbon/human/damage_clothes(damage_amount, damage_type = BRUTE, damage_flag = 0, def_zone) if(damage_type != BRUTE && damage_type != BURN) diff --git a/code/modules/mob/living/simple_animal/bot/cleanbot.dm b/code/modules/mob/living/simple_animal/bot/cleanbot.dm index aad4a7a63f86..c452810e9892 100644 --- a/code/modules/mob/living/simple_animal/bot/cleanbot.dm +++ b/code/modules/mob/living/simple_animal/bot/cleanbot.dm @@ -261,20 +261,18 @@ mode = BOT_IDLE return - if(target && (!path || path.len == 0) && (get_dist(src,target) > 1)) + if(!path || path.len == 0) //No path, need a new one + //Try to produce a path to the target, and ignore airlocks to which it has access. path = get_path_to(src, target, 30, id=access_card) - mode = BOT_MOVING - if(!path.len) //try to get closer if you can't reach the target directly - path = get_path_to(src, target, 30, id=access_card) - if(!path.len) //Do not chase a target we cannot reach. - add_to_ignore(target) - target = null - path = list() - - if(path.len > 0 && target) - if(!bot_move(path[path.len])) + if(!bot_move(target)) + add_to_ignore(target) target = null - mode = BOT_IDLE + path = list() + return + mode = BOT_MOVING + else if(!bot_move(target)) + target = null + mode = BOT_IDLE return oldloc = loc diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index eb3ee07a322b..c0af36bc9f33 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -512,7 +512,7 @@ for(var/i in 1 to (length(result) - 1)) result[i] += "\n" - to_chat(src, examine_block("[result.Join()]")) + to_chat(src, boxed_message("[result.Join()]")) SEND_SIGNAL(src, COMSIG_MOB_EXAMINATE, examinify) diff --git a/code/modules/projectiles/ammunition/special/gauss.dm b/code/modules/projectiles/ammunition/special/gauss.dm index 0370d95051c4..04eb57fd4b73 100644 --- a/code/modules/projectiles/ammunition/special/gauss.dm +++ b/code/modules/projectiles/ammunition/special/gauss.dm @@ -8,6 +8,16 @@ firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/gauss var/energy_cost = 100 +/obj/item/ammo_casing/caseless/gauss/hc + name = "high conductivity pellet" + desc = "A small crystal-metal pellet." + caliber = "pellet" + icon_state = "hc-pellet" + projectile_type = /obj/projectile/bullet/gauss/hc + auto_rotate = FALSE + firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/gauss + energy_cost = 200 + /obj/item/ammo_casing/caseless/gauss/lance name = "ferromagnetic lance" desc = "A sharp metal rod." @@ -17,6 +27,16 @@ auto_rotate = TRUE energy_cost = 166 +/obj/item/ammo_casing/caseless/gauss/lance/hc + name = "high conductivity lance" + desc = "A sharp crystal-metal lance." + caliber = "lance" + icon_state = "hc-lance" + projectile_type = /obj/projectile/bullet/gauss/lance/hc + auto_rotate = FALSE + firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/gauss + energy_cost = 332 + /obj/item/ammo_casing/caseless/gauss/slug name = "ferromagnetic slug" desc = "A large metal slug." @@ -25,3 +45,13 @@ projectile_type = /obj/projectile/bullet/gauss/slug auto_rotate = TRUE energy_cost = 700 + +/obj/item/ammo_casing/caseless/gauss/slug/hc + name = "high conductivity lance" + desc = "A large crystal-metal slug." + caliber = "slug" + icon_state = "hc-slug" + projectile_type = /obj/projectile/bullet/gauss/slug/hc + auto_rotate = FALSE + firing_effect_type = /obj/effect/temp_visual/dir_setting/firing_effect/gauss + energy_cost = 1400 diff --git a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm index a64e075dfa84..b7a2dfc86299 100644 --- a/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm +++ b/code/modules/projectiles/boxes_magazines/ammo_stacks/prefab_stacks/premade_gauss_stacks.dm @@ -11,6 +11,19 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet = 4) generate_items_inside(items_inside,src) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet/hc + ammo_type = /obj/item/ammo_casing/caseless/gauss/hc + +/obj/item/storage/box/ammo/ferropellet/hc + name = "box of high conductivity pellets" + desc = "A box of high conductivity pellets for gauss firearms." + icon_state = "ferropelletsbox" + +/obj/item/storage/box/ammo/ferropellet/hc/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferropellet/hc = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug ammo_type = /obj/item/ammo_casing/caseless/gauss/slug @@ -24,6 +37,19 @@ /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug = 4) generate_items_inside(items_inside,src) +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug/hc + ammo_type = /obj/item/ammo_casing/caseless/gauss/slug/hc + +/obj/item/storage/box/ammo/ferroslug/hc + name = "box of high conductivity slugs" + desc = "A box of high conductivity slugs for gauss firearms." + icon_state = "ferroslugsbox" + +/obj/item/storage/box/ammo/ferroslug/hc/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferroslug/hc = 4) + generate_items_inside(items_inside,src) + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance ammo_type = /obj/item/ammo_casing/caseless/gauss/lance @@ -36,3 +62,16 @@ var/static/items_inside = list( /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance = 4) generate_items_inside(items_inside,src) + +/obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance/hc + ammo_type = /obj/item/ammo_casing/caseless/gauss/lance/hc + +/obj/item/storage/box/ammo/ferrolance/hc + name = "box of high conductivity lances" + desc = "A box of high conductivity lances for gauss firearms." + icon_state = "ferrolancesbox" + +/obj/item/storage/box/ammo/ferrolance/hc/PopulateContents() + var/static/items_inside = list( + /obj/item/ammo_box/magazine/ammo_stack/prefilled/ferrolance/hc = 4) + generate_items_inside(items_inside,src) diff --git a/code/modules/projectiles/projectile/bullets/gauss.dm b/code/modules/projectiles/projectile/bullets/gauss.dm index 6011adb61c88..4d17e6256cfb 100644 --- a/code/modules/projectiles/projectile/bullets/gauss.dm +++ b/code/modules/projectiles/projectile/bullets/gauss.dm @@ -9,6 +9,16 @@ light_color = MOVABLE_LIGHT light_range = 3 +/obj/projectile/bullet/gauss/hc + name = "ferromagnetic pellet" + damage = 10 + armour_penetration = 60 + range = 35 + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/gauss + tracer_type = /obj/effect/projectile/tracer/gauss + impact_type = /obj/effect/projectile/impact/gauss + // Ferromagnetic Lance (GAR AR) /obj/projectile/bullet/gauss/lance @@ -17,6 +27,16 @@ damage = 30 armour_penetration = 20 +/obj/projectile/bullet/gauss/lance/hc + name = "ferromagnetic lance" + damage = 15 + armour_penetration = 80 + range = 35 + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/gauss + tracer_type = /obj/effect/projectile/tracer/gauss + impact_type = /obj/effect/projectile/impact/gauss + // Ferromagnetic Slug (Model H) /obj/projectile/bullet/gauss/slug @@ -25,3 +45,13 @@ damage = 50 armour_penetration = -60 speed = 0.8 + +/obj/projectile/bullet/gauss/slug/hc + name = "ferromagnetic lance" + damage = 25 + armour_penetration = 0 + range = 35 + hitscan = TRUE + muzzle_type = /obj/effect/projectile/muzzle/gauss + tracer_type = /obj/effect/projectile/tracer/gauss + impact_type = /obj/effect/projectile/impact/gauss diff --git a/html/changelogs/AutoChangeLog-pr-3994.yml b/html/changelogs/AutoChangeLog-pr-3994.yml new file mode 100644 index 000000000000..f0a6e3cdf5b5 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-3994.yml @@ -0,0 +1,7 @@ +author: Aylong +changes: + - {rscadd: Added a blinking background icon to vote action buttons} + - {rscadd: Added boxed message blocks and fieldset message blocks} + - {rscadd: Added a boxed message block for votes and a fieldset message block for + vote results} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-4028.yml b/html/changelogs/AutoChangeLog-pr-4028.yml new file mode 100644 index 000000000000..897a2f04de12 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4028.yml @@ -0,0 +1,4 @@ +author: Erikafox +changes: + - {rscadd: You can now purchase high conductivity gauss rounds from the outpost.} +delete-after: true diff --git a/html/changelogs/AutoChangeLog-pr-4052.yml b/html/changelogs/AutoChangeLog-pr-4052.yml new file mode 100644 index 000000000000..a15c210dcc0b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-4052.yml @@ -0,0 +1,5 @@ +author: FalloutFalcon +changes: + - {refactor: lightly refactors the get path section of the cleanbot ai. Has the + byproduct of stoping the linter fail.} +delete-after: true diff --git a/icons/obj/ammunition/ammo_bullets.dmi b/icons/obj/ammunition/ammo_bullets.dmi index 6ac65ff5bb66..9a35253de3bc 100644 Binary files a/icons/obj/ammunition/ammo_bullets.dmi and b/icons/obj/ammunition/ammo_bullets.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index 543aea109b41..575a5e1c5699 100644 Binary files a/icons/obj/projectiles_impact.dmi and b/icons/obj/projectiles_impact.dmi differ diff --git a/icons/obj/projectiles_muzzle.dmi b/icons/obj/projectiles_muzzle.dmi index b8f311e2dea4..afce0784edf2 100644 Binary files a/icons/obj/projectiles_muzzle.dmi and b/icons/obj/projectiles_muzzle.dmi differ diff --git a/icons/obj/projectiles_tracer.dmi b/icons/obj/projectiles_tracer.dmi index 167e456e1573..d7d0147747f8 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss index 1acd0cf0094c..3c94228d5757 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-dark.scss @@ -39,6 +39,10 @@ a.popt { text-decoration: none; } +.center { + text-align: center; +} + /* POPUPS */ .popup { @@ -703,6 +707,10 @@ em { font-size: 60%; } +.smallish { + font-size: 80%; +} + .big { font-size: 185%; } @@ -895,14 +903,68 @@ em { margin-left: 3em; } -.examine_block { - background: #1b1c1e; - border: 1px solid #a4bad6; - margin: 0.5em; - padding: 0.5em 0.75em; -} - .tooltip { font-style: italic; border-bottom: 1px dashed #fff; } + +.fieldset_legend { + position: relative; + max-width: 95%; + font-size: 120%; + padding: 0.2em 0.5em; + background: #151515; // Chat background color + border: 1px solid; + border-color: inherit; + border-radius: 0.33em; + z-index: 1; + + // "Mask" a half of the border + // It very rough but it only possible way i see with IE compat + // Replace it with normal mask-image when 516 got stable + &:before { + content: ''; + position: absolute; + left: 0; + height: 1.15em; + width: 100%; + background: #151515; // Chat background color + transform: translateY(-50%) scaleX(1.05); + z-index: -1; + } +} + +.boxed_message { + background: hsl(220, 10%, 10%); + border: 2px solid; + border-left: 5px solid; + border-color: hsla(220, 40%, 75%, 0.25); + margin: 0.5em 0; + padding: 0.5em 0.75em; + border-radius: 0.33em; + + &.red_box { + background: hsl(0, 20%, 10%); + border-color: hsla(0, 100%, 50%, 0.5); + } + + &.green_box { + background: hsl(140, 20%, 10%); + border-color: hsla(120, 100%, 50%, 0.5); + } + + &.blue_box { + background: hsl(220, 20%, 10%); + border-color: hsla(225, 90%, 65%, 0.5); + } + + &.purple_box { + background: hsl(260, 25%, 12.5%); + border-color: hsla(260, 100%, 75%, 0.5); + } + + hr { + margin: 0.5em -0.75em; + border-color: inherit; + } +} diff --git a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss index 49ccc958d5cf..219a0ebc853a 100644 --- a/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss +++ b/tgui/packages/tgui-panel/styles/tgchat/chat-light.scss @@ -942,14 +942,40 @@ h2.alert { margin-left: 3em; } -.examine_block { - background: #f2f7fa; - border: 1px solid #111a27; - margin: 0.5em; - padding: 0.5em 0.75em; -} - .tooltip { font-style: italic; border-bottom: 1px dashed #000; } + +.fieldset_legend { + background: #ffffff; // Chat background color + + &:before { + background: #ffffff; // Chat background color + } +} + +.boxed_message { + background: hsl(220, 100%, 97.5%); + border-color: hsla(220, 75%, 25%, 0.5); + + &.red_box { + background: hsl(0, 100%, 97.5%); + border-color: hsla(0, 100%, 50%, 0.5); + } + + &.green_box { + background: hsl(140, 100%, 97.5%); + border-color: hsl(120, 100%, 33%, 0.5); + } + + &.blue_box { + background: hsl(220, 100%, 97.5%); + border-color: hsla(225, 100%, 50%, 0.5); + } + + &.purple_box { + background: hsl(260, 100%, 97.5%); + border-color: hsla(260, 100%, 50%, 0.5); + } +}