Merge branch 'master' into upstream-merge-9932

This commit is contained in:
Nadyr
2021-03-21 04:17:12 -04:00
committed by GitHub
131 changed files with 5710 additions and 2973 deletions
-6
View File
@@ -160,12 +160,6 @@
#define FLASH_PROTECTION_MODERATE 1
#define FLASH_PROTECTION_MAJOR 2
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
#define ANIMAL_SPAWN_DELAY round(config.respawn_delay / 6)
#define DRONE_SPAWN_DELAY round(config.respawn_delay / 3)
// Incapacitation flags, used by the mob/proc/incapacitated() proc
#define INCAPACITATION_RESTRAINED 1
#define INCAPACITATION_BUCKLED_PARTIALLY 2
+58
View File
@@ -21,6 +21,7 @@ var/global/list/joblist = list() //list of all jobstypes, minus borg and AI
#define all_genders_define_list list(MALE,FEMALE,PLURAL,NEUTER,HERM) //VOREStaton Edit
#define all_genders_text_list list("Male","Female","Plural","Neuter","Herm") //VOREStation Edit
var/list/mannequins_
// Times that players are allowed to respawn ("ckey" = world.time)
GLOBAL_LIST_EMPTY(respawn_timers)
@@ -42,6 +43,11 @@ var/global/list/facial_hair_styles_male_list = list()
var/global/list/facial_hair_styles_female_list = list()
var/global/list/skin_styles_female_list = list() //unused
var/global/list/body_marking_styles_list = list() //stores /datum/sprite_accessory/marking indexed by name
var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type
var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type
var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type
GLOBAL_LIST_INIT(custom_species_bases, new) // Species that can be used for a Custom Species icon base
//Underwear
var/datum/category_collection/underwear/global_underwear = new()
@@ -213,6 +219,23 @@ GLOBAL_LIST_EMPTY(mannequins)
var/decl/closet_appearance/app = new T()
GLOB.closet_appearances[T] = app
paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears
for(var/path in paths)
var/obj/item/clothing/head/instance = new path()
ear_styles_list[path] = instance
// Custom Tails
paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur
for(var/path in paths)
var/datum/sprite_accessory/tail/instance = new path()
tail_styles_list[path] = instance
// Custom Wings
paths = typesof(/datum/sprite_accessory/wing) - /datum/sprite_accessory/wing
for(var/path in paths)
var/datum/sprite_accessory/wing/instance = new path()
wing_styles_list[path] = instance
// VOREStation Add - Vore Modes!
paths = typesof(/datum/digest_mode)
for(var/T in paths)
@@ -220,6 +243,41 @@ GLOBAL_LIST_EMPTY(mannequins)
GLOB.digest_modes[DM.id] = DM
// VOREStation Add End
/*
// Custom species traits
paths = typesof(/datum/trait) - /datum/trait
for(var/path in paths)
var/datum/trait/instance = new path()
if(!instance.name)
continue //A prototype or something
var/cost = instance.cost
traits_costs[path] = cost
all_traits[path] = instance
switch(cost)
if(-INFINITY to -0.1)
negative_traits[path] = instance
if(0)
neutral_traits[path] = instance
if(0.1 to INFINITY)
positive_traits[path] = instance
*/
// Custom species icon bases
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //VOREStation Edit
var/list/whitelisted_icons = list(SPECIES_FENNEC,SPECIES_XENOHYBRID) //VOREStation Edit
for(var/species_name in GLOB.playable_species)
if(species_name in blacklisted_icons)
continue
var/datum/species/S = GLOB.all_species[species_name]
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
continue
GLOB.custom_species_bases += species_name
for(var/species_name in whitelisted_icons)
GLOB.custom_species_bases += species_name
return 1 // Hooks must return 1
return 1
/* // Uncomment to debug chemical reaction list.
+2 -38
View File
@@ -2,10 +2,7 @@
* VOREStation global lists
*/
var/global/list/ear_styles_list = list() // Stores /datum/sprite_accessory/ears indexed by type
var/global/list/hair_accesories_list= list()// Stores /datum/sprite_accessory/hair_accessory indexed by type
var/global/list/tail_styles_list = list() // Stores /datum/sprite_accessory/tail indexed by type
var/global/list/wing_styles_list = list() // Stores /datum/sprite_accessory/wing indexed by type
var/global/list/negative_traits = list() // Negative custom species traits, indexed by path
var/global/list/neutral_traits = list() // Neutral custom species traits, indexed by path
var/global/list/everyone_traits = list() // Neutral traits available to all species, indexed by path
@@ -16,8 +13,6 @@ var/global/list/active_ghost_pods = list()
var/global/list/sensorpreflist = list("Off", "Binary", "Vitals", "Tracking", "No Preference") //TFF 5/8/19 - Suit Sensors global list
var/global/list/custom_species_bases = list() // Species that can be used for a Custom Species icon base
//stores numeric player size options indexed by name
var/global/list/player_sizes_list = list(
"Macro" = RESIZE_HUGE,
@@ -228,7 +223,7 @@ var/global/list/edible_trash = list(/obj/item/broken_device,
/obj/item/weapon/storage/fancy/crayons,
/obj/item/weapon/storage/fancy/egg_box,
/obj/item/weapon/storage/wallet,
/obj/item/weapon/storage/vore_egg,
/obj/item/weapon/storage/vore_egg,
/obj/item/weapon/material/kitchen) //chompstation addition
var/global/list/contamination_flavors = list(
@@ -483,24 +478,6 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
/hook/startup/proc/init_vore_datum_ref_lists()
var/paths
// Custom Ears
paths = typesof(/datum/sprite_accessory/ears) - /datum/sprite_accessory/ears
for(var/path in paths)
var/obj/item/clothing/head/instance = new path()
ear_styles_list[path] = instance
// Custom Tails
paths = typesof(/datum/sprite_accessory/tail) - /datum/sprite_accessory/tail - /datum/sprite_accessory/tail/taur
for(var/path in paths)
var/datum/sprite_accessory/tail/instance = new path()
tail_styles_list[path] = instance
// Custom Wings
paths = typesof(/datum/sprite_accessory/wing) - /datum/sprite_accessory/wing
for(var/path in paths)
var/datum/sprite_accessory/wing/instance = new path()
wing_styles_list[path] = instance
// Custom Hair Accessories
paths = typesof(/datum/sprite_accessory/hair_accessory) - /datum/sprite_accessory/hair_accessory
for(var/path in paths)
@@ -526,19 +503,6 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
if(0.1 to INFINITY)
positive_traits[path] = instance
// Custom species icon bases
var/list/blacklisted_icons = list(SPECIES_CUSTOM,SPECIES_PROMETHEAN) //Just ones that won't work well.
var/list/whitelisted_icons = list(SPECIES_FENNEC,SPECIES_XENOHYBRID) //Include these anyway
for(var/species_name in GLOB.playable_species)
if(species_name in blacklisted_icons)
continue
var/datum/species/S = GLOB.all_species[species_name]
if(S.spawn_flags & SPECIES_IS_WHITELISTED)
continue
custom_species_bases += species_name
for(var/species_name in whitelisted_icons)
custom_species_bases += species_name
// Weaver recipe stuff
paths = typesof(/datum/weaver_recipe/structure) - /datum/weaver_recipe/structure
for(var/path in paths)
@@ -557,4 +521,4 @@ var/global/list/remainless_species = list(SPECIES_PROMETHEAN,
return 1 // Hooks must return 1
var/global/list/weavable_structures = list()
var/global/list/weavable_items = list()
var/global/list/weavable_items = list()
+4 -1
View File
@@ -37,4 +37,7 @@
#define random_id(key,min_id,max_id) uniqueness_repository.Generate(/datum/uniqueness_generator/id_random, key, min_id, max_id)
#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") }
#define ARGS_DEBUG log_debug("[__FILE__] - [__LINE__]") ; for(var/arg in args) { log_debug("\t[log_info_line(arg)]") }
#define isitem(A) istype(A, /obj/item)
#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur)
-2
View File
@@ -1,3 +1 @@
#define isbelly(A) istype(A, /obj/belly)
#define isitem(A) istype(A, /obj/item)
#define isTaurTail(A) istype(A, /datum/sprite_accessory/tail/taur)
+4 -1
View File
@@ -371,5 +371,8 @@
var/list/P = params2list(params)
var/turf/T = screen_loc2turf(P["screen-loc"], get_turf(usr))
if(T)
if(modifiers["shift"])
usr.face_atom(T)
return 1
T.Click(location, control, params)
. = 1
return 1
+9 -1
View File
@@ -39,7 +39,9 @@ var/list/outfits_decls_by_type_
var/suit_store = null
var/r_hand = null
var/l_hand = null
var/list/backpack_contents = list() // In the list(path=count,otherpath=count) format
// In the list(path=count,otherpath=count) format
var/list/uniform_accessories = list() // webbing, armbands etc - fits in slot_tie
var/list/backpack_contents = list()
var/id_type
var/id_desc
@@ -145,6 +147,12 @@ var/list/outfits_decls_by_type_
H.put_in_l_hand(new l_hand(H))
if(r_hand)
H.put_in_r_hand(new r_hand(H))
for(var/path in uniform_accessories)
var/number = uniform_accessories[path]
for(var/i=0,i<number,i++)
H.equip_to_slot_or_del(new path(H), slot_tie)
if(H.species)
H.species.equip_survival_gear(H, flags&OUTFIT_EXTENDED_SURVIVAL, flags&OUTFIT_COMPREHENSIVE_SURVIVAL)
+1 -1
View File
@@ -20,7 +20,7 @@
/obj/item/clothing/suit/straight_jacket,
/obj/item/weapon/handcuffs/legcuffs/fuzzy,
/obj/item/weapon/melee/fluff/holochain/mass,
/obj/item/weapon/material/twohanded/fluff/riding_crop,
/obj/item/weapon/material/twohanded/riding_crop,
/obj/item/clothing/under/fluff/latexmaid
)
containertype = /obj/structure/closet/crate
@@ -44,7 +44,7 @@
src.loc = null
user.put_in_hands(I)
user.visible_message("<span class='notice'>\A [I] appears in \the [user]'s hand!</span>")
log_and_message_admins("has stolen [I] with [src].")
add_attack_logs(user,I,"Stolen with [src]")
qdel(src)
//Now let's try to teleport a living mob.
else if(istype(hit_atom, /mob/living))
@@ -68,7 +68,7 @@
else
safe_blink(AM, calculate_spell_power(3))
adjust_instability(3)
log_and_message_admins("has blinked [AM] away.")
add_attack_logs(user,AM,"Blinked")
else
to_chat(user, "<span class='warning'>You need more energy to blink [AM] away!</span>")
@@ -82,7 +82,7 @@
else
safe_blink(user, calculate_spell_power(6))
adjust_instability(1)
log_and_message_admins("has blinked themselves away.")
add_attack_logs(user,user,"Blinked")
else
to_chat(user, "<span class='warning'>You need more energy to blink yourself away!</span>")
@@ -99,6 +99,6 @@
else
safe_blink(AM, 6)
adjust_instability(2)
log_and_message_admins("has blinked [AM] away.")
add_attack_logs(user,AM,"Blinked")
else
to_chat(user, "<span class='warning'>You need more energy to blink [AM] away!</span>")
@@ -36,9 +36,9 @@
var/turf/simulated/frozen = desired_turf
frozen.freeze_floor()
if(check_for_scepter())
log_and_message_admins("has iced the floor with [src] at [T.x],[T.y],[T.z].")
add_attack_logs(user,hit_atom,"Iced the floor with [src] at [T.x],[T.y],[T.z]")
else
log_and_message_admins("has wetted the floor with [src] at [T.x],[T.y],[T.z].")
add_attack_logs(user,hit_atom,"Wetted the floor with [src] at [T.x],[T.y],[T.z]")
else if(hit_atom.reagents && !ismob(hit_atom)) //TODO: Something for the scepter
hit_atom.reagents.add_reagent(id = "water", amount = 60, data = null, safety = 0)
adjust_instability(5)
@@ -125,7 +125,7 @@
return 0
if(pay_energy(25 * controlled_mobs.len))
attack_all(L)
log_and_message_admins("has commanded their army of [controlled_mobs.len] to attack [L].")
add_attack_logs(user,L,"Commanded their army of [controlled_mobs.len]")
to_chat(user, "<span class='notice'>You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to \
attack \the [L].</span>")
//This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second.
@@ -57,7 +57,7 @@
return 0
siphoning = AM
update_icon()
log_and_message_admins("is siphoning energy from \a [AM].")
add_attack_logs(user,AM,"Siphoned energy from [src]")
else
stop_siphoning()
@@ -46,7 +46,7 @@
visible_message("<span class='danger'>\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!</span>")
to_chat(L, "<span class='danger'>You ignite!</span>")
L.fire_act()
log_and_message_admins("has ignited [L] with [src].")
add_attack_logs(user,L,"Ignited with [src]")
adjust_instability(12)
else
//This is needed in order for the welder to work, and works similarly to grippers.
@@ -45,7 +45,7 @@
return
var/obj/item/weapon/inserted_spell/inserted = new inserting(L,user,src)
inserted.spell_power_at_creation = calculate_spell_power(1.0)
log_and_message_admins("has casted [src] on [L].")
add_attack_logs(user,L,"Casted [src]")
qdel(src)
/obj/item/weapon/spell/insert/on_melee_cast(atom/hit_atom, mob/user)
@@ -14,7 +14,7 @@
var/obj/item/projectile/new_projectile = make_projectile(spell_projectile, user)
new_projectile.old_style_target(hit_atom)
new_projectile.fire()
log_and_message_admins("has casted [src] at \the [hit_atom].")
add_attack_logs(user,hit_atom,"Casted [src]")
if(fire_sound)
playsound(src, fire_sound, 75, 1)
adjust_instability(instability_per_shot)
@@ -39,4 +39,4 @@
return TRUE
return FALSE // We got dropped before the firing occured.
return TRUE // No delay, no need to check.
return FALSE
return FALSE
@@ -62,7 +62,7 @@
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
// now send a log so that admins don't think they're shooting themselves on purpose.
log_and_message_admins("[user] reflected [attacker]'s attack back at them.")
add_attack_logs(user,attacker,"Reflected [attacker]'s attack")
if(!reflecting)
reflecting = 1
@@ -82,7 +82,7 @@
spark_system.start()
playsound(src, 'sound/weapons/blade1.ogg', 50, 1)
log_and_message_admins("[user] reflected [attacker]'s attack back at them.")
add_attack_logs(user,attacker,"Reflected [attacker]'s attack")
if(!reflecting)
reflecting = 1
@@ -76,5 +76,5 @@
I.afterattack(chosen_target, user)
else
chosen_target.attack_hand(user)
log_and_message_admins("has warp striked [chosen_target].")
add_attack_logs(user,chosen_target,"Warp striked")
+2 -2
View File
@@ -77,7 +77,7 @@
title = "Clown"
flag = CLOWN
departments = list(DEPARTMENT_CIVILIAN)
department_flag = CIVILIAN
department_flag = ENGSEC
faction = "Station"
total_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
spawn_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
@@ -107,7 +107,7 @@
title = "Mime"
flag = MIME
departments = list(DEPARTMENT_CIVILIAN)
department_flag = CIVILIAN
department_flag = ENGSEC
faction = "Station"
total_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
spawn_positions = -1 //CHOMP Edit: Disable. Change to + integer to enable.
+3 -5
View File
@@ -11,8 +11,8 @@ var/const/ENGINEER =(1<<6)
var/const/ATMOSTECH =(1<<7)
var/const/AI =(1<<8)
var/const/CYBORG =(1<<9)
var/const/BLUESHIELD =(1<<13) //YW addition
var/const/SECPILOT =(1<<14) //YW addition
var/const/CLOWN =(1<<13) //VOREStation Add
var/const/MIME =(1<<14) //VOREStation Add
var/const/INTERN =(1<<15) //VOREStation Add
var/const/MEDSCI =(1<<1)
@@ -49,9 +49,7 @@ var/const/CHAPLAIN =(1<<10)
var/const/ASSISTANT =(1<<11)
var/const/BRIDGE =(1<<12)
var/const/PILOT =(1<<13) //VOREStation Add
var/const/CLOWN =(1<<14) //VOREStation Add
var/const/MIME =(1<<15) //VOREStation Add
var/const/ENTERTAINER =(1<<16) //VOREStation Add
var/const/ENTERTAINER =(1<<14) //VOREStation Add
var/list/assistant_occupations = list(
)
+19 -1
View File
@@ -281,6 +281,15 @@
//Create the desired item.
var/obj/item/I = new making.path(src.loc)
if(LAZYLEN(I.matter)) // Sadly we must obey the laws of equivalent exchange.
I.matter.Cut()
else
I.matter = list()
for(var/material in making.resources) // Handle the datum's autoscaling for waste, so we're properly wasting material, but not so much if we have efficiency.
I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency)
flick("[initial(icon_state)]_finish", src)
if(multiplier > 1)
if(istype(I, /obj/item/stack))
@@ -288,7 +297,16 @@
S.amount = multiplier
else
for(multiplier; multiplier > 1; --multiplier) // Create multiple items if it's not a stack.
new making.path(src.loc)
I = new making.path(src.loc)
// We've already deducted the cost of multiple items. Process the matter the same.
if(LAZYLEN(I.matter))
I.matter.Cut()
else
I.matter = list()
for(var/material in making.resources)
I.matter[material] = round(making.resources[material] / (making.no_scale ? 1 : 1.25)) * (making.no_scale ? 1 : mat_efficiency)
return TRUE
return FALSE
+15 -1
View File
@@ -1319,4 +1319,18 @@
wintick = 0
gameStatus = "CLAWMACHINE_NEW"
emagged = 1
return 1
return 1
/obj/machinery/computer/arcade/attackby(obj/item/O, mob/user, params)
if(istype(O, /obj/item/stack/arcadeticket))
var/obj/item/stack/arcadeticket/T = O
var/amount = T.get_amount()
if(amount <2)
to_chat(user, "<span class='warning'>You need 2 tickets to claim a prize!</span>")
return
prizevend(user)
T.pay_tickets()
T.update_icon()
O = T
to_chat(user, "<span class='notice'>You turn in 2 tickets to the [src] and claim a prize!</span>")
return
+2
View File
@@ -302,6 +302,7 @@
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 10,
/obj/item/weapon/storage/fancy/cigarettes/menthols = 10,
/obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/rollingpapers/blunt = 10,
/obj/item/weapon/storage/chewables/tobacco = 5,
/obj/item/weapon/storage/chewables/tobacco/fine = 5,
/obj/item/weapon/storage/box/matches = 10,
@@ -330,6 +331,7 @@
/obj/item/weapon/storage/fancy/cigarettes/jerichos = 22,
/obj/item/weapon/storage/fancy/cigarettes/menthols = 18,
/obj/item/weapon/storage/rollingpapers = 10,
/obj/item/weapon/storage/rollingpapers/blunt = 20,
/obj/item/weapon/storage/chewables/tobacco = 10,
/obj/item/weapon/storage/chewables/tobacco/fine = 20,
/obj/item/weapon/storage/box/matches = 1,
+9 -2
View File
@@ -356,6 +356,10 @@
playsound(src, pickup_sound, 20, preference = /datum/client_preference/pickup_sounds)
return
// As above but for items being equipped to an active module on a robot.
/obj/item/proc/equipped_robot(var/mob/user)
return
//Defines which slots correspond to which slot flags
var/list/global/slot_flags_enumeration = list(
"[slot_wear_mask]" = SLOT_MASK,
@@ -788,7 +792,7 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
drop_sound = 'sound/items/drop/device.ogg'
//Worn icon generation for on-mob sprites
/obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null) //VOREStation edit - add 'clip mask' argument.
/obj/item/proc/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer,var/icon/clip_mask = null)
//Get the required information about the base icon
var/icon/icon2use = get_worn_icon_file(body_type = body_type, slot_name = slot_name, default_icon = default_icon, inhands = inhands)
var/state2use = get_worn_icon_state(slot_name = slot_name)
@@ -818,6 +822,9 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
if(istype(clip_mask)) //VOREStation Edit - For taur bodies/tails clipping off parts of uniforms and suits.
standing.filters += filter(type = "alpha", icon = clip_mask)
if(istype(clip_mask)) //For taur bodies/tails clipping off parts of uniforms and suits.
standing.filters += filter(type = "alpha", icon = clip_mask)
//Apply any special features
if(!inhands)
apply_blood(standing) //Some items show blood when bloodied
@@ -949,4 +956,4 @@ modules/mob/living/carbon/human/life.dm if you die, you will be zoomed out.
// Like the above, but used for RPED sorting of parts.
/obj/item/proc/rped_rating()
return get_rating()
return get_rating()
+18 -15
View File
@@ -67,6 +67,10 @@ var/list/GPS_list = list()
. = ..()
update_holder()
/obj/item/device/gps/equipped_robot()
. = ..()
update_holder()
/obj/item/device/gps/equipped()
. = ..()
update_holder()
@@ -107,6 +111,7 @@ var/list/GPS_list = list()
/obj/item/device/gps/proc/update_compass(var/update_compass_icon)
compass.hide_waypoints(FALSE)
var/turf/my_turf = get_turf(src)
for(var/thing in tracking_devices)
var/obj/item/device/gps/gps = locate(thing)
if(!istype(gps) || QDELETED(gps))
@@ -119,7 +124,7 @@ var/list/GPS_list = list()
compass.set_waypoint("\ref[gps]", gps_tag, gps_turf.x, gps_turf.y, gps_turf.z, LAZYACCESS(tracking_devices, "\ref[gps]"))
else
compass.set_waypoint("\ref[gps]", gps_tag, 0, 0, 0, LAZYACCESS(tracking_devices, "\ref[gps]"))
if(can_track(gps))
if(can_track(gps) && gps_turf && my_turf && gps_turf.z == my_turf.z)
compass.show_waypoint("\ref[gps]")
compass.rebuild_overlay_lists(update_compass_icon)
@@ -183,11 +188,11 @@ var/list/GPS_list = list()
var/turf/curr = get_turf(src)
var/area/my_area = get_area(src)
dat["my_area_name"] = my_area.name
dat["my_area_name"] = strip_improper(my_area.name)
dat["curr_x"] = curr.x
dat["curr_y"] = curr.y
dat["curr_z"] = curr.z
dat["curr_z_name"] = using_map.get_zlevel_name(curr.z)
dat["curr_z_name"] = strip_improper(using_map.get_zlevel_name(curr.z))
dat["gps_list"] = list()
dat["z_level_detection"] = using_map.get_map_levels(curr.z, long_range)
@@ -201,10 +206,10 @@ var/list/GPS_list = list()
gps_data["gps_tag"] = G.gps_tag
var/area/A = get_area(G)
gps_data["area_name"] = A.get_name()
gps_data["area_name"] = strip_improper(A.get_name())
var/turf/T = get_turf(G)
gps_data["z_name"] = using_map.get_zlevel_name(T.z)
gps_data["z_name"] = strip_improper(using_map.get_zlevel_name(T.z))
gps_data["direction"] = get_adir(curr, T)
gps_data["degrees"] = round(Get_Angle(curr,T))
gps_data["distX"] = T.x - curr.x
@@ -221,7 +226,7 @@ var/list/GPS_list = list()
/obj/item/device/gps/proc/display(mob/user)
if(emped)
to_chat(user, "It's busted!")
to_chat(user, SPAN_WARNING("It's busted!"))
return
var/list/dat = list()
@@ -229,9 +234,9 @@ var/list/GPS_list = list()
dat += "<table width = '100%'>"
if(!tracking)
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch On]\]</a></tr>"
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch On\]</a></tr>"
else
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch Off]\]</a></tr>"
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch Off\]</a></tr>"
dat += "<tr><td colspan = 2><b>Current location</b></td><td colspan = 2>[gps_data["my_area_name"]]</td><td colspan = 2><b>([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])</b></td></tr>"
dat += "<tr><td colspan = 4>[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'.</td>"
dat += "<td><a href='?src=\ref[src];tag=1'>\[Change Tag\]</a><a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a>[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]</td></tr>"
@@ -244,13 +249,12 @@ var/list/GPS_list = list()
dat += "<td>[gps["gps_tag"]]</td><td>[gps["area_name"]]</td>"
if(istype(gps_data["ref"], /obj/item/device/gps/internal/poi))
dat += "<td>[gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "in \the [gps["z_name"]]"]</td>"
dat += "<td>[gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "[gps["z_name"]]"]</td>"
else
dat += "<td>([gps["x"]], [gps["y"]], [gps["z_name"]])</td>"
if(gps["local"])
dat += "<td>[gps["distance"]]m</td>"
dat += "<td>[gps["degrees"]]° ([gps["direction"]])</td>"
dat += "<td>[gps["distance"]]m</td><td>[gps["direction"]]</td>"
else
dat += "<td colspan = 2>Non-local signal.</td>"
@@ -471,9 +475,9 @@ var/list/GPS_list = list()
dat += "<table width = '100%'>"
if(!tracking)
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch On]\]</a></tr>"
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch On\]</a></tr>"
else
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch Off]\]</a></tr>"
dat += "<tr><td colspan = 6></td><a href='?src=\ref[src];toggle_power=1'>\[Switch Off\]</a></tr>"
dat += "<tr><td colspan = 2><b>Current location</b></td><td colspan = 2>[gps_data["my_area_name"]]</td><td colspan = 2><b>([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])</b></td></tr>"
dat += "<tr><td colspan = 4>[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'.</td>"
dat += "<td><a href='?src=\ref[src];tag=1'>\[Change Tag\]</a><a href='?src=\ref[src];range=1'>\[Toggle Scan Range\]</a>[can_hide_signal ? "<a href='?src=\ref[src];hide=1'>\[Toggle Signal Visibility\]</a>":""]</td></tr>"
@@ -485,8 +489,7 @@ var/list/GPS_list = list()
var/gps_ref = "\ref[gps["ref"]]"
dat += "<td>[gps["gps_tag"]]</td><td>[gps["area_name"]] ([gps["x"]], [gps["y"]], [gps["z_name"]])</td>"
if(gps["local"])
dat += "<td>[gps["distance"]]m</td>"
dat += "<td>[gps["degrees"]]° ([gps["direction"]])</td>"
dat += "<td>[gps["distance"]]m</td><td>[gps["direction"]]</td>"
else
dat += "<td colspan = 2>Non-local signal.</td>"
if(LAZYACCESS(tracking_devices, gps_ref))
+37 -1
View File
@@ -169,8 +169,37 @@
var/atom/O
if(recipe.use_material)
O = new recipe.result_type(user.loc, recipe.use_material)
if(istype(O, /obj))
var/obj/Ob = O
if(LAZYLEN(Ob.matter)) // Law of equivalent exchange.
Ob.matter.Cut()
else
Ob.matter = list()
var/mattermult = istype(Ob, /obj/item) ? min(2000, 400 * Ob.w_class) : 2000
Ob.matter[recipe.use_material] = mattermult / produced * required
else
O = new recipe.result_type(user.loc)
if(recipe.matter_material)
if(istype(O, /obj))
var/obj/Ob = O
if(LAZYLEN(Ob.matter)) // Law of equivalent exchange.
Ob.matter.Cut()
else
Ob.matter = list()
var/mattermult = istype(Ob, /obj/item) ? min(2000, 400 * Ob.w_class) : 2000
Ob.matter[recipe.use_material] = mattermult / produced * required
O.set_dir(user.dir)
O.add_fingerprint(user)
@@ -378,8 +407,9 @@
var/on_floor = 0
var/use_material
var/pass_color
var/matter_material // Material type used for recycling. Default, uses use_material. For non-material-based objects however, matter_material is needed.
/datum/stack_recipe/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null, pass_stack_color)
/datum/stack_recipe/New(title, result_type, req_amount = 1, res_amount = 1, max_res_amount = 1, time = 0, one_per_turf = 0, on_floor = 0, supplied_material = null, pass_stack_color, recycle_material = null)
src.title = title
src.result_type = result_type
src.req_amount = req_amount
@@ -391,6 +421,12 @@
src.use_material = supplied_material
src.pass_color = pass_stack_color
if(!recycle_material && src.use_material)
src.matter_material = src.use_material
else if(recycle_material)
src.matter_material = recycle_material
/*
* Recipe list datum
*/
@@ -484,34 +484,70 @@ CIGARETTE PACKETS ARE IN FANCY.DM
/obj/item/clothing/mask/smokable/cigarette/joint
name = "joint"
desc = "This probably shouldn't ever show up."
desc = "A joint lovingly rolled and crafted with care. Blaze it."
icon_state = "joint"
max_smoketime = 400
smoketime = 400
chem_volume = 25
/obj/item/clothing/mask/smokable/cigarette/joint/blunt
name = "blunt"
desc = "A blunt lovingly rolled and crafted with care. Blaze it."
icon_state = "cigar"
max_smoketime = 500
smoketime = 500
nicotine_amt = 0
nicotine_amt = 4
chem_volume = 45
/obj/item/weapon/rollingpaper
/obj/item/weapon/reagent_containers/rollingpaper
name = "rolling paper"
desc = "A small, thin piece of easily flammable paper, commonly used for rolling and smoking various dried plants."
description_fluff = "The legalization of certain substances propelled the sale of rolling papers through the roof. Now almost every Trans-stellar produces a variety, often of questionable quality."
icon = 'icons/obj/cigarettes.dmi'
icon_state = "cig paper"
volume = 25
var/obj/item/clothing/mask/smokable/cigarette/crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint
/obj/item/weapon/rollingpaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
/obj/item/weapon/reagent_containers/rollingpaper/blunt
name = "blunt wrap"
desc = "A small piece of easily flammable paper similar to that which encases cigars. It's made out of tobacco, bigger than a standard rolling paper, and will last longer."
icon_state = "blunt paper"
volume = 45
crafted_type = /obj/item/clothing/mask/smokable/cigarette/joint/blunt
/obj/item/weapon/reagent_containers/rollingpaper/attackby(obj/item/weapon/W as obj, mob/user as mob)
if (istype(W, /obj/item/weapon/reagent_containers/food/snacks))
var/obj/item/weapon/reagent_containers/food/snacks/grown/G = W
if (!G.dry)
to_chat(user, "<span class='notice'>[G] must be dried before you roll it into [src].</span>")
if (!G.dry) //This prevents people from just stuffing cheeseburgers into their joint
to_chat(user, "<span class='notice'>[G.name] must be dried before you add it to [src].</span>")
return
var/obj/item/clothing/mask/smokable/cigarette/joint/J = new /obj/item/clothing/mask/smokable/cigarette/joint(user.loc)
to_chat(usr, "<span class='notice'>You roll the [G.name] into a joint!</span>")
J.add_fingerprint(user)
if (G.reagents.total_volume + src.reagents.total_volume > src.reagents.maximum_volume) //Check that we don't have too much already in the paper before adding things
to_chat(user, "<span class='warning'>The [src] is too full to add [G.name].</span>")
return
if (src.reagents.total_volume == 0)
if (istype(src, /obj/item/weapon/reagent_containers/rollingpaper/blunt)) //update the icon if this is the first thing we're adding to the paper
src.icon_state = "blunt_full"
else
src.icon_state = "paper_full"
to_chat(user, "<span class='notice'>You add the [G.name] to the [src.name].</span>")
src.add_fingerprint(user)
if(G.reagents)
G.reagents.trans_to_obj(J, G.reagents.total_volume)
J.name = "[G.name] joint"
J.desc = "A joint lovingly rolled and filled with [G.name]. Blaze it."
G.reagents.trans_to_obj(src, G.reagents.total_volume) //adds the reagents from the plant into the paper
user.drop_from_inventory(G)
qdel(G)
qdel(src)
/obj/item/weapon/reagent_containers/rollingpaper/attack_self(mob/living/user)
if(!src.reagents) //don't roll an empty joint
to_chat(user, "<span class='warning'>There is nothing in [src]. Add something to it first.</span>")
return
var/obj/item/clothing/mask/smokable/cigarette/J = new crafted_type()
to_chat(user,"<span class='notice'>You roll the [src] into a blunt!</span>")
J.add_fingerprint(user)
if(src.reagents)
src.reagents.trans_to_obj(J, src.reagents.total_volume)
user.drop_from_inventory(src)
user.put_in_hands(J)
qdel(src)
/////////
//ZIPPO//
@@ -177,4 +177,15 @@
default_material = "DEFAULT_WALL_MATERIAL"
fragile = 0
sharp = 1
edge = 0
edge = 0
/obj/item/weapon/material/twohanded/riding_crop
name = "riding crop"
desc = "A rod, a little over a foot long with a widened grip and a thick, leather patch at the end. Used since the dawn of the West to control animals."
force_divisor = 0.05 //Required in order for the X attacks Y message to pop up.
unwielded_force_divisor = 1 // One here, too.
applies_material_colour = 1
unbreakable = 1
base_icon = "riding_crop"
icon_state = "riding_crop0"
attack_verb = list("cropped","spanked","swatted","smacked","peppered")
@@ -0,0 +1,9 @@
//1R1S: Malady Blanche
/obj/item/weapon/material/twohanded/riding_crop/malady
name = "Malady's riding crop"
icon = 'icons/vore/custom_items_vr.dmi'
item_icons = list(
slot_l_hand_str = 'icons/vore/custom_items_left_hand_vr.dmi',
slot_r_hand_str = 'icons/vore/custom_items_right_hand_vr.dmi',
)
desc = "An infernum made riding crop with Malady Blanche engraved in the shaft. It's a little worn from how many butts it has spanked."
@@ -354,8 +354,16 @@
throwforce = 2
slot_flags = SLOT_BELT
storage_slots = 14
can_hold = list(/obj/item/weapon/rollingpaper)
starts_with = list(/obj/item/weapon/rollingpaper = 14)
can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper)
starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper = 14)
/obj/item/weapon/storage/rollingpapers/blunt
name = "blunt wrap pack"
desc = "A small cardboard pack containing several folded blunt wraps."
icon_state = "bluntbox"
storage_slots = 7
can_hold = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt)
starts_with = list(/obj/item/weapon/reagent_containers/rollingpaper/blunt = 7)
/*
* Vial Box
@@ -0,0 +1,4 @@
/obj/item/weapon/weldpack
sprite_sheets = list(
SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi'
)
@@ -6,6 +6,37 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
var/icon/bgstate = "000"
var/list/bgstate_options = list("000", "midgrey", "FFF", "white", "steel", "techmaint", "dark", "plating", "reinforced")
var/ear_style // Type of selected ear style
var/r_ears = 30 // Ear color.
var/g_ears = 30 // Ear color
var/b_ears = 30 // Ear color
var/r_ears2 = 30 // Ear extra color.
var/g_ears2 = 30 // Ear extra color
var/b_ears2 = 30 // Ear extra color
var/r_ears3 = 30 // Ear tertiary color.
var/g_ears3 = 30 // Ear tertiary color
var/b_ears3 = 30 // Ear tertiary color
var/tail_style // Type of selected tail style
var/r_tail = 30 // Tail/Taur color
var/g_tail = 30 // Tail/Taur color
var/b_tail = 30 // Tail/Taur color
var/r_tail2 = 30 // For extra overlay.
var/g_tail2 = 30 // For extra overlay.
var/b_tail2 = 30 // For extra overlay.
var/r_tail3 = 30 // For tertiary overlay.
var/g_tail3 = 30 // For tertiary overlay.
var/b_tail3 = 30 // For tertiary overlay.
var/wing_style // Type of selected wing style
var/r_wing = 30 // Wing color
var/g_wing = 30 // Wing color
var/b_wing = 30 // Wing color
var/r_wing2 = 30 // Wing extra color
var/g_wing2 = 30 // Wing extra color
var/b_wing2 = 30 // Wing extra color
var/r_wing3 = 30 // Wing tertiary color
var/g_wing3 = 30 // Wing tertiary color
var/b_wing3 = 30 // Wing tertiary color
/datum/category_item/player_setup_item/general/body
name = "Body"
sort_order = 3
@@ -52,6 +83,36 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["colorblind_vulp"] >> pref.colorblind_vulp
S["colorblind_taj"] >> pref.colorblind_taj
S["haemophilia"] >> pref.haemophilia //YWadd end
S["ear_style"] >> pref.ear_style
S["r_ears"] >> pref.r_ears
S["g_ears"] >> pref.g_ears
S["b_ears"] >> pref.b_ears
S["r_ears2"] >> pref.r_ears2
S["g_ears2"] >> pref.g_ears2
S["b_ears2"] >> pref.b_ears2
S["r_ears3"] >> pref.r_ears3
S["g_ears3"] >> pref.g_ears3
S["b_ears3"] >> pref.b_ears3
S["tail_style"] >> pref.tail_style
S["r_tail"] >> pref.r_tail
S["g_tail"] >> pref.g_tail
S["b_tail"] >> pref.b_tail
S["r_tail2"] >> pref.r_tail2
S["g_tail2"] >> pref.g_tail2
S["b_tail2"] >> pref.b_tail2
S["r_tail3"] >> pref.r_tail3
S["g_tail3"] >> pref.g_tail3
S["b_tail3"] >> pref.b_tail3
S["wing_style"] >> pref.wing_style
S["r_wing"] >> pref.r_wing
S["g_wing"] >> pref.g_wing
S["b_wing"] >> pref.b_wing
S["r_wing2"] >> pref.r_wing2
S["g_wing2"] >> pref.g_wing2
S["b_wing2"] >> pref.b_wing2
S["r_wing3"] >> pref.r_wing3
S["g_wing3"] >> pref.g_wing3
S["b_wing3"] >> pref.b_wing3
/datum/category_item/player_setup_item/general/body/save_character(var/savefile/S)
S["species"] << pref.species
@@ -92,6 +153,36 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
S["colorblind_vulp"] << pref.colorblind_vulp
S["colorblind_taj"] << pref.colorblind_taj
S["haemophilia"] << pref.haemophilia //YWadd end
S["ear_style"] << pref.ear_style
S["r_ears"] << pref.r_ears
S["g_ears"] << pref.g_ears
S["b_ears"] << pref.b_ears
S["r_ears2"] << pref.r_ears2
S["g_ears2"] << pref.g_ears2
S["b_ears2"] << pref.b_ears2
S["r_ears3"] << pref.r_ears3
S["g_ears3"] << pref.g_ears3
S["b_ears3"] << pref.b_ears3
S["tail_style"] << pref.tail_style
S["r_tail"] << pref.r_tail
S["g_tail"] << pref.g_tail
S["b_tail"] << pref.b_tail
S["r_tail2"] << pref.r_tail2
S["g_tail2"] << pref.g_tail2
S["b_tail2"] << pref.b_tail2
S["r_tail3"] << pref.r_tail3
S["g_tail3"] << pref.g_tail3
S["b_tail3"] << pref.b_tail3
S["wing_style"] << pref.wing_style
S["r_wing"] << pref.r_wing
S["g_wing"] << pref.g_wing
S["b_wing"] << pref.b_wing
S["r_wing2"] << pref.r_wing2
S["g_wing2"] << pref.g_wing2
S["b_wing2"] << pref.b_wing2
S["r_wing3"] << pref.r_wing3
S["g_wing3"] << pref.g_wing3
S["b_wing3"] << pref.b_wing3
/datum/category_item/player_setup_item/general/body/sanitize_character(var/savefile/S)
if(!pref.species || !(pref.species in GLOB.playable_species))
@@ -126,6 +217,49 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
if(!pref.bgstate || !(pref.bgstate in pref.bgstate_options))
pref.bgstate = "000"
pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears))
pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears))
pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears))
pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2))
pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2))
pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2))
pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3))
pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3))
pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3))
pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail))
pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail))
pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail))
pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2))
pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2))
pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2))
pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3))
pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3))
pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3))
pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing))
pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing))
pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing))
pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2))
pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2))
pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2))
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)
pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style))
var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style]
if(temp_ear_style.apply_restrictions && (!(pref.species in temp_ear_style.species_allowed)))
pref.ear_style = initial(pref.ear_style)
if(pref.tail_style)
pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style))
var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style]
if(temp_tail_style.apply_restrictions && (!(pref.species in temp_tail_style.species_allowed)))
pref.tail_style = initial(pref.tail_style)
if(pref.wing_style)
pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style))
var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style]
if(temp_wing_style.apply_restrictions && (!(pref.species in temp_wing_style.species_allowed)))
pref.wing_style = initial(pref.wing_style)
// Moved from /datum/preferences/proc/copy_to()
/datum/category_item/player_setup_item/general/body/copy_to_mob(var/mob/living/carbon/human/character)
// Copy basic values
@@ -164,6 +298,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
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
@@ -171,6 +308,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
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
@@ -178,6 +318,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
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)
if(pref.species == "Grey")//YWadd START
@@ -407,6 +550,62 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
. += "<br><b>Body Color</b><br>"
. += "<a href='?src=\ref[src];skin_color=1'>Change Color</a> [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]<br>"
. += "<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"
. += "<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(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>"
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"
. += "<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)
. += "<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)
. += "<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)
. += "<a href='?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]<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"
. += "<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)
. += "<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)
. += "<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)
. += "<a href='?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]<br>"
. += "<br><a href='?src=\ref[src];marking_style=1'>Body Markings +</a><br>"
. += "<table>"
for(var/M in pref.body_markings)
@@ -935,8 +1134,9 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
else if(href_list["cycle_bg"])
pref.bgstate = next_in_list(pref.bgstate, pref.bgstate_options)
return TOPIC_REFRESH_UPDATE_PREVIEW
//YW Add Start
else if(href_list["wingdings"])
pref.wingdings = !pref.wingdings
Disabilities_YW(usr)
@@ -967,7 +1167,131 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
//YW Add End
else if(href_list["ear_style"])
// Construct the list of names allowed for this user.
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) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_ear_styles[instance.name] = path
// Present choice to user
var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles
if(new_ear_style)
pref.ear_style = pretty_ear_styles[new_ear_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color"])
var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference",
rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null
if(new_earc)
pref.r_ears = hex2num(copytext(new_earc, 2, 4))
pref.g_ears = hex2num(copytext(new_earc, 4, 6))
pref.b_ears = hex2num(copytext(new_earc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color2"])
var/new_earc2 = input(user, "Choose your character's ear colour:", "Character Preference",
rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null
if(new_earc2)
pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4))
pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6))
pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color3"])
var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference",
rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null
if(new_earc3)
pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4))
pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6))
pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8))
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 = list("Normal" = null)
for(var/path in tail_styles_list)
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_tail_styles[instance.name] = path
// Present choice to user
var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles
if(new_tail_style)
pref.tail_style = pretty_tail_styles[new_tail_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color"])
var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference",
rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null
if(new_tailc)
pref.r_tail = hex2num(copytext(new_tailc, 2, 4))
pref.g_tail = hex2num(copytext(new_tailc, 4, 6))
pref.b_tail = hex2num(copytext(new_tailc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color2"])
var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference",
rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null
if(new_tailc2)
pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4))
pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6))
pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color3"])
var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference",
rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null
if(new_tailc3)
pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4))
pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6))
pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8))
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 = list("Normal" = null)
for(var/path in wing_styles_list)
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)) || check_rights(R_ADMIN | R_EVENT | R_FUN, 0, user)) //VOREStation Edit
pretty_wing_styles[instance.name] = path
// Present choice to user
var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles
if(new_wing_style)
pref.wing_style = pretty_wing_styles[new_wing_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color"])
var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference",
rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null
if(new_wingc)
pref.r_wing = hex2num(copytext(new_wingc, 2, 4))
pref.g_wing = hex2num(copytext(new_wingc, 4, 6))
pref.b_wing = hex2num(copytext(new_wingc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color2"])
var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference",
rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null
if(new_wingc2)
pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4))
pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6))
pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color3"])
var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference",
rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null
if(new_wingc3)
pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4))
pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6))
pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
return ..()
/datum/category_item/player_setup_item/general/body/proc/reset_limbs()
@@ -10,7 +10,7 @@
/datum/gear/utility/implant/tracking
display_name = "implant, tracking"
path = /obj/item/weapon/implant/tracking/weak
cost = 10
cost = 0 //VOREStation Edit. Changed cost to 0
// Remove these after generic implant has been in for awhile and everyone has had a reasonable period to copy their old descs.
/datum/gear/utility/implant/dud1
@@ -29,7 +29,7 @@
// 0-9 CKEYS
/datum/gear/fluff/malady_crop
path = /obj/item/weapon/material/twohanded/fluff/riding_crop/malady
path = /obj/item/weapon/material/twohanded/riding_crop/malady
display_name = "Malady's Crop"
ckeywhitelist = list("1r1s")
character_name = list("Malady Blanche")
@@ -3,373 +3,3 @@
name = "VORE"
sort_order = 8
category_item_type = /datum/category_item/player_setup_item/vore
// Define a place to save appearance in character setup
/datum/preferences
var/ear_style // Type of selected ear style
var/r_ears = 30 // Ear color.
var/g_ears = 30 // Ear color
var/b_ears = 30 // Ear color
var/r_ears2 = 30 // Ear extra color.
var/g_ears2 = 30 // Ear extra color
var/b_ears2 = 30 // Ear extra color
var/r_ears3 = 30 // Ear tertiary color.
var/g_ears3 = 30 // Ear tertiary color
var/b_ears3 = 30 // Ear tertiary color
var/tail_style // Type of selected tail style
var/r_tail = 30 // Tail/Taur color
var/g_tail = 30 // Tail/Taur color
var/b_tail = 30 // Tail/Taur color
var/r_tail2 = 30 // For extra overlay.
var/g_tail2 = 30 // For extra overlay.
var/b_tail2 = 30 // For extra overlay.
var/r_tail3 = 30 // For tertiary overlay.
var/g_tail3 = 30 // For tertiary overlay.
var/b_tail3 = 30 // For tertiary overlay.
var/wing_style // Type of selected wing style
var/r_wing = 30 // Wing color
var/g_wing = 30 // Wing color
var/b_wing = 30 // Wing color
var/r_wing2 = 30 // Wing extra color
var/g_wing2 = 30 // Wing extra color
var/b_wing2 = 30 // Wing extra color
var/r_wing3 = 30 // Wing tertiary color
var/g_wing3 = 30 // Wing tertiary color
var/b_wing3 = 30 // Wing tertiary color
// Definition of the stuff for Ears
/datum/category_item/player_setup_item/vore/ears
name = "Appearance"
sort_order = 1
/datum/category_item/player_setup_item/vore/ears/load_character(var/savefile/S)
S["ear_style"] >> pref.ear_style
S["r_ears"] >> pref.r_ears
S["g_ears"] >> pref.g_ears
S["b_ears"] >> pref.b_ears
S["r_ears2"] >> pref.r_ears2
S["g_ears2"] >> pref.g_ears2
S["b_ears2"] >> pref.b_ears2
S["r_ears3"] >> pref.r_ears3
S["g_ears3"] >> pref.g_ears3
S["b_ears3"] >> pref.b_ears3
S["tail_style"] >> pref.tail_style
S["r_tail"] >> pref.r_tail
S["g_tail"] >> pref.g_tail
S["b_tail"] >> pref.b_tail
S["r_tail2"] >> pref.r_tail2
S["g_tail2"] >> pref.g_tail2
S["b_tail2"] >> pref.b_tail2
S["r_tail3"] >> pref.r_tail3
S["g_tail3"] >> pref.g_tail3
S["b_tail3"] >> pref.b_tail3
S["wing_style"] >> pref.wing_style
S["r_wing"] >> pref.r_wing
S["g_wing"] >> pref.g_wing
S["b_wing"] >> pref.b_wing
S["r_wing2"] >> pref.r_wing2
S["g_wing2"] >> pref.g_wing2
S["b_wing2"] >> pref.b_wing2
S["r_wing3"] >> pref.r_wing3
S["g_wing3"] >> pref.g_wing3
S["b_wing3"] >> pref.b_wing3
/datum/category_item/player_setup_item/vore/ears/save_character(var/savefile/S)
S["ear_style"] << pref.ear_style
S["r_ears"] << pref.r_ears
S["g_ears"] << pref.g_ears
S["b_ears"] << pref.b_ears
S["r_ears2"] << pref.r_ears2
S["g_ears2"] << pref.g_ears2
S["b_ears2"] << pref.b_ears2
S["r_ears3"] << pref.r_ears3
S["g_ears3"] << pref.g_ears3
S["b_ears3"] << pref.b_ears3
S["tail_style"] << pref.tail_style
S["r_tail"] << pref.r_tail
S["g_tail"] << pref.g_tail
S["b_tail"] << pref.b_tail
S["r_tail2"] << pref.r_tail2
S["g_tail2"] << pref.g_tail2
S["b_tail2"] << pref.b_tail2
S["r_tail3"] << pref.r_tail3
S["g_tail3"] << pref.g_tail3
S["b_tail3"] << pref.b_tail3
S["wing_style"] << pref.wing_style
S["r_wing"] << pref.r_wing
S["g_wing"] << pref.g_wing
S["b_wing"] << pref.b_wing
S["r_wing2"] << pref.r_wing2
S["g_wing2"] << pref.g_wing2
S["b_wing2"] << pref.b_wing2
S["r_wing3"] << pref.r_wing3
S["g_wing3"] << pref.g_wing3
S["b_wing3"] << pref.b_wing3
/datum/category_item/player_setup_item/vore/ears/sanitize_character()
pref.r_ears = sanitize_integer(pref.r_ears, 0, 255, initial(pref.r_ears))
pref.g_ears = sanitize_integer(pref.g_ears, 0, 255, initial(pref.g_ears))
pref.b_ears = sanitize_integer(pref.b_ears, 0, 255, initial(pref.b_ears))
pref.r_ears2 = sanitize_integer(pref.r_ears2, 0, 255, initial(pref.r_ears2))
pref.g_ears2 = sanitize_integer(pref.g_ears2, 0, 255, initial(pref.g_ears2))
pref.b_ears2 = sanitize_integer(pref.b_ears2, 0, 255, initial(pref.b_ears2))
pref.r_ears3 = sanitize_integer(pref.r_ears3, 0, 255, initial(pref.r_ears3))
pref.g_ears3 = sanitize_integer(pref.g_ears3, 0, 255, initial(pref.g_ears3))
pref.b_ears3 = sanitize_integer(pref.b_ears3, 0, 255, initial(pref.b_ears3))
pref.r_tail = sanitize_integer(pref.r_tail, 0, 255, initial(pref.r_tail))
pref.g_tail = sanitize_integer(pref.g_tail, 0, 255, initial(pref.g_tail))
pref.b_tail = sanitize_integer(pref.b_tail, 0, 255, initial(pref.b_tail))
pref.r_tail2 = sanitize_integer(pref.r_tail2, 0, 255, initial(pref.r_tail2))
pref.g_tail2 = sanitize_integer(pref.g_tail2, 0, 255, initial(pref.g_tail2))
pref.b_tail2 = sanitize_integer(pref.b_tail2, 0, 255, initial(pref.b_tail2))
pref.r_tail3 = sanitize_integer(pref.r_tail3, 0, 255, initial(pref.r_tail3))
pref.g_tail3 = sanitize_integer(pref.g_tail3, 0, 255, initial(pref.g_tail3))
pref.b_tail3 = sanitize_integer(pref.b_tail3, 0, 255, initial(pref.b_tail3))
pref.r_wing = sanitize_integer(pref.r_wing, 0, 255, initial(pref.r_wing))
pref.g_wing = sanitize_integer(pref.g_wing, 0, 255, initial(pref.g_wing))
pref.b_wing = sanitize_integer(pref.b_wing, 0, 255, initial(pref.b_wing))
pref.r_wing2 = sanitize_integer(pref.r_wing2, 0, 255, initial(pref.r_wing2))
pref.g_wing2 = sanitize_integer(pref.g_wing2, 0, 255, initial(pref.g_wing2))
pref.b_wing2 = sanitize_integer(pref.b_wing2, 0, 255, initial(pref.b_wing2))
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)
pref.ear_style = sanitize_inlist(pref.ear_style, ear_styles_list, initial(pref.ear_style))
var/datum/sprite_accessory/temp_ear_style = ear_styles_list[pref.ear_style]
if(temp_ear_style.apply_restrictions && (!(pref.species in temp_ear_style.species_allowed)))
pref.ear_style = initial(pref.ear_style)
if(pref.tail_style)
pref.tail_style = sanitize_inlist(pref.tail_style, tail_styles_list, initial(pref.tail_style))
var/datum/sprite_accessory/temp_tail_style = tail_styles_list[pref.tail_style]
if(temp_tail_style.apply_restrictions && (!(pref.species in temp_tail_style.species_allowed)))
pref.tail_style = initial(pref.tail_style)
if(pref.wing_style)
pref.wing_style = sanitize_inlist(pref.wing_style, wing_styles_list, initial(pref.wing_style))
var/datum/sprite_accessory/temp_wing_style = wing_styles_list[pref.wing_style]
if(temp_wing_style.apply_restrictions && (!(pref.species in temp_wing_style.species_allowed)))
pref.wing_style = initial(pref.wing_style)
/datum/category_item/player_setup_item/vore/ears/copy_to_mob(var/mob/living/carbon/human/character)
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
/datum/category_item/player_setup_item/vore/ears/content(var/mob/user)
. += "<h2>VORE Station 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"
. += "<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(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>"
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"
. += "<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)
. += "<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)
. += "<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)
. += "<a href='?src=\ref[src];tail_color3=1'>Change Tertiary Color</a> [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]<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"
. += "<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)
. += "<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)
. += "<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)
. += "<a href='?src=\ref[src];wing_color3=1'>Change Secondary Color</a> [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]<br>"
/datum/category_item/player_setup_item/vore/ears/OnTopic(var/href,var/list/href_list, var/mob/user)
if(!CanUseTopic(user))
return TOPIC_NOACTION
else if(href_list["ear_style"])
// Construct the list of names allowed for this user.
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) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)))
pretty_ear_styles[instance.name] = path
// Present choice to user
var/new_ear_style = input(user, "Pick ears", "Character Preference", pref.ear_style) as null|anything in pretty_ear_styles
if(new_ear_style)
pref.ear_style = pretty_ear_styles[new_ear_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color"])
var/new_earc = input(user, "Choose your character's ear colour:", "Character Preference",
rgb(pref.r_ears, pref.g_ears, pref.b_ears)) as color|null
if(new_earc)
pref.r_ears = hex2num(copytext(new_earc, 2, 4))
pref.g_ears = hex2num(copytext(new_earc, 4, 6))
pref.b_ears = hex2num(copytext(new_earc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color2"])
var/new_earc2 = input(user, "Choose your character's secondary ear colour:", "Character Preference",
rgb(pref.r_ears2, pref.g_ears2, pref.b_ears2)) as color|null
if(new_earc2)
pref.r_ears2 = hex2num(copytext(new_earc2, 2, 4))
pref.g_ears2 = hex2num(copytext(new_earc2, 4, 6))
pref.b_ears2 = hex2num(copytext(new_earc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["ear_color3"])
var/new_earc3 = input(user, "Choose your character's tertiary ear colour:", "Character Preference",
rgb(pref.r_ears3, pref.g_ears3, pref.b_ears3)) as color|null
if(new_earc3)
pref.r_ears3 = hex2num(copytext(new_earc3, 2, 4))
pref.g_ears3 = hex2num(copytext(new_earc3, 4, 6))
pref.b_ears3 = hex2num(copytext(new_earc3, 6, 8))
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 = list("Normal" = null)
for(var/path in tail_styles_list)
var/datum/sprite_accessory/tail/instance = tail_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)))
pretty_tail_styles[instance.name] = path
// Present choice to user
var/new_tail_style = input(user, "Pick tails", "Character Preference", pref.tail_style) as null|anything in pretty_tail_styles
if(new_tail_style)
pref.tail_style = pretty_tail_styles[new_tail_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color"])
var/new_tailc = input(user, "Choose your character's tail/taur colour:", "Character Preference",
rgb(pref.r_tail, pref.g_tail, pref.b_tail)) as color|null
if(new_tailc)
pref.r_tail = hex2num(copytext(new_tailc, 2, 4))
pref.g_tail = hex2num(copytext(new_tailc, 4, 6))
pref.b_tail = hex2num(copytext(new_tailc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color2"])
var/new_tailc2 = input(user, "Choose your character's secondary tail/taur colour:", "Character Preference",
rgb(pref.r_tail2, pref.g_tail2, pref.b_tail2)) as color|null
if(new_tailc2)
pref.r_tail2 = hex2num(copytext(new_tailc2, 2, 4))
pref.g_tail2 = hex2num(copytext(new_tailc2, 4, 6))
pref.b_tail2 = hex2num(copytext(new_tailc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["tail_color3"])
var/new_tailc3 = input(user, "Choose your character's tertiary tail/taur colour:", "Character Preference",
rgb(pref.r_tail3, pref.g_tail3, pref.b_tail3)) as color|null
if(new_tailc3)
pref.r_tail3 = hex2num(copytext(new_tailc3, 2, 4))
pref.g_tail3 = hex2num(copytext(new_tailc3, 4, 6))
pref.b_tail3 = hex2num(copytext(new_tailc3, 6, 8))
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 = list("Normal" = null)
for(var/path in wing_styles_list)
var/datum/sprite_accessory/wing/instance = wing_styles_list[path]
if(((!instance.ckeys_allowed) || (usr.ckey in instance.ckeys_allowed)) && ((!instance.apply_restrictions) || (pref.species in instance.species_allowed)))
pretty_wing_styles[instance.name] = path
// Present choice to user
var/new_wing_style = input(user, "Pick wings", "Character Preference", pref.wing_style) as null|anything in pretty_wing_styles
if(new_wing_style)
pref.wing_style = pretty_wing_styles[new_wing_style]
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color"])
var/new_wingc = input(user, "Choose your character's wing colour:", "Character Preference",
rgb(pref.r_wing, pref.g_wing, pref.b_wing)) as color|null
if(new_wingc)
pref.r_wing = hex2num(copytext(new_wingc, 2, 4))
pref.g_wing = hex2num(copytext(new_wingc, 4, 6))
pref.b_wing = hex2num(copytext(new_wingc, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color2"])
var/new_wingc2 = input(user, "Choose your character's secondary wing colour:", "Character Preference",
rgb(pref.r_wing2, pref.g_wing2, pref.b_wing2)) as color|null
if(new_wingc2)
pref.r_wing2 = hex2num(copytext(new_wingc2, 2, 4))
pref.g_wing2 = hex2num(copytext(new_wingc2, 4, 6))
pref.b_wing2 = hex2num(copytext(new_wingc2, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
else if(href_list["wing_color3"])
var/new_wingc3 = input(user, "Choose your character's tertiary wing colour:", "Character Preference",
rgb(pref.r_wing3, pref.g_wing3, pref.b_wing3)) as color|null
if(new_wingc3)
pref.r_wing3 = hex2num(copytext(new_wingc3, 2, 4))
pref.g_wing3 = hex2num(copytext(new_wingc3, 4, 6))
pref.b_wing3 = hex2num(copytext(new_wingc3, 6, 8))
return TOPIC_REFRESH_UPDATE_PREVIEW
return ..()
@@ -96,7 +96,7 @@
var/datum/species/selected_species = GLOB.all_species[pref.species]
if(selected_species.selects_bodytype)
// Allowed!
else if(!pref.custom_base || !(pref.custom_base in custom_species_bases))
else if(!pref.custom_base || !(pref.custom_base in GLOB.custom_species_bases))
pref.custom_base = SPECIES_HUMAN
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
@@ -207,7 +207,7 @@
return TOPIC_REFRESH
else if(href_list["custom_base"])
var/list/choices = custom_species_bases
var/list/choices = GLOB.custom_species_bases
if(pref.species != SPECIES_CUSTOM)
choices = (choices | pref.species)
var/text_choice = input("Pick an icon set for your species:","Icon Base") in choices
+39 -1
View File
@@ -744,6 +744,8 @@
slot_flags = SLOT_OCLOTHING
var/blood_overlay_type = "suit"
blood_sprite_state = "suitblood" //Defaults to the suit's blood overlay, so that some blood renders instead of no blood.
var/taurized = FALSE
siemens_coefficient = 0.9
w_class = ITEMSIZE_NORMAL
preserve_item = 1
@@ -779,6 +781,43 @@
set_clothing_index()
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
if(ishuman(user))
var/mob/living/carbon/human/H = user
if((taurized && !isTaurTail(H.tail_style)) || (!taurized && isTaurTail(H.tail_style)))
taurize(user)
return ..()
/obj/item/clothing/suit/proc/taurize(var/mob/living/carbon/human/Taur)
if(isTaurTail(Taur.tail_style))
var/datum/sprite_accessory/tail/taur/taurtail = Taur.tail_style
if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in cached_icon_states(taurtail.suit_sprites)))
icon_override = taurtail.suit_sprites
taurized = TRUE
if(!taurized)
icon_override = initial(icon_override)
taurized = FALSE
// Taur suits need to be shifted so its centered on their taur half.
/obj/item/clothing/suit/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask)
var/image/standing = ..()
if(taurized) //Special snowflake var on suits
standing.pixel_x = -16
standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody.
return standing
/obj/item/clothing/suit/apply_accessories(var/image/standing)
if(LAZYLEN(accessories) && taurized)
for(var/obj/item/clothing/accessory/A in accessories)
var/image/I = new(A.get_mob_overlay())
I.pixel_x = 16 //Opposite of the pixel_x on the suit (-16) from taurization to cancel it out and puts the accessory in the correct place on the body.
standing.add_overlay(I)
else
return ..()
///////////////////////////////////////////////////////////////////////
//Under clothing
/obj/item/clothing/under
@@ -1056,7 +1095,6 @@
to_chat(usr, "<span class='notice'>You roll down your [src]'s sleeves.</span>")
update_clothing_icon()
/obj/item/clothing/under/rank/New()
sensor_mode = pick(0,1,2,3)
..()
-37
View File
@@ -149,48 +149,11 @@
//Switch to taur sprites if a taur equips
/obj/item/clothing/suit
var/taurized = FALSE //Easier than trying to 'compare icons' to see if it's a taur suit
sprite_sheets = list(
SPECIES_TESHARI = 'icons/mob/species/seromi/suit.dmi',
SPECIES_VOX = 'icons/mob/species/vox/suit.dmi',
SPECIES_WEREBEAST = 'icons/mob/species/werebeast/suit.dmi')
/obj/item/clothing/suit/equipped(var/mob/user, var/slot)
var/normalize = TRUE
//Pyramid of doom-y. Improve somehow?
if(!taurized && slot == slot_wear_suit && ishuman(user))
var/mob/living/carbon/human/H = user
if(isTaurTail(H.tail_style))
var/datum/sprite_accessory/tail/taur/taurtail = H.tail_style
if(taurtail.suit_sprites && (get_worn_icon_state(slot_wear_suit_str) in cached_icon_states(taurtail.suit_sprites)))
icon_override = taurtail.suit_sprites
normalize = FALSE
taurized = TRUE
if(normalize && taurized)
icon_override = initial(icon_override)
taurized = FALSE
return ..()
// Taur suits need to be shifted so its centered on their taur half.
/obj/item/clothing/suit/make_worn_icon(var/body_type,var/slot_name,var/inhands,var/default_icon,var/default_layer = 0,var/icon/clip_mask)
var/image/standing = ..()
if(taurized) //Special snowflake var on suits
standing.pixel_x = -16
standing.layer = BODY_LAYER + 15 // 15 is above tail layer, so will not be covered by taurbody.
return standing
/obj/item/clothing/suit/apply_accessories(var/image/standing)
if(LAZYLEN(accessories) && taurized)
for(var/obj/item/clothing/accessory/A in accessories)
var/image/I = new(A.get_mob_overlay())
I.pixel_x = 16 //Opposite of the pixel_x on the suit (-16) from taurization to cancel it out and puts the accessory in the correct place on the body.
standing.add_overlay(I)
else
return ..()
//TFF 5/8/19 - sets Vorestation /obj/item/clothing/under sensor setting default?
/obj/item/clothing/under
sensor_mode = 3
-3
View File
@@ -4730,9 +4730,6 @@
/mob/living/simple_mob
var/kitchen_tag = "animal" //Used for cooking with animals
/mob/living/simple_mob/mouse
kitchen_tag = "rodent"
/obj/item/weapon/reagent_containers/food/snacks/sliceable/cheesewheel
slices_num = 8
+155 -154
View File
@@ -34,168 +34,169 @@
/datum/material/steel/generate_recipes()
..()
recipes += new/datum/stack_recipe_list("office chairs",list( \
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1) \
new/datum/stack_recipe("dark office chair", /obj/structure/bed/chair/office/dark, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("light office chair", /obj/structure/bed/chair/office/light, 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") \
))
recipes += new/datum/stack_recipe_list("comfy chairs", list( \
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("beige comfy chair", /obj/structure/bed/chair/comfy/beige, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("black comfy chair", /obj/structure/bed/chair/comfy/black, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("brown comfy chair", /obj/structure/bed/chair/comfy/brown, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("lime comfy chair", /obj/structure/bed/chair/comfy/lime, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("teal comfy chair", /obj/structure/bed/chair/comfy/teal, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("red comfy chair", /obj/structure/bed/chair/comfy/red, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("blue comfy chair", /obj/structure/bed/chair/comfy/blue, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("purple comfy chair", /obj/structure/bed/chair/comfy/purp, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("green comfy chair", /obj/structure/bed/chair/comfy/green, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("yellow comfy chair", /obj/structure/bed/chair/comfy/yellow, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("orange comfy chair", /obj/structure/bed/chair/comfy/orange, 2, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0)
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20)
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20)
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60)
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("table frame", /obj/structure/table, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("bench frame", /obj/structure/table/bench, 1, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("rack", /obj/structure/table/rack, 1, time = 5, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("closet", /obj/structure/closet, 2, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("canister", /obj/machinery/portable_atmospherics/canister, 10, time = 15, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cannon frame", /obj/item/weapon/cannonframe, 10, time = 15, one_per_turf = 0, on_floor = 0, recycle_material = "[name]")
recipes += new/datum/stack_recipe("regular floor tile", /obj/item/stack/tile/floor, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("roofing tile", /obj/item/stack/tile/roofing, 3, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("metal rod", /obj/item/stack/rods, 1, 2, 60, recycle_material = "[name]")
recipes += new/datum/stack_recipe("frame", /obj/item/frame, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("mirror frame", /obj/item/frame/mirror, 1, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("fire extinguisher cabinet frame", /obj/item/frame/extinguisher_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
//recipes += new/datum/stack_recipe("fire axe cabinet frame", /obj/item/frame/fireaxe_cabinet, 4, time = 5, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1)
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("railing", /obj/structure/railing, 2, time = 50, one_per_turf = 0, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("airlock assemblies", list( \
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("standard airlock assembly", /obj/structure/door_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("command airlock assembly", /obj/structure/door_assembly/door_assembly_com, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("security airlock assembly", /obj/structure/door_assembly/door_assembly_sec, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("eng atmos airlock assembly", /obj/structure/door_assembly/door_assembly_eat, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("engineering airlock assembly", /obj/structure/door_assembly/door_assembly_eng, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("mining airlock assembly", /obj/structure/door_assembly/door_assembly_min, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("atmospherics airlock assembly", /obj/structure/door_assembly/door_assembly_atmo, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("research airlock assembly", /obj/structure/door_assembly/door_assembly_research, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("medical airlock assembly", /obj/structure/door_assembly/door_assembly_med, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("maintenance airlock assembly", /obj/structure/door_assembly/door_assembly_mai, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("external airlock assembly", /obj/structure/door_assembly/door_assembly_ext, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("freezer airlock assembly", /obj/structure/door_assembly/door_assembly_fre, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("airtight hatch assembly", /obj/structure/door_assembly/door_assembly_hatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("maintenance hatch assembly", /obj/structure/door_assembly/door_assembly_mhatch, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("high security airlock assembly", /obj/structure/door_assembly/door_assembly_highsecurity, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("voidcraft airlock assembly horizontal", /obj/structure/door_assembly/door_assembly_voidcraft, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("voidcraft airlock assembly vertical", /obj/structure/door_assembly/door_assembly_voidcraft/vertical, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("emergency shutter", /obj/structure/firedoor_assembly, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("multi-tile airlock assembly", /obj/structure/door_assembly/multi_tile, 4, time = 50, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1)//VOREStation Removal
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1)//VOREStation Replacement
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade)
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2)
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1)
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2)
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2)
//recipes += new/datum/stack_recipe("IV drip", /obj/machinery/iv_drip, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Removal
recipes += new/datum/stack_recipe("medical stand", /obj/structure/medical_stand, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")//VOREStation Replacement
recipes += new/datum/stack_recipe("conveyor switch", /obj/machinery/conveyor_switch, 2, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light fixture frame", /obj/item/frame/light, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe("small light fixture frame", /obj/item/frame/light/small, 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("floor lamp fixture frame", /obj/machinery/light_construct/flamp, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe("apc frame", /obj/item/frame/apc, 2, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("modular computer frames", list( \
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20),\
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10),\
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10),\
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5),\
new/datum/stack_recipe("modular console frame", /obj/item/modular_computer/console, 20, recycle_material = "[name]"),\
new/datum/stack_recipe("modular telescreen frame", /obj/item/modular_computer/telescreen, 10, recycle_material = "[name]"),\
new/datum/stack_recipe("modular laptop frame", /obj/item/modular_computer/laptop, 10, recycle_material = "[name]"),\
new/datum/stack_recipe("modular tablet frame", /obj/item/modular_computer/tablet, 5, recycle_material = "[name]"),\
))
recipes += new/datum/stack_recipe_list("filing cabinets", list( \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1), \
new/datum/stack_recipe("filing cabinet", /obj/structure/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("tall filing cabinet", /obj/structure/filingcabinet/filingcabinet, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
new/datum/stack_recipe("chest drawer", /obj/structure/filingcabinet/chestdrawer, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]"), \
))
recipes += new/datum/stack_recipe("desk bell", /obj/item/weapon/deskbell, 1, on_floor = 1, supplied_material = "[name]")
/datum/material/plasteel/generate_recipes()
..()
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1)
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1)
recipes += new/datum/stack_recipe("AI core", /obj/structure/AIcore, 4, time = 50, one_per_turf = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("Metal crate", /obj/structure/closet/crate, 10, time = 50, one_per_turf = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("knife grip", /obj/item/weapon/material/butterflyhandle, 4, time = 20, one_per_turf = 0, on_floor = 1, supplied_material = "[name]")
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20)
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1)
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10)
recipes += new/datum/stack_recipe("dark floor tile", /obj/item/stack/tile/floor/dark, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("roller bed", /obj/item/roller, 5, time = 30, on_floor = 1, recycle_material = "[name]")
recipes += new/datum/stack_recipe("whetstone", /obj/item/weapon/whetstone, 2, time = 10, recycle_material = "[name]")
/datum/material/stone/generate_recipes()
..()
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1)
recipes += new/datum/stack_recipe("planting bed", /obj/machinery/portable_atmospherics/hydroponics/soil, 3, time = 10, one_per_turf = 1, on_floor = 1, recycle_material = "[name]")
/datum/material/stone/marble/generate_recipes()
..()
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20)
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20)
recipes += new/datum/stack_recipe("light marble floor tile", /obj/item/stack/tile/wmarble, 1, 4, 20, recycle_material = "[name]")
recipes += new/datum/stack_recipe("dark marble floor tile", /obj/item/stack/tile/bmarble, 1, 4, 20, recycle_material = "[name]")
/datum/material/plastic/generate_recipes()
..()
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE) // 500u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE) // 250u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE) // 100u
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS)
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1) //CHOMP Addition
recipes += new/datum/stack_recipe("plastic crate", /obj/structure/closet/crate/plastic, 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic bag", /obj/item/weapon/storage/bag/plasticbag, 3, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("blood pack", /obj/item/weapon/reagent_containers/blood/empty, 4, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("reagent dispenser cartridge (large)", /obj/item/weapon/reagent_containers/chem_disp_cartridge, 5, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 500u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (med)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/medium, 3, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 250u
recipes += new/datum/stack_recipe("reagent dispenser cartridge (small)", /obj/item/weapon/reagent_containers/chem_disp_cartridge/small, 1, on_floor=0, pass_stack_color = TRUE, recycle_material = "[name]") // 100u
recipes += new/datum/stack_recipe("white floor tile", /obj/item/stack/tile/floor/white, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("freezer floor tile", /obj/item/stack/tile/floor/freezer, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("shower curtain", /obj/structure/curtain, 4, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic flaps", /obj/structure/plasticflaps, 4, time = 25, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("water-cooler", /obj/structure/reagent_dispensers/water_cooler, 4, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("lampshade", /obj/item/weapon/lampshade, 1, time = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic net", /obj/item/weapon/material/fishing_net, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("plastic fishtank", /obj/item/glass_jar/fish/plastic, 2, time = 30 SECONDS, recycle_material = "[name]")
recipes += new/datum/stack_recipe("reagent tubing", /obj/item/stack/hose, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("Feeder", /obj/machinery/feeder, 4, time = 20, one_per_turf = 1, on_floor = 1, recycle_material = "[name]") //CHOMP Addition
/datum/material/wood/generate_recipes()
..()
recipes += new/datum/stack_recipe("oar", /obj/item/weapon/oar, 2, time = 30, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("boat", /obj/vehicle/boat, 20, time = 10 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("dragon boat", /obj/vehicle/boat/dragon, 50, time = 30 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE) //VOREStation Add
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1)
recipes += new/datum/stack_recipe("wooden sandals", /obj/item/clothing/shoes/sandal, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wood circlet", /obj/item/clothing/head/woodcirclet, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("clipboard", /obj/item/weapon/clipboard, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wood floor tile", /obj/item/stack/tile/wood, 1, 4, 20, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden chair", /obj/structure/bed/chair/wood, 3, time = 10, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crossbow frame", /obj/item/weapon/crossbowframe, 5, time = 25, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("coffin", /obj/structure/closet/coffin, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("beehive assembly", /obj/item/beehive_assembly, 4, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("beehive frame", /obj/item/honey_frame, 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("book shelf", /obj/structure/bookcase, 5, time = 15, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("noticeboard frame", /obj/item/frame/noticeboard, 4, time = 5, one_per_turf = 0, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden bucket", /obj/item/weapon/reagent_containers/glass/bucket/wood, 2, time = 4, one_per_turf = 0, on_floor = 0, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("coilgun stock", /obj/item/weapon/coilgun_assembly, 5, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude fishing rod", /obj/item/weapon/material/fishing_rod/built, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wooden standup figure", /obj/structure/barricade/cutout, 5, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]") //VOREStation Add
recipes += new/datum/stack_recipe("noticeboard", /obj/structure/noticeboard, 1, recycle_material = "[name]")
/datum/material/wood/log/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("bonfire", /obj/structure/bonfire, 5, time = 50, supplied_material = "[name]", pass_stack_color = TRUE, recycle_material = "[name]")
/datum/material/cardboard/generate_recipes()
..()
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("box", /obj/item/weapon/storage/box, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("donut box", /obj/item/weapon/storage/box/donut/empty, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("egg box", /obj/item/weapon/storage/fancy/egg_box, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light tubes box", /obj/item/weapon/storage/box/lights/tubes, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("light bulbs box", /obj/item/weapon/storage/box/lights/bulbs, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("mouse traps box", /obj/item/weapon/storage/box/mousetraps, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cardborg suit", /obj/item/clothing/suit/cardborg, 3, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("cardborg helmet", /obj/item/clothing/head/cardborg, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("pizza box", /obj/item/pizzabox, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe_list("folders",list( \
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue), \
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder), \
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red), \
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white), \
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow), \
new/datum/stack_recipe("blue folder", /obj/item/weapon/folder/blue, recycle_material = "[name]"), \
new/datum/stack_recipe("grey folder", /obj/item/weapon/folder, recycle_material = "[name]"), \
new/datum/stack_recipe("red folder", /obj/item/weapon/folder/red, recycle_material = "[name]"), \
new/datum/stack_recipe("white folder", /obj/item/weapon/folder/white, recycle_material = "[name]"), \
new/datum/stack_recipe("yellow folder", /obj/item/weapon/folder/yellow, recycle_material = "[name]"), \
))
/datum/material/snow/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10)
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10)
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15)
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10)
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20)
recipes += new/datum/stack_recipe("snowball", /obj/item/weapon/material/snow/snowball, 1, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow brick", /obj/item/stack/material/snowbrick, 2, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snowman", /obj/structure/snowman, 2, time = 15, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow robot", /obj/structure/snowman/borg, 2, time = 10, recycle_material = "[name]")
recipes += new/datum/stack_recipe("snow spider", /obj/structure/snowman/spider, 3, time = 20, recycle_material = "[name]")
/datum/material/snowbrick/generate_recipes()
recipes = list()
@@ -221,54 +222,54 @@
/datum/material/supermatter/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1)
recipes += new/datum/stack_recipe("supermatter shard", /obj/machinery/power/supermatter/shard, 30 , one_per_turf = 1, time = 600, on_floor = 1, recycle_material = "[name]")
/datum/material/cloth/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("woven net", /obj/item/weapon/material/fishing_net, 10, time = 30 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("empty sandbag", /obj/item/stack/emptysandbag, 2, time = 2 SECONDS, pass_stack_color = TRUE, supplied_material = "[name]")
/datum/material/resin/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("[display_name] door", /obj/structure/simple_door/resin, 10, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] barricade", /obj/effect/alien/resin/wall, 5, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] nest", /obj/structure/bed/nest, 2, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] wall girders", /obj/structure/girder/resin, 2, time = 5 SECONDS, one_per_turf = 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS)
recipes += new/datum/stack_recipe("[display_name] membrane", /obj/effect/alien/resin/membrane, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] node", /obj/effect/alien/weeds/node, 1, time = 4 SECONDS, recycle_material = "[name]")
/datum/material/leather/generate_recipes()
recipes = list()
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("bedsheet", /obj/item/weapon/bedsheet, 10, time = 30 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("uniform", /obj/item/clothing/under/color/white, 8, time = 15 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("foot wraps", /obj/item/clothing/shoes/footwraps, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("gloves", /obj/item/clothing/gloves/white, 2, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("wig", /obj/item/clothing/head/powdered_wig, 4, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("philosopher's wig", /obj/item/clothing/head/philosopher_wig, 50, time = 2 MINUTES, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("taqiyah", /obj/item/clothing/head/taqiyah, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("turban", /obj/item/clothing/head/turban, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("hijab", /obj/item/clothing/head/hijab, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("kippa", /obj/item/clothing/head/kippa, 3, time = 6 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("scarf", /obj/item/clothing/accessory/scarf/white, 4, time = 5 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("baggy pants", /obj/item/clothing/under/pants/baggy/white, 8, time = 10 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("belt pouch", /obj/item/weapon/storage/belt/fannypack/white, 25, time = 1 MINUTE, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("crude [display_name] bandage", /obj/item/stack/medical/crude_pack, 1, time = 2 SECONDS, pass_stack_color = TRUE, recycle_material = "[name]")
recipes += new/datum/stack_recipe("[display_name] net", /obj/item/weapon/material/fishing_net, 10, time = 5 SECONDS, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] ring", /obj/item/clothing/gloves/ring/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
recipes += new/datum/stack_recipe("[display_name] bracelet", /obj/item/clothing/accessory/bracelet/material, 1, on_floor = 1, supplied_material = "[name]", pass_stack_color = TRUE)
+14 -16
View File
@@ -8,14 +8,11 @@
desc = "It's a g-g-g-g-ghooooost!" //jinkies!
icon = 'icons/mob/ghost.dmi'
icon_state = "ghost"
layer = BELOW_MOB_LAYER
plane = PLANE_GHOSTS
alpha = 127
stat = DEAD
canmove = 0
blinded = 0
anchored = 1 // don't get pushed around
invisibility = INVISIBILITY_OBSERVER
var/can_reenter_corpse
var/datum/hud/living/carbon/hud = null // hud
var/bootime = 0
@@ -90,27 +87,22 @@
var/cleanup_timer // Refernece to a timer that will delete this mob if no client returns
/mob/observer/dead/New(mob/body)
appearance = body
invisibility = INVISIBILITY_OBSERVER
layer = BELOW_MOB_LAYER
plane = PLANE_GHOSTS
alpha = 127
sight |= SEE_TURFS | SEE_MOBS | SEE_OBJS | SEE_SELF
see_invisible = SEE_INVISIBLE_OBSERVER
see_in_dark = world.view //I mean. I don't even know if byond has occlusion culling... but...
plane = PLANE_GHOSTS //Why doesn't the var above work...???
verbs += /mob/observer/dead/proc/dead_tele
var/turf/T
if(ismob(body))
T = get_turf(body) //Where is the body located?
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
if (ishuman(body))
var/mob/living/carbon/human/H = body
icon = H.icon
icon_state = H.icon_state
add_overlay(H.overlays_standing) //All our equipment sprites
else
icon = body.icon
icon_state = body.icon_state
add_overlay(body.overlays)
gender = body.gender
if(body.mind && body.mind.name)
name = body.mind.name
@@ -125,6 +117,12 @@
mind = body.mind //we don't transfer the mind but we keep a reference to it.
// Fix for naked ghosts.
// Unclear why this isn't being grabbed by appearance.
if(ishuman(body))
var/mob/living/carbon/human/H = body
overlays = H.overlays_standing
if(!T) T = pick(latejoin) //Safety in case we cannot find the body's position
forceMove(T)
+25 -1
View File
@@ -500,7 +500,7 @@
message = "points to [M]."
else
m_type = 1
if("crack")
if(!restrained())
message = "cracks [T.his] knuckles."
@@ -906,3 +906,27 @@
HTML +="<a href='?src=\ref[src];flavor_change=done'>\[Done\]</a>"
HTML += "<tt>"
src << browse(HTML, "window=flavor_changes;size=430x300")
/mob/living/carbon/human/proc/toggle_tail(var/setting,var/message = 0)
if(!tail_style || !tail_style.ani_state)
if(message)
to_chat(src, "<span class='warning'>You don't have a tail that supports this.</span>")
return 0
var/new_wagging = isnull(setting) ? !wagging : setting
if(new_wagging != wagging)
wagging = new_wagging
update_tail_showing()
return 1
/mob/living/carbon/human/proc/toggle_wing(var/setting,var/message = 0)
if(!wing_style || !wing_style.ani_state)
if(message)
to_chat(src, "<span class='warning'>You don't have a wingtype that supports this.</span>")
return 0
var/new_flapping = isnull(setting) ? !flapping : setting
if(new_flapping != flapping)
flapping = setting
update_wing_showing()
return 1
@@ -9,13 +9,13 @@
switch(act)
if("vwag")
if(toggle_tail_vr(message = 1))
if(toggle_tail(message = 1))
m_type = 1
message = "[wagging ? "starts" : "stops"] wagging their tail."
else
return 1
if("vflap")
if(toggle_wing_vr(message = 1))
if(toggle_wing(message = 1))
m_type = 1
message = "[flapping ? "starts" : "stops"] flapping their wings."
else
@@ -241,30 +241,6 @@
density = original_density
pass_flags = original_passflags
/mob/living/carbon/human/proc/toggle_tail_vr(var/setting,var/message = 0)
if(!tail_style || !tail_style.ani_state)
if(message)
to_chat(src, "<span class='warning'>You don't have a tail that supports this.</span>")
return 0
var/new_wagging = isnull(setting) ? !wagging : setting
if(new_wagging != wagging)
wagging = new_wagging
update_tail_showing()
return 1
/mob/living/carbon/human/proc/toggle_wing_vr(var/setting,var/message = 0)
if(!wing_style || !wing_style.ani_state)
if(message)
to_chat(src, "<span class='warning'>You don't have a tail that supports this.</span>")
return 0
var/new_flapping = isnull(setting) ? !flapping : setting
if(new_flapping != flapping)
flapping = setting
update_wing_showing()
return 1
/mob/living/carbon/human/verb/toggle_gender_identity_vr()
set name = "Set Gender Identity"
set desc = "Sets the pronouns when examined and performing an emote."
@@ -118,3 +118,42 @@
inventory_panel_type = /datum/inventory_panel/human
butchery_loot = list(/obj/item/stack/animalhide/human = 1)
// Horray Furries!
var/datum/sprite_accessory/ears/ear_style = null
var/r_ears = 30
var/g_ears = 30
var/b_ears = 30
var/r_ears2 = 30
var/g_ears2 = 30
var/b_ears2 = 30
var/r_ears3 = 30 //Trust me, we could always use more colour. No japes.
var/g_ears3 = 30
var/b_ears3 = 30
var/datum/sprite_accessory/tail/tail_style = null
var/r_tail = 30
var/g_tail = 30
var/b_tail = 30
var/r_tail2 = 30
var/g_tail2 = 30
var/b_tail2 = 30
var/r_tail3 = 30
var/g_tail3 = 30
var/b_tail3 = 30
var/datum/sprite_accessory/wing/wing_style = null
var/r_wing = 30
var/g_wing = 30
var/b_wing = 30
var/r_wing2 = 30
var/g_wing2 = 30
var/b_wing2 = 30
var/r_wing3 = 30
var/g_wing3 = 30
var/b_wing3 = 30
var/wagging = 0 //UGH.
var/flapping = 0
// Custom Species Name
var/custom_species
@@ -3,8 +3,6 @@
g_skin = 206
b_skin = 179
var/wagging = 0 //UGH.
var/flapping = 0
var/vantag_pref = VANTAG_NONE //What's my status?
var/impersonate_bodytype //For impersonating a bodytype
var/ability_flags = 0 //Shadekin abilities/potentially other species-based?
@@ -258,6 +258,27 @@
/datum/mob_descriptor/build
)
//This is used in character setup preview generation (prefences_setup.dm) and human mob
//rendering (update_icons.dm)
var/color_mult = 0
//This is for overriding tail rendering with a specific icon in icobase, for static
//tails only, since tails would wag when dead if you used this
var/icobase_tail = 0
var/wing_hair
var/wing
var/wing_animation
var/icobase_wing
var/wikilink = null //link to wiki page for species
var/icon_height = 32
var/agility = 20 //prob() to do agile things
/datum/species/proc/update_attack_types()
unarmed_attacks = list()
for(var/u_type in unarmed_types)
unarmed_attacks += new u_type()
/datum/species/New()
if(hud_type)
hud = new hud_type()
@@ -401,8 +422,9 @@
"<span class='notice'>[H] boops [target]'s nose.</span>", \
"<span class='notice'>You boop [target] on the nose.</span>", )
//VOREStation Edit End
else H.visible_message("<span class='notice'>[H] hugs [target] to make [t_him] feel better!</span>", \
"<span class='notice'>You hug [target] to make [t_him] feel better!</span>") //End VOREStation Edit
else
H.visible_message("<span class='notice'>[H] hugs [target] to make [t_him] feel better!</span>", \
"<span class='notice'>You hug [target] to make [t_him] feel better!</span>")
/datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H)
if(inherent_verbs)
@@ -1,25 +1,10 @@
/datum/species
//This is used in character setup preview generation (prefences_setup.dm) and human mob
//rendering (update_icons.dm)
var/color_mult = 0
//This is for overriding tail rendering with a specific icon in icobase, for static
//tails only, since tails would wag when dead if you used this
var/icobase_tail = 0
//This is so that if a race is using the chimera revive they can't use it more than once.
//Shouldn't really be seen in play too often, but it's case an admin event happens and they give a non chimera the chimera revive. Only one person can use the chimera revive at a time per race.
//var/reviving = 0 //commented out 'cause moved to mob
holder_type = /obj/item/weapon/holder/micro //This allows you to pick up crew
min_age = 18
descriptors = list()
var/wing_hair
var/wing
var/wing_animation
var/icobase_wing
var/wikilink = null //link to wiki page for species
var/icon_height = 32
var/agility = 20 //prob() to do agile things
var/organic_food_coeff = 1
var/synthetic_food_coeff = 0
@@ -39,11 +24,6 @@
var/list/traits = list()
/datum/species/proc/update_attack_types()
unarmed_attacks = list()
for(var/u_type in unarmed_types)
unarmed_attacks += new u_type()
/datum/species/proc/give_numbing_bite() //Holy SHIT this is hacky, but it works. Updating a mob's attacks mid game is insane.
unarmed_attacks = list()
unarmed_types += /datum/unarmed_attack/bite/sharp/numbing
@@ -73,7 +73,7 @@
name = "Cold-Adapted"
desc = "You are able to withstand much colder temperatures than other species, and can even be comfortable in extremely cold environments. You are also more vulnerable to hot environments, and have a lower body temperature as a consequence of these adaptations."
cost = 0
var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 305, "heat_level_2" = 360, "heat_level_3" = 700, "breath_heat_level_1" = 345, "breath_heat_level_2" = 380, "breath_heat_level_3" = 780, "heat_discomfort_level" = 295, "body_temperature" = 290)
var_changes = list("cold_level_1" = 200, "cold_level_2" = 150, "cold_level_3" = 90, "breath_cold_level_1" = 180, "breath_cold_level_2" = 100, "breath_cold_level_3" = 60, "cold_discomfort_level" = 210, "heat_level_1" = 330, "heat_level_2" = 380, "heat_level_3" = 700, "breath_heat_level_1" = 360, "breath_heat_level_2" = 400, "breath_heat_level_3" = 850, "heat_discomfort_level" = 295, "body_temperature" = 290)
excludes = list(/datum/trait/hotadapt)
/datum/trait/hotadapt
@@ -234,66 +234,73 @@ YW change end */
/datum/trait/allergy/meat
name = "Allergy: Meat"
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables."
desc = "You're highly allergic to just about any form of meat. You're probably better off just sticking to vegetables. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = MEAT
/datum/trait/allergy/fish
name = "Allergy: Fish"
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general..."
desc = "You're highly allergic to fish. It's probably best to avoid seafood in general. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FISH
/datum/trait/allergy/fruit
name = "Allergy: Fruit"
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference."
desc = "You're highly allergic to fruit. Vegetables are fine, but you should probably read up on how to tell the difference. Remember, tomatoes are a fruit. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FRUIT
/datum/trait/allergy/vegetable
name = "Allergy: Vegetable"
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference."
desc = "You're highly allergic to vegetables. Fruit are fine, but you should probably read up on how to tell the difference. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = VEGETABLE
/datum/trait/allergy/nuts
name = "Allergy: Nuts"
desc = "You're highly allergic to hard-shell seeds, such as peanuts."
desc = "You're highly allergic to hard-shell seeds, such as peanuts. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = SEEDS
/datum/trait/allergy/soy
name = "Allergy: Soy"
desc = "You're highly allergic to soybeans, and some other kinds of bean."
desc = "You're highly allergic to soybeans, and some other kinds of bean. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = BEANS
/datum/trait/allergy/dairy
name = "Allergy: Lactose"
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy."
desc = "You're highly allergic to lactose, and consequently, just about all forms of dairy. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = DAIRY
/datum/trait/allergy/fungi
name = "Allergy: Fungi"
desc = "You're highly allergic to Fungi such as mushrooms."
desc = "You're highly allergic to fungi such as mushrooms. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = FUNGI
/datum/trait/allergy/coffee
name = "Allergy: Coffee"
desc = "You're highly allergic to coffee in specific."
desc = "You're highly allergic to coffee in specific. NB: By taking this trait, you acknowledge there is a risk your character may suffer a fatal reaction if exposed to this substance."
cost = 0
custom_only = FALSE
allergen = COFFEE
/datum/trait/allergen_reduced_effect
name = "Reduced Allergen Reaction"
desc = "This trait halves the lethality of allergen reactions. If you don't have any allergens set, it does nothing. It does not apply to nonlethal reactions or special reactions (such as unathi drowsiness from sugars)."
cost = 0
custom_only = FALSE
var_changes = list("allergen_damage_severity" = 0.6)
// Spicy Food Traits, from negative to positive.
/datum/trait/spice_intolerance_extreme
@@ -4,6 +4,7 @@
*/
var/global/list/human_icon_cache = list() //key is incredibly complex, see update_icons_body()
var/global/list/tail_icon_cache = list() //key is [species.race_key][r_skin][g_skin][b_skin]
var/global/list/wing_icon_cache = list() // See tail.
var/global/list/light_overlay_cache = list() //see make_worn_icon() on helmets
var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
@@ -87,8 +88,8 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
#define LEGCUFF_LAYER 26 //Same as handcuffs, for legcuffs
#define L_HAND_LAYER 27 //Left-hand item
#define R_HAND_LAYER 28 //Right-hand item
#define WING_LAYER 29 //VOREStation edit. Simply move this up a number if things are added.
#define TAIL_LAYER_ALT 30 //VOREStation edit. Simply move this up a number if things are added.
#define WING_LAYER 29 //Wings or protrusions over the suit.
#define TAIL_LAYER_ALT 30 //Modified tail-sprite layer. Tend to be larger.
#define MODIFIER_EFFECTS_LAYER 31 //Effects drawn by modifiers
#define FIRE_LAYER 32 //'Mob on fire' overlay layer
#define WATER_LAYER 33 //'Mob submerged' overlay layer
@@ -197,7 +198,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
// blend the individual damage states with our icons
for(var/obj/item/organ/external/O in organs)
if(isnull(O) || O.is_stump())
if(isnull(O) || O.is_stump() || O.is_hidden_by_tail())
continue
O.update_icon()
@@ -267,21 +268,20 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
icon_key += "[rgb(part.s_col[1],part.s_col[2],part.s_col[3])]"
if(part.body_hair && part.h_col && part.h_col.len >= 3)
icon_key += "[rgb(part.h_col[1],part.h_col[2],part.h_col[3])]"
//VOREStation Edit - Different way of tracking add/mult species
if(species.color_mult)
icon_key += "[ICON_MULTIPLY]"
else
icon_key += "[ICON_ADD]"
//VOREStation Edit End
else
icon_key += "#000000"
for(var/M in part.markings)
icon_key += "[M][part.markings[M]["color"]]"
if(part.robotic >= ORGAN_ROBOT)
icon_key += "2[part.model ? "-[part.model]": ""]"
robolimb_count++
if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN)) //VOREStation Edit - Not for nanoform parts
if((part.robotic == ORGAN_ROBOT || part.robotic == ORGAN_LIFELIKE) && (part.organ_tag == BP_HEAD || part.organ_tag == BP_TORSO || part.organ_tag == BP_GROIN))
robobody_count ++
else if(part.status & ORGAN_DEAD)
icon_key += "3"
@@ -327,7 +327,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
//That part makes left and right legs drawn topmost and lowermost when human looks WEST or EAST
//And no change in rendering for other parts (they icon_position is 0, so goes to 'else' part)
if(part.icon_position & (LEFT | RIGHT))
var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank") //VOREStation Edit.
var/icon/temp2 = new(species.icon_template ? species.icon_template : 'icons/mob/human.dmi', icon_state = "blank")
temp2.Insert(new/icon(temp,dir=NORTH),dir=NORTH)
temp2.Insert(new/icon(temp,dir=SOUTH),dir=SOUTH)
if(!(part.icon_position & LEFT))
@@ -368,7 +368,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
//tail
update_tail_showing()
update_wing_showing() // VOREStation Edit
update_wing_showing()
/mob/living/carbon/human/proc/update_skin()
if(QDESTROYING(src))
@@ -452,7 +452,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(facial_hair_style && facial_hair_style.species_allowed && (src.species.get_bodytype(src) in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_MULTIPLY) //VOREStation edit
facial_s.Blend(rgb(r_facial, g_facial, b_facial), ICON_MULTIPLY)
face_standing.Blend(facial_s, ICON_OVERLAY)
@@ -478,22 +478,16 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
face_standing.Blend(hair_s, ICON_OVERLAY)
// VOREStation Edit - START
if(head_organ.nonsolid || head_organ.transparent)
face_standing += rgb(,,,120)
var/icon/ears_s = get_ears_overlay()
if(ears_s)
face_standing.Blend(ears_s, ICON_OVERLAY)
if(istype(head_organ,/obj/item/organ/external/head/vr))
var/obj/item/organ/external/head/vr/head_organ_vr = head_organ
overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER, "pixel_y" = head_organ_vr.head_offset)
apply_layer(HAIR_LAYER)
return
// VOREStation Edit - END
if(head_organ.transparent) //VOREStation Edit. For better slime limbs.
face_standing += rgb(,,,120)
overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER)
overlays_standing[HAIR_LAYER] = image(face_standing, layer = BODY_LAYER+HAIR_LAYER, "pixel_y" = head_organ.head_offset)
apply_layer(HAIR_LAYER)
return
// VOREStation Edit - START
var/icon/hair_acc_s = get_hair_accessory_overlay()
@@ -647,14 +641,12 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
uniform_sprite = "[INV_W_UNIFORM_DEF_ICON].dmi"
//Build a uniform sprite
//VOREStation Edit start.
var/icon/c_mask = tail_style?.clip_mask
if(c_mask)
var/obj/item/clothing/suit/S = wear_suit
if((wear_suit?.flags_inv & HIDETAIL) || (istype(S) && S.taurized)) // Reasons to not mask: 1. If you're wearing a suit that hides the tail or if you're wearing a taurized suit.
c_mask = null
overlays_standing[UNIFORM_LAYER] = w_uniform.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_w_uniform_str, default_icon = uniform_sprite, default_layer = UNIFORM_LAYER, clip_mask = c_mask)
//VOREStation Edit end.
apply_layer(UNIFORM_LAYER)
/mob/living/carbon/human/update_inv_wear_id()
@@ -736,7 +728,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(!shoes || (wear_suit && wear_suit.flags_inv & HIDESHOES) || (w_uniform && w_uniform.flags_inv & HIDESHOES))
return //Either nothing to draw, or it'd be hidden.
//VOREStation Edit
for(var/f in list(BP_L_FOOT, BP_R_FOOT))
var/obj/item/organ/external/foot/foot = get_organ(f)
if(istype(foot) && foot.is_hidden_by_tail()) //If either foot is hidden by the tail, don't render footwear.
@@ -818,7 +809,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
update_inv_w_uniform()
update_inv_shoes()
update_tail_showing()
update_wing_showing() // VOREStation Edit
update_wing_showing()
if(!wear_suit)
return //No point, no suit.
@@ -833,7 +824,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
else
suit_sprite = "[INV_SUIT_DEF_ICON].dmi"
//VOREStation Edit start.
var/icon/c_mask = null
var/tail_is_rendered = (overlays_standing[TAIL_LAYER] || overlays_standing[TAIL_LAYER_ALT])
var/valid_clip_mask = tail_style?.clip_mask
@@ -842,8 +832,6 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
c_mask = valid_clip_mask
overlays_standing[SUIT_LAYER] = wear_suit.make_worn_icon(body_type = species.get_bodytype(src), slot_name = slot_wear_suit_str, default_icon = suit_sprite, default_layer = SUIT_LAYER, clip_mask = c_mask)
//VOREStation Edit end.
apply_layer(SUIT_LAYER)
/mob/living/carbon/human/update_inv_pockets()
@@ -955,24 +943,23 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
return
remove_layer(TAIL_LAYER)
remove_layer(TAIL_LAYER_ALT) // VOREStation Edit - START - Alt Tail Layer
remove_layer(TAIL_LAYER_ALT) // Alt Tail Layer
var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER
var/image/vr_tail_image = get_tail_image()
if(vr_tail_image)
vr_tail_image.layer = BODY_LAYER+used_tail_layer
overlays_standing[used_tail_layer] = vr_tail_image
var/image/tail_image = get_tail_image()
if(tail_image)
tail_image.layer = BODY_LAYER+used_tail_layer
overlays_standing[used_tail_layer] = tail_image
apply_layer(used_tail_layer)
return
// VOREStation Edit - END
var/species_tail = species.get_tail(src) // Species tail icon_state prefix.
//This one is actually not that bad I guess.
if(species_tail && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/icon/tail_s = get_tail_icon()
overlays_standing[used_tail_layer] = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+used_tail_layer) // VOREStation Edit - Alt Tail Layer
overlays_standing[used_tail_layer] = image(icon = tail_s, icon_state = "[species_tail]_s", layer = BODY_LAYER+used_tail_layer) // Alt Tail Layer
animate_tail_reset()
//TODO: Is this the appropriate place for this, and not on species...?
@@ -982,22 +969,22 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(!tail_icon)
//generate a new one
var/species_tail_anim = species.get_tail_animation(src)
if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //VOREStation Code - Allow override of file for non-animated tails
if(!species_tail_anim && species.icobase_tail) species_tail_anim = species.icobase //Allow override of file for non-animated tails
if(!species_tail_anim) species_tail_anim = 'icons/effects/species.dmi'
tail_icon = new/icon(species_tail_anim)
tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD) // VOREStation edit
tail_icon.Blend(rgb(r_skin, g_skin, b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
// The following will not work with animated tails.
var/use_species_tail = species.get_tail_hair(src)
if(use_species_tail)
var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]_s") //VOREStation edit -- Suffix icon state string with '_s' to compensate for diff in .dmi b/w us & Polaris.
hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //VOREStation edit -- Check for species color_mult
var/icon/hair_icon = icon('icons/effects/species.dmi', "[species.get_tail(src)]_[use_species_tail]")
hair_icon.Blend(rgb(r_hair, g_hair, b_hair), species.color_mult ? ICON_MULTIPLY : ICON_ADD) //Check for species color_mult
tail_icon.Blend(hair_icon, ICON_OVERLAY)
tail_icon_cache[icon_key] = tail_icon
return tail_icon
/mob/living/carbon/human/proc/set_tail_state(var/t_state)
var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // VOREStation Edit - START - Alt Tail Layer
var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // Alt Tail Layer
var/image/tail_overlay = overlays_standing[used_tail_layer]
remove_layer(TAIL_LAYER)
@@ -1009,7 +996,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
tail_overlay.icon_state = t_state
. = tail_overlay
apply_layer(used_tail_layer) // VOREStation Edit - END
apply_layer(used_tail_layer)
//Not really once, since BYOND can't do that.
//Update this if the ability to flick() images or make looping animation start at the first frame is ever added.
@@ -1019,9 +1006,9 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
return
var/t_state = "[species.get_tail(src)]_once"
var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // VOREStation Edit - Alt Tail Layer
var/used_tail_layer = tail_alt ? TAIL_LAYER_ALT : TAIL_LAYER // Alt Tail Layer
var/image/tail_overlay = overlays_standing[used_tail_layer] // VOREStation Edit - Alt Tail Layer
var/image/tail_overlay = overlays_standing[used_tail_layer] // Alt Tail Layer
if(tail_overlay && tail_overlay.icon_state == t_state)
return //let the existing animation finish
@@ -1029,7 +1016,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
if(tail_overlay)
spawn(20)
//check that the animation hasn't changed in the meantime
if(overlays_standing[used_tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) // VOREStation Edit - Alt Tail Layer
if(overlays_standing[used_tail_layer] == tail_overlay && tail_overlay.icon_state == t_state) // Alt Tail Layer
animate_tail_stop()
/mob/living/carbon/human/proc/animate_tail_start()
@@ -1052,7 +1039,7 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
set_tail_state("[species.get_tail(src)]_idle[rand(0,9)]")
else
set_tail_state("[species.get_tail(src)]_static")
toggle_tail_vr(FALSE) //VOREStation Add - So tails stop when someone dies. TODO - Fix this hack ~Leshana
toggle_tail(FALSE) //So tails stop when someone dies. TODO - Fix this hack ~Leshana
/mob/living/carbon/human/proc/animate_tail_stop()
if(QDESTROYING(src))
@@ -1060,20 +1047,18 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
set_tail_state("[species.get_tail(src)]_static")
// VOREStation Edit - Wings! See update_icons_vr.dm for more wing procs
/mob/living/carbon/human/proc/update_wing_showing()
if(QDESTROYING(src))
return
remove_layer(WING_LAYER)
var/image/vr_wing_image = get_wing_image()
if(vr_wing_image)
vr_wing_image.layer = BODY_LAYER+WING_LAYER
overlays_standing[WING_LAYER] = vr_wing_image
var/image/wing_image = get_wing_image()
if(wing_image)
wing_image.layer = BODY_LAYER+WING_LAYER
overlays_standing[WING_LAYER] = wing_image
apply_layer(WING_LAYER)
// VOREStation Edit end
/mob/living/carbon/human/update_modifier_visuals()
if(QDESTROYING(src))
@@ -1140,6 +1125,117 @@ var/global/list/damage_icon_parts = list() //see UpdateDamageIcon()
overlays_standing[SURGERY_LAYER] = total
apply_layer(SURGERY_LAYER)
/mob/living/carbon/human/proc/get_wing_image()
if(QDESTROYING(src))
return
//If you are FBP with wing style and didn't set a custom one
if(synthetic && synthetic.includes_wing && !wing_style)
var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing?
wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(wing_s)
//If you have custom wings selected
if(wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL))
var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = flapping && wing_style.ani_state ? wing_style.ani_state : wing_style.icon_state)
if(wing_style.do_colouration)
wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode)
if(wing_style.extra_overlay)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay)
overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(wing_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2)
if(wing_style.ani_state)
overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
return image(wing_s)
/mob/living/carbon/human/proc/get_ears_overlay()
if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR)))
var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state)
if(ear_style.do_colouration)
ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), ear_style.color_blend_mode)
if(ear_style.extra_overlay)
var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay)
overlay.Blend(rgb(src.r_ears2, src.g_ears2, src.b_ears2), ear_style.color_blend_mode)
ears_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(ear_style.extra_overlay2) //MORE COLOURS IS BETTERER
var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay2)
overlay.Blend(rgb(src.r_ears3, src.g_ears3, src.b_ears3), ear_style.color_blend_mode)
ears_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
return ears_s
return null
/mob/living/carbon/human/proc/get_tail_image()
//If you are FBP with tail style and didn't set a custom one
var/datum/robolimb/model = isSynthetic()
if(istype(model) && model.includes_tail && !tail_style)
var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail")
tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(tail_s)
//If you have a custom tail selected
if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !isTaurTail(tail_style)))
var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)
if(tail_style.do_colouration)
tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode)
if(tail_style.extra_overlay)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w)
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(tail_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(isTaurTail(tail_style))
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
if(taurtype.can_ride && !riding_datum)
riding_datum = new /datum/riding/taur(src)
verbs |= /mob/living/carbon/human/proc/taur_mount
verbs |= /mob/living/proc/toggle_rider_reins
return image(tail_s, "pixel_x" = -16)
else
return image(tail_s)
return null
// TODO - Move this to where it should go ~Leshana
/mob/living/proc/stop_flying()
if(QDESTROYING(src))
return
flying = FALSE
return 1
/mob/living/carbon/human/stop_flying()
if((. = ..()))
update_wing_showing()
//Human Overlays Indexes/////////
#undef MUTATIONS_LAYER
#undef SKIN_LAYER
@@ -73,5 +73,10 @@
var/image/selected_image = null // Used for buildmode AI control stuff.
var/allow_self_surgery = FALSE // Used to determine if the mob can perform surgery on itself.
var/tail_alt = 0
var/flying = 0 // Allows flight
var/inventory_panel_type = /datum/inventory_panel
var/datum/inventory_panel/inventory_panel
+5 -17
View File
@@ -1,3 +1,8 @@
/mob/living/Check_Shoegrip()
if(flying)
return 1
..()
/mob/living/verb/customsay()
set category = "IC"
set name = "Customize Speech Verbs"
@@ -24,23 +29,6 @@
else
return
/mob/living/proc/toggle_rider_reins()
set name = "Give Reins"
set category = "Abilities"
set desc = "Let people riding on you control your movement."
if(riding_datum)
if(istype(riding_datum,/datum/riding))
if(riding_datum.keytype)
riding_datum.keytype = null
to_chat(src, "Rider control enabled.")
return
else
riding_datum.keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop
to_chat(src, "Rider control restricted.")
return
return
/mob/living/verb/set_metainfo()
set name = "Set OOC Metainfo"
set desc = "Sets OOC notes about yourself or your RP preferences or status."
+16
View File
@@ -0,0 +1,16 @@
/mob/living/proc/toggle_rider_reins()
set name = "Give Reins"
set category = "Abilities"
set desc = "Let people riding on you control your movement."
if(riding_datum)
if(istype(riding_datum,/datum/riding))
if(riding_datum.keytype)
riding_datum.keytype = null
to_chat(src, "Rider control enabled.")
return
else
riding_datum.keytype = /obj/item/weapon/material/twohanded/riding_crop
to_chat(src, "Rider control restricted.")
return
return
@@ -907,18 +907,21 @@
if(!module_state_1)
module_state_1 = O
O.hud_layerise()
O.equipped_robot()
contents += O
if(istype(module_state_1,/obj/item/borg/sight))
sight_mode |= module_state_1:sight_mode
else if(!module_state_2)
module_state_2 = O
O.hud_layerise()
O.equipped_robot()
contents += O
if(istype(module_state_2,/obj/item/borg/sight))
sight_mode |= module_state_2:sight_mode
else if(!module_state_3)
module_state_3 = O
O.hud_layerise()
O.equipped_robot()
contents += O
if(istype(module_state_3,/obj/item/borg/sight))
sight_mode |= module_state_3:sight_mode
@@ -712,7 +712,8 @@
R.wideborg = TRUE
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
R.verbs |= /mob/living/silicon/robot/proc/robot_mount
// R.verbs |= /mob/living/proc/shred_limb - YW Edit
R.verbs |= /mob/living/proc/toggle_rider_reins
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
..()
@@ -789,6 +790,8 @@
R.wideborg = TRUE
R.verbs |= /mob/living/silicon/robot/proc/ex_reserve_refill
R.verbs |= /mob/living/silicon/robot/proc/robot_mount
R.verbs |= /mob/living/proc/toggle_rider_reins
R.verbs |= /mob/living/proc/shred_limb
R.verbs |= /mob/living/silicon/robot/proc/rest_style
..()
@@ -145,9 +145,10 @@
if(custom_sprite == TRUE)
return
if(wideborg == TRUE)
if(icontype== "Drake") // Why, Why can't we have normal nice things
if(icontype == "Drake") // Why, Why can't we have normal nice things
icon = 'icons/mob/drakeborg/drakeborg_vr.dmi'
else if(icontype == "SecVale" || icontype == "vale2") //CH edit
icon = 'icons/mob/widerobot_vr.dmi'
else
icon = wideborg_dept
return
@@ -176,7 +177,7 @@
//RIDING
/datum/riding/dogborg
keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop // Crack!
keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack!
nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called.
only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
@@ -277,7 +277,7 @@
// Riding
/datum/riding/simple_mob
keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop // Crack!
keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack!
nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called.
only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
@@ -7,6 +7,7 @@
item_state = "mouse_gray"
icon_living = "mouse_gray"
icon_dead = "mouse_gray_dead"
kitchen_tag = "rodent"
maxHealth = 5
health = 5
-1
View File
@@ -1,6 +1,5 @@
/mob
var/vantag_hud = 0 // Do I have the HUD enabled?
var/flying = 0 // Allows flight
var/mob/temporary_form // For holding onto a temporary form
var/disconnect_time = null //Time of client loss, set by Logout(), for timekeeping
-2
View File
@@ -460,8 +460,6 @@
return dense_object
/mob/proc/Check_Shoegrip()
if(flying) //VOREStation Edit. Checks to see if they and are flying.
return 1 //VOREStation Edit. Checks to see if they are flying. Mostly for this to be ported to Polaris.
return 0
/mob/proc/Process_Spaceslipping(var/prob_slip = 5)
@@ -252,6 +252,8 @@
/datum/preferences/proc/update_preview_icon()
var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey)
if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized.
mannequin.dna = new /datum/dna(null)
mannequin.delete_inventory(TRUE)
dress_preview_mob(mannequin)
mannequin.update_transform() //VOREStation Edit to update size/shape stuff.
@@ -1,16 +1,3 @@
/datum/preferences/update_preview_icon() // Lines up and un-overlaps character edit previews. Also un-splits taurs.
var/mob/living/carbon/human/dummy/mannequin/mannequin = get_mannequin(client_ckey)
if(!mannequin.dna) // Special handling for preview icons before SSAtoms has initailized.
mannequin.dna = new /datum/dna(null)
mannequin.delete_inventory(TRUE)
dress_preview_mob(mannequin)
mannequin.update_transform()
mannequin.toggle_tail_vr(setting = TRUE)
mannequin.toggle_wing_vr(setting = TRUE)
COMPILE_OVERLAYS(mannequin)
update_character_previews(new /mutable_appearance(mannequin))
//TFF 5/8/19 - add randomised sensor setting for random button clicking
/datum/preferences/randomize_appearance_and_body_for(var/mob/living/carbon/human/H)
sensorpref = rand(1,5)
@@ -1708,23 +1708,23 @@ shaved
/datum/sprite_accessory/hair/skr_tentacle_veryshort
name = "Skrell Short Tentacles"
icon_state = "skrell_hair_short"
species_allowed = list(SPECIES_SKRELL)
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
gender = MALE
/datum/sprite_accessory/hair/skr_tentacle_short
name = "Skrell Average Tentacles"
icon_state = "skrell_hair_average"
species_allowed = list(SPECIES_SKRELL)
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/hair/skr_tentacle_average
name = "Skrell Long Tentacles"
icon_state = "skrell_hair_long"
species_allowed = list(SPECIES_SKRELL)
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/hair/skr_tentacle_verylong
name = "Skrell Very Long Tentacles"
icon_state = "skrell_hair_verylong"
species_allowed = list(SPECIES_SKRELL)
species_allowed = list(SPECIES_SKRELL, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
//Tajaran hairstyles
/datum/sprite_accessory/hair/taj_ears
@@ -2006,6 +2006,8 @@ shaved
//like Tajaran inner-ear coloring overlay stuff.
species_allowed = list()
color_blend_mode = ICON_ADD
var/body_parts = list() //A list of bodyparts this covers, in organ_tag defines
//Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD
@@ -0,0 +1,489 @@
/*
////////////////////////////
/ =--------------------= /
/ == Ear Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/ears
name = "You should not see this..."
icon = 'icons/mob/human_races/sprite_accessories/ears.dmi'
do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
var/extra_overlay // Icon state of an additional overlay to blend in.
var/extra_overlay2
var/desc = "You should not see this..."
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/shadekin
name = "Shadekin Ears, colorable"
desc = ""
icon_state = "shadekin"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
apply_restrictions = TRUE
/datum/sprite_accessory/ears/taj_ears
name = "Tajaran Ears"
icon_state = "ears_plain"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
extra_overlay = "ears_plain-inner"
/datum/sprite_accessory/ears/taj_ears_tall
name = "Tajaran Tall Ears"
icon_state = "msai_plain"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
extra_overlay = "msai_plain-inner"
/datum/sprite_accessory/ears/squirrel_orange
name = "squirel, orange"
desc = ""
icon_state = "squirrel-orange"
/datum/sprite_accessory/ears/squirrel_red
name = "squirrel, red"
desc = ""
icon_state = "squirrel-red"
/datum/sprite_accessory/ears/bunny_white
name = "bunny, white"
desc = ""
icon_state = "bunny"
/datum/sprite_accessory/ears/bear_brown
name = "bear, brown"
desc = ""
icon_state = "bear-brown"
/datum/sprite_accessory/ears/bear_panda
name = "bear, panda"
desc = ""
icon_state = "panda"
/datum/sprite_accessory/ears/wolf_grey
name = "wolf, grey"
desc = ""
icon_state = "wolf-grey"
/datum/sprite_accessory/ears/wolf_green
name = "wolf, green"
desc = ""
icon_state = "wolf-green"
/datum/sprite_accessory/ears/wisewolf
name = "wolf, wise"
desc = ""
icon_state = "wolf-wise"
/datum/sprite_accessory/ears/mouse_grey
name = "mouse, grey"
desc = ""
icon_state = "mouse-grey"
/datum/sprite_accessory/ears/bee
name = "bee antennae"
desc = ""
icon_state = "bee"
/datum/sprite_accessory/ears/antennae
name = "antennae, colorable"
desc = ""
icon_state = "antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/curly_bug
name = "curly antennae, colorable"
desc = ""
icon_state = "curly_bug"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/dual_robot
name = "synth antennae, colorable"
desc = ""
icon_state = "dual_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/right_robot
name = "right synth, colorable"
desc = ""
icon_state = "right_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/left_robot
name = "left synth, colorable"
desc = ""
icon_state = "left_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/oni_h1
name = "oni horns"
desc = ""
icon_state = "oni-h1"
/datum/sprite_accessory/ears/oni_h1_c
name = "oni horns, colorable"
desc = ""
icon_state = "oni-h1_c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/demon_horns1
name = "demon horns"
desc = ""
icon_state = "demon-horns1"
/datum/sprite_accessory/ears/demon_horns1_c
name = "demon horns, colorable"
desc = ""
icon_state = "demon-horns1_c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/demon_horns2
name = "demon horns, colorable(outward)"
desc = ""
icon_state = "demon-horns2"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/dragon_horns
name = "dragon horns, colorable"
desc = ""
icon_state = "dragon-horns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/foxears
name = "highlander zorren ears"
desc = ""
icon_state = "foxears"
/datum/sprite_accessory/ears/fenears
name = "flatland zorren ears"
desc = ""
icon_state = "fenears"
/datum/sprite_accessory/ears/sergal //Redundant
name = "Sergal ears"
icon_state = "serg_plain_s"
/datum/sprite_accessory/ears/foxearshc
name = "highlander zorren ears, colorable"
desc = ""
icon_state = "foxearshc"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/fenearshc
name = "flatland zorren ears, colorable"
desc = ""
icon_state = "fenearshc"
extra_overlay = "fenears-inner"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/sergalhc
name = "Sergal ears, colorable"
icon_state = "serg_plain_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/mousehc
name = "mouse, colorable"
desc = ""
icon_state = "mouse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "mouseinner"
/datum/sprite_accessory/ears/mousehcno
name = "mouse, colorable, no inner"
desc = ""
icon_state = "mouse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/wolfhc
name = "wolf, colorable"
desc = ""
icon_state = "wolf"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wolfinner"
/datum/sprite_accessory/ears/bearhc
name = "bear, colorable"
desc = ""
icon_state = "bear"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/smallbear
name = "small bear"
desc = ""
icon_state = "smallbear"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/squirrelhc
name = "squirrel, colorable"
desc = ""
icon_state = "squirrel"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/kittyhc
name = "kitty, colorable"
desc = ""
icon_state = "kitty"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "kittyinner"
/datum/sprite_accessory/ears/bunnyhc
name = "bunny, colorable"
desc = ""
icon_state = "bunny"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/antlers
name = "antlers"
desc = ""
icon_state = "antlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/antlers_e
name = "antlers with ears"
desc = ""
icon_state = "cow-nohorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "antlers_mark"
/datum/sprite_accessory/ears/smallantlers
name = "small antlers"
desc = ""
icon_state = "smallantlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/smallantlers_e
name = "small antlers with ears"
desc = ""
icon_state = "smallantlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "deer"
/datum/sprite_accessory/ears/deer
name = "deer ears"
desc = ""
icon_state = "deer"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/cow
name = "cow, horns"
desc = ""
icon_state = "cow"
/datum/sprite_accessory/ears/cowc
name = "cow, horns, colorable"
desc = ""
icon_state = "cow-c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/cow_nohorns
name = "cow, no horns"
desc = ""
icon_state = "cow-nohorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/caprahorns
name = "caprine horns"
desc = ""
icon_state = "caprahorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/otie
name = "otie, colorable"
desc = ""
icon_state = "otie"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
/datum/sprite_accessory/ears/donkey
name = "donkey, colorable"
desc = ""
icon_state = "donkey"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
/datum/sprite_accessory/ears/zears
name = "jagged ears"
desc = ""
icon_state = "zears"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/elfs
name = "elven ears"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_HUMAN, SPECIES_HUMAN_VATBORN, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/sleek
name = "sleek ears"
desc = ""
icon_state = "sleek"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/drake
name = "drake frills"
desc = ""
icon_state = "drake"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/vulp
name = "vulpkanin, dual-color"
desc = ""
icon_state = "vulp"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp-inner"
/datum/sprite_accessory/ears/vulp_short
name = "vulpkanin short"
desc = ""
icon_state = "vulp_terrier"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/vulp_short_dc
name = "vulpkanin short, dual-color"
desc = ""
icon_state = "vulp_terrier"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp_terrier-inner"
/datum/sprite_accessory/ears/vulp_jackal
name = "vulpkanin thin, dual-color"
desc = ""
icon_state = "vulp_jackal"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp_jackal-inner"
/datum/sprite_accessory/ears/bunny_floppy
name = "floopy bunny ears (colorable)"
desc = ""
icon_state = "floppy_bun"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/teshari
name = "Teshari (colorable fluff)"
desc = ""
icon_state = "teshari"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshariinner"
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/tesharihigh
name = "Teshari upper ears (colorable fluff)"
desc = ""
icon_state = "tesharihigh"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharihighinner"
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/tesharilow
name = "Teshari lower ears (colorable fluff)"
desc = ""
icon_state = "tesharilow"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharilowinner"
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/ears/inkling
name = "colorable mature inkling hair"
desc = ""
icon = 'icons/mob/human_face_alt.dmi'
icon_state = "inkling-colorable"
color_blend_mode = ICON_MULTIPLY
do_colouration = 1
/datum/sprite_accessory/ears/large_dragon
name = "Large dragon horns"
desc = ""
icon_state = "big_liz"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
// Special snowflake ears go below here.
/datum/sprite_accessory/ears/elf_caprine_colorable
name = "Caprine horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "caprahorns"
/datum/sprite_accessory/ears/elf_oni_colorable
name = "oni horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "oni-h1_c"
/datum/sprite_accessory/ears/elf_demon_colorable
name = "Demon horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns1_c"
/datum/sprite_accessory/ears/elf_demon_outwards_colorable
name = "Demon horns with pointy ears, outwards, colourable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns2"
/datum/sprite_accessory/ears/elf_dragon_colorable
name = "Dragon horns with pointy ears, colourable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "dragon-horns"
@@ -0,0 +1,708 @@
/*
////////////////////////////
/ =--------------------= /
/ == Ear Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/ears
name = "You should not see this..."
icon = 'icons/mob/vore/ears_vr.dmi'
do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
// Species-unique ears
/datum/sprite_accessory/ears/shadekin
name = "Shadekin Ears, colorable"
desc = ""
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
/datum/sprite_accessory/ears/alt_ram_horns
name = "Solid ram horns"
desc = ""
icon_state = "ram_horns_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/hyena
name = "hyena ears, dual-color"
desc = ""
icon_state = "hyena"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "hyena-inner"
/datum/sprite_accessory/ears/moth
name = "moth antennae"
desc = ""
icon_state = "moth"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/squirrel_orange
name = "squirel, orange"
desc = ""
icon_state = "squirrel-orange"
/datum/sprite_accessory/ears/squirrel_red
name = "squirrel, red"
desc = ""
icon_state = "squirrel-red"
/datum/sprite_accessory/ears/bunny_white
name = "bunny, white"
desc = ""
icon_state = "bunny"
/datum/sprite_accessory/ears/bear_brown
name = "bear, brown"
desc = ""
icon_state = "bear-brown"
/datum/sprite_accessory/ears/bear_panda
name = "bear, panda"
desc = ""
icon_state = "panda"
/datum/sprite_accessory/ears/wolf_grey
name = "wolf, grey"
desc = ""
icon_state = "wolf-grey"
/datum/sprite_accessory/ears/wolf_green
name = "wolf, green"
desc = ""
icon_state = "wolf-green"
/datum/sprite_accessory/ears/wisewolf
name = "wolf, wise"
desc = ""
icon_state = "wolf-wise"
/datum/sprite_accessory/ears/mouse_grey
name = "mouse, grey"
desc = ""
icon_state = "mouse-grey"
/datum/sprite_accessory/ears/bee
name = "bee antennae"
desc = ""
icon_state = "bee"
/datum/sprite_accessory/ears/antennae
name = "antennae, colorable"
desc = ""
icon_state = "antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/curly_bug
name = "curly antennae, colorable"
desc = ""
icon_state = "curly_bug"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/dual_robot
name = "synth antennae, colorable"
desc = ""
icon_state = "dual_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/right_robot
name = "right synth, colorable"
desc = ""
icon_state = "right_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/left_robot
name = "left synth, colorable"
desc = ""
icon_state = "left_robot_antennae"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/oni_h1
name = "oni horns"
desc = ""
icon_state = "oni-h1"
/datum/sprite_accessory/ears/oni_h1_c
name = "oni horns, colorable"
desc = ""
icon_state = "oni-h1_c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/demon_horns1
name = "demon horns"
desc = ""
icon_state = "demon-horns1"
/datum/sprite_accessory/ears/demon_horns1_c
name = "demon horns, colorable"
desc = ""
icon_state = "demon-horns1_c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/demon_horns2
name = "demon horns, colorable(outward)"
desc = ""
icon_state = "demon-horns2"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/dragon_horns
name = "dragon horns, colorable"
desc = ""
icon_state = "dragon-horns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/foxears
name = "highlander zorren ears"
desc = ""
icon_state = "foxears"
/datum/sprite_accessory/ears/fenears
name = "flatland zorren ears"
desc = ""
icon_state = "fenears"
/datum/sprite_accessory/ears/sergal //Redundant
name = "Sergal ears"
icon_state = "serg_plain_s"
/datum/sprite_accessory/ears/foxearshc
name = "highlander zorren ears, colorable"
desc = ""
icon_state = "foxearshc"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/fenearshc
name = "flatland zorren ears, colorable"
desc = ""
icon_state = "fenearshc"
extra_overlay = "fenears-inner"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/sergalhc
name = "Sergal ears, colorable"
icon_state = "serg_plain_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/mousehc
name = "mouse, colorable"
desc = ""
icon_state = "mouse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "mouseinner"
/datum/sprite_accessory/ears/mousehcno
name = "mouse, colorable, no inner"
desc = ""
icon_state = "mouse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/wolfhc
name = "wolf, colorable"
desc = ""
icon_state = "wolf"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wolfinner"
/datum/sprite_accessory/ears/bearhc
name = "bear, colorable"
desc = ""
icon_state = "bear"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/smallbear
name = "small bear"
desc = ""
icon_state = "smallbear"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/squirrelhc
name = "squirrel, colorable"
desc = ""
icon_state = "squirrel"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/kittyhc
name = "kitty, colorable"
desc = ""
icon_state = "kitty"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "kittyinner"
/datum/sprite_accessory/ears/bunnyhc
name = "bunny, colorable"
desc = ""
icon_state = "bunny"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/antlers
name = "antlers"
desc = ""
icon_state = "antlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/antlers_e
name = "antlers with ears"
desc = ""
icon_state = "cow-nohorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "antlers_mark"
/datum/sprite_accessory/ears/smallantlers
name = "small antlers"
desc = ""
icon_state = "smallantlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/smallantlers_e
name = "small antlers with ears"
desc = ""
icon_state = "smallantlers"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "deer"
/datum/sprite_accessory/ears/deer
name = "deer ears"
desc = ""
icon_state = "deer"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/cow
name = "cow, horns"
desc = ""
icon_state = "cow"
/datum/sprite_accessory/ears/cowc
name = "cow, horns, colorable"
desc = ""
icon_state = "cow-c"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/cow_nohorns
name = "cow, no horns"
desc = ""
icon_state = "cow-nohorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/caprahorns
name = "caprine horns"
desc = ""
icon_state = "caprahorns"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/otie
name = "otie, colorable"
desc = ""
icon_state = "otie"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
/datum/sprite_accessory/ears/donkey
name = "donkey, colorable"
desc = ""
icon_state = "donkey"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "otie-inner"
/datum/sprite_accessory/ears/zears
name = "jagged ears"
desc = ""
icon_state = "zears"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/elfs
name = "elven ears"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/sleek
name = "sleek ears"
desc = ""
icon_state = "sleek"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/drake
name = "drake frills"
desc = ""
icon_state = "drake"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/vulp
name = "vulpkanin, dual-color"
desc = ""
icon_state = "vulp"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp-inner"
/datum/sprite_accessory/ears/vulp_short
name = "vulpkanin short"
desc = ""
icon_state = "vulp_terrier"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/vulp_short_dc
name = "vulpkanin short, dual-color"
desc = ""
icon_state = "vulp_terrier"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp_terrier-inner"
/datum/sprite_accessory/ears/vulp_jackal
name = "vulpkanin thin, dual-color"
desc = ""
icon_state = "vulp_jackal"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulp_jackal-inner"
/datum/sprite_accessory/ears/bunny_floppy
name = "floopy bunny ears (colorable)"
desc = ""
icon_state = "floppy_bun"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/teshari
name = "Teshari (colorable)"
desc = ""
icon_state = "teshari"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshariinner"
/datum/sprite_accessory/ears/tesharihigh
name = "Teshari upper ears (colorable)"
desc = ""
icon_state = "tesharihigh"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharihighinner"
/datum/sprite_accessory/ears/tesharilow
name = "Teshari lower ears (colorable)"
desc = ""
icon_state = "tesharilow"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tesharilowinner"
/datum/sprite_accessory/ears/tesh_pattern_ear_male
name = "Teshari male ear pattern (colorable)"
desc = ""
icon_state = "teshari"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshari_male_pattern"
/datum/sprite_accessory/ears/tesh_pattern_ear_female
name = "Teshari female ear pattern (colorable)"
desc = ""
icon_state = "teshari"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "teshari_female_pattern"
/datum/sprite_accessory/ears/inkling
name = "colorable mature inkling hair"
desc = ""
icon = 'icons/mob/human_face_vr.dmi'
icon_state = "inkling-colorable"
color_blend_mode = ICON_MULTIPLY
do_colouration = 1
/datum/sprite_accessory/ears/large_dragon
name = "Large dragon horns"
desc = ""
icon_state = "big_liz"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
// Special snowflake ears go below here.
/datum/sprite_accessory/ears/molenar_kitsune
name = "quintail kitsune ears (Molenar)"
desc = ""
icon_state = "molenar-kitsune"
ckeys_allowed = list("molenar")
/datum/sprite_accessory/ears/lilimoth_antennae
name = "citheronia antennae (Kira72)"
desc = ""
icon_state = "lilimoth_antennae"
ckeys_allowed = list("kira72")
/datum/sprite_accessory/ears/molenar_deathclaw
name = "deathclaw ears (Molenar)"
desc = ""
icon_state = "molenar-deathclaw"
ckeys_allowed = list("molenar")
/datum/sprite_accessory/ears/miria_fluffdragon
name = "fluffdragon ears (Miria Masters)"
desc = ""
icon_state = "miria-fluffdragonears"
ckeys_allowed = list("miriamasters")
/datum/sprite_accessory/ears/miria_kitsune
name = "kitsune ears (Miria Masters)"
desc = ""
icon_state = "miria-kitsuneears"
ckeys_allowed = list("miriamasters")
/datum/sprite_accessory/ears/runac
name = "fennecsune ears (Runac)"
desc = ""
icon_state = "runac"
ckeys_allowed = list("rebcom1807")
/datum/sprite_accessory/ears/kerena
name = "wingwolf ears (Kerena)"
desc = ""
icon_state = "kerena"
ckeys_allowed = list("somekindofpony")
/datum/sprite_accessory/ears/rosey
name = "tritail kitsune ears (Rosey)"
desc = ""
icon_state = "rosey"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
ckeys_allowed = list("joey4298")
/datum/sprite_accessory/ears/aronai
name = "aronai ears/head (Aronai)"
desc = ""
icon_state = "aronai"
ckeys_allowed = list("arokha")
/datum/sprite_accessory/ears/holly
name = "tigress ears (Holly Sharp)"
desc = ""
icon_state = "tigressears"
ckeys_allowed = list("hoodoo")
/datum/sprite_accessory/ears/molenar_inkling
name = "teal mature inkling hair (Kari Akiren)"
desc = ""
icon_state = "molenar-tentacle"
ckeys_allowed = list("molenar")
/datum/sprite_accessory/ears/shock
name = "pharoah hound ears (Shock Diamond)"
desc = ""
icon_state = "shock"
ckeys_allowed = list("icowom","cameron653")
/datum/sprite_accessory/ears/alurane
name = "alurane ears/hair (Pumila)"
desc = ""
icon_state = "alurane-ears"
ckeys_allowed = list("natje")
/datum/sprite_accessory/ears/frost
name = "Frost antenna"
desc = ""
icon_state = "frosted_tips"
ckeys_allowed = list("tucker0666")
/datum/sprite_accessory/ears/sylv_pip
name = "sylveon ears and ribbons (Pip Shyner)"
desc = ""
icon_state = "pipears"
ckeys_allowed = list("phoaly")
/datum/sprite_accessory/ears/elf_caprine_colorable
name = "Caprine horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "caprahorns"
/datum/sprite_accessory/ears/elf_oni_colorable
name = "oni horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "oni-h1_c"
/datum/sprite_accessory/ears/elf_demon_colorable
name = "Demon horns with pointy ears, colorable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns1_c"
/datum/sprite_accessory/ears/elf_demon_outwards_colorable
name = "Demon horns with pointy ears, outwards, colourable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "demon-horns2"
/datum/sprite_accessory/ears/elf_dragon_colorable
name = "Dragon horns with pointy ears, colourable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "dragon-horns"
/datum/sprite_accessory/ears/synthhorns_plain
name = "Synth horns, plain"
desc = ""
icon_state = "synthhorns_plain"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "synthhorns_plain_light"
/datum/sprite_accessory/ears/synthhorns_thick
name = "Synth horns, thick"
desc = ""
icon_state = "synthhorns_thick"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "synthhorns_thick_light"
/datum/sprite_accessory/ears/synthhorns_curly
name = "Synth horns, curly"
desc = ""
icon_state = "synthhorns_curled"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/forward_curled_demon_horns_bony
name = "Succubus horns, colourable"
desc = ""
icon_state = "succu-horns_b"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/forward_curled_demon_horns_bony_with_colorable_ears
name = "Succubus horns with pointy ears, colourable"
desc = ""
icon_state = "elfs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "succu-horns_b"
/datum/sprite_accessory/ears/chorns_nubbydogs
name = "Nubby Chorns"
desc = ""
icon_state = "chorn_nubby"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_herk
name = "Herk Chorns"
desc = ""
icon_state = "chorn_herk"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_bork
name = "Bork Chorns"
desc = ""
icon_state = "chorn_bork"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_bull
name = "Bull Chorns"
desc = ""
icon_state = "chorn_bull"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_bicarrot
name = "Bicarrot Chorns"
desc = ""
icon_state = "chorn_bicarrot"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_longcarrot
name = "Long Carrot Chorns"
desc = ""
icon_state = "chorn_longcarrot"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_shortcarrot
name = "Short Carrot Chorns"
desc = ""
icon_state = "chorn_shortcarrot"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_scorp
name = "Scorp Chorns"
desc = ""
icon_state = "chorn_scorp"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_ocean
name = "Ocean Chorns"
desc = ""
icon_state = "chorn_ocean"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/ears/chorns_chub
name = "Chub Chorns"
desc = ""
icon_state = "chorn_chub"
do_colouration = 0
color_blend_mode = ICON_MULTIPLY
@@ -0,0 +1,566 @@
/datum/sprite_accessory/marking/vr
icon = 'icons/mob/human_races/markings_alt.dmi'
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/marking/vr/vulp_belly
name = "belly fur (Vulp)"
icon_state = "vulp_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_fullbelly
name = "full belly fur (Vulp)"
icon_state = "vulp_fullbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_crest
name = "belly crest (Vulp)"
icon_state = "vulp_crest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_nose
name = "nose (Vulp)"
icon_state = "vulp_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_short_nose
name = "nose, short (Vulp)"
icon_state = "vulp_short_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/snoutstripe
name = "snout stripe (Vulp)"
icon_state = "snoutstripe"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_face
name = "face (Vulp)"
icon_state = "vulp_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_facealt
name = "face, alt. (Vulp)"
icon_state = "vulp_facealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_earsface
name = "ears and face (Vulp)"
icon_state = "vulp_earsface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_all
name = "all head highlights (Vulp)"
icon_state = "vulp_all"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergal_full
name = "Sergal Markings"
icon_state = "sergal_full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/sergal_full_female
name = "Sergal Markings (Female)"
icon_state = "sergal_full_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/monoeye
name = "Monoeye"
icon_state = "monoeye"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spidereyes
name = "Spider Eyes"
icon_state = "spidereyes"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergaleyes
name = "Sergal Eyes"
icon_state = "eyes_sergal"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/brows
name = "Eyebrows"
icon_state = "brows"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/nevrean_female
name = "Female Nevrean beak"
icon_state = "nevrean_f"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = FEMALE
/datum/sprite_accessory/marking/vr/nevrean_male
name = "Male Nevrean beak"
icon_state = "nevrean_m"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = MALE
/datum/sprite_accessory/marking/vr/spots
name = "Spots"
icon_state = "spots"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/shaggy_mane
name = "Shaggy mane/feathers"
icon_state = "shaggy"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/jagged_teeth
name = "Jagged teeth"
icon_state = "jagged"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/blank_face
name = "Blank round face (use with monster mouth)"
icon_state = "blankface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/monster_mouth
name = "Monster mouth"
icon_state = "monster"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/saber_teeth
name = "Saber teeth"
icon_state = "saber"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/fangs
name = "Fangs"
icon_state = "fangs"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tusks
name = "Tusks"
icon_state = "tusks"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_face
name = "Otie face"
icon_state = "otieface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_nose
name = "Otie nose"
icon_state = "otie_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otienose_lite
name = "Short otie nose"
icon_state = "otienose_lite"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/backstripes
name = "Back stripes"
icon_state = "otiestripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/belly_butt
name = "Belly and butt"
icon_state = "bellyandbutt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/fingers_toes
name = "Fingers and toes"
icon_state = "fingerstoes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/otie_socks
name = "Fingerless socks"
icon_state = "otiesocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/corvid_beak
name = "Corvid beak"
icon_state = "corvidbeak"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/corvid_belly
name = "Corvid belly"
icon_state = "corvidbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_body
name = "Cow markings"
icon_state = "cowbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_nose
name = "Cow nose"
icon_state = "cownose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zmask
name = "Eye mask"
icon_state = "zmask"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zbody
name = "Thick jagged stripes"
icon_state = "zbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/znose
name = "Jagged snout"
icon_state = "znose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_nose
name = "Otter nose"
icon_state = "otternose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_face
name = "Otter face"
icon_state = "otterface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/deer_face
name = "Deer face"
icon_state = "deerface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sharkface
name = "Akula snout"
icon_state = "sharkface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_face
name = "Shepherd snout"
icon_state = "shepface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_back
name = "Shepherd back"
icon_state = "shepback"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_male
name = "Zorren Male Torso"
icon_state = "zorren_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_female
name = "Zorren Female Torso"
icon_state = "zorren_belly_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_back_patch
name = "Zorren Back Patch"
icon_state = "zorren_backpatch"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/zorren_face_male
name = "Zorren Male Face"
icon_state = "zorren_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_face_female
name = "Zorren Female Face"
icon_state = "zorren_face_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_male
name = "Zorren Male Muzzle"
icon_state = "zorren_muzzle"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_female
name = "Zorren Female Muzzle"
icon_state = "zorren_muzzle_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_socks
name = "Zorren Socks"
icon_state = "zorren_socks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/zorren_longsocks
name = "Zorren Longsocks"
icon_state = "zorren_longsocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/tesh_feathers
name = "Teshari Feathers"
icon_state = "tesh-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/harpy_feathers
name = "Rapala leg Feather"
icon_state = "harpy-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/harpy_legs
name = "Rapala leg coloring"
icon_state = "harpy-leg"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/chooves
name = "Cloven hooves"
icon_state = "chooves"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
/datum/sprite_accessory/marking/vr/body_tone
name = "Body toning (for emergency contrast loss)"
icon_state = "btone"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/gloss
name = "Full body gloss"
icon_state = "gloss"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/eboop_panels
name = "Eggnerd FBP panels"
icon_state = "eboop"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/osocks_rarm
name = "Modular Longsock (right arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
/datum/sprite_accessory/marking/vr/osocks_larm
name = "Modular Longsock (left arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
/datum/sprite_accessory/marking/vr/osocks_rleg
name = "Modular Longsock (right leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT,BP_R_LEG)
/datum/sprite_accessory/marking/vr/osocks_lleg
name = "Modular Longsock (left leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_L_LEG)
/datum/sprite_accessory/marking/vr/animeeyesinner
name = "Anime Eyes Inner"
icon_state = "animeeyesinner"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/animeeyesouter
name = "Anime Eyes Outer"
icon_state = "animeeyesouter"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/panda_eye_marks
name = "Panda Eye Markings"
icon_state = "eyes_panda"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/marking/vr/catwomantorso
name = "Catwoman chest stripes"
icon_state = "catwomanchest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/catwomangroin
name = "Catwoman groin stripes"
icon_state = "catwomangroin"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN)
/datum/sprite_accessory/marking/vr/catwoman_rleg
name = "Catwoman right leg stripes"
icon_state = "catwomanright"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/vr/catwoman_lleg
name = "Catwoman left leg stripes"
icon_state = "catwomanleft"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/vr/teshi_small_feathers
name = "Teshari small wingfeathers"
icon_state = "teshi_sf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights
name = "Ward - Spirit FBP Lights"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_lights_body
name = "Ward - Spirit FBP Lights (body)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights_head
name = "Ward - Spirit FBP Lights (head)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels
name = "Ward - Spirit FBP Panels"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels_body
name = "Ward - Spirit FBP Panels (body)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_panels_head
name = "Ward - Spirit FBP Panels (head)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_head
name = "Squid Head"
icon_state = "tentaclehead"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_mouth
name = "Tentacle Mouth"
icon_state = "tentaclemouth"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/rosette
name = "Rosettes"
icon_state = "rosette"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/*
werewolf_nose
name = "Werewolf nose"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_face
name = "Werewolf face"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_belly
name = "Werewolf belly"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_socks
name = "Werewolf socks"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
species_allowed = list(SPECIES_WEREBEAST)
shadekin_snoot
name = "Shadekin Snoot"
icon_state = "shadekin-snoot"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
*/
/datum/sprite_accessory/marking/vr/taj_nose_alt
name = "Nose Color, alt. (Taj)"
icon_state = "taj_nosealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/talons
name = "Talons"
icon_state = "talons"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/claws
name = "Claws"
icon_state = "claws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/equine_snout //Why the long face? Works best with sergal bodytype.
name = "Equine Snout"
icon_state = "donkey"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/equine_nose
name = "Equine Nose"
icon_state = "dnose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
@@ -0,0 +1,725 @@
//VOREStation Body Markings and Overrides
//Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD
/datum/sprite_accessory/marking //Override for base markings
color_blend_mode = ICON_ADD
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
/datum/sprite_accessory/marking/vr
icon = 'icons/mob/human_races/markings_vr.dmi'
/datum/sprite_accessory/marking/vr/vulp_belly
name = "belly fur (Vulp)"
icon_state = "vulp_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_fullbelly
name = "full belly fur (Vulp)"
icon_state = "vulp_fullbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_crest
name = "belly crest (Vulp)"
icon_state = "vulp_crest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vulp_nose
name = "nose (Vulp)"
icon_state = "vulp_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_short_nose
name = "nose, short (Vulp)"
icon_state = "vulp_short_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/snoutstripe
name = "snout stripe (Vulp)"
icon_state = "snoutstripe"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_face
name = "face (Vulp)"
icon_state = "vulp_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_facealt
name = "face, alt. (Vulp)"
icon_state = "vulp_facealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_earsface
name = "ears and face (Vulp)"
icon_state = "vulp_earsface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/vulp_all
name = "all head highlights (Vulp)"
icon_state = "vulp_all"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergal_full
name = "Sergal Markings"
icon_state = "sergal_full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/sergal_full_female
name = "Sergal Markings (Female)"
icon_state = "sergal_full_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
/datum/sprite_accessory/marking/vr/monoeye
name = "Monoeye"
icon_state = "monoeye"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spidereyes
name = "Spider Eyes"
icon_state = "spidereyes"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sergaleyes
name = "Sergal Eyes"
icon_state = "eyes_sergal"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/brows
name = "Eyebrows"
icon_state = "brows"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/nevrean_female
name = "Female Nevrean beak"
icon_state = "nevrean_f"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = FEMALE
/datum/sprite_accessory/marking/vr/nevrean_male
name = "Male Nevrean beak"
icon_state = "nevrean_m"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = MALE
/datum/sprite_accessory/marking/vr/spots
name = "Spots"
icon_state = "spots"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/shaggy_mane
name = "Shaggy mane/feathers"
icon_state = "shaggy"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/jagged_teeth
name = "Jagged teeth"
icon_state = "jagged"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/blank_face
name = "Blank round face (use with monster mouth)"
icon_state = "blankface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/monster_mouth
name = "Monster mouth"
icon_state = "monster"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/saber_teeth
name = "Saber teeth"
icon_state = "saber"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/fangs
name = "Fangs"
icon_state = "fangs"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tusks
name = "Tusks"
icon_state = "tusks"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_face
name = "Otie face"
icon_state = "otieface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otie_nose
name = "Otie nose"
icon_state = "otie_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otienose_lite
name = "Short otie nose"
icon_state = "otienose_lite"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/backstripes
name = "Back stripes"
icon_state = "otiestripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/belly_butt
name = "Belly and butt"
icon_state = "bellyandbutt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/fingers_toes
name = "Fingers and toes"
icon_state = "fingerstoes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/otie_socks
name = "Fingerless socks"
icon_state = "otiesocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/corvid_beak
name = "Corvid beak"
icon_state = "corvidbeak"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/corvid_belly
name = "Corvid belly"
icon_state = "corvidbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_body
name = "Cow markings"
icon_state = "cowbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/cow_nose
name = "Cow nose"
icon_state = "cownose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zmask
name = "Eye mask"
icon_state = "zmask"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/zbody
name = "Thick jagged stripes"
icon_state = "zbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/znose
name = "Jagged snout"
icon_state = "znose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_nose
name = "Otter nose"
icon_state = "otternose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/otter_face
name = "Otter face"
icon_state = "otterface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/deer_face
name = "Deer face"
icon_state = "deerface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sharkface
name = "Akula snout"
icon_state = "sharkface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_face
name = "Shepherd snout"
icon_state = "shepface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/sheppy_back
name = "Shepherd back"
icon_state = "shepback"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_male
name = "Zorren Male Torso"
icon_state = "zorren_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_belly_female
name = "Zorren Female Torso"
icon_state = "zorren_belly_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/zorren_back_patch
name = "Zorren Back Patch"
icon_state = "zorren_backpatch"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/zorren_face_male
name = "Zorren Male Face"
icon_state = "zorren_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_face_female
name = "Zorren Female Face"
icon_state = "zorren_face_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_male
name = "Zorren Male Muzzle"
icon_state = "zorren_muzzle"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
/datum/sprite_accessory/marking/vr/zorren_muzzle_female
name = "Zorren Female Muzzle"
icon_state = "zorren_muzzle_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
/datum/sprite_accessory/marking/vr/zorren_socks
name = "Zorren Socks"
icon_state = "zorren_socks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/zorren_longsocks
name = "Zorren Longsocks"
icon_state = "zorren_longsocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/tesh_feathers
name = "Teshari Feathers"
icon_state = "tesh-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/harpy_feathers
name = "Rapala leg Feather"
icon_state = "harpy-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/harpy_legs
name = "Rapala leg coloring"
icon_state = "harpy-leg"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/chooves
name = "Cloven hooves"
icon_state = "chooves"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
/datum/sprite_accessory/marking/vr/body_tone
name = "Body toning (for emergency contrast loss)"
icon_state = "btone"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/gloss
name = "Full body gloss"
icon_state = "gloss"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/eboop_panels
name = "Eggnerd FBP panels"
icon_state = "eboop"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/osocks_rarm
name = "Modular Longsock (right arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
/datum/sprite_accessory/marking/vr/osocks_larm
name = "Modular Longsock (left arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
/datum/sprite_accessory/marking/vr/osocks_rleg
name = "Modular Longsock (right leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT,BP_R_LEG)
/datum/sprite_accessory/marking/vr/osocks_lleg
name = "Modular Longsock (left leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_L_LEG)
/datum/sprite_accessory/marking/vr/animeeyesinner
name = "Anime Eyes Inner"
icon_state = "animeeyesinner"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/animeeyesouter
name = "Anime Eyes Outer"
icon_state = "animeeyesouter"
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/panda_eye_marks
name = "Panda Eye Markings"
icon_state = "eyes_panda"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/marking/vr/catwomantorso
name = "Catwoman chest stripes"
icon_state = "catwomanchest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
/datum/sprite_accessory/marking/vr/catwomangroin
name = "Catwoman groin stripes"
icon_state = "catwomangroin"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN)
/datum/sprite_accessory/marking/vr/catwoman_rleg
name = "Catwoman right leg stripes"
icon_state = "catwomanright"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG)
/datum/sprite_accessory/marking/vr/catwoman_lleg
name = "Catwoman left leg stripes"
icon_state = "catwomanleft"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG)
/datum/sprite_accessory/marking/vr/teshi_small_feathers
name = "Teshari small wingfeathers"
icon_state = "teshi_sf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights
name = "Ward - Spirit FBP Lights"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_lights_body
name = "Ward - Spirit FBP Lights (body)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_lights_head
name = "Ward - Spirit FBP Lights (head)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels
name = "Ward - Spirit FBP Panels"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/spirit_panels_body
name = "Ward - Spirit FBP Panels (body)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
/datum/sprite_accessory/marking/vr/spirit_panels_head
name = "Ward - Spirit FBP Panels (head)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_head
name = "Squid Head"
icon_state = "tentaclehead"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/tentacle_mouth
name = "Tentacle Mouth"
icon_state = "tentaclemouth"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/rosette
name = "Rosettes"
icon_state = "rosette"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
/datum/sprite_accessory/marking/vr/werewolf_nose
name = "Werewolf nose"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_face
name = "Werewolf face"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_belly
name = "Werewolf belly"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/werewolf_socks
name = "Werewolf socks"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
species_allowed = list(SPECIES_WEREBEAST)
/datum/sprite_accessory/marking/vr/shadekin_snoot
name = "Shadekin Snoot"
icon_state = "shadekin-snoot"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW)
/datum/sprite_accessory/marking/vr/taj_nose_alt
name = "Nose Color, alt. (Taj)"
icon_state = "taj_nosealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/talons
name = "Talons"
icon_state = "talons"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
/datum/sprite_accessory/marking/vr/claws
name = "Claws"
icon_state = "claws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/equine_snout //Why the long face? Works best with sergal bodytype.
name = "Equine Snout"
icon_state = "donkey"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/equine_nose
name = "Equine Nose"
icon_state = "dnose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/bee_stripes
name = "bee stripes"
icon_state = "beestripes"
body_parts = list(BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/vas_toes
name = "Bug Paws (Vasilissan)"
icon_state = "vas_toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
//CitRP stuff
/datum/sprite_accessory/marking/vr/vox_alt
name = "Vox Alternate"
icon_state = "bay_vox"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/marking/vr/vox_alt_eyes
name = "Alternate Vox Eyes"
icon_state = "bay_vox_eyes"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_VOX)
/datum/sprite_accessory/marking/vr/c_beast_body
name = "Cyber Body"
icon_state = "c_beast_body"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN)
/datum/sprite_accessory/marking/vr/c_beast_plating
name = "Cyber Plating (Use w/ Cyber Body)"
icon_state = "c_beast_plating"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM)
/datum/sprite_accessory/marking/vr/c_beast_band
name = "Cyber Band (Use w/ Cybertech head)"
icon_state = "c_beast_band"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_a
name = "Cyber Beast Cheeks A (Use A, B and C)"
icon_state = "c_beast_a"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_b
name = "Cyber Beast Cheeks B (Use A, B and C)"
icon_state = "c_beast_b"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/c_beast_cheek_c
name = "Cyber Beast Cheeks C (Use A, B and C)"
icon_state = "c_beast_c"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/teshari_large_eyes
name = "Teshari large eyes"
icon_state = "teshlarge_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_coat
name = "Teshari coat"
icon_state = "tesh_coat"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_pattern_male
name = "Teshari male pattern"
icon_state = "tesh-pattern-male"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/teshari_pattern_female
name = "Teshari female pattern"
icon_state = "tesh-pattern-fem"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
/datum/sprite_accessory/marking/vr/voxscales
name = "Vox Scales"
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_HEAD)
/datum/sprite_accessory/marking/vr/voxclaws
name = "Vox Claws"
icon_state = "Voxclaws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
/datum/sprite_accessory/marking/vr/voxbeak
name = "Vox Beak"
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathihood
name = "Cobra Hood"
icon_state = "unathihood"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathidoublehorns
name = "Double Unathi Horns"
icon_state = "unathidoublehorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathihorns
name = "Unathi Horns"
icon_state = "unathihorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathiramhorns
name = "Unathi Ram Horns"
icon_state = "unathiramhorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathishortspines
name = "Unathi Short Spines"
icon_state = "unathishortspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathilongspines
name = "Unathi Long Spines"
icon_state = "unathilongspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathishortfrills
name = "Unathi Short Frills"
icon_state = "unathishortfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/datum/sprite_accessory/marking/vr/unathilongfrills
name = "Unathi Long Frills"
icon_state = "unathilongfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
@@ -0,0 +1,941 @@
/*
////////////////////////////
/ =--------------------= /
/ == Tail Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/tail
name = "You should not see this..."
icon = 'icons/mob/human_races/sprite_accessories/tails.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
var/extra_overlay // Icon state of an additional overlay to blend in.
var/extra_overlay2 //Tertiary.
var/show_species_tail = 0 // If false, do not render species' tail.
var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it
var/desc = "You should not see this..."
var/ani_state // State when wagging/animated
var/extra_overlay_w // Wagging state for extra overlay
var/extra_overlay2_w // Tertiary wagging.
var/list/hide_body_parts = list() //Uses organ tag defines. Bodyparts in this list do not have their icons rendered, allowing for more spriter freedom when doing taur/digitigrade stuff.
var/icon/clip_mask_icon = null //Icon file used for clip mask.
var/clip_mask_state = null //Icon state to generate clip mask. Clip mask is used to 'clip' off the lower part of clothing such as jumpsuits & full suits.
var/icon/clip_mask = null //Instantiated clip mask of given icon and state
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/New()
. = ..()
if(clip_mask_icon && clip_mask_state)
clip_mask = icon(icon = clip_mask_icon, icon_state = clip_mask_state)
// Species-unique tails
// Everyone tails
/datum/sprite_accessory/tail/invisible
name = "hide species-sprite tail"
icon = null
icon_state = null
species_allowed = list(SPECIES_TAJ, SPECIES_UNATHI, SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/squirrel_orange
name = "squirel, orange"
desc = ""
icon_state = "squirrel-orange"
/datum/sprite_accessory/tail/squirrel_red
name = "squirrel, red"
desc = ""
icon_state = "squirrel-red"
/datum/sprite_accessory/tail/squirrel
name = "squirrel, colorable"
desc = ""
icon_state = "squirrel"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/kitty
name = "kitty, colorable, downwards"
desc = ""
icon_state = "kittydown"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/kittyup
name = "kitty, colorable, upwards"
desc = ""
icon_state = "kittyup"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/tiger_white
name = "tiger, colorable"
desc = ""
icon_state = "tiger"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tigerinnerwhite"
/datum/sprite_accessory/tail/stripey
name = "stripey taj, colorable"
desc = ""
icon_state = "stripeytail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "stripeytail_mark"
species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/stripeytail_brown
name = "stripey taj, brown"
desc = ""
icon_state = "stripeytail-brown"
/datum/sprite_accessory/tail/chameleon
name = "Chameleon, colorable"
desc = ""
icon_state = "chameleon"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/bunny
name = "bunny, colorable"
desc = ""
icon_state = "bunny"
do_colouration = 1
/datum/sprite_accessory/tail/bear_brown
name = "bear, brown"
desc = ""
icon_state = "bear-brown"
/datum/sprite_accessory/tail/bear
name = "bear, colorable"
desc = ""
icon_state = "bear"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/dragon
name = "dragon, colorable"
desc = ""
icon_state = "dragon"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/wolf_grey
name = "wolf, grey"
desc = ""
icon_state = "wolf-grey"
/datum/sprite_accessory/tail/wolf_green
name = "wolf, green"
desc = ""
icon_state = "wolf-green"
/datum/sprite_accessory/tail/wisewolf
name = "wolf, wise"
desc = ""
icon_state = "wolf-wise"
/datum/sprite_accessory/tail/blackwolf
name = "wolf, black"
desc = ""
icon_state = "wolf"
/datum/sprite_accessory/tail/wolf
name = "wolf, colorable"
desc = ""
icon_state = "wolf"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wolfinner"
/datum/sprite_accessory/tail/mouse_pink
name = "mouse, pink"
desc = ""
icon_state = "mouse-pink"
/datum/sprite_accessory/tail/mouse
name = "mouse, colorable"
desc = ""
icon_state = "mouse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/horse
name = "horse tail, colorable"
desc = ""
icon_state = "horse"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/cow
name = "cow tail, colorable"
desc = ""
icon_state = "cow"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/fantail
name = "avian fantail, colorable"
desc = ""
icon_state = "fantail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/wagtail
name = "avian wagtail, colorable"
desc = ""
icon_state = "wagtail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/nevreandc
name = "nevrean tail, dual-color"
desc = ""
icon_state = "nevreantail_dc"
extra_overlay = "nevreantail_dc_tail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/nevreanwagdc
name = "nevrean wagtail, dual-color"
desc = ""
icon_state = "wagtail"
extra_overlay = "wagtail_dc_tail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/nevreanwagdc_alt
name = "nevrean wagtail, marked, dual-color"
desc = ""
icon_state = "wagtail2_dc"
extra_overlay = "wagtail2_dc_mark"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/crossfox
name = "cross fox"
desc = ""
icon_state = "crossfox"
/datum/sprite_accessory/tail/beethorax
name = "bee thorax"
desc = ""
icon_state = "beethorax"
/datum/sprite_accessory/tail/doublekitsune
name = "double kitsune tail, colorable"
desc = ""
icon_state = "doublekitsune"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/spade_color
name = "spade-tail (colorable)"
desc = ""
icon_state = "spadetail-black"
do_colouration = 1
/datum/sprite_accessory/tail/snag
name = "xenomorph tail 1"
desc = ""
icon_state = "snag"
/datum/sprite_accessory/tail/xenotail
name = "xenomorph tail 2"
desc = ""
icon_state = "xenotail"
/datum/sprite_accessory/tail/eboop
name = "EGN mech tail (dual color)"
desc = ""
icon_state = "eboop"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "eboop_mark"
/datum/sprite_accessory/tail/ketrai_wag
name = "fennix tail (vwag)"
desc = ""
icon_state = "ketraitail"
ani_state = "ketraitail_w"
//ckeys_allowed = list("ketrai") //They requested it to be enabled for everyone.
/datum/sprite_accessory/tail/ketrainew_wag
name = "new fennix tail (vwag)"
desc = ""
icon_state = "ketraitailnew"
ani_state = "ketraitailnew_w"
/datum/sprite_accessory/tail/redpanda
name = "red panda"
desc = ""
icon_state = "redpanda"
/datum/sprite_accessory/tail/ringtail
name = "ringtail, colorable"
desc = ""
icon_state = "ringtail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "ringtail_mark"
/datum/sprite_accessory/tail/satyr
name = "goat legs, colorable"
desc = ""
icon_state = "satyr"
color_blend_mode = ICON_MULTIPLY
do_colouration = 1
hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case.
clip_mask_icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi'
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
/datum/sprite_accessory/tail/tailmaw
name = "tailmaw, colorable"
desc = ""
icon_state = "tailmaw"
color_blend_mode = ICON_MULTIPLY
do_colouration = 1
/datum/sprite_accessory/tail/curltail
name = "curltail (vwag)"
desc = ""
icon_state = "curltail"
ani_state = "curltail_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "curltail_mark"
extra_overlay_w = "curltail_mark_w"
/datum/sprite_accessory/tail/shorttail
name = "shorttail (vwag)"
desc = ""
icon_state = "straighttail"
ani_state = "straighttail_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/sneptail
name = "Snep/Furry Tail (vwag)"
desc = ""
icon_state = "sneptail"
ani_state = "sneptail_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "sneptail_mark"
extra_overlay_w = "sneptail_mark_w"
/datum/sprite_accessory/tail/tiger_new
name = "tiger tail (vwag)"
desc = ""
icon_state = "tigertail"
ani_state = "tigertail_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "tigertail_mark"
extra_overlay_w = "tigertail_mark_w"
/datum/sprite_accessory/tail/vulp_new
name = "new vulp tail (vwag)"
desc = ""
icon_state = "vulptail"
ani_state = "vulptail_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "vulptail_mark"
extra_overlay_w = "vulptail_mark_w"
/datum/sprite_accessory/tail/otietail
name = "otie tail (vwag)"
desc = ""
icon_state = "otie"
ani_state = "otie_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/newtailmaw
name = "new tailmaw (vwag)"
desc = ""
icon_state = "newtailmaw"
ani_state = "newtailmaw_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/ztail
name = "jagged flufftail"
desc = ""
icon_state = "ztail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/snaketail
name = "snake tail, colorable"
desc = ""
icon_state = "snaketail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/vulpan_alt
name = "vulpkanin alt style, colorable"
desc = ""
icon_state = "vulptail_alt"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/sergaltaildc
name = "sergal, dual-color"
desc = ""
icon_state = "sergal"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "sergal_mark"
/datum/sprite_accessory/tail/skunktail
name = "skunk, dual-color"
desc = ""
icon_state = "skunktail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "skunktail_mark"
/datum/sprite_accessory/tail/deertail
name = "deer, dual-color"
desc = ""
icon_state = "deertail"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "deertail_mark"
/datum/sprite_accessory/tail/teshari_fluffytail
name = "Teshari alternative, colorable"
desc = ""
icon_state = "teshari_fluffytail"
extra_overlay = "teshari_fluffytail_mark"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/nightstalker
name = "Nightstalker, colorable"
desc = ""
icon_state = "nightstalker"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
//For all species tails. Includes haircolored tails.
/datum/sprite_accessory/tail/special
name = "Blank tail. Do not select."
icon = 'icons/effects/species_tails.dmi'
/datum/sprite_accessory/tail/special/unathi
name = "unathi tail"
desc = ""
icon_state = "sogtail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/tajaran
name = "tajaran tail"
desc = ""
icon_state = "tajtail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/sergal
name = "sergal tail"
desc = ""
icon_state = "sergtail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/akula
name = "akula tail"
desc = ""
icon_state = "sharktail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/nevrean
name = "nevrean tail"
desc = ""
icon_state = "nevreantail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/armalis
name = "armalis tail"
desc = ""
icon_state = "armalis_tail_humanoid_s"
/datum/sprite_accessory/tail/special/xenodrone
name = "xenomorph drone tail"
desc = ""
icon_state = "xenos_drone_tail_s"
/datum/sprite_accessory/tail/special/xenosentinel
name = "xenomorph sentinel tail"
desc = ""
icon_state = "xenos_sentinel_tail_s"
/datum/sprite_accessory/tail/special/xenohunter
name = "xenomorph hunter tail"
desc = ""
icon_state = "xenos_hunter_tail_s"
/datum/sprite_accessory/tail/special/xenoqueen
name = "xenomorph queen tail"
desc = ""
icon_state = "xenos_queen_tail_s"
/datum/sprite_accessory/tail/special/monkey
name = "monkey tail"
desc = ""
icon_state = "chimptail_s"
/datum/sprite_accessory/tail/special/seromitail
name = "seromi tail"
desc = ""
icon_state = "seromitail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/seromitailfeathered
name = "seromi tail w/ feathers"
desc = ""
icon_state = "seromitail_s"
extra_overlay = "seromitail_feathers_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TESHARI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/unathihc
name = "unathi tail, colorable"
desc = ""
icon_state = "sogtail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_UNATHI, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/tajaranhc
name = "tajaran tail, colorable"
desc = ""
icon_state = "tajtail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
species_allowed = list(SPECIES_TAJ, SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/tail/special/sergalhc
name = "sergal tail, colorable"
desc = ""
icon_state = "sergtail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/akulahc
name = "akula tail, colorable"
desc = ""
icon_state = "sharktail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/nevreanhc
name = "nevrean tail, colorable"
desc = ""
icon_state = "nevreantail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/foxhc
name = "highlander zorren tail, colorable"
desc = ""
icon_state = "foxtail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/fennechc
name = "flatland zorren tail, colorable"
desc = ""
icon_state = "fentail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/armalishc
name = "armalis tail, colorable"
desc = ""
icon_state = "armalis_tail_humanoid_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/xenodronehc
name = "xenomorph drone tail, colorable"
desc = ""
icon_state = "xenos_drone_tail_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/xenosentinelhc
name = "xenomorph sentinel tail, colorable"
desc = ""
icon_state = "xenos_sentinel_tail_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/xenohunterhc
name = "xenomorph hunter tail, colorable"
desc = ""
icon_state = "xenos_hunter_tail_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/xenoqueenhc
name = "xenomorph queen tail, colorable"
desc = ""
icon_state = "xenos_queen_tail_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/monkeyhc
name = "monkey tail, colorable"
desc = ""
icon_state = "chimptail_hc_s"
do_colouration = 1
/datum/sprite_accessory/tail/special/seromitailhc
name = "seromi tail, colorable"
desc = ""
icon_state = "seromitail_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/seromitailfeatheredhc
name = "seromi tail w/ feathers, colorable"
desc = ""
icon_state = "seromitail_feathers_hc_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/special/vulpan
name = "vulpkanin, colorable"
desc = ""
icon_state = "vulptail_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/zenghu_taj
name = "Zeng-Hu Tajaran Synth tail"
desc = ""
icon_state = "zenghu_taj"
//Taurs moved to a separate file due to extra code around them
//Buggo Abdomens!
/datum/sprite_accessory/tail/buggo
name = "Bug abdomen, colorable"
desc = ""
icon_state = "buggo_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggobee
name = "Bug abdomen, bee top, dual-colorable"
desc = ""
icon_state = "buggo_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobee_markings"
/datum/sprite_accessory/tail/buggobeefull
name = "Bug abdomen, bee full, dual-colorable"
desc = ""
icon_state = "buggo_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobeefull_markings"
/datum/sprite_accessory/tail/buggounder
name = "Bug abdomen, underside, dual-colorable"
desc = ""
icon_state = "buggo_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggounder_markings"
/datum/sprite_accessory/tail/buggofirefly
name = "Bug abdomen, firefly, dual-colorable"
desc = ""
icon_state = "buggo_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofirefly_markings"
/datum/sprite_accessory/tail/buggofat
name = "Fat bug abdomen, colorable"
desc = ""
icon_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggofatbee
name = "Fat bug abdomen, bee top, dual-colorable"
desc = ""
icon_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatbee_markings"
/datum/sprite_accessory/tail/buggofatbeefull
name = "Fat bug abdomen, bee full, dual-colorable"
desc = ""
icon_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatbeefull_markings"
/datum/sprite_accessory/tail/buggofatunder
name = "Fat bug abdomen, underside, dual-colorable"
desc = ""
icon_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatunder_markings"
/datum/sprite_accessory/tail/buggofatfirefly
name = "Fat bug abdomen, firefly, dual-colorable"
desc = ""
icon_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatfirefly_markings"
/datum/sprite_accessory/tail/buggowag
name = "Bug abdomen, colorable, vwag change"
desc = ""
icon_state = "buggo_s"
ani_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggobeewag
name = "Bug abdomen, bee top, dual color, vwag"
desc = ""
icon_state = "buggo_s"
ani_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobee_markings"
extra_overlay_w = "buggofatbee_markings"
/datum/sprite_accessory/tail/buggobeefullwag
name = "Bug abdomen, bee full, dual color, vwag"
desc = ""
icon_state = "buggo_s"
ani_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobeefull_markings"
extra_overlay_w = "buggofatbeefull_markings"
/datum/sprite_accessory/tail/buggounderwag
name = "Bug abdomen, underside, dual color, vwag"
desc = ""
icon_state = "buggo_s"
ani_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggounder_markings"
extra_overlay_w = "buggofatunder_markings"
/datum/sprite_accessory/tail/buggofireflywag
name = "Bug abdomen, firefly, dual color, vwag"
desc = ""
icon_state = "buggo_s"
ani_state = "buggofat_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofirefly_markings"
extra_overlay_w = "buggofatfirefly_markings"
//Vass buggo variants!
/datum/sprite_accessory/tail/buggovass
name = "Bug abdomen, vass, colorable"
desc = ""
icon_state = "buggo_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggovassbee
name = "Bug abdomen, bee top, dc, vass"
desc = ""
icon_state = "buggo_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobee_vass_markings"
/datum/sprite_accessory/tail/buggovassbeefull
name = "Bug abdomen, bee full, dc, vass"
desc = ""
icon_state = "buggo_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobeefull_vass_markings"
/datum/sprite_accessory/tail/buggovassunder
name = "Bug abdomen, underside, dc, vass"
desc = ""
icon_state = "buggo_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggounder_vass_markings"
/datum/sprite_accessory/tail/buggovassfirefly
name = "Bug abdomen, firefly, dc, vass"
desc = ""
icon_state = "buggo_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofirefly_vass_markings"
/datum/sprite_accessory/tail/buggovassfat
name = "Fat bug abdomen, vass, colorable"
desc = ""
icon_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggovassfatbee
name = "Fat bug abdomen, bee top, dc, vass"
desc = ""
icon_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatbee_vass_markings"
/datum/sprite_accessory/tail/buggovassfatbeefull
name = "Fat bug abdomen, bee full, dc, vass"
desc = ""
icon_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatbeefull_vass_markings"
/datum/sprite_accessory/tail/buggovassfatunder
name = "Fat bug abdomen, underside, dc, vass"
desc = ""
icon_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatunder_vass_markings"
/datum/sprite_accessory/tail/buggovassfatfirefly
name = "Fat bug abdomen, firefly, dc, vass"
desc = ""
icon_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofatfirefly_vass_markings"
/datum/sprite_accessory/tail/buggovasswag
name = "Bug abdomen, vass, colorable, vwag change"
desc = ""
icon_state = "buggo_vass_s"
ani_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/buggovassbeewag
name = "Bug abdomen, bee top, dc, vass, vwag"
desc = ""
icon_state = "buggo_vass_s"
ani_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobee_vass_markings"
extra_overlay_w = "buggofatbee_vass_markings"
/datum/sprite_accessory/tail/buggovassbeefullwag
name = "Bug abdomen, bee full, dc, vass, vwag"
desc = ""
icon_state = "buggo_vass_s"
ani_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggobeefull_vass_markings"
extra_overlay_w = "buggofatbeefull_vass_markings"
/datum/sprite_accessory/tail/buggovassunderwag
name = "Bug abdomen, underside, dc, vass, vwag"
desc = ""
icon_state = "buggo_vass_s"
ani_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggounder_vass_markings"
extra_overlay_w = "buggofatunder_vass_markings"
/datum/sprite_accessory/tail/buggovassfireflywag
name = "Bug abdomen, firefly, dc, vass, vwag"
desc = ""
icon_state = "buggo_vass_s"
ani_state = "buggofat_vass_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "buggofirefly_vass_markings"
extra_overlay_w = "buggofatfirefly_vass_markings"
/datum/sprite_accessory/tail/tail_smooth
name = "Smooth Lizard Tail, colorable"
desc = ""
icon_state = "tail_smooth"
ani_state = "tail_smooth_w"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/triplekitsune_colorable
name = "Kitsune 3 tails, colorable"
desc = ""
icon_state = "triplekitsune"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "triplekitsune_tips"
/datum/sprite_accessory/tail/ninekitsune_colorable
name = "Kitsune 9 tails, colorable"
desc = ""
icon_state = "ninekitsune"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "ninekitsune-tips"
/datum/sprite_accessory/tail/shadekin_short
name = "Shadekin Short Tail, colorable"
desc = ""
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
name = "Ward-Takahashi Tail"
desc = ""
icon_state = "wardtakahashi_vulp"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/tail/wartacosushi_tail_dc
name = "Ward-Takahashi Tail, dual-color"
desc = ""
icon_state = "wardtakahashi_vulp_dc"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "wardtakahashi_vulp_dc_mark"
@@ -0,0 +1,349 @@
/datum/riding/taur
keytype = /obj/item/weapon/material/twohanded/riding_crop // Crack!
nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called.
only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
/datum/riding/taur/handle_vehicle_layer()
if(ridden.has_buckled_mobs())
ridden.layer = initial(ridden.layer)
else
var/mob/living/L = ridden
if(!(istype(L) && (L.status_flags & HIDING)))
ridden.layer = initial(ridden.layer)
/datum/riding/taur/ride_check(mob/living/M)
var/mob/living/L = ridden
if(L.stat)
force_dismount(M)
return FALSE
return TRUE
/datum/riding/taur/force_dismount(mob/M)
. = ..()
ridden.visible_message("<span class='notice'>[M] stops riding [ridden]!</span>")
//Hoooo boy.
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
var/mob/living/L = ridden
var/scale_x = L.icon_scale_x
var/scale_y = L.icon_scale_y
var/list/values = list(
"[NORTH]" = list(0, 8*scale_y, ABOVE_MOB_LAYER),
"[SOUTH]" = list(0, 8*scale_y, BELOW_MOB_LAYER),
"[EAST]" = list(-10*scale_x, 8*scale_y, ABOVE_MOB_LAYER),
"[WEST]" = list(10*scale_x, 8*scale_y, ABOVE_MOB_LAYER))
return values
//Human overrides for taur riding
/mob/living/carbon/human
max_buckled_mobs = 1 //Yeehaw
can_buckle = TRUE
buckle_movable = TRUE
buckle_lying = FALSE
/mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE)
if(forced)
return ..() // Skip our checks
if(!isTaurTail(tail_style))
return FALSE
else
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
if(!taurtype.can_ride)
return FALSE
if(lying)
return FALSE
if(!ishuman(M))
return FALSE
if(M in buckled_mobs)
return FALSE
// if(M.size_multiplier > size_multiplier * 1.2)
// to_chat(M,"<span class='warning'>This isn't a pony show! You need to be bigger for them to ride.</span>")
// return FALSE
if(M.loc != src.loc)
if(M.Adjacent(src))
M.forceMove(get_turf(src))
var/mob/living/carbon/human/H = M
if(isTaurTail(H.tail_style))
to_chat(src,"<span class='warning'>Too many legs. TOO MANY LEGS!!</span>")
return FALSE
. = ..()
if(.)
buckled_mobs[M] = "riding"
/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use.
return
/mob/living/carbon/human/proc/taur_mount(var/mob/living/M in living_mobs(1))
set name = "Taur Mount/Dismount"
set category = "Abilities"
set desc = "Let people ride on you."
if(LAZYLEN(buckled_mobs))
var/datum/riding/R = riding_datum
for(var/rider in buckled_mobs)
R.force_dismount(rider)
return
if (stat != CONSCIOUS)
return
if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled)
return
if(buckle_mob(M))
visible_message("<span class='notice'>[M] starts riding [name]!</span>")
/mob/living/carbon/human/attack_hand(mob/user as mob)
if(LAZYLEN(buckled_mobs))
//We're getting off!
if(user in buckled_mobs)
riding_datum.force_dismount(user)
//We're kicking everyone off!
if(user == src)
for(var/rider in buckled_mobs)
riding_datum.force_dismount(rider)
else
. = ..()
/*
////////////////////////////
/ =--------------------= /
/ == Taur Definitions == /
/ =--------------------= /
////////////////////////////
*/
// Taur sprites are now a subtype of tail since they are mutually exclusive anyway.
/datum/sprite_accessory/tail/taur
name = "You should not see this..."
icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi'
do_colouration = 1 // Yes color, using tail color
color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY
var/icon/suit_sprites = null //File for suit sprites, if any.
var/icon/under_sprites = null
var/icon_sprite_tag // This is where we put stuff like _Horse, so we can assign icons easier.
var/can_ride = FALSE //whether we're real rideable taur or just in that category.
hide_body_parts = list(BP_L_LEG, BP_L_FOOT, BP_R_LEG, BP_R_FOOT) //Exclude pelvis just in case.
clip_mask_icon = 'icons/mob/human_races/sprite_accessories/taurs.dmi'
clip_mask_state = "taur_clip_mask_def" //Used to clip off the lower part of suits & uniforms.
// Species-unique long tails/taurhalves
// Tails/taurhalves for everyone
/datum/sprite_accessory/tail/taur/wolf
name = "Wolf (Taur)"
icon_state = "wolf_s"
under_sprites = 'icons/mob/taursuits_wolf.dmi'
suit_sprites = 'icons/mob/taursuits_wolf.dmi'
icon_sprite_tag = "wolf"
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
/datum/sprite_accessory/tail/taur/fatwolf
name = "Fat Wolf (Taur)"
icon_state = "fatwolf_s"
icon_sprite_tag = "wolf" //This could be modified later.
/datum/sprite_accessory/tail/taur/wolf/wolf_2c
name = "Wolf dual-color (Taur)"
icon_state = "wolf_s"
extra_overlay = "wolf_markings"
//icon_sprite_tag = "wolf2c"
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
/datum/sprite_accessory/tail/taur/wolf/fatwolf_2c
name = "Fat Wolf dual-color (Taur)"
icon_state = "fatwolf_s"
extra_overlay = "fatwolf_markings"
//icon_sprite_tag = "fatwolf2c"
/datum/sprite_accessory/tail/taur/wolf/synthwolf
name = "SynthWolf dual-color (Taur)"
icon_state = "synthwolf_s"
extra_overlay = "synthwolf_markings"
//icon_sprite_tag = "synthwolf"
/datum/sprite_accessory/tail/taur/naga
name = "Naga (Taur)"
icon_state = "naga_s"
suit_sprites = 'icons/mob/taursuits_naga.dmi'
//icon_sprite_tag = "naga"
/datum/sprite_accessory/tail/taur/naga/naga_2c
name = "Naga dual-color (Taur)"
icon_state = "naga_s"
extra_overlay = "naga_markings"
//icon_sprite_tag = "naga2c"
/datum/sprite_accessory/tail/taur/horse
name = "Horse (Taur)"
icon_state = "horse_s"
under_sprites = 'icons/mob/taursuits_horse.dmi'
suit_sprites = 'icons/mob/taursuits_horse.dmi'
icon_sprite_tag = "horse"
/datum/sprite_accessory/tail/taur/horse/synthhorse
name = "SynthHorse dual-color (Taur)"
icon_state = "synthhorse_s"
extra_overlay = "synthhorse_markings"
//icon_sprite_tag = "synthhorse"
/datum/sprite_accessory/tail/taur/cow
name = "Cow (Taur)"
icon_state = "cow_s"
suit_sprites = 'icons/mob/taursuits_cow.dmi'
icon_sprite_tag = "cow"
/datum/sprite_accessory/tail/taur/deer
name = "Deer dual-color (Taur)"
icon_state = "deer_s"
extra_overlay = "deer_markings"
suit_sprites = 'icons/mob/taursuits_deer.dmi'
icon_sprite_tag = "deer"
/datum/sprite_accessory/tail/taur/lizard
name = "Lizard (Taur)"
icon_state = "lizard_s"
suit_sprites = 'icons/mob/taursuits_lizard.dmi'
icon_sprite_tag = "lizard"
/datum/sprite_accessory/tail/taur/lizard/lizard_2c
name = "Lizard dual-color (Taur)"
icon_state = "lizard_s"
extra_overlay = "lizard_markings"
//icon_sprite_tag = "lizard2c"
/datum/sprite_accessory/tail/taur/lizard/synthlizard
name = "SynthLizard dual-color (Taur)"
icon_state = "synthlizard_s"
extra_overlay = "synthlizard_markings"
//icon_sprite_tag = "synthlizard"
/datum/sprite_accessory/tail/taur/spider
name = "Spider (Taur)"
icon_state = "spider_s"
suit_sprites = 'icons/mob/taursuits_spider.dmi'
icon_sprite_tag = "spider"
/datum/sprite_accessory/tail/taur/tents
name = "Tentacles (Taur)"
icon_state = "tent_s"
icon_sprite_tag = "tentacle"
can_ride = 0
/datum/sprite_accessory/tail/taur/feline
name = "Feline (Taur)"
icon_state = "feline_s"
suit_sprites = 'icons/mob/taursuits_feline.dmi'
icon_sprite_tag = "feline"
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
/datum/sprite_accessory/tail/taur/fatfeline
name = "Fat Feline (Taur)"
icon_state = "fatfeline_s"
//icon_sprite_tag = "fatfeline"
/datum/sprite_accessory/tail/taur/fatfeline_wag
name = "Fat Feline (Taur) (vwag)"
icon_state = "fatfeline_s"
ani_state = "fatfeline_w"
/datum/sprite_accessory/tail/taur/feline/feline_2c
name = "Feline dual-color (Taur)"
icon_state = "feline_s"
extra_overlay = "feline_markings"
//icon_sprite_tag = "feline2c"
//TFF 22/11/19 - CHOMPStation port of fat taur sprites
/datum/sprite_accessory/tail/taur/feline/fatfeline_2c
name = "Fat Feline dual-color (Taur)"
icon_state = "fatfeline_s"
extra_overlay = "fatfeline_markings"
//icon_sprite_tag = "fatfeline2c"
/datum/sprite_accessory/tail/taur/feline/synthfeline
name = "SynthFeline dual-color (Taur)"
icon_state = "synthfeline_s"
extra_overlay = "synthfeline_markings"
//icon_sprite_tag = "synthfeline"
/datum/sprite_accessory/tail/taur/slug
name = "Slug (Taur)"
icon_state = "slug_s"
suit_sprites = 'icons/mob/taursuits_slug.dmi'
icon_sprite_tag = "slug"
/datum/sprite_accessory/tail/taur/frog
name = "Frog (Taur)"
icon_state = "frog_s"
icon_sprite_tag = "frog"
/datum/sprite_accessory/tail/taur/thicktentacles
name = "Thick Tentacles (Taur)"
icon_state = "tentacle_s"
can_ride = 0
icon_sprite_tag = "thick_tentacles"
/datum/sprite_accessory/tail/taur/drake //Enabling on request, no suit compatibility but then again see 2 above.
name = "Drake (Taur)"
icon_state = "drake_s"
extra_overlay = "drake_markings"
suit_sprites = 'icons/mob/taursuits_drake.dmi'
icon_sprite_tag = "drake"
/datum/sprite_accessory/tail/taur/otie
name = "Otie (Taur)"
icon_state = "otie_s"
extra_overlay = "otie_markings"
suit_sprites = 'icons/mob/taursuits_otie.dmi'
icon_sprite_tag = "otie"
/datum/sprite_accessory/tail/taur/alraune/alraune_2c
name = "Alraune (dual color)"
icon_state = "alraunecolor_s"
ani_state = "alraunecolor_closed_s"
ckeys_allowed = null
do_colouration = 1
extra_overlay = "alraunecolor_markings"
extra_overlay_w = "alraunecolor_closed_markings"
clip_mask_state = "taur_clip_mask_alraune"
icon_sprite_tag = "alraune"
/datum/sprite_accessory/tail/taur/wasp
name = "Wasp (dual color)"
icon_state = "wasp_s"
extra_overlay = "wasp_markings"
clip_mask_state = "taur_clip_mask_wasp"
icon_sprite_tag = "wasp"
/datum/sprite_accessory/tail/taur/mermaid
name = "Mermaid (Taur)"
icon_state = "mermaid_s"
can_ride = 0
icon_sprite_tag = "mermaid"
/datum/sprite_accessory/tail/taur/shadekin_tail
name = "Shadekin Tail"
icon_state = "shadekin_s"
can_ride = 0
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
name = "Shadekin Tail (dual color)"
extra_overlay = "shadekin_markings"
/datum/sprite_accessory/tail/taur/shadekin_tail/shadekin_tail_long
name = "Shadekin Long Tail"
icon_state = "shadekin_long_s"
@@ -1,117 +1,3 @@
/datum/riding/taur
keytype = /obj/item/weapon/material/twohanded/fluff/riding_crop // Crack!
nonhuman_key_exemption = FALSE // If true, nonhumans who can't hold keys don't need them, like borgs and simplemobs.
key_name = "a riding crop" // What the 'keys' for the thing being rided on would be called.
only_one_driver = TRUE // If true, only the person in 'front' (first on list of riding mobs) can drive.
/datum/riding/taur/handle_vehicle_layer()
if(ridden.has_buckled_mobs())
ridden.layer = initial(ridden.layer)
else
var/mob/living/L = ridden
if(!(istype(L) && (L.status_flags & HIDING)))
ridden.layer = initial(ridden.layer)
/datum/riding/taur/ride_check(mob/living/M)
var/mob/living/L = ridden
if(L.stat)
force_dismount(M)
return FALSE
return TRUE
/datum/riding/taur/force_dismount(mob/M)
. = ..()
ridden.visible_message("<span class='notice'>[M] stops riding [ridden]!</span>")
//Hoooo boy.
/datum/riding/taur/get_offsets(pass_index) // list(dir = x, y, layer)
var/mob/living/L = ridden
var/scale = L.size_multiplier
var/list/values = list(
"[NORTH]" = list(0, 8*scale, ABOVE_MOB_LAYER),
"[SOUTH]" = list(0, 8*scale, BELOW_MOB_LAYER),
"[EAST]" = list(-10*scale, 8*scale, ABOVE_MOB_LAYER),
"[WEST]" = list(10*scale, 8*scale, ABOVE_MOB_LAYER))
return values
//Human overrides for taur riding
/mob/living/carbon/human
max_buckled_mobs = 1 //Yeehaw
can_buckle = TRUE
buckle_movable = TRUE
buckle_lying = FALSE
/mob/living/carbon/human/buckle_mob(mob/living/M, forced = FALSE, check_loc = TRUE)
if(forced)
return ..() // Skip our checks
if(!isTaurTail(tail_style))
return FALSE
else
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
if(!taurtype.can_ride)
return FALSE
if(lying)
return FALSE
if(!ishuman(M))
return FALSE
if(M in buckled_mobs)
return FALSE
if(M.size_multiplier > size_multiplier * 1.2)
to_chat(M,"<span class='warning'>This isn't a pony show! You need to be bigger for them to ride.</span>")
return FALSE
if(M.loc != src.loc)
if(M.Adjacent(src))
M.forceMove(get_turf(src))
var/mob/living/carbon/human/H = M
if(isTaurTail(H.tail_style))
var/datum/sprite_accessory/tail/taur/ridertype = H.tail_style
if(ridertype.can_ride)
if(istype(ridertype, /datum/sprite_accessory/tail/taur/naga) || istype(ridertype, /datum/sprite_accessory/tail/taur/slug))
to_chat(src,"<span class='warning'>Too few legs. TOO FEW LEGS!!</span>")
return FALSE
to_chat(src,"<span class='warning'>Too many legs. TOO MANY LEGS!!</span>")
return FALSE
. = ..()
if(.)
buckled_mobs[M] = "riding"
/mob/living/carbon/human/MouseDrop_T(mob/living/M, mob/living/user) //Prevention for forced relocation caused by can_buckle. Base proc has no other use.
return
/mob/living/carbon/human/proc/taur_mount(var/mob/living/M in living_mobs(1))
set name = "Taur Mount/Dismount"
set category = "Abilities"
set desc = "Let people ride on you."
if(LAZYLEN(buckled_mobs))
var/datum/riding/R = riding_datum
for(var/rider in buckled_mobs)
R.force_dismount(rider)
return
if (stat != CONSCIOUS)
return
if(!can_buckle || !istype(M) || !M.Adjacent(src) || M.buckled)
return
if(buckle_mob(M))
visible_message("<span class='notice'>[M] starts riding [name]!</span>")
/mob/living/carbon/human/attack_hand(mob/user as mob)
if(LAZYLEN(buckled_mobs))
//We're getting off!
if(user in buckled_mobs)
riding_datum.force_dismount(user)
//We're kicking everyone off!
if(user == src)
for(var/rider in buckled_mobs)
riding_datum.force_dismount(rider)
else
. = ..()
/*
////////////////////////////
/ =--------------------= /
@@ -128,12 +14,7 @@
do_colouration = 1 // Yes color, using tail color
color_blend_mode = ICON_MULTIPLY // The sprites for taurs are designed for ICON_MULTIPLY
var/icon/suit_sprites = null //File for suit sprites, if any.
var/icon/under_sprites = null
var/icon_sprite_tag // This is where we put stuff like _Horse, so we can assign icons easier.
var/can_ride = 1 //whether we're real rideable taur or just in that category
can_ride = TRUE //whether we're real rideable taur or just in that category
//Could do nested lists but it started becoming a nightmare. It'd be more fun for lookups of a_intent and m_intent, but then subtypes need to
//duplicate all the messages, and it starts getting awkward. These are singletons, anyway!
@@ -603,739 +603,29 @@
species_allowed = list(SPECIES_VULPKANIN)
gender = NEUTER
//VOREStation Body Markings and Overrides
//Reminder: BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD
/datum/sprite_accessory/marking //Override for base markings
color_blend_mode = ICON_ADD
/datum/sprite_accessory/marking/vr
icon = 'icons/mob/human_races/markings_vr.dmi'
vulp_belly
name = "belly fur (Vulp)"
icon_state = "vulp_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
vulp_fullbelly
name = "full belly fur (Vulp)"
icon_state = "vulp_fullbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
vulp_crest
name = "belly crest (Vulp)"
icon_state = "vulp_crest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
vulp_nose
name = "nose (Vulp)"
icon_state = "vulp_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
vulp_short_nose
name = "nose, short (Vulp)"
icon_state = "vulp_short_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
snoutstripe
name = "snout stripe (Vulp)"
icon_state = "snoutstripe"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
vulp_face
name = "face (Vulp)"
icon_state = "vulp_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
vulp_facealt
name = "face, alt. (Vulp)"
icon_state = "vulp_facealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
vulp_earsface
name = "ears and face (Vulp)"
icon_state = "vulp_earsface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
vulp_all
name = "all head highlights (Vulp)"
icon_state = "vulp_all"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
sergal_full
name = "Sergal Markings"
icon_state = "sergal_full"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
sergal_full_female
name = "Sergal Markings (Female)"
icon_state = "sergal_full_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
species_allowed = list("Sergal")
monoeye
name = "Monoeye"
icon_state = "monoeye"
body_parts = list(BP_HEAD)
spidereyes
name = "Spider Eyes"
icon_state = "spidereyes"
body_parts = list(BP_HEAD)
sergaleyes
name = "Sergal Eyes"
icon_state = "eyes_sergal"
body_parts = list(BP_HEAD)
closedeyes
name = "Closed Eyes"
icon_state = "eyes_closed"
body_parts = list(BP_HEAD)
brows
name = "Eyebrows"
icon_state = "brows"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
nevrean_female
name = "Female Nevrean beak"
icon_state = "nevrean_f"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = FEMALE
nevrean_male
name = "Male Nevrean beak"
icon_state = "nevrean_m"
body_parts = list(BP_HEAD)
color_blend_mode = ICON_MULTIPLY
gender = MALE
spots
name = "Spots"
icon_state = "spots"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
shaggy_mane
name = "Shaggy mane/feathers"
icon_state = "shaggy"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
jagged_teeth
name = "Jagged teeth"
icon_state = "jagged"
body_parts = list(BP_HEAD)
blank_face
name = "Blank round face (use with monster mouth)"
icon_state = "blankface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
monster_mouth
name = "Monster mouth"
icon_state = "monster"
body_parts = list(BP_HEAD)
saber_teeth
name = "Saber teeth"
icon_state = "saber"
body_parts = list(BP_HEAD)
fangs
name = "Fangs"
icon_state = "fangs"
body_parts = list(BP_HEAD)
tusks
name = "Tusks"
icon_state = "tusks"
body_parts = list(BP_HEAD)
otie_face
name = "Otie face"
icon_state = "otieface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
otie_nose
name = "Otie nose"
icon_state = "otie_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
otienose_lite
name = "Short otie nose"
icon_state = "otienose_lite"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
backstripes
name = "Back stripes"
icon_state = "otiestripes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_HEAD)
belly_butt
name = "Belly and butt"
icon_state = "bellyandbutt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
fingers_toes
name = "Fingers and toes"
icon_state = "fingerstoes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
otie_socks
name = "Fingerless socks"
icon_state = "otiesocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
corvid_beak
name = "Corvid beak"
icon_state = "corvidbeak"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
corvid_belly
name = "Corvid belly"
icon_state = "corvidbelly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO,BP_HEAD)
cow_body
name = "Cow markings"
icon_state = "cowbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
cow_nose
name = "Cow nose"
icon_state = "cownose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
zmask
name = "Eye mask"
icon_state = "zmask"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
zbody
name = "Thick jagged stripes"
icon_state = "zbody"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_GROIN,BP_TORSO)
znose
name = "Jagged snout"
icon_state = "znose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
otter_nose
name = "Otter nose"
icon_state = "otternose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
otter_face
name = "Otter face"
icon_state = "otterface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
deer_face
name = "Deer face"
icon_state = "deerface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
sharkface
name = "Akula snout"
icon_state = "sharkface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
sheppy_face
name = "Shepherd snout"
icon_state = "shepface"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
sheppy_back
name = "Shepherd back"
icon_state = "shepback"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
zorren_belly_male
name = "Zorren Male Torso"
icon_state = "zorren_belly"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
zorren_belly_female
name = "Zorren Female Torso"
icon_state = "zorren_belly_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO,BP_GROIN)
zorren_back_patch
name = "Zorren Back Patch"
icon_state = "zorren_backpatch"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
zorren_face_male
name = "Zorren Male Face"
icon_state = "zorren_face"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
zorren_face_female
name = "Zorren Female Face"
icon_state = "zorren_face_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
zorren_muzzle_male
name = "Zorren Male Muzzle"
icon_state = "zorren_muzzle"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = MALE
zorren_muzzle_female
name = "Zorren Female Muzzle"
icon_state = "zorren_muzzle_female"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
gender = FEMALE
zorren_socks
name = "Zorren Socks"
icon_state = "zorren_socks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
zorren_longsocks
name = "Zorren Longsocks"
icon_state = "zorren_longsocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
tesh_feathers
name = "Teshari Feathers"
icon_state = "tesh-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
harpy_feathers
name = "Rapala leg Feather"
icon_state = "harpy-feathers"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG)
harpy_legs
name = "Rapala leg coloring"
icon_state = "harpy-leg"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
chooves
name = "Cloven hooves"
icon_state = "chooves"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
alurane
name = "Alurane Body"
icon_state = "alurane"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
ckeys_allowed = list("natje")
body_tone
name = "Body toning (for emergency contrast loss)"
icon_state = "btone"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
gloss
name = "Full body gloss"
icon_state = "gloss"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
eboop_panels
name = "Eggnerd FBP panels"
icon_state = "eboop"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
osocks_rarm
name = "Modular Longsock (right arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_ARM,BP_R_HAND)
osocks_larm
name = "Modular Longsock (left arm)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_ARM,BP_L_HAND)
osocks_rleg
name = "Modular Longsock (right leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_FOOT,BP_R_LEG)
osocks_lleg
name = "Modular Longsock (left leg)"
icon_state = "osocks"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_L_LEG)
animeeyesinner
name = "Anime Eyes Inner"
icon_state = "animeeyesinner"
body_parts = list(BP_HEAD)
animeeyesouter
name = "Anime Eyes Outer"
icon_state = "animeeyesouter"
body_parts = list(BP_HEAD)
panda_eye_marks
name = "Panda Eye Markings"
icon_state = "eyes_panda"
body_parts = list(BP_HEAD)
species_allowed = list("Human")
catwomantorso
name = "Catwoman chest stripes"
icon_state = "catwomanchest"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_TORSO)
catwomangroin
name = "Catwoman groin stripes"
icon_state = "catwomangroin"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN)
catwoman_rleg
name = "Catwoman right leg stripes"
icon_state = "catwomanright"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_R_LEG)
catwoman_lleg
name = "Catwoman left leg stripes"
icon_state = "catwomanleft"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG)
teshi_small_feathers
name = "Teshari small wingfeathers"
icon_state = "teshi_sf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND,BP_TORSO)
spirit_lights
name = "Ward - Spirit FBP Lights"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_HEAD)
spirit_lights_body
name = "Ward - Spirit FBP Lights (body)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO)
spirit_lights_head
name = "Ward - Spirit FBP Lights (head)"
icon_state = "lights"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
spirit_panels
name = "Ward - Spirit FBP Panels"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
spirit_panels_body
name = "Ward - Spirit FBP Panels (body)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO)
spirit_panels_head
name = "Ward - Spirit FBP Panels (head)"
icon_state = "panels"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
tentacle_head
name = "Squid Head"
icon_state = "tentaclehead"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
tentacle_mouth
name = "Tentacle Mouth"
icon_state = "tentaclemouth"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
rosette
name = "Rosettes"
icon_state = "rosette"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_GROIN,BP_TORSO,BP_HEAD)
werewolf_nose
name = "Werewolf nose"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf_nose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_face
name = "Werewolf face"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_belly
name = "Werewolf belly"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_GROIN,BP_TORSO)
species_allowed = list(SPECIES_WEREBEAST)
werewolf_socks
name = "Werewolf socks"
icon = 'icons/mob/species/werebeast/werebeast_markings.dmi'
icon_state = "werewolf"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND)
species_allowed = list(SPECIES_WEREBEAST)
shadekin_snoot
name = "Shadekin Snoot"
icon_state = "shadekin-snoot"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW, SPECIES_SHADEKIN_YW) //YW edits
taj_nose_alt
name = "Nose Color, alt. (Taj)"
icon_state = "taj_nosealt"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
talons
name = "Talons"
icon_state = "talons"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG)
claws
name = "Claws"
icon_state = "claws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_HAND,BP_R_HAND)
equine_snout //Why the long face? Works best with sergal bodytype.
name = "Equine Snout"
icon_state = "donkey"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
equine_nose
name = "Equine Nose"
icon_state = "dnose"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
bee_stripes
name = "bee stripes"
icon_state = "beestripes"
body_parts = list(BP_TORSO,BP_GROIN)
vas_toes
name = "Bug Paws (Vasilissan)"
icon_state = "vas_toes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT)
//CitRP stuff
vox_alt
name = "Vox Alternate"
icon_state = "bay_vox"
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_VOX)
vox_alt_eyes
name = "Alternate Vox Eyes"
icon_state = "bay_vox_eyes"
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_VOX)
c_beast_body
name = "Cyber Body"
icon_state = "c_beast_body"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_GROIN)
c_beast_plating
name = "Cyber Plating (Use w/ Cyber Body)"
icon_state = "c_beast_plating"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM)
c_beast_band
name = "Cyber Band (Use w/ Cybertech head)"
icon_state = "c_beast_band"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
c_beast_cheek_a
name = "Cyber Beast Cheeks A (Use A, B and C)"
icon_state = "c_beast_a"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
c_beast_cheek_b
name = "Cyber Beast Cheeks B (Use A, B and C)"
icon_state = "c_beast_b"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
c_beast_cheek_c
name = "Cyber Beast Cheeks C (Use A, B and C)"
icon_state = "c_beast_c"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
teshari_large_eyes
name = "Teshari large eyes"
icon_state = "teshlarge_eyes"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
teshari_coat
name = "Teshari coat"
icon_state = "tesh_coat"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_TORSO,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
teshari_pattern_male
name = "Teshari male pattern"
icon_state = "tesh-pattern-male"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
teshari_pattern_female
name = "Teshari female pattern"
icon_state = "tesh-pattern-fem"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_TORSO,BP_GROIN,BP_HEAD)
species_allowed = list(SPECIES_TESHARI)
body_parts = list(BP_L_FOOT,BP_R_FOOT)
voxscales
name = "Vox Scales"
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_HEAD)
voxclaws
name = "Vox Claws"
icon_state = "Voxclaws"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_HAND,BP_R_HAND)
voxbeak
name = "Vox Beak"
icon_state = "Voxscales"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathihood
name = "Cobra Hood"
icon_state = "unathihood"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathidoublehorns
name = "Double Unathi Horns"
icon_state = "unathidoublehorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathihorns
name = "Unathi Horns"
icon_state = "unathihorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathiramhorns
name = "Unathi Ram Horns"
icon_state = "unathiramhorns"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathishortspines
name = "Unathi Short Spines"
icon_state = "unathishortspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathilongspines
name = "Unathi Long Spines"
icon_state = "unathilongspines"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathishortfrills
name = "Unathi Short Frills"
icon_state = "unathishortfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
unathilongfrills
name = "Unathi Long Frills"
icon_state = "unathilongfrills"
color_blend_mode = ICON_MULTIPLY
body_parts = list(BP_HEAD)
/*
////////////////////////////
/ =--------------------= /
/ == Misc Definitions == /
/ =--------------------= /
////////////////////////////
*/
// Yes, I have to add all of this just to make some glowy hair.
// No, this isn't a character creation option, but... I guess in the future it could be, if anyone wants that?
/datum/sprite_accessory/hair_accessory
name = "You should not see this..."
icon = 'icons/mob/vore/hair_accessories_vr.dmi'
do_colouration = 0 // Set to 1 to blend (ICON_ADD) hair color
var/ignores_lighting = 0 // Whether or not this hair accessory will ignore lighting and glow in the dark.
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
var/desc = "You should not see this..."
/datum/sprite_accessory/hair_accessory/verie_hair_glow
name = "verie's hair glow"
desc = ""
icon_state = "verie_hair_glow"
ignores_lighting = 1
//ckeys_allowed = list("vitoras") // This probably won't come into play EVER but better safe than sorry
@@ -0,0 +1,152 @@
/*
////////////////////////////
/ =--------------------= /
/ == Wing Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/wing
name = "You should not see this..."
icon = 'icons/mob/human_races/sprite_accessories/wings.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
var/extra_overlay // Icon state of an additional overlay to blend in.
var/extra_overlay2 //Tertiary.
var/clothing_can_hide = 1 // If true, clothing with HIDETAIL hides it. If the clothing is bulky enough to hide a tail, it should also hide wings.
// var/show_species_tail = 1 // Just so // TODO - Seems not needed ~Leshana
var/desc = "You should not see this..."
var/ani_state // State when flapping/animated
var/extra_overlay_w // Flapping state for extra overlay
var/extra_overlay2_w
species_allowed = list(SPECIES_EVENT1, SPECIES_EVENT2, SPECIES_EVENT3)
/datum/sprite_accessory/wing/featheredlarge //Made by Natje!
name = "large feathered wings (colorable)"
desc = ""
icon_state = "feathered2"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/spider_legs //Not really /WINGS/ but they protrude from the back, kinda. Might as well have them here.
name = "spider legs"
desc = ""
icon_state = "spider-legs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/moth
name = "moth wings"
desc = ""
icon_state = "moth"
/datum/sprite_accessory/wing/mothc
name = "moth wings, colorable"
desc = ""
icon_state = "moth"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/dragonfly
name = "dragonfly"
desc = ""
icon_state = "dragonfly"
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/feathered
name = "feathered wings, colorable"
desc = ""
icon_state = "feathered"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/feathered_medium
name = "medium feathered wings, colorable" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys.
desc = ""
icon_state = "feathered3"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/bat_black
name = "bat wings, black"
desc = ""
icon_state = "bat-black"
/datum/sprite_accessory/wing/bat_color
name = "bat wings, colorable"
desc = ""
icon_state = "bat-color"
do_colouration = 1
/datum/sprite_accessory/wing/bat_red
name = "bat wings, red"
desc = ""
icon_state = "bat-red"
/datum/sprite_accessory/wing/harpywings
name = "harpy wings, colorable"
desc = ""
icon_state = "harpywings"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/feathered
name = "feathered wings, colorable"
desc = ""
icon_state = "feathered"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/beewings
name = "bee wings"
desc = ""
icon_state = "beewings"
/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings?
name = "gazer eyestalks"
desc = ""
icon_state = "liquidfirefly-eyestalks"
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
/datum/sprite_accessory/wing/moth_full
name = "moth antenna and wings"
desc = ""
icon_state = "moth_full"
/datum/sprite_accessory/wing/moth_full_gray
name = "moth antenna and wings, colorable"
desc = ""
icon_state = "moth_full_gray"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/snag
name = "xenomorph backplate"
desc = ""
icon_state = "snag-backplate"
/datum/sprite_accessory/wing/sepulchre_c_yw
name = "demon wings (colorable)"
desc = ""
icon_state = "sepulchre_wingsc"
do_colouration = 1
/datum/sprite_accessory/wing/cyberdragon
name = "Cyber dragon wing (colorable)"
desc = ""
icon_state = "cyberdragon_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/cyberdragon_red
name = "Cyber dragon wing (red)"
desc = ""
icon_state = "cyberdragon_red_s"
do_colouration = 0
/datum/sprite_accessory/wing/cyberdoe
name = "Cyber doe wing"
desc = ""
icon_state = "cyberdoe_s"
do_colouration = 0
@@ -0,0 +1,227 @@
/*
////////////////////////////
/ =--------------------= /
/ == Wing Definitions == /
/ =--------------------= /
////////////////////////////
*/
/datum/sprite_accessory/wing
name = "You should not see this..."
icon = 'icons/mob/vore/wings_vr.dmi'
do_colouration = 0 //Set to 1 to enable coloration using the tail color.
species_allowed = list(SPECIES_HUMAN, SPECIES_SKRELL, SPECIES_UNATHI, SPECIES_TAJ, SPECIES_TESHARI, SPECIES_NEVREAN, SPECIES_AKULA, SPECIES_SERGAL, SPECIES_FENNEC, SPECIES_ZORREN_HIGH, SPECIES_VULPKANIN, SPECIES_XENOCHIMERA, SPECIES_XENOHYBRID, SPECIES_VASILISSAN, SPECIES_RAPALA, SPECIES_PROTEAN, SPECIES_ALRAUNE, SPECIES_WEREBEAST, SPECIES_SHADEKIN, SPECIES_SHADEKIN_CREW) //This lets all races use
color_blend_mode = ICON_ADD // Only appliciable if do_coloration = 1
/datum/sprite_accessory/wing/shock //Unable to split the tail from the wings in the sprite, so let's just classify it as wings.
name = "pharoah hound tail (Shock Diamond)"
desc = ""
icon_state = "shock"
ckeys_allowed = list("icowom")
/datum/sprite_accessory/wing/featheredlarge //Made by Natje!
name = "large feathered wings (colorable)"
desc = ""
icon_state = "feathered2"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/spider_legs //Not really /WINGS/ but they protrude from the back, kinda. Might as well have them here.
name = "spider legs"
desc = ""
icon_state = "spider-legs"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/moth
name = "moth wings"
desc = ""
icon_state = "moth"
/datum/sprite_accessory/wing/mothc
name = "moth wings, colorable"
desc = ""
icon_state = "moth"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/dragonfly
name = "dragonfly"
desc = ""
icon_state = "dragonfly"
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/citheroniamoth
name = "citheronia wings"
desc = ""
icon_state = "citheronia_wings"
ckeys_allowed = list("kira72")
/datum/sprite_accessory/wing/feathered
name = "feathered wings, colorable"
desc = ""
icon_state = "feathered"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/feathered_medium
name = "medium feathered wings, colorable" // Keekenox made these feathery things with a little bit more shape to them than the other wings. They are medium sized wing boys.
desc = ""
icon_state = "feathered3"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/bat_black
name = "bat wings, black"
desc = ""
icon_state = "bat-black"
/datum/sprite_accessory/wing/bat_color
name = "bat wings, colorable"
desc = ""
icon_state = "bat-color"
do_colouration = 1
/datum/sprite_accessory/wing/bat_red
name = "bat wings, red"
desc = ""
icon_state = "bat-red"
/datum/sprite_accessory/wing/harpywings
name = "harpy wings, colorable"
desc = ""
icon_state = "harpywings"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/harpywings_alt
name = "harpy wings alt, archeopteryx"
desc = ""
icon_state = "harpywings_alt"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "harpywings_altmarkings"
/datum/sprite_accessory/wing/harpywings_alt_neckfur
name = "harpy wings alt, archeopteryx & neckfur"
desc = ""
icon_state = "harpywings_alt"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "harpywings_altmarkings"
extra_overlay2 = "neckfur"
/datum/sprite_accessory/wing/harpywings_bat
name = "harpy wings, bat"
desc = ""
icon_state = "harpywings_bat"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "harpywings_batmarkings"
/datum/sprite_accessory/wing/harpywings_bat_neckfur
name = "harpy wings, bat & neckfur"
desc = ""
icon_state = "harpywings_bat"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "harpywings_batmarkings"
extra_overlay2 = "neckfur"
/datum/sprite_accessory/wing/neckfur
name = "neck fur"
desc = ""
icon_state = "neckfur"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/feathered
name = "feathered wings, colorable"
desc = ""
icon_state = "feathered"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/beewings
name = "bee wings"
desc = ""
icon_state = "beewings"
/datum/sprite_accessory/wing/sepulchre
name = "demon wings (Sepulchre)"
desc = ""
icon_state = "sepulchre_wings"
ckeys_allowed = list("sepulchre")
/datum/sprite_accessory/wing/miria_fluffdragon
name = "fluffdragon wings (Miria Masters)"
desc = ""
icon_state = "miria-fluffdragontail"
ckeys_allowed = list("miriamasters")
/datum/sprite_accessory/wing/scree
name = "green taj wings (Scree)"
desc = ""
icon_state = "scree-wings"
ckeys_allowed = list("scree")
/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings?
name = "gazer eyestalks"
desc = ""
icon_state = "liquidfirefly-eyestalks"
//ckeys_allowed = list("liquidfirefly","seiga") //At request.
/datum/sprite_accessory/wing/moth_full
name = "moth antenna and wings"
desc = ""
icon_state = "moth_full"
/datum/sprite_accessory/wing/moth_full_gray
name = "moth antenna and wings, colorable"
desc = ""
icon_state = "moth_full_gray"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/kerena
name = "wingwolf wings (Kerena)"
desc = ""
icon_state = "kerena-wings"
ckeys_allowed = list("somekindofpony")
/datum/sprite_accessory/wing/snag
name = "xenomorph backplate"
desc = ""
icon_state = "snag-backplate"
/datum/sprite_accessory/wing/sepulchre_c_yw
name = "demon wings (colorable)"
desc = ""
icon_state = "sepulchre_wingsc"
do_colouration = 1
/datum/sprite_accessory/wing/cyberdragon
name = "Cyber dragon wing (colorable)"
desc = ""
icon_state = "cyberdragon_s"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
/datum/sprite_accessory/wing/cyberdragon_red
name = "Cyber dragon wing (red)"
desc = ""
icon_state = "cyberdragon_red_s"
do_colouration = 0
/datum/sprite_accessory/wing/cyberdoe
name = "Cyber doe wing"
desc = ""
icon_state = "cyberdoe_s"
do_colouration = 0
/datum/sprite_accessory/wing/drago_wing
name = "Cybernetic Dragon wings"
desc = ""
icon_state = "drago_wing"
do_colouration = 1
color_blend_mode = ICON_MULTIPLY
extra_overlay = "drago_wing_2"
+1 -1
View File
@@ -82,7 +82,7 @@
return 0
else if(ismob(src)) //VOREStation Edit Start. Are they a mob, and are they currently flying??
var/mob/H = src
var/mob/living/H = src
if(H.flying)
if(H.incapacitated(INCAPACITATION_ALL))
to_chat(src, "<span class='notice'>You can't fly in your current state.</span>")
+6 -1
View File
@@ -30,6 +30,7 @@
// Appearance vars.
var/nonsolid // Snowflake warning, reee. Used for slime limbs.
var/transparent // As above, so below. Used for transparent limbs.
var/icon_name = null // Icon state base.
var/body_part = null // Part flag
var/icon_position = 0 // Used in mob overlay layering calculations.
@@ -1399,4 +1400,8 @@ Note that amputating the affected organ does in fact remove the infection from t
for(var/obj/item/organ/external/L in organs)
for(var/obj/item/I in L.implants)
if(!istype(I,/obj/item/weapon/implant) && !istype(I,/obj/item/device/nif)) //VOREStation Add - NIFs
return 1
return 1
/obj/item/organ/external/proc/is_hidden_by_tail()
if(owner && owner.tail_style && owner.tail_style.hide_body_parts && (organ_tag in owner.tail_style.hide_body_parts))
return 1
-7
View File
@@ -1,6 +1,3 @@
/obj/item/organ/external
var/transparent = 0 //For better slime limbs
//Sideways override for nanoform limbs (ugh)
/obj/item/organ/external/robotize(var/company, var/skip_prosthetics = FALSE, var/keep_organs = FALSE)
var/original_robotic = robotic
@@ -16,7 +13,3 @@
min_broken_damage = o_min_broken_damage
else
return ..()
/obj/item/organ/external/proc/is_hidden_by_tail()
if(owner && owner.tail_style && owner.tail_style.hide_body_parts && (organ_tag in owner.tail_style.hide_body_parts))
return 1
+175
View File
@@ -0,0 +1,175 @@
/datum/robolimb
var/includes_tail //Cyberlimbs dmi includes a tail sprite to wear.
var/includes_wing //Cyberlimbs dmi includes a wing sprite to wear.
var/list/whitelisted_to //List of ckeys that are allowed to pick this in charsetup.
//////////////// For-specific-character fluff ones ///////////////// May be viable to place these into a custom_item subfolder, in order to allow CI Repo integration.
// verkister : Rahwoof Boop
/datum/robolimb/eggnerdltd
company = "Eggnerd Prototyping Ltd."
desc = "This limb has a slight salvaged handicraft vibe to it. The CE-marking on it is definitely not the standardized one, it looks more like a hand-written sharpie monogram."
icon = 'icons/mob/human_races/cyberlimbs/_fluff_vr/rahboop.dmi'
blood_color = "#5e280d"
includes_tail = 1
unavailable_to_build = 1
/obj/item/weapon/disk/limb/eggnerdltd
company = "Eggnerd Prototyping Ltd."
// icon = 'icons/obj/items_vr.dmi'
// icon_state = "verkdisk"
//////////////// General VS-only ones /////////////////
/datum/robolimb/talon //They're buildable by default due to being extremely basic.
company = "Talon LLC"
desc = "This metallic limb is sleek and featuresless apart from some exposed motors"
icon = 'icons/mob/human_races/cyberlimbs/talon/talon_main.dmi' //Sprited by: Viveret
/obj/item/weapon/disk/limb/talon
company = "Talon LLC"
/datum/robolimb/zenghu_taj //This wasn't indented. At all. It's a miracle this didn't break literally everything.
company = "Zeng-Hu - Tajaran"
desc = "This limb has a rubbery fleshtone covering with visible seams."
icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_taj.dmi'
unavailable_to_build = 1
parts = list(BP_HEAD)
/datum/robolimb/eggnerdltdred
company = "Eggnerd Prototyping Ltd. (Red)"
desc = "A slightly more refined limb variant from Eggnerd Prototyping. Its got red plating instead of orange."
icon = 'icons/mob/human_races/cyberlimbs/rahboopred/rahboopred.dmi'
blood_color = "#5e280d"
includes_tail = 1
unavailable_to_build = 1
/obj/item/weapon/disk/limb/eggnerdltdred
company = "Eggnerd Prototyping Ltd. (Red)"
// icon = 'icons/obj/items_vr.dmi'
// icon_state = "verkdisk"
//Darkside Incorperated synthetic augmentation list! Many current most used fuzzy and notsofuzzy races made into synths here.
/datum/robolimb/dsi_tajaran
company = "DSI - Tajaran"
desc = "This limb feels soft and fluffy, realistic design and squish. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSITajaran/dsi_tajaran.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Tajara"
/datum/robolimb/dsi_tajaran/New()
species_cannot_use = GLOB.all_species.Copy()
// species_cannot_use -= SPECIES_TAJ
/obj/item/weapon/disk/limb/dsi_tajaran
company = "DSI - Tajaran"
/datum/robolimb/dsi_lizard
company = "DSI - Lizard"
desc = "This limb feels smooth and scalie, realistic design and squish. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSILizard/dsi_lizard.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Unathi"
/datum/robolimb/dsi_lizard/New()
species_cannot_use = GLOB.all_species.Copy()
// species_cannot_use -= SPECIES_UNATHI
/obj/item/weapon/disk/limb/dsi_lizard
company = "DSI - Lizard"
/*
/datum/robolimb/dsi_sergal
company = "DSI - Sergal"
desc = "This limb feels soft and fluffy, realistic design and toned muscle. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSISergal/dsi_sergal.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Sergal"
/obj/item/weapon/disk/limb/dsi_sergal
company = "DSI - Sergal"
/datum/robolimb/dsi_nevrean
company = "DSI - Nevrean"
desc = "This limb feels soft and feathery, lightweight, realistic design and squish. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSINevrean/dsi_nevrean.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Nevrean"
/obj/item/weapon/disk/limb/dsi_nevrean
company = "DSI - Nevrean"
/datum/robolimb/dsi_vulpkanin
company = "DSI - Vulpkanin"
desc = "This limb feels soft and fluffy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSIVulpkanin/dsi_vulpkanin.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Vulpkanin"
/obj/item/weapon/disk/limb/dsi_vulpkanin
company = "DSI - Vulpkanin"
/datum/robolimb/dsi_akula
company = "DSI - Akula"
desc = "This limb feels soft and fleshy, realistic design and squish. Seems a little mischievous. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSIAkula/dsi_akula.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Akula"
/obj/item/weapon/disk/limb/dsi_akula
company = "DSI - Akula"
/datum/robolimb/dsi_spider
company = "DSI - Vasilissan"
desc = "This limb feels hard and chitinous, realistic design. Seems a little mischievous. By Darkside Incorperated."
icon = 'icons/mob/human_races/cyberlimbs/DSISpider/dsi_spider.dmi'
blood_color = "#ffe2ff"
lifelike = 1
unavailable_to_build = 1
includes_tail = 1
skin_tone = 1
suggested_species = "Vasilissan"
/obj/item/weapon/disk/limb/dsi_spider
company = "DSI - Vasilissan"
*/
/datum/robolimb/dsi_teshari
company = "DSI - Teshari"
desc = "This limb has a thin synthflesh casing with a few connection ports."
icon = 'icons/mob/human_races/cyberlimbs/DSITeshari/dsi_teshari.dmi'
lifelike = 1
skin_tone = 1
suggested_species = "Teshari"
/datum/robolimb/dsi_teshari/New()
species_cannot_use = GLOB.all_species.Copy()
// species_cannot_use -= SPECIES_TESHARI
// species_cannot_use -= SPECIES_CUSTOM
..()
/obj/item/weapon/disk/limb/dsi_teshari
company = "DSI - Teshari"
-5
View File
@@ -1,8 +1,3 @@
/datum/robolimb
var/includes_tail //Cyberlimbs dmi includes a tail sprite to wear.
var/includes_wing //Cyberlimbs dmi includes a wing sprite to wear.
var/list/whitelisted_to //List of ckeys that are allowed to pick this in charsetup.
//CitRP Port
var/const/cyberbeast_monitor_styles = "blank=cyber_blank;\
default=cyber_default;\
+50
View File
@@ -266,6 +266,8 @@
encased = "skull"
base_miss_chance = 40
var/can_intake_reagents = 1
var/eye_icons = 'icons/mob/human_face_alt.dmi'
var/head_offset = 0
var/eye_icon = "eyes_s"
force = 3
throwforce = 7
@@ -324,6 +326,54 @@
"<span class='notice'>You make \the [I] kiss \the [src]!.</span>")
return ..()
/obj/item/organ/external/head/get_icon()
..()
overlays.Cut()
if(!owner || !owner.species)
return
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode)
overlays |= mark_s //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(owner.should_have_organ(O_EYES))//Moved on top of markings.
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
if(eye_icon)
var/icon/eyes_icon = new/icon(eye_icons, eye_icon)
if(eyes)
if(owner.species.appearance_flags & HAS_EYE_COLOR)
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
else
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
overlays |= eyes_icon
if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS)))
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
overlays |= lip_icon
mob_icon.Blend(lip_icon, ICON_OVERLAY)
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
overlays |= image(facial_s, "pixel_y" = head_offset)
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY)
overlays |= image(hair_s, "pixel_y" = head_offset)
return mob_icon
/obj/item/organ/external/head/skrell
eye_icon = "skrell_eyes_s"
@@ -1,58 +1,8 @@
//For custom heads with custom parts since the base code is restricted to a single icon file.
/obj/item/organ/external/head/vr/get_icon()
..()
overlays.Cut()
if(!owner || !owner.species)
return
for(var/M in markings)
var/datum/sprite_accessory/marking/mark_style = markings[M]["datum"]
var/icon/mark_s = new/icon("icon" = mark_style.icon, "icon_state" = "[mark_style.icon_state]-[organ_tag]")
mark_s.Blend(markings[M]["color"], mark_style.color_blend_mode)
overlays |= mark_s //So when it's not on your body, it has icons
mob_icon.Blend(mark_s, ICON_OVERLAY) //So when it's on your body, it has icons
icon_cache_key += "[M][markings[M]["color"]]"
if(owner.should_have_organ(O_EYES))//Moved on top of markings.
var/obj/item/organ/internal/eyes/eyes = owner.internal_organs_by_name[O_EYES]
if(eye_icon)
var/icon/eyes_icon = new/icon(eye_icons_vr, eye_icon_vr)
if(eyes)
if(owner.species.appearance_flags & HAS_EYE_COLOR)
eyes_icon.Blend(rgb(eyes.eye_colour[1], eyes.eye_colour[2], eyes.eye_colour[3]), ICON_ADD)
else
eyes_icon.Blend(rgb(128,0,0), ICON_ADD)
mob_icon.Blend(eyes_icon, ICON_OVERLAY)
overlays |= eyes_icon
if(owner.lip_style && (species && (species.appearance_flags & HAS_LIPS)))
var/icon/lip_icon = new/icon('icons/mob/human_face.dmi', "lips_[owner.lip_style]_s")
overlays |= lip_icon
mob_icon.Blend(lip_icon, ICON_OVERLAY)
if(owner.f_style)
var/datum/sprite_accessory/facial_hair_style = facial_hair_styles_list[owner.f_style]
if(facial_hair_style && facial_hair_style.species_allowed && (species.get_bodytype(owner) in facial_hair_style.species_allowed))
var/icon/facial_s = new/icon("icon" = facial_hair_style.icon, "icon_state" = "[facial_hair_style.icon_state]_s")
if(facial_hair_style.do_colouration)
facial_s.Blend(rgb(owner.r_facial, owner.g_facial, owner.b_facial), ICON_ADD)
overlays |= image(facial_s, "pixel_y" = head_offset)
if(owner.h_style && !(owner.head && (owner.head.flags_inv & BLOCKHEADHAIR)))
var/datum/sprite_accessory/hair_style = hair_styles_list[owner.h_style]
if(hair_style && (species.get_bodytype(owner) in hair_style.species_allowed))
var/icon/hair_s = new/icon("icon" = hair_style.icon, "icon_state" = "[hair_style.icon_state]_s")
if(hair_style.do_colouration && islist(h_col) && h_col.len >= 3)
hair_s.Blend(rgb(h_col[1], h_col[2], h_col[3]), ICON_MULTIPLY)
overlays |= image(hair_s, "pixel_y" = head_offset)
return mob_icon
/obj/item/organ/external/head/vr
var/eye_icons_vr = 'icons/mob/human_face_vr.dmi'
var/eye_icon_vr = "blank_eyes"
var/head_offset = 0
eye_icon = "blank_eyes"
/obj/item/organ/external/head/vr/sergal
+11 -1
View File
@@ -67,9 +67,19 @@ other types of metals and chemistry for reagents).
/datum/design/item
build_type = PROTOLATHE
//Make sure items don't get free power
//Make sure items don't get free power, or resources. Also make things be recycled with proper values.
/datum/design/item/Fabricate()
var/obj/item/I = ..()
if(LAZYLEN(materials))
if(!LAZYLEN(I.matter))
I.matter = list()
else
I.matter.Cut()
for(var/matname in materials)
I.matter[matname] = materials[matname]
var/obj/item/weapon/cell/C = I.get_cell()
if(C)
C.charge = 0
-9
View File
@@ -385,9 +385,6 @@
ASSERT(istype(B))
var/datum/category_item/player_setup_item/general/basic/G = CG.items_by_name["Basic"]
ASSERT(istype(G))
CG = CC.categories_by_name["VORE"]
var/datum/category_item/player_setup_item/vore/ears/E = CG.items_by_name["Appearance"]
ASSERT(istype(E))
if(params["target_href"] == "bio_gender")
var/new_gender = input(user, "Choose your character's biological gender:", "Character Preference", active_br.bodygender) as null|anything in G.get_genders()
@@ -408,12 +405,6 @@
active_br.mydna.dna.ResetUIFrom(mannequin)
update_preview_icon()
return 1
action = E.OnTopic(list2params(href_list), href_list, user)
if(action & TOPIC_UPDATE_PREVIEW && mannequin && active_br)
E.copy_to_mob(mannequin)
active_br.mydna.dna.ResetUIFrom(mannequin)
update_preview_icon()
return 1
// Fake subtype of preferences we can use to steal code from player_setup
/datum/preferences/designer/New()
+2 -2
View File
@@ -61,7 +61,7 @@ GLOBAL_DATUM_INIT(tgui_default_state, /datum/tgui_state/default, new)
return STATUS_CLOSE
/mob/living/simple_animal/default_can_use_tgui_topic(src_object)
/mob/living/simple_mob/default_can_use_tgui_topic(src_object)
. = shared_tgui_interaction(src_object)
if(. > STATUS_CLOSE)
. = min(., shared_living_tgui_distance(src_object)) //simple animals can only use things they're near.
@@ -74,6 +74,6 @@ GLOBAL_DATUM_INIT(tgui_default_state, /datum/tgui_state/default, new)
return ..()
/mob/observer/dead/default_can_use_tgui_topic()
if(can_admin_interact())
if(check_rights(R_ADMIN|R_EVENT, 0, src))
return STATUS_INTERACTIVE // Admins are more equal
return STATUS_UPDATE // Ghosts can view updates
+1 -1
View File
@@ -9,7 +9,7 @@ GLOBAL_DATUM_INIT(tgui_observer_state, /datum/tgui_state/observer_state, new)
/datum/tgui_state/observer_state/can_use_topic(src_object, mob/user)
if(isobserver(user))
return STATUS_INTERACTIVE
if(check_rights(R_ADMIN, 0, src))
if(check_rights(R_ADMIN|R_EVENT, 0, src))
return STATUS_INTERACTIVE
return STATUS_CLOSE
@@ -20,36 +20,3 @@
var/r_acc3 = 30
var/g_acc3 = 30
var/b_acc3 = 30
var/datum/sprite_accessory/ears/ear_style = null
var/r_ears = 30
var/g_ears = 30
var/b_ears = 30
var/r_ears2 = 30
var/g_ears2 = 30
var/b_ears2 = 30
var/r_ears3 = 30 //Trust me, we could always use more colour. No japes.
var/g_ears3 = 30
var/b_ears3 = 30
var/datum/sprite_accessory/tail/tail_style = null
var/r_tail = 30
var/g_tail = 30
var/b_tail = 30
var/r_tail2 = 30
var/g_tail2 = 30
var/b_tail2 = 30
var/r_tail3 = 30
var/g_tail3 = 30
var/b_tail3 = 30
var/datum/sprite_accessory/wing/wing_style = null
var/r_wing = 30
var/g_wing = 30
var/b_wing = 30
var/r_wing2 = 30
var/g_wing2 = 30
var/b_wing2 = 30
var/r_wing3 = 30
var/g_wing3 = 30
var/b_wing3 = 30
// Custom Species Name
var/custom_species
@@ -0,0 +1,30 @@
/datum/sprite_accessory/tail/taur/naga/alt
name = "Naga alt (Taur)"
icon_state = "naga_alt_s"
icon = 'icons/mob/vore/taurs_ch.dmi'
suit_sprites = 'icons/mob/taursuits_naga_ch.dmi'
/datum/sprite_accessory/tail/taur/naga/alt_2c
name = "Naga dual-color alt (Taur)"
icon_state = "naga_alt_s"
icon = 'icons/mob/vore/taurs_ch.dmi'
extra_overlay = "naga_alt_markings"
suit_sprites = 'icons/mob/taursuits_naga_ch.dmi'
/datum/sprite_accessory/tail/taur/horse/scoli
name = "Scolipede (Taur)"
icon_state = "scoli_s"
icon = 'icons/mob/vore/taurs_ch.dmi'
extra_overlay = "scoli_markings1"
extra_overlay2 = "scoli_markings2"
/datum/sprite_accessory/tail/taur/lizard/fat
name = "Fat Lizard (Taur)"
icon_state = "fatlizard_s"
icon = 'icons/mob/vore/taurs_ch.dmi'
/datum/sprite_accessory/tail/taur/lizard/fat_2c
name = "Fat Lizard (Taur, dual-color)"
icon_state = "fatlizard_s"
icon = 'icons/mob/vore/taurs_ch.dmi'
extra_overlay= "fatlizard_markings"
@@ -1,25 +1,3 @@
var/global/list/wing_icon_cache = list()
/mob/living/carbon/human/proc/get_ears_overlay()
if(ear_style && !(head && (head.flags_inv & BLOCKHEADHAIR)))
var/icon/ears_s = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.icon_state)
if(ear_style.do_colouration)
ears_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), ear_style.color_blend_mode)
if(ear_style.extra_overlay)
var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay)
overlay.Blend(rgb(src.r_ears2, src.g_ears2, src.b_ears2), ear_style.color_blend_mode)
ears_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(ear_style.extra_overlay2) //MORE COLOURS IS BETTERER
var/icon/overlay = new/icon("icon" = ear_style.icon, "icon_state" = ear_style.extra_overlay2)
overlay.Blend(rgb(src.r_ears3, src.g_ears3, src.b_ears3), ear_style.color_blend_mode)
ears_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
return ears_s
return null
/mob/living/carbon/human/proc/get_hair_accessory_overlay()
if(hair_accessory_style && !(head && (head.flags_inv & BLOCKHEADHAIR)))
var/icon/hair_acc_s = icon(hair_accessory_style.icon, hair_accessory_style.icon_state)
@@ -27,99 +5,3 @@ var/global/list/wing_icon_cache = list()
hair_acc_s.Blend(rgb(src.r_ears, src.g_ears, src.b_ears), hair_accessory_style.color_blend_mode)
return hair_acc_s
return null
/mob/living/carbon/human/proc/get_tail_image()
//If you are FBP with tail style and didn't set a custom one
var/datum/robolimb/model = isSynthetic()
if(istype(model) && model.includes_tail && !tail_style)
var/icon/tail_s = new/icon("icon" = synthetic.icon, "icon_state" = "tail")
tail_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(tail_s)
//If you have a custom tail selected
if(tail_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL && !isTaurTail(tail_style)))
var/icon/tail_s = new/icon("icon" = tail_style.icon, "icon_state" = wagging && tail_style.ani_state ? tail_style.ani_state : tail_style.icon_state)
if(tail_style.do_colouration)
tail_s.Blend(rgb(src.r_tail, src.g_tail, src.b_tail), tail_style.color_blend_mode)
if(tail_style.extra_overlay)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay_w)
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail2, src.g_tail2, src.b_tail2), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(tail_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2)
if(wagging && tail_style.ani_state)
overlay = new/icon("icon" = tail_style.icon, "icon_state" = tail_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_tail3, src.g_tail3, src.b_tail3), tail_style.color_blend_mode)
tail_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(isTaurTail(tail_style))
var/datum/sprite_accessory/tail/taur/taurtype = tail_style
if(taurtype.can_ride && !riding_datum)
riding_datum = new /datum/riding/taur(src)
verbs |= /mob/living/carbon/human/proc/taur_mount
verbs |= /mob/living/proc/toggle_rider_reins
return image(tail_s, "pixel_x" = -16)
else
return image(tail_s)
return null
/mob/living/carbon/human/proc/get_wing_image()
if(QDESTROYING(src))
return
//If you are FBP with wing style and didn't set a custom one
if((synthetic && synthetic.includes_wing && !wing_style) && !wings_hidden)
var/icon/wing_s = new/icon("icon" = synthetic.icon, "icon_state" = "wing") //I dunno. If synths have some custom wing?
wing_s.Blend(rgb(src.r_skin, src.g_skin, src.b_skin), species.color_mult ? ICON_MULTIPLY : ICON_ADD)
return image(wing_s)
//If you have custom wings selected
if((wing_style && !(wear_suit && wear_suit.flags_inv & HIDETAIL)) && !wings_hidden)
var/icon/wing_s = new/icon("icon" = wing_style.icon, "icon_state" = flapping && wing_style.ani_state ? wing_style.ani_state : wing_style.icon_state)
if(wing_style.do_colouration)
wing_s.Blend(rgb(src.r_wing, src.g_wing, src.b_wing), wing_style.color_blend_mode)
if(wing_style.extra_overlay)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay)
overlay.Blend(rgb(src.r_wing2, src.g_wing2, src.b_wing2), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
if(wing_style.extra_overlay2)
var/icon/overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2)
if(wing_style.ani_state)
overlay = new/icon("icon" = wing_style.icon, "icon_state" = wing_style.extra_overlay2_w)
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
else
overlay.Blend(rgb(src.r_wing3, src.g_wing3, src.b_wing3), wing_style.color_blend_mode)
wing_s.Blend(overlay, ICON_OVERLAY)
qdel(overlay)
return image(wing_s)
// TODO - Move this to where it should go ~Leshana
/mob/proc/stop_flying()
if(QDESTROYING(src))
return
flying = FALSE
return 1
/mob/living/carbon/human/stop_flying()
if((. = ..()))
update_wing_showing()
+10 -7
View File
@@ -18,7 +18,6 @@
var/vore_verb = "ingest" // Verb for eating with this in messages
var/human_prey_swallow_time = 100 // Time in deciseconds to swallow /mob/living/carbon/human
var/nonhuman_prey_swallow_time = 30 // Time in deciseconds to swallow anything else
var/emote_time = 60 SECONDS // How long between stomach emotes at prey
var/nutrition_percent = 100 // Nutritional percentage per tick in digestion mode
var/digest_brute = 0.5 // Brute damage per tick in digestion mode
var/digest_burn = 0.5 // Burn damage per tick in digestion mode
@@ -41,6 +40,10 @@
var/obj/item/weapon/storage/vore_egg/ownegg // Is this belly creating an egg?
var/egg_type = "Egg" // Default egg type and path.
var/egg_path = /obj/item/weapon/storage/vore_egg
var/list/emote_lists = list() // Idle emotes that happen on their own, depending on the bellymode. Contains lists of strings indexed by bellymode
var/emote_time = 60 // How long between stomach emotes at prey (in seconds)
var/emote_active = TRUE // Are we even giving emotes out at all or not?
var/next_emote = 0 // When we're supposed to print our next emote, as a world.time
//I don't think we've ever altered these lists. making them static until someone actually overrides them somewhere.
//Actual full digest modes
@@ -56,7 +59,6 @@
var/tmp/mob/living/owner // The mob whose belly this is.
var/tmp/digest_mode = DM_HOLD // Current mode the belly is set to from digest_modes (+transform_modes if human)
var/tmp/list/items_preserved = list() // Stuff that wont digest so we shouldn't process it again.
var/tmp/next_emote = 0 // When we're supposed to print our next emote, as a world.time
var/tmp/recent_sound = FALSE // Prevent audio spam
// Don't forget to watch your commas at the end of each line if you change these.
@@ -113,11 +115,6 @@
var/contamination_flavor = "Generic" // Determines descriptions of contaminated items
var/contamination_color = "green" // Color of contamination overlay
//Mostly for being overridden on precreated bellies on mobs. Could be VV'd into
//a carbon's belly if someone really wanted. No UI for carbons to adjust this.
//List has indexes that are the digestion mode strings, and keys that are lists of strings.
var/tmp/list/emote_lists = list()
// Lets you do a fullscreen overlay. Set to an icon_state string.
var/belly_fullscreen = ""
var/disable_hud = FALSE
@@ -152,6 +149,8 @@
"digest_messages_prey",
"examine_messages",
"emote_lists",
"emote_time",
"emote_active",
"mode_flags",
"item_digest_mode",
"contaminates",
@@ -164,6 +163,7 @@
"belly_fullscreen",
"disable_hud",
"reagent_mode_flags", //CHOMP start of variables from CHOMP
"belly_fullscreen_color",
"reagentbellymode",
"liquid_fullness1_messages",
"liquid_fullness2_messages",
@@ -840,6 +840,7 @@
dupe.wet_loop = wet_loop
dupe.reagent_mode_flags = reagent_mode_flags //CHOMP start of variables from CHOMP
dupe.belly_fullscreen_color = belly_fullscreen_color
dupe.reagentbellymode = reagentbellymode
dupe.vorefootsteps_sounds = vorefootsteps_sounds
dupe.liquid_fullness1_messages = liquid_fullness1_messages
@@ -862,6 +863,8 @@
dupe.belly_fullscreen = belly_fullscreen
dupe.disable_hud = disable_hud
dupe.egg_type = egg_type
dupe.emote_time = emote_time
dupe.emote_active = emote_active
//// Object-holding variables
//struggle_messages_outside - strings
+2 -2
View File
@@ -56,8 +56,8 @@
///////////////////// Early Non-Mode Handling /////////////////////
var/list/EL = emote_lists[digest_mode]
if(LAZYLEN(EL) && touchable_mobs && next_emote <= world.time)
next_emote = world.time + emote_time
if(LAZYLEN(EL) && touchable_mobs && next_emote <= world.time && emote_active)
next_emote = world.time + (emote_time SECONDS)
for(var/mob/living/M in contents)
if(digest_mode == DM_DIGEST && !M.digestable)
continue // don't give digesty messages to indigestible people
+23 -13
View File
@@ -7,7 +7,7 @@
var/vore_footstep_chance = 0
var/vore_footstep_volume_cooldown = 0 //goes up each time a step isnt heard, and will proc update of list of viable bellies to determine the most filled and loudest one to base audio on.
var/parasitic = FALSE //Digestion immunity and nutrition leeching variable
var/parasitic = FALSE //Digestion immunity and nutrition leeching variable
mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
@@ -66,6 +66,16 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
return message
/mob/living/proc/vore_check_reagents()
set name = "Check Belly Liquid (Vore)"
set category = "Abilities"
set desc = "Check the amount of liquid in your belly."
var/obj/belly/RTB = input("Choose which vore belly to check") as null|anything in src.vore_organs
if(!RTB)
return FALSE
to_chat(src, "<span class='notice'>[RTB] has [RTB.reagents.total_volume] units of liquid.</span>")
/mob/living/proc/vore_transfer_reagents()
set name = "Transfer Liquid (Vore)"
@@ -111,9 +121,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
return FALSE
if(TG == user)
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into their [TB].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their [TB].</span>")
else
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into their [TB].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their [TB].</span>")
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
@@ -132,9 +142,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
return FALSE
if(TG == user)
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [TR]'s [TB].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s [TB].</span>")
else
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]s [RTB] into [TR]'s [TB].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [RTB] into [TR]'s [TB].</span>")
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_VORE, 1, 0, TB)
add_attack_logs(user,TR,"Transfered reagents from [TG]'s [RTB] to [TR]'s [TB]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
@@ -148,9 +158,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
if(TR == user) //Proceed, we dont need to have prefs enabled for transfer within user
if(TG == user)
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into their stomach.</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their stomach.</span>")
else
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into their stomach.</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their stomach.</span>")
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach")
@@ -160,9 +170,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
else
if(TG == user)
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [TR]'s stomach.</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s stomach.</span>")
else
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into [TR]'s stomach.</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [TR]'s stomach.</span>")
RTB.reagents.vore_trans_to_mob(TR, transfer_amount, CHEM_INGEST, 1, 0, null)
add_attack_logs(user,TR,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to [TR]'s Stomach") //Bonus for staff so they can see if people have abused transfer and done pref breaks
@@ -178,9 +188,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
return //No long distance transfer
if(TG == user)
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [T].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [T].</span>")
else
user.visible_message("<span class='notice'>[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into [T].</span>")
user.custom_emote_vr(1, "<span class='notice'>[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [T].</span>")
RTB.reagents.vore_trans_to_con(T, transfer_amount, 1, 0)
add_attack_logs(user, T,"Transfered [RTB.reagent_name] from [TG]'s [RTB] to a [T]") //Bonus for staff so they can see if people have abused transfer and done pref breaks
@@ -195,9 +205,9 @@ mob/living/proc/check_vorefootstep(var/m_intent, var/turf/T)
return
if(TG == user)
user.visible_message("<span class='notice'>[user] spills [RTB.reagent_name] from their [RTB] onto the floor!</span>")
user.custom_emote_vr(1, "<span class='notice'>spills [RTB.reagent_name] from their [RTB] onto the floor!</span>")
else
user.visible_message("<span class='notice'>[user] spills [RTB.reagent_name] from [TG]'s [RTB] onto the floor!</span>")
user.custom_emote_vr(1, "<span class='notice'>spills [RTB.reagent_name] from [TG]'s [RTB] onto the floor!</span>")
var/obj/effect/decal/cleanable/blood/reagent/puddle = new /obj/effect/decal/cleanable/blood/reagent(RTB.reagent_name, RTB.reagentcolor, RTB.reagentid, puddle_amount, user.ckey, TG.ckey)
puddle.loc = TG.loc
+1 -1
View File
@@ -24,7 +24,6 @@
var/absorbing_prey = 0 // Determines if the person is using the succubus drain or not. See station_special_abilities_vr.
var/drain_finalized = 0 // Determines if the succubus drain will be KO'd/absorbed. Can be toggled on at any time.
var/fuzzy = 1 // Preference toggle for sharp/fuzzy icon.
var/tail_alt = 0 // Tail layer toggle.
var/permit_healbelly = TRUE
var/can_be_drop_prey = FALSE
var/can_be_drop_pred = TRUE // Mobs are pred by default.
@@ -48,6 +47,7 @@
M.vorePanel = new(M)
M.verbs += /mob/living/proc/insidePanel
M.verbs += /mob/living/proc/vore_transfer_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
M.verbs += /mob/living/proc/vore_check_reagents //CHOMP If mob doesnt have bellies it cant use this verb for anything
//return TRUE to hook-caller
return TRUE
+13 -1
View File
@@ -158,6 +158,8 @@
"digest_burn" = selected.digest_burn,
"bulge_size" = selected.bulge_size,
"shrink_grow_size" = selected.shrink_grow_size,
"emote_time" = selected.emote_time,
"emote_active" = selected.emote_active,
"belly_fullscreen" = selected.belly_fullscreen,
"belly_fullscreen_color" = selected.belly_fullscreen_color, //CHOMPEdit
"mapRef" = map_name, //CHOMPEdit
@@ -902,6 +904,16 @@
var/new_new_damage = CLAMP(new_damage, 0, 6)
host.vore_selected.digest_brute = new_new_damage
. = TRUE
if("b_emoteactive")
host.vore_selected.emote_active = !host.vore_selected.emote_active
. = TRUE
if("b_emotetime")
var/new_time = input(user, "Choose the period it takes for idle belly emotes to be shown to prey. Measured in seconds, Minimum 1 minute, Maximum 10 minutes.", "Set Belly Emote Delay.", host.vore_selected.digest_brute)
if(new_time == null)
return FALSE
var/new_new_time = CLAMP(new_time, 60, 600)
host.vore_selected.emote_time = new_new_time
. = TRUE
if("b_escapable")
if(host.vore_selected.escapable == 0) //Possibly escapable and special interactions.
host.vore_selected.escapable = 1
@@ -1040,7 +1052,7 @@
host.vore_selected.reagent_name = new_name
. = TRUE
if("b_liq_reagent_transfer_verb")
var/new_verb = html_encode(input(usr,"New verb when liquid is transfered from this belly (infinitive tense, e.g. pump or inject):","New Verb") as text|null)
var/new_verb = html_encode(input(usr,"New verb when liquid is transfered from this belly:","New Verb") as text|null)
if(length(new_verb) > BELLIES_NAME_MAX || length(new_verb) < BELLIES_NAME_MIN)
alert("Entered verb length invalid (must be longer than [BELLIES_NAME_MIN], no longer than [BELLIES_NAME_MAX]).","Error")
@@ -952,23 +952,6 @@
/obj/item/weapon/material/twohanded/fluff/New(var/newloc)
..(newloc," ") //See materials_vr_dmi for more information as to why this is a blank space.
//General use.
/obj/item/weapon/material/twohanded/fluff/riding_crop
name = "riding crop"
desc = "A steel rod, a little over a foot long with a widened grip and a thick, leather patch at the end. Made to smack naughty submissives."
//force_wielded = 0.05 //Stings, but does jack shit for damage, provided you don't hit someone 100 times. 1 damage with hardness of 60.
force_divisor = 0.05 //Required in order for the X attacks Y message to pop up.
unwielded_force_divisor = 1 // One here, too.
applies_material_colour = 0
unbreakable = 1
base_icon = "riding_crop"
icon_state = "riding_crop0"
attack_verb = list("cropped","spanked","swatted","smacked","peppered")
//1R1S: Malady Blanche
/obj/item/weapon/material/twohanded/fluff/riding_crop/malady
name = "Malady's riding crop"
desc = "An infernum made riding crop with Malady Blanche engraved in the shaft. It's a little worn from how many butts it has spanked."
//jacknoir413:Areax Third
/obj/item/weapon/melee/baton/fluff/stunstaff
name = "Electrostaff"
+6
View File
@@ -40,6 +40,12 @@
-->
<div class="commit sansserif">
<h2 class="date">20 March 2021</h2>
<h3 class="author">None updated:</h3>
<ul class="changes bgimages16">
<li class="tweak">Fixes tracking implant cost to 0, not 10, as a VS edit.</li>
</ul>
<h2 class="date">12 March 2021</h2>
<h3 class="author">CHOMPStationBot updated:</h3>
<ul class="changes bgimages16">
+3
View File
@@ -5517,3 +5517,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
- bugfix: Fixed laptop vendors not selling tesla relays on tablets
- rscadd: Tested. Appears to have been changed unintentionally in the nanoui ->
tgui switchover.
2021-03-20:
null:
- tweak: Fixes tracking implant cost to 0, not 10, as a VS edit.
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 101 KiB

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