Merge remote-tracking branch 'VOREStation/master' into upstream-merge-8058

This commit is contained in:
Unknown
2021-05-05 14:12:03 -04:00
88 changed files with 2440 additions and 1770 deletions
+6
View File
@@ -272,6 +272,10 @@
#define TASTE_DULL 0.5 //anything below 30%
#define TASTE_NUMB 0.1 //anything below 150%
//Used by emotes
#define VISIBLE_MESSAGE 1
#define AUDIBLE_MESSAGE 2
// If they're in an FBP, what braintype.
#define FBP_NONE ""
#define FBP_CYBORG "Cyborg"
@@ -436,3 +440,5 @@
#define MAX_NUTRITION 5000 //VOREStation Edit
#define FAKE_INVIS_ALPHA_THRESHOLD 127 // If something's alpha var is at or below this number, certain things will pretend it is invisible.
#define DEATHGASP_NO_MESSAGE "no message"
+20 -8
View File
@@ -11,7 +11,7 @@
start_sound = 'sound/effects/weather/snowstorm/outside/active_start.ogg'
start_length = 13 SECONDS
end_sound = 'sound/effects/weather/snowstorm/outside/active_end.ogg'
volume = 80
volume = 40
/datum/looping_sound/weather/inside_blizzard
mid_sounds = list(
@@ -23,7 +23,7 @@
start_sound = 'sound/effects/weather/snowstorm/inside/active_start.ogg'
start_length = 13 SECONDS
end_sound = 'sound/effects/weather/snowstorm/inside/active_end.ogg'
volume = 60
volume = 20
/datum/looping_sound/weather/outside_snow
mid_sounds = list(
@@ -35,7 +35,7 @@
start_sound = 'sound/effects/weather/snowstorm/outside/weak_start.ogg'
start_length = 13 SECONDS
end_sound = 'sound/effects/weather/snowstorm/outside/weak_end.ogg'
volume = 50
volume = 20
/datum/looping_sound/weather/inside_snow
mid_sounds = list(
@@ -47,7 +47,7 @@
start_sound = 'sound/effects/weather/snowstorm/inside/weak_start.ogg'
start_length = 13 SECONDS
end_sound = 'sound/effects/weather/snowstorm/inside/weak_end.ogg'
volume = 30
volume = 10
/datum/looping_sound/weather/wind
mid_sounds = list(
@@ -59,11 +59,17 @@
'sound/effects/weather/wind/wind_5_1.ogg' = 1
)
mid_length = 10 SECONDS // The lengths for the files vary, but the longest is ten seconds, so this will make it sound like intermittent wind.
volume = 50
volume = 45
// Don't have special sounds so we just make it quieter indoors.
/datum/looping_sound/weather/wind/indoors
volume = 30
volume = 25
/datum/looping_sound/weather/wind/gentle
volume = 15
/datum/looping_sound/weather/wind/gentle/indoors
volume = 5
/datum/looping_sound/weather/rain
mid_sounds = list(
@@ -73,7 +79,13 @@
start_sound = 'sound/effects/weather/acidrain_start.ogg'
start_length = 13 SECONDS
end_sound = 'sound/effects/weather/acidrain_end.ogg'
volume = 50
volume = 20
/datum/looping_sound/weather/rain/indoors
volume = 30
volume = 10
/datum/looping_sound/weather/rain/heavy
volume = 40
/datum/looping_sound/weather/rain/heavy/indoors
volume = 20
+19 -11
View File
@@ -490,7 +490,7 @@
// Use for objects performing visible actions
// message is output to anyone who can see, e.g. "The [src] does something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/atom/proc/visible_message(var/message, var/blind_message, var/list/exclude_mobs = null)
/atom/proc/visible_message(var/message, var/blind_message, var/list/exclude_mobs, var/range = world.view)
//VOREStation Edit
var/list/see
@@ -498,7 +498,7 @@
var/obj/belly/B = loc
see = B.get_mobs_and_objs_in_belly()
else
see = get_mobs_and_objs_in_view_fast(get_turf(src),world.view,remote_ghosts = FALSE)
see = get_mobs_and_objs_in_view_fast(get_turf(src), range, remote_ghosts = FALSE)
//VOREStation Edit End
var/list/seeing_mobs = see["mobs"]
@@ -508,20 +508,20 @@
for(var/obj in seeing_objs)
var/obj/O = obj
O.show_message(message, 1, blind_message, 2)
O.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE)
for(var/mob in seeing_mobs)
var/mob/M = mob
if(M.see_invisible >= invisibility && MOB_CAN_SEE_PLANE(M, plane))
M.show_message(message, 1, blind_message, 2)
M.show_message(message, VISIBLE_MESSAGE, blind_message, AUDIBLE_MESSAGE)
else if(blind_message)
M.show_message(blind_message, 2)
M.show_message(blind_message, AUDIBLE_MESSAGE)
// Show a message to all mobs and objects in earshot of this atom
// Use for objects performing audible actions
// message is the message output to anyone who can hear.
// deaf_message (optional) is what deaf people will see.
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance)
/atom/proc/audible_message(var/message, var/deaf_message, var/hearing_distance, var/radio_message)
var/range = hearing_distance || world.view
var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE)
@@ -529,14 +529,19 @@
var/list/hearing_mobs = hear["mobs"]
var/list/hearing_objs = hear["objs"]
for(var/obj in hearing_objs)
var/obj/O = obj
O.show_message(message, 2, deaf_message, 1)
if(radio_message)
for(var/obj in hearing_objs)
var/obj/O = obj
O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null)
else
for(var/obj in hearing_objs)
var/obj/O = obj
O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
for(var/mob in hearing_mobs)
var/mob/M = mob
var/msg = message
M.show_message(msg, 2, deaf_message, 1)
M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
/atom/movable/proc/dropInto(var/atom/destination)
while(istype(destination))
@@ -647,4 +652,7 @@
/atom/Exited(atom/movable/AM, atom/new_loc)
. = ..()
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
SEND_SIGNAL(src, COMSIG_ATOM_EXITED, AM, new_loc)
/atom/proc/get_visible_gender()
return gender
-1
View File
@@ -507,7 +507,6 @@
log_and_message_admins("[key_name(to_despawn)] ([to_despawn.mind.role_alt_title]) entered cryostorage.")
announce.autosay("[to_despawn.real_name], [to_despawn.mind.role_alt_title], [on_store_message]", "[on_store_name]", announce_channel, using_map.get_map_levels(z, TRUE, om_range = DEFAULT_OVERMAP_RANGE))
//visible_message("<span class='notice'>\The [initial(name)] hums and hisses as it moves [to_despawn.real_name] into storage.</span>", 3)
visible_message("<span class='notice'>\The [initial(name)] [on_store_visible_message_1] [to_despawn.real_name] [on_store_visible_message_2]</span>", 3)
//VOREStation Edit begin: Dont delete mobs-in-mobs
@@ -4614,3 +4614,36 @@
/obj/machinery/vending/cola/soft
icon = 'icons/obj/vending_vr.dmi'
icon_state = "Cola_Machine"
//////////////////////Bepis Drinks (04/29/2021)//////////////////////
/obj/machinery/vending/bepis
name = "Bepis Softdrinks"
desc = "A strange softdrink vendor that isn't owned by NanoTrasen... Why (and how) is it here?"
icon = 'icons/obj/vending_vr.dmi'
icon_state = "bepis"
product_slogans = "Refreshing!;Have a sip, you won't believe the taste!;Puts the 'B' in Best Soda!"
product_ads = "Refreshing!;Hope you're thirsty!;Please, have a drink!;Drink up!"
products = list(/obj/item/weapon/reagent_containers/food/drinks/cans/bepis = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 10,
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 10)
prices = list(/obj/item/weapon/reagent_containers/food/drinks/cans/bepis = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/iced_tea = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/grape_juice = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/gingerale = 1,
/obj/item/weapon/reagent_containers/food/drinks/cans/root_beer = 1)
idle_power_usage = 211 //refrigerator - believe it or not, this is actually the average power consumption of a refrigerated vending machine according to NRCan.
vending_sound = "machines/vending/vending_cans.ogg"
+1 -3
View File
@@ -552,9 +552,7 @@ var/list/global/slot_flags_enumeration = list(
if(!hit_zone)
U.do_attack_animation(M)
playsound(src, 'sound/weapons/punchmiss.ogg', 25, 1, -1)
//visible_message("<span class='danger'>[U] attempts to stab [M] in the eyes, but misses!</span>")
for(var/mob/V in viewers(M))
V.show_message("<span class='danger'>[U] attempts to stab [M] in the eyes, but misses!</span>")
visible_message(SPAN_DANGER("\The [U] attempts to stab \the [M] in the eyes, but misses!"))
return
add_attack_logs(user,M,"Attack eyes with [name]")
@@ -74,14 +74,12 @@
/obj/item/weapon/material/snow/snowball/attack_self(mob/user as mob)
if(user.a_intent == I_HURT)
//visible_message("[user] has smashed the snowball in their hand!", "You smash the snowball in your hand.")
to_chat(user, "<span class='notice'>You smash the snowball in your hand.</span>")
to_chat(user, SPAN_NOTICE("You smash the snowball in your hand."))
var/atom/S = new /obj/item/stack/material/snow(user.loc)
qdel(src)
user.put_in_hands(S)
else
//visible_message("[user] starts compacting the snowball.", "You start compacting the snowball.")
to_chat(user, "<span class='notice'>You start compacting the snowball.</span>")
to_chat(user, SPAN_NOTICE("You start compacting the snowball."))
if(do_after(user, 2 SECONDS))
var/atom/S = new /obj/item/weapon/material/snow/snowball/reinforced(user.loc)
qdel(src)
@@ -37,6 +37,43 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/g_wing3 = 30 // Wing tertiary color
var/b_wing3 = 30 // Wing tertiary color
// Sanitize ear/wing/tail styles
/datum/preferences/proc/sanitize_body_styles()
// Grandfather in anyone loading paths from a save.
if(ispath(ear_style, /datum/sprite_accessory))
var/datum/sprite_accessory/instance = global.ear_styles_list[ear_style]
if(istype(instance))
ear_style = instance.name
if(ispath(wing_style, /datum/sprite_accessory))
var/datum/sprite_accessory/instance = global.wing_styles_list[wing_style]
if(istype(instance))
wing_style = instance.name
if(ispath(tail_style, /datum/sprite_accessory))
var/datum/sprite_accessory/instance = global.tail_styles_list[tail_style]
if(istype(instance))
tail_style = instance.name
// Sanitize for non-existent keys.
if(ear_style && !(ear_style in get_available_styles(global.ear_styles_list)))
ear_style = null
if(wing_style && !(wing_style in get_available_styles(global.wing_styles_list)))
wing_style = null
if(tail_style && !(tail_style in get_available_styles(global.tail_styles_list)))
tail_style = null
/datum/preferences/proc/get_available_styles(var/style_list)
. = list("Normal" = null)
for(var/path in style_list)
var/datum/sprite_accessory/instance = style_list[path]
if(!istype(instance))
continue
if(instance.ckeys_allowed && (!client || !(client.ckey in instance.ckeys_allowed)))
continue
if(instance.species_allowed && (!species || !(species in instance.species_allowed)) && (!client || !check_rights(R_ADMIN | R_EVENT | R_FUN, 0, client)))
continue
.[instance.name] = instance
/datum/category_item/player_setup_item/general/body
name = "Body"
sort_order = 3
@@ -228,12 +265,8 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
pref.r_wing3 = sanitize_integer(pref.r_wing3, 0, 255, initial(pref.r_wing3))
pref.g_wing3 = sanitize_integer(pref.g_wing3, 0, 255, initial(pref.g_wing3))
pref.b_wing3 = sanitize_integer(pref.b_wing3, 0, 255, initial(pref.b_wing3))
if(!(pref.ear_style in get_ear_styles()))
pref.ear_style = initial(pref.ear_style)
if(!(pref.wing_style in get_wing_styles()))
pref.wing_style = initial(pref.wing_style)
if(!(pref.tail_style in get_tail_styles()))
pref.tail_style = initial(pref.tail_style)
pref.sanitize_body_styles()
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
@@ -265,37 +298,44 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
character.g_synth = pref.g_synth
character.b_synth = pref.b_synth
character.synth_markings = pref.synth_markings
character.ear_style = ear_styles_list[pref.ear_style]
character.r_ears = pref.r_ears
character.b_ears = pref.b_ears
character.g_ears = pref.g_ears
character.r_ears2 = pref.r_ears2
character.b_ears2 = pref.b_ears2
character.g_ears2 = pref.g_ears2
character.r_ears3 = pref.r_ears3
character.b_ears3 = pref.b_ears3
character.g_ears3 = pref.g_ears3
character.tail_style = tail_styles_list[pref.tail_style]
character.r_tail = pref.r_tail
character.b_tail = pref.b_tail
character.g_tail = pref.g_tail
character.r_tail2 = pref.r_tail2
character.b_tail2 = pref.b_tail2
character.g_tail2 = pref.g_tail2
character.r_tail3 = pref.r_tail3
character.b_tail3 = pref.b_tail3
character.g_tail3 = pref.g_tail3
character.wing_style = wing_styles_list[pref.wing_style]
character.r_wing = pref.r_wing
character.b_wing = pref.b_wing
character.g_wing = pref.g_wing
character.r_wing2 = pref.r_wing2
character.b_wing2 = pref.b_wing2
character.g_wing2 = pref.g_wing2
character.r_wing3 = pref.r_wing3
character.b_wing3 = pref.b_wing3
character.g_wing3 = pref.g_wing3
character.set_gender( pref.biological_gender)
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
character.ear_style = ear_styles[pref.ear_style]
character.r_ears = pref.r_ears
character.b_ears = pref.b_ears
character.g_ears = pref.g_ears
character.r_ears2 = pref.r_ears2
character.b_ears2 = pref.b_ears2
character.g_ears2 = pref.g_ears2
character.r_ears3 = pref.r_ears3
character.b_ears3 = pref.b_ears3
character.g_ears3 = pref.g_ears3
var/list/tail_styles = pref.get_available_styles(global.tail_styles_list)
character.tail_style = tail_styles[pref.tail_style]
character.r_tail = pref.r_tail
character.b_tail = pref.b_tail
character.g_tail = pref.g_tail
character.r_tail2 = pref.r_tail2
character.b_tail2 = pref.b_tail2
character.g_tail2 = pref.g_tail2
character.r_tail3 = pref.r_tail3
character.b_tail3 = pref.b_tail3
character.g_tail3 = pref.g_tail3
var/list/wing_styles = pref.get_available_styles(global.wing_styles_list)
character.wing_style = wing_styles[pref.wing_style]
character.r_wing = pref.r_wing
character.b_wing = pref.b_wing
character.g_wing = pref.g_wing
character.r_wing2 = pref.r_wing2
character.b_wing2 = pref.b_wing2
character.g_wing2 = pref.g_wing2
character.r_wing3 = pref.r_wing3
character.b_wing3 = pref.b_wing3
character.g_wing3 = pref.g_wing3
character.set_gender(pref.biological_gender)
// Destroy/cyborgize organs and limbs.
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
@@ -510,59 +550,47 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "<h2>Genetics Settings</h2>"
var/ear_display = "Normal"
if(pref.ear_style && (pref.ear_style in ear_styles_list))
var/datum/sprite_accessory/ears/instance = ear_styles_list[pref.ear_style]
ear_display = instance.name
else if(pref.ear_style)
ear_display = "REQUIRES UPDATE"
var/list/ear_styles = pref.get_available_styles(global.ear_styles_list)
var/datum/sprite_accessory/ears/ear = ear_styles[pref.ear_style]
. += "<b>Ears</b><br>"
. += " Style: <a href='?src=\ref[src];ear_style=1'>[ear_display]</a><br>"
if(ear_styles_list[pref.ear_style])
var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style]
if(istype(ear))
. += " Style: <a href='?src=\ref[src];ear_style=1'>[ear.name]</a><br>"
if(ear.do_colouration)
. += "<a href='?src=\ref[src];ear_color=1'>Change Color</a> [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]<br>"
if(ear.extra_overlay)
. += "<a href='?src=\ref[src];ear_color2=1'>Change Secondary Color</a> [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]<br>"
if(ear.extra_overlay2)
. += "<a href='?src=\ref[src];ear_color3=1'>Change Tertiary Color</a> [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]<br>"
else
. += " Style: <a href='?src=\ref[src];ear_style=1'>Select</a><br>"
var/tail_display = "Normal"
if(pref.tail_style && (pref.tail_style in tail_styles_list))
var/datum/sprite_accessory/tail/instance = tail_styles_list[pref.tail_style]
tail_display = instance.name
else if(pref.tail_style)
tail_display = "REQUIRES UPDATE"
var/list/tail_styles = pref.get_available_styles(global.tail_styles_list)
var/datum/sprite_accessory/tail/tail = tail_styles[pref.tail_style]
. += "<b>Tail</b><br>"
. += " Style: <a href='?src=\ref[src];tail_style=1'>[tail_display]</a><br>"
if(tail_styles_list[pref.tail_style])
var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style]
if(T.do_colouration)
if(istype(tail))
. += " Style: <a href='?src=\ref[src];tail_style=1'>[tail.name]</a><br>"
if(tail.do_colouration)
. += "<a href='?src=\ref[src];tail_color=1'>Change Color</a> [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]<br>"
if(T.extra_overlay)
if(tail.extra_overlay)
. += "<a href='?src=\ref[src];tail_color2=1'>Change Secondary Color</a> [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]<br>"
if(T.extra_overlay2)
if(tail.extra_overlay2)
. += "<a href='?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]<br>"
else
. += " Style: <a href='?src=\ref[src];tail_style=1'>Select</a><br>"
var/wing_display = "Normal"
if(pref.wing_style && (pref.wing_style in wing_styles_list))
var/datum/sprite_accessory/wing/instance = wing_styles_list[pref.wing_style]
wing_display = instance.name
else if(pref.wing_style)
wing_display = "REQUIRES UPDATE"
var/list/wing_styles = pref.get_available_styles(global.wing_styles_list)
var/datum/sprite_accessory/wing/wings = wing_styles[pref.wing_style]
. += "<b>Wing</b><br>"
. += " Style: <a href='?src=\ref[src];wing_style=1'>[wing_display]</a><br>"
if(wing_styles_list[pref.wing_style])
var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style]
if(W.do_colouration)
if(istype(wings))
. += " Style: <a href='?src=\ref[src];wing_style=1'>[wings.name]</a><br>"
if(wings.do_colouration)
. += "<a href='?src=\ref[src];wing_color=1'>Change Color</a> [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]<br>"
if(W.extra_overlay)
if(wings.extra_overlay)
. += "<a href='?src=\ref[src];wing_color2=1'>Change Secondary Color</a> [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]<br>"
if(W.extra_overlay2)
if(wings.extra_overlay2)
. += "<a href='?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]<br>"
else
. += " Style: <a href='?src=\ref[src];wing_style=1'>Select</a><br>"
. += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
. += "<table>"
@@ -661,13 +689,7 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
reset_limbs() // Safety for species with incompatible manufacturers; easier than trying to do it case by case.
pref.body_markings.Cut() // Basically same as above.
// Sanitize ear/wing/tail styles
if(!(pref.ear_style in get_ear_styles()))
pref.ear_style = initial(pref.ear_style)
if(!(pref.wing_style in get_wing_styles()))
pref.wing_style = initial(pref.wing_style)
if(!(pref.tail_style in get_tail_styles()))
pref.tail_style = initial(pref.tail_style)
pref.sanitize_body_styles()
var/min_age = get_min_age()
var/max_age = get_max_age()
@@ -1084,13 +1106,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_style"])
// Construct the list of names allowed for this user.
var/list/pretty_ear_styles = get_ear_styles()
// Present choice to user
var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles
var/new_ear_style = input(user, "Select an ear style for this character:", "Character Preference", pref.ear_style) as null|anything in pref.get_available_styles(global.ear_styles_list)
if(new_ear_style)
pref.ear_style = pretty_ear_styles[new_ear_style]
pref.ear_style = new_ear_style
return TOPIC_REFRESH_UPDATE_PREVIEW
@@ -1122,14 +1140,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_style"])
// Construct the list of names allowed for this user.
var/list/pretty_tail_styles = get_tail_styles()
// Present choice to user
var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles
var/new_tail_style = input(user, "Select a tail style for this character:", "Character Preference", pref.tail_style) as null|anything in pref.get_available_styles(global.tail_styles_list)
if(new_tail_style)
pref.tail_style = pretty_tail_styles[new_tail_style]
pref.tail_style = new_tail_style
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color"])
@@ -1160,13 +1173,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_style"])
// Construct the list of names allowed for this user.
var/list/pretty_wing_styles = get_wing_styles()
// Present choice to user
var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles
var/new_wing_style = input(user, "Select a wing style for this character:", "Character Preference", pref.wing_style) as null|anything in pref.get_available_styles(global.wing_styles_list)
if(new_wing_style)
pref.wing_style = pretty_wing_styles[new_wing_style]
pref.wing_style = new_wing_style
return TOPIC_REFRESH_UPDATE_PREVIEW
@@ -1291,27 +1300,3 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
dat += "</center></body>"
user << browse(dat, "window=species;size=700x400")
/datum/category_item/player_setup_item/general/body/proc/get_tail_styles()
var/list/pretty_tail_styles = list("Normal" = null)
for(var/path in tail_styles_list)
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_tail_styles[instance.name] = path
return pretty_tail_styles
/datum/category_item/player_setup_item/general/body/proc/get_ear_styles()
var/list/pretty_ear_styles = list("Normal" = null)
for(var/path in ear_styles_list)
var/datum/sprite_accessory/ears/instance = ear_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_ear_styles[instance.name] = path
return pretty_ear_styles
/datum/category_item/player_setup_item/general/body/proc/get_wing_styles()
var/list/pretty_wing_styles = list("Normal" = null)
for(var/path in wing_styles_list)
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
if(((!instance.ckeys_allowed) || (pref.client.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, pref.client)) //VOREStation Edit
pretty_wing_styles[instance.name] = path
return pretty_wing_styles
+41
View File
@@ -0,0 +1,41 @@
var/list/_default_mob_emotes = list(
/decl/emote/visible,
/decl/emote/visible/scratch,
/decl/emote/visible/drool,
/decl/emote/visible/nod,
/decl/emote/visible/sway,
/decl/emote/visible/sulk,
/decl/emote/visible/twitch,
/decl/emote/visible/twitch_v,
/decl/emote/visible/dance,
/decl/emote/visible/roll,
/decl/emote/visible/shake,
/decl/emote/visible/jump,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible,
/decl/emote/audible/hiss,
/decl/emote/audible/whimper,
/decl/emote/audible/gasp,
/decl/emote/audible/scretch,
/decl/emote/audible/choke,
/decl/emote/audible/moan,
/decl/emote/audible/gnarl,
)
/mob
var/list/usable_emotes
/mob/proc/update_emotes(var/skip_sort)
usable_emotes = list()
for(var/emote in get_default_emotes())
var/decl/emote/emote_datum = decls_repository.get_decl(emote)
if(emote_datum.check_user(src))
usable_emotes[emote_datum.key] = emote_datum
if(!skip_sort)
usable_emotes = sortAssoc(usable_emotes)
/mob/proc/get_default_emotes()
return global._default_mob_emotes
@@ -0,0 +1,11 @@
/datum/species
var/list/default_emotes = list()
/mob/living/carbon/update_emotes(var/skip_sort)
. = ..(skip_sort = TRUE)
if(species)
for(var/emote in species.default_emotes)
var/decl/emote/emote_datum = decls_repository.get_decl(emote)
if(emote_datum.check_user(src))
usable_emotes[emote_datum.key] = emote_datum
usable_emotes = sortAssoc(usable_emotes)
+229
View File
@@ -0,0 +1,229 @@
/decl/emote/audible
key = "burp"
emote_message_3p = "burps."
message_type = AUDIBLE_MESSAGE
/decl/emote/audible/New()
. = ..()
// Snips the 'USER' from 3p emote messages for radio.
if(!emote_message_radio && emote_message_3p)
emote_message_radio = emote_message_3p
if(!emote_message_radio_synthetic && emote_message_synthetic_3p)
emote_message_radio_synthetic = emote_message_synthetic_3p
/decl/emote/audible/deathgasp_alien
key = "deathgasp"
emote_message_3p = "lets out a waning guttural screech, green blood bubbling from its maw."
/decl/emote/audible/whimper
key = "whimper"
emote_message_3p = "whimpers."
/decl/emote/audible/gasp
key = "gasp"
emote_message_3p = "gasps."
conscious = FALSE
/decl/emote/audible/scretch
key = "scretch"
emote_message_3p = "scretches."
/decl/emote/audible/choke
key ="choke"
emote_message_3p = "chokes."
conscious = FALSE
/decl/emote/audible/gnarl
key = "gnarl"
emote_message_3p = "gnarls and shows USER_HIS teeth."
/decl/emote/audible/multichirp
key = "mchirp"
emote_message_3p = "chirps a chorus of notes!"
emote_sound = 'sound/voice/multichirp.ogg'
/decl/emote/audible/alarm
key = "alarm"
emote_message_1p = "You sound an alarm."
emote_message_3p = "sounds an alarm."
/decl/emote/audible/alert
key = "alert"
emote_message_1p = "You let out a distressed noise."
emote_message_3p = "lets out a distressed noise."
/decl/emote/audible/notice
key = "notice"
emote_message_1p = "You play a loud tone."
emote_message_3p = "plays a loud tone."
/decl/emote/audible/boop
key = "boop"
emote_message_1p = "You boop."
emote_message_3p = "boops."
/decl/emote/audible/beep
key = "beep"
emote_message_3p = "You beep."
emote_message_3p = "beeps."
emote_sound = 'sound/machines/twobeep.ogg'
/decl/emote/audible/sniff
key = "sniff"
emote_message_3p = "sniffs."
/decl/emote/audible/snore
key = "snore"
emote_message_3p = "snores."
conscious = FALSE
/decl/emote/audible/whimper
key = "whimper"
emote_message_3p = "whimpers."
/decl/emote/audible/yawn
key = "yawn"
emote_message_3p = "yawns."
/decl/emote/audible/clap
key = "clap"
emote_message_3p = "claps."
/decl/emote/audible/chuckle
key = "chuckle"
emote_message_3p = "chuckles."
/decl/emote/audible/cry
key = "cry"
emote_message_3p = "cries."
/decl/emote/audible/sigh
key = "sigh"
emote_message_3p = "sighs."
/decl/emote/audible/laugh
key = "laugh"
emote_message_3p_target = "laughs at TARGET."
emote_message_3p = "laughs."
/decl/emote/audible/mumble
key = "mumble"
emote_message_3p = "mumbles!"
/decl/emote/audible/grumble
key = "grumble"
emote_message_3p = "grumbles!"
/decl/emote/audible/groan
key = "groan"
emote_message_3p = "groans!"
conscious = FALSE
/decl/emote/audible/moan
key = "moan"
emote_message_3p = "moans!"
conscious = FALSE
/decl/emote/audible/giggle
key = "giggle"
emote_message_3p = "giggles."
/decl/emote/audible/grunt
key = "grunt"
emote_message_3p = "grunts."
/decl/emote/audible/bug_hiss
key ="hiss"
emote_message_3p_target = "hisses at TARGET."
emote_message_3p = "hisses."
emote_sound = 'sound/voice/BugHiss.ogg'
/decl/emote/audible/bug_buzz
key ="buzz"
emote_message_3p = "buzzes its wings."
emote_sound = 'sound/voice/BugBuzz.ogg'
/decl/emote/audible/bug_chitter
key ="chitter"
emote_message_3p = "chitters."
emote_sound = 'sound/voice/Bug.ogg'
/decl/emote/audible/roar
key = "roar"
emote_message_3p = "roars!"
/decl/emote/audible/bellow
key = "bellow"
emote_message_3p = "bellows!"
/decl/emote/audible/howl
key = "howl"
emote_message_3p = "howls!"
/decl/emote/audible/wheeze
key = "wheeze"
emote_message_3p = "wheezes."
/decl/emote/audible/hiss
key = "hiss"
emote_message_3p_target = "hisses softly at TARGET."
emote_message_3p = "hisses softly."
/decl/emote/audible/chirp
key = "chirp"
emote_message_3p = "chirps!"
emote_sound = 'sound/misc/nymphchirp.ogg'
/decl/emote/audible/crack
key = "crack"
emote_message_3p = "cracks USER_HIS knuckles."
emote_sound = 'sound/voice/knuckles.ogg'
/decl/emote/audible/squish
key = "squish"
emote_sound = 'sound/effects/slime_squish.ogg' //Credit to DrMinky (freesound.org) for the sound.
emote_message_3p = "squishes."
/decl/emote/audible/warble
key = "warble"
emote_sound = 'sound/effects/warble.ogg' // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
emote_message_3p = "warbles."
/decl/emote/audible/vox_shriek
key = "shriek"
emote_message_3p = "SHRIEKS!"
emote_sound = 'sound/voice/shriek1.ogg'
/decl/emote/audible/purr
key = "purr"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/cat_purr.ogg'
/decl/emote/audible/purrlong
key = "purrl"
emote_message_3p = "purrs."
emote_sound = 'sound/voice/cat_purr_long.ogg'
/decl/emote/audible/teshsqueak
key = "surprised"
emote_message_1p = "You chirp in surprise!"
emote_message_3p = "chirps in surprise!"
emote_message_1p_target = "You chirp in surprise at TARGET!"
emote_message_3p_target = "chirps in surprise at TARGET!"
emote_sound = 'sound/voice/teshsqueak.ogg' // Copyright CC BY 3.0 InspectorJ (freesound.org) for the source audio.
/decl/emote/audible/teshchirp
key = "chirp"
emote_message_1p = "You chirp!"
emote_message_3p = "chirps!"
emote_message_1p_target = "You chirp at TARGET!"
emote_message_3p_target = "chirps at TARGET!"
emote_sound = 'sound/voice/teshchirp.ogg' // Copyright Sampling+ 1.0 Incarnidine (freesound.org) for the source audio.
/decl/emote/audible/teshtrill
key = "trill"
emote_message_1p = "You trill."
emote_message_3p = "trills."
emote_message_1p_target = "You trill at TARGET."
emote_message_3p_target = "trills at TARGET."
emote_sound = 'sound/voice/teshtrill.ogg' // Copyright CC BY-NC 3.0 Arnaud Coutancier (freesound.org) for the source audio.
@@ -0,0 +1,52 @@
/decl/emote/audible/cough
key = "cough"
emote_message_1p = "You cough!"
emote_message_1p_target = "You cough on TARGET!"
emote_message_3p = "coughs!"
emote_message_3p_target = "coughs on TARGET!"
emote_message_synthetic_1p_target = "You emit a robotic cough towards TARGET."
emote_message_synthetic_1p = "You emit a robotic cough."
emote_message_synthetic_3p_target = "emits a robotic cough towards TARGET."
emote_message_synthetic_3p = "emits a robotic cough."
emote_volume = 120
emote_volume_synthetic = 50
conscious = FALSE
emote_sound_synthetic = list(
FEMALE = list(
'sound/effects/mob_effects/f_machine_cougha.ogg',
'sound/effects/mob_effects/f_machine_coughb.ogg'
),
MALE = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
),
NEUTER = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
),
PLURAL = list(
'sound/effects/mob_effects/m_machine_cougha.ogg',
'sound/effects/mob_effects/m_machine_coughb.ogg',
'sound/effects/mob_effects/m_machine_coughc.ogg'
)
)
/decl/emote/audible/cough/get_emote_sound(var/atom/user)
if(ishuman(user) && !check_synthetic(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
if(length(H.species.female_cough_sounds))
return list(
"sound" = H.species.female_cough_sounds,
"vol" = emote_volume
)
else
if(length(H.species.male_cough_sounds))
return list(
"sound" = H.species.male_cough_sounds,
"vol" = emote_volume
)
return ..()
@@ -0,0 +1,129 @@
/decl/emote/audible/awoo
key = "awoo"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/awoo.ogg'
/decl/emote/audible/awoo2
key = "awoo2"
emote_message_3p = "lets out an awoo."
emote_sound = 'sound/voice/long_awoo.ogg'
/decl/emote/audible/growl
key = "growl"
emote_message_3p = "lets out a growl."
emote_sound = 'sound/voice/growl.ogg'
/decl/emote/audible/woof
key = "woof"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof.ogg'
/decl/emote/audible/woof2
key = "woof2"
emote_message_3p = "lets out a woof."
emote_sound = 'sound/voice/woof2.ogg'
/decl/emote/audible/nya
key = "nya"
emote_message_3p = "lets out a nya."
emote_sound = 'sound/voice/nya.ogg'
/decl/emote/audible/mrowl
key = "mrowl"
emote_message_3p = "mrowls."
emote_sound = 'sound/voice/mrow.ogg'
/decl/emote/audible/peep
key = "peep"
emote_message_3p = "peeps like a bird."
emote_sound = 'sound/voice/peep.ogg'
/decl/emote/audible/chirp
key = "chirp"
emote_message_3p = "chirps!"
emote_sound = 'sound/misc/nymphchirp.ogg'
/decl/emote/audible/hoot
key = "hoot"
emote_message_3p = "hoots!"
emote_sound = 'sound/voice/hoot.ogg'
/decl/emote/audible/weh
key = "weh"
emote_message_3p = "lets out a weh."
emote_sound = 'sound/voice/weh.ogg'
/decl/emote/audible/merp
key = "merp"
emote_message_3p = "lets out a merp."
emote_sound = 'sound/voice/merp.ogg'
/decl/emote/audible/myarp
key = "myarp"
emote_message_3p = "lets out a myarp."
emote_sound = 'sound/voice/myarp.ogg'
/decl/emote/audible/bark
key = "bark"
emote_message_3p = "lets out a bark."
emote_sound = 'sound/voice/bark2.ogg'
/decl/emote/audible/bork
key = "bork"
emote_message_3p = "lets out a bork."
emote_sound = 'sound/voice/bork.ogg'
/decl/emote/audible/mrow
emote_message_3p = "lets out a mrow."
emote_sound = 'sound/voice/mrow.ogg'
/decl/emote/audible/hypno
emote_message_3p = "lets out a mystifying tone."
emote_sound = 'sound/voice/hypno.ogg'
/decl/emote/audible/hiss
key = "hiss"
emote_message_3p = "lets out a hiss."
emote_sound = 'sound/voice/hiss.ogg'
/decl/emote/audible/rattle
key = "rattle"
emote_message_3p = "rattles!"
emote_sound = 'sound/voice/rattle.ogg'
/decl/emote/audible/squeak
key = "squeak"
emote_message_3p = "lets out a squeak."
emote_sound = 'sound/effects/mouse_squeak.ogg'
/decl/emote/audible/geck
key = "geck"
emote_message_3p = "geckers!"
emote_sound = 'sound/voice/geck.ogg'
/decl/emote/audible/baa
key = "baa"
emote_message_3p = "lets out a baa."
emote_sound = 'sound/voice/baa.ogg'
/decl/emote/audible/baa2
key = "baa2"
emote_message_3p = "bleats."
emote_sound = 'sound/voice/baa2.ogg'
/*
/decl/emote/audible/deathgasp2
key = "deathgasp2"
emote_message_3p = "[species.get_death_message()]"
m_type = 1
emote_sound = 'sound/voice/deathgasp2.ogg'
*/
/decl/emote/audible/mar
key = "mar"
emote_message_3p = "lets out a mar."
emote_sound = 'sound/voice/mar.ogg'
/decl/emote/audible/wurble
key = "wurble"
emote_message_3p = "lets out a wurble."
emote_sound = 'sound/voice/wurble.ogg'
/decl/emote/audible/snort
key = "snort"
emote_message_3p = "snorts!"
emote_sound = 'sound/voice/Snort.ogg'
/decl/emote/audible/meow
key = "meow"
emote_message_3p = "gently meows!"
emote_sound = 'sound/voice/Meow.ogg'
/decl/emote/audible/moo
key = "moo"
emote_message_3p = "takes a breath and lets out a moo."
emote_sound = 'sound/voice/Moo.ogg'
/decl/emote/audible/croak
key = "croak"
emote_message_3p = "rumbles their throat, puffs their cheeks and croaks."
emote_sound = 'sound/voice/Croak.ogg'
/decl/emote/audible/gao
key = "gao"
emote_message_3p = "lets out a gao."
emote_sound = 'sound/voice/gao.ogg'
/decl/emote/audible/cackle
key = "cackle"
emote_message_3p = "cackles hysterically!"
emote_sound = 'sound/voice/YeenCackle.ogg'
@@ -0,0 +1,16 @@
/decl/emote/audible/scream
key = "scream"
emote_message_1p = "You scream!"
emote_message_3p = "screams!"
/decl/emote/audible/scream/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params)
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "You [H.species.scream_verb_1p]!"
. = ..()
/decl/emote/audible/cough/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(ishuman(user))
var/mob/living/carbon/human/H = user
return "[H.species.scream_verb_3p]!"
. = ..()
@@ -0,0 +1,24 @@
/decl/emote/audible/slap
key = "slap"
emote_message_1p_target = "You slap TARGET across the face. Ouch!"
emote_message_1p = "You slap yourself across the face!"
emote_message_3p_target = "slaps TARGET across the face. Ouch!"
emote_message_3p = "slaps USER_SELF across the face!"
emote_sound = 'sound/effects/snap.ogg'
check_restraints = TRUE
check_range = 1
/decl/emote/audible/slap/New()
..()
emote_message_1p_target = SPAN_DANGER(emote_message_1p_target)
emote_message_1p = SPAN_DANGER(emote_message_1p)
emote_message_3p_target = SPAN_DANGER(emote_message_3p_target)
emote_message_3p = SPAN_DANGER(emote_message_3p)
/decl/emote/audible/slap/do_extra(var/atom/user, var/atom/target)
. = ..()
if(ishuman(target))
var/mob/living/carbon/human/H = target
var/obj/item/clothing/mask/smokable/mask = H.wear_mask
if(istype(mask) && H.unEquip(mask))
mask.forceMove(get_turf(H))
@@ -0,0 +1,22 @@
/decl/emote/audible/snap
key = "snap"
emote_message_1p = "You snap your fingers."
emote_message_3p = "snaps USER_HIS fingers."
emote_message_1p_target = "You snap your fingers at TARGET."
emote_message_3p_target = "snaps USER_HIS fingers at TARGET."
emote_sound = 'sound/effects/fingersnap.ogg'
/decl/emote/audible/snap/proc/can_snap(var/atom/user)
if(ishuman(user))
var/mob/living/carbon/human/H = user
for(var/limb in list(BP_L_HAND, BP_R_HAND))
var/obj/item/organ/external/L = H.get_organ(limb)
if(istype(L) && L.is_usable() && !L.splinted)
return TRUE
return FALSE
/decl/emote/audible/snap/do_emote(var/atom/user, var/extra_params)
if(!can_snap(user))
to_chat(user, SPAN_WARNING("You need at least one working hand to snap your fingers."))
return FALSE
. = ..()
@@ -0,0 +1,29 @@
/decl/emote/audible/sneeze
key = "sneeze"
emote_message_1p = "You sneeze."
emote_message_3p = "sneezes."
emote_sound_synthetic = list(
FEMALE = 'sound/effects/mob_effects/machine_sneeze.ogg',
MALE = 'sound/effects/mob_effects/f_machine_sneeze.ogg',
NEUTER = 'sound/effects/mob_effects/f_machine_sneeze.ogg',
PLURAL = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
)
emote_message_synthetic_1p = "You emit a robotic sneeze."
emote_message_synthetic_1p_target = "You emit a robotic sneeze towards TARGET."
emote_message_synthetic_3p = "emits a robotic sneeze."
emote_message_synthetic_3p_target = "emits a robotic sneeze towards TARGET."
/decl/emote/audible/sneeze/get_emote_sound(var/atom/user)
if(ishuman(user) && !check_synthetic(user))
var/mob/living/carbon/human/H = user
if(H.get_gender() == FEMALE)
return list(
"sound" = H.species.female_sneeze_sound,
"vol" = emote_volume
)
else
return list(
"sound" = H.species.male_sneeze_sound,
"vol" = emote_volume
)
return ..()
@@ -0,0 +1,36 @@
/decl/emote/audible/whistle
key = "whistle"
emote_message_1p = "You whistle a tune."
emote_message_3p = "whistles a tune."
emote_sound = 'sound/voice/longwhistle.ogg'
emote_message_muffled = "makes a light spitting noise, a poor attempt at a whistle."
emote_sound_synthetic = 'sound/voice/longwhistle_robot.ogg'
emote_message_synthetic_1p = "You whistle a robotic tune."
emote_message_synthetic_3p = "whistles a robotic tune."
/decl/emote/audible/whistle/quiet
key = "qwhistle"
emote_message_1p = "You whistle quietly."
emote_message_3p = "whistles quietly."
emote_sound = 'sound/voice/shortwhistle.ogg'
emote_message_synthetic_1p = "You whistle robotically."
emote_message_synthetic_3p = "whistles robotically."
emote_sound_synthetic = 'sound/voice/shortwhistle_robot.ogg'
/decl/emote/audible/whistle/wolf
key = "wwhistle"
emote_message_1p = "You whistle inappropriately."
emote_message_3p = "whistles inappropriately."
emote_sound = 'sound/voice/wolfwhistle.ogg'
emote_message_synthetic_1p = "You beep inappropriately."
emote_message_synthetic_3p = "beeps inappropriately."
emote_sound_synthetic = 'sound/voice/wolfwhistle_robot.ogg'
/decl/emote/audible/whistle/summon
key = "swhistle"
emote_message_1p = "You whistle a tune."
emote_message_3p = "whistles a tune."
emote_sound = 'sound/voice/summon_whistle.ogg'
emote_message_synthetic_1p = "You whistle a robotic tune."
emote_message_synthetic_3p = "whistles a robotic tune."
emote_sound_synthetic = 'sound/voice/summon_whistle_robot.ogg'
@@ -0,0 +1,40 @@
/decl/emote/exertion/biological
key = "esweat"
emote_range = 4
emote_message_1p = "You are sweating heavily."
emote_message_3p = "is sweating heavily."
/decl/emote/exertion/biological/check_user(mob/living/user)
if(istype(user) && !user.isSynthetic())
return ..()
return FALSE
/decl/emote/exertion/biological/breath
key = "ebreath"
emote_message_1p = "You feel out of breath."
emote_message_3p = "looks out of breath."
/decl/emote/exertion/biological/pant
key = "epant"
emote_range = 3
message_type = AUDIBLE_MESSAGE
emote_message_1p = "You pant to catch your breath."
emote_message_3p = "pants for air."
emote_message_impaired = "You can see USER breathing heavily."
/decl/emote/exertion/synthetic
key = "ewhine"
emote_range = 3
message_type = AUDIBLE_MESSAGE
emote_message_1p = "You overstress your actuators."
emote_message_3p = "USER's actuators whine with strain."
/decl/emote/exertion/synthetic/check_user(mob/living/user)
if(istype(user) && user.isSynthetic())
return ..()
return FALSE
/decl/emote/exertion/synthetic/creak
key = "ecreak"
emote_message_1p = "Your chassis stress indicators spike."
emote_message_3p = "USER's joints creak with stress."
@@ -0,0 +1,33 @@
// Not specifically /human type because those won't allow FBPs to use them
/decl/emote/helper/vwag
key = "vwag"
emote_message_3p = ""
/decl/emote/helper/vwag/check_user(mob/living/carbon/human/user)
if(!istype(user) || (!user.tail_style || !user.tail_style.ani_state))
return FALSE
return ..()
/decl/emote/helper/vwag/do_emote(var/mob/living/carbon/human/user, var/extra_params)
if(user.toggle_tail(message = 1))
return ..()
/decl/emote/helper/vwag/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
return "[user.wagging ? "starts" : "stops"] wagging USER_THEIR tail."
/decl/emote/helper/vflap
key = "vflap"
emote_message_3p = ""
/decl/emote/helper/vflap/check_user(mob/living/carbon/human/user)
if(!istype(user) || (!user.wing_style || !user.wing_style.ani_state))
return FALSE
return ..()
/decl/emote/helper/vflap/do_emote(var/mob/living/carbon/human/user, var/extra_params)
if(user.toggle_wing(message = 1))
return ..()
/decl/emote/helper/vflap/get_emote_message_3p(var/mob/living/carbon/human/user, var/atom/target, var/extra_params)
return "[user.flapping ? "starts" : "stops"] flapping USER_THEIR wings."
+62
View File
@@ -0,0 +1,62 @@
/decl/emote/human
key = "vomit"
/decl/emote/human/check_user(var/mob/living/carbon/human/user)
return (istype(user))//VOREStation Edit - What does a mouth have to do with wagging?? && user.check_has_mouth() && !user.isSynthetic())
/decl/emote/human/do_emote(var/mob/living/carbon/human/user)
user.vomit()
/decl/emote/human/deathgasp
key = "deathgasp"
/decl/emote/human/deathgasp/do_emote(mob/living/carbon/human/user)
if(istype(user) && user.species.get_death_message(user) == DEATHGASP_NO_MESSAGE)
to_chat(user, SPAN_WARNING("Your species has no deathgasp."))
return
. = ..()
/decl/emote/human/deathgasp/get_emote_message_3p(var/mob/living/carbon/human/user)
return "USER [user.species.get_death_message(user)]"
/decl/emote/human/swish
key = "swish"
/decl/emote/human/swish/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_once()
/decl/emote/human/wag
key = "wag"
/decl/emote/human/wag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_start()
/decl/emote/human/sway
key = "sway"
/decl/emote/human/sway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_start()
/decl/emote/human/qwag
key = "qwag"
/decl/emote/human/qwag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_fast()
/decl/emote/human/fastsway
key = "fastsway"
/decl/emote/human/fastsway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_fast()
/decl/emote/human/swag
key = "swag"
/decl/emote/human/swag/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_stop()
/decl/emote/human/stopsway
key = "stopsway"
/decl/emote/human/stopsway/do_emote(var/mob/living/carbon/human/user)
user.animate_tail_stop()
+32
View File
@@ -0,0 +1,32 @@
/decl/emote/slime
key = "nomood"
var/mood
/decl/emote/slime/do_extra(var/mob/living/simple_mob/slime/user)
. = ..()
if(istype(user))
user.mood = mood
user.update_icon()
/decl/emote/slime/check_user(var/atom/user)
return isslime(user)
/decl/emote/slime/pout
key = "pout"
mood = "pout"
/decl/emote/slime/sad
key = "sad"
mood = "sad"
/decl/emote/slime/angry
key = "angry"
mood = "angry"
/decl/emote/slime/frown
key = "frown"
mood = "mischevous"
/decl/emote/slime/smile
key = "smile"
mood = ":3"
@@ -0,0 +1,51 @@
/decl/emote/audible/synth
key = "beep"
emote_message_3p = "beeps."
emote_sound = 'sound/machines/twobeep.ogg'
/decl/emote/audible/synth/check_user(var/mob/living/user)
if(istype(user) && user.isSynthetic())
return ..()
return FALSE
/decl/emote/audible/synth/ping
key = "ping"
emote_message_3p = "pings."
emote_sound = 'sound/machines/ping.ogg'
/decl/emote/audible/synth/buzz
key = "buzz"
emote_message_3p = "buzzes."
emote_sound = 'sound/machines/buzz-sigh.ogg'
/decl/emote/audible/synth/confirm
key = "confirm"
emote_message_3p = "emits an affirmative blip."
emote_sound = 'sound/machines/synth_yes.ogg'
/decl/emote/audible/synth/deny
key = "deny"
emote_message_3p = "emits a negative blip."
emote_sound = 'sound/machines/synth_no.ogg'
/decl/emote/audible/synth/security
key = "law"
emote_message_3p = "shows USER_HIS legal authorization barcode."
emote_message_3p_target = "shows TARGET USER_THEIR legal authorization barcode."
emote_sound = 'sound/voice/biamthelaw.ogg'
/decl/emote/audible/synth/security/check_user(var/mob/living/silicon/robot/user)
return (istype(user) && (istype(user.module, /obj/item/weapon/robot_module/robot/security) || istype(user.module, /obj/item/weapon/robot_module/robot/knine))) //VOREStation Add - knine module
/decl/emote/audible/synth/security/halt
key = "halt"
emote_message_3p = "USER's speakers skreech, \"Halt! Security!\"."
emote_sound = 'sound/voice/halt.ogg'
/decl/emote/audible/synth/dwoop
key = "dwoop"
emote_message_1p_target = "You chirp happily at TARGET!"
emote_message_1p = "You chirp happily."
emote_message_3p_target = "chirps happily at TARGET!"
emote_message_3p = "chirps happily."
emote_sound = 'sound/machines/dwoop.ogg'
+336
View File
@@ -0,0 +1,336 @@
/decl/emote/visible
key ="tail"
emote_message_3p = "waves USER_THEIR tail."
message_type = VISIBLE_MESSAGE
/decl/emote/visible/scratch
key = "scratch"
check_restraints = TRUE
emote_message_3p = "scratches."
/decl/emote/visible/drool
key ="drool"
emote_message_3p = "drools."
conscious = FALSE
/decl/emote/visible/nod
key ="nod"
emote_message_3p_target = "nods USER_THEIR head at TARGET."
emote_message_3p = "nods USER_THEIR head."
/decl/emote/visible/sway
key ="sway"
emote_message_3p = "sways around dizzily."
/decl/emote/visible/sulk
key ="sulk"
emote_message_3p = "sulks down sadly."
/decl/emote/visible/dance
key ="dance"
check_restraints = TRUE
emote_message_3p = "dances around happily."
/decl/emote/visible/roll
key ="roll"
check_restraints = TRUE
emote_message_3p = "rolls."
/decl/emote/visible/shake
key ="shake"
emote_message_3p = "shakes USER_THEIR head."
/decl/emote/visible/jump
key ="jump"
emote_message_3p = "jumps!"
/decl/emote/visible/shiver
key ="shiver"
emote_message_3p = "shivers."
conscious = FALSE
/decl/emote/visible/collapse
key ="collapse"
emote_message_3p = "collapses!"
/decl/emote/visible/collapse/do_extra(var/mob/user)
..()
if(istype(user))
user.Paralyse(2)
/decl/emote/visible/flash
key = "flash"
emote_message_3p = "flash USER_HIS lights quickly."
/decl/emote/visible/blink
key = "blink"
emote_message_3p = "blinks."
/decl/emote/visible/airguitar
key = "airguitar"
check_restraints = TRUE
emote_message_3p = "is strumming the air and headbanging like a safari chimp."
/decl/emote/visible/blink_r
key = "blink_r"
emote_message_3p = "blinks rapidly."
/decl/emote/visible/bow
key = "bow"
emote_message_3p_target = "bows to TARGET."
emote_message_3p = "bows."
/decl/emote/visible/salute
key = "salute"
emote_message_3p_target = "salutes TARGET."
emote_message_3p = "salutes."
check_restraints = TRUE
/decl/emote/visible/flap
key = "flap"
check_restraints = TRUE
emote_message_3p = "flaps USER_THEIR wings."
/decl/emote/visible/aflap
key = "aflap"
check_restraints = TRUE
emote_message_3p = "flaps USER_THEIR wings ANGRILY!"
/decl/emote/visible/eyebrow
key = "eyebrow"
emote_message_3p = "raises an eyebrow."
/decl/emote/visible/twitch
key = "twitch"
emote_message_3p = "twitches."
conscious = FALSE
/decl/emote/visible/twitch_v
key = "twitch_v"
emote_message_3p = "twitches violently."
conscious = FALSE
/decl/emote/visible/faint
key = "faint"
emote_message_3p = "faints."
/decl/emote/visible/faint/do_extra(var/mob/user)
. = ..()
if(istype(user) && !user.sleeping)
user.Sleeping(10)
/decl/emote/visible/frown
key = "frown"
emote_message_3p = "frowns."
/decl/emote/visible/blush
key = "blush"
emote_message_3p = "blushes."
/decl/emote/visible/wave
key = "wave"
emote_message_3p_target = "waves at TARGET."
emote_message_3p = "waves."
check_restraints = TRUE
/decl/emote/visible/glare
key = "glare"
emote_message_3p_target = "glares at TARGET."
emote_message_3p = "glares."
/decl/emote/visible/stare
key = "stare"
emote_message_3p_target = "stares at TARGET."
emote_message_3p = "stares."
/decl/emote/visible/look
key = "look"
emote_message_3p_target = "looks at TARGET."
emote_message_3p = "looks."
/decl/emote/visible/point
key = "point"
check_restraints = TRUE
emote_message_3p_target = "points to TARGET."
emote_message_3p = "points."
/decl/emote/visible/raise
key = "raise"
check_restraints = TRUE
emote_message_3p = "raises a hand."
/decl/emote/visible/grin
key = "grin"
emote_message_3p_target = "grins at TARGET."
emote_message_3p = "grins."
/decl/emote/visible/shrug
key = "shrug"
emote_message_3p = "shrugs."
/decl/emote/visible/smile
key = "smile"
emote_message_3p_target = "smiles at TARGET."
emote_message_3p = "smiles."
/decl/emote/visible/pale
key = "pale"
emote_message_3p = "goes pale for a second."
/decl/emote/visible/tremble
key = "tremble"
emote_message_3p = "trembles in fear!"
/decl/emote/visible/wink
key = "wink"
emote_message_3p_target = "winks at TARGET."
emote_message_3p = "winks."
/decl/emote/visible/hug
key = "hug"
check_restraints = TRUE
emote_message_3p_target = "hugs TARGET."
emote_message_3p = "hugs USER_SELF."
check_range = 1
/decl/emote/visible/dap
key = "dap"
check_restraints = TRUE
emote_message_3p_target = "gives daps to TARGET."
emote_message_3p = "sadly can't find anybody to give daps to, and daps USER_SELF."
/decl/emote/visible/bounce
key = "bounce"
emote_message_3p = "bounces in place."
/decl/emote/visible/jiggle
key = "jiggle"
emote_message_3p = "jiggles!"
/decl/emote/visible/lightup
key = "light"
emote_message_3p = "lights up for a bit, then stops."
/decl/emote/visible/vibrate
key = "vibrate"
emote_message_3p = "vibrates!"
/decl/emote/visible/deathgasp_robot
key = "deathgasp"
emote_message_3p = "shudders violently for a moment, then becomes motionless, USER_THEIR eyes slowly darkening."
/decl/emote/visible/handshake
key = "handshake"
check_restraints = TRUE
emote_message_3p_target = "shakes hands with TARGET."
emote_message_3p = "shakes hands with USER_SELF."
check_range = 1
/decl/emote/visible/handshake/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(target && !user.Adjacent(target))
return "holds out USER_THEIR hand out to TARGET."
return ..()
/decl/emote/visible/signal
key = "signal"
emote_message_3p_target = "signals at TARGET."
emote_message_3p = "signals."
check_restraints = TRUE
/decl/emote/visible/signal/check_user(atom/user)
return ismob(user)
/decl/emote/visible/signal/get_emote_message_3p(var/mob/living/user, var/atom/target, var/extra_params)
if(istype(user) && (!user.get_active_hand() || !user.get_inactive_hand()))
var/t1 = round(text2num(extra_params))
if(isnum(t1) && t1 <= 5)
return "raises [t1] finger\s."
return .. ()
/decl/emote/visible/afold
key = "afold"
check_restraints = TRUE
emote_message_3p = "folds USER_THEIR arms."
/decl/emote/visible/alook
key = "alook"
emote_message_3p = "looks away."
/decl/emote/visible/hbow
key = "hbow"
emote_message_3p = "bows USER_THEIR head."
/decl/emote/visible/hip
key = "hip"
check_restraints = TRUE
emote_message_3p = "puts USER_THEIR hands on USER_THEIR hips."
/decl/emote/visible/holdup
key = "holdup"
check_restraints = TRUE
emote_message_3p = "holds up USER_THEIR palms."
/decl/emote/visible/hshrug
key = "hshrug"
emote_message_3p = "gives a half shrug."
/decl/emote/visible/crub
key = "crub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR chin."
/decl/emote/visible/eroll
key = "eroll"
emote_message_3p = "rolls USER_THEIR eyes."
emote_message_3p_target = "rolls USER_THEIR eyes at TARGET."
/decl/emote/visible/erub
key = "erub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR eyes."
/decl/emote/visible/fslap
key = "fslap"
check_restraints = TRUE
emote_message_3p = "slaps USER_THEIR forehead."
/decl/emote/visible/ftap
key = "ftap"
emote_message_3p = "taps USER_THEIR foot."
/decl/emote/visible/hrub
key = "hrub"
check_restraints = TRUE
emote_message_3p = "rubs USER_THEIR hands together."
/decl/emote/visible/hspread
key = "hspread"
check_restraints = TRUE
emote_message_3p = "spreads USER_THEIR hands."
/decl/emote/visible/pocket
key = "pocket"
check_restraints = TRUE
emote_message_3p = "shoves USER_THEIR hands in USER_THEIR pockets."
/decl/emote/visible/rsalute
key = "rsalute"
check_restraints = TRUE
emote_message_3p = "returns the salute."
/decl/emote/visible/rshoulder
key = "rshoulder"
emote_message_3p = "rolls USER_THEIR shoulders."
/decl/emote/visible/squint
key = "squint"
emote_message_3p = "squints."
emote_message_3p_target = "squints at TARGET."
/decl/emote/visible/tfist
key = "tfist"
emote_message_3p = "tightens USER_THEIR hands into fists."
/decl/emote/visible/tilt
key = "tilt"
emote_message_3p = "tilts USER_THEIR head."
@@ -0,0 +1,76 @@
/decl/emote/visible/spin
key = "spin"
check_restraints = TRUE
emote_message_3p = "spins!"
/decl/emote/visible/spin/do_extra(mob/user)
if(istype(user))
user.spin(20, 1)
/decl/emote/visible/sidestep
key = "sidestep"
check_restraints = TRUE
emote_message_3p = "steps rhythmically and moves side to side."
/decl/emote/visible/sidestep/do_extra(mob/user)
if(istype(user))
animate(user, pixel_x = 5, time = 5)
sleep(3)
animate(user, pixel_x = -5, time = 5)
animate(pixel_x = user.default_pixel_x, pixel_y = user.default_pixel_x, time = 2)
/decl/emote/visible/flip
key = "flip"
emote_message_1p = "You do a flip!"
emote_message_3p = "does a flip!"
emote_sound = 'sound/effects/bodyfall4.ogg'
/decl/emote/visible/flip/do_extra(mob/user)
. = ..()
if(istype(user))
user.SpinAnimation(7,1)
/decl/emote/visible/floorspin
key = "floorspin"
emote_message_1p = "You spin around on the floor!"
emote_message_3p = "spins around on the floor!"
var/static/list/spin_dirs = list(
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH,
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH,
NORTH,
SOUTH,
EAST,
WEST,
EAST,
SOUTH
)
/decl/emote/visible/floorspin/proc/spin_dir(var/mob/user)
set waitfor = FALSE
for(var/i in spin_dirs)
user.set_dir(i)
sleep(1)
if(QDELETED(user))
return
/decl/emote/visible/floorspin/proc/spin_anim(var/mob/user)
set waitfor = FALSE
sleep(1)
if(!QDELETED(user))
user.SpinAnimation(10,1)
/decl/emote/visible/floorspin/do_extra(mob/user)
. = ..()
if(istype(user))
spin_dir(user)
spin_anim(user)
@@ -0,0 +1,10 @@
/decl/emote/visible/vomit
key = "vomit"
/decl/emote/visible/vomit/do_emote(var/atom/user, var/extra_params)
if(isliving(user))
var/mob/living/M = user
if(!M.isSynthetic())
M.vomit()
return
to_chat(src, SPAN_WARNING("You are unable to vomit."))
@@ -0,0 +1,7 @@
/decl/emote/visible/mlem
key = "mlem"
emote_message_3p = "mlems USER_THEIR tongue up over USER_THEIR nose. Mlem."
/decl/emote/visible/blep
key = "blep"
emote_message_3p = "bleps USER_THEIR tongue out. Blep."
+181
View File
@@ -0,0 +1,181 @@
// Note about emote messages:
// - USER / TARGET will be replaced with the relevant name, in bold.
// - USER_THEM / TARGET_THEM / USER_THEIR / TARGET_THEIR will be replaced with a
// gender-appropriate version of the same.
// - Impaired messages do not do any substitutions.
/decl/emote
var/key // Command to use emote ie. '*[key]'
var/emote_message_1p // First person message ('You do a flip!')
var/emote_message_3p // Third person message ('Urist McBackflip does a flip!')
var/emote_message_synthetic_1p // First person message for robits.
var/emote_message_synthetic_3p // Third person message for robits.
var/emote_message_impaired // Deaf/blind message ('You hear someone flipping out.', 'You see someone opening and closing their mouth')
var/emote_message_1p_target // 'You do a flip at Urist McTarget!'
var/emote_message_3p_target // 'Urist McShitter does a flip at Urist McTarget!'
var/emote_message_synthetic_1p_target // First person targeted message for robits.
var/emote_message_synthetic_3p_target // Third person targeted message for robits.
var/emote_message_radio // A message to send over the radio if one picks up this emote.
var/emote_message_radio_synthetic // As above, but for synthetics.
var/emote_message_muffled // A message to show if the emote is audible and the user is muzzled.
var/list/emote_sound // A sound for the emote to play.
// Can either be a single sound, a list of sounds to pick from, or an
// associative array of gender to single sounds/a list of sounds.
var/list/emote_sound_synthetic // As above, but used when check_synthetic() is true.
var/emote_volume = 50 // Volume of sound to play.
var/emote_volume_synthetic = 50 // As above, but used when check_synthetic() is true.
var/message_type = VISIBLE_MESSAGE // Audible/visual flag
var/check_restraints // Can this emote be used while restrained?
var/check_range // falsy, or a range outside which the emote will not work
var/conscious = TRUE // Do we need to be awake to emote this?
var/emote_range = 0 // If >0, restricts emote visibility to viewers within range.
/decl/emote/proc/get_emote_message_1p(var/atom/user, var/atom/target, var/extra_params)
if(target)
if(emote_message_synthetic_1p_target && check_synthetic(user))
return emote_message_synthetic_1p_target
return emote_message_1p_target
if(emote_message_synthetic_1p && check_synthetic(user))
return emote_message_synthetic_1p
return emote_message_1p
/decl/emote/proc/get_emote_message_3p(var/atom/user, var/atom/target, var/extra_params)
if(target)
if(emote_message_synthetic_3p_target && check_synthetic(user))
return emote_message_synthetic_3p_target
return emote_message_3p_target
if(emote_message_synthetic_3p && check_synthetic(user))
return emote_message_synthetic_3p
return emote_message_3p
/decl/emote/proc/get_emote_sound(var/atom/user)
if(check_synthetic(user) && emote_sound_synthetic)
return list(
"sound" = emote_sound_synthetic,
"vol" = emote_volume_synthetic
)
if(emote_sound)
return list(
"sound" = emote_sound,
"vol" = emote_volume
)
/decl/emote/proc/do_emote(var/atom/user, var/extra_params)
if(ismob(user) && check_restraints)
var/mob/M = user
if(M.restrained())
to_chat(user, SPAN_WARNING("You are restrained and cannot do that."))
return
var/atom/target
if(can_target() && extra_params)
extra_params = lowertext(extra_params)
for(var/atom/thing in view(user))
if(extra_params == lowertext(thing.name))
target = thing
break
if(target && target != user && check_range)
if (get_dist(user, target) > check_range)
to_chat(user, SPAN_WARNING("\The [target] is too far away."))
return
var/use_1p = get_emote_message_1p(user, target, extra_params)
if(use_1p)
if(target)
use_1p = replace_target_tokens(use_1p, target)
use_1p = "<span class='emote'>[capitalize(replace_user_tokens(use_1p, user))]</span>"
var/use_3p = get_emote_message_3p(user, target, extra_params)
if(use_3p)
if(target)
use_3p = replace_target_tokens(use_3p, target)
use_3p = "<span class='emote'><b>\The [user]</b> [replace_user_tokens(use_3p, user)]</span>"
var/use_radio = get_radio_message(user)
if(use_radio)
if(target)
use_radio = replace_target_tokens(use_radio, target)
use_radio = replace_user_tokens(use_radio, user)
var/use_range = emote_range
if (!use_range)
use_range = world.view
if(ismob(user))
var/mob/M = user
if(message_type == AUDIBLE_MESSAGE)
if(isliving(user))
var/mob/living/L = user
if(L.silent)
M.visible_message(message = "[user] opens their mouth silently!", self_message = "You cannot say anything!", blind_message = emote_message_impaired)
return
else
M.audible_message(message = use_3p, self_message = use_1p, deaf_message = emote_message_impaired, hearing_distance = use_range, radio_message = use_radio)
else
M.visible_message(message = use_3p, self_message = use_1p, blind_message = emote_message_impaired, range = use_range)
do_extra(user, target)
do_sound(user)
/decl/emote/proc/replace_target_tokens(var/msg, var/atom/target)
. = msg
if(istype(target))
var/datum/gender/target_gender = gender_datums[target.get_visible_gender()]
. = replacetext(., "TARGET_THEM", target_gender.him)
. = replacetext(., "TARGET_THEIR", target_gender.his)
. = replacetext(., "TARGET_SELF", target_gender.himself)
. = replacetext(., "TARGET", "<b>\the [target]</b>")
/decl/emote/proc/replace_user_tokens(var/msg, var/atom/user)
. = msg
if(istype(user))
var/datum/gender/user_gender = gender_datums[user.get_visible_gender()]
. = replacetext(., "USER_THEM", user_gender.him)
. = replacetext(., "USER_THEIR", user_gender.his)
. = replacetext(., "USER_SELF", user_gender.himself)
. = replacetext(., "USER", "<b>\the [user]</b>")
/decl/emote/proc/get_radio_message(var/atom/user)
if(emote_message_radio_synthetic && check_synthetic(user))
return emote_message_radio_synthetic
return emote_message_radio
/decl/emote/proc/do_extra(var/atom/user, var/atom/target)
return
/decl/emote/proc/do_sound(var/atom/user)
var/list/use_sound = get_emote_sound(user)
if(!islist(use_sound) || length(use_sound) < 2)
return
var/sound_to_play = use_sound["sound"]
if(!sound_to_play)
return
if(islist(sound_to_play))
if(sound_to_play[user.gender])
sound_to_play = sound_to_play[user.gender]
if(islist(sound_to_play) && length(sound_to_play))
sound_to_play = pick(sound_to_play)
if(sound_to_play)
playsound(user.loc, sound_to_play, use_sound["vol"], 0, preference = /datum/client_preference/emote_noises) //VOREStation Add - Preference
/decl/emote/proc/check_user(var/atom/user)
return TRUE
/decl/emote/proc/can_target()
return (emote_message_1p_target || emote_message_3p_target)
/decl/emote/dd_SortValue()
return key
/decl/emote/proc/check_synthetic(var/mob/living/user)
. = istype(user) && user.isSynthetic()
if(!. && ishuman(user) && message_type == AUDIBLE_MESSAGE)
var/mob/living/carbon/human/H = user
if(H.should_have_organ(O_LUNGS))
var/obj/item/organ/internal/lungs/L = H.internal_organs_by_name[O_LUNGS]
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
. = TRUE
+183
View File
@@ -0,0 +1,183 @@
/mob/proc/can_emote(var/emote_type)
return (stat == CONSCIOUS)
/mob/living/can_emote(var/emote_type)
return (..() && !(silent && emote_type == AUDIBLE_MESSAGE))
/mob/proc/emote(var/act, var/m_type, var/message)
set waitfor = FALSE
// s-s-snowflake
if(src.stat == DEAD && act != "deathgasp")
return
if(usr == src) //client-called emote
if (client && (client.prefs.muted & MUTE_IC))
to_chat(src, "<span class='warning'>You cannot send IC messages (muted).</span>")
return
if(act == "help")
to_chat(src,"<b>Usable emotes:</b> [english_list(usable_emotes)].")
return
if(!can_emote(m_type))
to_chat(src, SPAN_WARNING("You cannot currently [m_type == AUDIBLE_MESSAGE ? "audibly" : "visually"] emote!"))
return
if(act == "me")
return custom_emote(m_type, message)
if(act == "custom")
if(!message)
message = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
if(!message)
return
if (!m_type)
if(alert(src, "Is this an audible emote?", "Emote", "Yes", "No") == "No")
m_type = VISIBLE_MESSAGE
else
m_type = AUDIBLE_MESSAGE
return custom_emote(m_type, message)
var/splitpoint = findtext(act, " ")
if(splitpoint > 0)
var/tempstr = act
act = copytext(tempstr,1,splitpoint)
message = copytext(tempstr,splitpoint+1,0)
//VOREStation Add - NIF soulcatcher shortcuts
if(act == "nsay")
return nsay(message)
if(act == "nme")
return nme(message)
//VOREStation Add End
var/decl/emote/use_emote = usable_emotes[act]
if(!use_emote)
to_chat(src, SPAN_WARNING("Unknown emote '[act]'. Type <b>say *help</b> for a list of usable emotes."))
return
if(m_type != use_emote.message_type && use_emote.conscious && stat != CONSCIOUS)
return
if(use_emote.message_type == AUDIBLE_MESSAGE && is_muzzled())
audible_message("<b>\The [src]</b> [use_emote.emote_message_muffled || "makes a muffled sound."]")
return
else
use_emote.do_emote(src, message)
for (var/obj/item/weapon/implant/I in src)
if (I.implanted)
I.trigger(act, src)
/mob/proc/format_emote(var/emoter = null, var/message = null)
var/pretext
var/subtext
var/nametext
var/end_char
var/start_char
var/name_anchor
if(!message || !emoter)
return
message = html_decode(message)
name_anchor = findtext(message, "*")
if(name_anchor > 0) // User supplied emote with visible_emote token (default ^)
pretext = copytext(message, 1, name_anchor)
subtext = copytext(message, name_anchor + 1, length(message) + 1)
else
// No token. Just the emote as usual.
subtext = message
// Oh shit, we got this far! Let's see... did the user attempt to use more than one token?
if(findtext(subtext, "*"))
// abort abort!
to_chat(emoter, SPAN_WARNING("You may use only one \"["*"]\" symbol in your emote."))
return
if(pretext)
// Add a space at the end if we didn't already supply one.
end_char = copytext(pretext, length(pretext), length(pretext) + 1)
if(end_char != " ")
pretext += " "
// Grab the last character of the emote message.
end_char = copytext(subtext, length(subtext), length(subtext) + 1)
if(!(end_char in list(".", "?", "!", "\"", "-", "~"))) // gotta include ~ for all you fucking weebs
// No punctuation supplied. Tack a period on the end.
subtext += "."
// Add a space to the subtext, unless it begins with an apostrophe or comma.
if(subtext != ".")
// First, let's get rid of any existing space, to account for sloppy emoters ("X, ^ , Y")
subtext = trim_left(subtext)
start_char = copytext(subtext, 1, 2)
if(start_char != "," && start_char != "'")
subtext = " " + subtext
pretext = capitalize(html_encode(pretext))
nametext = html_encode(nametext)
subtext = html_encode(subtext)
// Store the player's name in a nice bold, naturalement
nametext = "<B>[emoter]</B>"
return pretext + nametext + subtext
/mob/proc/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message, var/range = world.view)
if((usr && stat) || (!use_me && usr == src))
to_chat(src, "You are unable to emote.")
return
var/input
if(!message)
input = sanitize(input(src,"Choose an emote to display.") as text|null)
else
input = message
if(input)
message = format_emote(src, message)
else
return
if(input)
log_emote(message,src) //Log before we add junk
message = "<span class='emote'><B>[src]</B> [input]</span>"
else
return
if(message)
message = encode_html_emphasis(message)
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
// Maybe some people are okay with that.
var/turf/T = get_turf(src)
if(!T) return
var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE)
var/list/m_viewers = in_range["mobs"]
var/list/o_viewers = in_range["objs"]
for(var/mob in m_viewers)
var/mob/M = mob
spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes.
if(M)
if(isobserver(M))
message = "<span class='emote'><B>[src]</B> ([ghost_follow_link(src, M)]) [input]</span>"
M.show_message(message, m_type)
for(var/obj in o_viewers)
var/obj/O = obj
spawn(0)
if(O)
O.see_emote(src, message, m_type)
// Specific mob type exceptions below.
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
var/obj/machinery/hologram/holopad/T = src.holo
if(T && T.masters[src]) //Is the AI using a holopad?
src.holopad_emote(message)
else //Emote normally, then.
..()
+75
View File
@@ -0,0 +1,75 @@
//////////////////////Bepis Drinks (04/29/2021)//////////////////////
/obj/item/weapon/reagent_containers/food/drinks/cans/bepis
name = "\improper Bepis"
desc = "It has a smell of 'off-brand' whenever you open it..."
description_fluff = "Puts the 'B' in Best Soda! Bepis is the number one competitor to \
Space Cola and has vendors scattered across the frontier. While the drink is not as \
popular as Space Cola, many people across known space enjoy the sweet beverage."
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "bepis"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/bepis/Initialize()
. = ..()
reagents.add_reagent("bepis", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew
name = "\improper Astro Dew Spring Water"
desc = "A can of refreshing 'spring' water! Or so the can claims."
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "watercan"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/astrodew/Initialize()
. = ..()
reagents.add_reagent("water", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee
name = "\improper Café Del Consumir"
desc = "A can of deliciously sweet iced coffee that originates from Earth."
description_fluff = "Café Del Consumir originates from a small coffee brewery in México \
that still opperates to this day. Café Del Consumir prides itself on being true to form \
and retaining its original recipe. They've been producing and selling thier product across \
the galaxy for decades without fail. NanoTrasen has attempted to by out the small company for \
years now, howerver all attempts they've made have failed."
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "coffeecan"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/icecoffee/Initialize()
. = ..()
reagents.add_reagent("icecoffee", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz
name = "\improper Buzz Fuzz"
desc = "Uses real honey, making it a sweet tooth's dream drink."
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "buzzfuzz"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/buzz/Initialize()
. = ..()
reagents.add_reagent("buzz_fuzz", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler
name = "\improper Shambler's Juice"
desc = "~Shake me up some of that Shambler's Juice!~"
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "shambler"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/shambler/Initialize()
. = ..()
reagents.add_reagent("shamblers", 30)
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry
name = "\improper Sprited Cranberry"
desc = "A delicious blend of fresh cranberry juice and various spices, the perfect drink."
icon = 'icons/obj/drinks_vr.dmi'
icon_state = "cranberry"
center_of_mass = list("x"=16, "y"=10)
/obj/item/weapon/reagent_containers/food/drinks/cans/cranberry/Initialize()
. = ..()
reagents.add_reagent("sprited_cranberry", 30)
+1 -1
View File
@@ -73,7 +73,7 @@
if(src.loc && istype(loc,/obj/belly) || istype(loc,/obj/item/device/dogborg/sleeper)) deathmessage = "no message" //VOREStation Add - Prevents death messages from inside mobs
facing_dir = null
if(!gibbed && deathmessage != "no message") // This is gross, but reliable. Only brains use it.
if(!gibbed && deathmessage != DEATHGASP_NO_MESSAGE)
src.visible_message("<b>\The [src.name]</b> [deathmessage]")
set_stat(DEAD)
+2 -57
View File
@@ -1,64 +1,9 @@
// All mobs should have custom emote, really..
//m_type == 1 --> visual.
//m_type == 2 --> audible
/mob/proc/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
if(stat || !use_me && usr == src)
to_chat(src, "You are unable to emote.")
return
var/muzzled = is_muzzled()
if(m_type == 2 && muzzled) return
var/input
if(!message)
input = sanitize_or_reflect(input(src,"Choose an emote to display.") as text|null, src) //VOREStation Edit - Reflect too long messages, within reason
else
input = message
if(input)
log_emote(message,src) //Log before we add junk
message = "<span class='emote'><B>[src]</B> [input]</span>"
else
return
if (message)
message = encode_html_emphasis(message)
// Hearing gasp and such every five seconds is not good emotes were not global for a reason.
// Maybe some people are okay with that.
var/turf/T = get_turf(src)
if(!T) return
var/list/in_range = get_mobs_and_objs_in_view_fast(T,range,2,remote_ghosts = client ? TRUE : FALSE)
var/list/m_viewers = in_range["mobs"]
var/list/o_viewers = in_range["objs"]
for(var/mob in m_viewers)
var/mob/M = mob
spawn(0) // It's possible that it could be deleted in the meantime, or that it runtimes.
if(M)
if(isobserver(M))
//VOREStation Edit Start
var/mob/observer/dead/D = M
if(ckey || (src in view(D)))
M.show_message(message, m_type)
message = "<span class='emote'><B>[src]</B> ([ghost_follow_link(src, M)]) [input]</span>"
else
M.show_message(message, m_type)
//VOREStation Edit End
for(var/obj in o_viewers)
var/obj/O = obj
spawn(0)
if(O)
O.see_emote(src, message, m_type)
// Shortcuts for above proc
/mob/proc/visible_emote(var/act_desc)
custom_emote(1, act_desc)
custom_emote(VISIBLE_MESSAGE, act_desc)
/mob/proc/audible_emote(var/act_desc)
custom_emote(2, act_desc)
custom_emote(AUDIBLE_MESSAGE, act_desc)
/mob/proc/emote_dead(var/message)
@@ -1,3 +1,29 @@
var/list/_nymph_default_emotes = list(
/decl/emote/visible,
/decl/emote/visible/scratch,
/decl/emote/visible/drool,
/decl/emote/visible/nod,
/decl/emote/visible/sway,
/decl/emote/visible/sulk,
/decl/emote/visible/twitch,
/decl/emote/visible/dance,
/decl/emote/visible/roll,
/decl/emote/visible/shake,
/decl/emote/visible/jump,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible/hiss,
/decl/emote/audible,
/decl/emote/audible/scretch,
/decl/emote/audible/choke,
/decl/emote/audible/gnarl,
/decl/emote/audible/bug_hiss,
/decl/emote/audible/bug_chitter,
/decl/emote/audible/chirp
)
/mob/living/carbon/alien/diona
name = "diona nymph"
voice_name = "diona nymph"
@@ -20,6 +46,9 @@
holder_type = /obj/item/weapon/holder/diona
var/obj/item/hat
/mob/living/carbon/alien/diona/get_default_emotes()
return global._nymph_default_emotes
/mob/living/carbon/alien/diona/Initialize()
. = ..()
species = GLOB.all_species[SPECIES_DIONA]
+30 -107
View File
@@ -1,108 +1,31 @@
/mob/living/carbon/alien/emote(var/act, var/m_type=1, var/message = null)
var/param = null
if(findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
var/list/_alien_default_emotes = list(
/decl/emote/visible,
/decl/emote/visible/scratch,
/decl/emote/visible/drool,
/decl/emote/visible/nod,
/decl/emote/visible/sway,
/decl/emote/visible/sulk,
/decl/emote/visible/twitch,
/decl/emote/visible/twitch_v,
/decl/emote/visible/dance,
/decl/emote/visible/roll,
/decl/emote/visible/shake,
/decl/emote/visible/jump,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible/hiss,
/decl/emote/audible,
/decl/emote/audible/deathgasp_alien,
/decl/emote/audible/whimper,
/decl/emote/audible/gasp,
/decl/emote/audible/scretch,
/decl/emote/audible/choke,
/decl/emote/audible/moan,
/decl/emote/audible/gnarl,
/decl/emote/audible/chirp
)
var/muzzled = is_muzzled()
act = lowertext(act)
switch(act)
if("sign")
if(!restrained())
var/num = null
if(text2num(param))
num = "the number [text2num(param)]"
if(num)
message = "<B>[src]</B> signs [num]."
m_type = 1
if("burp")
if(!muzzled)
message = "<B>[src]</B> burps."
m_type = 2
if("deathgasp")
message = "<B>[src]</B> lets out a waning guttural screech, green blood bubbling from its maw."
m_type = 2
if("scratch")
if(!restrained())
message = "<B>[src]</B> scratches."
m_type = 1
if("whimper")
if(!muzzled)
message = "<B>[src]</B> whimpers."
m_type = 2
if("tail")
message = "<B>[src]</B> waves its tail."
m_type = 1
if("gasp")
message = "<B>[src]</B> gasps."
m_type = 2
if("shiver")
message = "<B>[src]</B> shivers."
m_type = 2
if("drool")
message = "<B>[src]</B> drools."
m_type = 1
if("scretch")
if(!muzzled)
message = "<B>[src]</B> scretches."
m_type = 2
if("choke")
message = "<B>[src]</B> chokes."
m_type = 2
if("moan")
message = "<B>[src]</B> moans!"
m_type = 2
if("nod")
message = "<B>[src]</B> nods its head."
m_type = 1
// if("sit")
// message = "<B>[src]</B> sits down." //Larvan can't sit down, /N
// m_type = 1
if("sway")
message = "<B>[src]</B> sways around dizzily."
m_type = 1
if("sulk")
message = "<B>[src]</B> sulks down sadly."
m_type = 1
if("twitch")
message = "<B>[src]</B> twitches."
m_type = 1
if("twitch_v")
message = "<B>[src]</B> twitches violently."
m_type = 1
if("dance")
if(!restrained())
message = "<B>[src]</B> dances around happily."
m_type = 1
if("roll")
if(!restrained())
message = "<B>[src]</B> rolls."
m_type = 1
if("shake")
message = "<B>[src]</B> shakes its head."
m_type = 1
if("gnarl")
if(!muzzled)
message = "<B>[src]</B> gnarls and shows its teeth.."
m_type = 2
if("jump")
message = "<B>[src]</B> jumps!"
m_type = 1
if("hiss_")
message = "<B>[src]</B> hisses softly."
m_type = 1
if("collapse")
Paralyse(2)
message = "<B>[src]</B> collapses!"
m_type = 2
if("chirp")
message = "<B>[src]</B> chirps!"
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0)
m_type = 2
if("help")
to_chat(src, "<span class='filter_say'>burp, chirp, choke, collapse, dance, drool, gasp, shiver, gnarl, jump, moan, nod, roll, scratch,\nscretch, shake, sign-#, sulk, sway, tail, twitch, whimper</span>")
if(!stat)
..(act, m_type, message)
/mob/living/carbon/alien/get_default_emotes()
. = global._alien_default_emotes
@@ -3,7 +3,7 @@
container.icon_state = "mmi_dead"
return ..(gibbed,"beeps shrilly as the MMI flatlines!")
else
return ..(gibbed,"no message")
return ..(gibbed, DEATHGASP_NO_MESSAGE)
/mob/living/carbon/brain/gib()
if(istype(container, /obj/item/device/mmi))
+15 -45
View File
@@ -1,47 +1,17 @@
/mob/living/carbon/brain/emote(var/act,var/m_type=1,var/message = null)
if(!(container && istype(container, /obj/item/device/mmi)))//No MMI, no emotes
return
var/list/_brain_default_emotes = list(
/decl/emote/audible/alarm,
/decl/emote/audible/alert,
/decl/emote/audible/notice,
/decl/emote/audible/whistle,
/decl/emote/audible/synth,
/decl/emote/audible/beep,
/decl/emote/audible/boop,
/decl/emote/visible/blink,
/decl/emote/visible/flash
)
if(findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
act = copytext(act, 1, t1)
/mob/living/carbon/brain/can_emote()
return (istype(container, /obj/item/device/mmi) && ..())
if(stat == DEAD)
return
switch(act)
if("alarm")
to_chat(src, "You sound an alarm.")
message = "<B>[src]</B> sounds an alarm."
m_type = 2
if("alert")
to_chat(src, "You let out a distressed noise.")
message = "<B>[src]</B> lets out a distressed noise."
m_type = 2
if("notice")
to_chat(src, "You play a loud tone.")
message = "<B>[src]</B> plays a loud tone."
m_type = 2
if("flash")
message = "The lights on <B>[src]</B> flash quickly."
m_type = 1
if("blink")
message = "<B>[src]</B> blinks."
m_type = 1
if("whistle")
to_chat(src, "You whistle.")
message = "<B>[src]</B> whistles."
m_type = 2
if("beep")
to_chat(src, "You beep.")
message = "<B>[src]</B> beeps."
m_type = 2
if("boop")
to_chat(src, "You boop.")
message = "<B>[src]</B> boops."
m_type = 2
if("help")
to_chat(src, "<span class='filter_say'>alarm, alert, notice, flash, blink, whistle, beep, boop</span>")
if(!stat)
..(act, m_type, message)
/mob/living/carbon/brain/get_default_emotes()
return global._brain_default_emotes
+137 -840
View File
@@ -1,843 +1,140 @@
/mob/living/carbon/human/emote(var/act,var/m_type=1,var/message = null)
var/param = null
var/datum/gender/T = gender_datums[get_visible_gender()]
if(findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
var/muzzled = is_muzzled()
//var/m_type = 1
for(var/obj/item/organ/O in organs)
for(var/obj/item/weapon/implant/I in O)
if(I.implanted)
I.trigger(act, src)
if(stat == DEAD && (act != "deathgasp"))
return
if(attempt_vr(src, "handle_emote_vr", list(act, m_type, message))) return //VOREStation Add - Custom Emote Handler
switch(act)
if("airguitar")
if(!restrained())
message = "is strumming the air and headbanging like a safari chimp."
m_type = 1
//Machine-only emotes
if("ping", "beep", "buzz", "yes", "ye", "dwoop", "no", "rcough", "rsneeze")
if(!isSynthetic())
to_chat(src, "<span class='warning'>You are not a synthetic.</span>")
return
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
var/display_msg = "beeps"
var/use_sound = 'sound/machines/twobeep.ogg'
if(act == "buzz")
display_msg = "buzzes"
use_sound = 'sound/machines/buzz-sigh.ogg'
else if(act == "ping")
display_msg = "pings"
use_sound = 'sound/machines/ping.ogg'
else if(act == "yes" || act == "ye")
display_msg = "emits an affirmative blip"
use_sound = 'sound/machines/synth_yes.ogg'
else if(act == "dwoop")
display_msg = "chirps happily"
use_sound = 'sound/machines/dwoop.ogg'
else if(act == "no")
display_msg = "emits a negative blip"
use_sound = 'sound/machines/synth_no.ogg'
else if(act == "rcough")
display_msg = "emits a robotic cough"
if(get_gender() == FEMALE)
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
else
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
else if(act == "rsneeze")
display_msg = "emits a robotic sneeze"
if(get_gender() == FEMALE)
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
else
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
if(param)
message = "[display_msg] at [param]."
else
message = "[display_msg]."
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
m_type = 1
//Promethean-only emotes
if("squish")
/* VOREStation Removal Start - Eh. People can squish maybe.
if(species.bump_flag != SLIME) //This should definitely do it.
to_chat(src, "<span class='warning'>You are not a slime thing!</span>")
return
*/ //VOREStation Removal End
playsound(src, 'sound/effects/slime_squish.ogg', 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add //Credit to DrMinky (freesound.org) for the sound.
message = "squishes."
m_type = 1
if("chirp")
/* VOREStation Removal Start - Eh. People can chirp maybe.
if ((species.bump_flag != SLIME) && (species.name != SPECIES_DIONA))
to_chat(src, "<span class='warning'>You are not a diona or slime!</span>")
return
*/ //VOREStation Removal End
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0)
message = "chirps."
m_type = 2
//Skrell-only emotes
if("warble")
if(species.name != SPECIES_SKRELL)
to_chat(src, "<span class='warning'>You are not a Skrell!</span>")
return
playsound(src, 'sound/effects/warble.ogg', 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
message = "warbles."
m_type = 2
if("blink")
message = "blinks."
m_type = 1
if("blink_r")
message = "blinks rapidly."
m_type = 1
if("bow")
if(!buckled)
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "bows to [param]."
else
message = "bows."
m_type = 1
if("custom")
var/input = sanitize(input("Choose an emote to display.") as text|null)
if(!input)
return
var/input2 = input("Is this a visible or hearable emote?") in list("Visible","Hearable")
if(input2 == "Visible")
m_type = 1
else if(input2 == "Hearable")
if(miming)
return
m_type = 2
else
alert("Unable to use this emote, must be either hearable or visible.")
return
return custom_emote(m_type, input)
if("me")
//if(silent && silent > 0 && findtext(message,"\"",1, null) > 0)
// return //This check does not work and I have no idea why, I'm leaving it in for reference.
if(client)
if(client.prefs.muted & MUTE_IC)
to_chat(src, "<font color='red'>You cannot send IC messages (muted).</font>")
return
if(stat)
return
if(!(message))
return
return custom_emote(m_type, message)
if("salute")
if(!buckled)
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "salutes to [param]."
else
message = "salutes."
m_type = 1
if("choke")
if(miming)
message = "clutches [T.his] throat desperately!"
m_type = 1
else
if(!muzzled)
message = "chokes!"
m_type = 2
else
message = "makes a strong noise."
m_type = 2
if("clap")
if(!restrained())
message = "claps."
playsound(src, 'sound/misc/clapping.ogg')
m_type = 2
if(miming)
m_type = 1
if("flap")
if(!restrained())
message = "flaps [T.his] wings."
m_type = 2
if(miming)
m_type = 1
if("aflap")
if(!restrained())
message = "flaps [T.his] wings ANGRILY!"
m_type = 2
if(miming)
m_type = 1
if("drool")
message = "drools."
m_type = 1
if("eyebrow")
message = "raises an eyebrow."
m_type = 1
if("chuckle")
if(miming)
message = "appears to chuckle."
m_type = 1
else
if(!muzzled)
message = "chuckles."
m_type = 2
else
message = "makes a noise."
m_type = 2
if("twitch")
message = "twitches."
m_type = 1
if("twitch_v")
message = "twitches violently."
m_type = 1
if("faint")
message = "faints."
if(sleeping)
return //Can't faint while asleep
Sleeping(10)
m_type = 1
if("cough", "coughs")
if(miming)
message = "appears to cough!"
m_type = 1
else
if(!muzzled)
var/robotic = 0
m_type = 2
if(should_have_organ(O_LUNGS))
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
robotic = 1
if(!robotic && !isSynthetic())
message = "coughs!"
if(get_gender() == FEMALE)
if(species.female_cough_sounds)
playsound(src, pick(species.female_cough_sounds), 120, preference = /datum/client_preference/emote_noises) //VOREStation Add
else
if(species.male_cough_sounds)
playsound(src, pick(species.male_cough_sounds), 120, preference = /datum/client_preference/emote_noises) //VOREStation Add
else
message = "emits a robotic cough"
var/use_sound
if(get_gender() == FEMALE)
use_sound = pick('sound/effects/mob_effects/f_machine_cougha.ogg','sound/effects/mob_effects/f_machine_coughb.ogg')
else
use_sound = pick('sound/effects/mob_effects/m_machine_cougha.ogg','sound/effects/mob_effects/m_machine_coughb.ogg', 'sound/effects/mob_effects/m_machine_coughc.ogg')
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
else
message = "makes a strong noise."
m_type = 2
if("frown")
message = "frowns."
m_type = 1
if("nod")
message = "nods."
m_type = 1
if("blush")
message = "blushes."
m_type = 1
if("wave")
message = "waves."
m_type = 1
if("gasp")
if(miming)
message = "appears to be gasping!"
m_type = 1
else
if(!muzzled)
message = "gasps!"
m_type = 2
else
message = "makes a weak noise."
m_type = 2
if("deathgasp")
message = "[species.get_death_message()]"
m_type = 1
if("giggle")
if(miming)
message = "giggles silently!"
m_type = 1
else
if(!muzzled)
message = "giggles."
m_type = 2
else
message = "makes a noise."
m_type = 2
if("glare")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "glares at [param]."
else
message = "glares."
if("stare")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "stares at [param]."
else
message = "stares."
if("look")
var/M = null
if(param)
for(var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "looks at [param]."
else
message = "looks."
m_type = 1
if("grin")
message = "grins."
m_type = 1
if("cry")
if(miming)
message = "cries."
m_type = 1
else
if(!muzzled)
message = "cries."
m_type = 2
else
message = "makes a weak noise. [T.he] [get_visible_gender() == NEUTER ? "frown" : "frowns"]." // no good, non-unwieldy alternative to this ternary at the moment
m_type = 2
if("sigh")
if(miming)
message = "sighs."
m_type = 1
else
if(!muzzled)
message = "sighs."
m_type = 2
else
message = "makes a weak noise."
m_type = 2
if("laugh")
if(miming)
message = "acts out a laugh."
m_type = 1
else
if(!muzzled)
message = "laughs."
m_type = 2
else
message = "makes a noise."
m_type = 2
if("mumble")
message = "mumbles!"
m_type = 2
if(miming)
m_type = 1
if("grumble")
if(miming)
message = "grumbles!"
m_type = 1
if(!muzzled)
message = "grumbles!"
m_type = 2
else
message = "makes a noise."
m_type = 2
if("groan")
if(miming)
message = "appears to groan!"
m_type = 1
else
if(!muzzled)
message = "groans!"
m_type = 2
else
message = "makes a loud noise."
m_type = 2
if("moan")
if(miming)
message = "appears to moan!"
m_type = 1
else
message = "moans!"
m_type = 2
if("johnny")
var/M
if(param)
M = param
if(!M)
param = null
else
if(miming)
message = "takes a drag from a cigarette and blows \"[M]\" out in smoke."
m_type = 1
else
message = "says, \"[M], please. He had a family.\" [name] takes a drag from a cigarette and blows his name out in smoke."
m_type = 2
if("point")
if(!restrained())
var/mob/M = null
if(param)
for(var/atom/A as mob|obj|turf|area in view(null, null))
if(param == A.name)
M = A
break
if(!M)
message = "points."
else
pointed(M)
if(M)
message = "points to [M]."
else
m_type = 1
if("crack")
if(!restrained())
message = "cracks [T.his] knuckles."
playsound(src, 'sound/voice/knuckles.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
m_type = 1
if("raise")
if(!restrained())
message = "raises a hand."
m_type = 1
if("shake")
message = "shakes [T.his] head."
m_type = 1
if("shrug")
message = "shrugs."
m_type = 1
if("signal")
if(!restrained())
var/t1 = round(text2num(param))
if(isnum(t1))
if(t1 <= 5 && (!r_hand || !l_hand))
message = "raises [t1] finger\s."
else if(t1 <= 10 && (!r_hand && !l_hand))
message = "raises [t1] finger\s."
m_type = 1
if("smile")
message = "smiles."
m_type = 1
if("shiver")
message = "shivers."
m_type = 2
if(miming)
m_type = 1
if("pale")
message = "goes pale for a second."
m_type = 1
if("tremble")
message = "trembles in fear!"
m_type = 1
if("sneeze", "sneezes")
if(miming)
message = "sneezes."
m_type = 1
else
if(!muzzled)
var/robotic = 0
m_type = 2
if(should_have_organ(O_LUNGS))
var/obj/item/organ/internal/lungs/L = internal_organs_by_name[O_LUNGS]
if(L && L.robotic == 2) //Hard-coded to 2, incase we add lifelike robotic lungs
robotic = 1
if(!robotic && !isSynthetic())
message = "sneezes."
if(get_gender() == FEMALE)
playsound(src, species.female_sneeze_sound, 70, preference = /datum/client_preference/emote_noises) //VOREStation Add
else
playsound(src, species.male_sneeze_sound, 70, preference = /datum/client_preference/emote_noises) //VOREStation Add
m_type = 2
else
message = "emits a robotic sneeze"
var/use_sound
if(get_gender() == FEMALE)
use_sound = 'sound/effects/mob_effects/machine_sneeze.ogg'
else
use_sound = 'sound/effects/mob_effects/f_machine_sneeze.ogg'
playsound(src, use_sound, 50, 0, preference = /datum/client_preference/emote_noises) //VOREStation Add
else
message = "makes a strange noise."
m_type = 2
if("sniff")
message = "sniffs."
m_type = 2
if(miming)
m_type = 1
if("snore")
if(miming)
message = "sleeps soundly."
m_type = 1
else
if(!muzzled)
message = "snores."
m_type = 2
else
message = "makes a noise."
m_type = 2
if("whimper")
if(miming)
message = "appears hurt."
m_type = 1
else
if(!muzzled)
message = "whimpers."
m_type = 2
else
message = "makes a weak noise."
m_type = 2
if("wink")
message = "winks."
m_type = 1
if("yawn")
if(!muzzled)
message = "yawns."
m_type = 2
if(miming)
m_type = 1
if("collapse")
Paralyse(2)
message = "collapses!"
m_type = 2
if(miming)
m_type = 1
if("hug")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
if(M == src)
M = null
if(M)
message = "hugs [M]."
else
message = "hugs [T.himself]."
if("handshake")
m_type = 1
if(!restrained() && !r_hand)
var/mob/living/M = null
if(param)
for(var/mob/living/A in view(1, null))
if(param == A.name)
M = A
break
if(M == src)
M = null
if(M)
if(M.canmove && !M.r_hand && !M.restrained())
message = "shakes hands with [M]."
else
message = "holds out [T.his] hand to [M]."
if("dap")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
if(M)
message = "gives daps to [M]."
else
message = "sadly can't find anybody to give daps to, and daps [T.himself]. Shameful."
if("slap", "slaps")
m_type = 1
if(!restrained())
var/M = null
if(param)
for(var/mob/A in view(1, null))
if(param == A.name)
M = A
break
if(M)
message = "<span class='danger'>slaps [M] across the face. Ouch!</span>"
playsound(src, 'sound/effects/snap.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //VOREStation Add
if(ishuman(M)) //Snowflakey!
var/mob/living/carbon/human/H = M
if(istype(H.wear_mask,/obj/item/clothing/mask/smokable))
H.drop_from_inventory(H.wear_mask)
else
message = "<span class='danger'>slaps [T.himself]!</span>"
playsound(src, 'sound/effects/snap.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //VOREStation Add
if("scream", "screams")
if(miming)
message = "acts out a scream!"
m_type = 1
else
if(!muzzled)
message = "[species.scream_verb]!"
m_type = 2
/* Removed, pending the location of some actually good, properly licensed sounds.
if(get_gender() == FEMALE)
playsound(src, "[species.female_scream_sound]", 80, 1)
else
playsound(src, "[species.male_scream_sound]", 80, 1) //default to male screams if no gender is present.
*/
else
message = "makes a very loud noise."
m_type = 2
if("snap", "snaps")
m_type = 2
var/mob/living/carbon/human/H = src
var/obj/item/organ/external/L = H.get_organ("l_hand")
var/obj/item/organ/external/R = H.get_organ("r_hand")
var/left_hand_good = 0
var/right_hand_good = 0
if(L && (!(L.status & ORGAN_DESTROYED)) && (!(L.splinted)) && (!(L.status & ORGAN_BROKEN)))
left_hand_good = 1
if(R && (!(R.status & ORGAN_DESTROYED)) && (!(R.splinted)) && (!(R.status & ORGAN_BROKEN)))
right_hand_good = 1
if(!left_hand_good && !right_hand_good)
to_chat(usr, "You need at least one hand in good working order to snap your fingers.")
return
message = "snaps [T.his] fingers."
playsound(src, 'sound/effects/fingersnap.ogg', 50, 1, -3, preference = /datum/client_preference/emote_noises) //VOREStation Add
if("swish")
animate_tail_once()
if("wag", "sway")
animate_tail_start()
if("qwag", "fastsway")
animate_tail_fast()
if("swag", "stopsway")
animate_tail_stop()
if("vomit")
if(isSynthetic())
to_chat(src, "<span class='warning'>You are unable to vomit.</span>")
return
vomit()
return
if("whistle" || "whistles")
if(!muzzled)
if(!isSynthetic())
message = "whistles a tune."
playsound(src, 'sound/voice/longwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises) //praying this doesn't get abused
else
message = "whistles a robotic tune."
playsound(src, 'sound/voice/longwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "makes a light spitting noise, a poor attempt at a whistle."
if("qwhistle")
if(!muzzled)
if(!isSynthetic())
message = "whistles quietly."
playsound(src, 'sound/voice/shortwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "whistles robotically."
playsound(src, 'sound/voice/shortwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "makes a light spitting noise, a poor attempt at a whistle."
if("wwhistle")
if(!muzzled)
if(!isSynthetic())
message = "whistles inappropriately."
playsound(src, 'sound/voice/wolfwhistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "beeps inappropriately."
playsound(src, 'sound/voice/wolfwhistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "makes a light spitting noise, a poor attempt at a whistle."
if("swhistle")
if(!muzzled)
if(!isSynthetic())
message = "summon whistles."
playsound(src, 'sound/voice/summon_whistle.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "summon whistles robotically."
playsound(src, 'sound/voice/summon_whistle_robot.ogg', 50, 1, preference = /datum/client_preference/emote_noises)
else
message = "makes a light spitting noise, a poor attempt at a whistle."
if("flip")
m_type = 1
if (!src.restrained())
//message = "performs an amazing, gravity-defying backflip before landing skillfully back to the ground."
playsound(src.loc, 'sound/effects/bodyfall4.ogg', 50, 1)
src.SpinAnimation(7,1)
else
to_chat(usr, "You can't quite do something as difficult as a backflip while so... restricted.")
if("spin")
m_type = 1
if (!src.restrained())
//message = "spins in a dance smoothly on their feet. Wow!"
src.spin(20, 1)
else
to_chat(usr, "You can't quite do something as difficult as a spin while so... restricted.")
if("floorspin")
m_type = 1
if (!src.restrained())
//message = "gets down on the floor and spins their entire body around!"
spawn(0)
for(var/i in list(1,2,4,8,4,2,1,2,4,8,4,2,1,2,4,8,4,2))
set_dir(i)
sleep(1)
src.SpinAnimation(20,1)
else
to_chat(usr, "You can't quite do something as difficult as a spin while so... restricted.")
if("sidestep")
m_type = 1
if (!src.restrained())
//message = "steps rhymatically and conservatively as they move side to side."
playsound(src.loc, 'sound/effects/bodyfall4.ogg', 50, 1)
var/default_pixel_x = initial(pixel_x)
var/default_pixel_y = initial(pixel_y)
default_pixel_x = src.default_pixel_x
default_pixel_y = src.default_pixel_y
animate(src, pixel_x = 5, time = 20)
sleep(3)
animate(src, pixel_x = -5, time = 20)
animate(pixel_x = default_pixel_x, pixel_y = default_pixel_y, time = 2)
else
to_chat(usr, "Sidestepping sure seems unachieveable when you're this restricted.")
if("help")
to_chat(src, "<span class='filter_say'>blink, blink_r, blush, bow-(none)/mob, burp, choke, chuckle, clap, collapse, cough, cry, custom, deathgasp, drool, eyebrow, fastsway/qwag, \
frown, gasp, giggle, glare-(none)/mob, grin, groan, grumble, handshake, hug-(none)/mob, laugh, look-(none)/mob, moan, mumble, nod, pale, point-atom, \
qwhistle, raise, salute, scream, sneeze, shake, shiver, shrug, sigh, signal-#1-10, slap-(none)/mob, smile, sneeze, sniff, snore, stare-(none)/mob, stopsway/swag, sway/wag, swish, swhistle, \
tremble, twitch, twitch_v, vomit, whimper, wink, whistle, wwhistle, yawn. Prometheans: squish Synthetics: beep, buzz, dwoop, yes, no, rcough, rsneeze, ping. Skrell: warble</span>")
else
to_chat(src, "<span class='filter_say'><font color='blue'>Unusable emote '[act]'. Say *help or *vhelp for a list.</font></span>") //VOREStation Edit, mention *vhelp for Virgo-specific emotes located in emote_vr.dm.
if(message)
custom_emote(m_type,message)
var/list/_human_default_emotes = list(
/decl/emote/visible/blink,
/decl/emote/audible/synth,
/decl/emote/audible/synth/ping,
/decl/emote/audible/synth/buzz,
/decl/emote/audible/synth/confirm,
/decl/emote/audible/synth/deny,
/decl/emote/visible/nod,
/decl/emote/visible/shake,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/audible/gasp,
/decl/emote/audible/choke,
/decl/emote/audible/sneeze,
/decl/emote/audible/sniff,
/decl/emote/audible/snore,
/decl/emote/audible/whimper,
/decl/emote/audible/whistle,
/decl/emote/audible/whistle/quiet,
/decl/emote/audible/whistle/wolf,
/decl/emote/audible/whistle/summon,
/decl/emote/audible/yawn,
/decl/emote/audible/clap,
/decl/emote/audible/chuckle,
/decl/emote/audible/cough,
/decl/emote/audible/cry,
/decl/emote/audible/sigh,
/decl/emote/audible/laugh,
/decl/emote/audible/mumble,
/decl/emote/audible/grumble,
/decl/emote/audible/groan,
/decl/emote/audible/moan,
/decl/emote/audible/grunt,
/decl/emote/audible/slap,
/decl/emote/audible/crack,
/decl/emote/human,
/decl/emote/human/deathgasp,
/decl/emote/audible/giggle,
/decl/emote/audible/scream,
/decl/emote/visible/airguitar,
/decl/emote/visible/blink_r,
/decl/emote/visible/bow,
/decl/emote/visible/salute,
/decl/emote/visible/flap,
/decl/emote/visible/aflap,
/decl/emote/visible/drool,
/decl/emote/visible/eyebrow,
/decl/emote/visible/twitch,
/decl/emote/visible/dance,
/decl/emote/visible/twitch_v,
/decl/emote/visible/faint,
/decl/emote/visible/frown,
/decl/emote/visible/blush,
/decl/emote/visible/wave,
/decl/emote/visible/glare,
/decl/emote/visible/stare,
/decl/emote/visible/look,
/decl/emote/visible/point,
/decl/emote/visible/raise,
/decl/emote/visible/grin,
/decl/emote/visible/shrug,
/decl/emote/visible/smile,
/decl/emote/visible/pale,
/decl/emote/visible/tremble,
/decl/emote/visible/wink,
/decl/emote/visible/hug,
/decl/emote/visible/dap,
/decl/emote/visible/signal,
/decl/emote/visible/handshake,
/decl/emote/visible/afold,
/decl/emote/visible/alook,
/decl/emote/visible/eroll,
/decl/emote/visible/hbow,
/decl/emote/visible/hip,
/decl/emote/visible/holdup,
/decl/emote/visible/hshrug,
/decl/emote/visible/crub,
/decl/emote/visible/erub,
/decl/emote/visible/fslap,
/decl/emote/visible/ftap,
/decl/emote/visible/hrub,
/decl/emote/visible/hspread,
/decl/emote/visible/pocket,
/decl/emote/visible/rsalute,
/decl/emote/visible/rshoulder,
/decl/emote/visible/squint,
/decl/emote/visible/tfist,
/decl/emote/visible/tilt,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible/snap,
/decl/emote/visible/vomit,
/decl/emote/visible/floorspin,
/decl/emote/visible/flip,
//VOREStation Add
/decl/emote/audible/awoo,
/decl/emote/audible/awoo2,
/decl/emote/audible/growl,
/decl/emote/audible/woof,
/decl/emote/audible/woof2,
/decl/emote/audible/nya,
/decl/emote/audible/mrowl,
/decl/emote/audible/peep,
/decl/emote/audible/chirp,
/decl/emote/audible/hoot,
/decl/emote/audible/weh,
/decl/emote/audible/merp,
/decl/emote/audible/myarp,
/decl/emote/audible/bark,
/decl/emote/audible/bork,
/decl/emote/audible/mrow,
/decl/emote/audible/hypno,
/decl/emote/audible/hiss,
/decl/emote/audible/rattle,
/decl/emote/audible/squeak,
/decl/emote/audible/geck,
/decl/emote/audible/baa,
/decl/emote/audible/baa2,
/decl/emote/audible/mar,
/decl/emote/audible/wurble,
/decl/emote/audible/snort,
/decl/emote/audible/meow,
/decl/emote/audible/moo,
/decl/emote/audible/croak,
/decl/emote/audible/gao,
/decl/emote/audible/cackle,
/decl/emote/visible/mlem,
/decl/emote/visible/blep,
/decl/emote/helper/vwag,
/decl/emote/helper/vflap
//VOREStation Add End
)
/mob/living/carbon/human/get_default_emotes()
return global._human_default_emotes
/mob/living/carbon/human/verb/pose()
set name = "Set Pose"
@@ -1,185 +1,11 @@
/mob
var/nextemote = 1
/mob/living/carbon/human/verb/toggle_resizing_immunity()
set name = "Toggle Resizing Immunity"
set desc = "Toggles your ability to resist resizing attempts"
set category = "IC"
/mob/living/carbon/human/proc/handle_emote_vr(var/act,var/m_type=1,var/message = null)
//Reduces emote spamming
if(nextemote >= world.time)// || user.stat != CONSCIOUS
return 1
nextemote = world.time + 12
resizable = !resizable
to_chat(src, "<span class='notice'>You are now [resizable ? "susceptible" : "immune"] to being resized.</span>")
switch(act)
if("vwag")
if(toggle_tail(message = 1))
m_type = 1
message = "[wagging ? "starts" : "stops"] wagging their tail."
else
return 1
if("vflap")
if(toggle_wing(message = 1))
m_type = 1
message = "[flapping ? "starts" : "stops"] flapping their wings."
else
return 1
if("mlem")
message = "mlems [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] tongue up over [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] nose. Mlem."
m_type = 1
if("blep")
message = "bleps [get_visible_gender() == MALE ? "his" : get_visible_gender() == FEMALE ? "her" : "their"] tongue out. Blep."
m_type = 1
if("awoo")
m_type = 2
message = "lets out an awoo."
playsound(src, 'sound/voice/awoo.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("awoo2")
m_type = 2
message = "lets out an awoo."
playsound(src, 'sound/voice/long_awoo.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("growl")
m_type = 2
message = "lets out a growl."
playsound(src, 'sound/voice/growl.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("woof")
m_type = 2
message = "lets out a woof."
playsound(src, 'sound/voice/woof.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("woof2")
m_type = 2
message = "lets out a woof."
playsound(src, 'sound/voice/woof2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("nya")
message = "lets out a nya."
m_type = 2
playsound(src, 'sound/voice/nya.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("mrowl")
message = "mrowls."
m_type = 2
playsound(src, 'sound/voice/mrow.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("peep")
message = "peeps like a bird."
m_type = 2
playsound(src, 'sound/voice/peep.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("chirp")
message = "chirps!"
playsound(src, 'sound/misc/nymphchirp.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
m_type = 2
if("hoot")
message = "hoots!"
playsound(src, 'sound/voice/hoot.ogg', 50, 1, ,-1, preference = /datum/client_preference/emote_noises)
m_type = 2
if("weh")
message = "lets out a weh."
m_type = 2
playsound(src, 'sound/voice/weh.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("merp")
message = "lets out a merp."
m_type = 2
playsound(src, 'sound/voice/merp.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("myarp")
message = "lets out a myarp."
m_type = 2
playsound(src, 'sound/voice/myarp.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("bark")
message = "lets out a bark."
m_type = 2
playsound(src, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("bork")
m_type = 2
message = "lets out a bork."
playsound(src, 'sound/voice/bork.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if ("mrow")
m_type = 2
message = "lets out a mrow."
playsound(src, 'sound/voice/mrow.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if ("hypno")
m_type = 2
message = "lets out a mystifying tone."
playsound(src, 'sound/voice/hypno.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("hiss")
message = "lets out a hiss."
m_type = 2
playsound(src, 'sound/voice/hiss.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("rattle")
message = "rattles!"
m_type = 2
playsound(src, 'sound/voice/rattle.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("squeak")
message = "lets out a squeak."
m_type = 2
playsound(src, 'sound/effects/mouse_squeak.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("geck")
message = "geckers!"
m_type = 2
playsound(src, 'sound/voice/geck.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("baa")
message = "lets out a baa."
m_type = 2
playsound(src, 'sound/voice/baa.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("baa2")
message = "bleats."
m_type = 2
playsound(src, 'sound/voice/baa2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("deathgasp2")
message = "[species.get_death_message()]"
m_type = 1
playsound(src, 'sound/voice/deathgasp2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("mar")
message = "lets out a mar."
m_type = 2
playsound(src, 'sound/voice/mar.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("wurble")
message = "lets out a wurble."
m_type = 2
playsound(src, 'sound/voice/wurble.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
if("snort")
message = "snorts!"
m_type = 2
playsound(src, 'sound/voice/Snort.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("meow")
message = "gently meows!"
m_type = 2
playsound(src, 'sound/voice/Meow.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("moo")
message = "takes a breath and lets out a moo."
m_type = 2
playsound(src, 'sound/voice/Moo.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("croak")
message = "rumbles their throat, puffs their cheeks and croaks."
m_type = 2
playsound(src, 'sound/voice/Croak.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("gao")
message = "lets out a gao."
m_type = 2
playsound(src, 'sound/voice/gao.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("cackle")
message = "cackles hysterically!"
m_type = 2
playsound(src, 'sound/voice/YeenCackle.ogg', 50, 0, preference = /datum/client_preference/emote_noises)
if("nsay")
nsay()
return TRUE
if("nme")
nme()
return TRUE
if("flip")
var/list/involved_parts = list(BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT)
//Check if they are physically capable
if(sleeping || resting || buckled || weakened || restrained() || involved_parts.len < 2)
to_chat(src, "<span class='warning'>You can't *flip in your current state!</span>")
return 1
else
nextemote += 12 //Double delay
handle_flip_vr()
message = "does a flip!"
m_type = 1
if("vhelp") //Help for Virgo-specific emotes.
to_chat(src, "vwag, vflap, mlem, blep, awoo, awoo2, growl, nya, peep, chirp, hoot, weh, merp, myarp, bark, bork, mrow, mrowl, hypno, hiss, rattle, squeak, geck, baa, baa2, mar, wurble, snort, meow, moo, croak, gao, cackle, nsay, nme, flip")
return TRUE
if(message)
custom_emote(m_type,message)
return TRUE
return FALSE
/mob/living/carbon/human/proc/handle_flip_vr()
var/original_density = density
@@ -1162,6 +1162,9 @@
//A slew of bits that may be affected by our species change
regenerate_icons()
// Update our available emote list.
update_emotes()
if(species)
//if(mind) //VOREStation Removal
//apply_traits() //VOREStation Removal
@@ -81,7 +81,6 @@
var/voice = "" //Instead of new say code calling GetVoice() over and over and over, we're just going to ask this variable, which gets updated in Life()
var/miming = null //Toggle for the mime's abilities.
var/special_voice = "" // For changing our voice. Used by a symptom.
var/last_dam = -1 //Used for determining if we need to process all organs or just some or even none.
@@ -156,4 +155,3 @@
// Custom Species Name
var/custom_species
@@ -98,7 +98,8 @@
// This is the 'mechanical' check for synthetic-ness, not appearance
// Returns the company that made the synthetic
/mob/living/carbon/human/isSynthetic()
if(synthetic) return synthetic //Your synthetic-ness is not going away
if(synthetic)
return synthetic //Your synthetic-ness is not going away
var/obj/item/organ/external/T = organs_by_name[BP_TORSO]
if(T && T.robotic >= ORGAN_ROBOT)
src.verbs += /mob/living/carbon/human/proc/self_diagnostics
@@ -106,9 +107,9 @@
src.verbs += /mob/living/carbon/human/proc/setmonitor_state
var/datum/robolimb/R = all_robolimbs[T.model]
synthetic = R
update_emotes()
return synthetic
return 0
return FALSE
// Would an onlooker know this person is synthetic?
// Based on sort of logical reasoning, 'Look at head, look at torso'
@@ -25,7 +25,8 @@
speech_sounds = list('sound/voice/shriek1.ogg')
speech_chance = 20
scream_verb = "shrieks"
scream_verb_1p = "shriek"
scream_verb_3p = "shrieks"
male_scream_sound = 'sound/voice/shriek1.ogg'
female_scream_sound = 'sound/voice/shriek1.ogg'
male_cough_sounds = list('sound/voice/shriekcough.ogg')
@@ -86,7 +87,11 @@
/datum/mob_descriptor/height = -1,
/datum/mob_descriptor/build = 1,
/datum/mob_descriptor/vox_markings = 0
)
)
default_emotes = list(
/decl/emote/audible/vox_shriek
)
/datum/species/vox/get_random_name(var/gender)
var/datum/language/species_language = GLOB.all_languages[default_language]
@@ -2,7 +2,7 @@
allowed_species = list(SPECIES_SHADEKIN)
var/color = BLUE_EYES
name = "Shadekin Blue Adaptation"
desc = "Makes your shadekin adapted as a Blue eyed kin! This gives you decreased energy regeneration in darkness, decreased regeneration in the light amd unchanged health!"
desc = "Makes your shadekin adapted as a Blue eyed kin! This gives you decreased energy regeneration in darkness, decreased regeneration in the light and unchanged health!"
cost = 0
var_changes = list( "total_health" = 100,
"energy_light" = 0.5,
@@ -13,7 +13,7 @@
/datum/trait/kintype/red
name = "Shadekin Red Adaptation"
color = RED_EYES
desc = "Makes your shadekin adapted as a Red eyed kin! This gives you minimal energy regeneration in darkness, moderate regeneration in the light amd increased health!"
desc = "Makes your shadekin adapted as a Red eyed kin! This gives you minimal energy regeneration in darkness, moderate degeneration in the light and increased health!"
var_changes = list( "total_health" = 200,
"energy_light" = -1,
"energy_dark" = 0.1,
@@ -22,37 +22,37 @@
/datum/trait/kintype/purple
name = "Shadekin Purple Adaptation"
color = PURPLE_EYES
desc = "Makes your shadekin adapted as a Purple eyed kin! This gives you moderate energy regeneration in darkness, minor degeneration in the light amd increased health!"
desc = "Makes your shadekin adapted as a Purple eyed kin! This gives you moderate energy regeneration in darkness, minor degeneration in the light and increased health!"
var_changes = list( "total_health" = 150,
"energy_light" = 1,
"energy_dark" = -0.5,
"energy_light" = -0.5,
"energy_dark" = 1,
"unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin,/datum/unarmed_attack/shadekinharmbap))
/datum/trait/kintype/yellow
name = "Shadekin Yellow Adaptation"
color = YELLOW_EYES
desc = "Makes your shadekin adapted as a Yellow eyed kin! This gives you the highest energy regeneration in darkness, high degeneration in the light amd unchanged health!"
desc = "Makes your shadekin adapted as a Yellow eyed kin! This gives you the highest energy regeneration in darkness, high degeneration in the light and unchanged health!"
var_changes = list( "total_health" = 100,
"energy_light" = 3,
"energy_dark" = -2,
"energy_light" = -2,
"energy_dark" = 3,
"unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin,/datum/unarmed_attack/shadekinharmbap))
/datum/trait/kintype/green
name = "Shadekin Green Adaptation"
color = GREEN_EYES
desc = "Makes your shadekin adapted as a Green eyed kin! This gives you high energy regeneration in darkness, minor regeneration in the light amd unchanged health!"
desc = "Makes your shadekin adapted as a Green eyed kin! This gives you high energy regeneration in darkness, minor regeneration in the light and unchanged health!"
var_changes = list( "total_health" = 100,
"energy_light" = 2,
"energy_dark" = 0.125,
"energy_light" = 0.125,
"energy_dark" = 2,
"unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin,/datum/unarmed_attack/shadekinharmbap))
/datum/trait/kintype/orange
name = "Shadekin Orange Adaptation"
color = ORANGE_EYES
desc = "Makes your shadekin adapted as a Orange eyed kin! This gives you minor energy regeneration in darkness, modeate degeneration in the light amd increased health!"
desc = "Makes your shadekin adapted as a Orange eyed kin! This gives you minor energy regeneration in darkness, moderate degeneration in the light and increased health!"
var_changes = list( "total_health" = 175,
"energy_light" = 0.25,
"energy_dark" = -0.5,
"energy_light" = -0.5,
"energy_dark" = 0.25,
"unarmed_types" = list(/datum/unarmed_attack/stomp, /datum/unarmed_attack/kick, /datum/unarmed_attack/claws/shadekin, /datum/unarmed_attack/bite/sharp/shadekin,/datum/unarmed_attack/shadekinharmbap))
/datum/trait/kintype/apply(var/datum/species/shadekin/S,var/mob/living/carbon/human/H)
@@ -75,7 +75,8 @@
var/list/assisted_langs = list(LANGUAGE_EAL, LANGUAGE_SKRELLIAN, LANGUAGE_SKRELLIANFAR, LANGUAGE_ROOTLOCAL, LANGUAGE_ROOTGLOBAL, LANGUAGE_VOX) //VOREStation Edit
//Soundy emotey things.
var/scream_verb = "screams"
var/scream_verb_1p = "scream"
var/scream_verb_3p = "screams"
var/male_scream_sound //= 'sound/goonstation/voice/male_scream.ogg' Removed due to licensing, replace!
var/female_scream_sound //= 'sound/goonstation/voice/female_scream.ogg' Removed due to licensing, replace!
var/male_cough_sounds = list('sound/effects/mob_effects/m_cougha.ogg','sound/effects/mob_effects/m_coughb.ogg', 'sound/effects/mob_effects/m_coughc.ogg')
@@ -44,7 +44,7 @@
if(config.show_human_death_message)
return ((H && H.isSynthetic()) ? "gives one shrill beep before falling lifeless." : death_message)
else
return "no message"
return DEATHGASP_NO_MESSAGE
/datum/species/proc/get_ssd(var/mob/living/carbon/human/H)
if(H)
@@ -119,6 +119,15 @@ var/datum/species/shapeshifter/promethean/prometheans
var/heal_rate = 0.5 // Temp. Regen per tick.
default_emotes = list(
/decl/emote/audible/squish,
/decl/emote/audible/chirp,
/decl/emote/visible/bounce,
/decl/emote/visible/jiggle,
/decl/emote/visible/lightup,
/decl/emote/visible/vibrate
)
/datum/species/shapeshifter/promethean/New()
..()
prometheans = src
@@ -160,6 +160,16 @@
/datum/mob_descriptor/build = 2
)
default_emotes = list(
/decl/emote/human/swish,
/decl/emote/human/wag,
/decl/emote/human/sway,
/decl/emote/human/qwag,
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway
)
/datum/species/unathi/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
@@ -250,6 +260,16 @@
O_INTESTINE = /obj/item/organ/internal/intestine
)
default_emotes = list(
/decl/emote/human/swish,
/decl/emote/human/wag,
/decl/emote/human/sway,
/decl/emote/human/qwag,
/decl/emote/human/fastsway,
/decl/emote/human/swag,
/decl/emote/human/stopsway
)
/datum/species/tajaran/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
@@ -533,6 +553,11 @@
genders = list(PLURAL)
default_emotes = list(
/decl/emote/audible/chirp,
/decl/emote/audible/multichirp
)
/datum/species/diona/can_understand(var/mob/other)
if(istype(other, /mob/living/carbon/alien/diona))
return TRUE
@@ -139,7 +139,7 @@
descriptors = list(
/datum/mob_descriptor/height = -3,
/datum/mob_descriptor/build = -3
)
)
var/static/list/flight_bodyparts = list(
BP_L_ARM,
@@ -152,6 +152,12 @@
/obj/item/clothing/suit/straight_jacket
)
default_emotes = list(
/decl/emote/audible/teshsqueak,
/decl/emote/audible/teshchirp,
/decl/emote/audible/teshtrill
)
/datum/species/teshari/equip_survival_gear(var/mob/living/carbon/human/H)
..()
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H),slot_shoes)
@@ -159,7 +165,7 @@
/datum/species/teshari/handle_falling(mob/living/carbon/human/H, atom/hit_atom, damage_min, damage_max, silent, planetary)
// Tesh can glide to save themselves from some falls. Basejumping bird
// without parachute, or falling bird without free wings goes splat.
// without parachute, or falling bird without free wings, goes splat.
// Are we landing from orbit, or handcuffed/unconscious/tied to something?
if(planetary || !istype(H) || H.incapacitated(INCAPACITATION_DEFAULT|INCAPACITATION_DISABLED))
-33
View File
@@ -433,38 +433,5 @@ proc/get_radio_key_from_channel(var/channel)
/mob/proc/GetVoice()
return name
/mob/living/emote(var/act, var/type, var/message) //emote code is terrible, this is so that anything that isn't
if(stat) //already snowflaked to shit can call the parent and handle emoting sanely
return FALSE
if(..(act, type, message))
return TRUE
if(act && type && message)
log_emote(message, src)
for(var/mob/M in dead_mob_list)
if(!M.client)
continue
if(isnewplayer(M))
continue
if(isobserver(M) && M.is_preference_enabled(/datum/client_preference/ghost_sight))
M.show_message(message)
switch(type)
if(1) // Visible
visible_message(message)
return TRUE
if(2) // Audible
audible_message(message)
return TRUE
else
if(act == "help")
return // Mobs handle this individually
to_chat(src, "<span class='warning'>Unusable emote '[act]'. Say *help for a list.</span>")
/mob/proc/speech_bubble_appearance()
return "normal"
+12 -112
View File
@@ -1,113 +1,13 @@
/mob/living/silicon/emote(var/act, var/m_type = 1,var/message = null)
var/param = null
if(findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
var/list/_silicon_default_emotes = list(
/decl/emote/audible/synth,
/decl/emote/audible/synth/ping,
/decl/emote/audible/synth/buzz,
/decl/emote/audible/synth/confirm,
/decl/emote/audible/synth/deny,
/decl/emote/audible/synth/dwoop,
/decl/emote/audible/synth/security,
/decl/emote/audible/synth/security/halt
)
if(findtext(act, "s", -1) && !findtext(act, "_", -2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act, 1, length(act))
switch(act)
if("beep")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> beeps at [param]."
else
message = "<b>[src]</b> beeps."
playsound(src, 'sound/machines/twobeep.ogg', 50, 0)
m_type = 1
if("ping")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> pings at [param]."
else
message = "<b>[src]</b> pings."
playsound(src, 'sound/machines/ping.ogg', 50, 0)
m_type = 1
if("buzz")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> buzzes at [param]."
else
message = "<b>[src]</b> buzzes."
playsound(src, 'sound/machines/buzz-sigh.ogg', 50, 0)
m_type = 1
if("yes", "ye")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> emits an affirmative blip at [param]."
else
message = "<b>[src]</b> emits an affirmative blip."
playsound(src, 'sound/machines/synth_yes.ogg', 50, 0)
m_type = 1
if("dwoop")
var/M = null
if(param)
for (var/mob/A in view(null, null))
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> chirps happily at [param]"
else
message = "<b>[src]</b> chirps happily."
playsound(src, 'sound/machines/dwoop.ogg', 50, 0)
m_type = 1
if("no")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if (param == A.name)
M = A
break
if(!M)
param = null
if (param)
message = "<b>[src]</b> emits a negative blip at [param]."
else
message = "<b>[src]</b> emits a negative blip."
playsound(src, 'sound/machines/synth_no.ogg', 50, 0)
m_type = 1
..(act, m_type, message)
/mob/living/silicon/get_default_emotes()
return global._silicon_default_emotes
+32 -154
View File
@@ -1,155 +1,33 @@
/mob/living/silicon/robot/emote(var/act,var/m_type=1,var/message = null)
var/param = null
if(findtext(act, "-", 1, null))
var/t1 = findtext(act, "-", 1, null)
param = copytext(act, t1 + 1, length(act) + 1)
act = copytext(act, 1, t1)
var/list/_robot_default_emotes = list(
/decl/emote/audible/clap,
/decl/emote/visible/bow,
/decl/emote/visible/salute,
/decl/emote/visible/flap,
/decl/emote/visible/aflap,
/decl/emote/visible/twitch,
/decl/emote/visible/twitch_v,
/decl/emote/visible/dance,
/decl/emote/visible/nod,
/decl/emote/visible/shake,
/decl/emote/visible/glare,
/decl/emote/visible/look,
/decl/emote/visible/stare,
/decl/emote/visible/deathgasp_robot,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible/synth,
/decl/emote/audible/synth/ping,
/decl/emote/audible/synth/buzz,
/decl/emote/audible/synth/confirm,
/decl/emote/audible/synth/deny,
/decl/emote/audible/synth/dwoop,
/decl/emote/audible/synth/security,
/decl/emote/audible/synth/security/halt,
//VOREStation Add
/decl/emote/visible/mlem,
/decl/emote/visible/blep
//VOREStation Add End
)
if(findtext(act,"s",-1) && !findtext(act,"_",-2))//Removes ending s's unless they are prefixed with a '_'
act = copytext(act,1,length(act))
switch(act)
if("salute")
if(!src.buckled)
var/M = null
if(param)
for (var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<b>[src]</b> salutes to [param]."
else
message = "<b>[src]</b> salutes."
m_type = 1
if("bow")
if(!src.buckled)
var/M = null
if(param)
for (var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<b>[src]</b> bows to [param]."
else
message = "<b>[src]</b> bows."
m_type = 1
if("clap")
if(!src.restrained())
message = "<b>[src]</b> claps."
m_type = 2
if("flap")
if(!src.restrained())
message = "<b>[src]</b> flaps its wings."
m_type = 2
if("aflap")
if(!src.restrained())
message = "<b>[src]</b> flaps its wings ANGRILY!"
m_type = 2
if("twitch")
message = "<b>[src]</b> twitches."
m_type = 1
if("twitch_v")
message = "<b>[src]</b> twitches violently."
m_type = 1
if("nod")
message = "<b>[src]</b> nods."
m_type = 1
if("deathgasp")
message = "<b>[src]</b> shudders violently for a moment, then becomes motionless, its eyes slowly darkening."
m_type = 1
if("glare")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<b>[src]</b> glares at [param]."
else
message = "<b>[src]</b> glares."
if("stare")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<b>[src]</b> stares at [param]."
else
message = "<b>[src]</b> stares."
if("look")
var/M = null
if(param)
for (var/mob/A in view(null, null))
if(param == A.name)
M = A
break
if(!M)
param = null
if(param)
message = "<b>[src]</b> looks at [param]."
else
message = "<b>[src]</b> looks."
m_type = 1
if("law")
if(istype(module,/obj/item/weapon/robot_module/robot/security) || istype(module,/obj/item/weapon/robot_module/robot/knine)) //VOREStation Add - K9
message = "<b>[src]</b> shows its legal authorization barcode."
playsound(src, 'sound/voice/biamthelaw.ogg', 50, 0)
m_type = 2
else
to_chat(src, "You are not THE LAW, pal.")
if("halt")
if(istype(module,/obj/item/weapon/robot_module/robot/security) || istype(module,/obj/item/weapon/robot_module/robot/knine)) //VOREStation Add - K9
message = "<b>[src]</b> <B>'s</B> speakers skreech, \"Halt! Security!\"."
playsound(src, 'sound/voice/halt.ogg', 50, 0)
m_type = 2
else
to_chat(src, "You are not security.")
//Vorestation addition start
if("bark")
if (istype(module,/obj/item/weapon/robot_module/robot/knine) || istype(module,/obj/item/weapon/robot_module/robot/medihound) || istype(module,/obj/item/weapon/robot_module/robot/scrubpup) || istype(module,/obj/item/weapon/robot_module/robot/ert) || istype(module,/obj/item/weapon/robot_module/robot/science) || istype(module,/obj/item/weapon/robot_module/robot/engiedog) || istype(module,/obj/item/weapon/robot_module/robot/clerical/brodog) || istype(module,/obj/item/weapon/robot_module/robot/kmine) )
message = "<b>[src]</b> lets out a bark."
playsound(src, 'sound/voice/bark2.ogg', 50, 1, -1, preference = /datum/client_preference/emote_noises)
m_type = 2
else
to_chat(src, "You're not a dog!")
//Vorestation addition end
if("help")
to_chat(src, "salute, bow-(none)/mob, clap, flap, aflap, twitch, twitch_s, nod, deathgasp, glare-(none)/mob, stare-(none)/mob, look, beep, ping, \nbuzz, law, halt, yes, dwoop, no")
..(act, m_type, message)
/mob/living/silicon/robot/get_default_emotes()
return global._robot_default_emotes
+1 -1
View File
@@ -114,7 +114,7 @@
return 0
return 1
/mob/living/silicon/ai/emote(var/act, var/type, var/message)
/mob/living/silicon/ai/emote(var/act, var/m_type, var/message)
var/obj/machinery/hologram/holopad/T = holo
if(T && T.masters[src]) //Is the AI using a holopad?
. = holopad_emote(message)
@@ -1,3 +1,32 @@
var/list/_cat_default_emotes = list(
/decl/emote/visible,
/decl/emote/visible/scratch,
/decl/emote/visible/drool,
/decl/emote/visible/nod,
/decl/emote/visible/sway,
/decl/emote/visible/sulk,
/decl/emote/visible/twitch,
/decl/emote/visible/twitch_v,
/decl/emote/visible/dance,
/decl/emote/visible/roll,
/decl/emote/visible/shake,
/decl/emote/visible/jump,
/decl/emote/visible/shiver,
/decl/emote/visible/collapse,
/decl/emote/visible/spin,
/decl/emote/visible/sidestep,
/decl/emote/audible,
/decl/emote/audible/hiss,
/decl/emote/audible/whimper,
/decl/emote/audible/gasp,
/decl/emote/audible/scretch,
/decl/emote/audible/choke,
/decl/emote/audible/moan,
/decl/emote/audible/gnarl,
/decl/emote/audible/purr,
/decl/emote/audible/purrlong
)
/mob/living/simple_mob/animal/passive/cat
name = "cat"
desc = "A domesticated, feline pet. Has a tendency to adopt crewmembers."
@@ -28,6 +57,9 @@
update_icon()
return ..()
/mob/living/simple_mob/animal/passive/cat/get_default_emotes()
return global._cat_default_emotes
/mob/living/simple_mob/animal/passive/cat/handle_special()
if(!stat && prob(2)) // spooky
var/mob/observer/dead/spook = locate() in range(src, 5)
@@ -1,5 +1,21 @@
// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
var/list/_slime_default_emotes = list(
/decl/emote/audible/moan,
/decl/emote/visible/twitch,
/decl/emote/visible/sway,
/decl/emote/visible/shiver,
/decl/emote/visible/bounce,
/decl/emote/visible/jiggle,
/decl/emote/visible/lightup,
/decl/emote/visible/vibrate,
/decl/emote/slime,
/decl/emote/slime/pout,
/decl/emote/slime/sad,
/decl/emote/slime/angry,
/decl/emote/slime/frown,
/decl/emote/slime/smile
)
// The top-level slime defines. Xenobio slimes and feral slimes will inherit from this.
/mob/living/simple_mob/slime
name = "slime"
desc = "It's a slime."
@@ -64,6 +80,9 @@
can_enter_vent_with = list(/obj/item/clothing/head)
/mob/living/simple_mob/slime/get_default_emotes()
return global._slime_default_emotes
/datum/say_list/slime
speak = list("Blorp...", "Blop...")
emote_see = list("bounces", "jiggles", "sways")
+1 -1
View File
@@ -137,6 +137,6 @@
return TRUE
return ..()
/mob/living/voice/custom_emote(var/m_type=1,var/message = null,var/range=world.view)
/mob/living/voice/custom_emote(var/m_type = VISIBLE_MESSAGE, var/message = null, var/range = world.view)
if(!comm) return
..(m_type,message,comm.video_range)
+19 -13
View File
@@ -42,6 +42,7 @@
lastarea = get_area(src)
hook_vr("mob_new",list(src)) //VOREStation Code
update_transform() // Some mobs may start bigger or smaller than normal.
update_emotes()
return ..()
/mob/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2)
@@ -49,19 +50,19 @@
if(!client && !teleop) return
if (type)
if((type & 1) && (is_blind() || paralysis) )//Vision related
if((type & VISIBLE_MESSAGE) && (is_blind() || paralysis) )//Vision related
if (!( alt ))
return
else
msg = alt
type = alt_type
if ((type & 2) && is_deaf())//Hearing related
if ((type & AUDIBLE_MESSAGE) && is_deaf())//Hearing related
if (!( alt ))
return
else
msg = alt
type = alt_type
if ((type & 1) && (sdisabilities & BLIND))
if ((type & VISIBLE_MESSAGE) && (sdisabilities & BLIND))
return
// Added voice muffling for Issue 41.
if(stat == UNCONSCIOUS || sleeping > 0)
@@ -77,14 +78,17 @@
// message is the message output to anyone who can see e.g. "[src] does something!"
// self_message (optional) is what the src mob sees e.g. "You do something!"
// blind_message (optional) is what blind people will hear e.g. "You hear something!"
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null)
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null, var/range = world.view)
if(self_message)
if(LAZYLEN(exclude_mobs))
exclude_mobs |= src
else
exclude_mobs = list(src)
src.show_message(self_message, 1, blind_message, 2)
. = ..(message, blind_message, exclude_mobs)
// Transfer messages about what we are doing to upstairs
if(shadow)
shadow.visible_message(message, self_message, blind_message, exclude_mobs, range)
. = ..(message, blind_message, exclude_mobs, range) // Really not ideal that atom/visible_message has different arg numbering :(
// Returns an amount of power drawn from the object (-1 if it's not viable).
// If drain_check is set it will not actually drain power, just return a value.
@@ -99,7 +103,7 @@
// self_message (optional) is what the src mob hears.
// deaf_message (optional) is what deaf people will see.
// hearing_distance (optional) is the range, how many tiles away the message can be heard.
/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message)
/mob/audible_message(var/message, var/deaf_message, var/hearing_distance, var/self_message, var/radio_message)
var/range = hearing_distance || world.view
var/list/hear = get_mobs_and_objs_in_view_fast(get_turf(src),range,remote_ghosts = FALSE)
@@ -107,16 +111,21 @@
var/list/hearing_mobs = hear["mobs"]
var/list/hearing_objs = hear["objs"]
for(var/obj in hearing_objs)
var/obj/O = obj
O.show_message(message, 2, deaf_message, 1)
if(radio_message)
for(var/obj in hearing_objs)
var/obj/O = obj
O.hear_talk(src, list(new /datum/multilingual_say_piece(GLOB.all_languages["Noise"], radio_message)), null)
else
for(var/obj in hearing_objs)
var/obj/O = obj
O.show_message(message, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
for(var/mob in hearing_mobs)
var/mob/M = mob
var/msg = message
if(self_message && M==src)
msg = self_message
M.show_message(msg, 2, deaf_message, 1)
M.show_message(msg, AUDIBLE_MESSAGE, deaf_message, VISIBLE_MESSAGE)
/mob/proc/findname(msg)
for(var/mob/M in mob_list)
@@ -576,9 +585,6 @@
/mob/proc/get_gender()
return gender
/mob/proc/get_visible_gender()
return gender
/mob/proc/see(message)
if(!is_active())
return 0
@@ -28,7 +28,7 @@
// Determines if the accessory will be skipped or included in random hair generations
var/gender = NEUTER
// Restrict some styles to specific species
// Restrict some styles to specific species. Set to null to perform no checking.
var/list/species_allowed = list(SPECIES_HUMAN,SPECIES_PROMETHEAN,SPECIES_HUMAN_VATBORN)
// Whether or not the accessory can be affected by colouration
@@ -38,7 +38,6 @@
// Ckey of person allowed to use this, if defined.
var/list/ckeys_allowed = null
var/apply_restrictions = FALSE //whether to apply restrictions for specific tails/ears/wings
/*
////////////////////////////
@@ -23,7 +23,7 @@
icon_state = "shadekin"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
apply_restrictions = TRUE
species_allowed = list() // SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW
/datum/sprite_accessory/ears/taj_ears
name = "Tajaran Ears"
@@ -20,7 +20,6 @@
icon_state = "shadekin"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
apply_restrictions = TRUE
species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
// Ears avaliable to anyone
@@ -922,7 +922,6 @@
icon_state = "shadekin-short"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
//apply_restrictions = TRUE
//species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/tail/wartacosushi_tail //brightened +20RGB from matching roboparts
@@ -333,7 +333,6 @@
hide_body_parts = null
clip_mask_icon = null
clip_mask_state = null
//apply_restrictions = TRUE
//species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_2c
@@ -83,6 +83,12 @@
extra_overlay2 = "synthwolf_glow"
//icon_sprite_tag = "synthwolf"
/datum/sprite_accessory/tail/taur/ch/wolf/fatsynthwolf
name = "Fat SynthWolf dual-color (Taur)"
icon_state = "fatsynthwolf_s"
extra_overlay = "fatsynthwolf_markings"
extra_overlay2 = "fatsynthwolf_glow"
/datum/sprite_accessory/tail/taur/skunk
name = "Skunk (Taur)"
icon_state = "skunk_s"
@@ -213,6 +219,15 @@
extra_overlay = "lizard_markings"
//icon_sprite_tag = "lizard2c"
/datum/sprite_accessory/tail/taur/ch/lizard/fat
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
/datum/sprite_accessory/tail/taur/ch/lizard/fat_2c
name = "Fat Lizard (Taur, dual-color)"
icon_state = "fatlizard_s"
extra_overlay= "fatlizard_markings"
/datum/sprite_accessory/tail/taur/lizard/synthlizard
name = "SynthLizard dual-color (Taur)"
icon_state = "synthlizard_s"
@@ -220,6 +235,12 @@
extra_overlay2 = "synthlizard_glow"
//icon_sprite_tag = "synthlizard"
/datum/sprite_accessory/tail/taur/ch/lizard/fatsynthlizard
name = "Fat SynthLizard dual-color (Taur)"
icon_state = "fatsynthlizard_s"
extra_overlay = "fatsynthlizard_markings"
extra_overlay2 = "fatsynthlizard_glow"
/datum/sprite_accessory/tail/taur/spider
name = "Spider (Taur)"
icon_state = "spider_s"
@@ -305,6 +326,12 @@
extra_overlay2 = "synthfeline_glow"
//icon_sprite_tag = "synthfeline"
/datum/sprite_accessory/tail/taur/ch/feline/fatsynthfeline
name = "Fat SynthFeline dual-color (Taur)"
icon_state = "fatsynthfeline_s"
extra_overlay = "fatsynthfeline_markings"
extra_overlay2 = "fatsynthfeline_glow"
/datum/sprite_accessory/tail/taur/slug
name = "Slug (Taur)"
icon_state = "slug_s"
-5
View File
@@ -105,11 +105,6 @@
verb = "asks"
return verb
/mob/proc/emote(var/act, var/type, var/message)
if(act == "me")
return custom_emote(type, message)
/mob/proc/get_ear()
// returns an atom representing a location on the map from which this
// mob can hear things
-6
View File
@@ -113,12 +113,6 @@
if(shadow)
shadow.set_dir(new_dir)
// Transfer messages about what we are doing to upstairs
/mob/visible_message(var/message, var/self_message, var/blind_message, var/list/exclude_mobs = null)
. = ..()
if(shadow)
shadow.visible_message(message, self_message, blind_message, exclude_mobs)
/mob/zshadow/set_typing_indicator(var/state)
if(!typing_indicator)
init_typing_indicator("typing")
+26 -14
View File
@@ -45,14 +45,14 @@
/datum/nifsoft/soulcatcher/install()
if((. = ..()))
nif.set_flag(NIF_O_SCOTHERS,NIF_FLAGS_OTHER) //Required on install, because other_flags aren't sufficient for our complicated settings.
nif.human.verbs |= /mob/living/carbon/human/proc/nsay
nif.human.verbs |= /mob/living/carbon/human/proc/nme
nif.human.verbs |= /mob/living/carbon/human/nsay
nif.human.verbs |= /mob/living/carbon/human/nme
/datum/nifsoft/soulcatcher/uninstall()
QDEL_LIST_NULL(brainmobs)
if((. = ..()) && nif && nif.human) //Sometimes NIFs are deleted outside of a human
nif.human.verbs -= /mob/living/carbon/human/proc/nsay
nif.human.verbs -= /mob/living/carbon/human/proc/nme
nif.human.verbs -= /mob/living/carbon/human/nsay
nif.human.verbs -= /mob/living/carbon/human/nme
/datum/nifsoft/soulcatcher/proc/save_settings()
if(!nif)
@@ -476,20 +476,26 @@
///////////////////
//Verbs for humans
/mob/living/carbon/human/proc/nsay(message as text|null)
/mob/proc/nsay(message as text|null)
set name = "NSay"
set desc = "Speak into your NIF's Soulcatcher."
set category = "IC"
to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that."))
/mob/living/carbon/human/nsay(message as text|null)
if(stat != CONSCIOUS)
to_chat(src,SPAN_WARNING("You can't use NSay while unconscious."))
return
if(!nif)
to_chat(src,"<span class='warning'>You can't use NSay without a NIF.</span>")
to_chat(src,SPAN_WARNING("You can't use NSay without a NIF."))
return
var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER)
if(!SC)
to_chat(src,"<span class='warning'>You need the Soulcatcher software to use NSay.</span>")
to_chat(src,SPAN_WARNING("You need the Soulcatcher software to use NSay."))
return
if(!SC.brainmobs.len)
to_chat(src,"<span class='warning'>You need a loaded mind to use NSay.</span>")
to_chat(src,SPAN_WARNING("You need a loaded mind to use NSay."))
return
if(!message)
message = input("Type a message to say.","Speak into Soulcatcher") as text|null
@@ -497,20 +503,26 @@
var/sane_message = sanitize(message)
SC.say_into(sane_message,src)
/mob/living/carbon/human/proc/nme(message as text|null)
/mob/proc/nme(message as text|null)
set name = "NMe"
set desc = "Emote into your NIF's Soulcatcher."
set category = "IC"
to_chat(src, SPAN_WARNING("You must be a humanoid with a NIF implanted to use that."))
/mob/living/carbon/human/nme(message as text|null)
if(stat != CONSCIOUS)
to_chat(src,SPAN_WARNING("You can't use NMe while unconscious."))
return
if(!nif)
to_chat(src,"<span class='warning'>You can't use NMe without a NIF.</span>")
to_chat(src,SPAN_WARNING("You can't use NMe without a NIF."))
return
var/datum/nifsoft/soulcatcher/SC = nif.imp_check(NIF_SOULCATCHER)
if(!SC)
to_chat(src,"<span class='warning'>You need the Soulcatcher software to use NMe.</span>")
to_chat(src,SPAN_WARNING("You need the Soulcatcher software to use NMe."))
return
if(!SC.brainmobs.len)
to_chat(src,"<span class='warning'>You need a loaded mind to use NMe.</span>")
to_chat(src,SPAN_WARNING("You need a loaded mind to use NMe."))
return
if(!message)
@@ -563,7 +575,7 @@
QDEL_NULL(eyeobj)
soulcatcher.notify_into("[src] ended AR projection.")
/mob/living/carbon/brain/caught_soul/verb/nsay(message as text|null)
/mob/living/carbon/brain/caught_soul/verb/nsay_brain(message as text|null)
set name = "NSay"
set desc = "Speak into the NIF's Soulcatcher (circumventing AR speaking)."
set category = "Soulcatcher"
@@ -574,7 +586,7 @@
var/sane_message = sanitize(message)
soulcatcher.say_into(sane_message,src,null)
/mob/living/carbon/brain/caught_soul/verb/nme(message as text|null)
/mob/living/carbon/brain/caught_soul/verb/nme_brain(message as text|null)
set name = "NMe"
set desc = "Emote into the NIF's Soulcatcher (circumventing AR speaking)."
set category = "Soulcatcher"
+13 -4
View File
@@ -156,6 +156,9 @@ var/datum/planet/sif/planet_sif = null
sky_visible = TRUE
observed_message = "The sky is clear."
outdoor_sounds_type = /datum/looping_sound/weather/wind/gentle
indoor_sounds_type = /datum/looping_sound/weather/wind/gentle/indoors
/datum/weather/sif/overcast
name = "overcast"
light_modifier = 0.8
@@ -174,6 +177,9 @@ var/datum/planet/sif/planet_sif = null
"It's very cloudy."
)
outdoor_sounds_type = /datum/looping_sound/weather/wind/gentle
indoor_sounds_type = /datum/looping_sound/weather/wind/gentle/indoors
/datum/weather/sif/light_snow
name = "light snow"
icon_state = "snowfall_light"
@@ -192,6 +198,9 @@ var/datum/planet/sif/planet_sif = null
"It begins to snow lightly.",
)
outdoor_sounds_type = /datum/looping_sound/weather/wind/gentle
indoor_sounds_type = /datum/looping_sound/weather/wind/gentle/indoors
/datum/weather/sif/snow
name = "moderate snow"
icon_state = "snowfall_med"
@@ -282,8 +291,8 @@ var/datum/planet/sif/planet_sif = null
transition_messages = list(
"The sky is dark, and rain falls down upon you."
)
// outdoor_sounds_type = /datum/looping_sound/weather/rain
// indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
outdoor_sounds_type = /datum/looping_sound/weather/rain
indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
/datum/weather/sif/rain/process_effects()
..()
@@ -327,8 +336,8 @@ var/datum/planet/sif/planet_sif = null
"Loud thunder is heard in the distance.",
"A bright flash heralds the approach of a storm."
)
// outdoor_sounds_type = /datum/looping_sound/weather/rain
// indoor_sounds_type = /datum/looping_sound/weather/rain/indoors
outdoor_sounds_type = /datum/looping_sound/weather/rain/heavy
indoor_sounds_type = /datum/looping_sound/weather/rain/heavy/indoors
transition_chances = list(
@@ -458,4 +458,62 @@
M.adjustToxLoss(removed) //Equivalent to half as much protein, since it's half protein.
if(M.species.organic_food_coeff)
if(alien == IS_SLIME || alien == IS_CHIMERA) //slimes and chimera can get nutrition from injected nutriment and protein
M.nutrition += (alt_nutriment_factor * removed)
M.nutrition += (alt_nutriment_factor * removed)
//////////////////////Bepis Drinks (04/29/2021)//////////////////////
/datum/reagent/drink/soda/bepis_cola
name = "Bepis"
id = "bepis"
description = "A weird cola-like beverage."
taste_description = "bepsi"
reagent_state = LIQUID
color = "#100800"
adj_drowsy = -3
adj_temp = -5
glass_name = "Bepis Cola"
glass_desc = "A glass of weird cola beverage."
glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/buzz_fuzz
name = "Buzz Fuzz"
id = "buzz_fuzz"
description = "A delicious frontier beverage that's simply a Hive of Flavour!"
taste_description = "carbonated honey and pollen"
reagent_state = LIQUID
color = "#8CFF00"
adj_drowsy = -3
adj_temp = -5
glass_name = "Buzz Fuzz"
glass_desc = "A glass that's stinging with flavour."
glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/sprited_cranberry
name = "Sprited Cranberry"
id = "sprited_cranberry"
description = "A winter spiced cranberry drink. Perfect for year-round consumption."
taste_description = "sweet spiced cranberry"
reagent_state = LIQUID
color = "#fffafa"
adj_drowsy = -3
adj_temp = -5
glass_name = "Sprited Cranberry"
glass_desc = "A glass of sprited cranberry"
glass_special = list(DRINK_FIZZ)
/datum/reagent/drink/soda/shamblers
name = "Shambler's Juice"
id = "shamblers"
description = "A strange off-brand beverage that's bursting with flavor."
taste_description = "carbonated metallic soda"
reagent_state = LIQUID
color = "#f00060"
adj_drowsy = -3
adj_temp = -5
glass_name = "Shambler's Juice"
glass_desc = "A glass of something shambly"
glass_special = list(DRINK_FIZZ)
@@ -542,7 +542,7 @@
// VOREStation Add - Ears/Tails/Wings
/datum/tgui_module/appearance_changer/proc/can_use_sprite(datum/sprite_accessory/X, mob/living/carbon/human/target, mob/user)
if(X.apply_restrictions && !(target.species.name in X.species_allowed))
if(!isnull(X.species_allowed) && !(target.species.name in X.species_allowed))
return FALSE
if(LAZYLEN(X.ckeys_allowed) && !(user?.ckey in X.ckeys_allowed) && !(target.ckey in X.ckeys_allowed))
+12 -12
View File
@@ -60,7 +60,7 @@
recipes += new/datum/stack_recipe("smole houses", /obj/structure/smolebuilding/houses, 2, time = 10)
recipes += new/datum/stack_recipe("smole business", /obj/structure/smolebuilding/business, 2, time = 10)
recipes += new/datum/stack_recipe("smole warehouses", /obj/structure/smolebuilding/warehouses, 2, time = 10)
recipes += new/datum/stack_recipe("smole musem", /obj/structure/smolebuilding/musem, 2, time = 10)
recipes += new/datum/stack_recipe("smole museum", /obj/structure/smolebuilding/museum, 2, time = 10)
/datum/material/smolebricks
name = "smolebricks"
@@ -86,7 +86,7 @@
//smolebrick case to make for easy bricks.
/obj/item/weapon/storage/smolebrickcase
name = "smolebrick case"
desc = "you feel the power of imagination."
desc = "You feel the power of imagination."
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "smolestorage"
throw_speed = 1
@@ -152,10 +152,10 @@
anchored = 1
/obj/structure/smoletrack/roadF
name = "road fourway piece"
name = "road four-way piece"
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "carfourway"
desc = "A fourway road piece."
desc = "A four-way road piece."
anchored = 1
//buildings code
@@ -279,10 +279,10 @@
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "smolewarehouses"
/obj/structure/smolebuilding/musem
name = "smole musem"
/obj/structure/smolebuilding/museum
name = "smole museum"
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "smolemusem"
icon_state = "smolemuseum"
//
//CAR STUFF < WILL BE MESSED WITH IN A LATER UPDATE COMMENTED OUT FOR NOW
///obj/item/smolecar
@@ -357,8 +357,8 @@
drop_sound = 'sound/items/drop/basketball.ogg'
/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgo3b
name = "virgo3bB"
desc = "A sticky jelly jaw breaker in the shape of Virgo3B, it even has a tiny tether!"
name = "Virgo 3B"
desc = "A sticky jelly jaw breaker in the shape of Virgo-3B, it even has a tiny tether!"
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "sp_Virgo3B"
bitesize = 3
@@ -379,8 +379,8 @@
drop_sound = 'sound/items/drop/basketball.ogg'
/obj/item/weapon/reagent_containers/food/snacks/snackplanet/virgoprime
name = "virgo prime"
desc = "Its a orange jaw breaker in the shape Virgo Prime!"
name = "Virgo Prime"
desc = "It's a orange jaw breaker in the shape of Virgo Prime!"
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "sp_virgoprime"
bitesize = 3
@@ -391,7 +391,7 @@
/obj/item/weapon/storage/bagoplanets
name = "bag o' planets"
desc = "A cosmic bag of fist sized candy planets."
desc = "A cosmic bag of fist-sized candy planets."
icon = 'icons/vore/smoleworld_vr.dmi'
icon_state = "sp_storage"
w_class = ITEMSIZE_LARGE
Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 KiB

After

Width:  |  Height:  |  Size: 301 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 KiB

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

After

Width:  |  Height:  |  Size: 137 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

After

Width:  |  Height:  |  Size: 55 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 142 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 56 KiB

After

Width:  |  Height:  |  Size: 56 KiB

+3
View File
@@ -603,6 +603,9 @@ macro "hotkeymode"
elem
name = "U"
command = "Rest"
elem
name = "B"
command = "Resist"
elem
name = "NUMPAD1"
command = "body-r-leg"
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+22
View File
@@ -2069,8 +2069,29 @@
#include "code\modules\economy\TradeDestinations.dm"
#include "code\modules\economy\vending.dm"
#include "code\modules\economy\vending_machines.dm"
#include "code\modules\emotes\definitions\audible_furry_vr.dm"
#include "code\modules\emotes\definitions\helpers_vr.dm"
#include "code\modules\emotes\definitions\visible_vr.dm"
#include "code\modules\entopics_vr\alternate_appearance.dm"
#include "code\modules\entopics_vr\entopics.dm"
#include "code\modules\emotes\emote_define.dm"
#include "code\modules\emotes\emote_mob.dm"
#include "code\modules\emotes\definitions\_mob.dm"
#include "code\modules\emotes\definitions\_species.dm"
#include "code\modules\emotes\definitions\audible.dm"
#include "code\modules\emotes\definitions\audible_cough.dm"
#include "code\modules\emotes\definitions\audible_scream.dm"
#include "code\modules\emotes\definitions\audible_slap.dm"
#include "code\modules\emotes\definitions\audible_snap.dm"
#include "code\modules\emotes\definitions\audible_sneeze.dm"
#include "code\modules\emotes\definitions\audible_whistle.dm"
#include "code\modules\emotes\definitions\exertion.dm"
#include "code\modules\emotes\definitions\human.dm"
#include "code\modules\emotes\definitions\slimes.dm"
#include "code\modules\emotes\definitions\synthetics.dm"
#include "code\modules\emotes\definitions\visible.dm"
#include "code\modules\emotes\definitions\visible_animated.dm"
#include "code\modules\emotes\definitions\visible_vomit.dm"
#include "code\modules\error_handler\_defines.dm"
#include "code\modules\error_handler\error_handler.dm"
#include "code\modules\error_handler\error_viewer.dm"
@@ -2165,6 +2186,7 @@
#include "code\modules\food\drinkingglass\shaker.dm"
#include "code\modules\food\drinkingglass\shaker_vr.dm"
#include "code\modules\food\food\cans.dm"
#include "code\modules\food\food\cans_vr.dm"
#include "code\modules\food\food\condiment.dm"
#include "code\modules\food\food\drinks.dm"
#include "code\modules\food\food\lunch.dm"