Merge branch 'master' into Arokha/matdefs

This commit is contained in:
Aronai Sieyes
2021-07-07 14:29:30 -04:00
committed by GitHub
283 changed files with 4118 additions and 1405 deletions
+1 -1
View File
@@ -688,7 +688,7 @@ var/global/floorIsLava = 0
set desc="Announce your desires to the world"
if(!check_rights(0)) return
var/message = input(usr, "Global message to send:", "Admin Announce", null, null) as message//todo: sanitize for all?
var/message = tgui_input_message(usr, "Global message to send:", "Admin Announce")
if(message)
if(!check_rights(R_SERVER,0))
message = sanitize(message, 500, extra = 0)
@@ -13,24 +13,25 @@
if (!shuttle_tag) return
var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag]
var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas())
var/list/area_choices = return_areas()
var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices)
if (!origin_area) return
var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas())
var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices)
if (!destination_area) return
var/long_jump = tgui_alert(user, "Is there a transition area for this jump?","Transition?", list("Yes","No"))
if (long_jump == "Yes")
var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", return_areas())
var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices)
if (!transition_area) return
var/move_duration = input(user, "How many seconds will this jump take?") as num
S.long_jump(origin_area, destination_area, transition_area, move_duration)
S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration)
message_admins("<span class='notice'>[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle</span>", 1)
log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle")
else
S.short_jump(origin_area, destination_area)
S.short_jump(area_choices[origin_area], area_choices[destination_area])
message_admins("<span class='notice'>[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle</span>", 1)
log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle")
+1 -1
View File
@@ -1278,7 +1278,7 @@
var/client/C = usr.client
if(!isobserver(usr)) C.admin_ghost()
sleep(2)
C.jumptomob(M)
C.do_jumptomob(M)
else if(href_list["adminplayerobservefollow"])
if(!check_rights(R_MOD|R_ADMIN|R_SERVER)) //VOREStation Edit
+22 -15
View File
@@ -39,6 +39,7 @@
tgui_alert_async(usr, "Admin jumping disabled")
return
/// Verb wrapper around do_jumptomob()
/client/proc/jumptomob()
set category = "Admin"
set name = "Jump to Mob"
@@ -47,24 +48,30 @@
if(!check_rights(R_ADMIN|R_MOD|R_DEBUG|R_EVENT))
return
if(config.allow_admin_jump)
var/mob/M = tgui_input_list(usr, "Pick a mob:", "Jump to Mob", mob_list)
if(!M)
return
var/mob/M = tgui_input_list(usr, "Pick a mob:", "Jump to Mob", mob_list)
if(!M) // Cancelled
return
do_jumptomob(M)
/// Performs the jumps
/client/proc/do_jumptomob(var/mob/M)
if(!config.allow_admin_jump)
tgui_alert_async(usr, "Admin jumping disabled")
return
if(!M)
return
var/mob/A = src.mob // Impossible to be unset, enforced by byond
var/turf/T = get_turf(M)
if(isturf(T))
A.on_mob_jump()
A.forceMove(T)
log_admin("[key_name(usr)] jumped to [key_name(M)]")
message_admins("[key_name_admin(usr)] jumped to [key_name_admin(M)]", 1)
if(src.mob)
var/mob/A = src.mob
var/turf/T = get_turf(M)
if(T && isturf(T))
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
A.on_mob_jump()
A.forceMove(T)
else
to_chat(A, "<span class='filter_adminlog'>This mob is not located in the game world.</span>")
feedback_add_details("admin_verb","JM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
else
tgui_alert_async(usr, "Admin jumping disabled")
to_chat(A, "<span class='filter_adminlog'>This mob is not located in the game world.</span>")
/client/proc/jumptocoord(tx as num, ty as num, tz as num)
set category = "Admin"
set name = "Jump to Coordinate"
+6 -4
View File
@@ -273,12 +273,12 @@ Ccomp's first proc.
var/target = tgui_input_list(usr, "Select a ckey to allow to rejoin", "Allow Respawn Selector", GLOB.respawn_timers)
if(!target)
return
if(GLOB.respawn_timers[target] == -1) // Their respawn timer is set to -1, which is 'not allowed to respawn'
var/response = tgui_alert(src, "Are you sure you wish to allow this individual to respawn? They would normally not be able to.","Allow impossible respawn?",list("No","Yes"))
if(response == "No")
return
GLOB.respawn_timers -= target
var/found_client = FALSE
@@ -295,7 +295,7 @@ Ccomp's first proc.
if(!found_client)
to_chat(src, "<span class='notice'>The associated client didn't appear to be connected, so they couldn't be notified, but they can now respawn if they reconnect.</span>")
log_admin("[key_name(usr)] allowed [found_client ? key_name(found_client) : target] to bypass the respawn time limit")
message_admins("Admin [key_name_admin(usr)] allowed [found_client ? key_name_admin(found_client) : target] to bypass the respawn time limit", 1)
@@ -483,7 +483,7 @@ Traitors and the like can also be revived with the previous role mostly intact.
return
new_character = new(spawnloc)
if(sparks)
anim(spawnloc,new_character,'icons/mob/mob.dmi',,"phasein",,new_character.dir)
playsound(spawnloc, "sparks", 50, 1)
@@ -538,6 +538,8 @@ Traitors and the like can also be revived with the previous role mostly intact.
//A redraw for good measure
new_character.regenerate_icons()
new_character.update_transform() //VOREStation Edit
//If we're announcing their arrival
if(announce)
AnnounceArrival(new_character, new_character.mind.assigned_role, "Common", new_character.z)
@@ -100,7 +100,7 @@
return TOPIC_REFRESH
else if(href_list["nickname"])
var/raw_nickname = input(user, "Choose your character's nickname:", "Character Nickname") as text|null
var/raw_nickname = tgui_input_text(user, "Choose your character's nickname:", "Character Nickname", pref.nickname)
if (!isnull(raw_nickname) && CanUseTopic(user))
var/new_nickname = sanitize_name(raw_nickname, pref.species, is_FBP())
if(new_nickname)
@@ -140,7 +140,7 @@
return TOPIC_REFRESH
else if(href_list["metadata"])
var/new_metadata = sanitize(input(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)) as message|null, extra = 0) //VOREStation Edit
var/new_metadata = sanitize(tgui_input_message(user, "Enter any information you'd like others to see, such as Roleplay-preferences:", "Game Preference" , html_decode(pref.metadata)), extra = 0) //VOREStation Edit
if(new_metadata && CanUseTopic(user))
pref.metadata = new_metadata
return TOPIC_REFRESH
@@ -36,8 +36,8 @@
pref.all_underwear -= underwear_category_name
// TODO - Looks like this is duplicating the work of sanitize_character() if so, remove
if(pref.backbag > 5 || pref.backbag < 1)
pref.backbag = 1 //Same as above
if(pref.backbag > backbaglist.len || pref.backbag < 1)
pref.backbag = 2 //Same as above
character.backbag = pref.backbag
if(pref.pdachoice > 6 || pref.pdachoice < 1)
@@ -0,0 +1,20 @@
/datum/gear/cosmetic/nailpolish
display_name = "nail polish (colorable)"
description = "Nail polish, available in every color of the rainbow! Doesn't come with nail polish remover."
path = /obj/item/weapon/nailpolish
/datum/gear/cosmetic/nailpolish/New()
..()
// can't set description, it'll look funny
gear_tweaks = list(gear_tweak_free_color_choice, gear_tweak_free_name)
/datum/gear/cosmetic/nailpolish/spawn_item(var/location, var/metadata)
var/obj/item/weapon/nailpolish/polish = ..()
polish.set_colour(polish.color)
polish.color = null
return polish
/datum/gear/cosmetic/nailpolish_remover
display_name = "nail polish remover"
description = "Nail polish remover, for when the fun's over. Doesn't come with nail polish."
path = /obj/item/weapon/nailpolish_remover
@@ -87,19 +87,19 @@
return TOPIC_REFRESH
else if(href_list["weight_gain"])
var/weight_gain_rate = input(user, "Choose your character's rate of weight gain between 100% \
var/weight_gain_rate = tgui_input_num(user, "Choose your character's rate of weight gain between 100% \
(full realism body fat gain) and 0% (no body fat gain).\n\
(If you want to disable weight gain, set this to 0.01 to round it to 0%.)\
([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference") as num|null
([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference", pref.weight_gain)
if(weight_gain_rate)
pref.weight_gain = round(text2num(weight_gain_rate),1)
return TOPIC_REFRESH
else if(href_list["weight_loss"])
var/weight_loss_rate = input(user, "Choose your character's rate of weight loss between 100% \
var/weight_loss_rate = tgui_input_num(user, "Choose your character's rate of weight loss between 100% \
(full realism body fat loss) and 0% (no body fat loss).\n\
(If you want to disable weight loss, set this to 0.01 round it to 0%.)\
([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference") as num|null
([WEIGHT_CHANGE_MIN]-[WEIGHT_CHANGE_MAX])", "Character Preference", pref.weight_loss)
if(weight_loss_rate)
pref.weight_loss = round(text2num(weight_loss_rate),1)
return TOPIC_REFRESH
+1 -1
View File
@@ -677,7 +677,7 @@
user.unEquip(I)
I.forceMove(src)
holding = I
user.visible_message("<span class='notice'>\The [user] shoves \the [I] into \the [src].</span>")
user.visible_message("<b>\The [user]</b> shoves \the [I] into \the [src].")
verbs |= /obj/item/clothing/shoes/proc/draw_knife
update_icon()
else
@@ -62,7 +62,7 @@
//TODO: Make inflating gloves a thing
/*/obj/item/clothing/gloves/sterile/proc/Inflate(/mob/living/carbon/human/user)
user.visible_message("<span class='notice'>\The [src] expands!</span>")
user.visible_message("<b>\The [src]</b> expands!")
qdel(src)*/
/obj/item/clothing/gloves/sterile/latex
@@ -141,13 +141,14 @@
/obj/item/clothing/suit/space/void/autolok
name = "AutoLok pressure suit"
desc = "A high-tech snug-fitting pressure suit. Fits any species. It offers very little physical protection, but is equipped with sensors that will automatically deploy the integral helmet to protect the wearer."
icon = 'icons/obj/clothing/suits_vr.dmi'
icon_state = "autoloksuit"
item_state = "autoloksuit"
item_state_slots = list(slot_r_hand_str = "space_suit_syndicate", slot_l_hand_str = "space_suit_syndicate")
armor = list(melee = 15, bullet = 5, laser = 5,energy = 5, bomb = 5, bio = 100, rad = 80)
slowdown = 0.5
siemens_coefficient = 1
species_restricted = list("exclude",SPECIES_DIONA,SPECIES_VOX) //this thing can autoadapt
icon = 'icons/obj/clothing/suits_vr.dmi'
breach_threshold = 6 //this thing is basically tissue paper
w_class = ITEMSIZE_NORMAL //if it's snug, high-tech, and made of relatively soft materials, it should be much easier to store!
+1 -1
View File
@@ -152,7 +152,7 @@
return
if(A.reagents && A.reagents.trans_to_obj(src, reagents.maximum_volume))
user.visible_message("<span class='notice'>\The [user] soaks [src] using [A].</span>", "<span class='notice'>You soak [src] using [A].</span>")
user.visible_message("<b>\The [user]</b> soaks [src] using [A].", "<span class='notice'>You soak [src] using [A].</span>")
update_name()
return
+1 -1
View File
@@ -580,7 +580,7 @@ GLOBAL_LIST_EMPTY(vending_products)
if(prob(1))
sleep(3)
if(R.get_product(get_turf(src)))
visible_message("<span class='notice'>\The [src] clunks as it vends an additional item.</span>")
visible_message("<b>\The [src]</b> clunks as it vends an additional item.")
playsound(src, "sound/[vending_sound]", 100, 1, 1)
GLOB.items_sold_shift_roundstat++
+2 -2
View File
@@ -235,7 +235,7 @@
user.visible_message("<span class='notice'>\The [user] crudely slices \the [src] with [W]!</span>", "<span class='notice'>You crudely slice \the [src] with your [W]!</span>")
slices_lost = rand(1,min(1,round(slices_num/2)))
else
user.visible_message("<span class='notice'>\The [user] slices \the [src]!</span>", "<span class='notice'>You slice \the [src]!</span>")
user.visible_message("<b>\The [user]</b> slices \the [src]!", "<span class='notice'>You slice \the [src]!</span>")
var/reagents_per_slice = reagents.total_volume/slices_num
for(var/i=1 to (slices_num-slices_lost))
@@ -1833,7 +1833,7 @@
Unwrap(user)
/obj/item/weapon/reagent_containers/food/snacks/monkeycube/proc/Expand()
src.visible_message("<span class='notice'>\The [src] expands!</span>")
src.visible_message("<b>\The [src]</b> expands!")
var/mob/living/carbon/human/H = new(get_turf(src))
H.set_species(monkey_type)
H.real_name = H.species.get_random_name()
+1 -1
View File
@@ -476,7 +476,7 @@
. = ..()
/obj/item/weapon/reagent_containers/food/snacks/cube/proc/Expand()
src.visible_message("<span class='notice'>\The [src] expands!</span>")
src.visible_message("<b>\The [src]</b> expands!")
new food_type(get_turf(src))
qdel(src)
@@ -319,7 +319,7 @@
CI = new /datum/cooking_item/(CC)
I.forceMove(src)
cooking_objs.Add(CI)
user.visible_message("<span class='notice'>\The [user] puts \the [I] into \the [src].</span>")
user.visible_message("<b>\The [user]</b> puts \the [I] into \the [src].")
if (CC.check_contents() == 0)//If we're just putting an empty container in, then dont start any processing.
return TRUE
else
@@ -333,7 +333,7 @@
CI.combine_target = selected_option
// We can actually start cooking now.
user.visible_message("<span class='notice'>\The [user] puts \the [I] into \the [src].</span>")
user.visible_message("<b>\The [user]</b> puts \the [I] into \the [src].")
get_cooking_work(CI)
cooking = TRUE
@@ -433,7 +433,7 @@
/obj/machinery/appliance/proc/finish_cooking(var/datum/cooking_item/CI)
src.visible_message("<span class='notice'>\The [src] pings!</span>")
src.visible_message("<b>\The [src]</b> pings!")
if(cooked_sound)
playsound(get_turf(src), cooked_sound, 50, 1)
//Check recipes first, a valid recipe overrides other options
@@ -148,7 +148,7 @@
/obj/machinery/appliance/cooker/oven/finish_cooking(var/datum/cooking_item/CI)
if(CI.combine_target)
CI.result_type = 3//Combination type. We're making something out of our ingredients
visible_message("<span class='notice'>\The [src] pings!</span>")
visible_message("<b>\The [src]</b> pings!")
combination_cook(CI)
return
else
+5 -5
View File
@@ -77,24 +77,24 @@
if(src.broken > 0)
if(src.broken == 2 && O.is_screwdriver()) // If it's broken and they're using a screwdriver
user.visible_message( \
"<span class='notice'>\The [user] starts to fix part of the microwave.</span>", \
"<b>\The [user]</b> starts to fix part of the microwave.", \
"<span class='notice'>You start to fix part of the microwave.</span>" \
)
playsound(src, O.usesound, 50, 1)
if (do_after(user,20 * O.toolspeed))
user.visible_message( \
"<span class='notice'>\The [user] fixes part of the microwave.</span>", \
"<b>\The [user]</b> fixes part of the microwave.", \
"<span class='notice'>You have fixed part of the microwave.</span>" \
)
src.broken = 1 // Fix it a bit
else if(src.broken == 1 && O.is_wrench()) // If it's broken and they're doing the wrench
user.visible_message( \
"<span class='notice'>\The [user] starts to fix part of the microwave.</span>", \
"<b>\The [user]</b> starts to fix part of the microwave.", \
"<span class='notice'>You start to fix part of the microwave.</span>" \
)
if (do_after(user,20 * O.toolspeed))
user.visible_message( \
"<span class='notice'>\The [user] fixes the microwave.</span>", \
"<b>\The [user]</b> fixes the microwave.", \
"<span class='notice'>You have fixed the microwave.</span>" \
)
src.icon_state = "mw"
@@ -108,7 +108,7 @@
else if(src.dirty==100) // The microwave is all dirty so can't be used!
if(istype(O, /obj/item/weapon/reagent_containers/spray/cleaner) || istype(O, /obj/item/weapon/soap)) // If they're trying to clean it then let them
user.visible_message( \
"<span class='notice'>\The [user] starts to clean the microwave.</span>", \
"<b>\The [user]</b> starts to clean the microwave.", \
"<span class='notice'>You start to clean the microwave.</span>" \
)
if (do_after(user,20))
@@ -24,19 +24,6 @@
icon_state = "showcase"
icon_base = "showcase"
/obj/machinery/smartfridge/drinks/update_icon()
cut_overlays()
if(stat & (BROKEN|NOPOWER))
icon_state = "[icon_base]-off"
else
icon_state = icon_base
if(panel_open)
add_overlay("[icon_base]-panel")
if(!stat && contents.len)
add_overlay("[icon_base]-fill")
/obj/machinery/smartfridge/drinks/accept_check(var/obj/item/O as obj)
if(istype(O,/obj/item/weapon/reagent_containers/glass) || istype(O,/obj/item/weapon/reagent_containers/food/drinks) || istype(O,/obj/item/weapon/reagent_containers/food/condiment))
return TRUE
+1 -1
View File
@@ -111,7 +111,7 @@
cards -= P
H.parentdeck = src
H.update_icon()
user.visible_message("<span class='notice'>\The [user] draws a card.</span>")
user.visible_message("<b>\The [user]</b> draws a card.")
to_chat(user,"<span class='notice'>It's the [P].</span>")
/obj/item/weapon/deck/verb/deal_card()
+1 -1
View File
@@ -83,7 +83,7 @@ var/list/ghost_traps
to_chat(target, "<b>Remember, the purpose of your existence is to serve the crew and the station. Above all else, do no harm.</b>")
to_chat(target, "<b>Use say #b to speak to other artificial intelligences.</b>")
var/turf/T = get_turf(target)
T.visible_message("<span class='notice'>\The [src] chimes quietly.</span>")
T.visible_message("<b>\The [src]</b> chimes quietly.")
var/obj/item/device/mmi/digital/posibrain/P = target.loc
if(!istype(P)) //wat
return
+1 -1
View File
@@ -513,5 +513,5 @@
derez()
/mob/living/simple_mob/animal/space/carp/holodeck/proc/derez()
visible_message("<span class='notice'>\The [src] fades away!</span>")
visible_message("<b>\The [src]</b> fades away!")
qdel(src)
+1 -1
View File
@@ -185,7 +185,7 @@
hud_item.off(FALSE)
/obj/item/device/mapping_unit/proc/hide_device()
hud_datum.unapply_to_hud()
hud_datum?.unapply_to_hud()
/obj/item/device/mapping_unit/proc/last_run()
stop_updates()
+4 -4
View File
@@ -571,7 +571,7 @@
if(!degree || get_trait(TRAIT_IMMUTABLE) > 0) return
source_turf.visible_message("<span class='notice'>\The [display_name] quivers!</span>")
source_turf.visible_message("<b>\The [display_name]</b> quivers!")
//This looks like shit, but it's a lot easier to read/change this way.
var/total_mutations = rand(1,1+degree)
@@ -608,7 +608,7 @@
if(prob(degree*5))
set_trait(TRAIT_CARNIVOROUS, get_trait(TRAIT_CARNIVOROUS)+rand(-degree,degree),2, 0)
if(get_trait(TRAIT_CARNIVOROUS))
source_turf.visible_message("<span class='notice'>\The [display_name] shudders hungrily.</span>")
source_turf.visible_message("<b>\The [display_name]</b> shudders hungrily.")
if(6)
set_trait(TRAIT_WEED_TOLERANCE, get_trait(TRAIT_WEED_TOLERANCE)+(rand(-2,2)*degree),10, 0)
if(prob(degree*5))
@@ -629,7 +629,7 @@
set_trait(TRAIT_POTENCY, get_trait(TRAIT_POTENCY)+(rand(-20,20)*degree),200, 0)
if(prob(degree*5))
set_trait(TRAIT_SPREAD, get_trait(TRAIT_SPREAD)+rand(-1,1),2, 0)
source_turf.visible_message("<span class='notice'>\The [display_name] spasms visibly, shifting in the tray.</span>")
source_turf.visible_message("<b>\The [display_name]</b> spasms visibly, shifting in the tray.")
if(prob(degree*3))
set_trait(TRAIT_SPORING, !get_trait(TRAIT_SPORING))
if(9)
@@ -647,7 +647,7 @@
if(prob(degree*2))
set_trait(TRAIT_BIOLUM, !get_trait(TRAIT_BIOLUM))
if(get_trait(TRAIT_BIOLUM))
source_turf.visible_message("<span class='notice'>\The [display_name] begins to glow!</span>")
source_turf.visible_message("<b>\The [display_name]</b> begins to glow!")
if(prob(degree*2))
set_trait(TRAIT_BIOLUM_COLOUR,"#[get_random_colour(0,75,190)]")
source_turf.visible_message("<span class='notice'>\The [display_name]'s glow </span><font color='[get_trait(TRAIT_BIOLUM_COLOUR)]'>changes colour</font>!")
+3 -3
View File
@@ -4,7 +4,7 @@
return src
var/datum/seed/S = diverge() //Let's not modify all of the seeds.
T.visible_message("<span class='notice'>\The [S.display_name] quivers!</span>") //Mimicks the normal mutation.
T.visible_message("<b>\The [S.display_name]</b> quivers!") //Mimicks the normal mutation.
G.mutate(S, T)
return S
@@ -94,7 +94,7 @@
if(prob(50))
S.set_trait(TRAIT_BIOLUM, !S.get_trait(TRAIT_BIOLUM))
if(S.get_trait(TRAIT_BIOLUM))
T.visible_message("<span class='notice'>\The [S.display_name] begins to glow!</span>")
T.visible_message("<b>\The [S.display_name]</b> begins to glow!")
if(prob(50))
S.set_trait(TRAIT_BIOLUM_COLOUR,get_random_colour(0,75,190))
T.visible_message("<span class='notice'>\The [S.display_name]'s glow </span><font color='[S.get_trait(TRAIT_BIOLUM_COLOUR)]'>changes colour</font>!")
@@ -118,7 +118,7 @@
S.set_trait(TRAIT_MATURATION, S.get_trait(TRAIT_MATURATION)+rand(-1,1),30,0)
if(prob(55))
S.set_trait(TRAIT_SPREAD, S.get_trait(TRAIT_SPREAD)+rand(-1,1),2,0)
T.visible_message("<span class='notice'>\The [S.display_name] spasms visibly, shifting in the tray.</span>")
T.visible_message("<b>\The [S.display_name]</b> spasms visibly, shifting in the tray.")
/decl/plantgene/fruit/mutate(var/datum/seed/S)
if(prob(65))
@@ -68,12 +68,12 @@
var/mob/living/L = A
if(!(user in buckled_mobs))
L.visible_message(\
"<span class='notice'>\The [user] frees \the [L] from \the [src].</span>",\
"<span class='notice'>\The [user] frees you from \the [src].</span>",\
"<b>\The [user]</b> frees \the [L] from \the [src].",\
"<b>\The [user]</b> frees you from \the [src].",\
"<span class='warning'>You hear shredding and ripping.</span>")
else
L.visible_message(\
"<span class='notice'>\The [L] struggles free of \the [src].</span>",\
"<b>\The [L]</b> struggles free of \the [src].",\
"<span class='notice'>You untangle \the [src] from around yourself.</span>",\
"<span class='warning'>You hear shredding and ripping.</span>")
unbuckle()
@@ -268,7 +268,7 @@
if(S.scan(target))
scanned = TRUE
if(scanned)
visible_message("<span class='notice'>\The [user] waves \the [src] around [target].</span>")
visible_message("<b>\The [user]</b> waves \the [src] around [target].")
/obj/item/device/electronic_assembly/attackby(var/obj/item/I, var/mob/user)
if(can_anchor && I.is_wrench())
+1 -1
View File
@@ -187,7 +187,7 @@
new /obj/item/weapon/book/tome(src.loc)
var/datum/gender/T = gender_datums[user.get_visible_gender()]
to_chat(user, "<span class='warning'>Your sanity barely endures the seconds spent in the vault's browsing window. The only thing to remind you of this when you stop browsing is a dusty old tome sitting on the desk. You don't really remember printing it.</span>")
user.visible_message("<span class='notice'>\The [user] stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.</span>", 2)
user.visible_message("<b>\The [user]</b> stares at the blank screen for a few moments, [T.his] expression frozen in fear. When [T.he] finally awakens from it, [T.he] looks a lot older.", 2)
src.arcanecheckout = 0
if(1)
// Inventory
+145
View File
@@ -0,0 +1,145 @@
/obj/item/organ/external/var/datum/nail_polish/nail_polish
/obj/item/weapon/nailpolish
name = "nail polish"
desc = "to paint your nails with. Or someone else's!"
icon = 'icons/obj/nailpolish_vr.dmi'
icon_state = "nailpolish"
var/colour = "#FFFFFF"
var/image/top_underlay
var/image/color_underlay
var/open = FALSE
drop_sound = 'sound/items/drop/glass.ogg'
pickup_sound = 'sound/items/pickup/glass.ogg'
/obj/item/weapon/nailpolish/Initialize()
. = ..()
desc = "<font color='[colour]'>Nail polish,</font> " + initial(desc)
top_underlay = image(icon, "top")
color_underlay = image(icon, "color")
update_icon()
/obj/item/weapon/nailpolish/proc/set_colour(var/_colour)
colour = _colour
desc = "<font color='[colour]'>Nail polish,</font> " + initial(desc)
update_icon()
/obj/item/weapon/nailpolish/attack_self(var/mob/user)
open = !open
to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src]."))
update_icon()
/obj/item/weapon/nailpolish/update_icon()
. = ..()
icon_state = "[initial(icon_state)][open ? "-open" : ""]"
top_underlay.icon_state = "top[open ? "-open" : ""]"
color_underlay.icon_state = "color[open ? "-open" : ""]"
color_underlay.color = colour
underlays = list(color_underlay, top_underlay)
/obj/item/organ/external/proc/get_polish(var/colour)
var/static/forbidden_parts = BP_ALL - list(BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT)
if(organ_tag in forbidden_parts)
return FALSE
var/ico
var/icostate
if(length(markings))
for(var/mark_name in markings)
var/mark_data = markings[mark_name]
var/datum/sprite_accessory/marking/mark = mark_data["datum"]
if(length(mark.body_parts & forbidden_parts))
continue
ico = mark.icon
icostate = "[mark.icon_state]-[organ_tag]"
break
else
ico = 'icons/obj/nailpolish_vr.dmi'
icostate = organ_tag
return new /datum/nail_polish(ico, icostate, colour)
/obj/item/weapon/nailpolish/attack(var/mob/user, var/mob/living/carbon/human/target)
if(!open)
return
if(!istype(target))
return
var/bp = user.zone_sel.selecting
var/obj/item/organ/external/body_part = target.get_organ(bp)
if(!body_part)
to_chat(user, SPAN_WARNING("[target] is missing that limb!"))
return
if(body_part.nail_polish)
to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] already has nail polish on!"))
return
var/datum/nail_polish/polish = body_part.get_polish(colour)
if(!polish)
to_chat(user, SPAN_NOTICE("You can't find any nails on [body_part] to paint."))
return
if(user == target)
user.visible_message("<b>\The [user]</b> paints their nails with \the [src].", "You paint your nails with \the [src].")
else
if(do_after(user, 2 SECONDS, target))
user.visible_message("<b>\The [user]</b> paints \the [target]'s nails with \the [src].", "You paint \the [target]'s nails with \the [src].")
else
to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!"))
return
body_part.set_polish(polish)
/obj/item/organ/external/proc/set_polish(var/datum/nail_polish/polish)
nail_polish = polish
owner?.update_icons_body()
/obj/item/weapon/nailpolish_remover
name = "nail polish remover"
desc = "Paint thinner, acetone, nail polish remover; whatever you call it, it gets the job done."
drop_sound = 'sound/items/drop/helm.ogg'
pickup_sound = 'sound/items/pickup/helm.ogg'
icon = 'icons/obj/nailpolish_vr.dmi'
icon_state = "nailpolishremover"
var/open = FALSE
/obj/item/weapon/nailpolish_remover/attack_self(var/mob/user)
open = !open
to_chat(user, SPAN_NOTICE("You [open ? "open" : "close"] \the [src]."))
update_icon()
/obj/item/weapon/nailpolish_remover/update_icon()
. = ..()
icon_state = "[initial(icon_state)][open ? "-open" : ""]"
/obj/item/weapon/nailpolish_remover/attack(var/mob/user, var/mob/living/carbon/human/target)
if(!open)
return
if(!istype(target))
return
var/bp = user.zone_sel.selecting
var/obj/item/organ/external/body_part = target.get_organ(bp)
if(!body_part)
to_chat(user, SPAN_WARNING("[target] is missing that limb!"))
return
if(!body_part.nail_polish)
to_chat(user, SPAN_NOTICE("[target]'s [body_part.name] has no nail polish to remove!"))
return
if(user == target)
user.visible_message("<b>\The [user]</b> removes their nail polish with \the [src].", "You remove your nail polish with \the [src].")
else
if(do_after(user, 2 SECONDS, target))
user.visible_message("<b>\The [user]</b> removes \the [target]'s nail polish with \the [src].", "You remove \the [target]'s nail polish with \the [src].")
else
to_chat(user, SPAN_NOTICE("Both you and [target] must stay still!"))
return
body_part.set_polish(null)
/datum/nail_polish
var/icon = 'icons/obj/nailpolish_vr.dmi'
var/icon_state
var/color
/datum/nail_polish/New(var/_icon, var/_icon_state, var/_color)
icon = _icon
icon_state = _icon_state
color = _color
+1 -1
View File
@@ -152,7 +152,7 @@ GLOBAL_DATUM_INIT(_preloader, /dmm_suite/preloader, new)
if(xcrd > world.maxx)
if(cropMap)
break
else
else if(!measureOnly)
world.maxx = xcrd
if(xcrd >= 1)
+2 -2
View File
@@ -33,8 +33,8 @@
to_chat(user, "<span class='warning'>You must be standing on open flooring to build a window.</span>")
return 1
var/title = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)"
var/choice = tgui_input_list(title, "What would you like to construct?", "Window Selection", window_options)
var/message = "Sheet-[used_stack.name] ([used_stack.get_amount()] sheet\s left)"
var/choice = tgui_input_list(user, message, "Window Construction", window_options)
if(!choice || !used_stack || !user || used_stack.loc != user || user.stat || user.loc != T)
return 1
@@ -28,7 +28,12 @@
new /datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
new /datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (11x11)", /obj/item/canvas, 2, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (19x19)", /obj/item/canvas/nineteen_nineteen, 3, time = 2 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (23x19)", /obj/item/canvas/twentythree_nineteen, 4, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (23x23), AI", /obj/item/canvas/twentythree_twentythree, 5, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]"),
new /datum/stack_recipe("painting canvas (24x24)", /obj/item/canvas/twentyfour_twentyfour, 6, time = 3 SECONDS, pass_stack_color = FALSE, supplied_material = "[name]")
)
/datum/material/cloth/syncloth
@@ -43,7 +43,9 @@
new /datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"),
new /datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]"), //VOREStation Add
new /datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]"),
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
new /datum/stack_recipe("tanning rack", /obj/structure/tanning_rack, 3, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("painting easel", /obj/structure/easel, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]"),
new /datum/stack_recipe("painting frame", /obj/item/frame/painting, 5, one_per_turf = TRUE, time = 20, on_floor = TRUE, supplied_material = "[name]")
)
/datum/material/wood/sif
+1 -1
View File
@@ -67,7 +67,7 @@ var/global/list/datum/stack_recipe/rods_recipes = list( \
var/obj/item/stack/medical/splint/ghetto/new_splint = new(get_turf(user))
new_splint.add_fingerprint(user)
user.visible_message("<span class='notice'>\The [user] constructs \a [new_splint] out of a [singular_name].</span>", \
user.visible_message("<b>\The [user]</b> constructs \a [new_splint] out of a [singular_name].", \
"<span class='notice'>You use make \a [new_splint] out of a [singular_name].</span>")
src.use(1)
return
@@ -18,7 +18,7 @@
/obj/item/stack/animalhide/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(has_edge(W) || is_sharp(W))
//visible message on mobs is defined as visible_message(var/message, var/self_message, var/blind_message)
user.visible_message("<span class='notice'>\The [user] starts cutting hair off \the [src]</span>", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
user.visible_message("<b>\The [user]</b> starts cutting hair off \the [src]", "<span class='notice'>You start cutting the hair off \the [src]</span>", "You hear the sound of a knife rubbing against flesh")
var/scraped = 0
while(amount > 0 && do_after(user, 2.5 SECONDS)) // 2.5s per hide
//Try locating an exisitng stack on the tile and add to there if possible
+3 -3
View File
@@ -209,10 +209,10 @@
if(use_cell_power())
active = !active
if(active)
visible_message("<span class='notice'>\The [src] lurches downwards, grinding noisily.</span>")
visible_message("<b>\The [src]</b> lurches downwards, grinding noisily.")
need_update_field = 1
else
visible_message("<span class='notice'>\The [src] shudders to a grinding halt.</span>")
visible_message("<b>\The [src]</b> shudders to a grinding halt.")
else
to_chat(user, "<span class='notice'>The drill is unpowered.</span>")
else
@@ -273,7 +273,7 @@
/obj/machinery/mining/drill/proc/system_error(var/error)
if(error)
src.visible_message("<span class='notice'>\The [src] flashes a '[error]' warning.</span>")
src.visible_message("<b>\The [src]</b> flashes a '[error]' warning.")
faultreporter.autosay(error, src.name, "Supply")
need_player_check = 1
active = 0
+2 -2
View File
@@ -398,7 +398,7 @@ var/list/mining_overlay_cache = list()
if (istype(W, /obj/item/device/measuring_tape))
var/obj/item/device/measuring_tape/P = W
user.visible_message("<span class='notice'>\The [user] extends \a [P] towards \the [src].</span>","<span class='notice'>You extend \the [P] towards \the [src].</span>")
user.visible_message("<b>\The [user]</b> extends \a [P] towards \the [src].","<span class='notice'>You extend \the [P] towards \the [src].</span>")
if(do_after(user, 15))
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>")
return
@@ -408,7 +408,7 @@ var/list/mining_overlay_cache = list()
if(C.mode) //Mode means scanning
C.depth_scanner.scan_atom(user, src)
else
user.visible_message("<span class='notice'>\The [user] extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>", "<span class='notice'>You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>")
user.visible_message("<b>\The [user]</b> extends \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!", "<span class='notice'>You extend \the [C] over \the [src], a flurry of red beams scanning \the [src]'s surface!</span>")
if(do_after(user, 15))
to_chat(user, "<span class='notice'>\The [src] has been excavated to a depth of [excavation_level]cm.</span>")
return
+10 -7
View File
@@ -334,14 +334,15 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(src, "<font color='blue'><B>AntagHUD [antagHUD ? "Enabled" : "Disabled"]</B></font>")
/mob/observer/dead/proc/jumpable_areas()
var/list/areas = return_areas()
var/list/areas = return_sorted_areas()
if(client?.holder)
return areas
for(var/area/A as anything in areas)
for(var/key in areas)
var/area/A = areas[key]
if(A.z in using_map?.secret_levels)
areas -= A
return areas
areas -= key
return areas
/mob/observer/dead/proc/jumpable_mobs()
var/list/mobs = getmobs()
@@ -363,11 +364,13 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
to_chat(usr, "Not when you're not dead!")
return
var/area/A = tgui_input_list(usr, "Select an area:", "Ghost Teleport", jumpable_areas())
if(!A)
var/list/areas = jumpable_areas()
var/input = tgui_input_list(usr, "Select an area:", "Ghost Teleport", areas)
if(!input)
return
var/area/A = areas[input]
if(!A) return
usr.forceMove(pick(get_area_turfs(A)))
usr.on_mob_jump()
+3 -6
View File
@@ -147,12 +147,9 @@ var/list/slot_equipment_priority = list( \
// If canremove or other conditions need to be checked then use unEquip instead.
/mob/proc/drop_from_inventory(var/obj/item/W, var/atom/target)
if(W)
remove_from_mob(W, target)
if(!(W && W.loc))
return 1 // self destroying objects (tk, grabs)
return 1
return 0
if(!W)
return 0
return remove_from_mob(W, target)
//Drops the item in our left hand
/mob/proc/drop_l_hand(var/atom/Target)
+1 -1
View File
@@ -37,7 +37,7 @@
if(!red_switch && blue_switch && !green_switch && prob(50) || src.emagged)
if(istype(loc, /turf/simulated))
var/turf/simulated/T = loc
visible_message("<span class='notice'>\The [src] squirts a puddle of water on the floor!</span>")
visible_message("<b>\The [src]</b> squirts a puddle of water on the floor!")
T.wet_floor()
if(!red_switch && !blue_switch && green_switch && prob(10) || src.emagged)
+5 -5
View File
@@ -228,7 +228,7 @@
return
busy = 1
update_icons()
visible_message("<span class='notice'>\The [src] begins to repair the hole.</span>")
visible_message("<b>\The [src]</b> begins to repair the hole.")
if(do_after(src, 50))
if(A && (locate(/obj/structure/lattice, A) && building == 1 || !locate(/obj/structure/lattice, A) && building == 2)) // Make sure that it still needs repairs
var/obj/item/I
@@ -245,7 +245,7 @@
if(F.broken || F.burnt)
busy = 1
update_icons()
visible_message("<span class='notice'>\The [src] begins to remove the broken floor.</span>")
visible_message("<b>\The [src]</b> begins to remove the broken floor.")
if(do_after(src, 50, F))
if(F.broken || F.burnt)
F.make_plating()
@@ -255,7 +255,7 @@
else if(!F.flooring && amount)
busy = 1
update_icons()
visible_message("<span class='notice'>\The [src] begins to improve the floor.</span>")
visible_message("<b>\The [src]</b> begins to improve the floor.")
if(do_after(src, 50))
if(!F.flooring)
F.set_flooring(get_flooring_data(floor_build_type))
@@ -265,7 +265,7 @@
update_icons()
else if(istype(A, /obj/item/stack/tile/floor) && amount < maxAmount)
var/obj/item/stack/tile/floor/T = A
visible_message("<span class='notice'>\The [src] begins to collect tiles.</span>")
visible_message("<b>\The [src]</b> begins to collect tiles.")
busy = 1
update_icons()
if(do_after(src, 20))
@@ -279,7 +279,7 @@
else if(istype(A, /obj/item/stack/material) && amount + 4 <= maxAmount)
var/obj/item/stack/material/M = A
if(M.get_material_name() == MAT_STEEL)
visible_message("<span class='notice'>\The [src] begins to make tiles.</span>")
visible_message("<b>\The [src]</b> begins to make tiles.")
busy = 1
update_icons()
if(do_after(50))
@@ -18,6 +18,6 @@
return
user.unEquip(W)
wear_hat(W)
user.visible_message("<span class='notice'>\The [user] puts \the [W] on \the [src].</span>")
user.visible_message("<b>\The [user]</b> puts \the [W] on \the [src].")
return
return ..()
+1 -1
View File
@@ -58,7 +58,7 @@
to_chat(user, "<span class='warning'>\The [src] appears to reject this brain. It is incompatable.</span>")
return
user.visible_message("<span class='notice'>\The [user] sticks \a [O] into \the [src].</span>")
user.visible_message("<b>\The [user]</b> sticks \a [O] into \the [src].")
B.preserved = TRUE
brainmob = B.brainmob
@@ -133,6 +133,18 @@
if(accessories_visible.len)
tie_msg += " Attached to it is [english_list(accessories_visible)]."
var/list/pocket_msg
if(l_store)
var/l_store_message = l_store.pocket_description(src, user)
if(l_store_message)
LAZYADD(pocket_msg, l_store_message)
if(r_store)
var/r_store_message = r_store.pocket_description(src, user)
if(r_store_message)
LAZYADD(pocket_msg, r_store_message)
if(LAZYLEN(pocket_msg))
tie_msg += " Near the waist it has [english_list(pocket_msg)]."
if(w_uniform.blood_DNA)
msg += "<span class='warning'>[T.He] [T.is] wearing [bicon(w_uniform)] [w_uniform.gender==PLURAL?"some":"a"] [(w_uniform.blood_color != SYNTH_BLOOD_COLOUR) ? "blood" : "oil"]-stained [w_uniform.name]![tie_msg]</span>"
else
@@ -1395,8 +1395,8 @@
/mob/living/carbon/human/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
if(W in organs)
return
..()
return 0
return ..()
/mob/living/carbon/human/reset_view(atom/A, update_hud = 1)
..()
@@ -421,7 +421,7 @@ emp_act
return
if(!zone)
visible_message("<span class='notice'>\The [O] misses [src] narrowly!</span>")
visible_message("<b>\The [O]</b> misses [src] narrowly!")
return
O.throwing = 0 //it hit, so stop moving
@@ -164,7 +164,7 @@ var/list/wrapped_species_by_ref = list()
return
wrapped_species_by_ref["\ref[src]"] = new_species
visible_message("<span class='notice'>\The [src] shifts and contorts, taking the form of \a [new_species]!</span>")
visible_message("<b>\The [src]</b> shifts and contorts, taking the form of \a [new_species]!")
regenerate_icons()
/mob/living/carbon/human/proc/shapeshifter_select_colour()
@@ -167,7 +167,7 @@ var/datum/species/shapeshifter/promethean/prometheans
if(FEMALE)
t_him = "her"
H.visible_message("<span class='notice'>\The [H] glomps [target] to make [t_him] feel better!</span>", \
H.visible_message("<b>\The [H]</b> glomps [target] to make [t_him] feel better!", \
"<span class='notice'>You glomp [target] to make [t_him] feel better!</span>")
H.apply_stored_shock_to(target)
@@ -207,7 +207,7 @@
// Handled!
if(!silent)
to_chat(H, SPAN_NOTICE("You catch the air in your wings and greatly slow your fall."))
landing.visible_message(SPAN_NOTICE("\The [H] glides down from above, landing safely."))
landing.visible_message("<b>\The [H]</b> glides down from above, landing safely.")
H.Stun(1)
playsound(H, "rustle", 25, 1)
return TRUE
@@ -271,6 +271,11 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
for(var/M in part.markings)
icon_key += "[M][part.markings[M]["color"]]"
// VOREStation Edit Start
if(part.nail_polish)
icon_key += "_[part.nail_polish.icon]_[part.nail_polish.icon_state]_[part.nail_polish.color]"
// VOREStation Edit End
if(part.robotic >= ORGAN_ROBOT)
icon_key += "2[part.model ? "-[part.model]": ""]"
@@ -51,7 +51,7 @@
return
else
visible_message("<span class='notice'>\The [src] starts licking the wounds on [M]'s [affecting.name] clean.</span>", \
visible_message("<b>\The [src]</b> starts licking the wounds on [M]'s [affecting.name] clean.", \
"<span class='notice'>You start licking the wounds on [M]'s [affecting.name] clean.</span>" )
for (var/datum/wound/W in affecting.wounds)
+2 -2
View File
@@ -719,8 +719,8 @@
/mob/living/carbon/drop_from_inventory(var/obj/item/W, var/atom/Target = null)
if(W in internal_organs)
return
..()
return 0
return ..()
/mob/living/touch_map_edge()
@@ -153,7 +153,7 @@ Whatever you did that made the last camera window disappear-- don't do that agai
. = ..()
/area/ai_multicam_room
name = "ai_multicam_room"
name = "AI Multicam Room"
icon_state = "ai_camera_room"
dynamic_lighting = FALSE
ambience = list()
@@ -269,7 +269,7 @@
playsound(src, 'sound/weapons/Egloves.ogg', 50, 1, -1)
R.cell.charge -= 666
else
user.visible_message("<span class='notice'>\the [user] affectionately licks all over \the [target]'s face!</span>", "<span class='notice'>You affectionately lick all over \the [target]'s face!</span>")
user.visible_message("<span class='notice'>\The [user] affectionately licks all over \the [target]'s face!</span>", "<span class='notice'>You affectionately lick all over \the [target]'s face!</span>")
playsound(src, 'sound/effects/attackblob.ogg', 50, 1)
water.use_charge(5)
var/mob/living/carbon/human/H = target
@@ -173,7 +173,7 @@ var/list/mob_hat_cache = list()
return
user.unEquip(W)
wear_hat(W)
user.visible_message("<span class='notice'>\The [user] puts \the [W] on \the [src].</span>")
user.visible_message("<b>\The [user]</b> puts \the [W] on \the [src].")
return
else if(istype(W, /obj/item/borg/upgrade/))
to_chat(user, "<span class='danger'>\The [src] is not compatible with \the [W].</span>")
@@ -165,4 +165,4 @@
if(!recharge_complete && recharging_atom.percent() >= 100)
recharge_complete = TRUE
visible_message(SPAN_NOTICE("\The [src] beeps and flashes a green light above \his recharging port."))
visible_message("<b>\The [src]</b> beeps and flashes a green light above \his recharging port.")
@@ -6,7 +6,7 @@
if(istype(recharging_atom) && !QDELETED(recharging_atom) && recharging_atom.loc == src)
recharging_atom.dropInto(loc)
user.put_in_hands(recharging_atom)
user.visible_message(SPAN_NOTICE("\The [user] pops \the [recharging_atom] out of \the [src]'s recharging port."))
user.visible_message("<b>\The [user]</b> pops \the [recharging_atom] out of \the [src]'s recharging port.")
recharging = null
return TRUE
@@ -24,7 +24,7 @@
W.forceMove(src)
recharging = weakref(W)
recharge_complete = FALSE
user.visible_message(SPAN_NOTICE("\The [user] slots \the [W] into \the [src]'s recharging port."))
user.visible_message("<b>\The [user]</b> slots \the [W] into \the [src]'s recharging port.")
return TRUE
if(istype(W, /obj/item/device/floor_painter))
@@ -82,9 +82,9 @@
if(istype(ejecting) && !QDELETED(ejecting) && ejecting.loc == src)
ejecting.dropInto(loc)
if(user == src)
visible_message(SPAN_NOTICE("\The [src] ejects \the [ejecting] from its cargo compartment."))
visible_message("<b>\The [src]</b> ejects \the [ejecting] from its cargo compartment.")
else
user.visible_message(SPAN_NOTICE("\The [user] pulls \the [ejecting] from \the [src]'s cargo compartment."))
user.visible_message("<b>\The [user]</b> pulls \the [ejecting] from \the [src]'s cargo compartment.")
/mob/living/silicon/robot/platform/attack_ai(mob/user)
if(isrobot(user) && user.Adjacent(src))
@@ -99,7 +99,7 @@
if(!istype(removing) || QDELETED(removing) || removing.loc != src)
LAZYREMOVE(stored_atoms, remove_ref)
else
user.visible_message(SPAN_NOTICE("\The [user] begins unloading \the [removing] from \the [src]'s cargo compartment."))
user.visible_message("<b>\The [user]</b> begins unloading \the [removing] from \the [src]'s cargo compartment.")
if(do_after(user, 3 SECONDS, src) && !QDELETED(removing) && removing.loc == src)
drop_stored_atom(removing, user)
return TRUE
@@ -124,9 +124,9 @@
if(!can_mouse_drop(dropping, user) || !can_store_atom(dropping, user))
return FALSE
if(user == src)
visible_message(SPAN_NOTICE("\The [src] begins loading \the [dropping] into its cargo compartment."))
visible_message("<b>\The [src]</b> begins loading \the [dropping] into its cargo compartment.")
else
user.visible_message(SPAN_NOTICE("\The [user] begins loading \the [dropping] into \the [src]'s cargo compartment."))
user.visible_message("<b>\The [user]</b> begins loading \the [dropping] into \the [src]'s cargo compartment.")
if(do_after(user, 3 SECONDS, src) && can_mouse_drop(dropping, user) && can_store_atom(dropping, user))
store_atom(dropping, user)
return FALSE
@@ -64,7 +64,7 @@
MED.amount -= 1
if(MED.amount <= 0)
qdel(MED)
visible_message("<span class='notice'>\The [user] applies the [MED] on [src].</span>")
visible_message("<b>\The [user]</b> applies the [MED] on [src].")
else
var/datum/gender/T = gender_datums[src.get_visible_gender()]
to_chat(user, "<span class='notice'>\The [src] is dead, medical items won't bring [T.him] back to life.</span>") // the gender lookup is somewhat overkill, but it functions identically to the obsolete gender macros and future-proofs this code
@@ -161,9 +161,9 @@
vore_pounce_cooldown = world.time + 20 SECONDS // don't attempt another pounce for a while
if(prob(successrate)) // pounce success!
M.Weaken(5)
M.visible_message("<span class='danger'>\the [src] pounces on \the [M]!</span>!")
M.visible_message("<span class='danger'>\The [src] pounces on \the [M]!</span>!")
else // pounce misses!
M.visible_message("<span class='danger'>\the [src] attempts to pounce \the [M] but misses!</span>!")
M.visible_message("<span class='danger'>\The [src] attempts to pounce \the [M] but misses!</span>!")
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
if(will_eat(M) && (!M.canmove || vore_standing_too)) //if they're edible then eat them too
@@ -263,7 +263,7 @@
if(istype(tmob) && will_eat(tmob) && !istype(tmob, type) && prob(vore_bump_chance) && !ckey) //check if they decide to eat. Includes sanity check to prevent cannibalism.
if(tmob.canmove && prob(vore_pounce_chance)) //if they'd pounce for other noms, pounce for these too, otherwise still try and eat them if they hold still
tmob.Weaken(5)
tmob.visible_message("<span class='danger'>\the [src] [vore_bump_emote] \the [tmob]!</span>!")
tmob.visible_message("<span class='danger'>\The [src] [vore_bump_emote] \the [tmob]!</span>!")
set_AI_busy(TRUE)
spawn()
animal_nom(tmob)
@@ -38,7 +38,7 @@
var/obj/item/weapon/storage/S = O
var/obj/item/weapon/holder/H = new holder_type(get_turf(src),src) //this works weird, but it creates an empty holder, to see if that holder can fit
if(S.can_be_inserted(H) && (src.size_multiplier <= 0.75))
visible_message("<span class='notice'>\the [src] squeezes into \the [S].</span>")
visible_message("<b>\The [src]</b> squeezes into \the [S].")
H.forceMove(S)
return 1
else
@@ -185,7 +185,7 @@ var/list/_cat_default_emotes = list(
/mob/living/simple_mob/animal/passive/cat/attackby(obj/item/weapon/W as obj, mob/user as mob)
if(istype(W, /obj/item/weapon/pen) || istype(W, /obj/item/device/flashlight/pen))
if(named)
to_chat(user, "<span class='notice'>\the [name] already has a name!</span>")
to_chat(user, "<span class='notice'>\The [name] already has a name!</span>")
else
var/tmp_name = sanitizeSafe(input(user, "Give \the [name] a name", "Name"), MAX_NAME_LEN)
if(length(tmp_name) > 50)
@@ -116,5 +116,5 @@
if(prob(10))
for(var/mob/living/L in hearers(holder))
if(!istype(L, holder)) // Don't follow other hooligan crabs.
holder.visible_message("<span class='notice'>\The [holder] starts to follow \the [L].</span>")
holder.visible_message("<b>\The [holder]</b> starts to follow \the [L].")
set_follow(L, rand(20 SECONDS, 40 SECONDS))
@@ -181,7 +181,7 @@
if(holder.get_active_hand() && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat)
var/obj/item/I = holder.get_active_hand()
S.take_hat(S)
holder.visible_message("<span class='notice'>\The [holder] wears \the [I]</span>")
holder.visible_message("<b>\The [holder]</b> wears \the [I]")
/mob/living/simple_mob/animal/sif/sakimm/intelligent
desc = "What appears to be an oversized rodent with hands. This one has a curious look in its eyes."
@@ -327,7 +327,7 @@
if(istype(holder) && istype(holder.get_active_hand(), /obj/item/clothing/head) && !S.hat)
var/obj/item/I = holder.get_active_hand()
S.take_hat(S)
holder.visible_message("<span class='notice'>\The [holder] wears \the [I]</span>")
holder.visible_message("<b>\The [holder]</b> wears \the [I]")
carrying_item = TRUE
if(istype(holder) && S.hat) // Do we have a hat? Hats are loot.
@@ -41,7 +41,7 @@
var/mob/living/L = A
if(prob(scare_chance))
L.Stun(1)
L.visible_message("<span class='danger'>\the [src] scares \the [L]!</span>")
L.visible_message("<span class='danger'>\The [src] scares \the [L]!</span>")
// Spookiest of bats
/mob/living/simple_mob/animal/space/bats/cult
@@ -116,7 +116,7 @@
my_storage.rangedload(T, src)
if(my_storage.contents.len >= my_storage.max_storage_space)
visible_message("<span class='notice'>\The [src] emits a shrill beep, indicating its storage is full.</span>")
visible_message("<b>\The [src]</b> emits a shrill beep, indicating its storage is full.")
var/obj/structure/ore_box/OB = locate() in view(2, src)
@@ -126,7 +126,7 @@
var/repair_upper_bound = A.melee_damage_upper * -1
adjustBruteLoss(rand(repair_lower_bound, repair_upper_bound))
adjustFireLoss(rand(repair_lower_bound, repair_upper_bound))
user.visible_message("<span class='notice'>\The [user] mends some of \the [src]'s wounds.</span>")
user.visible_message("<b>\The [user]</b> mends some of \the [src]'s wounds.")
else
to_chat(user, "<span class='notice'>\The [src] is undamaged.</span>")
return
@@ -48,7 +48,7 @@
var/mob/living/L = A
if(prob(12))
L.Weaken(3)
L.visible_message("<span class='danger'>\the [src] knocks down \the [L]!</span>")
L.visible_message("<span class='danger'>\The [src] knocks down \the [L]!</span>")
// Strong Variant
/mob/living/simple_mob/faithless/strong
@@ -160,7 +160,7 @@
hunger += 5
else
food.Weaken(5)
food.visible_message("<span class='danger'>\the [src] pounces on \the [food]!</span>!")
food.visible_message("<span class='danger'>\The [src] pounces on \the [food]!</span>!")
target_mob = food
EatTarget()
hunger = 0
@@ -69,7 +69,7 @@ List of things solar grubs should be able to do:
if(attached)
set_AI_busy(TRUE)
if(prob(2))
src.visible_message("<span class='notice'>\The [src] begins to sink power from the net.</span>")
src.visible_message("<b>\The [src]</b> begins to sink power from the net.")
if(prob(5))
var/datum/effect/effect/system/spark_spread/sparks = new /datum/effect/effect/system/spark_spread()
sparks.set_up(5, 0, get_turf(src))
+1 -3
View File
@@ -132,9 +132,7 @@
new_player_panel_proc()
if(href_list["observe"])
var/alert_time = ticker?.current_state <= GAME_STATE_SETTING_UP ? 1 : round(config.respawn_time/10/60)
if(tgui_alert(src,"Are you sure you wish to observe? You will have to wait up to [alert_time] minute\s before being able to spawn into the game!","Player Setup",list("Yes","No")) == "Yes")
if(tgui_alert(src,"Are you sure you wish to observe? If you do, make sure to not use any knowledge gained from observing if you decide to join later.","Player Setup",list("Yes","No")) == "Yes")
if(!client) return 1
//Make a new mannequin quickly, and allow the observer to take the appearance
@@ -29,7 +29,7 @@
all_underwear[WRC.name] = WRI.name
backbag = rand(1,5)
backbag = rand(1,6)
pdachoice = rand(1,5)
age = rand(current_species.min_age, current_species.max_age)
b_type = RANDOM_BLOOD_TYPE
@@ -23,7 +23,7 @@
var/icon_state // the icon_state of the accessory
var/preview_state // a custom preview state for whatever reason
var/name // the preview name of the accessory
var/name = "ERROR - FIXME" // the preview name of the accessory
// Determines if the accessory will be skipped or included in random hair generations
var/gender = NEUTER
@@ -1819,6 +1819,7 @@ shaved
//Teshari things
/datum/sprite_accessory/hair/teshari
name = "Teshari Default"
icon_add = 'icons/mob/human_face_vr_add.dmi'
icon_state = "teshari_default"
species_allowed = list(SPECIES_TESHARI)
@@ -1855,8 +1856,8 @@ shaved
icon_state = "teshari_mohawk"
/datum/sprite_accessory/hair/teshari/pointy
name = "Teshari Pointy"
icon_state = "teshari_pointy"
name = "Teshari Pointy"
icon_state = "teshari_pointy"
/datum/sprite_accessory/hair/teshari/upright
name = "Teshari Upright"
@@ -1875,7 +1876,6 @@ shaved
icon_state = "teshari_mushroom"
//Tesh things ported from Ark Station
/datum/sprite_accessory/hair/teshari/twies
name = "Teshari Twies"
icon_state = "teshari_twies"
@@ -5,732 +5,849 @@
color_blend_mode = ICON_ADD
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
/datum/sprite_accessory/marking/vr
icon = 'icons/mob/human_races/markings_vr.dmi'
/datum/sprite_accessory/marking/vr/vulp_belly
/datum/sprite_accessory/marking/vr_vulp_belly
name = "belly fur (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_fullbelly
/datum/sprite_accessory/marking/vr_vulp_fullbelly
name = "full belly fur (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_fullbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_crest
/datum/sprite_accessory/marking/vr_vulp_crest
name = "belly crest (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_crest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_nose
/datum/sprite_accessory/marking/vr_vulp_nose
name = "nose (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_short_nose
/datum/sprite_accessory/marking/vr_vulp_short_nose
name = "nose, short (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_short_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/snoutstripe
/datum/sprite_accessory/marking/vr_snoutstripe
name = "snout stripe (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "snoutstripe"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_face
/datum/sprite_accessory/marking/vr_vulp_face
name = "face (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_facealt
/datum/sprite_accessory/marking/vr_vulp_facealt
name = "face, alt. (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_facealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_earsface
/datum/sprite_accessory/marking/vr_vulp_earsface
name = "ears and face (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_earsface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_all
/datum/sprite_accessory/marking/vr_vulp_all
name = "all head highlights (Vulp)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vulp_all"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergal_full
/datum/sprite_accessory/marking/vr_sergal_full
name = "Sergal Markings"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "sergal_full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/sergal_full_female
/datum/sprite_accessory/marking/vr_sergal_full_female
name = "Sergal Markings (Female)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "sergal_full_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/monoeye
/datum/sprite_accessory/marking/vr_monoeye
name = "Monoeye"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "monoeye"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spidereyes
/datum/sprite_accessory/marking/vr_spidereyes
name = "Spider Eyes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "spidereyes"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergaleyes
/datum/sprite_accessory/marking/vr_sergaleyes
name = "Sergal Eyes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "eyes_sergal"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/closedeyes
/datum/sprite_accessory/marking/vr_closedeyes
name = "Closed Eyes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "eyes_closed"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/brows
/datum/sprite_accessory/marking/vr_brows
name = "Eyebrows"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "brows"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/nevrean_female
/datum/sprite_accessory/marking/vr_nevrean_female
name = "Female Nevrean beak"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "nevrean_f"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = FEMALE
/datum/sprite_accessory/marking/vr/nevrean_male
/datum/sprite_accessory/marking/vr_nevrean_male
name = "Male Nevrean beak"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "nevrean_m"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = MALE
/datum/sprite_accessory/marking/vr/spots
/datum/sprite_accessory/marking/vr_spots
name = "Spots"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "spots"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/shaggy_mane
/datum/sprite_accessory/marking/vr_shaggy_mane
name = "Shaggy mane/feathers"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "shaggy"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/jagged_teeth
/datum/sprite_accessory/marking/vr_jagged_teeth
name = "Jagged teeth"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "jagged"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/blank_face
/datum/sprite_accessory/marking/vr_blank_face
name = "Blank round face (use with monster mouth)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "blankface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/monster_mouth
/datum/sprite_accessory/marking/vr_monster_mouth
name = "Monster mouth"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "monster"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/saber_teeth
/datum/sprite_accessory/marking/vr_saber_teeth
name = "Saber teeth"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "saber"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/fangs
/datum/sprite_accessory/marking/vr_fangs
name = "Fangs"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "fangs"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tusks
/datum/sprite_accessory/marking/vr_tusks
name = "Tusks"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tusks"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_face
/datum/sprite_accessory/marking/vr_otie_face
name = "Otie face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otieface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_nose
/datum/sprite_accessory/marking/vr_otie_nose
name = "Otie nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otie_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otienose_lite
/datum/sprite_accessory/marking/vr_otienose_lite
name = "Short otie nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otienose_lite"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/backstripes
/datum/sprite_accessory/marking/vr_backstripes
name = "Back stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otiestripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/belly_butt
/datum/sprite_accessory/marking/vr_belly_butt
name = "Belly and butt"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "bellyandbutt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/fingers_toes
/datum/sprite_accessory/marking/vr_fingers_toes
name = "Fingers and toes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "fingerstoes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/otie_socks
/datum/sprite_accessory/marking/vr_otie_socks
name = "Fingerless socks"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otiesocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/corvid_beak
/datum/sprite_accessory/marking/vr_corvid_beak
name = "Corvid beak"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "corvidbeak"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/corvid_belly
/datum/sprite_accessory/marking/vr_corvid_belly
name = "Corvid belly"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "corvidbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_body
/datum/sprite_accessory/marking/vr_cow_body
name = "Cow markings"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "cowbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_nose
/datum/sprite_accessory/marking/vr_cow_nose
name = "Cow nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "cownose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zmask
/datum/sprite_accessory/marking/vr_zmask
name = "Eye mask"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zmask"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zbody
/datum/sprite_accessory/marking/vr_zbody
name = "Thick jagged stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/znose
/datum/sprite_accessory/marking/vr_znose
name = "Jagged snout"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "znose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_nose
/datum/sprite_accessory/marking/vr_otter_nose
name = "Otter nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otternose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_face
/datum/sprite_accessory/marking/vr_otter_face
name = "Otter face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "otterface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/deer_face
/datum/sprite_accessory/marking/vr_deer_face
name = "Deer face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "deerface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sharkface
/datum/sprite_accessory/marking/vr_sharkface
name = "Akula snout"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "sharkface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_face
/datum/sprite_accessory/marking/vr_sheppy_face
name = "Shepherd snout"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "shepface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_back
/datum/sprite_accessory/marking/vr_sheppy_back
name = "Shepherd back"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "shepback"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_male
/datum/sprite_accessory/marking/vr_zorren_belly_male
name = "Zorren Male Torso"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_female
/datum/sprite_accessory/marking/vr_zorren_belly_female
name = "Zorren Female Torso"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_belly_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_back_patch
/datum/sprite_accessory/marking/vr_zorren_back_patch
name = "Zorren Back Patch"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_backpatch"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/zorren_face_male
/datum/sprite_accessory/marking/vr_zorren_face_male
name = "Zorren Male Face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_face_female
/datum/sprite_accessory/marking/vr_zorren_face_female
name = "Zorren Female Face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_face_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_male
/datum/sprite_accessory/marking/vr_zorren_muzzle_male
name = "Zorren Male Muzzle"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_muzzle"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_female
/datum/sprite_accessory/marking/vr_zorren_muzzle_female
name = "Zorren Female Muzzle"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_muzzle_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_socks
/datum/sprite_accessory/marking/vr_zorren_socks
name = "Zorren Socks"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_socks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/zorren_longsocks
/datum/sprite_accessory/marking/vr_zorren_longsocks
name = "Zorren Longsocks"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "zorren_longsocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/tesh_feathers
/datum/sprite_accessory/marking/vr_tesh_feathers
name = "Teshari Feathers"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tesh-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/harpy_feathers
/datum/sprite_accessory/marking/vr_harpy_feathers
name = "Rapala leg Feather"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "harpy-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/harpy_legs
/datum/sprite_accessory/marking/vr_harpy_legs
name = "Rapala leg coloring"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "harpy-leg"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/chooves
/datum/sprite_accessory/marking/vr_chooves
name = "Cloven hooves"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "chooves"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
/datum/sprite_accessory/marking/vr/body_tone
/datum/sprite_accessory/marking/vr_body_tone
name = "Body toning (for emergency contrast loss)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "btone"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/gloss
/datum/sprite_accessory/marking/vr_gloss
name = "Full body gloss"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "gloss"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/eboop_panels
/datum/sprite_accessory/marking/vr_eboop_panels
name = "Eggnerd FBP panels"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "eboop"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/osocks_rarm
/datum/sprite_accessory/marking/vr_osocks_rarm
name = "Modular Longsock (right arm)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
/datum/sprite_accessory/marking/vr/osocks_larm
/datum/sprite_accessory/marking/vr_osocks_larm
name = "Modular Longsock (left arm)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
/datum/sprite_accessory/marking/vr/osocks_rleg
/datum/sprite_accessory/marking/vr_osocks_rleg
name = "Modular Longsock (right leg)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT,BP_R_LEG)
/datum/sprite_accessory/marking/vr/osocks_lleg
/datum/sprite_accessory/marking/vr_osocks_lleg
name = "Modular Longsock (left leg)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_L_LEG)
/datum/sprite_accessory/marking/vr/animeeyesinner
/datum/sprite_accessory/marking/vr_animeeyesinner
name = "Anime Eyes Inner"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "animeeyesinner"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/animeeyesouter
/datum/sprite_accessory/marking/vr_animeeyesouter
name = "Anime Eyes Outer"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "animeeyesouter"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/panda_eye_marks
/datum/sprite_accessory/marking/vr_panda_eye_marks
name = "Panda Eye Markings"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "eyes_panda"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/marking/vr/catwomantorso
/datum/sprite_accessory/marking/vr_catwomantorso
name = "Catwoman chest stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "catwomanchest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/catwomangroin
/datum/sprite_accessory/marking/vr_catwomangroin
name = "Catwoman groin stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "catwomangroin"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN)
/datum/sprite_accessory/marking/vr/catwoman_rleg
/datum/sprite_accessory/marking/vr_catwoman_rleg
name = "Catwoman right leg stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "catwomanright"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/vr/catwoman_lleg
/datum/sprite_accessory/marking/vr_catwoman_lleg
name = "Catwoman left leg stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "catwomanleft"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/vr/teshi_small_feathers
/datum/sprite_accessory/marking/vr_teshi_small_feathers
name = "Teshari small wingfeathers"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "teshi_sf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights
/datum/sprite_accessory/marking/vr_spirit_lights
name = "Ward - Spirit FBP Lights"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_lights_body
/datum/sprite_accessory/marking/vr_spirit_lights_body
name = "Ward - Spirit FBP Lights (body)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights_head
/datum/sprite_accessory/marking/vr_spirit_lights_head
name = "Ward - Spirit FBP Lights (head)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels
/datum/sprite_accessory/marking/vr_spirit_panels
name = "Ward - Spirit FBP Panels"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels_body
/datum/sprite_accessory/marking/vr_spirit_panels_body
name = "Ward - Spirit FBP Panels (body)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_panels_head
/datum/sprite_accessory/marking/vr_spirit_panels_head
name = "Ward - Spirit FBP Panels (head)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_head
/datum/sprite_accessory/marking/vr_tentacle_head
name = "Squid Head"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tentaclehead"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_mouth
/datum/sprite_accessory/marking/vr_tentacle_mouth
name = "Tentacle Mouth"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tentaclemouth"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/rosette
/datum/sprite_accessory/marking/vr_rosette
name = "Rosettes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "rosette"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/werewolf_nose
/datum/sprite_accessory/marking/vr_werewolf_nose
name = "Werewolf nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_face
/datum/sprite_accessory/marking/vr_werewolf_face
name = "Werewolf face"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_belly
/datum/sprite_accessory/marking/vr_werewolf_belly
name = "Werewolf belly"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_socks
/datum/sprite_accessory/marking/vr_werewolf_socks
name = "Werewolf socks"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/shadekin_snoot
/datum/sprite_accessory/marking/vr_shadekin_snoot
name = "Shadekin Snoot"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "shadekin-snoot"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/marking/vr/taj_nose_alt
/datum/sprite_accessory/marking/vr_taj_nose_alt
name = "Nose Color, alt. (Taj)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "taj_nosealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/talons
/datum/sprite_accessory/marking/vr_talons
name = "Talons"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "talons"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/claws
/datum/sprite_accessory/marking/vr_claws
name = "Claws"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "claws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/equine_snout //Why the long face? Works best with sergal bodytype.
/datum/sprite_accessory/marking/vr_equine_snout //Why the long face? Works best with sergal bodytype.
name = "Equine Snout"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "donkey"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/equine_nose
/datum/sprite_accessory/marking/vr_equine_nose
name = "Equine Nose"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "dnose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/bee_stripes
/datum/sprite_accessory/marking/vr_bee_stripes
name = "bee stripes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "beestripes"
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vas_toes
/datum/sprite_accessory/marking/vr_vas_toes
name = "Bug Paws (Vasilissan)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "vas_toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
//CitRP stuff
/datum/sprite_accessory/marking/vr/vox_alt
/datum/sprite_accessory/marking/vr_vox_alt
name = "Vox Alternate"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "bay_vox"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/marking/vr/vox_alt_eyes
/datum/sprite_accessory/marking/vr_vox_alt_eyes
name = "Alternate Vox Eyes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "bay_vox_eyes"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/marking/vr/c_beast_body
/datum/sprite_accessory/marking/vr_c_beast_body
name = "Cyber Body"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_body"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/c_beast_plating
/datum/sprite_accessory/marking/vr_c_beast_plating
name = "Cyber Plating (Use w/ Cyber Body)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_plating"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM)
/datum/sprite_accessory/marking/vr/c_beast_band
/datum/sprite_accessory/marking/vr_c_beast_band
name = "Cyber Band (Use w/ Cybertech head)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_band"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_a
/datum/sprite_accessory/marking/vr_c_beast_cheek_a
name = "Cyber Beast Cheeks A (Use A, B and C)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_a"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_b
/datum/sprite_accessory/marking/vr_c_beast_cheek_b
name = "Cyber Beast Cheeks B (Use A, B and C)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_b"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_c
/datum/sprite_accessory/marking/vr_c_beast_cheek_c
name = "Cyber Beast Cheeks C (Use A, B and C)"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "c_beast_c"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/teshari_large_eyes
/datum/sprite_accessory/marking/vr_teshari_large_eyes
name = "Teshari large eyes"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "teshlarge_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_coat
/datum/sprite_accessory/marking/vr_teshari_coat
name = "Teshari coat"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tesh_coat"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_pattern_male
/datum/sprite_accessory/marking/vr_teshari_pattern_male
name = "Teshari male pattern"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tesh-pattern-male"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_pattern_female
/datum/sprite_accessory/marking/vr_teshari_pattern_female
name = "Teshari female pattern"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "tesh-pattern-fem"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/voxscales
/datum/sprite_accessory/marking/vr_voxscales
name = "Vox Scales"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_HEAD)
/datum/sprite_accessory/marking/vr/voxclaws
/datum/sprite_accessory/marking/vr_voxclaws
name = "Vox Claws"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "Voxclaws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/voxbeak
/datum/sprite_accessory/marking/vr_voxbeak
name = "Vox Beak"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathihood
/datum/sprite_accessory/marking/vr_unathihood
name = "Cobra Hood"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathihood"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathidoublehorns
/datum/sprite_accessory/marking/vr_unathidoublehorns
name = "Double Unathi Horns"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathidoublehorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathihorns
/datum/sprite_accessory/marking/vr_unathihorns
name = "Unathi Horns"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathihorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathiramhorns
/datum/sprite_accessory/marking/vr_unathiramhorns
name = "Unathi Ram Horns"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathiramhorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathishortspines
/datum/sprite_accessory/marking/vr_unathishortspines
name = "Unathi Short Spines"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathishortspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathilongspines
/datum/sprite_accessory/marking/vr_unathilongspines
name = "Unathi Long Spines"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathilongspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathishortfrills
/datum/sprite_accessory/marking/vr_unathishortfrills
name = "Unathi Short Frills"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathishortfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathilongfrills
/datum/sprite_accessory/marking/vr_unathilongfrills
name = "Unathi Long Frills"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "unathilongfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/thunderthighs
/datum/sprite_accessory/marking/vr_thunderthighs
name = "Boosted Thighs"
icon = 'icons/mob/human_races/markings_vr.dmi'
icon_state = "thunderthighs"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG)
@@ -57,7 +57,7 @@
suit_sprites = 'icons/mob/taursuits_wolf_vr.dmi'
icon_sprite_tag = "wolf"
/datum/sprite_accessory/tail/taur/fatwolf
/datum/sprite_accessory/tail/taur/wolf/fatwolf
name = "Fat Wolf (Taur)"
icon_state = "fatwolf_s"
icon_sprite_tag = "wolf" //This could be modified later.
@@ -83,7 +83,7 @@
extra_overlay2 = "synthwolf_glow"
//icon_sprite_tag = "synthwolf"
/datum/sprite_accessory/tail/taur/ch/wolf/fatsynthwolf
/datum/sprite_accessory/tail/taur/wolf/fatsynthwolf
name = "Fat SynthWolf dual-color (Taur)"
icon_state = "fatsynthwolf_s"
extra_overlay = "fatsynthwolf_markings"
@@ -219,11 +219,11 @@
extra_overlay = "lizard_markings"
//icon_sprite_tag = "lizard2c"
/datum/sprite_accessory/tail/taur/ch/lizard/fat
/datum/sprite_accessory/tail/taur/lizard/fatlizard
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
/datum/sprite_accessory/tail/taur/ch/lizard/fat_2c
/datum/sprite_accessory/tail/taur/lizard/fatlizard_2c
name = "Fat Lizard (Taur, dual-color)"
icon_state = "fatlizard_s"
extra_overlay= "fatlizard_markings"
@@ -235,7 +235,7 @@
extra_overlay2 = "synthlizard_glow"
//icon_sprite_tag = "synthlizard"
/datum/sprite_accessory/tail/taur/ch/lizard/fatsynthlizard
/datum/sprite_accessory/tail/taur/lizard/fatsynthlizard
name = "Fat SynthLizard dual-color (Taur)"
icon_state = "fatsynthlizard_s"
extra_overlay = "fatsynthlizard_markings"
@@ -326,7 +326,7 @@
extra_overlay2 = "synthfeline_glow"
//icon_sprite_tag = "synthfeline"
/datum/sprite_accessory/tail/taur/ch/feline/fatsynthfeline
/datum/sprite_accessory/tail/taur/feline/fatsynthfeline
name = "Fat SynthFeline dual-color (Taur)"
icon_state = "fatsynthfeline_s"
extra_overlay = "fatsynthfeline_markings"
@@ -243,64 +243,6 @@
icon_state = "hair_fingerwave"
species_allowed = list(SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_TAJ, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_PROTEAN)
//Teshari things
/datum/sprite_accessory/hair/teshari
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_altdefault
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_tight
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_excited
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_spike
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_long
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_burst
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_shortburst
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_mohawk
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_pointy
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_upright
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_mane
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_droopy
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_mushroom
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_twies
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_backstrafe
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_longway
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_tree
icon_add = 'icons/mob/human_face_vr_add.dmi'
/datum/sprite_accessory/hair/teshari_fluffymohawk
icon = 'icons/mob/human_face_vr.dmi'
icon_add = 'icons/mob/human_face_vr_add.dmi'
//Skrell 'hairstyles' - these were requested for a chimera and screw it, if one wants to eat seafood, go nuts
/datum/sprite_accessory/hair/skr_tentacle_veryshort
+19 -2
View File
@@ -40,7 +40,7 @@
set hidden = 1
set_typing_indicator(TRUE)
var/message = input(usr, "","say (text)") as text
var/message = tgui_input_text(usr, "Type your message:", "Say")
set_typing_indicator(FALSE)
if(message)
@@ -51,8 +51,25 @@
set hidden = 1
set_typing_indicator(TRUE)
var/message = input(usr, "","me (text)") as message //VOREStation Edit
var/message = tgui_input_message(usr, "Type your message:", "Emote")
set_typing_indicator(FALSE)
if(message)
me_verb(message)
// No typing indicators here, but this is the file where the wrappers are, so...
/mob/verb/whisper_wrapper()
set name = ".Whisper"
set hidden = 1
var/message = tgui_input_text(usr, "Type your message:", "Whisper")
if(message)
whisper(message)
/mob/verb/subtle_wrapper()
set name = ".Subtle"
set hidden = 1
var/message = tgui_input_message(usr, "Type your message:", "Subtle")
if(message)
me_verb_subtle(message)
@@ -166,7 +166,7 @@
to_chat(usr, "<span class='notice'>Hardware error: Printer is out of paper.</span>")
return
else
computer.visible_message("<span class='notice'>\The [computer] prints out paper.</span>")
computer.visible_message("<b>\The [computer]</b> prints out paper.")
if(ticket_count >= 1)
new /obj/item/stack/arcadeticket((get_turf(computer)), 1)
to_chat(usr, "<span class='notice'>[src] dispenses a ticket!</span>")
+1 -1
View File
@@ -94,7 +94,7 @@
/obj/structure/ladder/proc/climbLadder(var/mob/M, var/obj/target_ladder)
var/direction = (target_ladder == target_up ? "up" : "down")
M.visible_message("<span class='notice'>\The [M] begins climbing [direction] \the [src]!</span>",
M.visible_message("<b>\The [M]</b> begins climbing [direction] \the [src]!",
"You begin climbing [direction] \the [src]!",
"You hear the grunting and clanging of a metal ladder being used.")
+2 -2
View File
@@ -461,9 +461,9 @@
if(damage_desc)
if(user == src.owner)
var/datum/gender/T = gender_datums[user.get_visible_gender()]
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on [T.his] [src.name] with [tool].</span>")
user.visible_message("<b>\The [user]</b> patches [damage_desc] on [T.his] [src.name] with [tool].")
else
user.visible_message("<span class='notice'>\The [user] patches [damage_desc] on [owner]'s [src.name] with [tool].</span>")
user.visible_message("<b>\The [user]</b> patches [damage_desc] on [owner]'s [src.name] with [tool].")
return 1
+9
View File
@@ -131,6 +131,15 @@ var/global/list/limb_icon_cache = list()
I.Blend(rgb(h_col[1],h_col[2],h_col[3]), ICON_MULTIPLY) //VOREStation edit
limb_icon_cache[cache_key] = I
mob_icon.Blend(limb_icon_cache[cache_key], ICON_OVERLAY)
// VOREStation edit start
if(nail_polish)
var/icon/I = new(nail_polish.icon, nail_polish.icon_state)
I.Blend(nail_polish.color, ICON_MULTIPLY)
add_overlay(I)
mob_icon.Blend(I, ICON_OVERLAY)
icon_cache_key += "_[nail_polish.icon]_[nail_polish.icon_state]_[nail_polish.color]"
// VOREStation edit end
if(model)
icon_cache_key += "_model_[model]"
+2 -2
View File
@@ -71,7 +71,7 @@
/obj/item/organ/internal/heart/grey/colormatch/slime/process()
..()
if(!(QDELETED(src)) && src.loc != owner)
visible_message("<span class='notice'>\The [src] splatters!</span>")
visible_message("<b>\The [src]</b> splatters!")
var/turf/T = get_turf(src)
var/obj/effect/decal/cleanable/blood/B = new (T)
@@ -120,7 +120,7 @@
..()
if(!(QDELETED(src)) && src.loc != owner)
visible_message("<span class='notice'>\The [src] splatters!</span>")
visible_message("<b>\The [src]</b> splatters!")
var/turf/T = get_turf(src)
var/obj/effect/decal/cleanable/blood/B = new (T)
+1 -1
View File
@@ -24,7 +24,7 @@
/obj/machinery/disperser/attackby(obj/item/I, mob/user)
if(I && I.is_wrench())
if(panel_open)
user.visible_message("<span class='notice'>\The [user] rotates \the [src] with \the [I].</span>",
user.visible_message("<b>\The [user]</b> rotates \the [src] with \the [I].",
"<span class='notice'>You rotate \the [src] with \the [I].</span>")
set_dir(turn(dir, 90))
playsound(src, 'sound/items/jaws_pry.ogg', 50, 1)
+4 -2
View File
@@ -87,8 +87,10 @@
to_chat(usr, "<span class='info'>There isn't enough space left on \the [src] to write anything.</span>")
return
var/t = sanitize(input(usr, "Enter what you want to write:", "Write", null, null) as message, free_space, extra = 0)
var/raw_t = tgui_input_message(usr, "Enter what you want to write:", "Write")
if(!raw_t)
return
var/t = sanitize(raw_t, free_space, extra = 0)
if(!t)
return
+1 -1
View File
@@ -37,7 +37,7 @@
var/text = sanitizeSafe(input(usr, "What would you like to write?") as text, writing_space)
if(!text || thing.loc != user || (!Adjacent(user) && loc != user) || user.incapacitated())
return
user.visible_message(SPAN_NOTICE("\The [user] jots a note down on \the [src]."))
user.visible_message("<b>\The [user]</b> jots a note down on \the [src].")
written_by = user.ckey
if(written_text)
written_text = "[written_text] [text]"
@@ -20,6 +20,14 @@
if(!isnull(entries_decay_at) && !isnull(entries_expire_at))
entries_decay_at = round(entries_expire_at * entries_decay_at)
/datum/persistent/proc/Initialize()
if(fexists(filename))
var/list/tokens = json_decode(file2text(filename))
for(var/list/token in tokens)
if(!CheckTokenSanity(token))
tokens -= token
ProcessAndApplyTokens(tokens)
/datum/persistent/proc/GetValidTurf(var/turf/T, var/list/token)
if(T && CheckTurfContents(T, token))
return T
@@ -93,14 +101,6 @@
"age" = GetEntryAge(entry)
)
/datum/persistent/proc/Initialize()
if(fexists(filename))
var/list/tokens = json_decode(file2text(filename))
for(var/list/token in tokens)
if(!CheckTokenSanity(token))
tokens -= token
ProcessAndApplyTokens(tokens)
/datum/persistent/proc/Shutdown()
if(fexists(filename))
fdel(filename)
+1 -1
View File
@@ -47,7 +47,7 @@
var/obj/item/weapon/weldingtool/welder = thing
if(welder.isOn() && welder.remove_fuel(0,user) && do_after(user, 5, src) && !QDELETED(src))
playsound(src.loc, welder.usesound, 50, 1)
user.visible_message("<span class='notice'>\The [user] clears away some graffiti.</span>")
user.visible_message("<b>\The [user]</b> clears away some graffiti.")
qdel(src)
else if(thing.sharp)
+36
View File
@@ -0,0 +1,36 @@
/datum/persistent/paintings
name = "paintings"
entries_expire_at = 1000 // Basically forever
/datum/persistent/paintings/SetFilename()
filename = "data/persistent/paintings.json"
/datum/persistent/paintings/Initialize()
. = ..()
if(fexists(filename))
SSpersistence.paintings = json_decode(file2text(filename))
var/list/tokens = SSpersistence.paintings
for(var/list/token in tokens)
token["age"]++ // Increment age!
if(!CheckTokenSanity(token))
tokens -= token
for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames)
P.load_persistent()
return
/datum/persistent/paintings/CheckTokenSanity(var/list/token)
var/png_filename = "data/paintings/[token["persistence_id"]]/[token["md5"]].png"
if(!fexists(png_filename))
return FALSE
if(token["age"] > entries_expire_at)
fdel(png_filename)
return FALSE
/datum/persistent/paintings/Shutdown()
for(var/obj/structure/sign/painting/P in SSpersistence.painting_frames)
P.save_persistent()
if(fexists(filename))
fdel(filename)
to_file(file(filename), json_encode(SSpersistence.paintings))
+11 -27
View File
@@ -5,8 +5,8 @@
/obj/item/weapon/cell
name = "power cell"
desc = "A rechargable electrochemical power cell."
icon = 'icons/obj/power.dmi'
icon_state = "cell"
icon = 'icons/obj/power_cells.dmi'
icon_state = "b_st"
item_state = "cell"
origin_tech = list(TECH_POWER = 1)
force = 5.0
@@ -29,8 +29,7 @@
pickup_sound = 'sound/items/pickup/component.ogg'
// Overlay stuff.
var/overlay_half_state = "cell-o1" // Overlay used when not fully charged but not empty.
var/overlay_full_state = "cell-o2" // Overlay used when fully charged.
var/standard_overlays = TRUE
var/last_overlay_state = null // Used to optimize update_icon() calls.
/obj/item/weapon/cell/New()
@@ -73,29 +72,14 @@
#define OVERLAY_EMPTY 0
/obj/item/weapon/cell/update_icon()
var/new_overlay = null // The overlay that is needed.
// If it's different than the current overlay, then it'll get changed.
// Otherwise nothing happens, to save on CPU.
if(charge < 0.01) // Empty.
new_overlay = OVERLAY_EMPTY
if(last_overlay_state != new_overlay)
cut_overlays()
else if(charge/maxcharge >= 0.995) // Full
new_overlay = OVERLAY_FULL
if(last_overlay_state != new_overlay)
cut_overlay(overlay_half_state)
add_overlay(overlay_full_state)
else // Inbetween.
new_overlay = OVERLAY_PARTIAL
if(last_overlay_state != new_overlay)
cut_overlay(overlay_full_state)
add_overlay(overlay_half_state)
last_overlay_state = new_overlay
if(!standard_overlays)
return
var/ratio = clamp(round(charge / maxcharge, 0.25) * 100, 0, 100)
var/new_state = "[icon_state]_[ratio]"
if(new_state != last_overlay_state)
cut_overlay(last_overlay_state)
add_overlay(new_state)
last_overlay_state = new_state
#undef OVERLAY_FULL
#undef OVERLAY_PARTIAL
+3 -3
View File
@@ -2,7 +2,7 @@
/obj/item/weapon/cell/device
name = "device power cell"
desc = "A small power cell designed to power handheld devices."
icon_state = "dcell"
icon_state = "m_st"
item_state = "egg6"
w_class = ITEMSIZE_SMALL
force = 0
@@ -16,7 +16,7 @@
/obj/item/weapon/cell/device/weapon
name = "weapon power cell"
desc = "A small power cell designed to power handheld weaponry."
icon_state = "wcell"
icon_state = "m_sup"
maxcharge = 2400
charge_amount = 20
@@ -28,7 +28,7 @@
/obj/item/weapon/cell/device/weapon/recharge
name = "self-charging weapon power cell"
desc = "A small power cell designed to power handheld weaponry. This one recharges itself."
// icon_state = "wcell" //TODO: Different sprite
icon_state = "meb_m_nu"
self_recharge = TRUE
charge_amount = 120
charge_delay = 75
+2 -7
View File
@@ -3,6 +3,7 @@
/obj/item/weapon/cell/device/weapon/recharge/alien
name = "void cell (device)"
var/swaps_to = /obj/item/weapon/cell/void
standard_overlays = FALSE
/obj/item/weapon/cell/device/weapon/recharge/alien/attack_self(var/mob/user)
user.remove_from_mob(src)
@@ -13,10 +14,6 @@
newcell.charge = newcell.maxcharge * percentage
qdel(src)
/obj/item/weapon/cell/device/weapon/recharge/alien/update_icon()
return
//The machine cell
/obj/item/weapon/cell/void
name = "void cell (machinery)"
@@ -29,6 +26,7 @@
self_recharge = TRUE
charge_delay = 50
matter = null
standard_overlays = FALSE
var/swaps_to = /obj/item/weapon/cell/device/weapon/recharge/alien
/obj/item/weapon/cell/void/attack_self(var/mob/user)
@@ -40,9 +38,6 @@
newcell.charge = newcell.maxcharge * percentage
qdel(src)
/obj/item/weapon/cell/void/update_icon()
return
// Bloo friendlier hybrid tech
/obj/item/weapon/cell/device/weapon/recharge/alien/hybrid
icon = 'icons/obj/power_vr.dmi'
+1 -1
View File
@@ -3,7 +3,7 @@
name = "modified power cell"
desc = "A modified power cell sitting in a highly conductive chassis."
origin_tech = list(TECH_POWER = 2)
icon_state = "spikecell"
icon_state = "exs_m"
maxcharge = 10000
matter = list(MAT_STEEL = 1000, MAT_GLASS = 80, MAT_SILVER = 100)
self_recharge = TRUE
+13 -6
View File
@@ -2,6 +2,7 @@
name = "\improper rechargable AA battery"
desc = "You can't top the plasma top." //TOTALLY TRADEMARK INFRINGEMENT
origin_tech = list(TECH_POWER = 0)
icon_state = "s_st"
maxcharge = 500
matter = list(MAT_STEEL = 700, MAT_GLASS = 40)
@@ -12,6 +13,7 @@
/obj/item/weapon/cell/secborg
name = "security borg rechargable D battery"
origin_tech = list(TECH_POWER = 0)
icon_state = "meb_s_st"
maxcharge = 600 //600 max charge / 100 charge per shot = six shots
matter = list(MAT_STEEL = 700, MAT_GLASS = 40)
@@ -23,13 +25,14 @@
/obj/item/weapon/cell/apc
name = "heavy-duty power cell"
origin_tech = list(TECH_POWER = 1)
icon_state = "meb_b_st"
maxcharge = 5000
matter = list(MAT_STEEL = 700, MAT_GLASS = 50)
/obj/item/weapon/cell/high
name = "high-capacity power cell"
origin_tech = list(TECH_POWER = 2)
icon_state = "hcell"
icon_state = "b_hi"
maxcharge = 10000
matter = list(MAT_STEEL = 700, MAT_GLASS = 60)
@@ -41,7 +44,7 @@
/obj/item/weapon/cell/super
name = "super-capacity power cell"
origin_tech = list(TECH_POWER = 5)
icon_state = "scell"
icon_state = "b_sup"
maxcharge = 20000
matter = list(MAT_STEEL = 700, MAT_GLASS = 70)
@@ -53,7 +56,7 @@
/obj/item/weapon/cell/hyper
name = "hyper-capacity power cell"
origin_tech = list(TECH_POWER = 6)
icon_state = "hpcell"
icon_state = "b_hy"
maxcharge = 30000
matter = list(MAT_STEEL = 700, MAT_GLASS = 80)
@@ -64,12 +67,13 @@
/obj/item/weapon/cell/mech
name = "mecha power cell"
icon_state = "exs_l"
charge = 15000
maxcharge = 15000
/obj/item/weapon/cell/infinite
name = "infinite-capacity power cell!"
icon_state = "icell"
icon_state = "infinite_b"
origin_tech = null
maxcharge = 30000 //determines how badly mobs get shocked
matter = list(MAT_STEEL = 700, MAT_GLASS = 80)
@@ -89,6 +93,7 @@
charge = 100
maxcharge = 300
minor_fault = 1
standard_overlays = FALSE
/obj/item/weapon/cell/slime
name = "charged slime core"
@@ -100,13 +105,14 @@
maxcharge = 10000
matter = null
self_recharge = TRUE
standard_overlays = FALSE
//Not actually a cell, but if people look for it, they'll probably look near other cells
/obj/item/device/fbp_backup_cell
name = "backup battery"
desc = "A small one-time-use chemical battery for synthetic crew when they are low on power in emergency situations."
icon = 'icons/obj/power.dmi'
icon_state = "fbp_cell"
icon = 'icons/obj/power_cells.dmi'
icon_state = "exs_s"
w_class = ITEMSIZE_SMALL
var/amount = 100
var/used = FALSE
@@ -144,6 +150,7 @@
desc = "A tiny power cell with a very low power capacity. Used in light fixtures to power them in the event of an outage."
maxcharge = 120 //Emergency lights use 0.2 W per tick, meaning ~10 minutes of emergency power from a cell
matter = list(MAT_GLASS = 20)
icon_state = "meb_s_sup"
w_class = ITEMSIZE_TINY
/obj/item/weapon/cell/emergency_light/Initialize()
+2 -2
View File
@@ -67,7 +67,7 @@ GLOBAL_LIST_EMPTY(fusion_cores)
if(Output.get_pairing())
reagents.trans_to_holder(Output.reagents, Output.reagents.maximum_volume)
if(prob(5))
visible_message("<span class='notice'>\The [src] gurgles as it exports fluid.</span>")
visible_message("<b>\The [src]</b> gurgles as it exports fluid.")
if(owned_field)
@@ -131,7 +131,7 @@ GLOBAL_LIST_EMPTY(fusion_cores)
/obj/machinery/power/fusion_core/attack_hand(var/mob/user)
if(!Adjacent(user)) // As funny as it was for the AI to hug-kill the tokamak field from a distance...
return
visible_message("<span class='notice'>\The [user] hugs \the [src] to make it feel better!</span>")
visible_message("<b>\The [user]</b> hugs \the [src] to make it feel better!")
if(owned_field)
Shutdown()
@@ -26,14 +26,14 @@
to_chat(user, "<span class='warning'>You need at least three hundred units of material to form a fuel rod.</span>")
return 1
var/datum/reagent/R = thing.reagents.reagent_list[1]
visible_message("<span class='notice'>\The [src] compresses the contents of \the [thing] into a new fuel assembly.</span>")
visible_message("<b>\The [src]</b> compresses the contents of \the [thing] into a new fuel assembly.")
var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), R.id, R.color)
thing.reagents.remove_reagent(R.id, R.volume)
user.put_in_hands(F)
else if(istype(thing, /obj/machinery/power/supermatter))
var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), "supermatter")
visible_message("<span class='notice'>\The [src] compresses \the [thing] into a new fuel assembly.</span>")
visible_message("<b>\The [src]</b> compresses \the [thing] into a new fuel assembly.")
qdel(thing)
user.put_in_hands(F)
return 1
@@ -58,7 +58,7 @@
to_chat(user, "<span class='warning'>You need at least 25 [mat.sheet_plural_name] to make a fuel rod.</span>")
return
var/obj/item/weapon/fuel_assembly/F = new(get_turf(src), mat.name)
visible_message("<span class='notice'>\The [src] compresses the [mat.use_name] into a new fuel assembly.</span>")
visible_message("<b>\The [src]</b> compresses the [mat.use_name] into a new fuel assembly.")
M.use(FUSION_ROD_SHEET_AMT)
user.put_in_hands(F)
@@ -56,9 +56,9 @@ GLOBAL_LIST_EMPTY(fuel_injectors)
if(cur_assembly)
cur_assembly.forceMove(get_turf(src))
visible_message("<span class='notice'>\The [user] swaps \the [src]'s [cur_assembly] for \a [W].</span>")
visible_message("<b>\The [user]</b> swaps \the [src]'s [cur_assembly] for \a [W].")
else
visible_message("<span class='notice'>\The [user] inserts \a [W] into \the [src].</span>")
visible_message("<b>\The [user]</b> inserts \a [W] into \the [src].")
user.drop_from_inventory(W)
W.forceMove(src)
@@ -92,7 +92,7 @@ GLOBAL_LIST_EMPTY(fuel_injectors)
if(cur_assembly)
cur_assembly.forceMove(get_turf(src))
user.put_in_hands(cur_assembly)
visible_message("<span class='notice'>\The [user] removes \the [cur_assembly] from \the [src].</span>")
visible_message("<b>\The [user]</b> removes \the [cur_assembly] from \the [src].")
cur_assembly = null
return
else
+41
View File
@@ -240,3 +240,44 @@
. = ..()
cell = new /obj/item/weapon/cell/void/hybrid(src)
RefreshParts()
// Kugelblitz generator, confined black hole like a singulo but smoller and higher tech
// Presumably whoever made these has better tech than most
/obj/machinery/power/rtg/kugelblitz
name = "kugelblitz generator"
desc = "A power source harnessing a small black hole."
icon = 'icons/obj/structures/decor64x64.dmi'
icon_state = "bigdice"
bound_width = 64
bound_height = 64
power_gen = 30000
irradiate = FALSE // Green energy!
can_buckle = FALSE
/obj/machinery/power/rtg/kugelblitz/proc/asplod()
visible_message("<span class='danger'>\The [src] lets out an shower of sparks as it starts to lose stability!</span>",\
"<span class='italics'>You hear a loud electrical crack!</span>")
playsound(src, 'sound/effects/lightningshock.ogg', 100, 1, extrarange = 5)
var/turf/T = get_turf(src)
qdel(src)
new /obj/singularity(T)
/obj/machinery/power/rtg/kugelblitz/blob_act(obj/structure/blob/B)
asplod()
/obj/machinery/power/rtg/kugelblitz/ex_act()
asplod()
/obj/machinery/power/rtg/kugelblitz/fire_act(exposed_temperature, exposed_volume)
asplod()
/obj/machinery/power/rtg/kugelblitz/tesla_act()
..() //extend the zap
asplod()
/obj/machinery/power/rtg/kugelblitz/bullet_act(obj/item/projectile/Proj)
. = ..()
if(istype(Proj) && !Proj.nodamage && ((Proj.damage_type == BURN) || (Proj.damage_type == BRUTE)) && Proj.damage >= 20)
log_and_message_admins("[ADMIN_LOOKUPFLW(Proj.firer)] triggered a kugelblitz core explosion at [x],[y],[z] via projectile.")
asplod()
+3 -3
View File
@@ -32,7 +32,7 @@
if(W.is_screwdriver())
panel_open = !panel_open
playsound(src, W.usesound, 50, 1)
visible_message("<span class='notice'>\The [user] adjusts \the [src]'s mechanisms.</span>")
visible_message("<b>\The [user]</b> adjusts \the [src]'s mechanisms.")
if(panel_open && do_after(user, 30))
to_chat(user, "<span class='notice'>\The [src] looks like it could be modified.</span>")
if(panel_open && do_after(user, 80 * W.toolspeed)) // We don't have skills, so a delayed hint for engineers will have to do for now. (Panel open check for sanity)
@@ -41,10 +41,10 @@
else
to_chat(user, "<span class='notice'>\The [src]'s mechanisms look secure.</span>")
if(istype(W, /obj/item/weapon/smes_coil/super_io) && panel_open)
visible_message("<span class='notice'>\The [user] begins to modify \the [src] with \the [W].</span>")
visible_message("<b>\The [user]</b> begins to modify \the [src] with \the [W].")
if(do_after(user, 300))
user.drop_from_inventory(W)
visible_message("<span class='notice'>\The [user] installs \the [W] onto \the [src].</span>")
visible_message("<b>\The [user]</b> installs \the [W] onto \the [src].")
qdel(W)
var/turf/T = get_turf(src)
var/new_machine = /obj/machinery/particle_smasher
@@ -174,7 +174,7 @@
recipes = typesof(/datum/particle_smasher_recipe)
if(!target) // You are just blasting an empty machine.
visible_message("<span class='notice'>\The [src] shudders.</span>")
visible_message("<b>\The [src]</b> shudders.")
update_icon()
return

Some files were not shown because too many files have changed in this diff Show More