diff --git a/code/game/area/areas_vr.dm b/code/game/area/areas_vr.dm index 8d7b54bdf4..b2b67b089f 100644 --- a/code/game/area/areas_vr.dm +++ b/code/game/area/areas_vr.dm @@ -2,7 +2,8 @@ var/enter_message var/exit_message var/limit_mob_size = TRUE //If mob size is limited in the area. - var/block_suit_sensors = FALSE //If mob size is limited in the area. + var/block_suit_sensors = FALSE //If suit sensors are blocked in the area. + var/block_tracking = FALSE //If camera tracking is blocked in the area. var/turf/ceiling_type // Size of the area in open turfs, only calculated for indoors areas. diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index d30ec8a07e..d53e1fdbb7 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -228,7 +228,9 @@ var/obj/item/weapon/card/id/id = GetIdCard() if(id && id.prevent_tracking()) return TRACKING_TERMINATE - if(InvalidPlayerTurf(get_turf(src))) + var/turf/pos = get_turf(src) + var/area/B = pos?.loc // No cam tracking in dorms! + if(InvalidPlayerTurf(pos) || B.block_tracking) return TRACKING_TERMINATE if(invisibility >= INVISIBILITY_LEVEL_ONE) //cloaked return TRACKING_TERMINATE diff --git a/code/modules/events/spontaneous_appendicitis_vr.dm b/code/modules/events/spontaneous_appendicitis_vr.dm index 8612a21457..d4d34894b9 100644 --- a/code/modules/events/spontaneous_appendicitis_vr.dm +++ b/code/modules/events/spontaneous_appendicitis_vr.dm @@ -7,5 +7,7 @@ continue if(A.flags & RAD_SHIELDED) continue + if(isbelly(H.loc)) + continue if(H.client && H.appendicitis()) break diff --git a/code/modules/gamemaster/event2/events/medical/appendicitis.dm b/code/modules/gamemaster/event2/events/medical/appendicitis.dm index 27f5284020..f213d2fd01 100644 --- a/code/modules/gamemaster/event2/events/medical/appendicitis.dm +++ b/code/modules/gamemaster/event2/events/medical/appendicitis.dm @@ -22,8 +22,8 @@ if(!H.client) continue - // Or antags. - if(player_is_antag(H.mind)) + // Or antags / bellied. + if(player_is_antag(H.mind) || isbelly(H.loc)) continue // Or doctors (otherwise it could be possible for the only surgeon to need surgery). diff --git a/code/modules/projectiles/guns/energy/altevian_vr.dm b/code/modules/projectiles/guns/energy/altevian_vr.dm index 39543e1fcc..60104e560d 100644 --- a/code/modules/projectiles/guns/energy/altevian_vr.dm +++ b/code/modules/projectiles/guns/energy/altevian_vr.dm @@ -57,3 +57,91 @@ light_range = 2 light_power = 0.5 light_color = "#77A6E1" + +/obj/item/weapon/gun/energy/ratminer + name = "Altevian Repulsion Mineral Slicer" + desc = "An advanced piece of mining focused technology from the Altevian Hegemony. \ + This model appears to be their standard asteroid clearing laser with a tailored system to work with an ore-bag, \ + or similar, linked to the device. It has extra crystals for the focus that seem to split the beam, \ + but also removes the pin-point accuracy other mining devices typically have." + icon_state = "altevian-miner" + item_state = "altevian-miner" + fire_delay = 12 + slot_flags = SLOT_BACK + w_class = ITEMSIZE_HUGE + force = 10 + origin_tech = list(TECH_COMBAT = 2, TECH_MAGNET = 4) + matter = list(MAT_STEEL = 2000) + projectile_type = /obj/item/projectile/scatter/ratminer + charge_cost = 400 + +/obj/item/projectile/scatter/ratminer + spread_submunition_damage = FALSE + damage = 20 + range = 0 + + submunition_spread_max = 300 + force_max_submunition_spread = TRUE + + submunitions = list( + /obj/item/projectile/beam/ratminer = 3 + ) + +/obj/item/projectile/beam/ratminer + name = "slicer beam" + icon_state = "ratmining" + damage = 20 + light_color = "#77A6E1" + hud_state = "laser_disabler" + + muzzle_type = /obj/effect/projectile/muzzle/ratminer + tracer_type = /obj/effect/projectile/tracer/ratminer + impact_type = /obj/effect/projectile/impact/ratminer + +/obj/item/projectile/beam/ratminer/on_range() + strike_thing() + ..() + +/obj/item/projectile/beam/ratminer/on_hit(atom/target) + strike_thing(target) + . = ..() + +/obj/item/projectile/beam/ratminer/on_impact(atom/A) + . = ..() + strike_thing(A) + +/obj/item/projectile/beam/ratminer/proc/strike_thing(var/atom/A) + var/turf/target_turf = get_turf(A) + if(!target_turf) + target_turf = get_turf(src) + if(ismineralturf(target_turf)) + var/turf/simulated/mineral/M = target_turf + M.GetDrilled(TRUE) + for(var/T in RANGE_TURFS(2, target_turf) - target_turf) + if(ismineralturf(T)) + var/turf/simulated/mineral/M = T + M.GetDrilled(TRUE) + if(firer) + var/obj/item/weapon/storage/bag/ore/orebag = locate(/obj/item/weapon/storage/bag/ore) in firer + if(orebag) + for(var/turf/T in RANGE_TURFS(2, target_turf)) + orebag.gather_all(T, firer, TRUE) + + +/obj/effect/projectile/muzzle/ratminer + icon_state = "muzzle_ratmining" + light_range = 2 + light_power = 0.5 + light_color = "#77A6E1" + +/obj/effect/projectile/tracer/ratminer + icon_state = "ratmining" + light_range = 2 + light_power = 0.5 + light_color = "#77A6E1" + +/obj/effect/projectile/impact/ratminer + icon_state = "impact_ratmining" + light_range = 2 + light_power = 0.5 + light_color = "#77A6E1" \ No newline at end of file diff --git a/code/modules/tgui/modules/camera.dm b/code/modules/tgui/modules/camera.dm index 5a4551f260..7954b189f5 100644 --- a/code/modules/tgui/modules/camera.dm +++ b/code/modules/tgui/modules/camera.dm @@ -80,8 +80,10 @@ /datum/tgui_module/camera/tgui_interact(mob/user, datum/tgui/ui = null) // Update UI ui = SStgui.try_update_ui(user, src, ui) + var/turf/newturf = get_turf(active_camera) + var/area/B = newturf?.loc // No cam tracking in dorms! // Show static if can't use the camera - if(!active_camera?.can_use()) + if(!active_camera?.can_use() || B.block_tracking) show_camera_static() if(!ui) var/user_ref = REF(user) @@ -175,15 +177,16 @@ . = TRUE /datum/tgui_module/camera/proc/update_active_camera_screen() + var/turf/newturf = get_turf(active_camera) + var/area/B = newturf?.loc // No cam tracking in dorms! // Show static if can't use the camera - if(!active_camera?.can_use()) + if(!active_camera?.can_use() || B.block_tracking) show_camera_static() return TRUE // If we're not forcing an update for some reason and the cameras are in the same location, // we don't need to update anything. // Most security cameras will end here as they're not moving. - var/turf/newturf = get_turf(active_camera) if(newturf == last_camera_turf) return diff --git a/code/modules/vore/eating/mob_vr.dm b/code/modules/vore/eating/mob_vr.dm index 8796bf4a27..62a8c9655c 100644 --- a/code/modules/vore/eating/mob_vr.dm +++ b/code/modules/vore/eating/mob_vr.dm @@ -24,7 +24,8 @@ var/allow_spontaneous_tf = FALSE // Obviously. var/show_vore_fx = TRUE // Show belly fullscreens var/selective_preference = DM_DEFAULT // Preference for selective bellymode - var/eating_privacy_global = FALSE //Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var + var/text_warnings = TRUE // Allows us to dismiss the text limit warning messages after viewing it once per round + var/eating_privacy_global = FALSE // Makes eating attempt/success messages only reach for subtle range if true, overwritten by belly-specific var var/nutrition_message_visible = TRUE var/list/nutrition_messages = list( "They are starving! You can hear their stomach snarling from across the room!", diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 4142f81076..8fa43b135a 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -1009,7 +1009,9 @@ var/global/list/belly_colorable_only_fullscreens = list("a_synth_flesh_mono", host.vore_selected.absorbed_desc = new_desc . = TRUE if("b_msgs") - tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message (250 for examines, 500 for idle messages), max 10 messages per topic.","Really, don't.") // Should remain tgui_alert() (blocking) + if(user.text_warnings) + if(tgui_alert(user,"Setting abusive or deceptive messages will result in a ban. Consider this your warning. Max 150 characters per message (250 for examines, 500 for idle messages), max 10 messages per topic.","Really, don't.",list("OK", "Disable Warnings")) == "Disable Warnings") // Should remain tgui_alert() (blocking) + user.text_warnings = FALSE var/help = " Press enter twice to separate messages. '%pred' will be replaced with your name. '%prey' will be replaced with the prey's name. '%belly' will be replaced with your belly's name. '%count' will be replaced with the number of anything in your belly. '%countprey' will be replaced with the number of living prey in your belly." switch(params["msgtype"]) if("dmp") diff --git a/code/modules/vore/mouseray.dm b/code/modules/vore/mouseray.dm index bee106c3aa..3e3ead048e 100644 --- a/code/modules/vore/mouseray.dm +++ b/code/modules/vore/mouseray.dm @@ -249,6 +249,7 @@ new_mob.nutrition_message_visible = nutrition_message_visible new_mob.allow_spontaneous_tf = allow_spontaneous_tf new_mob.eating_privacy_global = eating_privacy_global + new_mob.text_warnings = text_warnings /////SUBTYPES///// diff --git a/code/modules/vore/resizing/resize_vr.dm b/code/modules/vore/resizing/resize_vr.dm index 7b6c39d9ab..b0e52cee52 100644 --- a/code/modules/vore/resizing/resize_vr.dm +++ b/code/modules/vore/resizing/resize_vr.dm @@ -154,10 +154,6 @@ set name = "Adjust Mass" set category = "Abilities" //Seeing as prometheans have an IC reason to be changing mass. - if(!resizable) - to_chat(src, "You are immune to resizing!") - return - var/nagmessage = "Adjust your mass to be a size between 25 to 200% (or 1% to 600% in dormitories). (DO NOT ABUSE)" var/default = size_multiplier * 100 var/new_size = tgui_input_number(usr, nagmessage, "Pick a Size", default, 600, 1) diff --git a/icons/inventory/back/mob.dmi b/icons/inventory/back/mob.dmi index f9c36d0277..89df611fe6 100644 Binary files a/icons/inventory/back/mob.dmi and b/icons/inventory/back/mob.dmi differ diff --git a/icons/mob/items/lefthand_guns.dmi b/icons/mob/items/lefthand_guns.dmi index 47f4efae72..340a1ae908 100644 Binary files a/icons/mob/items/lefthand_guns.dmi and b/icons/mob/items/lefthand_guns.dmi differ diff --git a/icons/mob/items/righthand_guns.dmi b/icons/mob/items/righthand_guns.dmi index 6128d03f5d..a3a4f82e72 100644 Binary files a/icons/mob/items/righthand_guns.dmi and b/icons/mob/items/righthand_guns.dmi differ diff --git a/icons/obj/gun.dmi b/icons/obj/gun.dmi index f59d1369e1..e4bfbfd55d 100644 Binary files a/icons/obj/gun.dmi and b/icons/obj/gun.dmi differ diff --git a/icons/obj/projectiles_impact.dmi b/icons/obj/projectiles_impact.dmi index a6efd92db6..054757d0f9 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 234a2e428a..52539c49a5 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 7404a5867b..2052f93e96 100644 Binary files a/icons/obj/projectiles_tracer.dmi and b/icons/obj/projectiles_tracer.dmi differ diff --git a/maps/groundbase/groundbase_areas.dm b/maps/groundbase/groundbase_areas.dm index 8711fd73e7..9c72324057 100644 --- a/maps/groundbase/groundbase_areas.dm +++ b/maps/groundbase/groundbase_areas.dm @@ -449,6 +449,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE forbid_events = TRUE forbid_singulo = TRUE diff --git a/maps/stellar_delight/stellar_delight_areas.dm b/maps/stellar_delight/stellar_delight_areas.dm index a720cb6060..53bbffb08f 100644 --- a/maps/stellar_delight/stellar_delight_areas.dm +++ b/maps/stellar_delight/stellar_delight_areas.dm @@ -129,6 +129,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE forbid_events = TRUE forbid_singulo = TRUE @@ -286,6 +287,7 @@ flags = RAD_SHIELDED| BLUE_SHIELDED |AREA_FLAG_IS_NOT_PERSISTENT soundproofed = TRUE block_suit_sensors = TRUE + block_tracking = TRUE forbid_events = TRUE /area/stellardelight/deck3/portdock @@ -305,4 +307,3 @@ name = "Deck Two Exterior" /area/stellardelight/deck3/exterior name = "Deck Three Exterior" - diff --git a/maps/tether/tether_areas.dm b/maps/tether/tether_areas.dm index 87cf3f3681..ff3ecd4e4a 100644 --- a/maps/tether/tether_areas.dm +++ b/maps/tether/tether_areas.dm @@ -994,6 +994,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/maintDorm2 name = "\improper Construction Dorm 2" @@ -1002,6 +1003,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/maintDorm3 name = "\improper Construction Dorm 3" @@ -1010,6 +1012,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/maintDorm4 name = "\improper Construction Dorm 4" @@ -1018,138 +1021,161 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_1 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_2 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_3 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_4 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_5 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_6 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_7 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_8 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_9 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_10 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_11 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/vistor_room_12 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_1 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_2 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_3 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_4 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_5 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_6 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_7 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_8 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_9 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_10 flags = RAD_SHIELDED | BLUE_SHIELDED soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/Dorm_1/holo name = "\improper Dorm 1 Holodeck" @@ -1175,6 +1201,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/spacedorm2 name = "\improper Visitor Lodging 2" @@ -1184,6 +1211,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/spacedorm3 name = "\improper Visitor Lodging 3" @@ -1193,6 +1221,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/crew_quarters/sleep/spacedorm4 name = "\improper Visitor Lodging 4" @@ -1202,6 +1231,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_basic name = "\improper Holodeck Source" @@ -1209,6 +1239,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_desert name = "\improper Holodeck Source" @@ -1216,6 +1247,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_seating name = "\improper Holodeck Source" @@ -1223,6 +1255,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_beach name = "\improper Holodeck Source" @@ -1230,6 +1263,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_garden name = "\improper Holodeck Source" @@ -1237,6 +1271,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_boxing name = "\improper Holodeck Source" @@ -1244,6 +1279,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_snow name = "\improper Holodeck Source" @@ -1251,6 +1287,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_space name = "\improper Holodeck Source" @@ -1258,6 +1295,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/holodeck/holodorm/source_off name = "\improper Holodeck Source" @@ -1265,6 +1303,7 @@ soundproofed = TRUE limit_mob_size = FALSE block_suit_sensors = TRUE + block_tracking = TRUE /area/ai_core_foyer name = "\improper AI Core Access"