diff --git a/code/defines/obj/weapon.dm b/code/defines/obj/weapon.dm index d10073b53ff..d00e17fe4c1 100644 --- a/code/defines/obj/weapon.dm +++ b/code/defines/obj/weapon.dm @@ -511,7 +511,7 @@ /obj/item/research name = "research debugging device" - desc = "Instant research tool. For testing purposes only." + desc = "Instant research tool. For testing purposes only. PUTS ALL RESEARCH TECHS TO MAX, EVEN ILLEGAL AND ARCANE." icon = 'icons/obj/stock_parts.dmi' icon_state = "smes_coil" origin_tech = list(TECH_MATERIAL = 19, TECH_ENGINEERING = 19, TECH_PHORON = 19, TECH_POWER = 19, TECH_BLUESPACE = 19, TECH_BIO = 19, TECH_COMBAT = 19, TECH_MAGNET = 19, TECH_DATA = 19, TECH_ILLEGAL = 19, TECH_ARCANE = 19) diff --git a/code/game/objects/items/stacks/medical.dm b/code/game/objects/items/stacks/medical.dm index ce683034784..8b9d61c2bc6 100644 --- a/code/game/objects/items/stacks/medical.dm +++ b/code/game/objects/items/stacks/medical.dm @@ -85,6 +85,11 @@ Contains: apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg') drop_sound = 'sound/items/drop/gloves.ogg' +/obj/item/stack/medical/bruise_pack/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -153,6 +158,11 @@ Contains: apply_sounds = list('sound/items/ointment.ogg') drop_sound = 'sound/items/drop/herb.ogg' +/obj/item/stack/medical/ointment/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -197,6 +207,11 @@ Contains: origin_tech = list(TECH_BIO = 1) apply_sounds = list('sound/items/rip1.ogg','sound/items/rip2.ogg','sound/items/tape.ogg') +/obj/item/stack/medical/advanced/bruise_pack/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/advanced/bruise_pack/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -264,6 +279,11 @@ Contains: origin_tech = list(TECH_BIO = 1) apply_sounds = list('sound/items/ointment.ogg') +/obj/item/stack/medical/advanced/ointment/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/advanced/ointment/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -307,6 +327,11 @@ Contains: var/open = 0 var/used = 0 +/obj/item/stack/medical/advanced/bruise_pack/spaceklot/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/advanced/bruise_pack/spaceklot/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -354,6 +379,11 @@ Contains: drop_sound = 'sound/items/drop/hat.ogg' var/list/splintable_organs = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG, BP_L_HAND, BP_R_HAND, BP_R_FOOT, BP_L_FOOT) +/obj/item/stack/medical/splint/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/medical/splint/attack(mob/living/carbon/M as mob, mob/user as mob) if(..()) return 1 @@ -398,4 +428,4 @@ Contains: desc = "For holding your limbs in place with duct tape and scrap metal." icon_state = "tape-splint" amount = 1 - splintable_organs = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG) + splintable_organs = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG) \ No newline at end of file diff --git a/code/game/objects/items/stacks/rods.dm b/code/game/objects/items/stacks/rods.dm index c56778a3f07..2dd596eca1c 100644 --- a/code/game/objects/items/stacks/rods.dm +++ b/code/game/objects/items/stacks/rods.dm @@ -31,6 +31,11 @@ var/global/list/datum/stack_recipe/rod_recipes = list( lock_picking_level = 3 drop_sound = 'sound/items/drop/sword.ogg' +/obj/item/stack/rods/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/rods/cyborg name = "metal rod synthesizer" desc = "A device that makes metal rods." diff --git a/code/game/objects/items/stacks/telecrystal.dm b/code/game/objects/items/stacks/telecrystal.dm index 5936f227ac0..05018fc3eb0 100644 --- a/code/game/objects/items/stacks/telecrystal.dm +++ b/code/game/objects/items/stacks/telecrystal.dm @@ -10,6 +10,21 @@ flags = NOBLUDGEON origin_tech = list(TECH_MATERIAL = 6, TECH_BLUESPACE = 4) +/obj/item/stack/telecrystal/five/Initialize() + . = ..() + amount = 5 + update_icon() + +/obj/item/stack/telecrystal/twentyfive/Initialize() + . = ..() + amount = 25 + update_icon() + +/obj/item/stack/telecrystal/fifty/Initialize() + . = ..() + amount = 50 + update_icon() + /obj/item/stack/telecrystal/afterattack(var/obj/item/I as obj, mob/user as mob, proximity) if(!proximity) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index c7c356a19bb..88e81cf3308 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -1,6 +1,6 @@ //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless var/list/admin_verbs_default = list( - /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags, + /datum/admins/proc/show_player_panel, //shows an interface for individual players, with various links (links require additional flags), /client/proc/player_panel_modern, /client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/ /client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/ @@ -41,6 +41,7 @@ var/list/admin_verbs_admin = list( /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 centcomm, /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, + /client/proc/cmd_admin_local_narrate, //sends text to all mobs within 7 tiles of src.mob /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, /client/proc/cmd_admin_create_centcom_report, /client/proc/check_ai_laws, //shows AI and borg laws, @@ -78,6 +79,7 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, /client/proc/allow_character_respawn, // Allows a ghost to respawn , + /client/proc/allow_stationbound_reset, /client/proc/event_manager_panel, /client/proc/empty_ai_core_toggle_latejoin, /client/proc/aooc, @@ -263,6 +265,7 @@ var/list/admin_verbs_hideable = list( /client/proc/admin_call_shuttle, /client/proc/admin_cancel_shuttle, /client/proc/cmd_admin_direct_narrate, + /client/proc/cmd_admin_local_narrate, /client/proc/cmd_admin_world_narrate, /client/proc/play_local_sound, /client/proc/play_sound, diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm index 15dab4798eb..b3e6f7053c8 100644 --- a/code/modules/admin/verbs/bluespacetech.dm +++ b/code/modules/admin/verbs/bluespacetech.dm @@ -60,7 +60,7 @@ bst.equip_to_slot_or_del(new /obj/item/clothing/shoes/black/bst(bst), slot_shoes) bst.equip_to_slot_or_del(new /obj/item/clothing/head/beret(bst), slot_head) bst.equip_to_slot_or_del(new /obj/item/clothing/glasses/sunglasses/bst(bst), slot_glasses) - bst.equip_to_slot_or_del(new /obj/item/storage/belt/utility/full(bst), slot_belt) + bst.equip_to_slot_or_del(new /obj/item/storage/belt/utility/very_full(bst), slot_belt) bst.equip_to_slot_or_del(new /obj/item/clothing/gloves/swat/bst(bst), slot_gloves) if(bst.backbag == 1) bst.equip_to_slot_or_del(new /obj/item/storage/box/ids(bst), slot_r_hand) @@ -68,7 +68,8 @@ bst.equip_to_slot_or_del(new /obj/item/storage/box/ids(bst.back), slot_in_backpack) bst.equip_to_slot_or_del(new /obj/item/device/t_scanner(bst.back), slot_in_backpack) bst.equip_to_slot_or_del(new /obj/item/device/pda/captain/bst(bst.back), slot_in_backpack) - bst.equip_to_slot_or_del(new /obj/item/device/multitool(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/device/healthanalyzer(bst.back), slot_in_backpack) + bst.equip_to_slot_or_del(new /obj/item/research(bst.back), slot_in_backpack) var/obj/item/storage/box/pills = new /obj/item/storage/box(null, TRUE) pills.name = "adminordrazine" diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 6d472d52ca5..eddf1c47988 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -118,6 +118,33 @@ message_admins("\bold GlobalNarrate: [key_name_admin(usr)] : [msg]
", 1) feedback_add_details("admin_verb","GLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/cmd_admin_local_narrate() + set category = "Special Verbs" + set name = "Local Narrate" + + if(!check_rights(R_ADMIN, TRUE)) + return + + var/list/mob/message_mobs = list() + var/choice = alert(usr, "Local narrate will send a plain message to mobs. Do you want the mobs messaged to be only ones that you can see, or ignore blocked vision and message everyone within seven tiles of you?", "Narrate Selection", "In my view", "In range of me", "Cancel") + if(choice != "Cancel") + if(choice == "In my view") + message_mobs = mobs_in_view(view, src.mob) + else + for(var/mob/M in range(view, src.mob)) + message_mobs += M + else + return + + var/msg = html_decode(sanitize(input("Message:", text("Enter the text you wish to appear to everyone within seven tiles of you:")) as text)) + if(!msg) + return + for(var/M in message_mobs) + to_chat(M, msg) + log_admin("LocalNarrate: [key_name(usr)] : [msg]", admin_key = key_name(usr)) + message_admins("\bold LocalNarrate: [key_name_admin(usr)] : [msg]
", 1) + feedback_add_details("admin_verb", "LCLN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + /client/proc/cmd_admin_direct_narrate(var/mob/M) // Targetted narrate -- TLE set category = "Special Verbs" set name = "Direct Narrate" @@ -296,6 +323,29 @@ proc/get_ghosts(var/notify = 0,var/what = 2, var/client/C = null) log_admin("[key_name(usr)] allowed [key_name(G)] to bypass the 30 minute respawn limit",admin_key=key_name(usr),ckey=key_name(G)) message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(G)] to bypass the 30 minute respawn limit", 1) +/client/proc/allow_stationbound_reset(mob/living/silicon/robot/R in range(world.view)) + set category = "Special Verbs" + set name = "Allow Stationbound Reset" + set desc = "Select a stationbound to reset its module." + + if(!check_rights(R_ADMIN, TRUE)) + return + if(!R || !istype(R)) + return + + R.uneq_all() + R.mod_type = initial(R.mod_type) + R.hands.icon_state = initial(R.hands.icon_state) + + R.module.Reset(R) + QDEL_NULL(R.module) + R.updatename("Default") + + to_chat(R, FONT_LARGE(SPAN_NOTICE("An admin has allowed you to reset your module."))) + + log_admin("[key_name(usr)] allowed [key_name(R)] to reset themselves as a stationbound.", admin_key = key_name(usr), ckey = key_name(R)) + message_admins("Admin [key_name_admin(usr)] allowed [key_name_admin(R)] to reset themselves as a stationbound.", 1) + /client/proc/toggle_antagHUD_use() set category = "Server" diff --git a/code/modules/events/supply_drop.dm b/code/modules/events/supply_drop.dm index d9b2ac71679..5c0986e2c4a 100644 --- a/code/modules/events/supply_drop.dm +++ b/code/modules/events/supply_drop.dm @@ -19,8 +19,7 @@ new /obj/structure/closet/crate/loot(spawn_loc, rarity, quantity) log_and_message_admins("Unusual container spawned at (JMP)") else - var/obj/effect/golemrune/rune = new /obj/effect/golemrune(spawn_loc) - rune.golem_type = pick(golem_types) + var/obj/effect/golemrune/rune = new /obj/effect/golemrune/random_type(spawn_loc) log_and_message_admins("Bluespace Golem rune ([rune.golem_type]) spawned at (JMP)") spark(spawn_loc, 10, alldirs) diff --git a/code/modules/materials/material_sheets.dm b/code/modules/materials/material_sheets.dm index e35fa80a90f..9099f7acf83 100644 --- a/code/modules/materials/material_sheets.dm +++ b/code/modules/materials/material_sheets.dm @@ -88,6 +88,11 @@ default_type = MATERIAL_IRON apply_colour = 1 +/obj/item/stack/material/iron/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/sandstone name = "sandstone brick" icon_state = "sheet-sandstone" @@ -95,23 +100,43 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/boots.ogg' +/obj/item/stack/material/sandstone/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/marble name = "marble brick" icon_state = "sheet-marble" default_type = MATERIAL_MARBLE drop_sound = 'sound/items/drop/boots.ogg' +/obj/item/stack/material/marble/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/diamond name = "diamond" icon_state = "sheet-diamond" default_type = MATERIAL_DIAMOND drop_sound = 'sound/items/drop/glass.ogg' +/obj/item/stack/material/diamond/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/uranium name = "uranium" icon_state = "sheet-uranium" default_type = MATERIAL_URANIUM +/obj/item/stack/material/uranium/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/phoron name = "solid phoron" icon_state = "sheet-phoron" @@ -119,6 +144,11 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/glass.ogg' +/obj/item/stack/material/phoron/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/plastic name = "plastic" icon_state = "sheet-plastic" @@ -127,23 +157,43 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/card.ogg' +/obj/item/stack/material/plastic/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/gold name = "gold" icon_state = "sheet-gold" default_type = MATERIAL_GOLD icon_has_variants = TRUE +/obj/item/stack/material/gold/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/osmium name = "osmium" icon_state = "sheet-silver" default_type = MATERIAL_OSMIUM +/obj/item/stack/material/osmium/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/silver name = "silver" icon_state = "sheet-silver" default_type = MATERIAL_SILVER icon_has_variants = TRUE +/obj/item/stack/material/silver/full/Initialize() + . = ..() + amount = max_amount + update_icon() + //Valuable resource, cargo can sell it. /obj/item/stack/material/platinum name = "platinum" @@ -151,12 +201,22 @@ default_type = MATERIAL_PLATINUM icon_has_variants = TRUE +/obj/item/stack/material/platinum/full/Initialize() + . = ..() + amount = max_amount + update_icon() + //Extremely valuable to Research. /obj/item/stack/material/mhydrogen name = "metallic hydrogen" icon_state = "sheet-mythril" default_type = MATERIAL_HYDROGEN_METALLIC +/obj/item/stack/material/mhydrogen/full/Initialize() + . = ..() + amount = max_amount + update_icon() + //Fuel for MRSPACMAN generator. /obj/item/stack/material/tritium name = "tritium" @@ -164,18 +224,33 @@ default_type = MATERIAL_TRITIUM apply_colour = 1 +/obj/item/stack/material/tritium/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/osmium name = "osmium" icon_state = "sheet-silver" default_type = MATERIAL_OSMIUM apply_colour = 1 +/obj/item/stack/material/osmium/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/steel name = DEFAULT_WALL_MATERIAL icon_state = "sheet-metal" default_type = DEFAULT_WALL_MATERIAL icon_has_variants = TRUE +/obj/item/stack/material/steel/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/plasteel name = "plasteel" icon_state = "sheet-plasteel" @@ -183,22 +258,42 @@ default_type = MATERIAL_PLASTEEL icon_has_variants = TRUE +/obj/item/stack/material/plasteel/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/wood name = "wooden plank" icon_state = "sheet-wood" default_type = MATERIAL_WOOD drop_sound = 'sound/items/drop/wooden.ogg' +/obj/item/stack/material/wood/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/woodlog name = "log" icon_state = "sheet-wood" default_type = MATERIAL_WOOD_LOG +/obj/item/stack/material/woodlog/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/woodbranch name = "branch" icon_state = "sheet-wood" default_type = MATERIAL_WOOD_BRANCH +/obj/item/stack/material/woodbranch/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/cloth name = "cloth" @@ -207,6 +302,11 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/clothing.ogg' +/obj/item/stack/material/cloth/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/cloth/attackby(obj/item/I, mob/user) if(is_sharp(I)) user.visible_message("\The [user] begins cutting up [src] with [I].", "You begin cutting up [src] with [I].") @@ -224,6 +324,11 @@ default_type = MATERIAL_CARDBOARD drop_sound = 'sound/items/drop/box.ogg' +/obj/item/stack/material/cardboard/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/leather name = "leather" desc = "The by-product of mob grinding." @@ -232,6 +337,11 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/leather.ogg' +/obj/item/stack/material/leather/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/glass name = "glass" icon_state = "sheet-glass" @@ -239,18 +349,33 @@ icon_has_variants = TRUE drop_sound = 'sound/items/drop/glass.ogg' +/obj/item/stack/material/glass/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/glass/wired name = "wired glass" icon = 'icons/obj/stacks/tiles.dmi' icon_state = MATERIAL_GLASS_WIRED default_type = "wired glass" +/obj/item/stack/material/glass/wired/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/glass/reinforced name = "reinforced glass" icon_state = "sheet-rglass" item_state = "sheet-rglass" default_type = MATERIAL_GLASS_REINFORCED +/obj/item/stack/material/glass/reinforced/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/glass/phoronglass name = "borosilicate glass" desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures" @@ -259,6 +384,11 @@ item_state = "sheet-pglass" default_type = MATERIAL_GLASS_PHORON +/obj/item/stack/material/glass/phoronglass/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/glass/phoronrglass name = "reinforced borosilicate glass" desc = "This sheet is special platinum-glass alloy designed to withstand large temperatures. It is reinforced with few rods." @@ -266,14 +396,30 @@ icon_state = "sheet-phoronrglass" item_state = "sheet-prglass" default_type = MATERIAL_GLASS_REINFORCED_PHORON + +/obj/item/stack/material/glass/phoronrglass/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/bronze name = "bronze" icon_state = "sheet-brass" default_type = "bronze" icon_has_variants = TRUE +/obj/item/stack/material/bronze/full/Initialize() + . = ..() + amount = max_amount + update_icon() + /obj/item/stack/material/titanium name = "titanium" icon_state = "sheet-titanium" default_type = MATERIAL_TITANIUM icon_has_variants = TRUE + +/obj/item/stack/material/titanium/full/Initialize() + . = ..() + amount = max_amount + update_icon() \ No newline at end of file diff --git a/code/modules/mob/living/carbon/slime/items.dm b/code/modules/mob/living/carbon/slime/items.dm index 3270d8f83c6..87f8cf02f35 100644 --- a/code/modules/mob/living/carbon/slime/items.dm +++ b/code/modules/mob/living/carbon/slime/items.dm @@ -240,6 +240,10 @@ var/list/global/golem_runes = list() var/datum/ghostspawner/human/golem/golem_spawner = SSghostroles.spawners[role_spawner] golem_spawner.enable() +/obj/effect/golemrune/random_type/Initialize() + . = ..() + golem_type = pick(golem_types) + /obj/effect/golemrune/Destroy() . = ..() golem_runes -= src diff --git a/html/changelogs/geeves-adminbus_fun.yml b/html/changelogs/geeves-adminbus_fun.yml new file mode 100644 index 00000000000..45a4a4660c6 --- /dev/null +++ b/html/changelogs/geeves-adminbus_fun.yml @@ -0,0 +1,10 @@ +author: Geeves + +delete-after: True + +changes: + - rscadd: "== ADMIN FACING CHANGES ==" + - rscadd: "Adds full variants of stacks of items in the spawn menu." + - rscadd: "Adds local narrate, which allows you to narrate to all mobs in a your view or your view range tile radius." + - rscadd: "Allows admins to reset stationbounds via right click or Special Verbs menu." + - rscadd: "Adds a random type golem rune to the spawn menu, if an admin wants to adminbus a random golem into a round." \ No newline at end of file