Merge remote-tracking branch 'VOREStation/master' into upstream-merge-8058
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
@@ -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."
|
||||
@@ -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()
|
||||
@@ -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'
|
||||
@@ -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."
|
||||
@@ -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
|
||||
@@ -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.
|
||||
..()
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
|
||||
@@ -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]
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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
|
||||
|
||||
|
Before Width: | Height: | Size: 301 KiB After Width: | Height: | Size: 301 KiB |
|
Before Width: | Height: | Size: 4.3 KiB After Width: | Height: | Size: 689 B |
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 115 KiB After Width: | Height: | Size: 137 KiB |
|
Before Width: | Height: | Size: 35 KiB After Width: | Height: | Size: 37 KiB |
|
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 120 KiB After Width: | Height: | Size: 142 KiB |
|
Before Width: | Height: | Size: 56 KiB After Width: | Height: | Size: 56 KiB |
@@ -603,6 +603,9 @@ macro "hotkeymode"
|
||||
elem
|
||||
name = "U"
|
||||
command = "Rest"
|
||||
elem
|
||||
name = "B"
|
||||
command = "Resist"
|
||||
elem
|
||||
name = "NUMPAD1"
|
||||
command = "body-r-leg"
|
||||
|
||||
@@ -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"
|
||||
|
||||