diff --git a/_maps/map_files/generic/CentCom.dmm b/_maps/map_files/generic/CentCom.dmm
index 130a2d23..ff2a7786 100644
--- a/_maps/map_files/generic/CentCom.dmm
+++ b/_maps/map_files/generic/CentCom.dmm
@@ -9239,7 +9239,9 @@
pixel_x = -17;
pixel_y = 3
},
-/obj/machinery/recharger,
+/obj/machinery/recharger{
+ pixel_y = 4
+ },
/turf/open/floor/plasteel/grimy,
/area/centcom/ferry)
"tR" = (
@@ -9518,6 +9520,7 @@
id_tag = "CCDormChemlight";
name = "Kenshin Midori's Bunk"
},
+/obj/effect/mapping_helpers/airlock/locked,
/turf/open/floor/plasteel,
/area/centcom/ferry)
"uy" = (
@@ -11091,7 +11094,13 @@
/area/centcom/evac)
"yh" = (
/obj/structure/table/wood,
-/obj/item/paper/monitorkey,
+/obj/item/paper/monitorkey{
+ pixel_x = 10;
+ pixel_y = -3
+ },
+/obj/machinery/recharger{
+ pixel_y = 4
+ },
/turf/open/floor/plasteel/dark,
/area/centcom/ferry)
"yi" = (
@@ -14324,12 +14333,22 @@
/turf/open/floor/plasteel/white,
/area/centcom/holding)
"Fk" = (
-/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
+/obj/effect/turf_decal/tile/neutral{
+ dir = 1
},
-/turf/open/floor/carpet/black,
-/area/centcom/ferry)
+/obj/effect/turf_decal/tile/neutral,
+/obj/effect/turf_decal/tile/neutral{
+ dir = 4
+ },
+/obj/effect/turf_decal/tile/neutral{
+ dir = 8
+ },
+/obj/machinery/recharger{
+ pixel_y = 4
+ },
+/obj/structure/table/reinforced,
+/turf/open/floor/plasteel/dark,
+/area/centcom/control)
"Fm" = (
/obj/machinery/shower{
dir = 4
@@ -17669,6 +17688,23 @@
/obj/item/toy/tennis/green,
/obj/item/radio/headset/headset_cent,
/obj/item/clothing/under/rank/centcom_officer,
+/obj/item/clothing/suit/hooded/wintercoat/centcom,
+/obj/item/clothing/shoes/jackboots,
+/obj/item/pda/lieutenant{
+ hidden = 0
+ },
+/obj/item/melee/classic_baton/telescopic,
+/obj/item/storage/box/survival,
+/obj/item/crowbar/red,
+/obj/item/card/id/ert{
+ assignment = "Off-Duty Intelligence Officer";
+ desc = "An ID straight from Central Command.";
+ name = "Kenshin Midori's ID Card (Off-Duty Intelligence Officer)";
+ registered_name = "Kenshin Midori"
+ },
+/obj/item/encryptionkey/heads/captain,
+/obj/item/flashlight/seclite,
+/obj/item/gun/energy/e_gun/dragnet/snare,
/turf/open/floor/wood,
/area/centcom/ferry)
"Ms" = (
@@ -19923,9 +19959,6 @@
/area/centcom/holding)
"Vn" = (
/obj/structure/table/wood/fancy,
-/obj/item/candle/infinite{
- pixel_y = 6
- },
/obj/effect/turf_decal/loading_area{
dir = 1;
icon_state = "drain";
@@ -19941,6 +19974,10 @@
pixel_x = 7;
pixel_y = 5
},
+/obj/item/candle{
+ pixel_x = 1;
+ pixel_y = 6
+ },
/turf/open/floor/wood,
/area/centcom/control)
"Vo" = (
@@ -20252,13 +20289,6 @@
name = "plating"
},
/area/centcom/control)
-"Wm" = (
-/obj/machinery/door/airlock/centcom{
- name = "CentCom";
- opacity = 1
- },
-/turf/open/space/basic,
-/area/centcom/ferry)
"Wn" = (
/obj/effect/turf_decal/loading_area{
dir = 6;
@@ -20694,9 +20724,9 @@
/obj/item/reagent_containers/food/snacks/meatballspaghetti{
pixel_y = 14
},
-/obj/item/candle/infinite{
+/obj/item/candle{
pixel_x = 1;
- pixel_y = 3
+ pixel_y = 6
},
/turf/open/floor/wood,
/area/centcom/control)
@@ -21235,6 +21265,8 @@
dir = 1
},
/obj/structure/closet/crate/secure{
+ anchored = 1;
+ name = "secure gear crate";
req_access_txt = "101"
},
/obj/item/clothing/suit/space/officer,
@@ -21243,7 +21275,6 @@
/obj/item/clothing/gloves/combat,
/obj/item/implanter/cqc,
/obj/item/gun/energy/e_gun/stun,
-/obj/item/gun/energy/e_gun/dragnet/snare,
/obj/item/radio/headset/headset_cent/commander,
/obj/item/clothing/glasses/thermal,
/obj/item/clothing/under/syndicate{
@@ -21251,9 +21282,20 @@
},
/obj/item/card/id/ert{
assignment = "Intelligence Officer";
+ desc = "An ID straight from Central Command.";
name = "Kenshin Midori's ID Card (Intelligence Officer)";
registered_name = "Kenshin Midori"
},
+/obj/item/book{
+ damtype = "stamina";
+ desc = "An old and dusty book, the pages look faded from time while looking at the pages alone makes you tired.";
+ force = 80;
+ hitsound = "punch";
+ name = "very heavy book";
+ throwforce = 160
+ },
+/obj/item/storage/box/zipties,
+/obj/item/clothing/mask/gas/sechailer,
/turf/open/floor/wood,
/area/centcom/ferry)
"Zz" = (
@@ -54984,14 +55026,14 @@ oe
mD
mD
qR
-Wm
+ZT
mD
mD
mD
oe
mD
mD
-Fk
+ZT
mD
mD
mD
@@ -63197,7 +63239,7 @@ iu
io
rN
CX
-iC
+Fk
DF
DT
io
@@ -66005,7 +66047,7 @@ nM
nM
io
mQ
-iu
+io
rK
iu
tN
diff --git a/code/__DEFINES/sound.dm b/code/__DEFINES/sound.dm
index 581bb2bc..77964258 100644
--- a/code/__DEFINES/sound.dm
+++ b/code/__DEFINES/sound.dm
@@ -5,10 +5,10 @@
#define CHANNEL_JUKEBOX 1021
#define CHANNEL_JUKEBOX_START 1016 //The gap between this and CHANNEL_JUKEBOX determines the amount of free jukebox channels. This currently allows 6 jukebox channels to exist.
#define CHANNEL_JUSTICAR_ARK 1015
-#define CHANNEL_HEARTBEAT 1014 //sound channel for heartbeats
-#define CHANNEL_AMBIENCE 1013
-#define CHANNEL_BUZZ 1012
-#define CHANNEL_BICYCLE 1011
+#define CHANNEL_HEARTBEAT 1020 //sound channel for heartbeats
+#define CHANNEL_AMBIENCE 1019
+#define CHANNEL_BUZZ 1018
+#define CHANNEL_BICYCLE 1017
//CIT CHANNELS - TRY NOT TO REGRESS
#define CHANNEL_PRED 1010
@@ -79,3 +79,51 @@
'sound/hallucinations/growl3.ogg', 'sound/hallucinations/im_here1.ogg', 'sound/hallucinations/im_here2.ogg', 'sound/hallucinations/i_see_you1.ogg', 'sound/hallucinations/i_see_you2.ogg',\
'sound/hallucinations/look_up1.ogg', 'sound/hallucinations/look_up2.ogg', 'sound/hallucinations/over_here1.ogg', 'sound/hallucinations/over_here2.ogg', 'sound/hallucinations/over_here3.ogg',\
'sound/hallucinations/turn_around1.ogg', 'sound/hallucinations/turn_around2.ogg', 'sound/hallucinations/veryfar_noise.ogg', 'sound/hallucinations/wail.ogg')
+
+
+//default byond sound environments
+#define SOUND_ENVIRONMENT_NONE -1
+#define SOUND_ENVIRONMENT_GENERIC 0
+#define SOUND_ENVIRONMENT_PADDED_CELL 1
+#define SOUND_ENVIRONMENT_ROOM 2
+#define SOUND_ENVIRONMENT_BATHROOM 3
+#define SOUND_ENVIRONMENT_LIVINGROOM 4
+#define SOUND_ENVIRONMENT_STONEROOM 5
+#define SOUND_ENVIRONMENT_AUDITORIUM 6
+#define SOUND_ENVIRONMENT_CONCERT_HALL 7
+#define SOUND_ENVIRONMENT_CAVE 8
+#define SOUND_ENVIRONMENT_ARENA 9
+#define SOUND_ENVIRONMENT_HANGAR 10
+#define SOUND_ENVIRONMENT_CARPETED_HALLWAY 11
+#define SOUND_ENVIRONMENT_HALLWAY 12
+#define SOUND_ENVIRONMENT_STONE_CORRIDOR 13
+#define SOUND_ENVIRONMENT_ALLEY 14
+#define SOUND_ENVIRONMENT_FOREST 15
+#define SOUND_ENVIRONMENT_CITY 16
+#define SOUND_ENVIRONMENT_MOUNTAINS 17
+#define SOUND_ENVIRONMENT_QUARRY 18
+#define SOUND_ENVIRONMENT_PLAIN 19
+#define SOUND_ENVIRONMENT_PARKING_LOT 20
+#define SOUND_ENVIRONMENT_SEWER_PIPE 21
+#define SOUND_ENVIRONMENT_UNDERWATER 22
+#define SOUND_ENVIRONMENT_DRUGGED 23
+#define SOUND_ENVIRONMENT_DIZZY 24
+#define SOUND_ENVIRONMENT_PSYCHOTIC 25
+//If we ever make custom ones add them here
+
+//"sound areas": easy way of keeping different types of areas consistent.
+#define SOUND_AREA_STANDARD_STATION SOUND_ENVIRONMENT_PARKING_LOT
+#define SOUND_AREA_LARGE_ENCLOSED SOUND_ENVIRONMENT_QUARRY
+#define SOUND_AREA_SMALL_ENCLOSED SOUND_ENVIRONMENT_BATHROOM
+#define SOUND_AREA_TUNNEL_ENCLOSED SOUND_ENVIRONMENT_STONEROOM
+#define SOUND_AREA_LARGE_SOFTFLOOR SOUND_ENVIRONMENT_CARPETED_HALLWAY
+#define SOUND_AREA_MEDIUM_SOFTFLOOR SOUND_ENVIRONMENT_LIVINGROOM
+#define SOUND_AREA_SMALL_SOFTFLOOR SOUND_ENVIRONMENT_ROOM
+#define SOUND_AREA_ASTEROID SOUND_ENVIRONMENT_CAVE
+#define SOUND_AREA_SPACE SOUND_ENVIRONMENT_UNDERWATER
+#define SOUND_AREA_LAVALAND SOUND_ENVIRONMENT_MOUNTAINS
+#define SOUND_AREA_ICEMOON SOUND_ENVIRONMENT_CAVE
+#define SOUND_AREA_WOODFLOOR SOUND_ENVIRONMENT_CITY
+
+#define INTERACTION_SOUND_RANGE_MODIFIER -3
+#define EQUIP_SOUND_VOLUME 30
\ No newline at end of file
diff --git a/code/controllers/subsystem/vote.dm b/code/controllers/subsystem/vote.dm
index df5ea45d..d6673894 100644
--- a/code/controllers/subsystem/vote.dm
+++ b/code/controllers/subsystem/vote.dm
@@ -149,9 +149,14 @@ SUBSYSTEM_DEF(vote)
if("5")
v += winners[option] //Add the number votes to the pool
numbers += (winners[option]*5) //Add the value of the vote to numbers
- while (v < DYNAMIC_VOTE_NORMALIZATION) //For low low pop, low vote rounds.
- numbers += DYNAMIC_DEFAULT_CHAOS //stops the one person voting from setting the chaos to five and flooding the station with anomalies
- v += 1
+ if(v < DYNAMIC_VOTE_NORMALIZATION)
+ while (v < DYNAMIC_VOTE_NORMALIZATION) //For low low pop, low vote rounds.
+ numbers += DYNAMIC_DEFAULT_CHAOS //stops the one person voting from setting the chaos to five and flooding the station with anomalies
+ v += 1
+ else if (voted.len < GLOB.clients.len) //Have non-voters "vote" 2, if we're not lowpop
+ for(var/I in 1 to (GLOB.clients.len - voted.len))
+ v += 1
+ numbers += 2
var/total = 0
for (var/i in numbers)
total += i
diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm
index a0090bde..8cb1f333 100644
--- a/code/game/objects/items.dm
+++ b/code/game/objects/items.dm
@@ -29,9 +29,13 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
obj_flags = NONE
var/item_flags = NONE
- var/hitsound = null
- var/usesound = null
- var/throwhitsound = null
+
+ var/hitsound
+ var/usesound
+ var/throwhitsound
+ ///Sound used when equipping the item into a valid slot
+ var/equip_sound
+
var/w_class = WEIGHT_CLASS_NORMAL
var/total_mass //Total mass in arbitrary pound-like values. If there's no balance reasons for an item to have otherwise, this var should be the item's weight in pounds.
var/slot_flags = 0 //This is used to determine on which slots an item can fit.
@@ -423,6 +427,9 @@ GLOBAL_VAR_INIT(rpg_loot_items, FALSE)
A.Grant(user)
item_flags |= IN_INVENTORY
+ if(equip_sound && (slot_flags & slotdefine2slotbit(slot)))
+ playsound(src, equip_sound, EQUIP_SOUND_VOLUME, TRUE, ignore_walls = FALSE)
+
//sometimes we only want to grant the item's action if it's equipped in a specific slot.
/obj/item/proc/item_action_slot_check(slot, mob/user)
if(slot == SLOT_IN_BACKPACK || slot == SLOT_LEGCUFFED) //these aren't true slots, so avoid granting actions there
diff --git a/code/game/objects/items/cigs_lighters.dm b/code/game/objects/items/cigs_lighters.dm
index 1ea8b361..3d56fdb6 100644
--- a/code/game/objects/items/cigs_lighters.dm
+++ b/code/game/objects/items/cigs_lighters.dm
@@ -232,7 +232,6 @@ CIGARETTE PACKETS ARE IN FANCY.DM
if(lit)
user.visible_message("[user] calmly drops and treads on \the [src], putting it out instantly.")
new type_butt(user.loc)
- new /obj/effect/decal/cleanable/ash(user.loc)
qdel(src)
. = ..()
diff --git a/code/game/objects/items/storage/belt.dm b/code/game/objects/items/storage/belt.dm
index a91b592c..78d3d057 100644
--- a/code/game/objects/items/storage/belt.dm
+++ b/code/game/objects/items/storage/belt.dm
@@ -11,6 +11,7 @@
max_integrity = 300
var/content_overlays = FALSE //If this is true, the belt will gain overlays based on what it's holding
var/worn_overlays = FALSE //worn counterpart of the above.
+ equip_sound = 'sound/items/equip/toolbelt_equip.ogg'
/obj/item/storage/belt/suicide_act(mob/living/carbon/user)
user.visible_message("[user] begins belting [user.p_them()]self with \the [src]! It looks like [user.p_theyre()] trying to commit suicide!")
diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm
index e14646e2..1d960b21 100644
--- a/code/game/objects/structures/crates_lockers/closets.dm
+++ b/code/game/objects/structures/crates_lockers/closets.dm
@@ -27,8 +27,8 @@
var/mob_storage_capacity = 3 // how many human sized mob/living can fit together inside a closet.
var/storage_capacity = 30 //This is so that someone can't pack hundreds of items in a locker/crate then open it in a populated area to crash clients.
var/cutting_tool = /obj/item/weldingtool
- var/open_sound = 'sound/machines/click.ogg'
- var/close_sound = 'sound/machines/click.ogg'
+ var/open_sound = 'sound/effects/locker_open.ogg'
+ var/close_sound = 'sound/effects/locker_close.ogg'
var/material_drop = /obj/item/stack/sheet/metal
var/material_drop_amount = 2
var/delivery_icon = "deliverycloset" //which icon to use when packagewrapped. null to be unwrappable.
diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm
index 1d071557..45a49125 100644
--- a/code/modules/clothing/suits/miscellaneous.dm
+++ b/code/modules/clothing/suits/miscellaneous.dm
@@ -963,4 +963,12 @@
icon_state = "enzojacket"
item_state = "enzojacket"
body_parts_covered = CHEST|ARMS
-//End
\ No newline at end of file
+//End
+
+//Might get moved later since I have no clue where to put this stuff for now - Luke_vale
+/obj/item/clothing/suit/toggle/labcoat/formallab
+ name = "winter labcoat"
+ desc = "A stark white labcoat, thicker and kitted out with extra fluff to keep you warm even on the coldest of mad sceinctist nights."
+ icon_state = "labcoat_formal"
+ item_state = "labcoat_formal"
+ body_parts_covered = CHEST|ARMS
diff --git a/code/modules/clothing/under/_under.dm b/code/modules/clothing/under/_under.dm
index 2889242c..d581f8b2 100644
--- a/code/modules/clothing/under/_under.dm
+++ b/code/modules/clothing/under/_under.dm
@@ -16,6 +16,7 @@
var/obj/item/clothing/accessory/attached_accessory
var/mutable_appearance/accessory_overlay
mutantrace_variation = MUTANTRACE_VARIATION //Are there special sprites for specific situations? Don't use this unless you need to.
+ equip_sound = 'sound/items/equip/jumpsuit_equip.ogg'
/obj/item/clothing/under/worn_overlays(isinhands = FALSE)
. = list()
@@ -156,4 +157,4 @@
if(SENSOR_COORDS)
. += "Its vital tracker and tracking beacon appear to be enabled."
if(attached_accessory)
- . += "\A [attached_accessory] is attached to it."
+ . += "\A [attached_accessory] is attached to it."
diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm
index dc89f8b6..130c53ab 100644
--- a/code/modules/mob/living/carbon/human/examine.dm
+++ b/code/modules/mob/living/carbon/human/examine.dm
@@ -427,10 +427,10 @@
output += "
...?"
else
. += "[print_flavor_text()]"
- output += "
[url_encode(json_encode(flavor_text))]"
+ output += "
[url_encode(flavor_text)]"
if(ooc_text)
output += "
OOC"
- output += "
[url_encode(json_encode(ooc_text))]"
+ output += "
[url_encode(ooc_text)]"
SEND_SIGNAL(src, COMSIG_PARENT_EXAMINE, user, msg)
. += "*---------*"
diff --git a/code/modules/vending/clothesmate.dm b/code/modules/vending/clothesmate.dm
index bfc59e55..b5ec7e12 100644
--- a/code/modules/vending/clothesmate.dm
+++ b/code/modules/vending/clothesmate.dm
@@ -123,7 +123,8 @@
/obj/item/clothing/head/cowboyhat/white = 3,
/obj/item/clothing/head/cowboyhat/pink = 3,
/obj/item/clothing/shoes/cowboyboots = 3,
- /obj/item/clothing/shoes/cowboyboots/black = 3)
+ /obj/item/clothing/shoes/cowboyboots/black = 3,
+ /obj/item/clothing/under/polychromic/vsweater = 3)
contraband = list(/obj/item/clothing/under/syndicate/tacticool = 3,
/obj/item/clothing/under/syndicate/tacticool/skirt = 3,
/obj/item/clothing/mask/balaclava = 3,
diff --git a/html/statbrowser.html b/html/statbrowser.html
index c9856acc..f293891a 100644
--- a/html/statbrowser.html
+++ b/html/statbrowser.html
@@ -87,7 +87,7 @@ li a:hover:not(.active) {
font-size: 12px;
margin: 2px 2px;
cursor: pointer;
- border-radius: 10%;
+ border-radius: 0%;
transition-duration: 0.25s;
order: 3;
}
@@ -764,11 +764,6 @@ function remove_mobexamine() {
tab_change("Status");
}
-function update_mobexamine(TC) {
- turfcontents = JSON.parse(TC);
- if(current_tab == "Examine")
- draw_listedturf();
-}
//turf
@@ -959,26 +954,26 @@ function draw_verbs(cat){
function set_theme(which) {
if (which == "light") {
+ document.body.style.backgroundColor = "white";
+ document.body.style.color = "black";
document.body.className = "";
set_style_sheet("browserOutput_white");
+ setCookie("theme", "white", 365);
} else if (which == "dark") {
+ document.body.style.backgroundColor = "#171717";
+ document.body.style.color = "#a4bad6";
document.body.className = "dark";
set_style_sheet("browserOutput");
+ setCookie("theme", "dark", 365);
}
}
function set_light_theme() {
- document.body.style.backgroundColor = "white";
- document.body.style.color = "black";
- document.body.className = "";
- set_style_sheet("browserOutput_white")
+ set_theme("light");
}
function set_dark_theme() {
- document.body.style.backgroundColor = "#171717";
- document.body.style.color = "#a4bad6";
- document.body.className = "dark";
- set_style_sheet("browserOutput")
+ set_theme("dark");
}
function set_style_sheet(sheet) {
@@ -1013,6 +1008,22 @@ function create_debug(){
}
}
+function checkCookie() {
+ var stylecookie=getCookie("theme");
+ if (stylecookie == "dark") {
+ set_dark_theme();
+ } else {
+ set_light_theme();
+ }
+}
+
+function setCookie(cname,cvalue,exdays) {
+ var d = new Date();
+ d.setTime(d.getTime() + (exdays*24*60*60*1000));
+ var expires = "expires=" + d.toGMTString();
+ document.cookie = cname + "=" + cvalue + ";" + expires + ";path=/";
+}
+
function getCookie(cname) {
var name = cname + '=';
var ca = document.cookie.split(';');
@@ -1026,5 +1037,6 @@ function getCookie(cname) {
return '';
}
+