diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index 9aa16f91b5..79b3aa6540 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -175,10 +175,12 @@ L |= I else if(istype(I,/obj/)) - if(!sight_check || isInSight(I, O)) - L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) - if(include_objects) - L |= I + var/obj/check_obj = I + if(check_obj.show_messages) + if(!sight_check || isInSight(I, O)) + L |= recursive_content_check(I, L, recursion_limit - 1, client_check, sight_check, include_mobs, include_objects) + if(include_objects) + L |= I return L @@ -203,7 +205,8 @@ hear += M else if(istype(I,/obj/)) hear |= recursive_content_check(I, hear, 3, 1, 0, include_mobs, include_objects) - if(include_objects) + var/obj/O = I + if(O.show_messages && include_objects) hear += I return hear diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index d2cd41a940..4b4b129278 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -57,7 +57,7 @@ var/global/list/undershirt_t = list( "White tank top" = "u1", "Black tank top" = "u2", "Black shirt" = "u3", "White shirt" = "u4", "White shirt 2" = "shirt_white_s", "White tank top 2" = "tank_white_s", "Black shirt 2" = "shirt_black_s", "Grey shirt" = "shirt_grey_s", "Heart shirt" = "lover_s", - "I love NT shirt" = "ilovent_s", "White shortsleeve shirt" = "whiteshortsleeve_s", "Purple shirtsleeve shirt" = "purpleshortsleeve_s", + "I love NT shirt" = "ilovent_s", "White shortsleeve shirt" = "whiteshortsleeve_s", "Purple shortsleeve shirt" = "purpleshortsleeve_s", "Blue shortsleeve shirt" = "blueshortsleeve_s", "Green shortsleeve shirt" = "greenshortsleeve_s", "Black shortsleeve shirt" = "blackshortsleeve_s", "Blue shirt" = "blueshirt_s", "Red shirt" = "redshirt_s", "Yellow shirt" = "yellowshirt_s", "Green shirt" = "greenshirt_s", "Blue polo shirt" = "bluepolo_s", "Red polo shirt" = "redpolo_s", "White polo shirt" = "whitepolo_s", @@ -76,6 +76,7 @@ var/global/list/socks_t = list( //Backpacks var/global/list/backbaglist = list("Nothing", "Backpack", "Satchel", "Satchel Alt") +var/global/list/pdachoicelist = list("Default", "Slim", "Old") var/global/list/exclude_jobs = list(/datum/job/ai,/datum/job/cyborg) // Visual nets diff --git a/code/datums/mind.dm b/code/datums/mind.dm index 5d9a364871..c058e2ff5d 100644 --- a/code/datums/mind.dm +++ b/code/datums/mind.dm @@ -61,6 +61,9 @@ //put this here for easier tracking ingame var/datum/money_account/initial_account + + //used for antag tcrystal trading, more info in code\game\objects\items\telecrystals.dm + var/accept_tcrystals = 0 /datum/mind/New(var/key) src.key = key diff --git a/code/game/antagonist/outsider/mercenary.dm b/code/game/antagonist/outsider/mercenary.dm index 55d865b9fa..4c071130ad 100644 --- a/code/game/antagonist/outsider/mercenary.dm +++ b/code/game/antagonist/outsider/mercenary.dm @@ -44,9 +44,10 @@ var/datum/antagonist/mercenary/mercs player.equip_to_slot_or_del(new /obj/item/weapon/storage/box/engineer(player.back), slot_in_backpack) player.equip_to_slot_or_del(new /obj/item/weapon/reagent_containers/pill/cyanide(player), slot_in_backpack) player.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT + player.mind.accept_tcrystals = 1 if (player.mind == leader) - var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, 40) + var/obj/item/device/radio/uplink/U = new(player.loc, player.mind, DEFAULT_TELECRYSTAL_AMOUNT) player.put_in_hands(U) player.update_icons() diff --git a/code/game/antagonist/station/traitor.dm b/code/game/antagonist/station/traitor.dm index 1eb372d118..dcc7fa9df9 100644 --- a/code/game/antagonist/station/traitor.dm +++ b/code/game/antagonist/station/traitor.dm @@ -82,6 +82,7 @@ var/datum/antagonist/traitor/traitors spawn_uplink(traitor_mob) traitor_mob.mind.tcrystals = DEFAULT_TELECRYSTAL_AMOUNT + traitor_mob.mind.accept_tcrystals = 1 // Tell them about people they might want to contact. var/mob/living/carbon/human/M = get_nt_opposed() if(M && M != traitor_mob) diff --git a/code/game/atoms.dm b/code/game/atoms.dm index 9f8fe69202..109eeaf501 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -437,7 +437,7 @@ its easier to just keep the beam vertical. return 0 /atom/proc/checkpass(passflag) - return pass_flags&passflag + return (pass_flags&passflag) /atom/proc/isinspace() if(istype(get_turf(src), /turf/space)) @@ -455,10 +455,10 @@ its easier to just keep the beam vertical. for(var/I in see) if(isobj(I)) - spawn(0) - if(I) //It's possible that it could be deleted in the meantime. - var/obj/O = I - O.show_message( message, 1, blind_message, 2) + //spawn(0) + //if(I) //It's possible that it could be deleted in the meantime. + var/obj/O = I + O.show_message( message, 1, blind_message, 2) else if(ismob(I)) var/mob/M = I if(M.see_invisible >= invisibility) // Cannot view the invisible diff --git a/code/game/machinery/hologram.dm b/code/game/machinery/hologram.dm index 501ec06629..d34acd5d2d 100644 --- a/code/game/machinery/hologram.dm +++ b/code/game/machinery/hologram.dm @@ -35,6 +35,7 @@ var/const/HOLOPAD_MODE = RANGE_BASED name = "\improper AI holopad" desc = "It's a floor-mounted device for projecting holographic images. It is activated remotely." icon_state = "holopad0" + show_messages = 1 layer = TURF_LAYER+0.1 //Preventing mice and drones from sneaking under them. diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 240aa6783e..3aa221400b 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -206,7 +206,7 @@ else if(success) user << "You put some things in [S]." else - user << "You fail to pick anything up with [S]." + user << "You fail to pick anything up with \the [S]." else if(S.can_be_inserted(src)) S.handle_item_insertion(src) diff --git a/code/game/objects/items/devices/PDA/PDA.dm b/code/game/objects/items/devices/PDA/PDA.dm index 1935455f94..766a8cb2a9 100644 --- a/code/game/objects/items/devices/PDA/PDA.dm +++ b/code/game/objects/items/devices/PDA/PDA.dm @@ -13,6 +13,7 @@ var/global/list/obj/item/device/pda/PDAs = list() slot_flags = SLOT_ID | SLOT_BELT //Main variables + var/pdachoice = 3 var/owner = null var/default_cartridge = 0 // Access level defined by cartridge var/obj/item/weapon/cartridge/cartridge = null //current cartridge @@ -309,13 +310,22 @@ var/global/list/obj/item/device/pda/PDAs = list() * The Actual PDA */ -/obj/item/device/pda/New() +/obj/item/device/pda/New(var/mob/living/carbon/human/H) ..() PDAs += src PDAs = sortAtom(PDAs) if(default_cartridge) cartridge = new default_cartridge(src) new /obj/item/weapon/pen(src) + pdachoice = isnull(H) ? 1 : (ishuman(H) ? H.pdachoice : 1) + switch(pdachoice) + if(1) icon = 'icons/obj/pda.dmi' + if(2) icon = 'icons/obj/pda_slim.dmi' + if(3) icon = 'icons/obj/pda_old.dmi' + else + icon = 'icons/obj/pda_old.dmi' + log_debug("Invalid switch for PDA, defaulting to old PDA icons. [pdachoice] chosen.") + /obj/item/device/pda/proc/can_use() @@ -869,7 +879,7 @@ var/global/list/obj/item/device/pda/PDAs = list() overlays.Cut() if(new_message || new_news) - overlays += image('icons/obj/pda.dmi', "pda-r") + overlays += image(icon, "pda-r") /obj/item/device/pda/proc/detonate_act(var/obj/item/device/pda/P) //TODO: sometimes these attacks show up on the message server diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 356ee87f60..29c8377d43 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -5,6 +5,8 @@ item_state = "electronic" w_class = 2.0 slot_flags = SLOT_BELT + show_messages = 1 + var/flush = null origin_tech = list(TECH_DATA = 4, TECH_MATERIAL = 4) diff --git a/code/game/objects/items/devices/communicator/communicator.dm b/code/game/objects/items/devices/communicator/communicator.dm index 58457d55bd..11cc3a58a8 100644 --- a/code/game/objects/items/devices/communicator/communicator.dm +++ b/code/game/objects/items/devices/communicator/communicator.dm @@ -12,6 +12,7 @@ var/global/list/obj/item/device/communicator/all_communicators = list() icon_state = "communicator" w_class = 2.0 slot_flags = SLOT_ID | SLOT_BELT + show_messages = 1 origin_tech = list(TECH_ENGINEERING = 2, TECH_MAGNET = 2, TECH_BLUESPACE = 2, TECH_DATA = 2) matter = list(DEFAULT_WALL_MATERIAL = 30,"glass" = 10) diff --git a/code/game/objects/items/devices/floor_painter.dm b/code/game/objects/items/devices/floor_painter.dm index 1b087f1791..92515407d0 100644 --- a/code/game/objects/items/devices/floor_painter.dm +++ b/code/game/objects/items/devices/floor_painter.dm @@ -6,7 +6,7 @@ var/decal = "remove all decals" var/paint_dir = "precise" - var/paint_colour = "white" + var/paint_colour = "#FFFFFF" var/list/decals = list( "quarter-turf" = list("path" = /obj/effect/floor_decal/corner, "precise" = 1, "coloured" = 1), @@ -39,37 +39,6 @@ "northeast" = NORTHEAST, "precise" = 0 ) - var/list/paint_colours = list( - "white" = COLOR_WHITE, - "light gray" = COLOR_SILVER, - "dark gray" = COLOR_GRAY, - "blue-gray" = COLOR_BLUE_GRAY, - "pale blue-gray" = COLOR_PALE_BLUE_GRAY, - "green-gray" = COLOR_GREEN_GRAY, - "pale green-gray" = COLOR_PALE_GREEN_GRAY, - "red-gray" = COLOR_RED_GRAY, - "pale red-gray" = COLOR_PALE_RED_GRAY, - "purple-gray" = COLOR_PURPLE_GRAY, - "pale purple-gray" = COLOR_PALE_PURPLE_GRAY, - "black" = COLOR_BLACK, - "red" = COLOR_RED, - "dark red" = COLOR_MAROON, - "yellow" = COLOR_YELLOW, - "dark yellow" = COLOR_OLIVE, - "green" = COLOR_LIME, - "dark green" = COLOR_GREEN, - "cyan" = COLOR_CYAN, - "teal" = COLOR_TEAL, - "blue" = COLOR_BLUE, - "dark blue" = COLOR_NAVY, - "magenta" = COLOR_PINK, - "purple" = COLOR_PURPLE, - "orange" = COLOR_ORANGE, - "dark orange" = COLOR_DARK_ORANGE, - "dark brown" = COLOR_DARK_BROWN, - "brown" = COLOR_BROWN, - "pale brown" = COLOR_BEIGE - ) /obj/item/device/floor_painter/afterattack(var/atom/A, var/mob/user, proximity, params) if(!proximity) @@ -127,36 +96,25 @@ painting_dir = paint_dirs[paint_dir] var/painting_colour - if(paint_colour && !isnull(paint_colours[paint_colour]) && decal_data["coloured"]) - painting_colour = paint_colours[paint_colour] + if(decal_data["coloured"] && paint_colour) + painting_colour = paint_colour new painting_decal(F, painting_dir, painting_colour) -/obj/item/device/floor_painter/attack_self(mob/user as mob) - +/obj/item/device/floor_painter/attack_self(var/mob/user) var/choice = input("Do you wish to change the decal type, paint direction, or paint colour?") as null|anything in list("Decal","Direction", "Colour") - if(choice == "Decal") - var/new_decal = input("Select a decal.") as null|anything in decals - if(new_decal && !isnull(decals[new_decal])) - decal = new_decal - user << "You set \the [src] decal to '[decal]'." + choose_decal() else if(choice == "Direction") - var/new_dir = input("Select a direction.") as null|anything in paint_dirs - if(new_dir && !isnull(paint_dirs[new_dir])) - paint_dir = new_dir - user << "You set \the [src] direction to '[paint_dir]'." + choose_direction() else if(choice == "Colour") - var/new_colour = input("Select a colour.") as null|anything in paint_colours - if(new_colour && !isnull(paint_colours[new_colour])) - paint_colour = new_colour - user << "You set \the [src] colour to '[paint_colour]'." + choose_colour() /obj/item/device/floor_painter/examine(mob/user) ..(user) user << "It is configured to produce the '[decal]' decal with a direction of '[paint_dir]' using [paint_colour] paint." -/obj/item/device/floor_painter/verb/choose_colour(new_colour in paint_colours) +/obj/item/device/floor_painter/verb/choose_colour() set name = "Choose Colour" set desc = "Choose a floor painter colour." set category = "Object" @@ -164,12 +122,12 @@ if(usr.incapacitated()) return - - if(new_colour && !isnull(paint_colours[new_colour])) + var/new_colour = input(usr, "Choose a colour.", "Floor painter", paint_colour) as color|null + if(new_colour && new_colour != paint_colour) paint_colour = new_colour - usr << "You set \the [src] colour to '[paint_colour]'." + usr << "You set \the [src] to paint with a new colour." -/obj/item/device/floor_painter/verb/choose_decal(new_decal in decals) +/obj/item/device/floor_painter/verb/choose_decal() set name = "Choose Decal" set desc = "Choose a floor painter decal." set category = "Object" @@ -178,11 +136,12 @@ if(usr.incapacitated()) return + var/new_decal = input("Select a decal.") as null|anything in decals if(new_decal && !isnull(decals[new_decal])) decal = new_decal usr << "You set \the [src] decal to '[decal]'." -/obj/item/device/floor_painter/verb/choose_direction(new_dir in paint_dirs) +/obj/item/device/floor_painter/verb/choose_direction() set name = "Choose Direction" set desc = "Choose a floor painter direction." set category = "Object" @@ -191,6 +150,7 @@ if(usr.incapacitated()) return + var/new_dir = input("Select a direction.") as null|anything in paint_dirs if(new_dir && !isnull(paint_dirs[new_dir])) paint_dir = new_dir usr << "You set \the [src] direction to '[paint_dir]'." diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 67516404fd..fa2a8d4864 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -6,6 +6,8 @@ w_class = 2.0 slot_flags = SLOT_BELT origin_tech = list(TECH_DATA = 2) + show_messages = 1 + var/obj/item/device/radio/radio var/looking_for_personality = 0 var/mob/living/silicon/pai/pai diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index 16c810a8a0..da19137043 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -44,6 +44,7 @@ var/global/list/default_medbay_channels = list( throw_speed = 2 throw_range = 9 w_class = 2 + show_messages = 1 matter = list("glass" = 25,DEFAULT_WALL_MATERIAL = 75) var/const/FREQ_LISTENING = 1 diff --git a/code/game/objects/items/devices/scanners.dm b/code/game/objects/items/devices/scanners.dm index 25276b3c87..a4644e274f 100644 --- a/code/game/objects/items/devices/scanners.dm +++ b/code/game/objects/items/devices/scanners.dm @@ -133,7 +133,7 @@ REAGENT SCANNER else if (M.getBrainLoss() >= 100 || !M.has_brain()) user.show_message("Subject is brain dead.") else if (M.getBrainLoss() >= 60) - user.show_message("Severe brain damage detected. Subject likely to have mental retardation.") + user.show_message("Severe brain damage detected. Subject likely to have a traumatic brain injury!.") else if (M.getBrainLoss() >= 10) user.show_message("Significant brain damage detected. Subject may have had a concussion.") if(ishuman(M)) diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index e59d3e993b..2740831046 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -15,10 +15,12 @@ var/list/storedinfo = new/list() var/list/timestamp = new/list() var/canprint = 1 + flags = CONDUCT throwforce = 2 throw_speed = 4 throw_range = 20 + show_messages = 1 /obj/item/device/taperecorder/hear_talk(mob/living/M as mob, msg, var/verb="says", datum/language/speaking=null) if(recording) diff --git a/code/game/objects/items/devices/telecrystal.dm b/code/game/objects/items/devices/telecrystal.dm new file mode 100644 index 0000000000..089f0677ae --- /dev/null +++ b/code/game/objects/items/devices/telecrystal.dm @@ -0,0 +1,20 @@ +/* +Telecrystal item +Does nothing if not suitable antag type, checks for accept_tcrystals = 1 in a mob's mind. +For new antags, make sure to add "player.mind.accept_tcrystals = 1" if you want tradable tcrystals. +*/ +/obj/item/device/telecrystal + name = "red crystal" + desc = "A strange, red, glowing crystal." + icon = 'icons/obj/stock_parts.dmi' + icon_state = "telecrystal" + item_state = "telecrystal" + force = 5 + +/obj/item/device/telecrystal/attack_self(mob/user as mob) + if(user.mind.accept_tcrystals) //Checks to see if antag type allows for tcrystals + user.mind.tcrystals += 1 + user.drop_from_inventory(src) + qdel(src) + return + \ No newline at end of file diff --git a/code/game/objects/items/devices/uplink_items.dm b/code/game/objects/items/devices/uplink_items.dm index 377dad5f17..38811833cd 100644 --- a/code/game/objects/items/devices/uplink_items.dm +++ b/code/game/objects/items/devices/uplink_items.dm @@ -385,6 +385,12 @@ datum/uplink_item/dd_SortValue() item_cost = 3 path = /obj/item/weapon/storage/secure/briefcase/money desc = "A briefcase with 10,000 untraceable thalers for funding your sneaky activities." + +/datum/uplink_item/item/tools/crystal + name = "Tradable Crystal" + item_cost = 1 + path = /obj/item/device/telecrystal + desc = "A telecrystal that can be transferred from one user to another. Be sure not to give it to just anyone." /*********** * Implants * diff --git a/code/game/objects/items/weapons/extinguisher.dm b/code/game/objects/items/weapons/extinguisher.dm index 22d12f9fd8..e2ec23be7c 100644 --- a/code/game/objects/items/weapons/extinguisher.dm +++ b/code/game/objects/items/weapons/extinguisher.dm @@ -14,9 +14,9 @@ matter = list(DEFAULT_WALL_MATERIAL = 90) attack_verb = list("slammed", "whacked", "bashed", "thunked", "battered", "bludgeoned", "thrashed") - var/spray_particles = 6 - var/spray_amount = 2 //units of liquid per particle - var/max_water = 240 + var/spray_particles = 3 + var/spray_amount = 10 //units of liquid per particle + var/max_water = 300 var/last_use = 1.0 var/safety = 1 var/sprite_name = "fire_extinguisher" @@ -30,8 +30,8 @@ throwforce = 2 w_class = 2.0 force = 3.0 - max_water = 120 - spray_particles = 5 + max_water = 150 + spray_particles = 3 sprite_name = "miniFE" /obj/item/weapon/extinguisher/New() diff --git a/code/game/objects/items/weapons/storage/storage.dm b/code/game/objects/items/weapons/storage/storage.dm index 78665633cf..3cb92b0a3c 100644 --- a/code/game/objects/items/weapons/storage/storage.dm +++ b/code/game/objects/items/weapons/storage/storage.dm @@ -9,6 +9,8 @@ name = "storage" icon = 'icons/obj/storage.dmi' w_class = 3 + show_messages = 1 + var/list/can_hold = new/list() //List of objects which this item can store (if set, it can't store anything else) var/list/cant_hold = new/list() //List of objects which this item can't store (in effect only if can_hold isn't set) var/list/is_seeing = new/list() //List of mobs which are currently seeing the contents of this item's storage @@ -225,7 +227,7 @@ /obj/item/weapon/storage/proc/can_be_inserted(obj/item/W as obj, stop_messages = 0) if(!istype(W)) return //Not an item - if(!usr.canUnEquip(W)) + if(usr.isEquipped(W) && !usr.canUnEquip(W)) return 0 if(src.loc == W) diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index 8b4e93ec4d..f94f2d5313 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -14,6 +14,7 @@ var/damtype = "brute" var/force = 0 var/armor_penetration = 0 + var/show_messages /obj/Destroy() processing_objects -= src diff --git a/code/game/objects/structures/signs.dm b/code/game/objects/structures/signs.dm index 6fdf367d5d..8c0b7aaa25 100644 --- a/code/game/objects/structures/signs.dm +++ b/code/game/objects/structures/signs.dm @@ -138,7 +138,7 @@ /obj/structure/sign/kiddieplaque name = "\improper AI developers plaque" - desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be retarded. Beneath the image, someone has scratched the word \"PACKETS\"" + desc = "Next to the extremely long list of names and job titles, there is a drawing of a little child. The child appears to be developmentally disabled. Beneath the image, someone has scratched the word \"PACKETS\"" icon_state = "kiddieplaque" /obj/structure/sign/atmosplaque diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 19302f8d30..256eef4e05 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -195,7 +195,8 @@ var/list/admin_verbs_debug = list( /client/proc/Jump, /client/proc/jumptomob, /client/proc/jumptocoord, - /client/proc/dsay + /client/proc/dsay, + /client/proc/admin_ghost /*allows us to ghost/reenter body at will*/ ) var/list/admin_verbs_paranoid_debug = list( @@ -305,7 +306,9 @@ var/list/admin_verbs_mod = list( /client/proc/check_antagonists, /client/proc/jobbans, /client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/ - /datum/admins/proc/paralyze_mob + /datum/admins/proc/paralyze_mob, + /client/proc/cmd_admin_direct_narrate, + /client/proc/allow_character_respawn /* Allows a ghost to respawn */ ) var/list/admin_verbs_mentor = list( diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 9d9919e4ed..83a2f3b370 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -290,7 +290,7 @@ - [M_name] - [M_rname] - [M_key] ([M_job]) + [M_name] - [M_rname] - [M_key] ([M_job])
diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index e9772fe907..014cd8988f 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -123,7 +123,7 @@ set name = "Direct Narrate" if(!holder) - src << "Only administrators may use this command." + src << "Only administrators and moderators may use this command." return if(!M) @@ -256,9 +256,9 @@ Ccomp's first proc. /client/proc/allow_character_respawn() set category = "Special Verbs" set name = "Allow player to respawn" - set desc = "Let's the player bypass the 30 minute wait to respawn or allow them to re-enter their corpse." + set desc = "Let's the player bypass the 15 minute wait to respawn or allow them to re-enter their corpse." if(!holder) - src << "Only administrators may use this command." + src << "Only administrators and moderators may use this command." var/list/ghosts= get_ghosts(1,1) var/target = input("Please, select a ghost!", "COME BACK TO LIFE!", null, null) as null|anything in ghosts diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index 6139f30a1b..e4a0eba8e1 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -7,6 +7,7 @@ S["undershirt"] >> pref.undershirt S["socks"] >> pref.socks S["backbag"] >> pref.backbag + S["pdachoice"] >> pref.pdachoice S["gear"] >> pref.gear /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) @@ -14,10 +15,12 @@ S["undershirt"] << pref.undershirt S["socks"] << pref.socks S["backbag"] << pref.backbag + S["pdachoice"] << pref.pdachoice S["gear"] << pref.gear /datum/category_item/player_setup_item/general/equipment/sanitize_character() pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) + pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) if(!islist(pref.gear)) pref.gear = list() @@ -48,6 +51,7 @@ . += "Undershirt: [get_key_by_value(undershirt_t,pref.undershirt)]
" . += "Socks: [get_key_by_value(socks_t,pref.socks)]
" . += "Backpack Type: [backbaglist[pref.backbag]]
" + . += "PDA Type: [pdachoicelist[pref.pdachoice]]
" . += "
Custom Loadout:
" var/total_cost = 0 @@ -109,6 +113,12 @@ pref.backbag = backbaglist.Find(new_backbag) return TOPIC_REFRESH + else if(href_list["change_pda"]) + var/new_pdachoice = input(user, "Choose your character's style of PDA:", "Character Preference", pdachoicelist[pref.pdachoice]) as null|anything in pdachoicelist + if(!isnull(new_pdachoice) && CanUseTopic(user)) + pref.pdachoice = pdachoicelist.Find(new_pdachoice) + return TOPIC_REFRESH + else if(href_list["add_loadout"]) var/total_cost = 0 for(var/gear_name in pref.gear) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index ab3778b828..e019291adc 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -34,6 +34,7 @@ datum/preferences var/undershirt //undershirt type var/socks //socks type var/backbag = 2 //backpack type + var/pdachoice = 3 //PDA type var/h_style = "Bald" //Hair type var/r_hair = 0 //Hair color var/g_hair = 0 //Hair color @@ -340,6 +341,10 @@ datum/preferences backbag = 1 //Same as above character.backbag = backbag + if(pdachoice > 3 || pdachoice < 1) + pdachoice = 1 + character.pdachoice = pdachoice + character.update_body() /datum/preferences/proc/open_load_dialog(mob/user) diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index feb9ee8d01..d2f11e27a8 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -516,6 +516,8 @@ BLIND // can't see anything slot_flags = SLOT_ICLOTHING armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0) w_class = 3 + show_messages = 1 + var/has_sensor = 1 //For the crew computer 2 = unable to change mode var/sensor_mode = 0 /* diff --git a/code/modules/clothing/under/accessories/storage.dm b/code/modules/clothing/under/accessories/storage.dm index a4877bb65d..2342010ce6 100644 --- a/code/modules/clothing/under/accessories/storage.dm +++ b/code/modules/clothing/under/accessories/storage.dm @@ -3,6 +3,8 @@ desc = "Used to hold things when you don't have enough hands." icon_state = "webbing" slot = "utility" + show_messages = 1 + var/slots = 3 var/obj/item/weapon/storage/internal/hold w_class = 3.0 diff --git a/code/modules/clothing/under/shorts.dm b/code/modules/clothing/under/shorts.dm index b870b49d59..4ad336aa26 100644 --- a/code/modules/clothing/under/shorts.dm +++ b/code/modules/clothing/under/shorts.dm @@ -68,8 +68,8 @@ /obj/item/clothing/under/shorts/jeans/black name = "black jeans shorts" - icon_state = "black_shorts" - worn_state = "black_shorts" + icon_state = "blackpants_shorts" + worn_state = "blackpants_shorts" /obj/item/clothing/under/shorts/jeans/black/female icon_state = "black_shorts_f" @@ -78,9 +78,9 @@ /obj/item/clothing/under/shorts/khaki name = "khaki shorts" desc = "For that island getaway. It's five o'clock somewhere, right?" - icon_state = "khaki_shorts" - worn_state = "khaki_shorts" + icon_state = "tanpants_shorts" + worn_state = "tanpants_shorts" /obj/item/clothing/under/shorts/khaki/female icon_state = "khaki_shorts_f" - worn_state = "khaki_shorts_f" \ No newline at end of file + worn_state = "khaki_shorts_f" diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm index 3e8592e9d0..d5f65385bf 100644 --- a/code/modules/mob/holder.dm +++ b/code/modules/mob/holder.dm @@ -27,16 +27,20 @@ var/list/holder_mob_icon_cache = list() ..() /obj/item/weapon/holder/process() + update_state() +/obj/item/weapon/holder/dropped() + ..() + spawn(1) + update_state() + +/obj/item/weapon/proc/update_state() if(istype(loc,/turf) || !(contents.len)) - for(var/mob/M in contents) - var/atom/movable/mob_container mob_container = M mob_container.forceMove(get_turf(src)) M.reset_view() - qdel(src) /obj/item/weapon/holder/proc/sync(var/mob/living/M) @@ -79,17 +83,23 @@ var/list/holder_mob_icon_cache = list() //Mob procs and vars for scooping up /mob/living/var/holder_type -/mob/living/proc/get_scooped(var/mob/living/carbon/grabber) +/mob/living/proc/get_scooped(var/mob/living/carbon/grabber, var/self_grab) + if(!holder_type || buckled || pinned.len) return - var/obj/item/weapon/holder/H = new holder_type(loc) - src.loc = H - H.name = loc.name - H.attack_hand(grabber) + var/obj/item/weapon/holder/H = new holder_type(get_turf(src)) + src.forceMove(H) + grabber.put_in_hands(H) + + if(self_grab) + grabber << "\The [src] clambers onto you!" + src << "You climb up onto \the [grabber]!" + grabber.equip_to_slot_if_possible(H, slot_back, 0, 1) + else + grabber << "You scoop up \the [src]!" + src << "\The [grabber] scoops you up!" - grabber << "You scoop up [src]." - src << "[grabber] scoops you up." grabber.status_flags |= PASSEMOTES H.sync(src) return H diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index b2e8c3ca0e..c998ad1bd0 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -216,19 +216,20 @@ var/list/slot_equipment_priority = list( \ wear_mask = null update_inv_wear_mask(0) return + +/mob/proc/isEquipped(obj/item/I) + if(!I) + return 0 + return get_inventory_slot(I) != 0 /mob/proc/canUnEquip(obj/item/I) if(!I) //If there's nothing to drop, the drop is automatically successful. return 1 var/slot = get_inventory_slot(I) - if(slot && !I.mob_can_unequip(src, slot)) - return 0 - - drop_from_inventory(I) - return 1 + return slot && I.mob_can_unequip(src, slot) /mob/proc/get_inventory_slot(obj/item/I) - var/slot + var/slot = 0 for(var/s in slot_back to slot_tie) //kind of worries me if(get_equipped_item(s) == I) slot = s diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index a45f378ab4..50e0418766 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -235,8 +235,8 @@ M.visible_message("[M] tries to pat out [src]'s flames!", "You try to pat out [src]'s flames! Hot!") if(do_mob(M, src, 15)) + src.fire_stacks -= 0.5 if (prob(10) && (M.fire_stacks <= 0)) - src.fire_stacks -= 0.5 M.fire_stacks += 1 M.IgniteMob() if (M.on_fire) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4495ed4175..17fe2df713 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1372,8 +1372,8 @@ /mob/living/carbon/human/MouseDrop(var/atom/over_object) var/mob/living/carbon/human/H = over_object - if(holder_type && a_intent == "help" && istype(H) && H.a_intent == "help" && !issmall(H) && Adjacent(H)) - get_scooped(H) + if(holder_type && istype(H) && !H.lying && !issmall(H) && Adjacent(H)) + get_scooped(H, (usr == src)) return return ..() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 78dbee0552..22acad9445 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -36,6 +36,7 @@ var/undershirt = 0 //Which undershirt the player wants. var/socks = 0 //Which socks the player wants. var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. + var/pdachoice = 1 //Which PDA type the player has chosen. Default, Slim, or Old. // General information var/home_system = "" diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index e19795b641..5b79cde5de 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -274,9 +274,6 @@ O.owner = H /datum/species/proc/hug(var/mob/living/carbon/human/H,var/mob/living/target) - if (target.holder_type && target.a_intent == "help" && H.a_intent == "help") - target.get_scooped(H) - return var/t_him = "them" switch(target.gender) diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index 579ec2e6d6..f2974d8a16 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -413,8 +413,8 @@ return 0 // Handle being picked up. -/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber) - var/obj/item/weapon/holder/H = ..() +/mob/living/silicon/pai/get_scooped(var/mob/living/carbon/grabber, var/self_drop) + var/obj/item/weapon/holder/H = ..(grabber, self_drop) if(!istype(H)) return H.icon_state = "pai-[icon_state]" diff --git a/code/modules/mob/living/silicon/robot/robot_modules.dm b/code/modules/mob/living/silicon/robot/robot_modules.dm index 302b8eb101..a23d328bd3 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules.dm @@ -313,6 +313,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/crowbar(src) src.modules += new /obj/item/weapon/pickaxe/plasmacutter(src) src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/device/floor_painter(src) var/datum/matter_synth/metal = new /datum/matter_synth/metal() var/datum/matter_synth/plasteel = new /datum/matter_synth/plasteel() @@ -353,6 +354,7 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/device/analyzer(src) src.modules += new /obj/item/taperoll/engineering(src) src.modules += new /obj/item/weapon/gripper(src) + src.modules += new /obj/item/device/lightreplacer(src) src.modules += new /obj/item/device/pipe_painter(src) src.emag = new /obj/item/borg/stun(src) @@ -676,6 +678,8 @@ var/global/list/robot_modules = list( src.modules += new /obj/item/weapon/gripper(src) src.modules += new /obj/item/weapon/soap(src) src.modules += new /obj/item/weapon/extinguisher(src) + src.modules += new /obj/item/device/pipe_painter(src) + src.modules += new /obj/item/device/floor_painter(src) robot.internals = new/obj/item/weapon/tank/jetpack/carbondioxide(src) src.modules += robot.internals diff --git a/code/modules/mob/living/simple_animal/friendly/cat.dm b/code/modules/mob/living/simple_animal/friendly/cat.dm index 7c25296a5e..c55939e6ae 100644 --- a/code/modules/mob/living/simple_animal/friendly/cat.dm +++ b/code/modules/mob/living/simple_animal/friendly/cat.dm @@ -135,11 +135,6 @@ else return ..() -/mob/living/simple_animal/cat/get_scooped(var/mob/living/carbon/grabber) - if (stat >= DEAD) - return //since the holder icon looks like a living cat - ..() - //Basic friend AI /mob/living/simple_animal/cat/fluff var/mob/living/carbon/human/friend diff --git a/code/modules/mob/living/simple_animal/friendly/mouse.dm b/code/modules/mob/living/simple_animal/friendly/mouse.dm index 0ea2a05dd4..37630abdb6 100644 --- a/code/modules/mob/living/simple_animal/friendly/mouse.dm +++ b/code/modules/mob/living/simple_animal/friendly/mouse.dm @@ -89,11 +89,6 @@ else return ..() -/mob/living/simple_animal/mouse/get_scooped(var/mob/living/carbon/grabber) - if (stat >= DEAD) - return - ..() - /mob/living/simple_animal/mouse/start_pulling(var/atom/movable/AM)//Prevents mouse from pulling things src << "You are too small to pull anything." return diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index e6a0b277f6..6facb98164 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -88,10 +88,10 @@ for(var/I in see) if(isobj(I)) - spawn(0) - if(I) //It's possible that it could be deleted in the meantime. - var/obj/O = I - O.show_message( message, 1, blind_message, 2) + //spawn(0) + //if(I) //It's possible that it could be deleted in the meantime. + var/obj/O = I + O.show_message( message, 1, blind_message, 2) else if(ismob(I)) var/mob/M = I if(self_message && M==src) diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index 6621e0f102..575ded6138 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -216,7 +216,7 @@ var/const/BLOOD_VOLUME_SURVIVE = 122 //Transfers blood from reagents to vessel, respecting blood types compatability. /mob/living/carbon/human/inject_blood(var/datum/reagent/blood/injected, var/amount) - if(should_have_organ(O_HEART)) + if(!should_have_organ(O_HEART)) reagents.add_reagent("blood", amount, injected.data) reagents.update_total() return diff --git a/config/admin_ranks.txt b/config/admin_ranks.txt deleted file mode 100644 index 24ccd10bf0..0000000000 --- a/config/admin_ranks.txt +++ /dev/null @@ -1,43 +0,0 @@ -######################################################################################## -# ADMIN RANK DEFINES # -# The format of this is very simple. Rank name goes first. # -# Rank is CASE-SENSITIVE, all punctuation will be stripped so spaces don't matter. # -# Each rank is then followed by keywords with the prefix "+". # -# These keywords represent groups of verbs and abilities which are given to that rank. # -# +@ (or +prev) is a special shorthand which adds all the rights of the rank above it. # -# Ranks with no keywords will just be given the most basic verbs and abilities ~Carn # -######################################################################################## -# PLEASE NOTE: depending on config options, some abilities will be unavailable regardless if you have permission to use them! -# ALSO NOTE: this is a WorkInProgress at the moment. Most of this is just arbitrarily thrown in whatever group because LoadsaWork2Do+LittleTime. -# I'll be doing more moving around as feedback comes in. So be sure to check the notes after updates. - -# KEYWORDS: -# +ADMIN = general admin tools, verbs etc -# +FUN = events, other event-orientated actions. Access to the fun secrets in the secrets panel. -# +BAN = the ability to ban, jobban and fullban -# +STEALTH = the ability to stealthmin (make yourself appear with a fake name to everyone but other admins -# +POSSESS = the ability to possess objects -# +REJUV (or +REJUVINATE) = the ability to heal, respawn, modify damage and use godmode -# +BUILD (or +BUILDMODE) = the ability to use buildmode -# +SERVER = higher-risk admin verbs and abilities, such as those which affect the server configuration. -# +DEBUG = debug tools used for diagnosing and fixing problems. It's useful to give this to coders so they can investigate problems on a live server. -# +VAREDIT = everyone may view viewvars/debugvars/whatever you call it. This keyword allows you to actually EDIT those variables. -# +RIGHTS (or +PERMISSIONS) = allows you to promote and/or demote people. -# +SOUND (or +SOUNDS) = allows you to upload and play sounds -# +SPAWN (or +CREATE) = mob transformations, spawning of most atoms including mobs (high-risk atoms, e.g. blackholes, will require the +FUN flag too) -# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag - -Moderator +MOD -Admin Candidate +ADMIN -Trial Admin +@ +SPAWN +REJUV +VAREDIT +BAN #left for readability -Badmin +@ +POSSESS +BUILDMODE +SERVER +FUN #left for readability -Game Admin +@ +STEALTH +SOUNDS +DEBUG -Retired Admin +ADMIN +STEALTH - -Host +EVERYTHING -Head Admin +EVERYTHING -Head Developer +EVERYTHING - -Developer +DEBUG +VAREDIT +SERVER +SPAWN +REJUV +POSSESS +BUILDMODE -Dev Mod +@ +MOD - diff --git a/html/changelog.html b/html/changelog.html index 38baf19051..ee8d18875d 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -1,7 +1,7 @@ - Baystation 12 Changelog + Polaris Changelog