space cleanup (#17300)

* space cleanup

* this

* this too

---------

Co-authored-by: Cameron Lennox <killer65311@gmail.com>
This commit is contained in:
Kashargul
2025-03-14 11:37:13 +01:00
committed by GitHub
parent a7314a8766
commit c8aff28c5b
128 changed files with 1859 additions and 1861 deletions
+4 -4
View File
@@ -39,8 +39,8 @@
else
violent = ""
admin_attack_log(attacker,
victim,
"used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred",
"was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred",
"used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into")
victim,
"used \the [weapon] to [violent]inject - [reagents] - [amount_transferred]u transferred",
"was [violent]injected with \the [weapon] - [reagents] - [amount_transferred]u transferred",
"used \the [weapon] to [violent]inject [reagents] ([amount_transferred]u transferred) into")
*/
+3 -3
View File
@@ -335,9 +335,9 @@
var/jobs = ""
/***********************************WARNING!************************************
The jobban stuff looks mangled and disgusting
But it looks beautiful in-game
-Nodrak
The jobban stuff looks mangled and disgusting
But it looks beautiful in-game
-Nodrak
************************************WARNING!***********************************/
var/counter = 0
//Regular jobs
+29 -29
View File
@@ -125,35 +125,35 @@ GLOBAL_LIST_BOILERPLATE(all_debugging_effects, /obj/effect/debugging)
feedback_add_details("admin_verb","mIRD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
var/list/debug_verbs = list (
/client/proc/do_not_use_these
,/client/proc/camera_view
,/client/proc/sec_camera_report
,/client/proc/intercom_view
,/client/proc/Cell
,/client/proc/atmosscan
,/client/proc/powerdebug
,/client/proc/count_objects_on_z_level
,/client/proc/count_objects_all
,/client/proc/cmd_assume_direct_control
,/client/proc/jump_to_dead_group
,/client/proc/startSinglo
,/client/proc/set_server_fps
,/client/proc/cmd_admin_grantfullaccess
,/client/proc/kaboom
,/client/proc/cmd_admin_areatest
,/client/proc/cmd_admin_rejuvenate
,/datum/admins/proc/show_traitor_panel
,/client/proc/print_jobban_old
,/client/proc/print_jobban_old_filter
,/client/proc/forceEvent
,/client/proc/Zone_Info
,/client/proc/Test_ZAS_Connection
,/client/proc/ZoneTick
,/client/proc/rebootAirMaster
,/client/proc/hide_debug_verbs
,/client/proc/testZAScolors
,/client/proc/testZAScolors_remove
,/datum/admins/proc/setup_supermatter
/client/proc/do_not_use_these
,/client/proc/camera_view
,/client/proc/sec_camera_report
,/client/proc/intercom_view
,/client/proc/Cell
,/client/proc/atmosscan
,/client/proc/powerdebug
,/client/proc/count_objects_on_z_level
,/client/proc/count_objects_all
,/client/proc/cmd_assume_direct_control
,/client/proc/jump_to_dead_group
,/client/proc/startSinglo
,/client/proc/set_server_fps
,/client/proc/cmd_admin_grantfullaccess
,/client/proc/kaboom
,/client/proc/cmd_admin_areatest
,/client/proc/cmd_admin_rejuvenate
,/datum/admins/proc/show_traitor_panel
,/client/proc/print_jobban_old
,/client/proc/print_jobban_old_filter
,/client/proc/forceEvent
,/client/proc/Zone_Info
,/client/proc/Test_ZAS_Connection
,/client/proc/ZoneTick
,/client/proc/rebootAirMaster
,/client/proc/hide_debug_verbs
,/client/proc/testZAScolors
,/client/proc/testZAScolors_remove
,/datum/admins/proc/setup_supermatter
,/client/proc/atmos_toggle_debug
,/client/proc/spawn_tanktransferbomb
,/client/proc/take_picture
+18 -18
View File
@@ -1,24 +1,24 @@
/client/proc/resize(var/mob/living/L in mob_list)
set name = "Resize"
set desc = "Resizes any living mob without any restrictions on size."
set category = "Fun.Event Kit"
if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT))
return
set name = "Resize"
set desc = "Resizes any living mob without any restrictions on size."
set category = "Fun.Event Kit"
if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT))
return
var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1, round_value=FALSE)
if(!size_multiplier)
return //cancelled
var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1, round_value=FALSE)
if(!size_multiplier)
return //cancelled
size_multiplier = clamp(size_multiplier, -50, 50) //VOREStation Edit - being able to make people upside down is fun. Also 1000 is way, WAY too big. Honestly 50 is too big but at least you can see 50 and it doesn't break the rendering.
var/can_be_big = L.has_large_resize_bounds()
var/very_big = is_extreme_size(size_multiplier)
size_multiplier = clamp(size_multiplier, -50, 50) //VOREStation Edit - being able to make people upside down is fun. Also 1000 is way, WAY too big. Honestly 50 is too big but at least you can see 50 and it doesn't break the rendering.
var/can_be_big = L.has_large_resize_bounds()
var/very_big = is_extreme_size(size_multiplier)
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
to_chat(src,span_warning("[L] will lose this size upon moving into an area where this size is not allowed."))
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
to_chat(src,span_warning("[L] will retain this normally unallowed size outside this area."))
if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse
to_chat(src,span_warning("[L] will lose this size upon moving into an area where this size is not allowed."))
else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse
to_chat(src,span_warning("[L] will retain this normally unallowed size outside this area."))
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE)
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
feedback_add_details("admin_verb","RESIZE")
log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].")
feedback_add_details("admin_verb","RESIZE")
+15 -15
View File
@@ -38,28 +38,28 @@
icon_state = "key"
/obj/machinery/gateway/centeraway/proc/entrydetect()
return
return
/obj/machinery/gateway/centeraway/mcguffin/entrydetect()
if(key)
return
if(key)
return
var/list/spawners = list()
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
spawners += sp
var/list/spawners = list()
for(var/obj/effect/landmark/mcguffin_spawner/sp in world)
spawners += sp
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
var/obj/effect/landmark/mcguffin_spawner/the_cool_one = pick(spawners)
var/atom/destination = get_turf(the_cool_one)
var/obj/structure/closet/CL = locate() in destination
if(CL)
destination = CL
var/atom/destination = get_turf(the_cool_one)
var/obj/structure/closet/CL = locate() in destination
if(CL)
destination = CL
if(!destination)
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
destination = get_turf(src)
if(!destination)
warning("A gateway is trying to spawn it's mcguffin but there are no mapped in spawner landmarks")
destination = get_turf(src)
key = new mcguffin_type(destination)
key = new mcguffin_type(destination)
/obj/machinery/gateway/centeraway/mcguffin/Bumped(atom/movable/M as mob|obj)
if(!ready) return
+2 -2
View File
@@ -24,11 +24,11 @@
// var/value = null
if (pos)
// No, don't do lowertext here, that breaks paths on linux
// No, don't do lowertext here, that breaks paths on linux
name = copytext(t, 1, pos)
// value = copytext(t, pos + 1)
else
// No, don't do lowertext here, that breaks paths on linux
// No, don't do lowertext here, that breaks paths on linux
name = t
if (!name)
+1 -1
View File
@@ -5,7 +5,7 @@
var/effect_desc = "This does nothing special." // For examine panel.
var/ai_desc = "default" // Shown when examining the overmind.
var/difficulty = BLOB_DIFFICULTY_EASY // A rough guess on how hard a blob is to kill.
// When a harder blob spawns by event, the crew is given more information than usual from the announcement.
// When a harder blob spawns by event, the crew is given more information than usual from the announcement.
var/color = "#FFFFFF" // The actual blob's color.
var/complementary_color = "#000000" //a color that's complementary to the normal blob color. Blob mobs are colored in this.
@@ -68,16 +68,16 @@
character_name = list("Xander Bevin")
/datum/gear/fluff/charlotte_medal
path = /obj/item/clothing/accessory/medal/silver/security
display_name = "Charlotte's Robust Security Medal"
ckeywhitelist = list("alfalah")
character_name = list("Charlotte Graves")
path = /obj/item/clothing/accessory/medal/silver/security
display_name = "Charlotte's Robust Security Medal"
ckeywhitelist = list("alfalah")
character_name = list("Charlotte Graves")
/datum/gear/fluff/charlotte_medal_2
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Charlotte's Medal of Conduct"
ckeywhitelist = list("alfalah")
character_name = list("Charlotte Graves")
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Charlotte's Medal of Conduct"
ckeywhitelist = list("alfalah")
character_name = list("Charlotte Graves")
/datum/gear/fluff/charlotte_cigarettes
path = /obj/item/storage/fancy/fluff/charlotte
@@ -912,10 +912,10 @@
// P CKEYS
/datum/gear/fluff/evelyn_medal
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Evelyn's Medal of Conduct"
ckeywhitelist = list("pandora029")
character_name = list("Evelyn Tareen")
path = /obj/item/clothing/accessory/medal/conduct
display_name = "Evelyn's Medal of Conduct"
ckeywhitelist = list("pandora029")
character_name = list("Evelyn Tareen")
/datum/gear/fluff/evelyn_coat
path = /obj/item/clothing/suit/storage/hooded/wintercoat/security/fluff/evelyn/
@@ -1205,10 +1205,10 @@
character_name = list("Lilith Vespers")
/datum/gear/fluff/greek_dress
path = /obj/item/clothing/under/fluff/greek_dress
display_name = "mytilenean Dress"
ckeywhitelist = list("sudate")
character_name = list("Shea Corbett")
path = /obj/item/clothing/under/fluff/greek_dress
display_name = "mytilenean Dress"
ckeywhitelist = list("sudate")
character_name = list("Shea Corbett")
/datum/gear/fluff/silent_mimemask
path = /obj/item/clothing/mask/gas/sexymime
@@ -1225,24 +1225,24 @@
character_name = list("Silent Stripes")
/datum/gear/fluff/parrizjacket
path = /obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
display_name = "pink crop bomber"
slot = slot_wear_suit
ckeywhitelist = list("satinisle")
character_name = list("Parriz Tavakdavi")
path = /obj/item/clothing/suit/storage/toggle/labcoat/fluff/parrizjacket
display_name = "pink crop bomber"
slot = slot_wear_suit
ckeywhitelist = list("satinisle")
character_name = list("Parriz Tavakdavi")
/datum/gear/fluff/dark_tarot
path = /obj/item/deck/dark_tarot
display_name = "dark rose tarot deck"
ckeywhitelist = list("satinisle")
character_name = list("Millie Orlen")
path = /obj/item/deck/dark_tarot
display_name = "dark rose tarot deck"
ckeywhitelist = list("satinisle")
character_name = list("Millie Orlen")
/datum/gear/fluff/memorycrown
path = /obj/item/clothing/head/fluff/memory_crown
display_name = "memory crown"
slot = slot_head
ckeywhitelist = list("sixberry")
character_name = list("Thistle")
path = /obj/item/clothing/head/fluff/memory_crown
display_name = "memory crown"
slot = slot_head
ckeywhitelist = list("sixberry")
character_name = list("Thistle")
// T CKEYS
/datum/gear/fluff/ascian_medal
@@ -78,12 +78,12 @@
path = /obj/item/clothing/shoes/laceup
/datum/gear/shoes/lacey/New()
..()
var/list/laces = list()
for(var/lace in typesof(/obj/item/clothing/shoes/laceup))
var/obj/item/clothing/shoes/laceup/lace_type = lace
laces[initial(lace_type.name)] = lace_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(laces))
..()
var/list/laces = list()
for(var/lace in typesof(/obj/item/clothing/shoes/laceup))
var/obj/item/clothing/shoes/laceup/lace_type = lace
laces[initial(lace_type.name)] = lace_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(laces))
/datum/gear/shoes/green
display_name = "shoes, green"
@@ -118,12 +118,12 @@
path = /obj/item/clothing/shoes/hitops/
/datum/gear/shoes/hitops/New()
..()
var/list/hitops = list()
for(var/hitop in typesof(/obj/item/clothing/shoes/hitops))
var/obj/item/clothing/shoes/hitops/hitop_type = hitop
hitops[initial(hitop_type.name)] = hitop_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
..()
var/list/hitops = list()
for(var/hitop in typesof(/obj/item/clothing/shoes/hitops))
var/obj/item/clothing/shoes/hitops/hitop_type = hitop
hitops[initial(hitop_type.name)] = hitop_type
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(hitops))
/datum/gear/shoes/flipflops
display_name = "flip flops"
@@ -755,20 +755,20 @@
gear_tweaks += new/datum/gear_tweak/path(croppedhoodies)
/datum/gear/suit/drive
display_name = "relatable jacket"
path = /obj/item/clothing/suit/storage/drive
display_name = "relatable jacket"
path = /obj/item/clothing/suit/storage/drive
/datum/gear/suit/motojacket
display_name = "motorcycle jacket"
path = /obj/item/clothing/suit/storage/toggle/moto_jacket
display_name = "motorcycle jacket"
path = /obj/item/clothing/suit/storage/toggle/moto_jacket
/datum/gear/suit/punkvest
display_name = "punk vest"
path = /obj/item/clothing/suit/storage/punkvest
display_name = "punk vest"
path = /obj/item/clothing/suit/storage/punkvest
/datum/gear/suit/raincoat
display_name = "raincoat"
path = /obj/item/clothing/suit/storage/hooded/raincoat
display_name = "raincoat"
path = /obj/item/clothing/suit/storage/hooded/raincoat
//hooded cloaks
/datum/gear/suit/roles/hoodedcloaks
@@ -787,16 +787,16 @@
//oversized shirts
/datum/gear/suit/nerdshirt
display_name = "nerdy shirt"
path = /obj/item/clothing/suit/nerdshirt
display_name = "nerdy shirt"
path = /obj/item/clothing/suit/nerdshirt
/datum/gear/suit/ianshirt
display_name = "worn corgi shirt"
path = /obj/item/clothing/suit/ianshirt
display_name = "worn corgi shirt"
path = /obj/item/clothing/suit/ianshirt
/datum/gear/suit/wornshirt
display_name = "worn shirt"
path = /obj/item/clothing/suit/wornshirt
display_name = "worn shirt"
path = /obj/item/clothing/suit/wornshirt
/datum/gear/suit/bomber_pilot
display_name = "bomber jacket, pilot"
@@ -543,16 +543,16 @@
//leotards
/datum/gear/uniform/leotard
display_name = "leotard, black"
path = /obj/item/clothing/under/leotard
display_name = "leotard, black"
path = /obj/item/clothing/under/leotard
/datum/gear/uniform/leotardcolor
display_name = "leotard, colorable"
path = /obj/item/clothing/under/leotardcolor
display_name = "leotard, colorable"
path = /obj/item/clothing/under/leotardcolor
/datum/gear/uniform/leotardcolor/New()
..()
gear_tweaks += gear_tweak_free_color_choice
..()
gear_tweaks += gear_tweak_free_color_choice
//skinsuits
/datum/gear/uniform/skinsuits
@@ -611,17 +611,17 @@
//half-moon outfit
/datum/gear/uniform/halfmoon
display_name = "half moon outfit"
path = /obj/item/clothing/under/half_moon
display_name = "half moon outfit"
path = /obj/item/clothing/under/half_moon
//fiend clothes
/datum/gear/uniform/fiendsuit
display_name = "fiendish suit"
path = /obj/item/clothing/under/fiendsuit
display_name = "fiendish suit"
path = /obj/item/clothing/under/fiendsuit
/datum/gear/uniform/fienddress
display_name = "fiendish dress"
path = /obj/item/clothing/under/fienddress
display_name = "fiendish dress"
path = /obj/item/clothing/under/fienddress
//tabard dresses
/datum/gear/uniform/tabarddress
+1 -1
View File
@@ -6,7 +6,7 @@ SEE_MOBS // can see all mobs, no matter what
SEE_OBJS // can see all objs, no matter what
SEE_TURFS // can see all turfs (and areas), no matter what
SEE_PIXELS// if an object is located on an unlit area, but some of its pixels are
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
// in a lit area (via pixel_x,y or smooth movement), can see those pixels
BLIND // can't see anything
*/
///////////////////////////////////////////////////////////////////////
+23 -23
View File
@@ -268,13 +268,13 @@
return 1
/obj/item/clothing/glasses/hud/security/eyepatch
name = "Security Hudpatch"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records."
icon_state = "eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
var/eye = null
name = "Security Hudpatch"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records."
icon_state = "eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
var/eye = null
/obj/item/clothing/glasses/hud/security/eyepatch/verb/switcheye()
set name = "Switch Eyepatch"
@@ -291,15 +291,15 @@
update_clothing_icon()
/obj/item/clothing/glasses/hud/security/eyepatch2
name = "Security Hudpatch MKII"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records. This updated model offers better ergonomics and updated sensors."
icon = 'icons/inventory/eyes/item_vr.dmi'
icon_override = 'icons/inventory/eyes/mob_vr.dmi'
icon_state = "sec_eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
var/eye = null
name = "Security Hudpatch MKII"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their ID status and security records. This updated model offers better ergonomics and updated sensors."
icon = 'icons/inventory/eyes/item_vr.dmi'
icon_override = 'icons/inventory/eyes/mob_vr.dmi'
icon_state = "sec_eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_ID,VIS_CH_WANTED,VIS_CH_IMPTRACK,VIS_CH_IMPLOYAL,VIS_CH_IMPCHEM)
var/eye = null
/obj/item/clothing/glasses/hud/security/eyepatch2/verb/switcheye()
set name = "Switch Eyepatch"
@@ -317,13 +317,13 @@
/obj/item/clothing/glasses/hud/health/eyepatch
name = "Medical Hudpatch"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their health status."
icon_state = "eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH)
var/eye = null
name = "Medical Hudpatch"
desc = "An eyepatch with built in scanners, that analyzes those in view and provides accurate data about their health status."
icon_state = "eyepatch"
item_state_slots = list(slot_r_hand_str = "blindfold", slot_l_hand_str = "blindfold")
body_parts_covered = 0
enables_planes = list(VIS_CH_STATUS,VIS_CH_HEALTH)
var/eye = null
/obj/item/clothing/glasses/hud/health/eyepatch/verb/switcheye()
set name = "Switch Eyepatch"
+13 -13
View File
@@ -222,22 +222,22 @@
//hooded cloak hoods
/obj/item/clothing/head/hood/cloak
name = "maroon cloak hood"
desc = "A hood attached to a maroon cloak."
icon_state = "maroon_cloakhood"
flags_inv = HIDEEARS|BLOCKHAIR
name = "maroon cloak hood"
desc = "A hood attached to a maroon cloak."
icon_state = "maroon_cloakhood"
flags_inv = HIDEEARS|BLOCKHAIR
/obj/item/clothing/head/hood/cloak/winter
name = "winter cloak hood"
desc = "A hood attached to a winter cloak."
icon_state = "winter_cloakhood"
name = "winter cloak hood"
desc = "A hood attached to a winter cloak."
icon_state = "winter_cloakhood"
/obj/item/clothing/head/hood/cloak/asymmetric
name = "asymmetric cloak hood"
desc = "A hood attached to an asymmetric cloak."
icon_state = "asymmetric_cloakhood"
name = "asymmetric cloak hood"
desc = "A hood attached to an asymmetric cloak."
icon_state = "asymmetric_cloakhood"
/obj/item/clothing/head/hood/cloak/fancy
name = "fancy cloak hood"
desc = "A hood attached to a fancy cloak."
icon_state = "hb_cloakhood"
name = "fancy cloak hood"
desc = "A hood attached to a fancy cloak."
icon_state = "hb_cloakhood"
+7 -7
View File
@@ -16,9 +16,9 @@
w_class = ITEMSIZE_TINY
/obj/item/clothing/mask/muzzle/New()
..()
say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!")
say_verbs = list("mumbles", "says")
..()
say_messages = list("Mmfph!", "Mmmf mrrfff!", "Mmmf mnnf!")
say_verbs = list("mumbles", "says")
// Clumsy folks can't take the mask off themselves.
/obj/item/clothing/mask/muzzle/attack_hand(mob/living/user as mob)
@@ -218,10 +218,10 @@
body_parts_covered = HEAD|FACE
*/
/obj/item/clothing/mask/horsehead/New()
..()
// The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary
say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
say_verbs = list("whinnies", "neighs", "says")
..()
// The horse mask doesn't cause voice changes by default, the wizard spell changes the flag as necessary
say_messages = list("NEEIIGGGHHHH!", "NEEEIIIIGHH!", "NEIIIGGHH!", "HAAWWWWW!", "HAAAWWW!")
say_verbs = list("whinnies", "neighs", "says")
/obj/item/clothing/mask/ai
name = "camera MIU"
+6 -6
View File
@@ -253,9 +253,9 @@
siemens_coefficient = 0.6
/obj/item/clothing/shoes/boots/singer
name = "blue performer's boots"
desc = "These boots were made for dancing."
icon_state = "bsing"
name = "blue performer's boots"
desc = "These boots were made for dancing."
icon_state = "bsing"
/obj/item/clothing/shoes/boots/singer/yellow
name = "yellow performer's boots"
@@ -263,6 +263,6 @@
icon_state = "ysing"
/obj/item/clothing/shoes/boots/half_moon
name = "half moon boots"
desc = "Flexible and tight, these boots ensure the wearer will be leaving a solid impression without sacrificing mobility."
icon_state = "half_moon"
name = "half moon boots"
desc = "Flexible and tight, these boots ensure the wearer will be leaving a solid impression without sacrificing mobility."
icon_state = "half_moon"
+17 -18
View File
@@ -368,27 +368,26 @@
//hooded cloaks
/obj/item/clothing/suit/storage/hooded/cloak
name = "hooded maroon cloak"
desc = "A simple maroon colored cloak."
icon_state = "maroon_cloak"
body_parts_covered = CHEST|ARMS
hoodtype = /obj/item/clothing/head/hood/cloak
name = "hooded maroon cloak"
desc = "A simple maroon colored cloak."
icon_state = "maroon_cloak"
body_parts_covered = CHEST|ARMS
hoodtype = /obj/item/clothing/head/hood/cloak
/obj/item/clothing/suit/storage/hooded/cloak/winter
name = "hooded winter cloak"
desc = "A simple wool cloak used during winter."
icon_state = "winter_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/winter
name = "hooded winter cloak"
desc = "A simple wool cloak used during winter."
icon_state = "winter_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/winter
/obj/item/clothing/suit/storage/hooded/cloak/asymmetric
name = "hooded asymmetric cloak"
desc = "A blue hooded cloak with an asymmetric design."
icon_state = "asymmetric_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/asymmetric
name = "hooded asymmetric cloak"
desc = "A blue hooded cloak with an asymmetric design."
icon_state = "asymmetric_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/asymmetric
/obj/item/clothing/suit/storage/hooded/cloak/fancy
name = "hooded fancy cloak"
desc = "A fancy black hooded cloak."
icon_state = "hb_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/fancy
name = "hooded fancy cloak"
desc = "A fancy black hooded cloak."
icon_state = "hb_cloak"
hoodtype = /obj/item/clothing/head/hood/cloak/fancy
+13 -13
View File
@@ -1129,19 +1129,19 @@
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/croppedhoodie/croppier
name = "high cropped hoodie"
desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional."
icon_state = "croppierhoodie"
name = "high cropped hoodie"
desc = "This style of hoodie is worn by those that wish to display ample amounts of midriff, or never threw out their childhood apparel. The hood is cosmetic, and non-functional."
icon_state = "croppierhoodie"
/obj/item/clothing/suit/storage/croppedhoodie/croppierer
name = "very high cropped hoodie"
desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional."
icon_state = "highcrophoodie"
name = "very high cropped hoodie"
desc = "This style of hoodie is worn by those that wish to display ample amounts of underboob, and love the breeze. Comes with a free 'functionally_nude' sticker. The hood is cosmetic, and non-functional."
icon_state = "highcrophoodie"
/obj/item/clothing/suit/storage/croppedhoodie/croppiest
name = "super cropped hoodie"
desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional."
icon_state = "supercroppedhoodie"
name = "super cropped hoodie"
desc = "This style of hoodie is worn by those that have little respect for the concept of a hoodie. Often seen in nightclubs and your daughter's wardrdobe. The hood is cosmetic, and non-functional."
icon_state = "supercroppedhoodie"
//Drive jacket
/obj/item/clothing/suit/storage/drive
@@ -1158,7 +1158,7 @@
body_parts_covered = UPPER_TORSO|ARMS
/obj/item/clothing/suit/storage/punkvest
name = "punk vest"
desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk."
icon_state = "punkvest"
body_parts_covered = CHEST|ARMS
name = "punk vest"
desc = "For the spiritual rebels that nevertheless wish to conform to standard goth trends. You're totally showing them your anti-authority spunk."
icon_state = "punkvest"
body_parts_covered = CHEST|ARMS
+63 -63
View File
@@ -573,9 +573,9 @@
icon_state = "countess"
/obj/item/clothing/under/dress/verglasdress
name = "verglas dress"
desc = "The modern twist on a forgotten pattern, the Verglas style utilizes comfortable velvet and silver white satin to create an otherworldly effect evocative of winter, or the void."
icon_state = "verglas_dress"
name = "verglas dress"
desc = "The modern twist on a forgotten pattern, the Verglas style utilizes comfortable velvet and silver white satin to create an otherworldly effect evocative of winter, or the void."
icon_state = "verglas_dress"
/obj/item/clothing/under/dress/alpine
name = "alpine dress"
@@ -1084,19 +1084,19 @@
icon_state = "swim_cow"
/obj/item/clothing/under/swimsuit/highclass
name = "high class swimsuit"
desc = "An elegant swimsuit with a white bikini top and black bikini bottom. Thin black silk drapes down the back and goes to the upper thighs, and authentic gold rings hold the top together at the bust and back."
icon_state = "swim_highclass"
name = "high class swimsuit"
desc = "An elegant swimsuit with a white bikini top and black bikini bottom. Thin black silk drapes down the back and goes to the upper thighs, and authentic gold rings hold the top together at the bust and back."
icon_state = "swim_highclass"
/obj/item/clothing/under/swimsuit/risque
name = "risque swimsuit"
desc = "This fits a bit too snug in all the right places. Comes with a collar, for inscrutable reasons."
icon_state = "swim_risque"
name = "risque swimsuit"
desc = "This fits a bit too snug in all the right places. Comes with a collar, for inscrutable reasons."
icon_state = "swim_risque"
/obj/item/clothing/under/swimsuit/streamlined
name = "streamlined swimsuit"
desc = "An all white one-piece that maintains modesty without sacrificing class."
icon_state = "swim_stream"
name = "streamlined swimsuit"
desc = "An all white one-piece that maintains modesty without sacrificing class."
icon_state = "swim_stream"
/*
* Pyjamas
@@ -1534,14 +1534,14 @@
//leotards
/obj/item/clothing/under/leotard
name = "black leotard"
desc = "A black leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
icon_state = "leotard"
name = "black leotard"
desc = "A black leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
icon_state = "leotard"
/obj/item/clothing/under/leotardcolor
name = "colored leotard"
desc = "A colorable leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
icon_state = "leotard_color"
name = "colored leotard"
desc = "A colorable leotard with a piece of semi-transparent cloth near the bust. Perfect for showing off cleavage. Bunny ears not included."
icon_state = "leotard_color"
//skinsuits
/obj/item/clothing/under/skinsuit
@@ -1550,18 +1550,18 @@
icon_state = "skinsuit"
/obj/item/clothing/under/skinsuit/gray
name = "gray skinsuit"
icon_state = "skinsuit_g"
name = "gray skinsuit"
icon_state = "skinsuit_g"
/obj/item/clothing/under/skinsuit/leotard
name = "leotard skinsuit"
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
icon_state = "skinsuitleo"
name = "leotard skinsuit"
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
icon_state = "skinsuitleo"
/obj/item/clothing/under/skinsuit/leotard/gray
name = "gray leotard skinsuit"
icon_state = "skinsuitleo_g"
name = "gray leotard skinsuit"
icon_state = "skinsuitleo_g"
/obj/item/clothing/under/skinsuit/fem
name = "feminine skinsuit"
@@ -1569,17 +1569,17 @@
icon_state = "skinsuitfem"
/obj/item/clothing/under/skinsuit/fem/gray
name = "feminine gray skinsuit"
icon_state = "skinsuitfem_g"
name = "feminine gray skinsuit"
icon_state = "skinsuitfem_g"
/obj/item/clothing/under/skinsuit/fem/leotard
name = "feminine leotard skinsuit"
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
icon_state = "skinsuitfemleo"
name = "feminine leotard skinsuit"
desc = "The skinsuit's leotard variant has long since eclipsed its initial function as a breathable undersuit for submersible hardsuits. Although still utilized in this role, it has become rather fashionable to wear outside of deep water operations."
icon_state = "skinsuitfemleo"
/obj/item/clothing/under/skinsuit/fem/leotard/gray
name = "feminine gray leotard skinsuit"
icon_state = "skinsuitfemleo_g"
name = "feminine gray leotard skinsuit"
icon_state = "skinsuitfemleo_g"
//baggy turtlenecks
/obj/item/clothing/under/turtlebaggy
@@ -1590,58 +1590,58 @@
/obj/item/clothing/under/turtlebaggy/cream_fem
name = "feminine cream baggy turtleneck"
icon_state = "bb_turtle_fem"
name = "feminine cream baggy turtleneck"
icon_state = "bb_turtle_fem"
/obj/item/clothing/under/turtlebaggy/purple
name = "purple baggy turtleneck"
icon_state = "bb_turtlepur"
name = "purple baggy turtleneck"
icon_state = "bb_turtlepur"
/obj/item/clothing/under/turtlebaggy/purple_fem
name = "feminine purple baggy turtleneck"
icon_state = "bb_turtlepur_fem"
name = "feminine purple baggy turtleneck"
icon_state = "bb_turtlepur_fem"
/obj/item/clothing/under/turtlebaggy/red
name = "red baggy turtleneck"
icon_state = "bb_turtlered"
name = "red baggy turtleneck"
icon_state = "bb_turtlered"
/obj/item/clothing/under/turtlebaggy/red_fem
name = "feminine red baggy turtleneck"
icon_state = "bb_turtlered_fem"
name = "feminine red baggy turtleneck"
icon_state = "bb_turtlered_fem"
/obj/item/clothing/under/turtlebaggy/blue
name = "blue baggy turtleneck"
icon_state = "bb_turtleblu"
name = "blue baggy turtleneck"
icon_state = "bb_turtleblu"
/obj/item/clothing/under/turtlebaggy/blue_fem
name = "feminine blue baggy turtleneck"
icon_state = "bb_turtleblu_fem"
name = "feminine blue baggy turtleneck"
icon_state = "bb_turtleblu_fem"
/obj/item/clothing/under/turtlebaggy/green
name = "green baggy turtleneck"
icon_state = "bb_turtlegrn"
name = "green baggy turtleneck"
icon_state = "bb_turtlegrn"
/obj/item/clothing/under/turtlebaggy/green_fem
name = "feminine green baggy turtleneck"
icon_state = "bb_turtlegrn_fem"
name = "feminine green baggy turtleneck"
icon_state = "bb_turtlegrn_fem"
/obj/item/clothing/under/turtlebaggy/black
name = "black baggy turtleneck"
icon_state = "bb_turtleblk"
name = "black baggy turtleneck"
icon_state = "bb_turtleblk"
/obj/item/clothing/under/turtlebaggy/black_fem
name = "feminine black baggy turtleneck"
icon_state = "bb_turtleblk_fem"
name = "feminine black baggy turtleneck"
icon_state = "bb_turtleblk_fem"
//more big sweaters
@@ -1663,21 +1663,21 @@
//half-moon outfit
/obj/item/clothing/under/half_moon
name = "half moon outfit"
desc = "This eminently fashionable outfit consists of a tailored latex leotard and daringly cut white shorts. Paired with plunging off-color stockings, it's to die for."
icon_state = "half_moon"
name = "half moon outfit"
desc = "This eminently fashionable outfit consists of a tailored latex leotard and daringly cut white shorts. Paired with plunging off-color stockings, it's to die for."
icon_state = "half_moon"
//fiend clothes
/obj/item/clothing/under/fiendsuit
name = "fiendish suit"
desc = "A red and black suit befitting someone from the dark pits themselves… Or someone way too edgy."
icon_state = "fiendsuit"
name = "fiendish suit"
desc = "A red and black suit befitting someone from the dark pits themselves… Or someone way too edgy."
icon_state = "fiendsuit"
/obj/item/clothing/under/fienddress
name = "fiendish dress"
desc = "A red and black dress befitting someone from the dark pits themselves… Or someone way too edgy."
icon_state = "fienddress"
name = "fiendish dress"
desc = "A red and black dress befitting someone from the dark pits themselves… Or someone way too edgy."
icon_state = "fienddress"
//bunny suits
+4 -4
View File
@@ -486,20 +486,20 @@
manipulating = 1
if(!anchored)
user.visible_message("\The [user] begins securing \the [src] to the floor.",
"You begin securing \the [src] to the floor.")
"You begin securing \the [src] to the floor.")
else
user.visible_message(span_warning("\The [user] begins unsecuring \the [src] from the floor."),
"You begin unsecuring \the [src] from the floor.")
"You begin unsecuring \the [src] from the floor.")
playsound(src, W.usesound, 50, 1)
if(!do_after(user, 20 * W.toolspeed))
manipulating = 0
return
if(!anchored)
user.visible_message(span_notice("\The [user] has secured \the [src] to the floor."),
span_notice("You have secured \the [src] to the floor."))
span_notice("You have secured \the [src] to the floor."))
else
user.visible_message(span_warning("\The [user] has unsecured \the [src] from the floor."),
span_notice("You have unsecured \the [src] from the floor."))
span_notice("You have unsecured \the [src] from the floor."))
anchored = !anchored
manipulating = 0
return
+1 -1
View File
@@ -781,7 +781,7 @@
)
premium = list(/obj/item/bedsheet/rainbow = 1)
contraband = list(/obj/item/clothing/mask/gas/clown_hat = 1,
/obj/item/clothing/accessory/collar/collarplanet_earth = 5)
/obj/item/clothing/accessory/collar/collarplanet_earth = 5)
/obj/machinery/vending/loadout/clothing
name = "General Jump"
+16 -16
View File
@@ -1,33 +1,33 @@
// Not specifically /human type because those won't allow FBPs to use them
/decl/emote/helper/vwag
key = "vwag"
emote_message_3p = ""
key = "vwag"
emote_message_3p = ""
/decl/emote/helper/vwag/mob_can_use(mob/living/carbon/human/user)
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
return FALSE
return ..()
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
return FALSE
return ..()
/decl/emote/helper/vwag/do_emote(var/mob/living/carbon/human/user, var/extra_params)
if(user.toggle_tail(message = 1))
return ..()
if(user.toggle_tail(message = 1))
return ..()
/decl/emote/helper/vwag/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
/decl/emote/helper/vflap
key = "vflap"
emote_message_3p = ""
key = "vflap"
emote_message_3p = ""
/decl/emote/helper/vflap/mob_can_use(mob/living/carbon/human/user)
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
return FALSE
return ..()
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
return FALSE
return ..()
/decl/emote/helper/vflap/do_emote(var/mob/living/carbon/human/user, var/extra_params)
if(user.toggle_wing(message = 1))
return ..()
if(user.toggle_wing(message = 1))
return ..()
/decl/emote/helper/vflap/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
@@ -1,7 +1,7 @@
/decl/emote/visible/mlem
key = "mlem"
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
key = "mlem"
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
/decl/emote/visible/blep
key = "blep"
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
key = "blep"
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
+2 -2
View File
@@ -30,8 +30,8 @@ var/global/list/emotes_by_key
var/emote_message_muffled // A message to show if the emote is audible and the user is muzzled.
var/list/emote_sound // A sound for the emote to play.
// Can either be a single sound, a list of sounds to pick from, or an
// associative array of gender to single sounds/a list of sounds.
// Can either be a single sound, a list of sounds to pick from, or an
// associative array of gender to single sounds/a list of sounds.
var/list/emote_sound_synthetic // As above, but used when check_synthetic() is true.
var/emote_volume = 50 // Volume of sound to play.
var/emote_volume_synthetic = 50 // As above, but used when check_synthetic() is true.
+139 -139
View File
@@ -1,154 +1,154 @@
var/list/lunchables_lunches_ = list(/obj/item/reagent_containers/food/snacks/sandwich,
/obj/item/reagent_containers/food/snacks/slice/meatbread/filled,
/obj/item/reagent_containers/food/snacks/slice/tofubread/filled,
/obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled,
/obj/item/reagent_containers/food/snacks/slice/margherita/filled,
/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled,
/obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled,
/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled,
/obj/item/reagent_containers/food/snacks/pineappleslice/filled,
/obj/item/reagent_containers/food/snacks/tastybread,
/obj/item/reagent_containers/food/snacks/bagelplain,
/obj/item/reagent_containers/food/snacks/bagelsunflower,
/obj/item/reagent_containers/food/snacks/bagelcheese,
/obj/item/reagent_containers/food/snacks/bagelraisin,
/obj/item/reagent_containers/food/snacks/bagelpoppy,
/obj/item/reagent_containers/food/snacks/croissant,
/obj/item/reagent_containers/food/snacks/corn_dog,
/obj/item/reagent_containers/food/snacks/liquidfood,
/obj/item/reagent_containers/food/snacks/liquidprotein,
/obj/item/reagent_containers/food/snacks/liquidvitamin,
/obj/item/reagent_containers/food/snacks/jellysandwich/cherry,
/obj/item/reagent_containers/food/snacks/tossedsalad,
/obj/item/reagent_containers/food/snacks/rosesalad,
/obj/item/reagent_containers/food/snacks/boiledegg,
/obj/item/reagent_containers/food/snacks/locust_cooked,
/obj/item/reagent_containers/food/snacks/spicedmeatbun,
/obj/item/reagent_containers/food/snacks/quicheslice/filled,
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose,
/obj/item/reagent_containers/food/snacks/packaged/sausageroll,
/obj/item/reagent_containers/food/snacks/packaged/pasty,
/obj/item/reagent_containers/food/snacks/packaged/scotchegg,
/obj/item/reagent_containers/food/snacks/packaged/porkpie)
/obj/item/reagent_containers/food/snacks/slice/meatbread/filled,
/obj/item/reagent_containers/food/snacks/slice/tofubread/filled,
/obj/item/reagent_containers/food/snacks/slice/creamcheesebread/filled,
/obj/item/reagent_containers/food/snacks/slice/margherita/filled,
/obj/item/reagent_containers/food/snacks/slice/meatpizza/filled,
/obj/item/reagent_containers/food/snacks/slice/mushroompizza/filled,
/obj/item/reagent_containers/food/snacks/slice/vegetablepizza/filled,
/obj/item/reagent_containers/food/snacks/pineappleslice/filled,
/obj/item/reagent_containers/food/snacks/tastybread,
/obj/item/reagent_containers/food/snacks/bagelplain,
/obj/item/reagent_containers/food/snacks/bagelsunflower,
/obj/item/reagent_containers/food/snacks/bagelcheese,
/obj/item/reagent_containers/food/snacks/bagelraisin,
/obj/item/reagent_containers/food/snacks/bagelpoppy,
/obj/item/reagent_containers/food/snacks/croissant,
/obj/item/reagent_containers/food/snacks/corn_dog,
/obj/item/reagent_containers/food/snacks/liquidfood,
/obj/item/reagent_containers/food/snacks/liquidprotein,
/obj/item/reagent_containers/food/snacks/liquidvitamin,
/obj/item/reagent_containers/food/snacks/jellysandwich/cherry,
/obj/item/reagent_containers/food/snacks/tossedsalad,
/obj/item/reagent_containers/food/snacks/rosesalad,
/obj/item/reagent_containers/food/snacks/boiledegg,
/obj/item/reagent_containers/food/snacks/locust_cooked,
/obj/item/reagent_containers/food/snacks/spicedmeatbun,
/obj/item/reagent_containers/food/snacks/quicheslice/filled,
/obj/item/reagent_containers/hypospray/autoinjector/biginjector/glucose,
/obj/item/reagent_containers/food/snacks/packaged/sausageroll,
/obj/item/reagent_containers/food/snacks/packaged/pasty,
/obj/item/reagent_containers/food/snacks/packaged/scotchegg,
/obj/item/reagent_containers/food/snacks/packaged/porkpie)
var/list/lunchables_snacks_ = list(/obj/item/reagent_containers/food/snacks/donut/plain/jelly,
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly,
/obj/item/reagent_containers/food/snacks/muffin,
/obj/item/reagent_containers/food/snacks/popcorn,
/obj/item/reagent_containers/food/snacks/sosjerky,
/obj/item/reagent_containers/food/snacks/unajerky,
/obj/item/reagent_containers/food/snacks/no_raisin,
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
/obj/item/reagent_containers/food/snacks/poppypretzel,
/obj/item/reagent_containers/food/snacks/carrotfries,
/obj/item/reagent_containers/food/snacks/candiedapple,
/obj/item/reagent_containers/food/snacks/applepie,
/obj/item/reagent_containers/food/snacks/cherrypie,
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit,
/obj/item/reagent_containers/food/snacks/appletart,
/obj/item/reagent_containers/food/snacks/slice/carrotcake/filled,
/obj/item/reagent_containers/food/snacks/slice/cheesecake/filled,
/obj/item/reagent_containers/food/snacks/slice/plaincake/filled,
/obj/item/reagent_containers/food/snacks/slice/orangecake/filled,
/obj/item/reagent_containers/food/snacks/slice/limecake/filled,
/obj/item/reagent_containers/food/snacks/slice/lemoncake/filled,
/obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled,
/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled,
/obj/item/reagent_containers/food/snacks/watermelonslice,
/obj/item/reagent_containers/food/snacks/slice/applecake/filled,
/obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled,
/obj/item/reagent_containers/food/snacks/keylimepieslice/filled,
/obj/item/reagent_containers/food/snacks/browniesslice/filled,
/obj/item/reagent_containers/food/snacks/skrellsnacks,
/obj/item/reagent_containers/food/snacks/mint/admints,
/obj/item/reagent_containers/food/snacks/roastedpeanuts,
/obj/item/reagent_containers/food/snacks/sugarcookie,
/obj/item/reagent_containers/food/snacks/eggroll,
/obj/item/reagent_containers/food/snacks/fruitsalad,
/obj/item/reagent_containers/food/snacks/honeybun,
/obj/item/reagent_containers/food/snacks/custardbun,
/obj/item/reagent_containers/food/snacks/honeytoast,
/obj/item/reagent_containers/food/snacks/cookie,
/obj/item/reagent_containers/food/snacks/fruitbar,
/obj/item/reagent_containers/food/snacks/semki,
/obj/item/reagent_containers/food/snacks/salo,
/obj/item/reagent_containers/food/snacks/weebonuts,
/obj/item/reagent_containers/food/snacks/ricecake,
/obj/item/reagent_containers/food/snacks/packaged/lunacake,
/obj/item/reagent_containers/food/snacks/packaged/darklunacake,
/obj/item/reagent_containers/food/snacks/packaged/mochicake,
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
/obj/item/storage/box/jaffacake,
/obj/item/storage/box/winegum,
/obj/item/storage/box/custardcream,
/obj/item/storage/box/bourbon
)
/obj/item/reagent_containers/food/snacks/donut/plain/jelly/cherryjelly,
/obj/item/reagent_containers/food/snacks/muffin,
/obj/item/reagent_containers/food/snacks/popcorn,
/obj/item/reagent_containers/food/snacks/sosjerky,
/obj/item/reagent_containers/food/snacks/unajerky,
/obj/item/reagent_containers/food/snacks/no_raisin,
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
/obj/item/reagent_containers/food/snacks/cheesiehonkers,
/obj/item/reagent_containers/food/snacks/poppypretzel,
/obj/item/reagent_containers/food/snacks/carrotfries,
/obj/item/reagent_containers/food/snacks/candiedapple,
/obj/item/reagent_containers/food/snacks/applepie,
/obj/item/reagent_containers/food/snacks/cherrypie,
/obj/item/reagent_containers/food/snacks/plumphelmetbiscuit,
/obj/item/reagent_containers/food/snacks/appletart,
/obj/item/reagent_containers/food/snacks/slice/carrotcake/filled,
/obj/item/reagent_containers/food/snacks/slice/cheesecake/filled,
/obj/item/reagent_containers/food/snacks/slice/plaincake/filled,
/obj/item/reagent_containers/food/snacks/slice/orangecake/filled,
/obj/item/reagent_containers/food/snacks/slice/limecake/filled,
/obj/item/reagent_containers/food/snacks/slice/lemoncake/filled,
/obj/item/reagent_containers/food/snacks/slice/chocolatecake/filled,
/obj/item/reagent_containers/food/snacks/slice/birthdaycake/filled,
/obj/item/reagent_containers/food/snacks/watermelonslice,
/obj/item/reagent_containers/food/snacks/slice/applecake/filled,
/obj/item/reagent_containers/food/snacks/slice/pumpkinpie/filled,
/obj/item/reagent_containers/food/snacks/keylimepieslice/filled,
/obj/item/reagent_containers/food/snacks/browniesslice/filled,
/obj/item/reagent_containers/food/snacks/skrellsnacks,
/obj/item/reagent_containers/food/snacks/mint/admints,
/obj/item/reagent_containers/food/snacks/roastedpeanuts,
/obj/item/reagent_containers/food/snacks/sugarcookie,
/obj/item/reagent_containers/food/snacks/eggroll,
/obj/item/reagent_containers/food/snacks/fruitsalad,
/obj/item/reagent_containers/food/snacks/honeybun,
/obj/item/reagent_containers/food/snacks/custardbun,
/obj/item/reagent_containers/food/snacks/honeytoast,
/obj/item/reagent_containers/food/snacks/cookie,
/obj/item/reagent_containers/food/snacks/fruitbar,
/obj/item/reagent_containers/food/snacks/semki,
/obj/item/reagent_containers/food/snacks/salo,
/obj/item/reagent_containers/food/snacks/weebonuts,
/obj/item/reagent_containers/food/snacks/ricecake,
/obj/item/reagent_containers/food/snacks/packaged/lunacake,
/obj/item/reagent_containers/food/snacks/packaged/darklunacake,
/obj/item/reagent_containers/food/snacks/packaged/mochicake,
/obj/item/reagent_containers/food/snacks/packaged/spacetwinkie,
/obj/item/storage/box/jaffacake,
/obj/item/storage/box/winegum,
/obj/item/storage/box/custardcream,
/obj/item/storage/box/bourbon
)
var/list/lunchables_drinks_ = list(/obj/item/reagent_containers/food/drinks/cans/cola,
/obj/item/reagent_containers/food/drinks/cans/waterbottle,
/obj/item/reagent_containers/food/drinks/cans/decaf_cola,
/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind,
/obj/item/reagent_containers/food/drinks/cans/dr_gibb,
/obj/item/reagent_containers/food/drinks/cans/dr_gibb_diet,
/obj/item/reagent_containers/food/drinks/cans/starkist,
/obj/item/reagent_containers/food/drinks/cans/starkistdecaf,
/obj/item/reagent_containers/food/drinks/cans/space_up,
/obj/item/reagent_containers/food/drinks/cans/lemon_lime,
/obj/item/reagent_containers/food/drinks/cans/iced_tea,
/obj/item/reagent_containers/food/drinks/cans/grape_juice,
/obj/item/reagent_containers/food/drinks/cans/tonic,
/obj/item/reagent_containers/food/drinks/cans/sodawater,
/obj/item/reagent_containers/food/drinks/cans/gingerale,
/obj/item/reagent_containers/food/drinks/cans/root_beer,
/obj/item/reagent_containers/food/drinks/cans/sarsaparilla,
/obj/item/reagent_containers/food/drinks/cans/straw_cola,
/obj/item/reagent_containers/food/drinks/cans/apple_cola,
/obj/item/reagent_containers/food/drinks/cans/lemon_cola,
/obj/item/reagent_containers/food/drinks/cans/nukie_peach,
/obj/item/reagent_containers/food/drinks/cans/nukie_pear,
/obj/item/reagent_containers/food/drinks/cans/nukie_cherry,
/obj/item/reagent_containers/food/drinks/cans/nukie_melon,
/obj/item/reagent_containers/food/drinks/cans/nukie_banana,
/obj/item/reagent_containers/food/drinks/cans/nukie_rose,
/obj/item/reagent_containers/food/drinks/cans/nukie_lemon,
/obj/item/reagent_containers/food/drinks/cans/nukie_fruit
)
/obj/item/reagent_containers/food/drinks/cans/waterbottle,
/obj/item/reagent_containers/food/drinks/cans/decaf_cola,
/obj/item/reagent_containers/food/drinks/cans/space_mountain_wind,
/obj/item/reagent_containers/food/drinks/cans/dr_gibb,
/obj/item/reagent_containers/food/drinks/cans/dr_gibb_diet,
/obj/item/reagent_containers/food/drinks/cans/starkist,
/obj/item/reagent_containers/food/drinks/cans/starkistdecaf,
/obj/item/reagent_containers/food/drinks/cans/space_up,
/obj/item/reagent_containers/food/drinks/cans/lemon_lime,
/obj/item/reagent_containers/food/drinks/cans/iced_tea,
/obj/item/reagent_containers/food/drinks/cans/grape_juice,
/obj/item/reagent_containers/food/drinks/cans/tonic,
/obj/item/reagent_containers/food/drinks/cans/sodawater,
/obj/item/reagent_containers/food/drinks/cans/gingerale,
/obj/item/reagent_containers/food/drinks/cans/root_beer,
/obj/item/reagent_containers/food/drinks/cans/sarsaparilla,
/obj/item/reagent_containers/food/drinks/cans/straw_cola,
/obj/item/reagent_containers/food/drinks/cans/apple_cola,
/obj/item/reagent_containers/food/drinks/cans/lemon_cola,
/obj/item/reagent_containers/food/drinks/cans/nukie_peach,
/obj/item/reagent_containers/food/drinks/cans/nukie_pear,
/obj/item/reagent_containers/food/drinks/cans/nukie_cherry,
/obj/item/reagent_containers/food/drinks/cans/nukie_melon,
/obj/item/reagent_containers/food/drinks/cans/nukie_banana,
/obj/item/reagent_containers/food/drinks/cans/nukie_rose,
/obj/item/reagent_containers/food/drinks/cans/nukie_lemon,
/obj/item/reagent_containers/food/drinks/cans/nukie_fruit
)
// This default list is a bit different, it contains items we don't want
var/list/lunchables_drink_reagents_ = list(/datum/reagent/drink/nothing,
/datum/reagent/drink/doctor_delight,
/datum/reagent/drink/dry_ramen,
/datum/reagent/drink/hell_ramen,
/datum/reagent/drink/hot_ramen,
/datum/reagent/drink/soda/nuka_cola,
/datum/reagent/drink/coffee/nukie/mega,
/datum/reagent/drink/coffee/nukie/mega/sight,
/datum/reagent/drink/coffee/nukie/mega/heart,
/datum/reagent/drink/coffee/nukie/mega/nega,
/datum/reagent/drink/coffee/nukie/mega/shock,
/datum/reagent/drink/coffee/nukie/mega/fast,
/datum/reagent/drink/coffee/nukie/mega/high,
/datum/reagent/drink/coffee/nukie/mega/shrink,
/datum/reagent/drink/coffee/nukie/mega/grow)
/datum/reagent/drink/doctor_delight,
/datum/reagent/drink/dry_ramen,
/datum/reagent/drink/hell_ramen,
/datum/reagent/drink/hot_ramen,
/datum/reagent/drink/soda/nuka_cola,
/datum/reagent/drink/coffee/nukie/mega,
/datum/reagent/drink/coffee/nukie/mega/sight,
/datum/reagent/drink/coffee/nukie/mega/heart,
/datum/reagent/drink/coffee/nukie/mega/nega,
/datum/reagent/drink/coffee/nukie/mega/shock,
/datum/reagent/drink/coffee/nukie/mega/fast,
/datum/reagent/drink/coffee/nukie/mega/high,
/datum/reagent/drink/coffee/nukie/mega/shrink,
/datum/reagent/drink/coffee/nukie/mega/grow)
// This default list is a bit different, it contains items we don't want
var/list/lunchables_ethanol_reagents_ = list(/datum/reagent/ethanol/acid_spit,
/datum/reagent/ethanol/atomicbomb,
/datum/reagent/ethanol/beepsky_smash,
/datum/reagent/ethanol/coffee,
/datum/reagent/ethanol/hippies_delight,
/datum/reagent/ethanol/hooch,
/datum/reagent/ethanol/thirteenloko,
/datum/reagent/ethanol/manhattan_proj,
/datum/reagent/ethanol/neurotoxin,
/datum/reagent/ethanol/pwine,
/datum/reagent/ethanol/threemileisland,
/datum/reagent/ethanol/toxins_special,
/datum/reagent/ethanol/voxdelight,
/datum/reagent/ethanol/soemmerfire,
/datum/reagent/ethanol/slimeshot)
/datum/reagent/ethanol/atomicbomb,
/datum/reagent/ethanol/beepsky_smash,
/datum/reagent/ethanol/coffee,
/datum/reagent/ethanol/hippies_delight,
/datum/reagent/ethanol/hooch,
/datum/reagent/ethanol/thirteenloko,
/datum/reagent/ethanol/manhattan_proj,
/datum/reagent/ethanol/neurotoxin,
/datum/reagent/ethanol/pwine,
/datum/reagent/ethanol/threemileisland,
/datum/reagent/ethanol/toxins_special,
/datum/reagent/ethanol/voxdelight,
/datum/reagent/ethanol/soemmerfire,
/datum/reagent/ethanol/slimeshot)
/proc/lunchables_lunches()
if(!(lunchables_lunches_[lunchables_lunches_[1]]))
+1 -1
View File
@@ -9,7 +9,7 @@
* * items are objects. Fruits, tools, circuit boards.
* * result is type to create as new object
* * time is optional parameter, you shall use in in your machine,
default /datum/recipe/ procs does not rely on this parameter.
* default /datum/recipe/ procs does not rely on this parameter.
*
* Functions you need:
* /datum/recipe/proc/make(var/obj/container as obj)
+2 -2
View File
@@ -10,8 +10,8 @@
var/list/drink_recipes = list()
for(var/decl/chemical_reaction/instant/drinks/CR in SSchemistry.chemical_reactions)
drink_recipes[CR.type] = list("Result" = CR.name,
"ResAmt" = CR.result_amount,
"Reagents" = CR.required_reagents,
"ResAmt" = CR.result_amount,
"Reagents" = CR.required_reagents,
"Catalysts" = CR.catalysts)
//////////////////////// FOOD
+5 -5
View File
@@ -8,11 +8,11 @@
random_color = FALSE
/obj/item/tool/wirecutters/clippers/trimmers
name = "hedgetrimmers"
desc = "An old pair of trimmers with a pretty dull blade. You would probably have a hard time cutting anything but plants with it."
icon_state = "hedget"
item_state = "hedget"
force = 7 //One point extra than standard wire cutters.
name = "hedgetrimmers"
desc = "An old pair of trimmers with a pretty dull blade. You would probably have a hard time cutting anything but plants with it."
icon_state = "hedget"
item_state = "hedget"
force = 7 //One point extra than standard wire cutters.
/obj/item/tool/wirecutters/clippers/trimmers/afterattack(atom/A as mob|obj|turf|area, mob/user as mob, proximity)
if(!proximity) return
+37 -37
View File
@@ -36,14 +36,14 @@
var/sw = I.GetPixel(x - 1, y - 1)
var/sum_adj = ((n == "#00ff00"? 1 : 0) \
+ (s == "#00ff00"? 1 : 0) \
+ (e == "#00ff00"? 1 : 0) \
+ (w == "#00ff00"? 1 : 0))
+ (s == "#00ff00"? 1 : 0) \
+ (e == "#00ff00"? 1 : 0) \
+ (w == "#00ff00"? 1 : 0))
var/sum_diag = ((ne == "#00ff00"? 1 : 0) \
+ (se == "#00ff00"? 1 : 0) \
+ (nw == "#00ff00"? 1 : 0) \
+ (sw == "#00ff00"? 1 : 0))
+ (se == "#00ff00"? 1 : 0) \
+ (nw == "#00ff00"? 1 : 0) \
+ (sw == "#00ff00"? 1 : 0))
if(sum_adj)
@@ -234,35 +234,35 @@ var/list/rune_animation = list(
var/obj/o = new(t)
o.icon = animate_rune_full(I, rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
0, 0, 0, rand(0, 255),
0, 0, 0, rand(0, 255),
0, 0, 0, 0,
0, 0, 0, 0,
list(
list(0.000, 5),
list(0.020, 1),
list(0.050, 1),
list(0.090, 1),
list(0.140, 1),
list(0.200, 1),
list(0.270, 1),
list(0.340, 1),
list(0.420, 1),
list(0.500, 1),
list(0.590, 1),
list(0.675, 1),
list(0.750, 1),
list(0.900, 1),
list(1.000, 6),
list(0.875, 1),
list(0.750, 1),
list(0.625, 1),
list(0.500, 1),
list(0.375, 1),
list(0.250, 1),
list(0.125, 1),
))
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
rand(0, 255), rand(0, 255), rand(0, 255), rand(-255, 255),
0, 0, 0, rand(0, 255),
0, 0, 0, rand(0, 255),
0, 0, 0, 0,
0, 0, 0, 0,
list(
list(0.000, 5),
list(0.020, 1),
list(0.050, 1),
list(0.090, 1),
list(0.140, 1),
list(0.200, 1),
list(0.270, 1),
list(0.340, 1),
list(0.420, 1),
list(0.500, 1),
list(0.590, 1),
list(0.675, 1),
list(0.750, 1),
list(0.900, 1),
list(1.000, 6),
list(0.875, 1),
list(0.750, 1),
list(0.625, 1),
list(0.500, 1),
list(0.375, 1),
list(0.250, 1),
list(0.125, 1),
))
*/
@@ -12,8 +12,8 @@ A [2]\ /[8] result
B [1]-\|++|/
C [4]-/|++|
D [1]/ ||
||
Activator
||
Activator
@@ -3,14 +3,14 @@
name = "ref pin"
/datum/integrated_io/ref/ask_for_pin_data(mob/user, obj/item/I)
if(istype(I, /obj/item/multitool))
var/obj/item/multitool/tool = I
write_data_to_pin(tool.weakref_wiring)
else if(istype(I, /obj/item/integrated_electronics/debugger))
var/obj/item/integrated_electronics/debugger/tool = I
write_data_to_pin(tool.data_to_write)
else
write_data_to_pin(null)
if(istype(I, /obj/item/multitool))
var/obj/item/multitool/tool = I
write_data_to_pin(tool.weakref_wiring)
else if(istype(I, /obj/item/integrated_electronics/debugger))
var/obj/item/integrated_electronics/debugger/tool = I
write_data_to_pin(tool.data_to_write)
else
write_data_to_pin(null)
/datum/integrated_io/ref/write_data_to_pin(var/new_data)
if(isnull(new_data) || isweakref(new_data))
@@ -311,7 +311,7 @@ Category: Reference
<li>"} + span_bold("Avoid opening fire locks.") + {"</li>
</ul>
<p class="indent">In the event of depressurization, the station's fire locks automatically drop in an attempt to contain the breach. However, this can also impede movement. If possible, find an alternate route to your destination or find a safe place to wait until the station's engineering team repairs the station. Do not open a fire lock without an engineer's express permission unless you are in immediate mortal danger. After you have opened a fire lock, make sure to close it immediately so as to prevent the breach from spreading.</p>
<ul>
<ul>
<li>"} + span_bold("Listen to emergency personnel.") + {"</li>
</ul>
<p class="indent">Follow the instructions of engineering, medical, and security personnel, as well as the orders of the heads of staff. Engineering personnel are trained to fix these situations, and medical personnel will likely be conducting search and rescue operations. Do not impede them and follow their instructions; you are more likely to survive, and less likely to endanger your fellow crew members.</p>
+41 -41
View File
@@ -4,64 +4,64 @@ BS12 object based lighting system
/*
Changes from tg DAL:
- Lighting is done using objects instead of subareas.
- Animated transitions. (newer tg DAL has this)
- Full colours with mixing.
- Support for lights on shuttles.
- Lighting is done using objects instead of subareas.
- Animated transitions. (newer tg DAL has this)
- Full colours with mixing.
- Support for lights on shuttles.
- Code:
- Instead of one flat luminosity var, light is represented by 3 atom vars:
- light_range; range in tiles of the light, used for calculating falloff,
- light_power; multiplier for the brightness of lights,
- light_color; hex string representing the RGB colour of the light.
- setLuminousity() is now set_light() and takes the three variables above.
- Variables can be left as null to not update them.
- set_opacity() is now set_opacity().
- Areas have luminosity set to 1 permanently, no hard-lighting.
- Objects inside other objects can have lights and they properly affect the turf. (flashlights)
- area/master and area/list/related have been eviscerated since subareas aren't needed.
- Code:
- Instead of one flat luminosity var, light is represented by 3 atom vars:
- light_range; range in tiles of the light, used for calculating falloff,
- light_power; multiplier for the brightness of lights,
- light_color; hex string representing the RGB colour of the light.
- setLuminousity() is now set_light() and takes the three variables above.
- Variables can be left as null to not update them.
- set_opacity() is now set_opacity().
- Areas have luminosity set to 1 permanently, no hard-lighting.
- Objects inside other objects can have lights and they properly affect the turf. (flashlights)
- area/master and area/list/related have been eviscerated since subareas aren't needed.
*/
/*
Relevant vars/procs:
atom: (lighting_atom.dm)
- var/light_range; range in tiles of the light, used for calculating falloff
- var/light_power; multiplier for the brightness of lights
- var/light_color; hex string representing the RGB colour of the light
- var/light_range; range in tiles of the light, used for calculating falloff
- var/light_power; multiplier for the brightness of lights
- var/light_color; hex string representing the RGB colour of the light
- var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power
- var/list/light_sources; light sources in contents that are shining through this object, including this object
- var/datum/light_source/light; light source datum for this atom, only present if light_range && light_power
- var/list/light_sources; light sources in contents that are shining through this object, including this object
- proc/set_light(l_range, l_power, l_color):
- Sets light_range/power/color to non-null args and calls update_light()
- proc/set_opacity(new_opacity):
- Sets opacity to new_opacity.
- If opacity has changed, call turf.reconsider_lights() to fix light occlusion
- proc/update_light():
- Updates the light var on this atom, deleting or creating as needed and calling .update()
- proc/set_light(l_range, l_power, l_color):
- Sets light_range/power/color to non-null args and calls update_light()
- proc/set_opacity(new_opacity):
- Sets opacity to new_opacity.
- If opacity has changed, call turf.reconsider_lights() to fix light occlusion
- proc/update_light():
- Updates the light var on this atom, deleting or creating as needed and calling .update()
turf: (lighting_turf.dm)
- var/list/affecting_lights; list of light sources that are shining onto this turf
- var/list/affecting_lights; list of light sources that are shining onto this turf
- proc/reconsider_lights():
- Force all light sources shining onto this turf to update
- proc/reconsider_lights():
- Force all light sources shining onto this turf to update
- proc/lighting_clear_overlays():
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
- proc/lighting_build_overlays():
- Create lighting overlays for this turf
- proc/lighting_clear_overlays():
- Delete (manual GC) all light overlays on this turf, used when changing turf to space
- proc/lighting_build_overlays():
- Create lighting overlays for this turf
/atom/movable/lighting_overlay: (lighting_overlay.dm)
- var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour
- var/needs_update; set on update_lumcount, checked by lighting process
- var/lum_r, var/lum_g, var/lum_b; lumcounts of each colour
- var/needs_update; set on update_lumcount, checked by lighting process
- var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile
- var/xoffset, var/yoffset; (only present when using sub-tile overlays) fractional offset of this overlay in the tile
- proc/update_lumcount(delta_r, delta_g, delta_b):
- Change the lumcount vars and queue the overlay for update
- proc/update_overlay()
- Called by the lighting process to update the color of the overlay
- proc/update_lumcount(delta_r, delta_g, delta_b):
- Change the lumcount vars and queue the overlay for update
- proc/update_overlay()
- Called by the lighting process to update the color of the overlay
*/
+36 -36
View File
@@ -76,11 +76,11 @@
// Yes this doesn't align correctly on anything other than 4 width tabs.
// If you want it to go switch everybody to elastic tab stops.
// Actually that'd be great if you could!
#define EFFECT_UPDATE(level) \
#define EFFECT_UPDATE(level) \
if (needs_update == LIGHTING_NO_UPDATE) \
SSlighting.sources_queue += src; \
if (needs_update < level) \
needs_update = level; \
SSlighting.sources_queue += src; \
if (needs_update < level) \
needs_update = level; \
// This proc will cause the light source to update the top atom, and add itself to the update queue.
@@ -133,40 +133,40 @@
#define LUM_FALLOFF(C) (1 - CLAMP01(sqrt((C.x - _turf_x) ** 2 + (C.y - _turf_y) ** 2 + LIGHTING_HEIGHT) / _range_divisor))
#define APPLY_CORNER(C) \
. = LUM_FALLOFF(C); \
. *= _light_power; \
var/OLD = effect_str[C]; \
\
C.update_lumcount \
( \
(. * _lum_r) - (OLD * _applied_lum_r), \
(. * _lum_g) - (OLD * _applied_lum_g), \
(. * _lum_b) - (OLD * _applied_lum_b) \
); \
#define APPLY_CORNER(C) \
. = LUM_FALLOFF(C); \
. *= _light_power; \
var/OLD = effect_str[C]; \
\
C.update_lumcount \
( \
(. * _lum_r) - (OLD * _applied_lum_r), \
(. * _lum_g) - (OLD * _applied_lum_g), \
(. * _lum_b) - (OLD * _applied_lum_b) \
); \
#define APPLY_CORNER_NEW(C) \
. = LUM_FALLOFF(C); \
. *= _light_power; \
var/OLD = effect_str[C]; \
if (. != 0){ \
LAZYADD(C.affecting, src); \
effect_str[C] = .; \
} \
C.update_lumcount \
( \
(. * _lum_r) - (OLD * _applied_lum_r), \
(. * _lum_g) - (OLD * _applied_lum_g), \
(. * _lum_b) - (OLD * _applied_lum_b) \
); \
#define APPLY_CORNER_NEW(C) \
. = LUM_FALLOFF(C); \
. *= _light_power; \
var/OLD = effect_str[C]; \
if (. != 0){ \
LAZYADD(C.affecting, src); \
effect_str[C] = .; \
} \
C.update_lumcount \
( \
(. * _lum_r) - (OLD * _applied_lum_r), \
(. * _lum_g) - (OLD * _applied_lum_g), \
(. * _lum_b) - (OLD * _applied_lum_b) \
); \
#define REMOVE_CORNER(C) \
. = -effect_str[C]; \
C.update_lumcount \
( \
. * _applied_lum_r, \
. * _applied_lum_g, \
. * _applied_lum_b \
#define REMOVE_CORNER(C) \
. = -effect_str[C]; \
C.update_lumcount \
( \
. * _applied_lum_r, \
. * _applied_lum_g, \
. * _applied_lum_b \
);
/datum/light_source/proc/remove_lum()
+6 -6
View File
@@ -754,12 +754,12 @@
name = "07/07/63 - Vir Election Results"
data = "The results of the 2563 Vir Gubernatorial Elections are as follows:\
<br>\
Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\
<br>\
Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\
<br>\
Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\
<br>\
Governor of Vir: Lusia Hainirsdottir (Shadow Coalition)\
<br>\
Vir Colonial Assembly Representative: Vani Jee (Icarus Front)\
<br>\
Vir Colonial Assembly Representative: Selma Jorg (Shadow Coalition)\
<br>\
Other candidates ranked: Sao (4), Zarshir (5), Keldow (6), Singh (7), Moravec (8), Phaedrus (9), Lye (10), Savik (11), Square (12), Wekstrom (13)\
<br><br>\
Voter turnout: 30,928,287 (63%)\
+2 -2
View File
@@ -230,8 +230,8 @@
and kit-bashed into a high-tech cleaver on a stick - with a handguard and a goliath hide grip. While it is still of little use to any \
but the most skilled and/or suicidal miners against local fauna, it's an elegant weapon for a more civilized hunter."
look gary there i am
- hatterhat
look gary there i am
- hatterhat
*/
+24 -24
View File
@@ -1,30 +1,30 @@
/datum/modifier/crusher_mark
name = "destabilized"
desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing."
stacks = MODIFIER_STACK_EXTEND
on_created_text = span_warning("You feel physically unstable.")
on_expired_text = span_notice("You feel physically stable again.")
var/mutable_appearance/marked_underlay
var/obj/item/kinetic_crusher/hammer_synced
name = "destabilized"
desc = "You've been struck by a destabilizing bolt. By all accounts, this is probably a bad thing."
stacks = MODIFIER_STACK_EXTEND
on_created_text = span_warning("You feel physically unstable.")
on_expired_text = span_notice("You feel physically stable again.")
var/mutable_appearance/marked_underlay
var/obj/item/kinetic_crusher/hammer_synced
/datum/modifier/crusher_mark/New(var/new_holder, var/new_origin)
. = ..()
if(isliving(new_origin))
var/mob/living/origin = new_origin
var/obj/item/kinetic_crusher/to_sync
if(istype(origin.get_active_hand(), /obj/item/kinetic_crusher))
to_sync = origin.get_active_hand()
else if (istype(origin.get_inactive_hand(), /obj/item/kinetic_crusher))
to_sync = origin.get_inactive_hand()
if(to_sync) // did we find it?
hammer_synced = to_sync // go ahead
if(hammer_synced? hammer_synced.can_mark(holder) : TRUE)
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
marked_underlay.pixel_x = -holder.pixel_x
marked_underlay.pixel_y = -holder.pixel_y
holder.underlays += marked_underlay
else
Destroy()
. = ..()
if(isliving(new_origin))
var/mob/living/origin = new_origin
var/obj/item/kinetic_crusher/to_sync
if(istype(origin.get_active_hand(), /obj/item/kinetic_crusher))
to_sync = origin.get_active_hand()
else if (istype(origin.get_inactive_hand(), /obj/item/kinetic_crusher))
to_sync = origin.get_inactive_hand()
if(to_sync) // did we find it?
hammer_synced = to_sync // go ahead
if(hammer_synced? hammer_synced.can_mark(holder) : TRUE)
marked_underlay = mutable_appearance('icons/effects/effects.dmi', "shield2")
marked_underlay.pixel_x = -holder.pixel_x
marked_underlay.pixel_y = -holder.pixel_y
holder.underlays += marked_underlay
else
Destroy()
/datum/modifier/crusher_mark/Destroy()
hammer_synced = null
+3 -3
View File
@@ -87,9 +87,9 @@
return eyeobj.EyeMove(n, direct)
/mob/observer/eye/proc/GetViewerClient()
if(owner)
return owner.client
return null
if(owner)
return owner.client
return null
/mob/observer/eye/EyeMove(n, direct)
var/initial = initial(sprint)
+6 -6
View File
@@ -184,13 +184,13 @@
return list("AI") // AI door!
/proc/encode_html_emphasis(message)
var/tagged_message = message
for(var/delimiter in GLOB.speech_toppings)
var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g")
var/tag = GLOB.speech_toppings[delimiter]
tagged_message = R.Replace(tagged_message,"<[tag]>$1</[tag]>")
var/tagged_message = message
for(var/delimiter in GLOB.speech_toppings)
var/regex/R = new("\\[delimiter](.+?)\\[delimiter]","g")
var/tag = GLOB.speech_toppings[delimiter]
tagged_message = R.Replace(tagged_message,"<[tag]>$1</[tag]>")
return tagged_message
return tagged_message
/mob/proc/hear_radio(var/list/message_pieces, var/verb = "says", var/part_a, var/part_b, var/part_c, var/part_d, var/part_e, var/mob/speaker = null, var/hard_to_hear = 0, var/vname = "")
if(!client)
+2 -2
View File
@@ -80,8 +80,8 @@
colour = "bug"
key = "X"
syllables = list("vaur","uyek","uyit","avek","sc'theth","k'ztak","teth","wre'ge","lii","dra'","zo'","ra'","kax'","zz","vh","ik","ak",
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk","tzzk","bz","xic'","k'lax'","histh")
"uhk","zir","sc'orth","sc'er","thc'yek","th'zirk","th'esk","k'ayek","ka'mil","sc'","ik'yir","yol","kig","k'zit","'","'","zrk","krg","isk'yet","na'k",
"sc'azz","th'sc","nil","n'ahk","sc'yeth","aur'sk","iy'it","azzg","a'","i'","o'","u'","a","i","o","u","zz","kr","ak","nrk","tzzk","bz","xic'","k'lax'","histh")
/datum/language/shadekin
name = LANGUAGE_SHADEKIN
@@ -59,7 +59,7 @@
else
visible_message(span_infoplain(span_bold("\The [src]") + " starts licking the wounds on [M]'s [affecting.name] clean."), \
span_notice("You start licking the wounds on [M]'s [affecting.name] clean.") )
span_notice("You start licking the wounds on [M]'s [affecting.name] clean.") )
for (var/datum/wound/W in affecting.wounds)
@@ -76,11 +76,11 @@
else
visible_message(span_notice("\The [src] [pick("slathers \a [W.desc] on [M]'s [affecting.name] with their spit.",
"drags their tongue across \a [W.desc] on [M]'s [affecting.name].",
"drips saliva onto \a [W.desc] on [M]'s [affecting.name].",
"uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].",
"licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]"), \
span_notice("You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.") )
"drags their tongue across \a [W.desc] on [M]'s [affecting.name].",
"drips saliva onto \a [W.desc] on [M]'s [affecting.name].",
"uses their tongue to disinfect \a [W.desc] on [M]'s [affecting.name].",
"licks \a [W.desc] on [M]'s [affecting.name], cleaning it.")]"), \
span_notice("You treat \a [W.desc] on [M]'s [affecting.name] with your antiseptic saliva.") )
adjust_nutrition(-20)
W.salve()
W.bandage()
+1 -1
View File
@@ -428,7 +428,7 @@
return
/mob/living/proc/adjust_fire_stacks(add_fire_stacks) //Adjusting the amount of fire_stacks we have on person
fire_stacks = CLAMP(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS)
fire_stacks = CLAMP(fire_stacks + add_fire_stacks, FIRE_MIN_STACKS, FIRE_MAX_STACKS)
/mob/living/proc/handle_fire()
if(fire_stacks < 0)
@@ -165,15 +165,15 @@
B.digest_mode = DM_SELECT
/mob/living/simple_mob/vore/pakkun/attackby(var/obj/item/O, var/mob/user) //if they're newspapered, they'll spit out any junk they've eaten for whatever reason
if(istype(O, /obj/item/newspaper) && !ckey && isturf(user.loc))
user.visible_message(span_info("[user] swats [src] with [O]!"))
release_vore_contents()
for(var/mob/living/L in living_mobs(0))
if(!(LAZYFIND(prey_excludes, L)))
LAZYSET(prey_excludes, L, world.time)
addtimer(CALLBACK(src, PROC_REF(removeMobFromPreyExcludes), WEAKREF(L)), 5 MINUTES)
else
..()
if(istype(O, /obj/item/newspaper) && !ckey && isturf(user.loc))
user.visible_message(span_info("[user] swats [src] with [O]!"))
release_vore_contents()
for(var/mob/living/L in living_mobs(0))
if(!(LAZYFIND(prey_excludes, L)))
LAZYSET(prey_excludes, L, world.time)
addtimer(CALLBACK(src, PROC_REF(removeMobFromPreyExcludes), WEAKREF(L)), 5 MINUTES)
else
..()
//a palette-swapped version that's a bit bossier, in JRPG tradition
@@ -117,13 +117,13 @@
consider_wg()
/mob/living/simple_mob/vore/raptor/proc/consider_wg()
var/past_state = wg_state
if(nutrition >= 900)
wg_state = 1
else
wg_state = 0
if(past_state != wg_state)
update_icon()
var/past_state = wg_state
if(nutrition >= 900)
wg_state = 1
else
wg_state = 0
if(past_state != wg_state)
update_icon()
/mob/living/simple_mob/vore/raptor/update_icon()
if(wg_state == 1)
@@ -1228,13 +1228,13 @@
ckeys_allowed = list("natje")
/datum/sprite_accessory/ears/frost
name = "Frost antenna"
desc = ""
icon_state = "frosted_tips"
ckeys_allowed = list("tucker0666")
name = "Frost antenna"
desc = ""
icon_state = "frosted_tips"
ckeys_allowed = list("tucker0666")
/datum/sprite_accessory/ears/sylv_pip
name = "sylveon ears and ribbons (Pip Shyner)"
desc = ""
icon_state = "pipears"
ckeys_allowed = list("phoaly")
name = "sylveon ears and ribbons (Pip Shyner)"
desc = ""
icon_state = "pipears"
ckeys_allowed = list("phoaly")
@@ -126,22 +126,22 @@
do_colouration = 1
/datum/sprite_accessory/tail/rabbit
name = "rabbit, colourable (vwag)"
desc = ""
icon_state = "rabbit"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "rabbit_w"
name = "rabbit, colourable (vwag)"
desc = ""
icon_state = "rabbit"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "rabbit_w"
/datum/sprite_accessory/tail/rabbitalt
name = "rabbit, dual color (vwag)"
desc = ""
icon_state = "rabbitalt"
extra_overlay = "rabbitalt-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "rabbitalt_w"
extra_overlay_w = "rabbitalt-tips_w"
name = "rabbit, dual color (vwag)"
desc = ""
icon_state = "rabbitalt"
extra_overlay = "rabbitalt-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "rabbitalt_w"
extra_overlay_w = "rabbitalt-tips_w"
/datum/sprite_accessory/tail/bear_brown
name = "bear, brown"
@@ -1169,14 +1169,14 @@
extra_overlay = "ninekitsune-tips"
/datum/sprite_accessory/tail/hideableninetails
name = "Kitsune 9-in-1 tail, colourable (vwag)"
desc = ""
icon_state = "ninekitsune"
extra_overlay = "ninekitsune-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "foxtail_w"
extra_overlay_w = "foxtail-tips_w"
name = "Kitsune 9-in-1 tail, colourable (vwag)"
desc = ""
icon_state = "ninekitsune"
extra_overlay = "ninekitsune-tips"
do_colouration = TRUE
color_blend_mode = ICON_MULTIPLY
ani_state = "foxtail_w"
extra_overlay_w = "foxtail-tips_w"
/datum/sprite_accessory/tail/shadekin_short
name = "Shadekin Short Tail, colorable"
@@ -1702,16 +1702,16 @@
ckeys_allowed = list("arokha")
/datum/sprite_accessory/tail/cabletail
name = "cabletail"
desc = "cabletail"
icon_state = "cabletail"
ckeys_allowed = list("tucker0666")
name = "cabletail"
desc = "cabletail"
icon_state = "cabletail"
ckeys_allowed = list("tucker0666")
/datum/sprite_accessory/tail/featherfluff_tail
name = "featherfluff_tail"
desc = ""
icon_state = "featherfluff_tail"
ckeys_allowed = list("tucker0666")
name = "featherfluff_tail"
desc = ""
icon_state = "featherfluff_tail"
ckeys_allowed = list("tucker0666")
/datum/sprite_accessory/tail/holly
name = "tigress tail (Holly)"
@@ -569,11 +569,11 @@
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/mothwings_luna_colorable
name = "Moth Wings (Luna, Colorable)"
desc = ""
icon_state = "mothwings_luna_colorable"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
name = "Moth Wings (Luna, Colorable)"
desc = ""
icon_state = "mothwings_luna_colorable"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/sect_drone_alt
name = "Sect drone wings Alt. (To use with bodytype marking)"
+10 -10
View File
@@ -61,18 +61,18 @@ var/const/cyberbeast_monitor_styles = "blank=cyber_blank;\
// tucker0666 : Frost
/datum/robolimb/zenghu_frost
company = "Zeng-Hu (Custom)"
desc = "This limb has realistic synthetic flesh covering with 'blue accents'."
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/Frosty.dmi'
blood_color = "#45ccff"
lifelike = 1
skin_tone = 1
unavailable_to_build = 1
whitelisted_to = list("tucker0666")
company = "Zeng-Hu (Custom)"
desc = "This limb has realistic synthetic flesh covering with 'blue accents'."
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/Frosty.dmi'
blood_color = "#45ccff"
lifelike = 1
skin_tone = 1
unavailable_to_build = 1
whitelisted_to = list("tucker0666")
/obj/item/disk/limb/zenghu_frost
company = "Zeng-Hu (Modified)"
catalogue_data = list(/datum/category_item/catalogue/information/organization/zeng_hu)
company = "Zeng-Hu (Modified)"
catalogue_data = list(/datum/category_item/catalogue/information/organization/zeng_hu)
//Ported from CitRP
/datum/robolimb/cyber_beast
+1 -1
View File
@@ -4,7 +4,7 @@
var/max_entries = 1000 //1000 paintings is a lot, and will take a long time to cycle through.
/datum/persistent/paintings/SetFilename()
filename = "data/persistent/paintings.json"
filename = "data/persistent/paintings.json"
/datum/persistent/paintings/Initialize()
. = ..()
+5 -5
View File
@@ -45,12 +45,12 @@
LAZYADDASSOC(., "items", storage_list)
// Usage: returns list with structure:
// list(
// [type1] = [stored_quantity],
// [type2] = [stored_quantity]
// )
// list(
// [type1] = [stored_quantity],
// [type2] = [stored_quantity]
// )
/datum/persistent/storage/proc/get_storage_list(var/atom/entry)
return list() // Subtypes define list structure
return list() // Subtypes define list structure
/datum/persistent/storage/proc/find_specific_instance(var/turf/T)
return locate(target_type) in T
+12 -12
View File
@@ -76,24 +76,24 @@
sheets_refunded = 2
/obj/machinery/light_construct/floortube/verb/rotate_clockwise()
set name = "Rotate Fixture Clockwise"
set category = "Object"
set src in view(1)
set name = "Rotate Fixture Clockwise"
set category = "Object"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
return
if (usr.stat || usr.restrained() || anchored)
return
src.set_dir(turn(src.dir, 270))
src.set_dir(turn(src.dir, 270))
/obj/machinery/light_construct/floortube/verb/rotate_counterclockwise()
set name = "Rotate Fixture Counter-Clockwise"
set category = "Object"
set src in view(1)
set name = "Rotate Fixture Counter-Clockwise"
set category = "Object"
set src in view(1)
if (usr.stat || usr.restrained() || anchored)
return
if (usr.stat || usr.restrained() || anchored)
return
src.set_dir(turn(src.dir, 90))
src.set_dir(turn(src.dir, 90))
/obj/machinery/light_construct/floortube/update_icon()
switch(stage)
@@ -481,10 +481,10 @@ GLOBAL_LIST_BOILERPLATE(all_singularities, /obj/singularity)
move_self = 1
/obj/singularity/singularity_act(S, size)
if(current_size <= size)
var/gain = (energy/2)
var/dist = max((current_size - 2), 1)
explosion(src.loc,(dist),(dist*2),(dist*4))
spawn(0)
qdel(src)
return gain
if(current_size <= size)
var/gain = (energy/2)
var/dist = max((current_size - 2), 1)
explosion(src.loc,(dist),(dist*2),(dist*4))
spawn(0)
qdel(src)
return gain
@@ -374,7 +374,7 @@
//Release reaction gasses
var/heat_capacity = removed.heat_capacity()
removed.adjust_multi(GAS_PHORON, max(device_energy / PHORON_RELEASE_MODIFIER, 0), \
GAS_O2, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0))
GAS_O2, max((device_energy + removed.temperature - T0C) / OXYGEN_RELEASE_MODIFIER, 0))
var/thermal_power = THERMAL_RELEASE_MODIFIER * device_energy
if (debug)
@@ -54,7 +54,7 @@
spinning_up = TRUE
update_icon()
user.visible_message(span_notice("[user] starts charging the [src]!"), \
span_notice("You start charging the [src]!"))
span_notice("You start charging the [src]!"))
if(do_after(user, 8, src))
spinning_up = FALSE
..()
@@ -9,17 +9,17 @@
fire_delay = 50
fire_sound = 'sound/weapons/grenade_launcher.ogg' // Formerly tablehit1.ogg but I like this better -Ace
var/fire_pressure // Used in fire checks/pressure checks.
var/max_w_class = ITEMSIZE_NORMAL // Hopper intake size.
var/max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Total internal storage size.
var/obj/item/tank/tank = null // Tank of gas for use in firing the cannon.
var/fire_pressure // Used in fire checks/pressure checks.
var/max_w_class = ITEMSIZE_NORMAL // Hopper intake size.
var/max_storage_space = ITEMSIZE_COST_NORMAL * 5 // Total internal storage size.
var/obj/item/tank/tank = null // Tank of gas for use in firing the cannon.
var/obj/item/storage/item_storage
var/pressure_setting = 10 // Percentage of the gas in the tank used to fire the projectile.
var/pressure_setting = 10 // Percentage of the gas in the tank used to fire the projectile.
var/possible_pressure_amounts = list(5,10,20,25,50) // Possible pressure settings.
var/force_divisor = 400 // Force equates to speed. Speed/5 equates to a damage multiplier for whoever you hit.
// For reference, a fully pressurized oxy tank at 50% gas release firing a health
// analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+.
var/force_divisor = 400 // Force equates to speed. Speed/5 equates to a damage multiplier for whoever you hit.
// For reference, a fully pressurized oxy tank at 50% gas release firing a health
// analyzer with a force_divisor of 10 hit with a damage multiplier of 3000+.
/obj/item/gun/launcher/pneumatic/New()
..()
item_storage = new(src)
+11 -11
View File
@@ -382,18 +382,18 @@
hud_state = "laser_disabler"
/obj/item/projectile/beam/disable
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
hud_state = "laser_disabler"
name = "disabler beam"
icon_state = "omnilaser"
nodamage = 1
taser_effect = 1
agony = 100 //One shot stuns for the time being until adjustments are fully made.
damage_type = HALLOSS
light_color = "#00CECE"
hud_state = "laser_disabler"
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
muzzle_type = /obj/effect/projectile/muzzle/laser_omni
tracer_type = /obj/effect/projectile/tracer/laser_omni
impact_type = /obj/effect/projectile/impact/laser_omni
/obj/item/projectile/beam/shock
name = "shock beam"
@@ -3,4 +3,4 @@
// but will have distinct behaviours (mostly relating to the fusion field) that warrants a separate type
/*
/decl/chemical_reaction/fusion
name = "Fusion"*/
name = "Fusion"*/
@@ -1042,12 +1042,12 @@
result_amount = 3
/decl/chemical_reaction/instant/drinks/winebrandy
name = "Wine brandy"
id = REAGENT_ID_WINEBRANDY
result = REAGENT_ID_WINEBRANDY
required_reagents = list(REAGENT_ID_REDWINE = 10)
catalysts = list(REAGENT_ID_ENZYME = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
result_amount = 5
name = "Wine brandy"
id = REAGENT_ID_WINEBRANDY
result = REAGENT_ID_WINEBRANDY
required_reagents = list(REAGENT_ID_REDWINE = 10)
catalysts = list(REAGENT_ID_ENZYME = 10) //10u enzyme so it requires more than is usually added. Stops overlap with wine recipe
result_amount = 5
/decl/chemical_reaction/instant/drinks/love_potion
name = REAGENT_LOVEPOTION
@@ -106,21 +106,21 @@
required_reagents = list(REAGENT_ID_COLA = 1, REAGENT_ID_MINT = 1)
/decl/chemical_reaction/instant/firefightingfoam //TODO: Make it so we can add this to the foam tanks to refill them
name = REAGENT_FIREFOAM
id = "firefighting foam"
result = REAGENT_ID_FIREFOAM
required_reagents = list(REAGENT_ID_WATER = 1)
catalysts = list(REAGENT_ID_FLUORINE = 10)
result_amount = 1
name = REAGENT_FIREFOAM
id = "firefighting foam"
result = REAGENT_ID_FIREFOAM
required_reagents = list(REAGENT_ID_WATER = 1)
catalysts = list(REAGENT_ID_FLUORINE = 10)
result_amount = 1
/decl/chemical_reaction/instant/firefightingfoamqol //Please don't abuse this and make us remove it. Seriously.
name = "Firefighting Foam EZ"
id = "firefighting foam ez"
result = REAGENT_ID_FIREFOAM
required_reagents = list(REAGENT_ID_WATER = 1)
catalysts = list(REAGENT_ID_FIREFOAM = 5)
inhibitors = list(REAGENT_ID_FLUORINE = 0.01)
result_amount = 1
name = "Firefighting Foam EZ"
id = "firefighting foam ez"
result = REAGENT_ID_FIREFOAM
required_reagents = list(REAGENT_ID_WATER = 1)
catalysts = list(REAGENT_ID_FIREFOAM = 5)
inhibitors = list(REAGENT_ID_FLUORINE = 0.01)
result_amount = 1
///////////////////////////////////////////////////////////////////////////////////
/// Vore Drugs
+13 -13
View File
@@ -12,9 +12,9 @@
var/flags = SHUTTLE_FLAGS_NONE
var/process_state = IDLE_STATE // Used with SHUTTLE_FLAGS_PROCESS, as well as to store current state.
var/category = /datum/shuttle
var/multiz = 0 //how many multiz levels, starts at 0 TODO Leshana - Are we porting this?
var/multiz = 0 //how many multiz levels, starts at 0 TODO Leshana - Are we porting this?
var/ceiling_type // Type path of turf to roof over the shuttle when at multi-z landmarks. Ignored if null.
var/ceiling_type // Type path of turf to roof over the shuttle when at multi-z landmarks. Ignored if null.
var/sound_takeoff = 'sound/effects/shuttles/shuttle_takeoff.ogg'
var/sound_landing = 'sound/effects/shuttles/shuttle_landing.ogg'
@@ -22,11 +22,11 @@
var/knockdown = 1 //whether shuttle downs non-buckled people when it moves
var/defer_initialisation = FALSE //If this this shuttle should be initialised automatically.
//If set to true, you are responsible for initialzing the shuttle manually.
//Useful for shuttles that are initialized by map_template loading, or shuttles that are created in-game or not used.
//If set to true, you are responsible for initialzing the shuttle manually.
//Useful for shuttles that are initialized by map_template loading, or shuttles that are created in-game or not used.
var/mothershuttle //tag of mothershuttle
var/motherdock //tag of mothershuttle landmark, defaults to starting location
var/mothershuttle //tag of mothershuttle
var/motherdock //tag of mothershuttle landmark, defaults to starting location
var/tmp/depart_time = 0 //Similar to above, set when the shuttle leaves when long jumping. Used for progress bars.
@@ -104,8 +104,8 @@
/datum/shuttle/proc/on_shuttle_departure(var/obj/effect/shuttle_landmark/origin, var/obj/effect/shuttle_landmark/destination)
return
// Similar to above, but when it finishes moving to the target. Short jump generally makes this occur immediately after the above proc.
// Keep in mind we might not actually have gotten to destination. Check current_location to be sure where we ended up.
// Similar to above, but when it finishes moving to the target. Short jump generally makes this occur immediately after the above proc.
// Keep in mind we might not actually have gotten to destination. Check current_location to be sure where we ended up.
/datum/shuttle/proc/on_shuttle_arrival(var/obj/effect/shuttle_landmark/origin, var/obj/effect/shuttle_landmark/destination)
return
@@ -117,7 +117,7 @@
return
var/obj/effect/shuttle_landmark/start_location = current_location
// TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no?
// TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no?
moving_status = SHUTTLE_WARMUP
spawn(warmup_time*10)
@@ -155,7 +155,7 @@
return
var/obj/effect/shuttle_landmark/start_location = current_location
// TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no?
// TODO - Figure out exactly when to play sounds. Before warmup_time delay? Should there be a sleep for waiting for sounds? or no?
moving_status = SHUTTLE_WARMUP
spawn(warmup_time*10)
@@ -204,7 +204,7 @@
//////////////////////////////
// Forward declarations of public procs. They do nothing because this is not auto-dock.
// Forward declarations of public procs. They do nothing because this is not auto-dock.
/datum/shuttle/proc/fuel_check()
return 1 //fuel check should always pass in non-overmap shuttles (they have magic engines)
@@ -300,7 +300,7 @@
if(our_area.get_gravity() != new_grav)
our_area.gravitychange(new_grav)
// TODO - Old code used to throw stuff out of the way instead of squashing. Should we?
// TODO - Old code used to throw stuff out of the way instead of squashing. Should we?
// Move, gib, or delete everything in our way!
for(var/turf/src_turf in turf_translation)
@@ -345,7 +345,7 @@
if(move_direction)
throw_a_mob(M,move_direction)
//VOREStation Add End
// We only need to rebuild powernets for our cables. No need to check machines because they are on top of cables.
// We only need to rebuild powernets for our cables. No need to check machines because they are on top of cables.
for(var/obj/structure/cable/C in A)
powernets |= C.powernet
+3 -3
View File
@@ -10,9 +10,9 @@
req_open = 1
/datum/surgery_step/repairflesh/can_use(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool)
/* VOREStation Removal for Mlem Reasons(TM)
if (target.stat == DEAD) // Sorry defibs, your subjects need to have pumping fluids for these to work.
return 0
/* VOREStation Removal for Mlem Reasons(TM)
if (target.stat == DEAD) // Sorry defibs, your subjects need to have pumping fluids for these to work.
return 0
*/
if (isslime(target))
return 0
+1 -1
View File
@@ -536,7 +536,7 @@
holder = new /obj/item/organ/internal/mmi_holder/robot(target, 1, M)
else
holder = new /obj/item/organ/internal/mmi_holder(target, 1, M) // Fallback to old behavior if organic MMI or if no subtype exists.
//VOREstation edit end
//VOREstation edit end
target.internal_organs_by_name["brain"] = holder
if(M.brainmob && M.brainmob.mind)
+1 -1
View File
@@ -116,7 +116,7 @@
for(var/obj/item/material/shard/S in L)
if(prob(50))
M.visible_message(span_danger("\The [S] slices [M]'s face messily!"),
span_danger("\The [S] slices your face messily!"))
span_danger("\The [S] slices your face messily!"))
M.apply_damage(10, def_zone = BP_HEAD)
if(prob(2))
M.embed(S, def_zone = BP_HEAD)
+13 -13
View File
@@ -109,7 +109,7 @@ var/list/table_icon_cache = list()
if(carpeted && W.has_tool_quality(TOOL_CROWBAR))
user.visible_message(span_infoplain(span_bold("\The [user]") + " removes the carpet from \the [src]."),
span_notice("You remove the carpet from \the [src]."))
span_notice("You remove the carpet from \the [src]."))
new carpeted_type(loc)
carpeted = 0
update_icon()
@@ -119,7 +119,7 @@ var/list/table_icon_cache = list()
var/obj/item/stack/tile/carpet/C = W
if(C.use(1))
user.visible_message(span_infoplain(span_bold("\The [user]") + " adds \the [C] to \the [src]."),
span_notice("You add \the [C] to \the [src]."))
span_notice("You add \the [C] to \the [src]."))
carpeted = 1
carpeted_type = W.type
update_icon()
@@ -150,7 +150,7 @@ var/list/table_icon_cache = list()
if(!do_after(user, 20 * F.toolspeed) || !F.remove_fuel(1, user))
return
user.visible_message(span_infoplain(span_bold("\The [user]") + " repairs some damage to \the [src]."),
span_notice("You repair some damage to \the [src]."))
span_notice("You repair some damage to \the [src]."))
health = max(health+(maxhealth/5), maxhealth) // 20% repair per application
return 1
@@ -259,14 +259,14 @@ var/list/table_icon_cache = list()
if(manipulating) return M
manipulating = 1
user.visible_message(span_infoplain(span_bold("\The [user]") + " begins removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place."),
span_notice("You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place."))
span_notice("You begin removing the [type_holding] holding \the [src]'s [M.display_name] [what] in place."))
if(sound)
playsound(src, sound, 50, 1)
if(!do_after(user, delay))
manipulating = 0
return M
user.visible_message(span_infoplain(span_bold("\The [user]") + " removes the [M.display_name] [what] from \the [src]."),
span_notice("You remove the [M.display_name] [what] from \the [src]."))
span_notice("You remove the [M.display_name] [what] from \the [src]."))
new M.stack_type(src.loc)
manipulating = 0
return null
@@ -281,13 +281,13 @@ var/list/table_icon_cache = list()
if(manipulating) return
manipulating = 1
user.visible_message(span_infoplain(span_bold("\The [user]") + " begins dismantling \the [src]."),
span_notice("You begin dismantling \the [src]."))
span_notice("You begin dismantling \the [src]."))
playsound(src, W.usesound, 50, 1)
if(!do_after(user, 20 * W.toolspeed))
manipulating = 0
return
user.visible_message(span_infoplain(span_bold("\The [user]") + " dismantles \the [src]."),
span_notice("You dismantle \the [src]."))
span_notice("You dismantle \the [src]."))
new /obj/item/stack/material/steel(src.loc)
qdel(src)
return
@@ -296,8 +296,8 @@ var/list/table_icon_cache = list()
// Used for !fun! things such as embedding shards in the faces of tableslammed people.
// The repeated
// S = [x].place_shard(loc)
// if(S) shards += S
// S = [x].place_shard(loc)
// if(S) shards += S
// is to avoid filling the list with nulls, as place_shard won't place shards of certain materials (holo-wood, holo-steel)
/obj/structure/table/proc/break_to_parts(full_return = 0)
@@ -445,10 +445,10 @@ var/list/table_icon_cache = list()
#define CORNER_CLOCKWISE 4
/*
turn() is weird:
turn(icon, angle) turns icon by angle degrees clockwise
turn(matrix, angle) turns matrix by angle degrees clockwise
turn(dir, angle) turns dir by angle degrees counter-clockwise
turn() is weird:
turn(icon, angle) turns icon by angle degrees clockwise
turn(matrix, angle) turns matrix by angle degrees clockwise
turn(dir, angle) turns dir by angle degrees counter-clockwise
*/
/proc/dirs_to_corner_states(list/dirs)
@@ -45,4 +45,4 @@ Frontend path: tgui\packages\tgui\interfaces\TraitTutorial.tsx
. = TRUE
/datum/tgui_module/trait_tutorial_tgui/tgui_state(mob/user)
return GLOB.tgui_always_state
return GLOB.tgui_always_state
+2 -2
View File
@@ -1,5 +1,5 @@
// Vore specific code for /obj/machinery/door/airlock/lift
/obj/machinery/door/airlock/lift/emag_act(var/uses_left, var/mob/user)
to_chat(user, span_danger("This door is internally controlled."))
return 0 // Prevents the cryptographic sequencer from using a charge fruitlessly
to_chat(user, span_danger("This door is internally controlled."))
return 0 // Prevents the cryptographic sequencer from using a charge fruitlessly
+5 -5
View File
@@ -2,15 +2,15 @@
/obj/turbolift_map_holder
name = "turbolift map placeholder"
icon = 'icons/obj/turbolift_preview_3x3.dmi'
dir = SOUTH // Direction of the holder determines the placement of the lift control panel and doors.
var/depth = 1 // Number of floors to generate, including the initial floor.
dir = SOUTH // Direction of the holder determines the placement of the lift control panel and doors.
var/depth = 1 // Number of floors to generate, including the initial floor.
var/lift_size_x = 2 // Number of turfs on each axis to generate in addition to the first
var/lift_size_y = 2 // ie. a 3x3 lift would have a value of 2 in each of these variables.
// Various turf and door types used when generating the turbolift floors.
var/wall_type = /turf/simulated/wall/elevator
var/wall_type = /turf/simulated/wall/elevator
var/floor_type = /turf/simulated/floor/tiled/dark
var/door_type = /obj/machinery/door/airlock/lift
var/door_type = /obj/machinery/door/airlock/lift
var/list/areas_to_use = list()
@@ -194,7 +194,7 @@
panel_ext.set_dir(udir)
cfloor.ext_panel = panel_ext
// Place lights
// Place lights
var/turf/placing1 = locate(light_x1, light_y1, cz)
var/turf/placing2 = locate(light_x2, light_y2, cz)
var/obj/machinery/light/light1 = new(placing1, light)
@@ -15,7 +15,7 @@ GLOBAL_LIST_INIT(digest_modes, list())
return null
/datum/digest_mode/proc/handle_atoms(obj/belly/B, list/touchable_atoms)
return FALSE
return FALSE
/datum/digest_mode/digest
id = DM_DIGEST
+25 -25
View File
@@ -787,45 +787,45 @@
// This is about 0.896m^3 of atmosphere
/datum/gas_mixture/belly_air
volume = 2500
temperature = 293.150
total_moles = 104
volume = 2500
temperature = 293.150
total_moles = 104
/datum/gas_mixture/belly_air/New()
. = ..()
gas = list(
GAS_O2 = 21,
GAS_N2 = 79)
. = ..()
gas = list(
GAS_O2 = 21,
GAS_N2 = 79)
/datum/gas_mixture/belly_air/vox
volume = 2500
temperature = 293.150
total_moles = 104
volume = 2500
temperature = 293.150
total_moles = 104
/datum/gas_mixture/belly_air/vox/New()
. = ..()
gas = list(
GAS_PHORON = 100)
. = ..()
gas = list(
GAS_PHORON = 100)
/datum/gas_mixture/belly_air/zaddat
volume = 2500
temperature = 293.150
total_moles = 300
volume = 2500
temperature = 293.150
total_moles = 300
/datum/gas_mixture/belly_air/zaddat/New()
. = ..()
gas = list(
GAS_O2 = 100)
. = ..()
gas = list(
GAS_O2 = 100)
/datum/gas_mixture/belly_air/nitrogen_breather
volume = 2500
temperature = 293.150
total_moles = 104
volume = 2500
temperature = 293.150
total_moles = 104
/datum/gas_mixture/belly_air/nitrogen_breather/New()
. = ..()
gas = list(
GAS_N2 = 100)
. = ..()
gas = list(
GAS_N2 = 100)
/mob/living/proc/feed_grabbed_to_self_falling_nom(var/mob/living/user, var/mob/living/prey)
+1 -1
View File
@@ -135,7 +135,7 @@ V::::::V V::::::VO:::::::OOO:::::::ORR:::::R R:::::REE::::::EEEEEE
//
// Belly searching for simplifying other procs
// Mostly redundant now with belly-objects and isbelly(loc)
// Mostly redundant now with belly-objects and isbelly(loc)
//
/proc/check_belly(atom/movable/A)
return isbelly(A.loc)
@@ -2709,10 +2709,10 @@ Departamental Swimsuits, for general use
//sixberry: Thistle
/obj/item/clothing/head/fluff/memory_crown
name = "Memory Crown"
desc = "A thorned crown sporting numerous amethyst inserts, all of which seem to glow faintly in the dark. Just holding it makes you feel as though you've forgotten something unpleasant."
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "memorycrown"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
item_state = "memorycrown_onmob"
slot_flags = SLOT_HEAD
name = "Memory Crown"
desc = "A thorned crown sporting numerous amethyst inserts, all of which seem to glow faintly in the dark. Just holding it makes you feel as though you've forgotten something unpleasant."
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "memorycrown"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
item_state = "memorycrown_onmob"
slot_flags = SLOT_HEAD
+29 -30
View File
@@ -1164,22 +1164,21 @@
//RadiantAurora: Tiemli Kroto
/obj/item/clothing/glasses/welding/tiemgogs
name = "custom-fitted welding goggles"
desc = "A pair of thick, custom-fitted goggles with LEDs above the lenses. Ruggedly engraved below the lenses is the name 'Tiemli Kroto'."
name = "custom-fitted welding goggles"
desc = "A pair of thick, custom-fitted goggles with LEDs above the lenses. Ruggedly engraved below the lenses is the name 'Tiemli Kroto'."
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "tiemgogs"
icon = 'icons/vore/custom_items_vr.dmi'
icon_state = "tiemgogs"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "tiemgogs"
icon_override = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "tiemgogs"
/obj/item/clothing/glasses/welding/tiemgogs/mob_can_equip(var/mob/living/carbon/human/H, slot, disable_warning = 0)
if(..())
if(H.ckey != "radiantaurora")
to_chat(H, span_warning("These don't look like they were made to fit you..."))
return 0
else
return 1
if(..())
if(H.ckey != "radiantaurora")
to_chat(H, span_warning("These don't look like they were made to fit you..."))
return 0
return 1
//Ryumi - Nikki Yumeno
/obj/item/rig/nikki
@@ -1224,11 +1223,11 @@
//Nickcrazy - Damon Bones Xrim
/obj/item/clothing/suit/storage/toggle/bomber/bombersec
name = "Security Bomber Jacket"
desc = "A black bomber jacket with the security emblem sewn onto it."
icon = 'icons/vore/custom_items_vr.dmi'
icon_override = 'icons/vore/custom_items_vr.dmi'
icon_state = "bombersec"
name = "Security Bomber Jacket"
desc = "A black bomber jacket with the security emblem sewn onto it."
icon = 'icons/vore/custom_items_vr.dmi'
icon_override = 'icons/vore/custom_items_vr.dmi'
icon_state = "bombersec"
//pimientopyro - Scylla Casmus
@@ -1479,21 +1478,21 @@
//Bricker98:Nettie Stough
/obj/item/modular_computer/tablet/preset/custom_loadout/nettie
name = "Remodeled Tablet"
desc = "A tablet computer, looks quite high-tech and has some emblems on the back."
icon = 'icons/obj/modular_tablet.dmi'
icon_state = "elite"
icon_state_unpowered = "elite"
name = "Remodeled Tablet"
desc = "A tablet computer, looks quite high-tech and has some emblems on the back."
icon = 'icons/obj/modular_tablet.dmi'
icon_state = "elite"
icon_state_unpowered = "elite"
/obj/item/modular_computer/tablet/preset/custom_loadout/nettie/install_default_hardware()
..()
processor_unit = new/obj/item/computer_hardware/processor_unit/small(src)
tesla_link = new/obj/item/computer_hardware/tesla_link(src)
hard_drive = new/obj/item/computer_hardware/hard_drive/(src)
network_card = new/obj/item/computer_hardware/network_card/advanced(src)
nano_printer = new/obj/item/computer_hardware/nano_printer(src)
battery_module = new/obj/item/computer_hardware/battery_module(src)
battery_module.charge_to_full()
..()
processor_unit = new/obj/item/computer_hardware/processor_unit/small(src)
tesla_link = new/obj/item/computer_hardware/tesla_link(src)
hard_drive = new/obj/item/computer_hardware/hard_drive/(src)
network_card = new/obj/item/computer_hardware/network_card/advanced(src)
nano_printer = new/obj/item/computer_hardware/nano_printer(src)
battery_module = new/obj/item/computer_hardware/battery_module(src)
battery_module.charge_to_full()
//Stobarico - Kyu Comet
+54 -54
View File
@@ -56,78 +56,78 @@
return max(((started_time + vote_time - world.time)/10), 0)
/datum/vote/proc/calculate_result()
if(!length(voted))
to_chat(world, span_interface("No votes were cast. Do you all hate democracy?!"))
return null
if(!length(voted))
to_chat(world, span_interface("No votes were cast. Do you all hate democracy?!"))
return null
return calculate_vote_result(voted, choices, vote_result_type)
return calculate_vote_result(voted, choices, vote_result_type)
/datum/vote/proc/calculate_vote_result(var/list/voted, var/list/choices, var/vote_result_type)
var/list/results = list()
var/list/results = list()
for(var/ck in voted)
if(voted[ck] in results)
results[voted[ck]]++
else
results[voted[ck]] = 1
for(var/ck in voted)
if(voted[ck] in results)
results[voted[ck]]++
else
results[voted[ck]] = 1
var/maxvotes = 0
for(var/res in results)
maxvotes = max(results[res], maxvotes)
var/maxvotes = 0
for(var/res in results)
maxvotes = max(results[res], maxvotes)
var/list/winning_options = list()
var/list/winning_options = list()
for(var/res in results)
if(results[res] == maxvotes)
winning_options |= res
for(var/res in results)
if(results[res] == maxvotes)
winning_options |= res
for(var/res in results)
to_chat(world, span_interface("<code>[res]</code> - [results[res]] vote\s"))
for(var/res in results)
to_chat(world, span_interface("<code>[res]</code> - [results[res]] vote\s"))
switch(vote_result_type)
if(VOTE_RESULT_TYPE_MAJORITY)
if(length(winning_options) == 1)
var/res = winning_options[1]
if(res in choices)
to_chat(world, span_interface(span_bold("<code>[res]</code> won the vote!")))
return res
else
to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?"))
stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]")
return null
switch(vote_result_type)
if(VOTE_RESULT_TYPE_MAJORITY)
if(length(winning_options) == 1)
var/res = winning_options[1]
if(res in choices)
to_chat(world, span_interface(span_bold("<code>[res]</code> won the vote!")))
return res
else
to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?"))
stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]")
return null
to_chat(world, span_interface(span_bold("No clear winner. The vote did not pass.")))
return null
to_chat(world, span_interface(span_bold("No clear winner. The vote did not pass.")))
return null
if(VOTE_RESULT_TYPE_SKEWED)
var/required_votes = ceil(length(voted) * 0.7) // 70% of total votes
if(maxvotes >= required_votes && length(winning_options) == 1)
var/res = winning_options[1]
if(res in choices)
to_chat(world, span_interface(span_bold("<code>[res]</code> won the vote with a 70% majority!")))
return res
else
to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?"))
stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]")
return null
if(VOTE_RESULT_TYPE_SKEWED)
var/required_votes = ceil(length(voted) * 0.7) // 70% of total votes
if(maxvotes >= required_votes && length(winning_options) == 1)
var/res = winning_options[1]
if(res in choices)
to_chat(world, span_interface(span_bold("<code>[res]</code> won the vote with a 70% majority!")))
return res
else
to_chat(world, span_interface("The winner of the vote ([sanitize(res)]) isn't a valid choice? What the heck?"))
stack_trace("Vote concluded with an invalid answer. Answer was [sanitize(res)], choices were [json_encode(choices)]")
return null
to_chat(world, span_interface(span_bold("No option received 70% of the votes. The vote did not pass.")))
return null
to_chat(world, span_interface(span_bold("No option received 70% of the votes. The vote did not pass.")))
return null
return null
return null
/datum/vote/proc/announce(start_text, var/time = vote_time)
to_chat(world, span_lightpurple("Type <b>vote</b> or click <a href='byond://?src=\ref[src];[HrefToken()];vote=open'>here</a> to place your vote. \
You have [time/10] seconds to vote."))
world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
to_chat(world, span_lightpurple("Type <b>vote</b> or click <a href='byond://?src=\ref[src];[HrefToken()];vote=open'>here</a> to place your vote. \
You have [time/10] seconds to vote."))
world << sound('sound/ambience/alarm4.ogg', repeat = 0, wait = 0, volume = 50, channel = 3)
/datum/vote/Topic(href, list/href_list)
if(href_list["vote"] == "open")
if(src)
tgui_interact(usr)
else
to_chat(usr, "There is no active vote to participate in.")
if(href_list["vote"] == "open")
if(src)
tgui_interact(usr)
else
to_chat(usr, "There is no active vote to participate in.")
/datum/vote/proc/tick()
if(remaining() == 0)