diff --git a/aurorastation.dme b/aurorastation.dme
index 7b923c0d37b..9fe04f41c87 100644
--- a/aurorastation.dme
+++ b/aurorastation.dme
@@ -2856,7 +2856,6 @@
#include "code\modules\ventcrawl\ventcrawl.dm"
#include "code\modules\ventcrawl\ventcrawl_atmospherics.dm"
#include "code\modules\ventcrawl\ventcrawl_verb.dm"
-#include "code\modules\vision_cone\vision_cone.dm"
#include "code\modules\vueui\external.dm"
#include "code\modules\vueui\ui.dm"
#include "code\modules\vueui\var_monitor.dm"
diff --git a/code/_onclick/hud/human.dm b/code/_onclick/hud/human.dm
index 8897c642b50..c0cc156d171 100644
--- a/code/_onclick/hud/human.dm
+++ b/code/_onclick/hud/human.dm
@@ -19,11 +19,6 @@
var/obj/screen/using
var/obj/screen/inventory/inv_box
- if(target.can_have_vision_cone)
- var/mob/living/carbon/human/H = mymob
- H.vision_cone_overlay = new /obj/screen/fov()
- hud_elements |= H.vision_cone_overlay
-
// Draw the various inventory equipment slots.
var/has_hidden_gear
for(var/gear_slot in hud_data.gear)
diff --git a/code/_onclick/hud/robot.dm b/code/_onclick/hud/robot.dm
index 439a2cc9a78..6c0c59a0eda 100644
--- a/code/_onclick/hud/robot.dm
+++ b/code/_onclick/hud/robot.dm
@@ -15,11 +15,6 @@ var/obj/screen/robot_inventory
var/mob/living/silicon/robot/r = mymob
-//Fov
- if(r.can_have_vision_cone)
- r.vision_cone_overlay = new /obj/screen/fov()
- src.adding += r.vision_cone_overlay
-
//Radio
using = new /obj/screen()
using.name = "radio"
diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm
index f56f8114eeb..b901089a575 100644
--- a/code/_onclick/hud/screen_objects.dm
+++ b/code/_onclick/hud/screen_objects.dm
@@ -398,14 +398,6 @@
return 1
-/obj/screen/fov
- icon = 'icons/mob/vision_cone.dmi'
- icon_state = "combat"
- name = ""
- screen_loc = "SOUTH,WEST"
- mouse_opacity = 0
- layer = SCREEN_LAYER
-
/obj/screen/movement_intent
name = "mov_intent"
screen_loc = ui_movi
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index 25186301e4e..b8f54974b71 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -714,9 +714,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
M.toggle_zoom_hud() // If the user has already limited their HUD this avoids them having a HUD when they zoom in
M.client.view = viewsize
zoom = 1
- if(M.vision_cone_overlay)
- var/mob/living/vision_cone_mob = M
- vision_cone_mob.hide_cone()
var/tilesize = 32
var/viewoffset = tilesize * tileoffset
@@ -739,9 +736,6 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
else
M.client.view = world.view
- if(M.vision_cone_overlay)
- var/mob/living/vision_cone_mob = M
- vision_cone_mob.update_vision_cone()
if(!M.hud_used.hud_shown)
M.toggle_zoom_hud()
zoom = 0
diff --git a/code/modules/admin/verbs/bluespacetech.dm b/code/modules/admin/verbs/bluespacetech.dm
index 71fc4822d5f..15f6cc69930 100644
--- a/code/modules/admin/verbs/bluespacetech.dm
+++ b/code/modules/admin/verbs/bluespacetech.dm
@@ -124,13 +124,11 @@
feedback_add_details("admin_verb","BST")
- bst.verbs |= /mob/living/proc/toggle_vision_cone
return 1
/client/proc/bst_post_spawn(mob/living/carbon/human/bst/bst)
spark(bst, 3, alldirs)
bst.anchored = FALSE
- bst.can_have_vision_cone = FALSE
/mob/living/carbon/human/bst
universal_understand = 1
diff --git a/code/modules/client/preference_setup/global/02_settings.dm b/code/modules/client/preference_setup/global/02_settings.dm
index f1f103bb5d3..0c960b1e75a 100644
--- a/code/modules/client/preference_setup/global/02_settings.dm
+++ b/code/modules/client/preference_setup/global/02_settings.dm
@@ -11,7 +11,6 @@
S["memo_hash"] >> pref.memo_hash
S["parallax_speed"] >> pref.parallax_speed
S["toggles_secondary"] >> pref.toggles_secondary
- S["fov_cone_alpha"] >> pref.fov_cone_alpha
/datum/category_item/player_setup_item/player_global/settings/save_preferences(var/savefile/S)
S["lastchangelog"] << pref.lastchangelog
@@ -22,7 +21,6 @@
S["memo_hash"] << pref.memo_hash
S["parallax_speed"] << pref.parallax_speed
S["toggles_secondary"] << pref.toggles_secondary
- S["fov_cone_alpha"] << pref.fov_cone_alpha
/datum/category_item/player_setup_item/player_global/settings/gather_load_query()
return list(
@@ -85,7 +83,6 @@
pref.memo_hash = sanitize_text(pref.memo_hash, initial(pref.memo_hash))
pref.parallax_speed = sanitize_integer(text2num(pref.parallax_speed), 1, 10, initial(pref.parallax_speed))
pref.toggles_secondary = sanitize_integer(text2num(pref.toggles_secondary), 0, BITFIELDMAX, initial(pref.toggles_secondary))
- pref.fov_cone_alpha = sanitize_integer(text2num(pref.fov_cone_alpha), 0, 255, initial(pref.fov_cone_alpha))
/datum/category_item/player_setup_item/player_global/settings/content(mob/user)
var/list/dat = list(
@@ -101,13 +98,6 @@
"Static Space: [(pref.toggles_secondary & PARALLAX_IS_STATIC) ? "Yes" : "No"]
"
)
- dat += "FOV Cone Alpha: "
- if(pref.fov_cone_alpha == initial(pref.fov_cone_alpha))
- dat += "Using Default
"
- else
- dat += "[pref.fov_cone_alpha] [HTML_RECT(pref.fov_cone_alpha)] - reset
"
-
-
. = dat.Join()
/datum/category_item/player_setup_item/player_global/settings/OnTopic(var/href,var/list/href_list, var/mob/user)
@@ -126,20 +116,6 @@
pref.toggles_secondary ^= flag
return TOPIC_REFRESH
- else if(href_list["select_fov_cone_alpha"])
- var/fov_alpha_new = input(user, "Choose a new opacity for the FOV darkness cone.", "Global Preference", pref.fov_cone_alpha) as null|num
- if(!fov_alpha_new || !CanUseTopic(user))
- return TOPIC_NOACTION
- pref.fov_cone_alpha = fov_alpha_new
- return TOPIC_REFRESH
-
- else if(href_list["reset"])
- switch(href_list["reset"])
- if("fov")
- pref.fov_cone_alpha = initial(pref.fov_cone_alpha)
- return TOPIC_REFRESH
-
-
return ..()
/datum/category_item/player_setup_item/player_global/settings/proc/validate_current_character()
diff --git a/code/modules/mob/holder.dm b/code/modules/mob/holder.dm
index 2babad02a1d..a41394f69b5 100644
--- a/code/modules/mob/holder.dm
+++ b/code/modules/mob/holder.dm
@@ -87,10 +87,6 @@ var/list/holder_mob_icon_cache = list()
mob_container = M
mob_container.forceMove(src.loc)//if the holder was placed into a disposal, this should place the animal in the disposal
M.reset_view()
- if(isliving(M))
- var/mob/living/L = M
- L.can_have_vision_cone = TRUE
- L.update_vision_cone()
M.Released()
contained = null
@@ -104,10 +100,6 @@ var/list/holder_mob_icon_cache = list()
for(var/mob/M in contents)
M.forceMove(T) //if the holder was placed into a disposal, this should place the animal in the disposal
M.reset_view()
- if(isliving(M))
- var/mob/living/L = M
- L.can_have_vision_cone = TRUE
- L.update_vision_cone()
M.Released()
contained = null
@@ -246,9 +238,6 @@ var/list/holder_mob_icon_cache = list()
// Override to add stuff that should happen when scooping
/mob/living/proc/post_scoop()
- SHOULD_CALL_PARENT(TRUE)
- can_have_vision_cone = FALSE
- update_vision_cone()
return
/mob/living/proc/get_holder_location()
diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm
index 7739002bb99..09cea0d5a67 100644
--- a/code/modules/mob/living/carbon/human/human.dm
+++ b/code/modules/mob/living/carbon/human/human.dm
@@ -28,9 +28,6 @@
name = real_name
if(mind)
mind.name = real_name
-
- if(species.have_vision_cone)
- can_have_vision_cone = TRUE
// Randomize nutrition and hydration. Defines are in __defines/mobs.dm
if(max_nutrition > 0)
diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm
index ad9f57922f2..c851de2c3f3 100644
--- a/code/modules/mob/living/carbon/human/species/species.dm
+++ b/code/modules/mob/living/carbon/human/species/species.dm
@@ -244,8 +244,6 @@
var/list/character_color_presets
var/bodyfall_sound = /decl/sound_category/bodyfall_sound //default, can be used for species specific falling sounds
- var/have_vision_cone = TRUE //Vision cone.
-
var/list/alterable_internal_organs = list(BP_HEART, BP_EYES, BP_LUNGS, BP_LIVER, BP_KIDNEYS, BP_STOMACH, BP_APPENDIX) //what internal organs can be changed in character setup
/datum/species/proc/get_eyes(var/mob/living/carbon/human/H)
diff --git a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
index feeda9c2149..547bc397b54 100644
--- a/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
+++ b/code/modules/mob/living/carbon/human/species/station/diona/diona.dm
@@ -123,8 +123,6 @@
allowed_accents = list(ACCENT_ROOTSONG, ACCENT_VOIDSONG)
default_accent = ACCENT_ROOTSONG
- have_vision_cone = FALSE
-
alterable_internal_organs = list()
/datum/species/diona/handle_sprint_cost(var/mob/living/carbon/H, var/cost)
diff --git a/code/modules/mob/living/living.dm b/code/modules/mob/living/living.dm
index 02885d5fdff..365ec07b4f0 100644
--- a/code/modules/mob/living/living.dm
+++ b/code/modules/mob/living/living.dm
@@ -657,34 +657,6 @@ default behaviour is:
for(var/mob/living/carbon/slime/M in view(1,src))
M.UpdateFeed(src)
- // Other viewers only need to update their vision for this moving mob, not their entire cone, as they are stationary
- for(var/viewer in oviewers(world.view, src))
- var/mob/living/M = viewer
- if(M.client && istype(M) && M.can_have_vision_cone)
- if(M.client.view != world.view && get_dist(M, src) > M.client.view)
- continue
- else
- var/turf/T = get_turf(M)
- var/turf/Ts = get_turf(src)
- if(Ts.InConeDirection(T, reverse_direction(M.dir)))
- if(!(src in M.client.hidden_mobs))
- if(M.InCone(T, M.dir))
- M.add_to_mobs_hidden_atoms(src)
- Ts.show_footsteps(M, T, src)
- else
- if(src in M.client.hidden_mobs)
- M.client.hidden_mobs -= src
- for(var/image in M.client.hidden_atoms)
- var/image/I = image
- if(I.loc == src)
- I.override = FALSE
- M.client.hidden_atoms -= I
- M.client.images -= I
- QDEL_IN(I, 1 SECONDS)
- break
-
- update_vision_cone()
-
/mob/living/verb/resist()
set name = "Resist"
set category = "IC"
@@ -739,8 +711,6 @@ default behaviour is:
to_chat(src, "You struggle free of \the [H.loc].")
H.forceMove(get_turf(H))
- can_have_vision_cone = initial(can_have_vision_cone)
-
/mob/living/proc/escape_buckle()
if(buckled)
buckled.user_unbuckle_mob(src)
@@ -799,7 +769,6 @@ default behaviour is:
resting = !resting
to_chat(src, "You are now [resting ? "resting" : "getting up"].")
- update_vision_cone()
/mob/living/proc/cannot_use_vents()
return "You can't fit into that vent."
diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm
index 9abd27e7621..b9def421648 100644
--- a/code/modules/mob/living/silicon/ai/ai.dm
+++ b/code/modules/mob/living/silicon/ai/ai.dm
@@ -51,7 +51,6 @@ var/list/ai_verbs_default = list(
anchored = TRUE // -- TLE
density = TRUE
status_flags = CANSTUN|CANPARALYSE|CANPUSH
- can_have_vision_cone = FALSE
var/carded
// Holopad and holograms
diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm
index a7a1ad456be..ad0688ec3ee 100644
--- a/code/modules/mob/living/silicon/pai/pai.dm
+++ b/code/modules/mob/living/silicon/pai/pai.dm
@@ -110,8 +110,6 @@
light_color = COLOR_BRIGHT_GREEN
light_wedge = 45
- can_have_vision_cone = FALSE
-
/mob/living/silicon/pai/movement_delay()
return 0.8
@@ -353,9 +351,6 @@
canmove = TRUE
resting = FALSE
- can_have_vision_cone = TRUE
- check_fov()
-
/mob/living/silicon/pai/verb/fold_up()
set category = "pAI Commands"
set name = "Collapse Chassis"
@@ -468,9 +463,6 @@
//stop resting
resting = 0
- hide_cone()
- can_have_vision_cone = initial(can_have_vision_cone)
-
// If we are being held, handle removing our holder from their inv.
var/obj/item/holder/H = loc
if(istype(H))
diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm
index 3fe783f6f00..aa35c7eb509 100644
--- a/code/modules/mob/living/silicon/silicon.dm
+++ b/code/modules/mob/living/silicon/silicon.dm
@@ -7,7 +7,6 @@
gender = NEUTER
voice_name = "Synthesized Voice"
accent = ACCENT_TTS
- can_have_vision_cone = TRUE
var/list/speech_synthesizer_langs = list() //which languages can be vocalized by the speech synthesizer
var/speak_statement = "states"
var/speak_exclamation = "declares"
diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm
index c4d28db511a..e0df211ad1c 100644
--- a/code/modules/mob/mob.dm
+++ b/code/modules/mob/mob.dm
@@ -948,8 +948,6 @@
else if( lying != lying_prev )
update_icon()
- update_vision_cone()
-
return canmove
@@ -1348,7 +1346,7 @@
src.throw_icon.icon_state = "act_throw_on"
/mob/proc/is_invisible_to(var/mob/viewer)
- return (!alpha || !mouse_opacity || viewer.see_invisible < invisibility || (viewer.client && (src in viewer.client.hidden_mobs)))
+ return (!alpha || !mouse_opacity || viewer.see_invisible < invisibility)
//Admin helpers
/mob/proc/wind_mob(var/mob/admin)
diff --git a/code/modules/mob/mob_defines.dm b/code/modules/mob/mob_defines.dm
index d5d899855a0..df93a1cd6d3 100644
--- a/code/modules/mob/mob_defines.dm
+++ b/code/modules/mob/mob_defines.dm
@@ -145,8 +145,6 @@
var/seer = 0 //for cult//Carbon, probably Human
var/datum/hud/hud_used = null
- var/obj/screen/vision_cone_overlay = null
- var/can_have_vision_cone = FALSE
var/list/grabbed_by = list( )
var/list/requests = list( )
diff --git a/code/modules/vision_cone/vision_cone.dm b/code/modules/vision_cone/vision_cone.dm
deleted file mode 100644
index 9e324a84964..00000000000
--- a/code/modules/vision_cone/vision_cone.dm
+++ /dev/null
@@ -1,222 +0,0 @@
-/////////////VISION CONE///////////////
-// Vision cone code by Honkertron (for Otuska), Matt and Myazaki.
-// This vision cone code allows for mobs and/or items to be blocked out from a player's field of vision.
-// This code makes use of the "cone of effect" proc created by Lummox, contributed by Jtgibson.
-//
-// More info on that here:
-// http://www.byond.com/forum/?post=195138
-///////////////////////////////////////
-
-/client
- var/list/hidden_atoms = list()
- var/list/hidden_mobs = list()
-
-/proc/cone(turf/center, dir, list/list)
- . = list()
- for(var/turf/T in list)
- if(T.InConeDirection(center, dir))
- for(var/mob/M in T.contents)
- if(!istype(M, /mob/abstract))
- . += M.InCone(center, dir)
-
-/turf/proc/InConeDirection(turf/center, dir)
- if(get_dist(center, src) == 0 || src == center) return 0
- var/d = get_dir(center, src)
-
- if(!d || d == dir) return 1
- if(dir & (dir-1))
- return (d & ~dir) ? 0 : 1
- if(!(d & dir)) return 0
- var/dx = abs(x - center.x)
- var/dy = abs(y - center.y)
- if(dx == dy) return 1
- if(dy > dx)
- return (dir & (NORTH|SOUTH)) ? 1 : 0
- return (dir & (EAST|WEST)) ? 1 : 0
-
-/mob/living/proc/toggle_vision_cone()
- set name = "Toggle Vision Cone"
- set category = "OOC"
- set desc = "Toggle the ability to have a vision cone"
-
- can_have_vision_cone = !can_have_vision_cone
- check_fov()
-
-// Should return atoms that are in the cone.
-/atom/proc/InCone(turf/center, dir)
- SHOULD_CALL_PARENT(TRUE)
- return list()
-
-/mob/dead/InCone(turf/center, dir)
- . = ..()
-
-/mob/InCone(turf/center, dir)
- . = ..() | src
-
-/mob/living/InCone(turf/center, dir)
- . = ..()
- if(pulling)
- . += pulling
-
-/mob/proc/update_vision_cone()
- return
-
-/mob/living/update_vision_cone()
- if(!can_have_vision_cone)
- if(vision_cone_overlay)
- remove_cone()
- return
-
- for(var/obj/item/item in src)
- if(item.zoom)
- remove_cone()
- return
-
- var/delay = 1 SECONDS
- if(client)
- var/image/I = null
- for(I in client.hidden_atoms)
- I.override = FALSE
- QDEL_IN(I, delay)
- delay += 1 SECONDS
-
- check_fov()
- client.hidden_atoms.Cut()
- client.hidden_mobs.Cut()
-
-
- if(resting || lying)
- hide_cone()
- return
-
- vision_cone_overlay.dir = dir
- if(vision_cone_overlay.alpha)
- var/turf/T = get_turf(src)
- for(var/cone_atom in cone(T, reverse_direction(dir), get_rectangle_in_dir(T, client.view + 1, reverse_direction(dir)) & oview(client.view + 1, T)))
- add_to_mobs_hidden_atoms(cone_atom)
-
-/mob/living/proc/add_to_mobs_hidden_atoms(atom/A)
- var/image/I
- I = image("split", A)
- I.override = TRUE
- client.images += I
- client.hidden_atoms += I
- if(ismob(A))
- var/mob/hidden_mob = A
- client.hidden_mobs += hidden_mob
- if(pulling && (pulling == hidden_mob || pulling == hidden_mob.buckled))//If we're pulling them we don't want them to be invisible, too hard to play like that.
- I.override = FALSE
- return
- for(var/obj/item/grab/G in src)
- if(A == G.affecting)
- I.override = FALSE
- return
- for(var/obj/item/grab/G in A)
- if(src == G.affecting)
- I.override = FALSE
- return
-
-/mob/living/proc/SetFov(var/n)
- if(!can_have_vision_cone)
- return
-
- if(!n)
- hide_cone()
- else
- show_cone()
-
-/mob/living/proc/check_fov()
- if(!can_have_vision_cone)
- if(client)
- for(var/hidden in client.hidden_atoms)
- var/image/I = hidden
- client.images -= I
- client.hidden_atoms.Cut()
- client.hidden_mobs.Cut()
- remove_cone()
- return
-
- if(isnull(vision_cone_overlay))
- vision_cone_overlay = new /obj/screen/fov()
- client.screen |= vision_cone_overlay
-
- if(resting || lying || client.eye != client.mob)
- vision_cone_overlay.alpha = 0
- return
-
- else if(vision_cone_overlay)
- show_cone()
- else
- hide_cone()
-
-//Making these generic procs so you can call them anywhere.
-/mob/living/proc/show_cone()
- if(!can_have_vision_cone)
- return
-
- if(vision_cone_overlay)
- vision_cone_overlay.alpha = client.prefs.fov_cone_alpha
-
-/mob/living/proc/hide_cone()
- if(vision_cone_overlay)
- vision_cone_overlay.alpha = 0
-
-/mob/living/proc/remove_cone()
- if(vision_cone_overlay)
- client.screen -= vision_cone_overlay
-
-/mob/living/set_dir(var/new_dir, ignore_facing_dir = FALSE)
- . = ..()
- if(.)
- update_vision_cone()
-
-// Rotates a rectangle around a center turf
-/proc/get_rectangle_in_dir(var/turf/T, var/length, var/dir)
- var/matrix/M = new
- var/matrix/N = new
- M.Turn(dir2angle(dir))
- N.Turn((dir2angle(dir)+180) % 360)
- . = block(\
- locate(T.x + (M.a+M.b) * length + 0.5*(M.a + M.b - 1), T.y + (M.d+M.e) * length + 0.5*(M.d + M.e - 1), T.z),\
- locate(T.x + N.a * length + 0.5*(M.a + M.b - 1), T.y + N.d * length + 0.5*(M.d + M.e - 1), T.z)\
- )
-
-#define ALWAYS_FOOTSTEP_DISTANCE 2
-#define MAX_FOOTSTEP_DISTANCE 5
-#define RIPPLE_POSITION_BOUNDS 8
-#define RIPPLE_START_RADIUS 10
-#define RIPPLE_END_RADIUS 2
-#define RIPPLE_START_SIZE 0
-#define RIPPLE_END_SIZE 16
-
-/turf/proc/show_footsteps(var/mob/viewer, var/turf/Tviewer, var/mob/M)
- var/dist = get_dist(src, Tviewer)
- if(src == Tviewer)
- return
- if(dist > MAX_FOOTSTEP_DISTANCE || prob(100*max(dist-ALWAYS_FOOTSTEP_DISTANCE,0) / MAX_FOOTSTEP_DISTANCE))
- return
- if(isdeaf(viewer))
- return
- if(viewer.stat || M.stat || M.lying)
- return
- if(ishuman(M))
- var/mob/living/carbon/human/H = M
- if(!H.is_noisy)
- return
-
- var/image/marker = image(icon, src, icon_state, layer = layer)
- marker.overlays = overlays.Copy()
- marker.override = TRUE
- marker.filters += filter(type = "ripple", x=rand(-RIPPLE_POSITION_BOUNDS, RIPPLE_POSITION_BOUNDS), y=rand(-RIPPLE_POSITION_BOUNDS, RIPPLE_POSITION_BOUNDS), radius = RIPPLE_START_RADIUS, size = RIPPLE_START_SIZE, falloff = 0)
-
- viewer.client.images += marker
- addtimer(CALLBACK(GLOBAL_PROC, .proc/qdel, marker), 1.5 SECONDS, TIMER_CLIENT_TIME)
- animate(marker.filters[marker.filters.len], time = 1.5 SECONDS, radius = RIPPLE_END_RADIUS, size = RIPPLE_END_SIZE)
-
-#undef ALWAYS_FOOTSTEP_DISTANCE
-#undef MAX_FOOTSTEP_DISTANCE
-#undef RIPPLE_POSITION_BOUNDS
-#undef RIPPLE_START_RADIUS
-#undef RIPPLE_END_RADIUS
-#undef RIPPLE_START_SIZE
-#undef RIPPLE_END_SIZE
\ No newline at end of file
diff --git a/html/changelogs/remove_vision_cones.yml b/html/changelogs/remove_vision_cones.yml
new file mode 100644
index 00000000000..5fcddf8e842
--- /dev/null
+++ b/html/changelogs/remove_vision_cones.yml
@@ -0,0 +1,41 @@
+################################
+# Example Changelog File
+#
+# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb.
+#
+# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.)
+# When it is, any changes listed below will disappear.
+#
+# Valid Prefixes:
+# bugfix
+# wip (For works in progress)
+# tweak
+# soundadd
+# sounddel
+# rscadd (general adding of nice things)
+# rscdel (general deleting of nice things)
+# imageadd
+# imagedel
+# maptweak
+# spellcheck (typo fixes)
+# experiment
+# balance
+# admin
+# backend
+# security
+# refactor
+#################################
+
+# Your name.
+author: mikomyazaki
+
+# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again.
+delete-after: True
+
+# Any changes you've made. See valid prefix list above.
+# INDENT WITH TWO SPACES. NOT TABS. SPACES.
+# SCREW THIS UP AND IT WON'T WORK.
+# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries.
+# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog.
+changes:
+ - rscdel: "Vision cones have been removed. Thank you to everyone that provided feedback while we tried out this feature!"
\ No newline at end of file
diff --git a/icons/mob/vision_cone.dmi b/icons/mob/vision_cone.dmi
deleted file mode 100644
index 953c0bbdbb9..00000000000
Binary files a/icons/mob/vision_cone.dmi and /dev/null differ