diff --git a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm index be7f905a77..a3a368852f 100644 --- a/code/ATMOSPHERICS/components/omni_devices/omni_base.dm +++ b/code/ATMOSPHERICS/components/omni_devices/omni_base.dm @@ -96,15 +96,6 @@ "You hear a ratchet.") deconstruct() -/obj/machinery/atmospherics/omni/can_unwrench() - var/int_pressure = 0 - for(var/datum/omni_port/P in ports) - int_pressure += P.air.return_pressure() - var/datum/gas_mixture/env_air = loc.return_air() - if((int_pressure - env_air.return_pressure()) > 2*ONE_ATMOSPHERE) - return 0 - return 1 - /obj/machinery/atmospherics/omni/attack_hand(user as mob) if(..()) return diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index d166b52fbe..df74b17bc0 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -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 diff --git a/code/__defines/species_languages.dm b/code/__defines/species_languages.dm index 4c80db6450..3239e8fa1a 100644 --- a/code/__defines/species_languages.dm +++ b/code/__defines/species_languages.dm @@ -37,6 +37,7 @@ #define COFFEE 0x200 // Mostly here for tajara. #define GENERIC 0x400 // Catchall for stuff that doesn't fall into the groups above. You shouldn't be allergic to this type, ever. #define SUGARS 0x800 // For unathi-like reactions +#define EGGS 0x1000 // For Skrell eggs allergy // Allergen reactions #define AG_TOX_DMG 0x1 // the classic diff --git a/code/_helpers/global_lists.dm b/code/_helpers/global_lists.dm index 311514fb7e..1c0d5f2393 100644 --- a/code/_helpers/global_lists.dm +++ b/code/_helpers/global_lists.dm @@ -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,20 +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 -<<<<<<< HEAD -||||||| parent of 32224e5c9d... Merge pull request #9924 from Novacat/nova-basicfixes -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(custom_species_bases) -======= 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 ->>>>>>> 32224e5c9d... Merge pull request #9924 from Novacat/nova-basicfixes //Underwear var/datum/category_collection/underwear/global_underwear = new() @@ -227,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) @@ -234,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. diff --git a/code/_helpers/global_lists_vr.dm b/code/_helpers/global_lists_vr.dm index de3bd08467..7fb383f760 100644 --- a/code/_helpers/global_lists_vr.dm +++ b/code/_helpers/global_lists_vr.dm @@ -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() \ No newline at end of file +var/global/list/weavable_items = list() diff --git a/code/_macros.dm b/code/_macros.dm index 4796f93b47..33bdf30ceb 100644 --- a/code/_macros.dm +++ b/code/_macros.dm @@ -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)]") } \ No newline at end of file +#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) diff --git a/code/_macros_vr.dm b/code/_macros_vr.dm index 6a2134fb71..2eecbe69ed 100644 --- a/code/_macros_vr.dm +++ b/code/_macros_vr.dm @@ -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) diff --git a/code/_onclick/click.dm b/code/_onclick/click.dm index b29a1192d9..0cdda2e993 100644 --- a/code/_onclick/click.dm +++ b/code/_onclick/click.dm @@ -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 diff --git a/code/datums/outfits/jobs/security.dm b/code/datums/outfits/jobs/security.dm index 50e5e479d1..f4928816e6 100644 --- a/code/datums/outfits/jobs/security.dm +++ b/code/datums/outfits/jobs/security.dm @@ -41,7 +41,7 @@ //VOREStation Edit - More cyberpunky /decl/hierarchy/outfit/job/security/detective/forensic name = OUTFIT_JOB_NAME("Forensic technician") - head = /obj/item/clothing/head/helmet/detective_alt + head = null suit = /datum/gear/uniform/detective_alt2 uniform = /obj/item/clothing/under/det //VOREStation Edit End diff --git a/code/datums/outfits/outfit.dm b/code/datums/outfits/outfit.dm index add9b82dc9..e859a93983 100644 --- a/code/datums/outfits/outfit.dm +++ b/code/datums/outfits/outfit.dm @@ -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\A [I] appears in \the [user]'s hand!") - 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)) diff --git a/code/game/gamemodes/technomancer/spells/blink.dm b/code/game/gamemodes/technomancer/spells/blink.dm index 100f7bfa33..0bbff7b016 100644 --- a/code/game/gamemodes/technomancer/spells/blink.dm +++ b/code/game/gamemodes/technomancer/spells/blink.dm @@ -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, "You need more energy to blink [AM] away!") @@ -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, "You need more energy to blink yourself away!") @@ -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, "You need more energy to blink [AM] away!") \ No newline at end of file diff --git a/code/game/gamemodes/technomancer/spells/condensation.dm b/code/game/gamemodes/technomancer/spells/condensation.dm index 33222455ea..226ccbed18 100644 --- a/code/game/gamemodes/technomancer/spells/condensation.dm +++ b/code/game/gamemodes/technomancer/spells/condensation.dm @@ -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) \ No newline at end of file diff --git a/code/game/gamemodes/technomancer/spells/control.dm b/code/game/gamemodes/technomancer/spells/control.dm index 8c6a00c4e7..0e0cf5eb20 100644 --- a/code/game/gamemodes/technomancer/spells/control.dm +++ b/code/game/gamemodes/technomancer/spells/control.dm @@ -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, "You command your [controlled_mobs.len > 1 ? "entities" : "[controlled_mobs[1]]"] to \ attack \the [L].") //This is to stop someone from controlling beepsky and getting him to stun someone 5 times a second. diff --git a/code/game/gamemodes/technomancer/spells/energy_siphon.dm b/code/game/gamemodes/technomancer/spells/energy_siphon.dm index 21f7c6e1e7..9bf8dd578f 100644 --- a/code/game/gamemodes/technomancer/spells/energy_siphon.dm +++ b/code/game/gamemodes/technomancer/spells/energy_siphon.dm @@ -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() diff --git a/code/game/gamemodes/technomancer/spells/flame_tongue.dm b/code/game/gamemodes/technomancer/spells/flame_tongue.dm index ce38a45caa..9a52c5d82f 100644 --- a/code/game/gamemodes/technomancer/spells/flame_tongue.dm +++ b/code/game/gamemodes/technomancer/spells/flame_tongue.dm @@ -46,7 +46,7 @@ visible_message("\The [user] reaches out towards \the [L] with the flaming hand, and they ignite!") to_chat(L, "You ignite!") 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. diff --git a/code/game/gamemodes/technomancer/spells/insert/insert.dm b/code/game/gamemodes/technomancer/spells/insert/insert.dm index 53666c41ab..9ac0295e2b 100644 --- a/code/game/gamemodes/technomancer/spells/insert/insert.dm +++ b/code/game/gamemodes/technomancer/spells/insert/insert.dm @@ -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) diff --git a/code/game/gamemodes/technomancer/spells/projectile/projectile.dm b/code/game/gamemodes/technomancer/spells/projectile/projectile.dm index 62ae49b0f0..7585c3a191 100644 --- a/code/game/gamemodes/technomancer/spells/projectile/projectile.dm +++ b/code/game/gamemodes/technomancer/spells/projectile/projectile.dm @@ -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 \ No newline at end of file + return FALSE diff --git a/code/game/gamemodes/technomancer/spells/reflect.dm b/code/game/gamemodes/technomancer/spells/reflect.dm index 756e9e27fc..07f3595eda 100644 --- a/code/game/gamemodes/technomancer/spells/reflect.dm +++ b/code/game/gamemodes/technomancer/spells/reflect.dm @@ -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 diff --git a/code/game/gamemodes/technomancer/spells/warp_strike.dm b/code/game/gamemodes/technomancer/spells/warp_strike.dm index 488214851c..83a2336ab6 100644 --- a/code/game/gamemodes/technomancer/spells/warp_strike.dm +++ b/code/game/gamemodes/technomancer/spells/warp_strike.dm @@ -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") diff --git a/code/game/jobs/job/special_vr.dm b/code/game/jobs/job/special_vr.dm index 1429212e75..2f68ed7791 100644 --- a/code/game/jobs/job/special_vr.dm +++ b/code/game/jobs/job/special_vr.dm @@ -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. diff --git a/code/game/jobs/jobs.dm b/code/game/jobs/jobs.dm index c795d1eb22..9cb8c9c9f1 100644 --- a/code/game/jobs/jobs.dm +++ b/code/game/jobs/jobs.dm @@ -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( ) diff --git a/code/game/machinery/autolathe.dm b/code/game/machinery/autolathe.dm index 03571acf78..f14fe8c846 100644 --- a/code/game/machinery/autolathe.dm +++ b/code/game/machinery/autolathe.dm @@ -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 diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index 2c12343c88..179f8e0e16 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -1319,4 +1319,18 @@ wintick = 0 gameStatus = "CLAWMACHINE_NEW" emagged = 1 - return 1 \ No newline at end of file + 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, "You need 2 tickets to claim a prize!") + return + prizevend(user) + T.pay_tickets() + T.update_icon() + O = T + to_chat(user, "You turn in 2 tickets to the [src] and claim a prize!") + return diff --git a/code/game/machinery/vending_machines.dm b/code/game/machinery/vending_machines.dm index 10607011ce..2b66ffd024 100644 --- a/code/game/machinery/vending_machines.dm +++ b/code/game/machinery/vending_machines.dm @@ -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, diff --git a/code/game/mecha/combat/fighter_vr.dm b/code/game/mecha/combat/fighter_vr.dm new file mode 100644 index 0000000000..4bc4782e9f --- /dev/null +++ b/code/game/mecha/combat/fighter_vr.dm @@ -0,0 +1,8 @@ +/obj/mecha/combat/fighter + starting_components = list( + /obj/item/mecha_parts/component/hull/lightweight, + /obj/item/mecha_parts/component/actuator, + /obj/item/mecha_parts/component/armor, + /obj/item/mecha_parts/component/gas, + /obj/item/mecha_parts/component/electrical + ) diff --git a/code/game/mecha/micro/mechfab_designs_vr.dm b/code/game/mecha/micro/mechfab_designs_vr.dm index 4ef7fa76e3..d2a9095274 100644 --- a/code/game/mecha/micro/mechfab_designs_vr.dm +++ b/code/game/mecha/micro/mechfab_designs_vr.dm @@ -118,7 +118,7 @@ name = "\improper PC-20 \"Lance\" micro laser cannon" //CHOMPedit id = "micro_laser_heavy" req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 3, TECH_POWER = 3) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, "diamond" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1000, MAT_COPPER = 1000, "diamond" = 1000) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/laser/microheavy /datum/design/item/mecha/weapon/grenade_launcher/micro @@ -192,5 +192,5 @@ desc = "A portable medical system used to treat external injuries from afar." id = "mech_medigun" req_tech = list(TECH_MATERIAL = 5, TECH_COMBAT = 5, TECH_BIO = 6) - materials = list(DEFAULT_WALL_MATERIAL = 8000, "gold" = 2000, "silver" = 1750, "diamond" = 1500, "phoron" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 8000, MAT_COPPER = 4000, "gold" = 2000, "silver" = 1750, "diamond" = 1500) build_path = /obj/item/mecha_parts/mecha_equipment/weapon/energy/medigun \ No newline at end of file diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index 95cd873259..6d865085f5 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -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() \ No newline at end of file + return get_rating() diff --git a/code/game/objects/items/devices/gps.dm b/code/game/objects/items/devices/gps.dm index 610ebbc26c..7621f09830 100644 --- a/code/game/objects/items/devices/gps.dm +++ b/code/game/objects/items/devices/gps.dm @@ -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 += "" if(!tracking) - dat += "\[Switch On]\]" + dat += "\[Switch On\]" else - dat += "\[Switch Off]\]" + dat += "\[Switch Off\]" dat += "" dat += "" dat += "" @@ -244,13 +249,12 @@ var/list/GPS_list = list() dat += "" if(istype(gps_data["ref"], /obj/item/device/gps/internal/poi)) - dat += "" + dat += "" else dat += "" if(gps["local"]) - dat += "" - dat += "" + dat += "" else dat += "" @@ -471,9 +475,9 @@ var/list/GPS_list = list() dat += "
Current location[gps_data["my_area_name"]]([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])
[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'.\[Change Tag\]\[Toggle Scan Range\][can_hide_signal ? "\[Toggle Signal Visibility\]":""]
[gps["gps_tag"]][gps["area_name"]][gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "in \the [gps["z_name"]]"][gps["local"] ? "[gps["direction"]] Dist: [round(gps["distance"], 10)]m" : "[gps["z_name"]]"]([gps["x"]], [gps["y"]], [gps["z_name"]])[gps["distance"]]m[gps["degrees"]]° ([gps["direction"]])[gps["distance"]]m[gps["direction"]]Non-local signal.
" if(!tracking) - dat += "\[Switch On]\]" + dat += "\[Switch On\]" else - dat += "\[Switch Off]\]" + dat += "\[Switch Off\]" dat += "" dat += "" dat += "" @@ -485,8 +489,7 @@ var/list/GPS_list = list() var/gps_ref = "\ref[gps["ref"]]" dat += "" if(gps["local"]) - dat += "" - dat += "" + dat += "" else dat += "" if(LAZYACCESS(tracking_devices, gps_ref)) diff --git a/code/game/objects/items/stacks/stack.dm b/code/game/objects/items/stacks/stack.dm index 7d9783df68..f4b52f07aa 100644 --- a/code/game/objects/items/stacks/stack.dm +++ b/code/game/objects/items/stacks/stack.dm @@ -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 */ diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 2ac0098203..ab91eca500 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -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, "[G] must be dried before you roll it into [src].") + if (!G.dry) //This prevents people from just stuffing cheeseburgers into their joint + to_chat(user, "[G.name] must be dried before you add it to [src].") return - var/obj/item/clothing/mask/smokable/cigarette/joint/J = new /obj/item/clothing/mask/smokable/cigarette/joint(user.loc) - to_chat(usr, "You roll the [G.name] into a joint!") - 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, "The [src] is too full to add [G.name].") + 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, "You add the [G.name] to the [src.name].") + 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, "There is nothing in [src]. Add something to it first.") + return + var/obj/item/clothing/mask/smokable/cigarette/J = new crafted_type() + to_chat(user,"You roll the [src] into a blunt!") + 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// diff --git a/code/game/objects/items/weapons/material/twohanded.dm b/code/game/objects/items/weapons/material/twohanded.dm index 1c4ad40773..c45e7125f5 100644 --- a/code/game/objects/items/weapons/material/twohanded.dm +++ b/code/game/objects/items/weapons/material/twohanded.dm @@ -177,4 +177,15 @@ default_material = "DEFAULT_WALL_MATERIAL" fragile = 0 sharp = 1 - edge = 0 \ No newline at end of file + 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") diff --git a/code/game/objects/items/weapons/material/twohanded_vr.dm b/code/game/objects/items/weapons/material/twohanded_vr.dm new file mode 100644 index 0000000000..f21738dd80 --- /dev/null +++ b/code/game/objects/items/weapons/material/twohanded_vr.dm @@ -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." diff --git a/code/game/objects/items/weapons/storage/fancy.dm b/code/game/objects/items/weapons/storage/fancy.dm index e1e6ecd23f..1c5e0e7464 100644 --- a/code/game/objects/items/weapons/storage/fancy.dm +++ b/code/game/objects/items/weapons/storage/fancy.dm @@ -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 diff --git a/code/game/objects/items/weapons/weldbackpack_ch.dm b/code/game/objects/items/weapons/weldbackpack_ch.dm new file mode 100644 index 0000000000..dece91bbe9 --- /dev/null +++ b/code/game/objects/items/weapons/weldbackpack_ch.dm @@ -0,0 +1,4 @@ +/obj/item/weapon/weldpack + sprite_sheets = list( + SPECIES_TESHARI = 'icons/mob/species/seromi/back.dmi' + ) \ No newline at end of file diff --git a/code/game/objects/structures/ghost_pods/event_vr.dm b/code/game/objects/structures/ghost_pods/event_vr.dm index c724b9bd80..4fface95d1 100644 --- a/code/game/objects/structures/ghost_pods/event_vr.dm +++ b/code/game/objects/structures/ghost_pods/event_vr.dm @@ -21,6 +21,7 @@ "Jelly Blob" = /mob/living/simple_mob/animal/space/jelly, "Wolf" = /mob/living/simple_mob/animal/wolf, "Sect Queen" = /mob/living/simple_mob/vore/sect_queen, + "Sect Drone" = /mob/living/simple_mob/vore/sect_drone, "Defanged Xenomorph" = /mob/living/simple_mob/vore/xeno_defanged, ) diff --git a/code/game/objects/structures/loot_piles.dm b/code/game/objects/structures/loot_piles.dm index 12f6f45282..01069b8e23 100644 --- a/code/game/objects/structures/loot_piles.dm +++ b/code/game/objects/structures/loot_piles.dm @@ -376,6 +376,7 @@ Loot piles can be depleted, if loot_depleted is turned on. Note that players wh /obj/item/weapon/tool/wrench, /obj/item/weapon/tool/screwdriver, /obj/item/weapon/tool/wirecutters, + /obj/item/weapon/mining_scanner/advanced, /obj/item/device/multitool, /obj/item/mecha_parts/mecha_equipment/generator, /obj/item/mecha_parts/mecha_equipment/tool/cable_layer, diff --git a/code/modules/client/preference_setup/general/03_body.dm b/code/modules/client/preference_setup/general/03_body.dm index d3d8ec086e..30df7ec640 100644 --- a/code/modules/client/preference_setup/general/03_body.dm +++ b/code/modules/client/preference_setup/general/03_body.dm @@ -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 . += "
Body Color
" . += "Change Color [color_square(pref.r_skin, pref.g_skin, pref.b_skin)]
" + . += "

Genetics Settings

" + + 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" + . += "Ears
" + . += " Style: [ear_display]
" + if(ear_styles_list[pref.ear_style]) + var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style] + if(ear.do_colouration) + . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
" + if(ear.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
" + if(ear.extra_overlay2) + . += "Change Tertiary Color [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]
" + + 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" + . += "Tail
" + . += " Style: [tail_display]
" + + if(tail_styles_list[pref.tail_style]) + var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style] + if(T.do_colouration) + . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
" + if(T.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
" + if(T.extra_overlay2) + . += "Change Tertiary Color [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]
" + + 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" + . += "Wing
" + . += " Style: [wing_display]
" + + if(wing_styles_list[pref.wing_style]) + var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style] + if(W.do_colouration) + . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
" + if(W.extra_overlay) + . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
" + if(W.extra_overlay2) + . += "Change Secondary Color [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]
" + . += "
Body Markings +
" . += "
Current location[gps_data["my_area_name"]]([gps_data["curr_x"]], [gps_data["curr_y"]], [gps_data["curr_z_name"]])
[hide_signal ? "Tagged" : "Broadcasting"] as '[gps_tag]'.\[Change Tag\]\[Toggle Scan Range\][can_hide_signal ? "\[Toggle Signal Visibility\]":""]
[gps["gps_tag"]][gps["area_name"]] ([gps["x"]], [gps["y"]], [gps["z_name"]])[gps["distance"]]m[gps["degrees"]]° ([gps["direction"]])[gps["distance"]]m[gps["direction"]]Non-local signal.
" 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() diff --git a/code/modules/client/preference_setup/loadout/loadout_cyberware.dm b/code/modules/client/preference_setup/loadout/loadout_cyberware.dm index 60a7b82b87..2540e86fc8 100644 --- a/code/modules/client/preference_setup/loadout/loadout_cyberware.dm +++ b/code/modules/client/preference_setup/loadout/loadout_cyberware.dm @@ -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 diff --git a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm index 63f5749c2b..7fe078c775 100644 --- a/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_fluffitems_vr.dm @@ -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") diff --git a/code/modules/client/preference_setup/loadout/loadout_head.dm b/code/modules/client/preference_setup/loadout/loadout_head.dm index e72a23c9c6..ee161f598d 100644 --- a/code/modules/client/preference_setup/loadout/loadout_head.dm +++ b/code/modules/client/preference_setup/loadout/loadout_head.dm @@ -391,4 +391,8 @@ /datum/gear/head/blackngoldheaddress display_name = "black and gold headdress" - path = /obj/item/clothing/head/blackngoldheaddress \ No newline at end of file + path = /obj/item/clothing/head/blackngoldheaddress + +/datum/gear/head/plaguedoctor2 + display_name = "golden plague doctor's hat" + path = /obj/item/clothing/head/plaguedoctorhat/gold \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_mask.dm b/code/modules/client/preference_setup/loadout/loadout_mask.dm index 716cdb4268..5de81409f3 100644 --- a/code/modules/client/preference_setup/loadout/loadout_mask.dm +++ b/code/modules/client/preference_setup/loadout/loadout_mask.dm @@ -24,4 +24,9 @@ /datum/gear/mask/veil display_name = "black veil" - path = /obj/item/clothing/mask/veil \ No newline at end of file + path = /obj/item/clothing/mask/veil + +/datum/gear/mask/plaguedoctor2 + display_name = "golden plague doctor's mask" + path = /obj/item/clothing/mask/gas/plaguedoctor/gold + cost = 3 ///Because it functions as a gas mask, and therefore has a mechanical advantage. \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index decfe8199d..aaa47d1b72 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -175,6 +175,10 @@ datum/gear/suit/duster path = /obj/item/clothing/suit/storage/toggle/labcoat/emt allowed_roles = list("Medical Doctor","Chief Medical Officer","Chemist","Paramedic","Geneticist", "Psychiatrist") +/datum/gear/suit/miscellaneous/labcoat + display_name = "plague doctor's coat" + path = /obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor + /datum/gear/suit/roles/surgical_apron display_name = "surgical apron" path = /obj/item/clothing/suit/surgicalapron diff --git a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm index aa158a1aaa..a61b2f7e0a 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit_vr.dm @@ -71,4 +71,14 @@ //greek thing /datum/gear/suit/chiton display_name = "chiton" - path = /obj/item/clothing/suit/chiton \ No newline at end of file + path = /obj/item/clothing/suit/chiton + + +//oversized t-shirt +/datum/gear/suit/oversize + display_name = "oversized t-shirt (colorable)" + path = /obj/item/clothing/suit/oversize + +/datum/gear/suit/oversize/New() + ..() + gear_tweaks += gear_tweak_free_color_choice \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/loadout_uniform.dm b/code/modules/client/preference_setup/loadout/loadout_uniform.dm index aa6ae67d3e..4d9e530992 100644 --- a/code/modules/client/preference_setup/loadout/loadout_uniform.dm +++ b/code/modules/client/preference_setup/loadout/loadout_uniform.dm @@ -644,4 +644,16 @@ /datum/gear/uniform/gothic2 display_name = "lacey gothic dress" - path = /obj/item/clothing/under/dress/gothic2 \ No newline at end of file + path = /obj/item/clothing/under/dress/gothic2 + +/datum/gear/uniform/flowerskirt + display_name = "flower skirt" + path = /obj/item/clothing/under/flower_skirt + +/datum/gear/uniform/flowerskirt/New() + ..() + gear_tweaks += gear_tweak_free_color_choice + +/datum/gear/uniform/countess + display_name = "countess dress" + path = /obj/item/clothing/under/dress/countess \ No newline at end of file diff --git a/code/modules/client/preference_setup/vore/01_ears.dm b/code/modules/client/preference_setup/vore/01_ears.dm index dea5be0479..c9998dece0 100644 --- a/code/modules/client/preference_setup/vore/01_ears.dm +++ b/code/modules/client/preference_setup/vore/01_ears.dm @@ -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) - . += "

VORE Station Settings

" - - 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" - . += "Ears
" - . += " Style: [ear_display]
" - if(ear_styles_list[pref.ear_style]) - var/datum/sprite_accessory/ears/ear = ear_styles_list[pref.ear_style] - if(ear.do_colouration) - . += "Change Color [color_square(pref.r_ears, pref.g_ears, pref.b_ears)]
" - if(ear.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_ears2, pref.g_ears2, pref.b_ears2)]
" - if(ear.extra_overlay2) - . += "Change Tertiary Color [color_square(pref.r_ears3, pref.g_ears3, pref.b_ears3)]
" - - 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" - . += "Tail
" - . += " Style: [tail_display]
" - - if(tail_styles_list[pref.tail_style]) - var/datum/sprite_accessory/tail/T = tail_styles_list[pref.tail_style] - if(T.do_colouration) - . += "Change Color [color_square(pref.r_tail, pref.g_tail, pref.b_tail)]
" - if(T.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_tail2, pref.g_tail2, pref.b_tail2)]
" - if(T.extra_overlay2) - . += "Change Tertiary Color [color_square(pref.r_tail3, pref.g_tail3, pref.b_tail3)]
" - - 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" - . += "Wing
" - . += " Style: [wing_display]
" - - if(wing_styles_list[pref.wing_style]) - var/datum/sprite_accessory/wing/W = wing_styles_list[pref.wing_style] - if (W.do_colouration) - . += "Change Color [color_square(pref.r_wing, pref.g_wing, pref.b_wing)]
" - if (W.extra_overlay) - . += "Change Secondary Color [color_square(pref.r_wing2, pref.g_wing2, pref.b_wing2)]
" - if (W.extra_overlay2) - . += "Change Secondary Color [color_square(pref.r_wing3, pref.g_wing3, pref.b_wing3)]
" - -/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 ..() diff --git a/code/modules/client/preference_setup/vore/07_traits.dm b/code/modules/client/preference_setup/vore/07_traits.dm index 83f94d439b..17147acb27 100644 --- a/code/modules/client/preference_setup/vore/07_traits.dm +++ b/code/modules/client/preference_setup/vore/07_traits.dm @@ -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 diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1b03300ddd..918294ff7f 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -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, "You roll down your [src]'s sleeves.") update_clothing_icon() - /obj/item/clothing/under/rank/New() sensor_mode = pick(0,1,2,3) ..() diff --git a/code/modules/clothing/clothing_vr.dm b/code/modules/clothing/clothing_vr.dm index 68df04ae22..1c4b8cd9f3 100644 --- a/code/modules/clothing/clothing_vr.dm +++ b/code/modules/clothing/clothing_vr.dm @@ -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 diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 7846061025..0d567bb7e8 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -126,6 +126,11 @@ siemens_coefficient = 0.9 body_parts_covered = 0 +/obj/item/clothing/head/plaguedoctorhat/gold + name = "golden plague doctor's hat" + desc = "These were once used by plague doctors, allegedly. This one has gold accents." + icon_state = "plaguedoctor2" + /obj/item/clothing/head/hasturhood name = "hastur's hood" desc = "It's unspeakably stylish" diff --git a/code/modules/clothing/masks/gasmask.dm b/code/modules/clothing/masks/gasmask.dm index 25b9e00f68..a73e6d7a73 100644 --- a/code/modules/clothing/masks/gasmask.dm +++ b/code/modules/clothing/masks/gasmask.dm @@ -69,6 +69,11 @@ armor = list(melee = 0, bullet = 0, laser = 2,energy = 2, bomb = 0, bio = 90, rad = 0) body_parts_covered = HEAD|FACE|EYES +/obj/item/clothing/mask/gas/plaguedoctor/gold + name = "gold plague doctor mask" + desc = "A modern version of the age old classic, this mask is both capable of filtering air, and connecting to an air supply. This one is gold." + icon_state = "plaguedoctor2" + /obj/item/clothing/mask/gas/swat name = "\improper SWAT mask" desc = "A close-fitting tactical mask that can be connected to an air supply." diff --git a/code/modules/clothing/suits/bio.dm b/code/modules/clothing/suits/bio.dm index 5fb635bca2..de610ca3ee 100644 --- a/code/modules/clothing/suits/bio.dm +++ b/code/modules/clothing/suits/bio.dm @@ -86,10 +86,10 @@ /obj/item/clothing/head/bio_hood/cmo icon_state = "bio_cmo" -//Plague Dr mask can be found in clothing/masks/gasmask.dm +//Plague Dr mask can be found in clothing/masks/gasmask.dm. Golden can be found in labcoat.dm. /obj/item/clothing/suit/bio_suit/plaguedoctorsuit - name = "Plague doctor suit" + name = "plague doctor suit" desc = "It protected doctors from the Black Death, back then. You bet your arse it's gonna help you against viruses." icon_state = "plaguedoctor" item_state_slots = list(slot_r_hand_str = "bio", slot_l_hand_str = "bio") - flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER + flags_inv = HIDEGLOVES|HIDEJUMPSUIT|HIDETAIL|HIDETIE|HIDEHOLSTER \ No newline at end of file diff --git a/code/modules/clothing/suits/labcoat.dm b/code/modules/clothing/suits/labcoat.dm index cc7dfa3be5..2560692656 100644 --- a/code/modules/clothing/suits/labcoat.dm +++ b/code/modules/clothing/suits/labcoat.dm @@ -104,4 +104,10 @@ /obj/item/clothing/suit/storage/toggle/labcoat/blue_edge name = "blue-edged labcoat" desc = "A suit that protects against minor chemical spills. This one has blue trim." - icon_state = "blue_edge_labcoat" \ No newline at end of file + icon_state = "blue_edge_labcoat" + +/obj/item/clothing/suit/storage/toggle/labcoat/plaguedoctor + name = "golden plague doctor suit" + desc = "If it worked then, it works now. This classic design comes in gold." + icon_state = "plaguedoctor2" + index = 1 diff --git a/code/modules/clothing/suits/miscellaneous_vr.dm b/code/modules/clothing/suits/miscellaneous_vr.dm index 306dfc35db..2f4ae0c5a7 100644 --- a/code/modules/clothing/suits/miscellaneous_vr.dm +++ b/code/modules/clothing/suits/miscellaneous_vr.dm @@ -4,9 +4,16 @@ /obj/item/clothing/suit/chiton name = "chiton" desc = "A traditional piece of clothing from Greece." - icon = 'icons/mob/suit_vr.dmi' + icon = 'icons/obj/clothing/suits_vr.dmi' icon_state = "chiton" - icon_override = 'icons/obj/clothing/suits_vr.dmi' //why won't it work without this WHY GOD PLEASE + icon_override = 'icons/mob/suit_vr.dmi' + +/obj/item/clothing/suit/oversize + name = "oversized t-shirt" + desc = "This ain't your daddy's shirt! Well, it might be..." + icon = 'icons/obj/clothing/suits_vr.dmi' + icon_state = "oversize" + icon_override = 'icons/mob/suit_vr.dmi' //HERE BE TAUR RELATED CLOTHES diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index c9a6bfa30f..80eba8000d 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -560,12 +560,18 @@ icon_state = "pentagram" index = 1 -obj/item/clothing/under/dress/yellowswoop +/obj/item/clothing/under/dress/yellowswoop name = "yellow swooped dress" desc = "A yellow dress that swoops to the side." icon_state = "yellowswoop" index = 1 +/obj/item/clothing/under/dress/countess + name = "countess dress" + desc = "A red and black dress fit for a countess." + icon_state = "countess" + index = 1 + /* * wedding stuff */ @@ -895,6 +901,12 @@ Uniforms and such icon_state = "disheveled" index = 1 +/obj/item/clothing/under/flower_skirt + name = "flower skirt" + desc = "A flowery skirt that comes in a variety of colors." + icon_state = "flowerskirt" + index = 1 + /* * swimsuit */ diff --git a/code/modules/food/food/snacks.dm b/code/modules/food/food/snacks.dm index 92c786680c..a00ec410a5 100644 --- a/code/modules/food/food/snacks.dm +++ b/code/modules/food/food/snacks.dm @@ -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 diff --git a/code/modules/materials/material_recipes.dm b/code/modules/materials/material_recipes.dm index 1595b16dd9..bc6b382ae2 100644 --- a/code/modules/materials/material_recipes.dm +++ b/code/modules/materials/material_recipes.dm @@ -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) diff --git a/code/modules/mining/drilling/scanner.dm b/code/modules/mining/drilling/scanner.dm index 269f218f9c..ef113ca7b7 100644 --- a/code/modules/mining/drilling/scanner.dm +++ b/code/modules/mining/drilling/scanner.dm @@ -7,6 +7,8 @@ origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1) matter = list(DEFAULT_WALL_MATERIAL = 150) var/scan_time = 2 SECONDS + var/range = 2 + var/exact = FALSE /obj/item/weapon/mining_scanner/attack_self(mob/user as mob) to_chat(user, "You begin sweeping \the [src] about, scanning for metal deposits.") @@ -17,7 +19,7 @@ ScanTurf(get_turf(user), user) -/obj/item/weapon/mining_scanner/proc/ScanTurf(var/atom/target, var/mob/user, var/exact = FALSE) +/obj/item/weapon/mining_scanner/proc/ScanTurf(var/atom/target, var/mob/user) var/list/metals = list( "surface minerals" = 0, "industrial metals" = 0, @@ -30,7 +32,7 @@ var/turf/Turf = get_turf(target) - for(var/turf/simulated/T in range(2, Turf)) + for(var/turf/simulated/T in range(range, Turf)) if(!T.has_resources) continue @@ -66,3 +68,23 @@ message += "
- [result] of [ore_type]." to_chat(user, message) + +/obj/item/weapon/mining_scanner/advanced + name = "advanced ore detector" + desc = "An advanced device used to locate ore deep underground." + description_info = "This scanner has variable range, you can use the Set Scanner Range verb, or alt+click the device. Drills dig in 5x5." + origin_tech = list(TECH_MAGNET = 4, TECH_ENGINEERING = 4) + matter = list(DEFAULT_WALL_MATERIAL = 150) + scan_time = 0.5 SECONDS + exact = TRUE + +/obj/item/weapon/mining_scanner/advanced/AltClick(mob/user) + change_size() + +/obj/item/weapon/mining_scanner/advanced/verb/change_size() + set name = "Set Scanner Range" + set category = "Object" + var/custom_range = input("Scanner Range","Pick a range to scan. ") as null|anything in list(0,1,2,3,4,5,6,7) + if(custom_range) + range = custom_range + to_chat(usr, "Scanner will now look up to [range] tile(s) away.") \ No newline at end of file diff --git a/code/modules/mining/mineral_effect.dm b/code/modules/mining/mineral_effect.dm index 9406231c56..12781a7ea4 100644 --- a/code/modules/mining/mineral_effect.dm +++ b/code/modules/mining/mineral_effect.dm @@ -1,6 +1,6 @@ /obj/effect/mineral name = "mineral vein" - icon = 'icons/obj/mining_vr.dmi' //VOREStation Edit + icon = 'icons/obj/mining.dmi' desc = "Shiny." mouse_opacity = 0 density = 0 diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index bbc4b5214f..629237fa2b 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -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) diff --git a/code/modules/mob/living/carbon/human/emote.dm b/code/modules/mob/living/carbon/human/emote.dm index 87e3f38b91..81a49ae6fe 100644 --- a/code/modules/mob/living/carbon/human/emote.dm +++ b/code/modules/mob/living/carbon/human/emote.dm @@ -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 +="\[Done\]" HTML += "" 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, "You don't have a tail that supports this.") + 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, "You don't have a wingtype that supports this.") + return 0 + + var/new_flapping = isnull(setting) ? !flapping : setting + if(new_flapping != flapping) + flapping = setting + update_wing_showing() + return 1 diff --git a/code/modules/mob/living/carbon/human/emote_vr.dm b/code/modules/mob/living/carbon/human/emote_vr.dm index 88e3b3d6c9..5eeda3a8e4 100644 --- a/code/modules/mob/living/carbon/human/emote_vr.dm +++ b/code/modules/mob/living/carbon/human/emote_vr.dm @@ -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, "You don't have a tail that supports this.") - 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, "You don't have a tail that supports this.") - 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." diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 208e1e1ffc..34b93b2573 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -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 + diff --git a/code/modules/mob/living/carbon/human/human_defines_vr.dm b/code/modules/mob/living/carbon/human/human_defines_vr.dm index aa789a8848..0ac1b641d3 100644 --- a/code/modules/mob/living/carbon/human/human_defines_vr.dm +++ b/code/modules/mob/living/carbon/human/human_defines_vr.dm @@ -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? diff --git a/code/modules/mob/living/carbon/human/species/species.dm b/code/modules/mob/living/carbon/human/species/species.dm index 303f8ccb85..e4b3ed606e 100644 --- a/code/modules/mob/living/carbon/human/species/species.dm +++ b/code/modules/mob/living/carbon/human/species/species.dm @@ -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 @@ "[H] boops [target]'s nose.", \ "You boop [target] on the nose.", ) //VOREStation Edit End - else H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ - "You hug [target] to make [t_him] feel better!") //End VOREStation Edit + else + H.visible_message("[H] hugs [target] to make [t_him] feel better!", \ + "You hug [target] to make [t_him] feel better!") /datum/species/proc/remove_inherent_verbs(var/mob/living/carbon/human/H) if(inherent_verbs) diff --git a/code/modules/mob/living/carbon/human/species/species_vr.dm b/code/modules/mob/living/carbon/human/species/species_vr.dm index 558924a784..fb9beed574 100644 --- a/code/modules/mob/living/carbon/human/species/species_vr.dm +++ b/code/modules/mob/living/carbon/human/species/species_vr.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/species/station/station.dm b/code/modules/mob/living/carbon/human/species/station/station.dm index e26679f856..f38c8844e7 100644 --- a/code/modules/mob/living/carbon/human/species/station/station.dm +++ b/code/modules/mob/living/carbon/human/species/station/station.dm @@ -322,7 +322,7 @@ breath_heat_level_3 = 1350 //Default 1250 reagent_tag = IS_SKRELL - allergens = MEAT|FISH|DAIRY + allergens = MEAT|FISH|DAIRY|EGGS has_limbs = list( BP_TORSO = list("path" = /obj/item/organ/external/chest), diff --git a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm index b9a907f027..f6f94c8b53 100644 --- a/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm +++ b/code/modules/mob/living/carbon/human/species/station/traits_vr/neutral.dm @@ -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 diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index ed7935e871..805e8b7585 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -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 diff --git a/code/modules/mob/living/living_defines.dm b/code/modules/mob/living/living_defines.dm index 4238a56080..36e4a0b092 100644 --- a/code/modules/mob/living/living_defines.dm +++ b/code/modules/mob/living/living_defines.dm @@ -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 diff --git a/code/modules/mob/living/living_vr.dm b/code/modules/mob/living/living_vr.dm index 3103ae4928..ab5607d22b 100644 --- a/code/modules/mob/living/living_vr.dm +++ b/code/modules/mob/living/living_vr.dm @@ -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." diff --git a/code/modules/mob/living/riding.dm b/code/modules/mob/living/riding.dm new file mode 100644 index 0000000000..3a614a4b6d --- /dev/null +++ b/code/modules/mob/living/riding.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 876bcf746e..a26a4bfd1e 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -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 diff --git a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm index 4c3543e15e..d4892de045 100644 --- a/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_modules/station_vr.dm @@ -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 ..() diff --git a/code/modules/mob/living/silicon/robot/robot_vr.dm b/code/modules/mob/living/silicon/robot/robot_vr.dm index 570d9cec99..976e0a09e5 100644 --- a/code/modules/mob/living/silicon/robot/robot_vr.dm +++ b/code/modules/mob/living/silicon/robot/robot_vr.dm @@ -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. diff --git a/code/modules/mob/living/simple_mob/simple_mob_vr.dm b/code/modules/mob/living/simple_mob/simple_mob_vr.dm index f843df402d..c7ce2c4912 100644 --- a/code/modules/mob/living/simple_mob/simple_mob_vr.dm +++ b/code/modules/mob/living/simple_mob/simple_mob_vr.dm @@ -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. diff --git a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm index 22e57ca683..8fe1799d12 100644 --- a/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm +++ b/code/modules/mob/living/simple_mob/subtypes/animal/passive/mouse.dm @@ -7,6 +7,7 @@ item_state = "mouse_gray" icon_living = "mouse_gray" icon_dead = "mouse_gray_dead" + kitchen_tag = "rodent" maxHealth = 5 health = 5 diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm new file mode 100644 index 0000000000..619e0acad0 --- /dev/null +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_drone.dm @@ -0,0 +1,67 @@ +/datum/category_item/catalogue/fauna/sect_drone + name = "Creature - Sect Drone" + desc = "Database Update Pending" //TODO: Virgo Lore Writing WIP + value = CATALOGUER_REWARD_MEDIUM + +/mob/living/simple_mob/vore/sect_drone + name = "sect drone" + desc = "A large, chitin-plated insectoid whose multiple cyan eyes cast a frightful blue light. Its \ + abdomen has an unusually soft and... flexible-looking underbelly..." + + icon_dead = "sect_drone_dead" + icon_living = "sect_drone" + icon_state = "sect_drone" + icon = 'icons/mob/vore64x64.dmi' + vis_height = 64 + has_eye_glow = TRUE + + faction = "insects" + maxHealth = 90 + health = 90 + see_in_dark = 8 + + movement_cooldown = 3 + + melee_damage_lower = 6 + melee_damage_upper = 12 + grab_resist = 100 // you can't even wrap your arms around this thing, how could you hope to grab it??? + + vore_active = 1 + vore_capacity = 1 + vore_pounce_chance = 70 // v hongry buggo + vore_icons = SA_ICON_LIVING + + //Beeg bug don't give a fuck about atmos. Something something, phoron mutation. + min_oxy = 0 + max_oxy = 0 + min_tox = 0 + max_tox = 0 + min_co2 = 0 + max_co2 = 0 + min_n2 = 0 + max_n2 = 0 + minbodytemp = 0 + + response_help = "pats" + response_disarm = "tries to shove" + response_harm = "hits" + attacktext = list("slashed") + friendly = list("nuzzles", "caresses", "headbumps against", "leans against", "nibbles affectionately on", "antennae tickles") // D'awww + + old_x = -16 + old_y = 0 + default_pixel_x = -16 + pixel_x = -16 + pixel_y = 0 + + max_buckled_mobs = 1 //Yeehaw + can_buckle = TRUE + buckle_movable = TRUE + buckle_lying = FALSE + mount_offset_y = 7 + + ai_holder_type = /datum/ai_holder/simple_mob/melee + say_list_type = /datum/say_list/sect_drone + +/datum/say_list/sect_drone + say_got_target = list("chitters threateningly!") \ No newline at end of file diff --git a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm index e5eaff69a4..bb0933dd86 100644 --- a/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm +++ b/code/modules/mob/living/simple_mob/subtypes/vore/sect_queen.dm @@ -1,6 +1,6 @@ // Beeg bug do beeg noms. It also glows in the dark for maximum spook power. -/datum/category_item/catalogue/fauna/sect_queen //TODO: VIRGO_LORE_WRITING_WIP +/datum/category_item/catalogue/fauna/sect_queen name = "Creature - Sect Queen" desc = "A massively-sized insect that is native, although rarely spotted outside of its colony, to Virgo 3B. \ It bears the combined physical traits of several of Earth's insects. Its forelegs have claws bearing serrated \ @@ -28,7 +28,7 @@ maxHealth = 200 health = 200 see_in_dark = 8 - + melee_damage_lower = 8 melee_damage_upper = 16 @@ -61,7 +61,7 @@ default_pixel_x = -16 pixel_x = -16 pixel_y = 0 - + max_buckled_mobs = 1 //Yeehaw can_buckle = TRUE buckle_movable = TRUE diff --git a/code/modules/mob/mob_defines_vr.dm b/code/modules/mob/mob_defines_vr.dm index 41c27a41d0..ff5f1ae582 100644 --- a/code/modules/mob/mob_defines_vr.dm +++ b/code/modules/mob/mob_defines_vr.dm @@ -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 diff --git a/code/modules/mob/mob_movement.dm b/code/modules/mob/mob_movement.dm index 95732bad6a..ebcc9cf35a 100644 --- a/code/modules/mob/mob_movement.dm +++ b/code/modules/mob/mob_movement.dm @@ -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) diff --git a/code/modules/mob/new_player/preferences_setup.dm b/code/modules/mob/new_player/preferences_setup.dm index 953f4d01ac..7c5d00773c 100644 --- a/code/modules/mob/new_player/preferences_setup.dm +++ b/code/modules/mob/new_player/preferences_setup.dm @@ -252,8 +252,12 @@ /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.toggle_tail(setting = TRUE) + mannequin.toggle_wing(setting = TRUE) COMPILE_OVERLAYS(mannequin) update_character_previews(new /mutable_appearance(mannequin)) diff --git a/code/modules/mob/new_player/preferences_setup_vr.dm b/code/modules/mob/new_player/preferences_setup_vr.dm index 1f01884b60..dca0ff56ec 100644 --- a/code/modules/mob/new_player/preferences_setup_vr.dm +++ b/code/modules/mob/new_player/preferences_setup_vr.dm @@ -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) \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories.dm b/code/modules/mob/new_player/sprite_accessories.dm index 2e9c030c54..f04cde9c4c 100644 --- a/code/modules/mob/new_player/sprite_accessories.dm +++ b/code/modules/mob/new_player/sprite_accessories.dm @@ -1519,6 +1519,7 @@ shaved /datum/sprite_accessory/facial_hair icon = 'icons/mob/Human_face.dmi' + color_blend_mode = ICON_ADD /datum/sprite_accessory/facial_hair/shaved name = "Shaved" @@ -1707,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 @@ -2005,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 diff --git a/code/modules/mob/new_player/sprite_accessories_ear.dm b/code/modules/mob/new_player/sprite_accessories_ear.dm new file mode 100644 index 0000000000..6262b8ba60 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_ear.dm @@ -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" \ No newline at end of file diff --git a/code/modules/mob/new_player/sprite_accessories_ear_vr.dm b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm new file mode 100644 index 0000000000..7705e1a821 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_ear_vr.dm @@ -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 diff --git a/code/modules/mob/new_player/sprite_accessories_extra.dm b/code/modules/mob/new_player/sprite_accessories_extra.dm new file mode 100644 index 0000000000..a124eff96b --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_extra.dm @@ -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) diff --git a/code/modules/mob/new_player/sprite_accessories_extra_vr.dm b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm new file mode 100644 index 0000000000..fd23037699 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_extra_vr.dm @@ -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) diff --git a/code/modules/mob/new_player/sprite_accessories_tail.dm b/code/modules/mob/new_player/sprite_accessories_tail.dm new file mode 100644 index 0000000000..012591a895 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_tail.dm @@ -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" diff --git a/code/modules/vore/appearance/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm similarity index 50% rename from code/modules/vore/appearance/sprite_accessories_vr.dm rename to code/modules/mob/new_player/sprite_accessories_tail_vr.dm index bcb0a09f6e..d76244aba7 100644 --- a/code/modules/vore/appearance/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_tail_vr.dm @@ -1,945 +1,3 @@ -/* - Hello and welcome to VOREStation sprite_accessories: For a more general overview - please read sprite_accessories.dm. This file is for ears and tails. - This is intended to be friendly for people with little to no actual coding experience. - !!WARNING!!: changing existing accessory information can be VERY hazardous to savefiles, - to the point where you may completely corrupt a server's savefiles. Please refrain - from doing this unless you absolutely know what you are doing, and have defined a - conversion in savefile.dm -*/ - -// Add Additional variable onto sprite_accessory -/datum/sprite_accessory - // Ckey of person allowed to use this, if defined. - list/ckeys_allowed = null - apply_restrictions = FALSE //whether to apply restrictions for specific tails/ears/wings - -/* -//////////////////////////// -/ =--------------------= / -/ == 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 - - 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-unique ears - -/datum/sprite_accessory/ears/shadekin - name = "Shadekin Ears, colorable" - desc = "" - icon_state = "shadekin" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -// 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" - -/datum/sprite_accessory/ears/lilimoth_antennae - name = "citheronia antennae (Kira72)" - desc = "" - icon_state = "lilimoth_antennae" - -/datum/sprite_accessory/ears/molenar_deathclaw - name = "deathclaw ears (Molenar)" - desc = "" - icon_state = "molenar-deathclaw" - -/datum/sprite_accessory/ears/miria_fluffdragon - name = "fluffdragon ears (Miria Masters)" - desc = "" - icon_state = "miria-fluffdragonears" - -/datum/sprite_accessory/ears/miria_kitsune - name = "kitsune ears (Miria Masters)" - desc = "" - icon_state = "miria-kitsuneears" - -/datum/sprite_accessory/ears/runac - name = "fennecsune ears (Runac)" - desc = "" - icon_state = "runac" - -/datum/sprite_accessory/ears/kerena - name = "wingwolf ears (Kerena)" - desc = "" - icon_state = "kerena" - -/datum/sprite_accessory/ears/rosey - name = "tritail kitsune ears (Rosey)" - desc = "" - icon_state = "rosey" - do_colouration = 1 - color_blend_mode = ICON_MULTIPLY - -/datum/sprite_accessory/ears/aronai - name = "aronai ears/head (Aronai)" - desc = "" - icon_state = "aronai" - -/datum/sprite_accessory/ears/holly - name = "tigress ears (Holly Sharp)" - desc = "" - icon_state = "tigressears" - -/datum/sprite_accessory/ears/molenar_inkling - name = "teal mature inkling hair (Kari Akiren)" - desc = "" - icon_state = "molenar-tentacle" - -/datum/sprite_accessory/ears/shock - name = "pharoah hound ears (Shock Diamond)" - desc = "" - icon_state = "shock" - -/datum/sprite_accessory/ears/alurane - name = "alurane ears/hair (Pumila)" - desc = "" - icon_state = "alurane-ears" - -/datum/sprite_accessory/ears/frost - name = "Frost antenna" - desc = "" - icon_state = "frosted_tips" - -/datum/sprite_accessory/ears/sylv_pip - name = "sylveon ears and ribbons (Pip Shyner)" - desc = "" - icon_state = "pipears" - -/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 - - - - -/* -//////////////////////////// -/ =--------------------= / -/ == 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. - - 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 - -/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" - -/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" - -/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" - -/datum/sprite_accessory/wing/miria_fluffdragon - name = "fluffdragon wings (Miria Masters)" - desc = "" - icon_state = "miria-fluffdragontail" - -/datum/sprite_accessory/wing/scree - name = "green taj wings (Scree)" - desc = "" - icon_state = "scree-wings" - -/datum/sprite_accessory/wing/liquidfirefly_gazer //I g-guess this could be considered wings? - name = "gazer eyestalks" - desc = "" - icon_state = "liquidfirefly-eyestalks" - -/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" - -/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" - /* //////////////////////////// / =--------------------= / @@ -951,20 +9,7 @@ name = "You should not see this..." icon = 'icons/mob/vore/tails_vr.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_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/tail/New() . = ..() @@ -1201,36 +246,43 @@ name = "quintail kitsune tails (Molenar)" desc = "" icon_state = "molenar-kitsune" + ckeys_allowed = list("molenar") /datum/sprite_accessory/tail/miria_fluffdragon name = "fluffdragon tail (Miria Masters)" desc = "" icon_state = "miria-fluffdragontail" + ckeys_allowed = list("miriamasters") /datum/sprite_accessory/tail/miria_kitsune name = "Black kitsune tails (Miria Masters)" desc = "" icon_state = "miria-kitsunetail" + ckeys_allowed = list("miriamasters") /datum/sprite_accessory/tail/molenar_deathclaw name = "deathclaw bits (Molenar)" desc = "" icon_state = "molenar-deathclaw" + ckeys_allowed = list("molenar","silvertalismen","jertheace") /datum/sprite_accessory/tail/runac name = "fennecsune tails (Runac)" desc = "" icon_state = "runac" + ckeys_allowed = list("rebcom1807") /datum/sprite_accessory/tail/reika //Leaving this since it was too hard to split the wings from the tail. name = "fox tail (+ beewings) (Reika)" desc = "" icon_state = "reika" + ckeys_allowed = list("rikaru19xjenkins") /datum/sprite_accessory/tail/rosey name = "tritail kitsune tails (Rosey)" desc = "" icon_state = "rosey_three" + ckeys_allowed = list("joey4298") /datum/sprite_accessory/tail/rosey2 name = "pentatail kitsune tails (Rosey)" //I predict seven tails next. ~CK @@ -1238,32 +290,38 @@ icon_state = "rosey_five" do_colouration = 1 color_blend_mode = ICON_MULTIPLY + ckeys_allowed = list("joey4298") /datum/sprite_accessory/tail/scree name = "green taj tail (Scree)" desc = "" icon_state = "scree" + ckeys_allowed = list("scree") /datum/sprite_accessory/tail/aronai name = "aronai tail (Aronai)" desc = "" icon_state = "aronai" + ckeys_allowed = list("arokha") /datum/sprite_accessory/tail/cabletail name = "cabletail" desc = "cabletail" icon_state = "cabletail" + ckeys_allowed = list("tucker0666") /datum/sprite_accessory/tail/featherfluff_tail name = "featherfluff_tail" desc = "" icon_state = "featherfluff_tail" + ckeys_allowed = list("tucker0666") /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)" @@ -1288,6 +346,7 @@ name = "tigress tail (Holly)" desc = "" icon_state = "tigresstail" + ckeys_allowed = list("hoodoo") /datum/sprite_accessory/tail/satyr name = "goat legs, colorable" @@ -1927,6 +986,8 @@ 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" @@ -2077,30 +1138,3 @@ do_colouration = 1 color_blend_mode = ICON_MULTIPLY ckeys_allowed = list("prettiebyrd") - -/* -//////////////////////////// -/ =--------------------= / -/ == 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 //CHOMP Comment: Leaving the name Verie here because I cannot be arsed to change it in other code - name = "hair glow" //CHOMP Edit: removed the name Verie - desc = "" - icon_state = "verie_hair_glow" //CHOMP Comment: Leaving the name Verie here because I cannot be arsed to change the .dmi - ignores_lighting = 1 - //ckeys_allowed = list("vitoras") // This probably won't come into play EVER but better safe than sorry diff --git a/code/modules/mob/new_player/sprite_accessories_taur.dm b/code/modules/mob/new_player/sprite_accessories_taur.dm new file mode 100644 index 0000000000..748a6904b4 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_taur.dm @@ -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("[M] stops riding [ridden]!") + +//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,"This isn't a pony show! You need to be bigger for them to ride.") +// 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,"Too many legs. TOO MANY LEGS!!") + 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("[M] starts riding [name]!") + +/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" diff --git a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm similarity index 88% rename from code/modules/vore/appearance/sprite_accessories_taur_vr.dm rename to code/modules/mob/new_player/sprite_accessories_taur_vr.dm index 649cdf76a9..c9e451c625 100644 --- a/code/modules/vore/appearance/sprite_accessories_taur_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_taur_vr.dm @@ -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("[M] stops riding [ridden]!") - -//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,"This isn't a pony show! You need to be bigger for them to ride.") - 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,"Too few legs. TOO FEW LEGS!!") - return FALSE - to_chat(src,"Too many legs. TOO MANY LEGS!!") - 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("[M] starts riding [name]!") - -/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,12 +484,12 @@ name = "Shadekin Long Tail" icon_state = "shadekin_long_s" -/datum/sprite_accessory/tail/taur/pawcow // this grabs suit sprites from the normal cow, the outline is the same except for the tail +/datum/sprite_accessory/tail/taur/pawcow // this grabs suit sprites from the normal cow, the outline is the same name = "Cow w/ paws (Taur)" icon_state = "pawcow_s" extra_overlay = "pawcow_markings" suit_sprites = 'icons/mob/taursuits_cow_vr.dmi' - icon_sprite_tag = "pawcow" + icon_sprite_tag = "cow" msg_owner_disarm_run = "You quickly push %prey to the ground with your paw!" msg_prey_disarm_run = "%owner pushes you down to the ground with their paw!" diff --git a/code/modules/mob/new_player/sprite_accessories_vr.dm b/code/modules/mob/new_player/sprite_accessories_vr.dm index 663b8b8c2d..ce783bcddb 100644 --- a/code/modules/mob/new_player/sprite_accessories_vr.dm +++ b/code/modules/mob/new_player/sprite_accessories_vr.dm @@ -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 diff --git a/code/modules/mob/new_player/sprite_accessories_wing.dm b/code/modules/mob/new_player/sprite_accessories_wing.dm new file mode 100644 index 0000000000..486e81f4b1 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_wing.dm @@ -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 diff --git a/code/modules/mob/new_player/sprite_accessories_wing_vr.dm b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm new file mode 100644 index 0000000000..7cc4dfc081 --- /dev/null +++ b/code/modules/mob/new_player/sprite_accessories_wing_vr.dm @@ -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" diff --git a/code/modules/multiz/movement.dm b/code/modules/multiz/movement.dm index 02c939bd19..ce8e1f6f8a 100644 --- a/code/modules/multiz/movement.dm +++ b/code/modules/multiz/movement.dm @@ -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, "You can't fly in your current state.") diff --git a/code/modules/news/news_init.dm b/code/modules/news/news_init.dm index 33adc2d530..2c78e4baf8 100644 --- a/code/modules/news/news_init.dm +++ b/code/modules/news/news_init.dm @@ -2,7 +2,7 @@ GLOBAL_DATUM_INIT(news_data, /datum/lore/news, new) /datum/feed_network/New() CreateFeedChannel("Station Announcements", "NanoTrasen", 1, 1, "New Station Announcement Available") - CreateFeedChannel("Vir News Network", "Oculum Broadcast", 1, 1, "Updates from the Vir News Network!") + //CreateFeedChannel("Vir News Network", "Oculum Broadcast", 1, 1, "Updates from the Vir News Network!") //VOREStation Removal /datum/lore/news var/datum/feed_channel/station_newspaper diff --git a/code/modules/organs/organ_external.dm b/code/modules/organs/organ_external.dm index 00fd0d98a8..246cb23d04 100644 --- a/code/modules/organs/organ_external.dm +++ b/code/modules/organs/organ_external.dm @@ -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 \ No newline at end of file + 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 diff --git a/code/modules/organs/organ_external_vr.dm b/code/modules/organs/organ_external_vr.dm index 1742259864..0e3fb07d9e 100644 --- a/code/modules/organs/organ_external_vr.dm +++ b/code/modules/organs/organ_external_vr.dm @@ -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 \ No newline at end of file diff --git a/code/modules/organs/robolimbs.dm b/code/modules/organs/robolimbs.dm index 8da2957ebb..77d7a9436d 100644 --- a/code/modules/organs/robolimbs.dm +++ b/code/modules/organs/robolimbs.dm @@ -455,6 +455,7 @@ var/const/standard_monitor_styles = "blank=ipc_blank;\ company = "Zeng-Hu" desc = "This limb has a rubbery fleshtone covering with visible seams." icon = 'icons/mob/human_races/cyberlimbs/zenghu/zenghu_main.dmi' + species_alternates = list(SPECIES_TAJ = "Zeng-Hu - Tajaran") unavailable_to_build = 1 skin_tone = 1 modular_bodyparts = MODULAR_BODYPART_PROSTHETIC //VOREStation Edit - remove the restrictions diff --git a/code/modules/organs/robolimbs_custom.dm b/code/modules/organs/robolimbs_custom.dm new file mode 100644 index 0000000000..15df0c98c8 --- /dev/null +++ b/code/modules/organs/robolimbs_custom.dm @@ -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" diff --git a/code/modules/organs/robolimbs_vr.dm b/code/modules/organs/robolimbs_vr.dm index 44953be646..b5ba994214 100644 --- a/code/modules/organs/robolimbs_vr.dm +++ b/code/modules/organs/robolimbs_vr.dm @@ -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;\ diff --git a/code/modules/organs/subtypes/standard.dm b/code/modules/organs/subtypes/standard.dm index 1c4fb5ee27..79eb04f255 100644 --- a/code/modules/organs/subtypes/standard.dm +++ b/code/modules/organs/subtypes/standard.dm @@ -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 @@ "You make \the [I] kiss \the [src]!.") 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" diff --git a/code/modules/organs/subtypes/standard_vr.dm b/code/modules/organs/subtypes/standard_vr.dm index bf429cb878..754f7d4bf8 100644 --- a/code/modules/organs/subtypes/standard_vr.dm +++ b/code/modules/organs/subtypes/standard_vr.dm @@ -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 diff --git a/code/modules/power/tesla/telsa_construction.dm b/code/modules/power/tesla/telsa_construction.dm index ba7b3c4d0e..b13c9357a0 100644 --- a/code/modules/power/tesla/telsa_construction.dm +++ b/code/modules/power/tesla/telsa_construction.dm @@ -23,7 +23,6 @@ name = T_BOARD("grounding rod") build_path = /obj/machinery/power/grounding_rod board_type = new /datum/frame/frame_types/machine - matter = list(DEFAULT_WALL_MATERIAL = 50, "glass" = 50) req_components = list() /datum/category_item/autolathe/engineering/grounding_rod diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index b96e223ed9..797ffc4371 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -1,496 +1,518 @@ -#define PROCESS_REACTION_ITER 5 //when processing a reaction, iterate this many times - -/datum/reagents - var/list/datum/reagent/reagent_list = list() - var/total_volume = 0 - var/maximum_volume = 100 - var/atom/my_atom = null - -/datum/reagents/New(var/max = 100, atom/A = null) - ..() - maximum_volume = max - my_atom = A - - //I dislike having these here but map-objects are initialised before world/New() is called. >_> - if(!SSchemistry.chemical_reagents) - //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id - var/paths = typesof(/datum/reagent) - /datum/reagent - SSchemistry.chemical_reagents = list() - for(var/path in paths) - var/datum/reagent/D = new path() - if(!D.name) - continue - SSchemistry.chemical_reagents[D.id] = D - -/datum/reagents/Destroy() - STOP_PROCESSING(SSchemistry, src) - for(var/datum/reagent/R in reagent_list) - qdel(R) - reagent_list = null - if(my_atom && my_atom.reagents == src) - my_atom.reagents = null - return ..() - -/* Internal procs */ - -/datum/reagents/proc/get_free_space() // Returns free space. - return maximum_volume - total_volume - -/datum/reagents/proc/get_master_reagent() // Returns reference to the reagent with the biggest volume. - var/the_reagent = null - var/the_volume = 0 - - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_reagent = A - - return the_reagent - -/datum/reagents/proc/get_master_reagent_name() // Returns the name of the reagent with the biggest volume. - var/the_name = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_name = A.name - - return the_name - -/datum/reagents/proc/get_master_reagent_id() // Returns the id of the reagent with the biggest volume. - var/the_id = null - var/the_volume = 0 - for(var/datum/reagent/A in reagent_list) - if(A.volume > the_volume) - the_volume = A.volume - the_id = A.id - - return the_id - -/datum/reagents/proc/update_total() // Updates volume. - total_volume = 0 - for(var/datum/reagent/R in reagent_list) - if(R.volume < MINIMUM_CHEMICAL_VOLUME) - del_reagent(R.id) - else - total_volume += R.volume - return - -/datum/reagents/proc/handle_reactions() - if(QDELETED(my_atom)) - return FALSE - if(my_atom.flags & NOREACT) - return FALSE - var/reaction_occurred - var/list/eligible_reactions = list() - var/list/effect_reactions = list() - do - reaction_occurred = FALSE - for(var/i in reagent_list) - var/datum/reagent/R = i - if(SSchemistry.chemical_reactions_by_reagent[R.id]) - eligible_reactions |= SSchemistry.chemical_reactions_by_reagent[R.id] - - for(var/i in eligible_reactions) - var/datum/chemical_reaction/C = i - if(C.can_happen(src) && C.process(src)) - effect_reactions |= C - reaction_occurred = TRUE - eligible_reactions.len = 0 - while(reaction_occurred) - for(var/i in effect_reactions) - var/datum/chemical_reaction/C = i - C.post_reaction(src) - update_total() - -/* Holder-to-chemical */ - -/datum/reagents/proc/add_reagent(var/id, var/amount, var/data = null, var/safety = 0) - if(!isnum(amount) || amount <= 0) - return 0 - - update_total() - amount = min(amount, get_free_space()) - - for(var/datum/reagent/current in reagent_list) - if(current.id == id) - if(current.id == "blood") - if(!isnull(data["species"]) && !isnull(current.data["species"]) && data["species"] != current.data["species"]) // Species bloodtypes are already incompatible, this just stops it from mixing into the one already in a container. - continue - - current.volume += amount - if(!isnull(data)) // For all we know, it could be zero or empty string and meaningful - current.mix_data(data, amount) - update_total() - if(!safety) - handle_reactions() - if(my_atom) - my_atom.on_reagent_change() - return 1 - var/datum/reagent/D = SSchemistry.chemical_reagents[id] - if(D) - var/datum/reagent/R = new D.type() - reagent_list += R - R.holder = src - R.volume = amount - R.initialize_data(data) - update_total() - if(!safety) - handle_reactions() - if(my_atom) - my_atom.on_reagent_change() - return 1 - else - crash_with("[my_atom] attempted to add a reagent called '[id]' which doesn't exist. ([usr])") - return 0 - -/datum/reagents/proc/isolate_reagent(reagent) - for(var/A in reagent_list) - var/datum/reagent/R = A - if(R.id != reagent) - del_reagent(R.id) - update_total() - -/datum/reagents/proc/remove_reagent(var/id, var/amount, var/safety = 0) - if(!isnum(amount)) - return 0 - for(var/datum/reagent/current in reagent_list) - if(current.id == id) - current.volume -= amount // It can go negative, but it doesn't matter - update_total() // Because this proc will delete it then - if(!safety) - handle_reactions() - if(my_atom) - my_atom.on_reagent_change() - return 1 - return 0 - -/datum/reagents/proc/del_reagent(var/id) - for(var/datum/reagent/current in reagent_list) - if (current.id == id) - current.on_remove(my_atom) //YW Edit: Calls on_remove before the last of the thing is done, used in phorochemistry - reagent_list -= current - qdel(current) - update_total() - if(my_atom) - my_atom.on_reagent_change() - return 0 - -/datum/reagents/proc/has_reagent(var/id, var/amount = 0) - for(var/datum/reagent/current in reagent_list) - if(current.id == id) - if(current.volume >= amount) - return 1 - else - return 0 - return 0 - -/datum/reagents/proc/has_any_reagent(var/list/check_reagents) - for(var/datum/reagent/current in reagent_list) - if(current.id in check_reagents) - if(current.volume >= check_reagents[current.id]) - return 1 - else - return 0 - return 0 - -/datum/reagents/proc/has_all_reagents(var/list/check_reagents) - //this only works if check_reagents has no duplicate entries... hopefully okay since it expects an associative list - var/missing = check_reagents.len - for(var/datum/reagent/current in reagent_list) - if(current.id in check_reagents) - if(current.volume >= check_reagents[current.id]) - missing-- - return !missing - -/datum/reagents/proc/clear_reagents() - for(var/datum/reagent/current in reagent_list) - del_reagent(current.id) - return - -/datum/reagents/proc/get_reagent_amount(var/id) - for(var/datum/reagent/current in reagent_list) - if(current.id == id) - return current.volume - return 0 - -/datum/reagents/proc/get_data(var/id) - for(var/datum/reagent/current in reagent_list) - if(current.id == id) - return current.get_data() - return 0 - -/datum/reagents/proc/get_reagents() - . = list() - for(var/datum/reagent/current in reagent_list) - . += "[current.id] ([current.volume])" - return english_list(., "EMPTY", "", ", ", ", ") - -/* Holder-to-holder and similar procs */ - -/datum/reagents/proc/remove_any(var/amount = 1) // Removes up to [amount] of reagents from [src]. Returns actual amount removed. - amount = min(amount, total_volume) - - if(!amount) - return - - var/part = amount / total_volume - - for(var/datum/reagent/current in reagent_list) - var/amount_to_remove = current.volume * part - remove_reagent(current.id, amount_to_remove, 1) - - update_total() - handle_reactions() - return amount - -/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). - if(!target || !istype(target)) - return - - amount = max(0, min(amount, total_volume, target.get_free_space() / multiplier)) - - if(!amount) - return - - var/part = amount / total_volume - - for(var/datum/reagent/current in reagent_list) - var/amount_to_transfer = current.volume * part - target.add_reagent(current.id, amount_to_transfer * multiplier, current.get_data(), safety = 1) // We don't react until everything is in place - if(!copy) - remove_reagent(current.id, amount_to_transfer, 1) - - if(!copy) - handle_reactions() - target.handle_reactions() - return amount - -/* Holder-to-atom and similar procs */ - -//The general proc for applying reagents to things. This proc assumes the reagents are being applied externally, -//not directly injected into the contents. It first calls touch, then the appropriate trans_to_*() or splash_mob(). -//If for some reason touch effects are bypassed (e.g. injecting stuff directly into a reagent container or person), -//call the appropriate trans_to_*() proc. -/datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) - touch(target) //First, handle mere touch effects - - if(ismob(target)) - return splash_mob(target, amount, copy) - if(isturf(target)) - return trans_to_turf(target, amount, multiplier, copy) - if(isobj(target) && target.is_open_container()) - return trans_to_obj(target, amount, multiplier, copy) - return 0 - -//Splashing reagents is messier than trans_to, the target's loc gets some of the reagents as well. -/datum/reagents/proc/splash(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/min_spill=0, var/max_spill=60) - var/spill = 0 - if(!isturf(target) && target.loc) - spill = amount*(rand(min_spill, max_spill)/100) - amount -= spill - if(spill) - splash(target.loc, spill, multiplier, copy, min_spill, max_spill) - - trans_to(target, amount, multiplier, copy) - -/datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1) - if (!target) - return - - var/datum/reagent/transfering_reagent = get_reagent(rtype) - - if (istype(target, /atom)) - var/atom/A = target - if (!A.reagents || !A.simulated) - return - - amount = min(amount, transfering_reagent.volume) - - if(!amount) - return - - - var/datum/reagents/F = new /datum/reagents(amount) - var/tmpdata = get_data(rtype) - F.add_reagent(rtype, amount, tmpdata) - remove_reagent(rtype, amount) - - - if (istype(target, /atom)) - return F.trans_to(target, amount) // Let this proc check the atom's type - else if (istype(target, /datum/reagents)) - return F.trans_to_holder(target, amount) - -/datum/reagents/proc/trans_id_to(var/atom/target, var/id, var/amount = 1) - if (!target || !target.reagents) - return - - amount = min(amount, get_reagent_amount(id)) - - if(!amount) - return - - var/datum/reagents/F = new /datum/reagents(amount) - var/tmpdata = get_data(id) - F.add_reagent(id, amount, tmpdata) - remove_reagent(id, amount) - - return F.trans_to(target, amount) // Let this proc check the atom's type - -// When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. -// This does not handle transferring reagents to things. -// For example, splashing someone with water will get them wet and extinguish them if they are on fire, -// even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. -/datum/reagents/proc/touch(var/atom/target, var/amount) - if(ismob(target)) - touch_mob(target, amount) - if(isturf(target)) - touch_turf(target, amount) - if(isobj(target)) - touch_obj(target, amount) - return - -/datum/reagents/proc/touch_mob(var/mob/target) - if(!target || !istype(target)) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_mob(target, current.volume) - - update_total() - -/datum/reagents/proc/touch_turf(var/turf/target, var/amount) - if(!target || !istype(target)) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_turf(target, amount) - - update_total() - -/datum/reagents/proc/touch_obj(var/obj/target, var/amount) - if(!target || !istype(target)) - return - - for(var/datum/reagent/current in reagent_list) - current.touch_obj(target, amount) - - update_total() - -// Attempts to place a reagent on the mob's skin. -// Reagents are not guaranteed to transfer to the target. -// Do not call this directly, call trans_to() instead. -/datum/reagents/proc/splash_mob(var/mob/target, var/amount = 1, var/copy = 0) - var/perm = 1 - if(isliving(target)) //will we ever even need to tranfer reagents to non-living mobs? - var/mob/living/L = target - if(ishuman(L)) - var/mob/living/carbon/human/H = L - if(H.check_shields(0, null, null, null, "the spray") == 1) //If they block the spray, it does nothing. - amount = 0 - perm = L.reagent_permeability() - return trans_to_mob(target, amount, CHEM_TOUCH, perm, copy) - -/datum/reagents/proc/trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) // Transfer after checking into which holder... - if(!target || !istype(target)) - return - if(iscarbon(target)) - var/mob/living/carbon/C = target - if(type == CHEM_BLOOD) - var/datum/reagents/R = C.reagents - return trans_to_holder(R, amount, multiplier, copy) - if(type == CHEM_INGEST) - var/datum/reagents/R = C.ingested - return C.ingest(src, R, amount, multiplier, copy) - if(type == CHEM_TOUCH) - var/datum/reagents/R = C.touching - return trans_to_holder(R, amount, multiplier, copy) - else - var/datum/reagents/R = new /datum/reagents(amount) - . = trans_to_holder(R, amount, multiplier, copy) - R.touch_mob(target) - -/datum/reagents/proc/trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Turfs don't have any reagents (at least, for now). Just touch it. - if(!target) - return - - var/datum/reagents/R = new /datum/reagents(amount * multiplier) - . = trans_to_holder(R, amount, multiplier, copy) - R.touch_turf(target, amount) - return - -/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. - if(!target) - return - - if(!target.reagents) - var/datum/reagents/R = new /datum/reagents(amount * multiplier) - . = trans_to_holder(R, amount, multiplier, copy) - R.touch_obj(target, amount) - return - - return trans_to_holder(target.reagents, amount, multiplier, copy) - -/* Atom reagent creation - use it all the time */ - -/atom/proc/create_reagents(var/max_vol) - reagents = new/datum/reagents(max_vol, src) - -// Aurora Cooking Port -/datum/reagents/proc/get_reagent(var/id) // Returns reference to reagent matching passed ID - for(var/datum/reagent/A in reagent_list) - if (A.id == id) - return A - - return null - -//Spreads the contents of this reagent holder all over the vicinity of the target turf. -/datum/reagents/proc/splash_area(var/turf/epicentre, var/range = 3, var/portion = 1.0, var/multiplier = 1, var/copy = 0) - var/list/things = dview(range, epicentre, INVISIBILITY_LIGHTING) - var/list/turfs = list() - for (var/turf/T in things) - turfs += T - if (!turfs.len) - return//Nowhere to splash to, somehow - //Create a temporary holder to hold all the amount that will be spread - var/datum/reagents/R = new /datum/reagents(total_volume * portion * multiplier) - trans_to_holder(R, total_volume * portion, multiplier, copy) - //The exact amount that will be given to each turf - var/turfportion = R.total_volume / turfs.len - for (var/turf/T in turfs) - var/datum/reagents/TR = new /datum/reagents(turfportion) - R.trans_to_holder(TR, turfportion, 1, 0) - TR.splash_turf(T) - qdel(R) - - -//Spreads the contents of this reagent holder all over the target turf, dividing among things in it. -//50% is divided between mobs, 20% between objects, and whatever is left on the turf itself -/datum/reagents/proc/splash_turf(var/turf/T, var/amount = null, var/multiplier = 1, var/copy = 0) - if (isnull(amount)) - amount = total_volume - else - amount = min(amount, total_volume) - if (amount <= 0) - return - var/list/mobs = list() - for (var/mob/M in T) - mobs += M - var/list/objs = list() - for (var/obj/O in T) - objs += O - if (objs.len) - var/objportion = (amount * 0.2) / objs.len - for (var/o in objs) - var/obj/O = o - trans_to(O, objportion, multiplier, copy) - amount = min(amount, total_volume) - if (mobs.len) - var/mobportion = (amount * 0.5) / mobs.len - for (var/m in mobs) - var/mob/M = m - trans_to(M, mobportion, multiplier, copy) - trans_to(T, total_volume, multiplier, copy) - if (total_volume <= 0) - qdel(src) \ No newline at end of file +#define PROCESS_REACTION_ITER 5 //when processing a reaction, iterate this many times + +/datum/reagents + var/list/datum/reagent/reagent_list = list() + var/total_volume = 0 + var/maximum_volume = 100 + var/atom/my_atom = null + +/datum/reagents/New(var/max = 100, atom/A = null) + ..() + maximum_volume = max + my_atom = A + + //I dislike having these here but map-objects are initialised before world/New() is called. >_> + if(!SSchemistry.chemical_reagents) + //Chemical Reagents - Initialises all /datum/reagent into a list indexed by reagent id + var/paths = typesof(/datum/reagent) - /datum/reagent + SSchemistry.chemical_reagents = list() + for(var/path in paths) + var/datum/reagent/D = new path() + if(!D.name) + continue + SSchemistry.chemical_reagents[D.id] = D + +/datum/reagents/Destroy() + STOP_PROCESSING(SSchemistry, src) + for(var/datum/reagent/R in reagent_list) + qdel(R) + reagent_list = null + if(my_atom && my_atom.reagents == src) + my_atom.reagents = null + return ..() + +/* Internal procs */ + +/datum/reagents/proc/get_free_space() // Returns free space. + return maximum_volume - total_volume + +/datum/reagents/proc/get_master_reagent() // Returns reference to the reagent with the biggest volume. + var/the_reagent = null + var/the_volume = 0 + + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_reagent = A + + return the_reagent + +/datum/reagents/proc/get_master_reagent_name() // Returns the name of the reagent with the biggest volume. + var/the_name = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_name = A.name + + return the_name + +/datum/reagents/proc/get_master_reagent_id() // Returns the id of the reagent with the biggest volume. + var/the_id = null + var/the_volume = 0 + for(var/datum/reagent/A in reagent_list) + if(A.volume > the_volume) + the_volume = A.volume + the_id = A.id + + return the_id + +/datum/reagents/proc/update_total() // Updates volume. + total_volume = 0 + for(var/datum/reagent/R in reagent_list) + if(R.volume < MINIMUM_CHEMICAL_VOLUME) + del_reagent(R.id) + else + total_volume += R.volume + return + +/datum/reagents/proc/handle_reactions() + if(QDELETED(my_atom)) + return FALSE + if(my_atom.flags & NOREACT) + return FALSE + var/reaction_occurred + var/list/eligible_reactions = list() + var/list/effect_reactions = list() + do + reaction_occurred = FALSE + for(var/i in reagent_list) + var/datum/reagent/R = i + if(SSchemistry.chemical_reactions_by_reagent[R.id]) + eligible_reactions |= SSchemistry.chemical_reactions_by_reagent[R.id] + + for(var/i in eligible_reactions) + var/datum/chemical_reaction/C = i + if(C.can_happen(src) && C.process(src)) + effect_reactions |= C + reaction_occurred = TRUE + eligible_reactions.len = 0 + while(reaction_occurred) + for(var/i in effect_reactions) + var/datum/chemical_reaction/C = i + C.post_reaction(src) + update_total() + +/* Holder-to-chemical */ + +/datum/reagents/proc/add_reagent(var/id, var/amount, var/data = null, var/safety = 0) + if(!isnum(amount) || amount <= 0) + return 0 + + update_total() + amount = min(amount, get_free_space()) + + if(istype(my_atom,/obj/item/weapon/reagent_containers/food)) //The following code is targeted specifically at getting allergen reagents into food items, since for the most part they're not applied by default. + var/list/add_reagents = list() + var/totalnum = 0 + + for(var/item in data) //Try to find the ID + var/add_reagent_id = null + if(item in SSchemistry.chemical_reagents) + add_reagent_id = item + else if("[item]juice" in SSchemistry.chemical_reagents) + add_reagent_id = "[item]juice" + if(add_reagent_id) //If we did find it, add it to our list of reagents to add, and add the number to our total. + add_reagents[add_reagent_id] += data[item] + totalnum += data[item] + + if(totalnum) + var/multconst = amount/totalnum //We're going to add these extra reagents so that they share the ratio described, but only add up to 1x the existing amount at the most + for(var/item in add_reagents) + add_reagent(item,add_reagents[item]*multconst) + + + + + for(var/datum/reagent/current in reagent_list) + if(current.id == id) + if(current.id == "blood") + if(LAZYLEN(data) && !isnull(data["species"]) && !isnull(current.data["species"]) && data["species"] != current.data["species"]) // Species bloodtypes are already incompatible, this just stops it from mixing into the one already in a container. + continue + + current.volume += amount + if(!isnull(data)) // For all we know, it could be zero or empty string and meaningful + current.mix_data(data, amount) + update_total() + if(!safety) + handle_reactions() + if(my_atom) + my_atom.on_reagent_change() + return 1 + var/datum/reagent/D = SSchemistry.chemical_reagents[id] + if(D) + var/datum/reagent/R = new D.type() + reagent_list += R + R.holder = src + R.volume = amount + R.initialize_data(data) + update_total() + if(!safety) + handle_reactions() + if(my_atom) + my_atom.on_reagent_change() + return 1 + else + crash_with("[my_atom] attempted to add a reagent called '[id]' which doesn't exist. ([usr])") + return 0 + +/datum/reagents/proc/isolate_reagent(reagent) + for(var/A in reagent_list) + var/datum/reagent/R = A + if(R.id != reagent) + del_reagent(R.id) + update_total() + +/datum/reagents/proc/remove_reagent(var/id, var/amount, var/safety = 0) + if(!isnum(amount)) + return 0 + for(var/datum/reagent/current in reagent_list) + if(current.id == id) + current.volume -= amount // It can go negative, but it doesn't matter + update_total() // Because this proc will delete it then + if(!safety) + handle_reactions() + if(my_atom) + my_atom.on_reagent_change() + return 1 + return 0 + +/datum/reagents/proc/del_reagent(var/id) + for(var/datum/reagent/current in reagent_list) + if (current.id == id) + current.on_remove(my_atom) //YW Edit: Calls on_remove before the last of the thing is done, used in phorochemistry + reagent_list -= current + qdel(current) + update_total() + if(my_atom) + my_atom.on_reagent_change() + return 0 + +/datum/reagents/proc/has_reagent(var/id, var/amount = 0) + for(var/datum/reagent/current in reagent_list) + if(current.id == id) + if(current.volume >= amount) + return 1 + else + return 0 + return 0 + +/datum/reagents/proc/has_any_reagent(var/list/check_reagents) + for(var/datum/reagent/current in reagent_list) + if(current.id in check_reagents) + if(current.volume >= check_reagents[current.id]) + return 1 + else + return 0 + return 0 + +/datum/reagents/proc/has_all_reagents(var/list/check_reagents) + //this only works if check_reagents has no duplicate entries... hopefully okay since it expects an associative list + var/missing = check_reagents.len + for(var/datum/reagent/current in reagent_list) + if(current.id in check_reagents) + if(current.volume >= check_reagents[current.id]) + missing-- + return !missing + +/datum/reagents/proc/clear_reagents() + for(var/datum/reagent/current in reagent_list) + del_reagent(current.id) + return + +/datum/reagents/proc/get_reagent_amount(var/id) + for(var/datum/reagent/current in reagent_list) + if(current.id == id) + return current.volume + return 0 + +/datum/reagents/proc/get_data(var/id) + for(var/datum/reagent/current in reagent_list) + if(current.id == id) + return current.get_data() + return 0 + +/datum/reagents/proc/get_reagents() + . = list() + for(var/datum/reagent/current in reagent_list) + . += "[current.id] ([current.volume])" + return english_list(., "EMPTY", "", ", ", ", ") + +/* Holder-to-holder and similar procs */ + +/datum/reagents/proc/remove_any(var/amount = 1) // Removes up to [amount] of reagents from [src]. Returns actual amount removed. + amount = min(amount, total_volume) + + if(!amount) + return + + var/part = amount / total_volume + + for(var/datum/reagent/current in reagent_list) + var/amount_to_remove = current.volume * part + remove_reagent(current.id, amount_to_remove, 1) + + update_total() + handle_reactions() + return amount + +/datum/reagents/proc/trans_to_holder(var/datum/reagents/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Transfers [amount] reagents from [src] to [target], multiplying them by [multiplier]. Returns actual amount removed from [src] (not amount transferred to [target]). + if(!target || !istype(target)) + return + + amount = max(0, min(amount, total_volume, target.get_free_space() / multiplier)) + + if(!amount) + return + + var/part = amount / total_volume + + for(var/datum/reagent/current in reagent_list) + var/amount_to_transfer = current.volume * part + target.add_reagent(current.id, amount_to_transfer * multiplier, current.get_data(), safety = 1) // We don't react until everything is in place + if(!copy) + remove_reagent(current.id, amount_to_transfer, 1) + + if(!copy) + handle_reactions() + target.handle_reactions() + return amount + +/* Holder-to-atom and similar procs */ + +//The general proc for applying reagents to things. This proc assumes the reagents are being applied externally, +//not directly injected into the contents. It first calls touch, then the appropriate trans_to_*() or splash_mob(). +//If for some reason touch effects are bypassed (e.g. injecting stuff directly into a reagent container or person), +//call the appropriate trans_to_*() proc. +/datum/reagents/proc/trans_to(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0) + touch(target) //First, handle mere touch effects + + if(ismob(target)) + return splash_mob(target, amount, copy) + if(isturf(target)) + return trans_to_turf(target, amount, multiplier, copy) + if(isobj(target) && target.is_open_container()) + return trans_to_obj(target, amount, multiplier, copy) + return 0 + +//Splashing reagents is messier than trans_to, the target's loc gets some of the reagents as well. +/datum/reagents/proc/splash(var/atom/target, var/amount = 1, var/multiplier = 1, var/copy = 0, var/min_spill=0, var/max_spill=60) + var/spill = 0 + if(!isturf(target) && target.loc) + spill = amount*(rand(min_spill, max_spill)/100) + amount -= spill + if(spill) + splash(target.loc, spill, multiplier, copy, min_spill, max_spill) + + trans_to(target, amount, multiplier, copy) + +/datum/reagents/proc/trans_type_to(var/target, var/rtype, var/amount = 1) + if (!target) + return + + var/datum/reagent/transfering_reagent = get_reagent(rtype) + + if (istype(target, /atom)) + var/atom/A = target + if (!A.reagents || !A.simulated) + return + + amount = min(amount, transfering_reagent.volume) + + if(!amount) + return + + + var/datum/reagents/F = new /datum/reagents(amount) + var/tmpdata = get_data(rtype) + F.add_reagent(rtype, amount, tmpdata) + remove_reagent(rtype, amount) + + + if (istype(target, /atom)) + return F.trans_to(target, amount) // Let this proc check the atom's type + else if (istype(target, /datum/reagents)) + return F.trans_to_holder(target, amount) + +/datum/reagents/proc/trans_id_to(var/atom/target, var/id, var/amount = 1) + if (!target || !target.reagents) + return + + amount = min(amount, get_reagent_amount(id)) + + if(!amount) + return + + var/datum/reagents/F = new /datum/reagents(amount) + var/tmpdata = get_data(id) + F.add_reagent(id, amount, tmpdata) + remove_reagent(id, amount) + + return F.trans_to(target, amount) // Let this proc check the atom's type + +// When applying reagents to an atom externally, touch() is called to trigger any on-touch effects of the reagent. +// This does not handle transferring reagents to things. +// For example, splashing someone with water will get them wet and extinguish them if they are on fire, +// even if they are wearing an impermeable suit that prevents the reagents from contacting the skin. +/datum/reagents/proc/touch(var/atom/target, var/amount) + if(ismob(target)) + touch_mob(target, amount) + if(isturf(target)) + touch_turf(target, amount) + if(isobj(target)) + touch_obj(target, amount) + return + +/datum/reagents/proc/touch_mob(var/mob/target) + if(!target || !istype(target)) + return + + for(var/datum/reagent/current in reagent_list) + current.touch_mob(target, current.volume) + + update_total() + +/datum/reagents/proc/touch_turf(var/turf/target, var/amount) + if(!target || !istype(target)) + return + + for(var/datum/reagent/current in reagent_list) + current.touch_turf(target, amount) + + update_total() + +/datum/reagents/proc/touch_obj(var/obj/target, var/amount) + if(!target || !istype(target)) + return + + for(var/datum/reagent/current in reagent_list) + current.touch_obj(target, amount) + + update_total() + +// Attempts to place a reagent on the mob's skin. +// Reagents are not guaranteed to transfer to the target. +// Do not call this directly, call trans_to() instead. +/datum/reagents/proc/splash_mob(var/mob/target, var/amount = 1, var/copy = 0) + var/perm = 1 + if(isliving(target)) //will we ever even need to tranfer reagents to non-living mobs? + var/mob/living/L = target + if(ishuman(L)) + var/mob/living/carbon/human/H = L + if(H.check_shields(0, null, null, null, "the spray") == 1) //If they block the spray, it does nothing. + amount = 0 + perm = L.reagent_permeability() + return trans_to_mob(target, amount, CHEM_TOUCH, perm, copy) + +/datum/reagents/proc/trans_to_mob(var/mob/target, var/amount = 1, var/type = CHEM_BLOOD, var/multiplier = 1, var/copy = 0) // Transfer after checking into which holder... + if(!target || !istype(target)) + return + if(iscarbon(target)) + var/mob/living/carbon/C = target + if(type == CHEM_BLOOD) + var/datum/reagents/R = C.reagents + return trans_to_holder(R, amount, multiplier, copy) + if(type == CHEM_INGEST) + var/datum/reagents/R = C.ingested + return C.ingest(src, R, amount, multiplier, copy) + if(type == CHEM_TOUCH) + var/datum/reagents/R = C.touching + return trans_to_holder(R, amount, multiplier, copy) + else + var/datum/reagents/R = new /datum/reagents(amount) + . = trans_to_holder(R, amount, multiplier, copy) + R.touch_mob(target) + +/datum/reagents/proc/trans_to_turf(var/turf/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Turfs don't have any reagents (at least, for now). Just touch it. + if(!target) + return + + var/datum/reagents/R = new /datum/reagents(amount * multiplier) + . = trans_to_holder(R, amount, multiplier, copy) + R.touch_turf(target, amount) + return + +/datum/reagents/proc/trans_to_obj(var/obj/target, var/amount = 1, var/multiplier = 1, var/copy = 0) // Objects may or may not; if they do, it's probably a beaker or something and we need to transfer properly; otherwise, just touch. + if(!target) + return + + if(!target.reagents) + var/datum/reagents/R = new /datum/reagents(amount * multiplier) + . = trans_to_holder(R, amount, multiplier, copy) + R.touch_obj(target, amount) + return + + return trans_to_holder(target.reagents, amount, multiplier, copy) + +/* Atom reagent creation - use it all the time */ + +/atom/proc/create_reagents(var/max_vol) + reagents = new/datum/reagents(max_vol, src) + +// Aurora Cooking Port +/datum/reagents/proc/get_reagent(var/id) // Returns reference to reagent matching passed ID + for(var/datum/reagent/A in reagent_list) + if (A.id == id) + return A + + return null + +//Spreads the contents of this reagent holder all over the vicinity of the target turf. +/datum/reagents/proc/splash_area(var/turf/epicentre, var/range = 3, var/portion = 1.0, var/multiplier = 1, var/copy = 0) + var/list/things = dview(range, epicentre, INVISIBILITY_LIGHTING) + var/list/turfs = list() + for (var/turf/T in things) + turfs += T + if (!turfs.len) + return//Nowhere to splash to, somehow + //Create a temporary holder to hold all the amount that will be spread + var/datum/reagents/R = new /datum/reagents(total_volume * portion * multiplier) + trans_to_holder(R, total_volume * portion, multiplier, copy) + //The exact amount that will be given to each turf + var/turfportion = R.total_volume / turfs.len + for (var/turf/T in turfs) + var/datum/reagents/TR = new /datum/reagents(turfportion) + R.trans_to_holder(TR, turfportion, 1, 0) + TR.splash_turf(T) + qdel(R) + + +//Spreads the contents of this reagent holder all over the target turf, dividing among things in it. +//50% is divided between mobs, 20% between objects, and whatever is left on the turf itself +/datum/reagents/proc/splash_turf(var/turf/T, var/amount = null, var/multiplier = 1, var/copy = 0) + if (isnull(amount)) + amount = total_volume + else + amount = min(amount, total_volume) + if (amount <= 0) + return + var/list/mobs = list() + for (var/mob/M in T) + mobs += M + var/list/objs = list() + for (var/obj/O in T) + objs += O + if (objs.len) + var/objportion = (amount * 0.2) / objs.len + for (var/o in objs) + var/obj/O = o + trans_to(O, objportion, multiplier, copy) + amount = min(amount, total_volume) + if (mobs.len) + var/mobportion = (amount * 0.5) / mobs.len + for (var/m in mobs) + var/mob/M = m + trans_to(M, mobportion, multiplier, copy) + trans_to(T, total_volume, multiplier, copy) + if (total_volume <= 0) + qdel(src) diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm index d64c6afd0c..a7513d0773 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Dispenser.dm @@ -16,6 +16,18 @@ reagent_state = SOLID color = "#e9e6e4" +//VOREStation Edit +/datum/reagent/calcium/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) + if(ishuman(M) && rand(1,10000) == 1) + var/mob/living/carbon/human/H = M + for(var/obj/item/organ/external/O in H.bad_external_organs) + if(O.status & ORGAN_BROKEN) + O.mend_fracture() + H.custom_pain("You feel the agonizing power of calcium mending your bones!",60) + H.AdjustWeakened(1) + break // Only mend one bone, whichever comes first in the list +//VOREStation Edit End + /datum/reagent/carbon name = "Carbon" id = "carbon" diff --git a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm index bd1e74549a..018d051607 100644 --- a/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm +++ b/code/modules/reagents/Chemistry-Reagents/Chemistry-Reagents-Food-Drinks.dm @@ -124,6 +124,7 @@ icon_raw = "batter_raw" icon_cooked = "batter_cooked" coated_adj = "battered" + allergen_type = GRAINS | EGGS //Made with flour(grain), and eggs(eggs) /datum/reagent/nutriment/coating/beerbatter name = "beer batter mix" @@ -134,6 +135,7 @@ icon_raw = "batter_raw" icon_cooked = "batter_cooked" coated_adj = "beer-battered" + allergen_type = GRAINS | EGGS //Made with flour(grain), eggs(eggs), and beer(grain) /datum/reagent/nutriment/coating/beerbatter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -237,7 +239,7 @@ id = "cornoil" description = "An oil derived from various types of corn." reagent_state = LIQUID - allergen_type = VEGETABLE + allergen_type = VEGETABLE //Corn is a vegetable /datum/reagent/nutriment/triglyceride/oil/peanut name = "Peanut Oil" @@ -247,7 +249,7 @@ taste_mult = 0.3 nutriment_factor = 15 color = "#4F3500" - allergen_type = SEEDS + allergen_type = SEEDS //Peanut oil would come from peanuts, hence seeds. // Aurora Cooking Port Insertion End @@ -264,7 +266,7 @@ id = "protein" taste_description = "some sort of meat" color = "#440000" - allergen_type = MEAT + allergen_type = MEAT //"Animal protein" implies it comes from animals, therefore meat. /datum/reagent/nutriment/protein/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) switch(alien) @@ -284,35 +286,35 @@ id = "tofu" color = "#fdffa8" taste_description = "tofu" - allergen_type = BEANS + allergen_type = BEANS //Made from soy beans /datum/reagent/nutriment/protein/seafood name = "seafood protein" id = "seafood" color = "#f5f4e9" taste_description = "fish" - allergen_type = FISH + allergen_type = FISH //I suppose the fish allergy likely refers to seafood in general. /datum/reagent/nutriment/protein/cheese name = "cheese" id = "cheese" color = "#EDB91F" taste_description = "cheese" - allergen_type = DAIRY + allergen_type = DAIRY //Cheese is made from dairy /datum/reagent/nutriment/protein/egg name = "egg yolk" id = "egg" taste_description = "egg" color = "#FFFFAA" - allergen_type = DAIRY + allergen_type = EGGS //Eggs contain egg /datum/reagent/nutriment/protein/murk name = "murkfin protein" id = "murk_protein" taste_description = "mud" color = "#664330" - allergen_type = FISH + allergen_type = FISH //Murkfin is fish /datum/reagent/nutriment/honey name = "Honey" @@ -350,7 +352,7 @@ taste_description = "unmistakably mayonnaise" nutriment_factor = 10 color = "#FFFFFF" - allergen_type = DAIRY //because egg + allergen_type = EGGS //Mayo is made from eggs /datum/reagent/nutriment/yeast name = "Yeast" @@ -368,7 +370,7 @@ reagent_state = SOLID nutriment_factor = 1 color = "#FFFFFF" - allergen_type = GRAINS + allergen_type = GRAINS //Flour is made from grain /datum/reagent/nutriment/flour/touch_turf(var/turf/simulated/T) if(!istype(T, /turf/space)) @@ -382,7 +384,7 @@ taste_mult = 1.3 nutriment_factor = 1 color = "#482000" - allergen_type = COFFEE + allergen_type = COFFEE //Again, coffee contains coffee /datum/reagent/nutriment/tea name = "Tea Powder" @@ -409,7 +411,7 @@ description = "Dehydrated, powdered juice of some kind." taste_mult = 1.3 nutriment_factor = 1 - allergen_type = FRUIT + allergen_type = FRUIT //I suppose it's implied here that the juice is from dehydrated fruit. /datum/reagent/nutriment/instantjuice/grape name = "Grape Juice Powder" @@ -448,6 +450,8 @@ reagent_state = LIQUID nutriment_factor = 2 color = "#792300" + allergen_type = BEANS //Soy (beans) + /datum/reagent/nutriment/ketchup name = "Ketchup" @@ -457,6 +461,7 @@ reagent_state = LIQUID nutriment_factor = 5 color = "#731008" + allergen_type = FRUIT //Tomatoes are a fruit. /datum/reagent/nutriment/barbecue name = "Barbeque Sauce" @@ -486,7 +491,7 @@ reagent_state = LIQUID nutriment_factor = 1 color = "#801E28" - allergen_type = FRUIT + allergen_type = FRUIT //Cherries are fruits /datum/reagent/nutriment/peanutbutter name = "Peanut Butter" @@ -497,7 +502,7 @@ reagent_state = LIQUID nutriment_factor = 30 color = "#4F3500" - allergen_type = SEEDS + allergen_type = SEEDS //Peanuts(seeds) /datum/reagent/nutriment/vanilla name = "Vanilla Extract" @@ -916,6 +921,7 @@ glass_name = "banana juice" glass_desc = "The raw essence of a banana. HONK!" + allergen_type = FRUIT //Bananas are fruit /datum/reagent/drink/juice/berry name = "Berry Juice" @@ -926,6 +932,7 @@ glass_name = "berry juice" glass_desc = "Berry juice. Or maybe it's jam. Who cares?" + allergen_type = FRUIT //Berries are fruit /datum/reagent/drink/juice/pineapple name = "Pineapple Juice" @@ -936,6 +943,7 @@ glass_name = "pineapple juice" glass_desc = "Pineapple juice. Or maybe it's spineapple. Who cares?" + allergen_type = FRUIT //Pineapples are fruit /datum/reagent/drink/juice/carrot name = "Carrot juice" @@ -946,7 +954,7 @@ glass_name = "carrot juice" glass_desc = "It is just like a carrot but without crunching." - allergen_type = VEGETABLE + allergen_type = VEGETABLE //Carrots are vegetables /datum/reagent/drink/juice/carrot/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -962,7 +970,7 @@ glass_name = "grape juice" glass_desc = "It's grrrrrape!" - allergen_type = FRUIT + allergen_type = FRUIT //Grapes are fruit /datum/reagent/drink/juice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -996,6 +1004,8 @@ glass_name = "lemon juice" glass_desc = "Sour..." + allergen_type = FRUIT //Lemons are fruit + /datum/reagent/drink/juice/apple name = "Apple Juice" @@ -1007,6 +1017,7 @@ glass_name = "apple juice" glass_desc = "An earth favorite." + allergen_type = FRUIT //Apples are fruit /datum/reagent/drink/juice/lime name = "Lime Juice" @@ -1018,6 +1029,7 @@ glass_name = "lime juice" glass_desc = "A glass of sweet-sour lime juice" + allergen_type = FRUIT //Limes are fruit /datum/reagent/drink/juice/lime/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1034,6 +1046,7 @@ glass_name = "orange juice" glass_desc = "Vitamins! Yay!" + allergen_type = FRUIT //Oranges are fruit /datum/reagent/drink/orangejuice/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1063,7 +1076,7 @@ glass_name = "potato juice" glass_desc = "Juice from a potato. Bleh." - allergen_type = VEGETABLE + allergen_type = VEGETABLE //Potatoes are vegetables /datum/reagent/drink/juice/tomato name = "Tomato Juice" @@ -1075,6 +1088,7 @@ glass_name = "tomato juice" glass_desc = "Are you sure this is tomato juice?" + allergen_type = FRUIT //Yes tomatoes are a fruit /datum/reagent/drink/juice/tomato/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1091,6 +1105,7 @@ glass_name = "watermelon juice" glass_desc = "Delicious juice made from watermelon." + allergen_type = FRUIT //Watermelon is a fruit // Everything else @@ -1107,7 +1122,7 @@ cup_icon_state = "cup_cream" cup_name = "cup of milk" cup_desc = "White and nutritious goodness!" - allergen_type = DAIRY + allergen_type = DAIRY //Milk is dairy /datum/reagent/drink/milk/chocolate name = "Chocolate Milk" @@ -1129,6 +1144,16 @@ return M.heal_organ_damage(0.5 * removed, 0) holder.remove_reagent("capsaicin", 10 * removed) + //VOREStation Edit + if(ishuman(M) && rand(1,10000) == 1) + var/mob/living/carbon/human/H = M + for(var/obj/item/organ/external/O in H.bad_external_organs) + if(O.status & ORGAN_BROKEN) + O.mend_fracture() + H.custom_pain("You feel the agonizing power of calcium mending your bones!",60) + H.AdjustWeakened(1) + break // Only mend one bone, whichever comes first in the list + //VOREStation Edit End /datum/reagent/drink/milk/cream name = "Cream" @@ -1143,7 +1168,7 @@ cup_icon_state = "cup_cream" cup_name = "cup of cream" cup_desc = "Ewwww..." - allergen_type = DAIRY + allergen_type = DAIRY //Cream is dairy /datum/reagent/drink/milk/soymilk name = "Soy Milk" @@ -1158,7 +1183,7 @@ cup_icon_state = "cup_cream" cup_name = "cup of milk" cup_desc = "White and nutritious goodness!" - allergen_type = FRUIT + allergen_type = BEANS //Would be made from soy beans /datum/reagent/drink/tea name = "Tea" @@ -1243,7 +1268,7 @@ cup_name = "cup of lemon tea" cup_desc = "A tasty mixture of lemon and tea. It's apparently good for you!" - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemon juice /datum/reagent/drink/tea/limetea name = "Lime Tea" @@ -1257,7 +1282,7 @@ cup_name = "cup of lime tea" cup_desc = "A tasty mixture of lime and tea. It's apparently good for you!" - allergen_type = FRUIT + allergen_type = FRUIT //Made with lime juice /datum/reagent/drink/tea/orangetea name = "Orange Tea" @@ -1271,7 +1296,7 @@ cup_name = "cup of orange tea" cup_desc = "A tasty mixture of orange and tea. It's apparently good for you!" - allergen_type = FRUIT + allergen_type = FRUIT //Made with orange juice /datum/reagent/drink/tea/berrytea name = "Berry Tea" @@ -1285,7 +1310,7 @@ cup_name = "cup of berry tea" cup_desc = "A tasty mixture of berries and tea. It's apparently good for you!" - allergen_type = FRUIT + allergen_type = FRUIT //Made with berry juice /datum/reagent/drink/greentea name = "Green Tea" @@ -1332,7 +1357,7 @@ glass_name = "coffee" glass_desc = "Don't drop it, or you'll send scalding liquid and glass shards everywhere." - allergen_type = COFFEE + allergen_type = COFFEE //Apparently coffee contains coffee /datum/reagent/drink/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -1404,7 +1429,7 @@ cup_icon_state = "cup_latte" cup_name = "cup of soy latte" cup_desc = "A nice and refreshing beverage while you are reading." - allergen_type = COFFEE|BEANS + allergen_type = COFFEE|BEANS //Soy(beans) and coffee /datum/reagent/drink/coffee/soy_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1424,7 +1449,7 @@ cup_icon_state = "cup_latte" cup_name = "cup of cafe latte" cup_desc = "A nice and refreshing beverage while you are reading." - allergen_type = COFFEE|DAIRY + allergen_type = COFFEE|DAIRY //Cream and coffee /datum/reagent/drink/coffee/cafe_latte/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1445,6 +1470,7 @@ glass_name = "decaf coffee" glass_desc = "Basically just brown, bitter water." + allergen_type = COFFEE //Decaf coffee would still likely trigger allergy symptoms. /datum/reagent/drink/hot_coco name = "Hot Chocolate" @@ -1489,7 +1515,7 @@ glass_name = "grape soda" glass_desc = "Looks like a delicious drink!" glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with grape juice /datum/reagent/drink/soda/tonic name = "Tonic Water" @@ -1518,7 +1544,7 @@ glass_name = "lemonade" glass_desc = "Oh the nostalgia..." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemon juice /datum/reagent/drink/soda/melonade name = "Melonade" @@ -1532,7 +1558,7 @@ glass_name = "melonade" glass_desc = "Oh the.. nostalgia?" glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with watermelon juice /datum/reagent/drink/soda/appleade name = "Appleade" @@ -1546,7 +1572,7 @@ glass_name = "appleade" glass_desc = "Applejuice, improved." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with apple juice /datum/reagent/drink/soda/pineappleade name = "Pineappleade" @@ -1560,7 +1586,7 @@ glass_name = "pineappleade" glass_desc = "Pineapple, juiced up." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with pineapple juice /datum/reagent/drink/soda/kiraspecial name = "Kira Special" @@ -1574,6 +1600,7 @@ glass_name = "Kira Special" glass_desc = "Long live the guy who everyone had mistaken for a girl. Baka!" glass_special = list(DRINK_FIZZ) + allergen_type = FRUIT //Made from orange and lime juice /datum/reagent/drink/soda/brownstar name = "Brown Star" @@ -1586,7 +1613,7 @@ glass_name = "Brown Star" glass_desc = "It's not what it sounds like..." - allergen_type = FRUIT + allergen_type = FRUIT //Made with orangejuice and cola /datum/reagent/drink/milkshake name = "Milkshake" @@ -1598,7 +1625,7 @@ glass_name = "milkshake" glass_desc = "Glorious brainfreezing mixture." - allergen_type = DAIRY + allergen_type = DAIRY //Made with dairy products /datum/reagent/milkshake/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1631,7 +1658,7 @@ glass_name = "Chocolate Milkshake" glass_desc = "A refreshing chocolate milkshake, just like mom used to make." - allergen_type = DAIRY + allergen_type = DAIRY //Made with dairy products /datum/reagent/drink/milkshake/berryshake name = "Berry Milkshake" @@ -1643,7 +1670,7 @@ glass_name = "Berry Milkshake" glass_desc = "A refreshing berry milkshake, just like mom used to make." - allergen_type = FRUIT|DAIRY + allergen_type = FRUIT|DAIRY //Made with berry juice and dairy products /datum/reagent/drink/milkshake/coffeeshake name = "Coffee Milkshake" @@ -1658,7 +1685,7 @@ glass_name = "Coffee Milkshake" glass_desc = "An energizing coffee milkshake, perfect for hot days at work.." - allergen_type = DAIRY|COFFEE + allergen_type = DAIRY|COFFEE //Made with coffee and dairy products /datum/reagent/drink/milkshake/coffeeshake/overdose(var/mob/living/carbon/M, var/alien) M.make_jittery(5) @@ -1672,7 +1699,7 @@ glass_name = "Peanut Milkshake" glass_desc = "Savory cream in an ice-cold stature." - allergen_type = SEEDS|DAIRY + allergen_type = SEEDS|DAIRY //Made with peanutbutter(seeds) and dairy products /datum/reagent/drink/rewriter name = "Rewriter" @@ -1685,7 +1712,7 @@ glass_name = "Rewriter" glass_desc = "The secret of the sanctuary of the Libarian..." - allergen_type = FRUIT|COFFEE + allergen_type = FRUIT|COFFEE //Made with space mountain wind (Fruit) /datum/reagent/drink/rewriter/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -1713,7 +1740,7 @@ M.dizziness += 5 M.drowsyness = 0 -/datum/reagent/drink/grenadine +/datum/reagent/drink/grenadine //Description implies that the grenadine we would be working with does not contain fruit, so no allergens. name = "Grenadine Syrup" id = "grenadine" description = "Made in the modern day with proper pomegranate substitute. Who uses real fruit, anyways?" @@ -1753,7 +1780,7 @@ glass_name = "Space Mountain Wind" glass_desc = "Space Mountain Wind. As you know, there are no mountains in space, only wind." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Fruit allergens because citrus is implied to come from limes/lemons /datum/reagent/drink/soda/dr_gibb name = "Dr. Gibb" @@ -1794,7 +1821,7 @@ glass_name = "lemon lime soda" glass_desc = "A tangy substance made of 0.5% natural citrus!" glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemon and lime juice /datum/reagent/drink/soda/gingerale name = "Ginger Ale" @@ -1853,7 +1880,7 @@ glass_name = "roy rogers" glass_desc = "I'm a cowboy, on a steel horse I ride" glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemon lime /datum/reagent/drink/collins_mix name = "Collins Mix" @@ -1867,7 +1894,7 @@ glass_name = "collins mix" glass_desc = "Best hope it isn't a hoax." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemon lime /datum/reagent/drink/arnold_palmer name = "Arnold Palmer" @@ -1881,7 +1908,7 @@ glass_name = "arnold palmer" glass_desc = "Tastes just like the old man." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with lemonade /datum/reagent/drink/doctor_delight name = "The Doctor's Delight" @@ -1894,7 +1921,7 @@ glass_name = "The Doctor's Delight" glass_desc = "A healthy mixture of juices, guaranteed to keep you healthy until the next toolboxing takes place." - allergen_type = FRUIT + allergen_type = FRUIT|DAIRY //Made from several fruit juices, and cream. /datum/reagent/drink/doctor_delight/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2004,7 +2031,7 @@ glass_name = "Dream Cream" glass_desc = "A smoothy, silky mix of honey and dairy." - allergen_type = FRUIT|DAIRY + allergen_type = DAIRY //Made using dairy /datum/reagent/drink/soda/vilelemon name = "Vile Lemon" @@ -2017,7 +2044,7 @@ glass_name = "Vile Lemon" glass_desc = "A sour, fizzy drink with lemonade and lemonlime." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made from lemonade /datum/reagent/drink/entdraught name = "Ent's Draught" @@ -2029,7 +2056,7 @@ glass_name = "Ent's Draught" glass_desc = "You can almost smell the tranquility emanating from this." - allergen_type = FRUIT + //allergen_type = FRUIT Sorry to break the news, chief. Honey is not a fruit. /datum/reagent/drink/lovepotion name = "Love Potion" @@ -2040,7 +2067,7 @@ glass_name = "Love Potion" glass_desc = "Love me tender, love me sweet." - allergen_type = FRUIT|DAIRY + allergen_type = FRUIT|DAIRY //Made from cream(dairy) and berryjuice(fruit) /datum/reagent/drink/oilslick name = "Oil Slick" @@ -2054,7 +2081,7 @@ glass_name = "Oil Slick" glass_desc = "A concoction that should probably be in an engine, rather than your stomach." glass_icon = DRINK_ICON_NOISY - allergen_type = VEGETABLE|FRUIT + allergen_type = VEGETABLE //Made from corn oil /datum/reagent/drink/slimeslammer name = "Slick Slimes Slammer" @@ -2068,7 +2095,7 @@ glass_name = "Slick Slime Slammer" glass_desc = "A concoction that should probably be in an engine, rather than your stomach. Still." glass_icon = DRINK_ICON_NOISY - allergen_type = VEGETABLE|SEEDS + allergen_type = VEGETABLE|SEEDS //Made from corn oil and peanutbutter /datum/reagent/drink/eggnog name = "Eggnog" @@ -2079,7 +2106,7 @@ glass_name = "Eggnog" glass_desc = "You can't egg-nore the holiday cheer all around you" - allergen_type = DAIRY + allergen_type = DAIRY|EGGS //Eggnog is made with dairy and eggs. /datum/reagent/drink/nuclearwaste name = "Nuclear Waste" @@ -2094,6 +2121,7 @@ glass_desc = "Sadly, no super powers." glass_icon = DRINK_ICON_NOISY glass_special = list(DRINK_FIZZ) + allergen_type = VEGETABLE //Made from oilslick, so has the same allergens. /datum/reagent/drink/nuclearwaste/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2120,7 +2148,7 @@ glass_desc = "A pitiful sludge that looks vaguely like a soda.. if you look at it a certain way." glass_icon = DRINK_ICON_NOISY glass_special = list(DRINK_FIZZ) - allergen_type = VEGETABLE + allergen_type = VEGETABLE //Made from corn oil /datum/reagent/drink/sodaoil/affect_blood(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2150,6 +2178,7 @@ glass_name = "mojito" glass_desc = "Mint, bubbly water, and citrus, made for sailing." glass_special = list(DRINK_FIZZ) + allergen_type = FRUIT //Made with lime juice /datum/reagent/drink/sexonthebeach name = "Virgin Sex On The Beach" @@ -2160,7 +2189,7 @@ glass_name = "sex on the beach" glass_desc = "A secret combination of orange juice and pomegranate." - allergen_type = FRUIT + allergen_type = FRUIT //Made with orange juice /datum/reagent/drink/driverspunch name = "Driver's Punch" @@ -2172,7 +2201,7 @@ glass_name = "driver`s punch" glass_desc = "A fruity punch!" glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with appleade and orange juice /datum/reagent/drink/mintapplesparkle name = "Mint Apple Sparkle" @@ -2184,7 +2213,7 @@ glass_name = "mint apple sparkle" glass_desc = "Delicious appleade with a touch of mint." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with appleade /datum/reagent/drink/berrycordial name = "Berry Cordial" @@ -2196,7 +2225,7 @@ glass_name = "berry cordial" glass_desc = "How berry cordial of you." glass_icon = DRINK_ICON_NOISY - allergen_type = FRUIT + allergen_type = FRUIT //Made with berry and lemonjuice /datum/reagent/drink/tropicalfizz name = "Tropical Fizz" @@ -2209,7 +2238,7 @@ glass_desc = "One sip and you're in the bahamas." glass_icon = DRINK_ICON_NOISY glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made with several fruit juices /datum/reagent/drink/fauxfizz name = "Faux Fizz" @@ -2223,7 +2252,7 @@ glass_desc = "One sip and you're in the bahamas... maybe." glass_icon = DRINK_ICON_NOISY glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //made with several fruit juices /* Alcohol */ @@ -2253,7 +2282,7 @@ glass_name = "ale" glass_desc = "A freezing pint of delicious ale" - allergen_type = GRAINS + allergen_type = GRAINS //Barley is grain /datum/reagent/ethanol/beer name = "Beer" @@ -2267,7 +2296,7 @@ glass_name = "beer" glass_desc = "A freezing pint of beer" - allergen_type = GRAINS + allergen_type = GRAINS //Made from grains /datum/reagent/ethanol/beer/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2287,7 +2316,7 @@ glass_name = "lite beer" glass_desc = "A freezing pint of lite beer" - allergen_type = GRAINS + allergen_type = GRAINS //Made from grains /datum/reagent/ethanol/bluecuracao name = "Blue Curacao" @@ -2301,7 +2330,7 @@ glass_name = "blue curacao" glass_desc = "Exotically blue, fruity drink, distilled from oranges." - allergen_type = FRUIT + allergen_type = FRUIT //Made from oranges(fruit) /datum/reagent/ethanol/cognac name = "Cognac" @@ -2315,7 +2344,7 @@ glass_name = "cognac" glass_desc = "Damn, you feel like some kind of French aristocrat just by holding this." - allergen_type = FRUIT + allergen_type = FRUIT //Cognac is made from wine which is made from grapes. /datum/reagent/ethanol/deadrum name = "Deadrum" @@ -2357,12 +2386,12 @@ glass_name = "gin" glass_desc = "A crystal clear glass of Griffeater gin." - allergen_type = FRUIT + allergen_type = FRUIT //Made from juniper berries //Base type for alchoholic drinks containing coffee /datum/reagent/ethanol/coffee overdose = 45 - allergen_type = COFFEE + allergen_type = COFFEE //Contains coffee or is made from coffee /datum/reagent/ethanol/coffee/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) if(alien == IS_DIONA) @@ -2416,7 +2445,7 @@ glass_name = "melon liquor" glass_desc = "A relatively sweet and fruity 46 proof liquor." - allergen_type = FRUIT + allergen_type = FRUIT //Made from watermelons /datum/reagent/ethanol/melonspritzer name = "Melon Spritzer" @@ -2430,7 +2459,7 @@ glass_desc = "Melons: Citrus style." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made from watermelon juice, apple juice, and lime juice /datum/reagent/ethanol/rum name = "Rum" @@ -2444,7 +2473,7 @@ glass_name = "rum" glass_desc = "Makes you want to buy a ship and just go pillaging." -/datum/reagent/ethanol/sake +/datum/reagent/ethanol/sake //Made from rice, yes. Rice is technically a grain, but also kinda a psuedo-grain, so I don't count it for grain allergies. name = "Sake" id = "sake" description = "Anime's favorite drink." @@ -2466,7 +2495,7 @@ glass_name = "sex on the beach" glass_desc = "A concoction of vodka and a secret combination of orange juice and pomegranate." - allergen_type = FRUIT + allergen_type = FRUIT //Made from orange juice /datum/reagent/ethanol/tequila name = "Tequila" @@ -2511,6 +2540,7 @@ glass_name = "vermouth" glass_desc = "You wonder why you're even drinking this straight." + allergen_type = FRUIT //Vermouth is made from wine which is made from grapes(fruit) /datum/reagent/ethanol/vodka name = "Vodka" @@ -2523,7 +2553,7 @@ glass_name = "vodka" glass_desc = "The glass contain wodka. Xynta." - allergen_type = GRAINS + allergen_type = GRAINS //Vodka is made from grains /datum/reagent/ethanol/vodka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2540,7 +2570,7 @@ glass_name = "whiskey" glass_desc = "The silky, smokey whiskey goodness inside the glass makes the drink look very classy." - allergen_type = GRAINS + allergen_type = GRAINS //Whiskey is also made from grain. /datum/reagent/ethanol/wine name = "Wine" @@ -2553,7 +2583,7 @@ glass_name = "wine" glass_desc = "A very classy looking drink." - allergen_type = FRUIT + allergen_type = FRUIT //Wine is made from grapes (fruit) /datum/reagent/ethanol/wine/champagne name = "Champagne" @@ -2565,7 +2595,7 @@ glass_name = "champagne" glass_desc = "An even classier looking drink." - allergen_type = FRUIT + allergen_type = FRUIT //Still wine, and still made from grapes (fruit) /datum/reagent/ethanol/cider name = "Cider" @@ -2579,7 +2609,7 @@ glass_desc = "The second most Irish drink." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made from fruit // Cocktails @@ -2596,7 +2626,7 @@ glass_name = "Acid Spit" glass_desc = "A drink from the company archives. Made from live aliens." - allergen_type = FRUIT + allergen_type = FRUIT //Made from wine (fruit) /datum/reagent/ethanol/alliescocktail name = "Allies Cocktail" @@ -2609,7 +2639,7 @@ glass_name = "Allies cocktail" glass_desc = "A drink made from your allies." - allergen_type = GRAINS + allergen_type = GRAINS|FRUIT //Made from vodka(grain) as well as martini(vermouth(fruit) and gin(fruit)) /datum/reagent/ethanol/aloe name = "Aloe" @@ -2622,7 +2652,7 @@ glass_name = "Aloe" glass_desc = "Very, very, very good." - allergen_type = FRUIT|DAIRY|GRAINS + allergen_type = FRUIT|DAIRY|GRAINS //Made from cream(dairy), whiskey(grains), and watermelon juice(fruit) /datum/reagent/ethanol/amasec name = "Amasec" @@ -2636,7 +2666,7 @@ glass_name = "Amasec" glass_desc = "Always handy before combat!" - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from wine(fruit) and vodka(grains) /datum/reagent/ethanol/andalusia name = "Andalusia" @@ -2649,7 +2679,7 @@ glass_name = "Andalusia" glass_desc = "A nice, strange named drink." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from whiskey(grains) and lemonjuice (fruit) /datum/reagent/ethanol/antifreeze name = "Anti-freeze" @@ -2664,7 +2694,7 @@ glass_name = "Anti-freeze" glass_desc = "The ultimate refreshment." - allergen_type = GRAINS|DAIRY + allergen_type = GRAINS|DAIRY //Made from vodka(grains) and cream(dairy) /datum/reagent/ethanol/atomicbomb name = "Atomic Bomb" @@ -2679,7 +2709,7 @@ glass_name = "Atomic Bomb" glass_desc = "We cannot take legal responsibility for your actions after imbibing." - allergen_type = COFFEE|DAIRY + allergen_type = COFFEE|DAIRY|FRUIT|GRAINS //Made from b52 which contains kahlua(coffee), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy)) /datum/reagent/ethanol/coffee/b52 name = "B-52" @@ -2693,7 +2723,7 @@ glass_name = "B-52" glass_desc = "Kahlua, Irish cream, and cognac. You will get bombed." - allergen_type = COFFEE|DAIRY + allergen_type = COFFEE|DAIRY|FRUIT|GRAINS //Made from kahlua(coffee), cognac(fruit), and irish cream(Whiskey(grains),cream(dairy)) /datum/reagent/ethanol/bahama_mama name = "Bahama mama" @@ -2706,7 +2736,7 @@ glass_name = "Bahama Mama" glass_desc = "Tropical cocktail." - allergen_type = FRUIT + allergen_type = FRUIT //Made from orange juice and lime juice /datum/reagent/ethanol/bananahonk name = "Banana Mama" @@ -2720,7 +2750,7 @@ glass_name = "Banana Honk" glass_desc = "A drink from Banana Heaven." - allergen_type = FRUIT|DAIRY + allergen_type = FRUIT|DAIRY //Made from banana juice(fruit) and cream(dairy) /datum/reagent/ethanol/barefoot name = "Barefoot" @@ -2733,7 +2763,7 @@ glass_name = "Barefoot" glass_desc = "Barefoot and pregnant." - allergen_type = DAIRY|FRUIT + allergen_type = DAIRY|FRUIT //Made from berry juice (fruit), cream(dairy), and vermouth(fruit) /datum/reagent/ethanol/beepsky_smash name = "Beepsky Smash" @@ -2748,7 +2778,7 @@ glass_name = "Beepsky Smash" glass_desc = "Heavy, hot and strong. Just like the Iron fist of the LAW." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from whiskey(grains), and limejuice(fruit) /datum/reagent/ethanol/beepsky_smash/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -2766,7 +2796,7 @@ glass_name = "bilk" glass_desc = "A brew of milk and beer. For those alcoholics who fear osteoporosis." - allergen_type = GRAINS|DAIRY + allergen_type = GRAINS|DAIRY //Made from milk(dairy) and beer(grains) /datum/reagent/ethanol/black_russian name = "Black Russian" @@ -2779,7 +2809,7 @@ glass_name = "Black Russian" glass_desc = "For the lactose-intolerant. Still as classy as a White Russian." - allergen_type = COFFEE|GRAINS + allergen_type = COFFEE|GRAINS //Made from vodka(grains) and kahlua(coffee) /datum/reagent/ethanol/bloody_mary name = "Bloody Mary" @@ -2792,7 +2822,7 @@ glass_name = "Bloody Mary" glass_desc = "Tomato juice, mixed with Vodka and a lil' bit of lime. Tastes like liquid murder." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from vodka (grains), tomato juice(fruit), and lime juice(fruit) /datum/reagent/ethanol/booger name = "Booger" @@ -2805,9 +2835,9 @@ glass_name = "Booger" glass_desc = "Ewww..." - allergen_type = DAIRY|FRUIT + allergen_type = DAIRY|FRUIT //Made from cream(dairy), banana juice(fruit), and watermelon juice(fruit) -/datum/reagent/ethanol/coffee/brave_bull +/datum/reagent/ethanol/coffee/brave_bull //Since it's under the /coffee subtype, it already has coffee allergens. name = "Brave Bull" id = "bravebull" description = "It's just as effective as Dutch-Courage!" @@ -2830,7 +2860,7 @@ glass_name = "Changeling Sting" glass_desc = "A stingy drink." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from screwdriver(vodka(grains), orange juice(fruit)), lime juice(fruit), and lemon juice(fruit) /datum/reagent/ethanol/martini name = "Classic Martini" @@ -2843,7 +2873,7 @@ glass_name = "classic martini" glass_desc = "Damn, the bartender even stirred it, not shook it." - allergen_type = FRUIT + allergen_type = FRUIT //Made from gin(fruit) and vermouth(fruit) /datum/reagent/ethanol/cuba_libre name = "Cuba Libre" @@ -2869,6 +2899,7 @@ glass_name = "Demons' Blood" glass_desc = "Just looking at this thing makes the hair on the back of your neck stand up." + allergen_type = FRUIT //Made from space mountain wind(fruit) /datum/reagent/ethanol/devilskiss name = "Devils Kiss" @@ -2880,6 +2911,7 @@ glass_name = "Devil's Kiss" glass_desc = "Creepy time!" + allergen_type = COFFEE //Made from kahlua (Coffee) /datum/reagent/ethanol/driestmartini name = "Driest Martini" @@ -2892,6 +2924,7 @@ glass_name = "Driest Martini" glass_desc = "Only for the experienced. You think you see sand floating in the glass." + allergen_type = FRUIT //Made from gin(fruit) /datum/reagent/ethanol/ginfizz name = "Gin Fizz" @@ -2904,7 +2937,7 @@ glass_name = "gin fizz" glass_desc = "Refreshingly lemony, deliciously dry." - allergen_type = FRUIT + allergen_type = FRUIT //Made from gin(fruit) and lime juice(fruit) /datum/reagent/ethanol/grog name = "Grog" @@ -2929,7 +2962,7 @@ glass_name = "Erika Surprise" glass_desc = "The surprise is, it's green!" - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from ale (grains), lime juice (fruit), whiskey(grains), banana juice(fruit) /datum/reagent/ethanol/gargle_blaster name = "Pan-Galactic Gargle Blaster" @@ -2945,7 +2978,7 @@ glass_name = "Pan-Galactic Gargle Blaster" glass_desc = "Does... does this mean that Arthur and Ford are on the station? Oh joy." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from vodka(grains), gin(fruit), whiskey(grains), cognac(fruit), and lime juice(fruit) /datum/reagent/ethanol/gintonic name = "Gin and Tonic" @@ -2958,7 +2991,7 @@ glass_name = "gin and tonic" glass_desc = "A mild but still great cocktail. Drink up, like a true Englishman." - allergen_type = FRUIT + allergen_type = FRUIT //Made from gin(fruit) /datum/reagent/ethanol/goldschlager name = "Goldschlager" @@ -2972,7 +3005,7 @@ glass_name = "Goldschlager" glass_desc = "100 proof that teen girls will drink anything with gold in it." - allergen_type = GRAINS + allergen_type = GRAINS //Made from vodka(grains) /datum/reagent/ethanol/hippies_delight name = "Hippies' Delight" @@ -2987,7 +3020,8 @@ glass_name = "Hippie's Delight" glass_desc = "A drink enjoyed by people during the 1960's." - allergen_type = FRUIT|GRAINS|FUNGI + allergen_type = FRUIT|GRAINS //Made from gargle blaster which contains vodka(grains), gin(fruit), whiskey(grains), cognac(fruit), and lime juice(fruit) + //Also, yes. Mushrooms produce psilocybin; however, it's also still just a chemical compound, and not necessarily going to trigger a fungi allergy. /datum/reagent/ethanol/hooch name = "Hooch" @@ -3014,6 +3048,7 @@ glass_name = "iced beer" glass_desc = "A beer so frosty, the air around it freezes." glass_special = list(DRINK_ICE) + allergen_type = GRAINS //Made from beer(grains) /datum/reagent/ethanol/irishcarbomb name = "Irish Car Bomb" @@ -3026,7 +3061,7 @@ glass_name = "Irish Car Bomb" glass_desc = "An irish car bomb." - allergen_type = DAIRY|GRAINS + allergen_type = DAIRY|GRAINS //Made from ale(grains) and irish cream(whiskey(grains), cream(dairy)) /datum/reagent/ethanol/coffee/irishcoffee name = "Irish Coffee" @@ -3039,7 +3074,7 @@ glass_name = "Irish coffee" glass_desc = "Coffee and alcohol. More fun than a Mimosa to drink in the morning." - allergen_type = COFFEE|DAIRY + allergen_type = COFFEE|DAIRY|GRAINS //Made from Coffee(coffee) and irish cream(whiskey(grains), cream(dairy)) /datum/reagent/ethanol/irish_cream name = "Irish Cream" @@ -3052,7 +3087,7 @@ glass_name = "Irish cream" glass_desc = "It's cream, mixed with whiskey. What else would you expect from the Irish?" - allergen_type = DAIRY + allergen_type = DAIRY|GRAINS //Made from cream(dairy) and whiskey(grains) /datum/reagent/ethanol/longislandicedtea name = "Long Island Iced Tea" @@ -3065,7 +3100,7 @@ glass_name = "Long Island iced tea" glass_desc = "The liquor cabinet, brought together in a delicious mix. Intended for middle-aged alcoholic women only." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from vodka(grains) and gin(fruit) /datum/reagent/ethanol/manhattan name = "Manhattan" @@ -3078,7 +3113,7 @@ glass_name = "Manhattan" glass_desc = "The Detective's undercover drink of choice. He never could stomach gin..." - allergen_type = GRAINS + allergen_type = GRAINS|FRUIT //Made from whiskey(grains), and vermouth(fruit) /datum/reagent/ethanol/manhattan_proj name = "Manhattan Project" @@ -3091,6 +3126,7 @@ glass_name = "Manhattan Project" glass_desc = "A scientist's drink of choice, for thinking how to blow up the station." + allergen_type = GRAINS|FRUIT //Made from manhattan which is made from whiskey(grains), and vermouth(fruit) /datum/reagent/ethanol/manly_dorf name = "The Manly Dorf" @@ -3103,7 +3139,7 @@ glass_name = "The Manly Dorf" glass_desc = "A manly concotion made from Ale and Beer. Intended for true men only." - allergen_type = GRAINS + allergen_type = GRAINS //Made from beer(grains) and ale(grains) /datum/reagent/ethanol/margarita name = "Margarita" @@ -3116,7 +3152,7 @@ glass_name = "margarita" glass_desc = "On the rocks with salt on the rim. Arriba~!" - allergen_type = FRUIT + allergen_type = FRUIT //Made from lime juice(fruit) /datum/reagent/ethanol/mead name = "Mead" @@ -3157,7 +3193,7 @@ glass_icon = DRINK_ICON_NOISY glass_special = list("neuroright") - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from gargle blaster which is made from vodka(grains), gin(fruit), whiskey(grains), cognac(fruit), and lime juice(fruit) /datum/reagent/ethanol/neurotoxin/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -3185,6 +3221,7 @@ glass_name = "???" glass_desc = "A black ichor with an oily purple sheer on top. Are you sure you should drink this?" + allergen_type = FRUIT //Made from berries which are fruit /datum/reagent/ethanol/pwine/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -3223,7 +3260,7 @@ glass_name = "Sbiten" glass_desc = "A spicy mix of Vodka and Spice. Very hot." - allergen_type = GRAINS + allergen_type = GRAINS //Made from vodka(grains) /datum/reagent/ethanol/screwdrivercocktail name = "Screwdriver" @@ -3236,7 +3273,7 @@ glass_name = "Screwdriver" glass_desc = "A simple, yet superb mixture of Vodka and orange juice. Just the thing for the tired engineer." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from vodka(grains) and orange juice(fruit) /datum/reagent/ethanol/silencer name = "Silencer" @@ -3250,6 +3287,7 @@ glass_name = "Silencer" glass_desc = "A drink from mime Heaven." + allergen_type = DAIRY //Made from cream (dairy) /datum/reagent/ethanol/singulo name = "Singulo" @@ -3262,7 +3300,7 @@ glass_name = "Singulo" glass_desc = "A blue-space beverage." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from vodka(grains) and wine(fruit) /datum/reagent/ethanol/snowwhite name = "Snow White" @@ -3276,7 +3314,7 @@ glass_name = "Snow White" glass_desc = "A cold refreshment." - allergen_type = GRAINS|FRUIT + allergen_type = COFFEE|FRUIT //made from Pineapple juice(fruit), lemon_lime(fruit), and kahlua(coffee) /datum/reagent/ethanol/suidream name = "Sui Dream" @@ -3290,7 +3328,7 @@ glass_name = "Sui Dream" glass_desc = "A froofy, fruity, and sweet mixed drink. Understanding the name only brings shame." - allergen_type = FRUIT + allergen_type = FRUIT //Made from blue curacao(fruit) and melon liquor(fruit) /datum/reagent/ethanol/syndicatebomb name = "Syndicate Bomb" @@ -3303,7 +3341,7 @@ glass_name = "Syndicate Bomb" glass_desc = "Tastes like terrorism!" - allergen_type = GRAINS + allergen_type = GRAINS //Made from beer(grain) and whiskeycola(whiskey(grain)) /datum/reagent/ethanol/tequilla_sunrise name = "Tequila Sunrise" @@ -3316,8 +3354,6 @@ glass_name = "Tequilla Sunrise" glass_desc = "Oh great, now you feel nostalgic about sunrises back on Earth..." - allergen_type = FRUIT - /datum/reagent/ethanol/threemileisland name = "Three Mile Island Iced Tea" id = "threemileisland" @@ -3330,7 +3366,7 @@ glass_name = "Three Mile Island iced tea" glass_desc = "A glass of this is sure to prevent a meltdown." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from long island iced tea(vodka(grains) and gin(fruit)) /datum/reagent/ethanol/toxins_special name = "Toxins Special" @@ -3346,6 +3382,8 @@ glass_name = "Toxins Special" glass_desc = "Whoah, this thing is on fire!" + allergen_type = FRUIT //Made from vermouth(fruit) + /datum/reagent/ethanol/vodkamartini name = "Vodka Martini" id = "vodkamartini" @@ -3357,7 +3395,7 @@ glass_name = "vodka martini" glass_desc ="A bastardization of the classic martini. Still great." - allergen_type = GRAINS + allergen_type = GRAINS|FRUIT //made from vodka(grains) and vermouth(fruit) /datum/reagent/ethanol/vodkatonic name = "Vodka and Tonic" @@ -3370,7 +3408,7 @@ glass_name = "vodka and tonic" glass_desc = "For when a gin and tonic isn't Russian enough." - allergen_type = GRAINS + allergen_type = GRAINS //Made from vodka(grains) /datum/reagent/ethanol/white_russian name = "White Russian" @@ -3383,7 +3421,7 @@ glass_name = "White Russian" glass_desc = "A very nice looking drink. But that's just, like, your opinion, man." - allergen_type = COFFEE|GRAINS|DAIRY + allergen_type = COFFEE|GRAINS|DAIRY //Made from black russian(vodka(grains), kahlua(coffee)) and cream(dairy) /datum/reagent/ethanol/whiskey_cola name = "Whiskey Cola" @@ -3397,7 +3435,7 @@ glass_name = "whiskey cola" glass_desc = "An innocent-looking mixture of cola and Whiskey. Delicious." - allergen_type = GRAINS + allergen_type = GRAINS //Made from whiskey(grains) /datum/reagent/ethanol/whiskeysoda name = "Whiskey Soda" @@ -3411,7 +3449,7 @@ glass_name = "whiskey soda" glass_desc = "Ultimate refreshment." - allergen_type = GRAINS + allergen_type = GRAINS //Made from whiskey(grains) /datum/reagent/ethanol/specialwhiskey // I have no idea what this is and where it comes from name = "Special Blend Whiskey" @@ -3424,7 +3462,7 @@ glass_name = "special blend whiskey" glass_desc = "Just when you thought regular station whiskey was good... This silky, amber goodness has to come along and ruin everything." - allergen_type = GRAINS + allergen_type = GRAINS //Whiskey(grains) /datum/reagent/ethanol/unathiliquor name = "Redeemer's Brew" @@ -3462,7 +3500,7 @@ glass_name = "Sake Bomb" glass_desc = "Some sake mixed into a pint of beer." - allergen_type = GRAINS + allergen_type = GRAINS //Made from beer(grains) /datum/reagent/ethanol/tamagozake name = "Tamagozake" @@ -3475,8 +3513,7 @@ glass_name = "Tamagozake" glass_desc = "An egg cracked into sake and sugar." - - allergen_type = GRAINS|DAIRY + allergen_type = EGGS //Made with eggs /datum/reagent/ethanol/ginzamary name = "Ginza Mary" @@ -3489,7 +3526,7 @@ glass_name = "Ginza Mary" glass_desc = "Tomato juice, vodka, and sake make something not quite completely unlike a Bloody Mary." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from vodka(grains) and tomatojuice(fruit) /datum/reagent/ethanol/tokyorose name = "Tokyo Rose" @@ -3502,7 +3539,7 @@ glass_name = "Tokyo Rose" glass_desc = "It's kinda pretty!" - allergen_type = GRAINS|FRUIT + allergen_type = FRUIT //Made from berryjuice /datum/reagent/ethanol/saketini name = "Saketini" @@ -3515,7 +3552,7 @@ glass_name = "Saketini" glass_desc = "What are you doing drinking this outside of New Kyoto?" - allergen_type = GRAINS + allergen_type = FRUIT //Made from gin(fruit) /datum/reagent/ethanol/coffee/elysiumfacepunch name = "Elysium Facepunch" @@ -3528,7 +3565,7 @@ glass_name = "Elysium Facepunch" glass_desc = "A loathesome cocktail favored by Heaven's skeleton shift workers." - allergen_type = COFFEE|FRUIT + allergen_type = COFFEE|FRUIT //Made from kahlua(Coffee) and lemonjuice(fruit) /datum/reagent/ethanol/erebusmoonrise name = "Erebus Moonrise" @@ -3541,7 +3578,7 @@ glass_name = "Erebus Moonrise" glass_desc = "A deeply alcoholic mix, popular in Nyx." - allergen_type = GRAINS + allergen_type = GRAINS //Made from whiskey(grains) and Vodka(grains) /datum/reagent/ethanol/balloon name = "Balloon" @@ -3554,7 +3591,7 @@ glass_name = "Balloon" glass_desc = "A strange drink invented in the aerostats of Venus." - allergen_type = DAIRY|FRUIT + allergen_type = DAIRY|FRUIT //Made from blue curacao(fruit) and cream(dairy) /datum/reagent/ethanol/natunabrandy name = "Natuna Brandy" @@ -3568,7 +3605,7 @@ glass_desc = "On Natuna, they do the best with what they have." glass_special = list(DRINK_FIZZ) - allergen_type = GRAINS + allergen_type = GRAINS //Made from beer(grains) /datum/reagent/ethanol/euphoria name = "Euphoria" @@ -3581,7 +3618,7 @@ glass_name = "Euphoria" glass_desc = "Invented by a Eutopian marketing team, this is one of the most expensive cocktails in existence." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from specialwhiskey(grain) and cognac(fruit) /datum/reagent/ethanol/xanaducannon name = "Xanadu Cannon" @@ -3595,7 +3632,7 @@ glass_name = "Xanadu Cannon" glass_desc = "Common in the entertainment districts of Titan." - allergen_type = GRAINS + allergen_type = GRAINS //Made from ale(grain) /datum/reagent/ethanol/debugger name = "Debugger" @@ -3608,6 +3645,7 @@ glass_name = "Debugger" glass_desc = "From Shelf. Not for human consumption." + allergen_type = VEGETABLE //Made from corn oil(vegetable) /datum/reagent/ethanol/spacersbrew name = "Spacer's Brew" @@ -3621,7 +3659,7 @@ glass_name = "Spacer's Brew" glass_desc = "Ethanol and orange soda. A common emergency drink on frontier colonies." - allergen_type = FRUIT + allergen_type = FRUIT //Made from brownstar(orange juice(fruit)) /datum/reagent/ethanol/binmanbliss name = "Binman Bliss" @@ -3634,8 +3672,6 @@ glass_name = "Binman Bliss" glass_desc = "A dry cocktail popular on Binma." - allergen_type = GRAINS - /datum/reagent/ethanol/chrysanthemum name = "Chrysanthemum" id = "chrysanthemum" @@ -3647,20 +3683,18 @@ glass_name = "Chrysanthemum" glass_desc = "An exotic cocktail from New Kyoto." - allergen_type = GRAINS|FRUIT + allergen_type = FRUIT //Made from melon liquor(fruit) /datum/reagent/ethanol/bitters name = "Bitters" id = "bitters" - description = "A blend of fermented fruits and herbs, commonly used in cocktails." + description = "An aromatic, typically alcohol-based infusions of bittering botanticals and flavoring agents like fruit peels, spices, dried flowers, and herbs." taste_description = "sharp bitterness" color = "#9b6241" // rgb(155, 98, 65) strength = 50 glass_name = "Bitters" - glass_desc = "A blend of fermented fruits and herbs, commonly used in cocktails." - - allergen_type = FRUIT + glass_desc = "An aromatic, typically alcohol-based infusions of bittering botanticals and flavoring agents like fruit peels, spices, dried flowers, and herbs." /datum/reagent/ethanol/soemmerfire name = "Soemmer Fire" @@ -3673,7 +3707,7 @@ glass_name = "Soemmer Fire" glass_desc = "A painfully hot mixed drink, for when you absolutely need to hurt right now." - allergen_type = GRAINS + allergen_type = GRAINS|FRUIT //Made from manhattan(whiskey(grains), vermouth(fruit)) /datum/reagent/drink/soemmerfire/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -3692,7 +3726,7 @@ glass_name = "Wine Brandy" glass_desc = "A very classy looking after-dinner drink." - allergen_type = FRUIT + allergen_type = FRUIT //Made from wine, which is made from fruit /datum/reagent/ethanol/morningafter name = "Morning After" @@ -3705,7 +3739,7 @@ glass_name = "Morning After" glass_desc = "The finest hair of the dog, coming up!" - allergen_type = GRAINS + allergen_type = GRAINS|COFFEE //Made from sbiten(vodka(grain)) and coffee(coffee) /datum/reagent/ethanol/vesper name = "Vesper" @@ -3718,7 +3752,7 @@ glass_name = "Vesper" glass_desc = "A dry martini, ice cold and well shaken." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from wine(fruit), vodka(grain), and gin(fruit) /datum/reagent/ethanol/rotgut name = "Rotgut Fever Dream" @@ -3732,7 +3766,7 @@ glass_name = "Rotgut Fever Dream" glass_desc = "Why are you doing this to yourself?" - allergen_type = GRAINS + allergen_type = GRAINS //Made from whiskey(grains) and vodka(grains) /datum/reagent/ethanol/voxdelight name = "Vox's Delight" @@ -3765,7 +3799,7 @@ glass_name = "Screaming Viking" glass_desc = "A boozy, citrus-packed brew." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from martini(gin(fruit), vermouth(fruit)), vodka tonic(vodka(grain)), and lime juice(fruit) /datum/reagent/ethanol/robustin name = "Robustin" @@ -3778,7 +3812,7 @@ glass_name = "Robustin" glass_desc = "A bootleg brew of all the worst things on station." - allergen_type = GRAINS|DAIRY + allergen_type = GRAINS|DAIRY //Made from antifreeze(vodka(grains),cream(dairy)) and vodka(grains) /datum/reagent/ethanol/virginsip name = "Virgin Sip" @@ -3791,6 +3825,8 @@ glass_name = "Virgin Sip" glass_desc = "A perfect martini, watered down and ruined." + allergen_type = FRUIT //Made from driest martini(gin(fruit)) + /datum/reagent/ethanol/jellyshot name = "Jelly Shot" id = "jellyshot" @@ -3802,7 +3838,7 @@ glass_name = "Jelly Shot" glass_desc = "A thick and vibrant alcoholic gel, perfect for the night life." - allergen_type = FRUIT + allergen_type = FRUIT|GRAINS //Made from cherry jelly(fruit), and vodka(grains) /datum/reagent/ethanol/slimeshot name = "Named Bullet" @@ -3815,6 +3851,8 @@ glass_name = "Named Bullet" glass_desc = "A thick slime jelly shot. You can feel your death approaching." + allergen_type = GRAINS //Made from vodka(grains) + /datum/reagent/drink/slimeshot/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() if(alien == IS_DIONA) @@ -3832,7 +3870,7 @@ glass_name = "Clover Club" glass_desc = "A light and refreshing raspberry cocktail." - allergen_type = FRUIT + allergen_type = FRUIT //Made from berry juice(fruit), lemon juice(fruit), and gin(fruit) /datum/reagent/ethanol/negroni name = "Negroni" @@ -3845,7 +3883,7 @@ glass_name = "Negroni" glass_desc = "A dark, complicated blend, perfect for relaxing nights by the fire." - allergen_type = FRUIT + allergen_type = FRUIT //Made from gin(fruit) and vermouth(fruit) /datum/reagent/ethanol/whiskeysour name = "Whiskey Sour" @@ -3858,7 +3896,7 @@ glass_name = "Whiskey Sour" glass_desc = "A smokey, refreshing lemoned whiskey." - allergen_type = GRAINS|FRUIT + allergen_type = GRAINS|FRUIT //Made from whiskey(grains) and lemon juice(fruit) /datum/reagent/ethanol/oldfashioned name = "Old Fashioned" @@ -3871,7 +3909,7 @@ glass_name = "Old Fashioned" glass_desc = "A classic mix of whiskey and sugar... simple and direct." - allergen_type = GRAINS + allergen_type = GRAINS //Made from whiskey(grains) /datum/reagent/ethanol/daiquiri name = "Daiquiri" @@ -3884,7 +3922,7 @@ glass_name = "Daiquiri" glass_desc = "Refeshing rum and citrus. Time for a tropical get away." - allergen_type = FRUIT + allergen_type = FRUIT //Made from lime juice(fruit) /datum/reagent/ethanol/mojito name = "Mojito" @@ -3898,7 +3936,7 @@ glass_desc = "Minty rum and citrus, made for sailing." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made from lime juice(fruit) /datum/reagent/ethanol/paloma name = "Paloma" @@ -3912,7 +3950,7 @@ glass_desc = "Tequila and citrus, iced just right..." glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT + allergen_type = FRUIT //Made from orange juice(fruit) /datum/reagent/ethanol/piscosour name = "Pisco Sour" @@ -3925,7 +3963,7 @@ glass_name = "Pisco Sour" glass_desc = "South American bliss, served ice cold." - allergen_type = FRUIT + allergen_type = FRUIT //Made from wine brandy(fruit), and lemon juice(fruit) /datum/reagent/ethanol/coldfront name = "Cold Front" @@ -3940,7 +3978,7 @@ glass_name = "Cold Front" glass_desc = "Minty, rich, and painfully cold. It's a blizzard in a cup." - allergen_type = GRAINS + allergen_type = COFFEE //Made from iced coffee(coffee) /datum/reagent/ethanol/mintjulep name = "Mint Julep" @@ -3954,8 +3992,6 @@ glass_name = "Mint Julep" glass_desc = "Minty and refreshing, perfect for a hot day." - allergen_type = GRAINS - /datum/reagent/ethanol/godsake name = "Gods Sake" id = "godsake" @@ -3967,8 +4003,6 @@ glass_name = "God's Sake" glass_desc = "A glass of sake." - allergen_type = GRAINS - /datum/reagent/ethanol/godka name = "Godka" id = "godka" @@ -3981,7 +4015,7 @@ glass_desc = "The glass is barely able to contain the wodka. Xynta." glass_special = list(DRINK_FIZZ) - allergen_type = GRAINS + allergen_type = GRAINS //Made from vodka(grain) /datum/reagent/ethanol/godka/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() @@ -4011,7 +4045,7 @@ glass_desc = "A very pious looking drink." glass_icon = DRINK_ICON_NOISY - allergen_type = FRUIT + allergen_type = FRUIT //Made from grapes(fruit) /datum/reagent/ethanol/holy_mary name = "Holy Mary" @@ -4024,7 +4058,7 @@ glass_name = "Holy Mary" glass_desc = "Angel's Ichor, mixed with Vodka and a lil' bit of lime. Tastes like liquid ascension." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from vodka(grain), holy wine(fruit), and lime juice(fruit) /datum/reagent/ethanol/angelswrath name = "Angels Wrath" @@ -4041,7 +4075,7 @@ glass_icon = DRINK_ICON_NOISY glass_special = list(DRINK_FIZZ) - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT //Made from space mountain wind(fruit), and holy wine(fruit) /datum/reagent/ethanol/angelskiss name = "Angels Kiss" @@ -4054,7 +4088,7 @@ glass_name = "Angel's Kiss" glass_desc = "Miracle time!" - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|COFFEE //Made from holy wine(fruit), and kahlua(coffee) /datum/reagent/ethanol/ichor_mead name = "Ichor Mead" @@ -4067,7 +4101,7 @@ glass_name = "Ichor Mead" glass_desc = "A trip to Valhalla." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT //Made from holy wine(fruit) /datum/reagent/ethanol/schnapps_pep name = "Peppermint Schnapps" @@ -4091,7 +4125,7 @@ glass_name = "peach schnapps" glass_desc = "A glass of peach schnapps. It seems like it'd be better, mixed." - allergen_type = FRUIT + allergen_type = FRUIT //Made from peach(fruit) /datum/reagent/ethanol/schnapps_lem name = "Lemonade Schnapps" @@ -4104,7 +4138,7 @@ glass_name = "lemonade schnapps" glass_desc = "A glass of lemonade schnapps. It seems like it'd be better, mixed." - allergen_type = FRUIT + allergen_type = FRUIT //Made from lemons(fruit) /datum/reagent/ethanol/fusionnaire name = "Fusionnaire" @@ -4117,7 +4151,7 @@ glass_name = "fusionnaire" glass_desc = "A relatively new cocktail, mostly served in the bars of NanoTrasen owned stations." - allergen_type = FRUIT|GRAINS + allergen_type = FRUIT|GRAINS //Made from lemon juice(fruit), vodka(grains), and lemon schnapps(fruit) /datum/reagent/ethanol/deathbell name = "Deathbell" @@ -4133,7 +4167,7 @@ glass_name = "Deathbell" glass_desc = "The perfect blend of the most alcoholic things a bartender can get their hands on." - allergen_type = GRAINS|DAIRY|FRUIT + allergen_type = GRAINS|DAIRY|FRUIT //Made from antifreeze(vodka(grains),cream(dairy)), gargleblaster(vodka(grains),gin(fruit),whiskey(grains),cognac(fruit),lime juice(fruit)), and syndicate bomb(beer(grain),whiskeycola(whiskey(grain))) /datum/reagent/ethanol/deathbell/affect_ingest(var/mob/living/carbon/M, var/alien, var/removed) ..() diff --git a/code/modules/research/designs.dm b/code/modules/research/designs.dm index b150d04cfb..b3756e59fe 100644 --- a/code/modules/research/designs.dm +++ b/code/modules/research/designs.dm @@ -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 diff --git a/code/modules/research/designs/bio_devices_vr.dm b/code/modules/research/designs/bio_devices_vr.dm index 2deb1854f9..996aab3c6d 100644 --- a/code/modules/research/designs/bio_devices_vr.dm +++ b/code/modules/research/designs/bio_devices_vr.dm @@ -2,7 +2,7 @@ name = "nanite implant framework" id = "nif" req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 8000, "uranium" = 6000, "diamond" = 6000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 8000, MAT_COPPER = 2000, "uranium" = 5000, "diamond" = 5000) build_path = /obj/item/device/nif sort_string = "JVAAA" @@ -10,7 +10,7 @@ name = "bioadaptive NIF" id = "bioadapnif" req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, "uranium" = 10000, "diamond" = 10000) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 15000, MAT_COPPER = 2000, "uranium" = 10000, "diamond" = 10000) build_path = /obj/item/device/nif/bioadap sort_string = "JVAAB" @@ -18,6 +18,6 @@ name = "adv. NIF repair tool" id = "anrt" req_tech = list(TECH_MAGNET = 5, TECH_BLUESPACE = 5, TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_DATA = 5) - materials = list(DEFAULT_WALL_MATERIAL = 200, "glass" = 3000, "uranium" = 2000, "diamond" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 3000, MAT_COPPER = 4000, "uranium" = 2000, "diamond" = 2000) build_path = /obj/item/device/nifrepairer sort_string = "JVABA" \ No newline at end of file diff --git a/code/modules/research/designs/implants_vr.dm b/code/modules/research/designs/implants_vr.dm index 07b4a37f05..937d93e563 100644 --- a/code/modules/research/designs/implants_vr.dm +++ b/code/modules/research/designs/implants_vr.dm @@ -10,7 +10,7 @@ name = "Size control implant" id = "implant_size" req_tech = list(TECH_MATERIAL = 3, TECH_BIO = 4, TECH_DATA = 4, TECH_ENGINEERING = 3) - materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, "silver" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 2000, "glass" = 2000, MAT_COPPER = 2000, "silver" = 2000) build_path = /obj/item/weapon/implanter/sizecontrol sort_string = "MFAVB" diff --git a/code/modules/research/designs/medical_vr.dm b/code/modules/research/designs/medical_vr.dm index aeb485e296..3de9ba7aa6 100644 --- a/code/modules/research/designs/medical_vr.dm +++ b/code/modules/research/designs/medical_vr.dm @@ -17,7 +17,7 @@ name = "SleeveMate 3700" id = "sleevemate" req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 2, TECH_BIO = 2) - materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 4000, MAT_COPPER = 1000) build_path = /obj/item/device/sleevemate sort_string = "KCAVA" @@ -26,7 +26,7 @@ desc = "This prototype hypospray is a sterile, air-needle autoinjector for rapid administration of drugs to patients." id = "protohypospray" req_tech = list(TECH_MATERIAL = 4, TECH_ENGINEERING = 3, TECH_POWER = 2, TECH_BIO = 4, TECH_ILLEGAL = 2) - materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 1500, "silver" = 2000, "gold" = 1500, "uranium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 500, "glass" = 1500, MAT_COPPER = 500, "silver" = 2000, "gold" = 1500, "uranium" = 1000) build_path = /obj/item/weapon/reagent_containers/hypospray/science sort_string = "KCAVB" @@ -41,7 +41,7 @@ name = "cell-loaded medigun" id = "cell_medigun" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 3, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 8000, "plastic" = 8000, "glass" = 5000, "silver" = 1000, "gold" = 1000, "uranium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 8000, "plastic" = 8000, "glass" = 5000, MAT_COPPER = 500, "silver" = 750, "gold" = 750, "uranium" = 1000) build_path = /obj/item/weapon/gun/projectile/cell_loaded/medical sort_string = "KVAAA" @@ -97,7 +97,7 @@ name = "TOXIN" id = "ml3m_cell_toxin" req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500) build_path = /obj/item/ammo_casing/microbattery/medical/toxin sort_string = "KVCBA" @@ -105,7 +105,7 @@ name = "OMNI" id = "ml3m_cell_omni" req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500) build_path = /obj/item/ammo_casing/microbattery/medical/omni sort_string = "KVCBB" @@ -113,7 +113,7 @@ name = "ANTIRAD" id = "ml3m_cell_antirad" req_tech = list(TECH_MATERIAL = 3, TECH_MAGNET = 3, TECH_BIO = 4) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500) build_path = /obj/item/ammo_casing/microbattery/medical/antirad sort_string = "KVCBC" @@ -123,7 +123,7 @@ name = "BRUTE-II" id = "ml3m_cell_brute2" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "gold" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/brute2 sort_string = "KVCCA" @@ -131,7 +131,7 @@ name = "BURN-II" id = "ml3m_cell_burn2" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "gold" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/burn2 sort_string = "KVCCB" @@ -139,7 +139,7 @@ name = "STABILIZE-II" id = "ml3m_cell_stabilize2" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "silver" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "silver" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/stabilize2 sort_string = "KVCCC" @@ -147,7 +147,7 @@ name = "OMNI-II" id = "ml3m_cell_omni2" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 2, TECH_BIO = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "uranium" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/omni2 sort_string = "KVCCD" @@ -157,7 +157,7 @@ name = "TOXIN-II" id = "ml3m_cell_toxin2" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 4000, "silver" = 4000, "diamond" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "uranium" = 1000, "silver" = 1000, "diamond" = 500) build_path = /obj/item/ammo_casing/microbattery/medical/toxin2 sort_string = "KVCDA" /* @@ -165,7 +165,7 @@ name = "HASTE" id = "ml3m_cell_haste" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000, "silver" = 1000, "diamond" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "gold" = 1000, "silver" = 1000, "diamond" = 500) build_path = /obj/item/ammo_casing/microbattery/medical/haste sort_string = "KVCDB" @@ -173,7 +173,7 @@ name = "RESIST" id = "ml3m_cell_resist" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "gold" = 1000, "uranium" = 1000, "diamond" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 500, "gold" = 1000, "uranium" = 1000, "diamond" = 500) build_path = /obj/item/ammo_casing/microbattery/medical/resist sort_string = "KVCDC" */ @@ -181,7 +181,7 @@ name = "CORPSE MEND" id = "ml3m_cell_corpse_mend" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 3, TECH_BIO = 6) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "phoron" = 3000, "diamond" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 1000, "phoron" = 3000, "diamond" = 2500) build_path = /obj/item/ammo_casing/microbattery/medical/corpse_mend sort_string = "KVCDD" @@ -191,7 +191,7 @@ name = "BRUTE-III" id = "ml3m_cell_brute3" req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_PRECURSOR = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 1000, "diamond" = 500, "verdantium" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/brute3 sort_string = "KVCEA" @@ -199,7 +199,7 @@ name = "BURN-III" id = "ml3m_cell_burn3" req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_PRECURSOR = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 1000, "diamond" = 500, "verdantium" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/burn3 sort_string = "KVCEB" @@ -207,7 +207,7 @@ name = "TOXIN-III" id = "ml3m_cell_toxin3" req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_ARCANE = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 1000, "diamond" = 500, "verdantium" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/toxin3 sort_string = "KVCEC" @@ -215,7 +215,7 @@ name = "OMNI-III" id = "ml3m_cell_omni3" req_tech = list(TECH_MATERIAL = 7, TECH_MAGNET = 6, TECH_POWER = 5, TECH_BIO = 7, TECH_ARCANE = 2) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "diamond" = 500, "verdantium" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 1000, "diamond" = 500, "verdantium" = 1000) build_path = /obj/item/ammo_casing/microbattery/medical/omni3 sort_string = "KVCED" @@ -225,7 +225,7 @@ name = "SHRINK" id = "ml3m_cell_shrink" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 2000) build_path = /obj/item/ammo_casing/microbattery/medical/shrink sort_string = "KVCOA" @@ -233,7 +233,7 @@ name = "GROW" id = "ml3m_cell_grow" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 2000) build_path = /obj/item/ammo_casing/microbattery/medical/grow sort_string = "KVCOB" @@ -241,7 +241,7 @@ name = "NORMALSIZE" id = "ml3m_cell_normalsize" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_BLUESPACE = 3, TECH_BIO = 5, TECH_ILLEGAL = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, "uranium" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "plastic" = 2500, MAT_COPPER = 2000) build_path = /obj/item/ammo_casing/microbattery/medical/normalsize sort_string = "KVCOC" */ diff --git a/code/modules/research/designs/mining_toys.dm b/code/modules/research/designs/mining_toys.dm index 9e1ad560e2..4fb754b145 100644 --- a/code/modules/research/designs/mining_toys.dm +++ b/code/modules/research/designs/mining_toys.dm @@ -48,6 +48,14 @@ materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 1000, MAT_COPPER = 50) build_path = /obj/item/device/depth_scanner sort_string = "FBAAA" + +/datum/design/item/weapon/mining/mining_scanner + id = "mining_scanner" + req_tech = list(TECH_MAGNET = 3, TECH_ENGINEERING = 4, TECH_BLUESPACE = 1) + materials = list(DEFAULT_WALL_MATERIAL = 1000,"glass" = 500, MAT_COPPER = 250) + build_path = /obj/item/weapon/mining_scanner/advanced + sort_string = "FBAAB" + // CHOMPstation addition /datum/design/item/weapon/mining/satchel_holding name = "Satchel of Holding" @@ -56,5 +64,5 @@ req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 6) materials = list("gold" = 2500, "diamond" = 1000, "uranium" = 250) build_path = /obj/item/weapon/storage/bag/ore/holding - sort_string = "FBAAB" -// CHOMPstation addition end \ No newline at end of file + sort_string = "FBAAC" +// CHOMPstation addition end diff --git a/code/modules/research/designs/misc_vr.dm b/code/modules/research/designs/misc_vr.dm index 5d8bcc2d81..bd0aff6942 100644 --- a/code/modules/research/designs/misc_vr.dm +++ b/code/modules/research/designs/misc_vr.dm @@ -18,7 +18,7 @@ name = "Size gun" id = "sizegun" req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2) - materials = list(DEFAULT_WALL_MATERIAL = 3000, MAT_GLASS = 2000, MAT_URANIUM = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 3000, MAT_GLASS = 2000, MAT_COPPER = 2000) build_path = /obj/item/weapon/gun/energy/sizegun sort_string = "TAVBA" @@ -26,7 +26,7 @@ name = "Body Snatcher" id = "bodysnatcher" req_tech = list(TECH_MAGNET = 3, TECH_BIO = 3, TECH_ILLEGAL = 2) - materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_GLASS = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 4000, MAT_GLASS = 4000, MAT_COPPER = 2000) build_path = /obj/item/device/bodysnatcher sort_string = "TBVAA" @@ -34,7 +34,7 @@ name = "Inducer (Scientific)" id = "inducersci" req_tech = list(TECH_BLUESPACE = 4, TECH_MATERIAL = 5, TECH_POWER = 6) - materials = list(DEFAULT_WALL_MATERIAL = 8000, MAT_GLASS = 2000, MAT_URANIUM = 4000, MAT_PHORON = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 7000, MAT_GLASS = 2000, MAT_COPPER = 2000, MAT_URANIUM = 3000, MAT_PHORON = 4000) build_path = /obj/item/weapon/inducer/sci sort_string = "TCVAA" @@ -42,6 +42,6 @@ name = "Inducer (Industrial)" id = "inducerind" req_tech = list(TECH_BLUESPACE = 5, TECH_MATERIAL = 7, TECH_POWER = 7) - materials = list(DEFAULT_WALL_MATERIAL = 3000, MAT_GLASS = 2000, MAT_URANIUM = 2000, MAT_TITANIUM = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 2500, MAT_GLASS = 2000, MAT_COPPER = 2000, MAT_URANIUM = 1500, MAT_TITANIUM = 1000) build_path = /obj/item/weapon/inducer/unloaded sort_string = "TCVAB" diff --git a/code/modules/research/designs/weapons_vr.dm b/code/modules/research/designs/weapons_vr.dm index 6962d2d869..6a1dcbdf0b 100644 --- a/code/modules/research/designs/weapons_vr.dm +++ b/code/modules/research/designs/weapons_vr.dm @@ -13,7 +13,7 @@ desc = "The 'Protector' is an advanced energy gun that cannot be fired in lethal mode on low security alert levels, but features DNA locking and a powerful stun." id = "protector" req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 3, TECH_MAGNET = 2) - materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, "silver" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 4000, "glass" = 2000, MAT_COPPER = 500, "silver" = 1000) build_path = /obj/item/weapon/gun/energy/gun/protector sort_string = "MAAVA" @@ -21,7 +21,7 @@ desc = "A 'Sickshot' is a 4-shot energy revolver that causes nausea and confusion." id = "sickshot" req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_MAGNET = 2) - materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 3000, "glass" = 2000, MAT_COPPER = 500) build_path = /obj/item/weapon/gun/energy/sickshot sort_string = "MAAVB" @@ -29,7 +29,7 @@ desc = "The \"Varmint Catcher\" is an energy net projector designed to immobilize dangerous wildlife." id = "netgun" req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 5, TECH_MAGNET = 3) - materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 6000, "glass" = 3000, MAT_COPPER = 500) build_path = /obj/item/weapon/gun/energy/netgun sort_string = "MAAVC" @@ -53,7 +53,7 @@ name = "Advanced anti-particle rifle" id = "advparticle" req_tech = list(TECH_COMBAT = 4, TECH_MATERIAL = 5, TECH_POWER = 3, TECH_MAGNET = 3) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, "gold" = 1000, "uranium" = 750) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 1000, MAT_COPPER = 250, "gold" = 1000, "uranium" = 750) build_path = /obj/item/weapon/gun/energy/particle/advanced sort_string = "MAAUA" @@ -61,7 +61,7 @@ name = "Anti-particle cannon" id = "particlecannon" req_tech = list(TECH_COMBAT = 5, TECH_MATERIAL = 5, TECH_POWER = 4, TECH_MAGNET = 4) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1500, "gold" = 2000, "uranium" = 1000, "diamond" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 1500, MAT_COPPER = 1000, "gold" = 2000, "uranium" = 1000, "diamond" = 2000) build_path = /obj/item/weapon/gun/energy/particle/cannon sort_string = "MAAUB" @@ -83,7 +83,7 @@ name = "cell-loaded revolver" id = "nsfw_prototype" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 4, TECH_COMBAT = 7) - materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 6000, "phoron" = 8000, "uranium" = 4000) + materials = list(DEFAULT_WALL_MATERIAL = 10000, "glass" = 6000, MAT_COPPER = 4000, "phoron" = 6000, "uranium" = 2000) build_path = /obj/item/weapon/gun/projectile/cell_loaded/combat/prototype sort_string = "MAVAA" @@ -103,7 +103,7 @@ name = "STUN" id = "nsfw_cell_stun" req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 2, TECH_POWER = 3, TECH_COMBAT = 3) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 1000) build_path = /obj/item/ammo_casing/microbattery/combat/stun sort_string = "MAVCA" @@ -111,7 +111,7 @@ name = "LETHAL" id = "nsfw_cell_lethal" req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "phoron" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 1000, "phoron" = 2000) build_path = /obj/item/ammo_casing/microbattery/combat/lethal sort_string = "MAVCB" @@ -119,7 +119,7 @@ name = "NET" id = "nsfw_cell_net" req_tech = list(TECH_MATERIAL = 4, TECH_MAGNET = 3, TECH_POWER = 3, TECH_COMBAT = 4) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "uranium" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 1000, "uranium" = 2000) build_path = /obj/item/ammo_casing/microbattery/combat/net sort_string = "MAVCC" @@ -127,7 +127,7 @@ name = "ION" id = "nsfw_cell_ion" req_tech = list(TECH_MATERIAL = 5, TECH_MAGNET = 3, TECH_POWER = 5, TECH_COMBAT = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 3000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 1000, "silver" = 3000) build_path = /obj/item/ammo_casing/microbattery/combat/ion sort_string = "MAVCD" @@ -135,7 +135,7 @@ name = "SCATTERSTUN" id = "nsfw_cell_shotstun" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 3, TECH_POWER = 6, TECH_COMBAT = 6) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 2000, "gold" = 2000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 2000, "silver" = 2000, "gold" = 2000) build_path = /obj/item/ammo_casing/microbattery/combat/shotstun sort_string = "MAVCE" @@ -143,7 +143,7 @@ name = "XRAY" id = "nsfw_cell_xray" req_tech = list(TECH_MATERIAL = 6, TECH_MAGNET = 4, TECH_POWER = 5, TECH_COMBAT = 7) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "silver" = 1000, "gold" = 1000, "uranium" = 1000, "phoron" = 1000) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 2000, "silver" = 1000, "gold" = 1000, "uranium" = 1000, "phoron" = 1000) build_path = /obj/item/ammo_casing/microbattery/combat/xray sort_string = "MAVCF" */ @@ -154,7 +154,7 @@ name = "STRIPPER" id = "nsfw_cell_stripper" req_tech = list(TECH_MATERIAL = 7, TECH_BIO = 4, TECH_POWER = 4, TECH_COMBAT = 4, TECH_ILLEGAL = 5) - materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, "uranium" = 2000, "phoron" = 2000, "diamond" = 500) + materials = list(DEFAULT_WALL_MATERIAL = 5000, "glass" = 5000, MAT_COPPER = 2000, "uranium" = 2000, "phoron" = 2000, "diamond" = 500) build_path = /obj/item/ammo_casing/microbattery/combat/stripper sort_string = "MAVCG" diff --git a/code/modules/resleeving/designer.dm b/code/modules/resleeving/designer.dm index 6f8c1e0c9d..8e4578fd25 100644 --- a/code/modules/resleeving/designer.dm +++ b/code/modules/resleeving/designer.dm @@ -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() diff --git a/code/modules/tgui/states/default.dm b/code/modules/tgui/states/default.dm index a69295452b..93ba1df55f 100644 --- a/code/modules/tgui/states/default.dm +++ b/code/modules/tgui/states/default.dm @@ -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 diff --git a/code/modules/tgui/states/observer.dm b/code/modules/tgui/states/observer.dm index bf98f44465..bdfe690dba 100644 --- a/code/modules/tgui/states/observer.dm +++ b/code/modules/tgui/states/observer.dm @@ -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 diff --git a/code/modules/vore/appearance/preferences_vr.dm b/code/modules/vore/appearance/preferences_vr.dm index 5897cb2a48..01caeda13d 100644 --- a/code/modules/vore/appearance/preferences_vr.dm +++ b/code/modules/vore/appearance/preferences_vr.dm @@ -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 diff --git a/code/modules/vore/appearance/sprite_accessories_taur_ch.dm b/code/modules/vore/appearance/sprite_accessories_taur_ch.dm new file mode 100644 index 0000000000..4df2ff7831 --- /dev/null +++ b/code/modules/vore/appearance/sprite_accessories_taur_ch.dm @@ -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" diff --git a/code/modules/vore/appearance/update_icons_vr.dm b/code/modules/vore/appearance/update_icons_vr.dm index 9185db35f3..15ebcc7c9f 100644 --- a/code/modules/vore/appearance/update_icons_vr.dm +++ b/code/modules/vore/appearance/update_icons_vr.dm @@ -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() \ No newline at end of file diff --git a/code/modules/vore/eating/belly_obj_vr.dm b/code/modules/vore/eating/belly_obj_vr.dm index 99c0d94c00..c35c346c41 100644 --- a/code/modules/vore/eating/belly_obj_vr.dm +++ b/code/modules/vore/eating/belly_obj_vr.dm @@ -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 diff --git a/code/modules/vore/eating/bellymodes_vr.dm b/code/modules/vore/eating/bellymodes_vr.dm index 55f0c5cf1b..75a2540a0e 100644 --- a/code/modules/vore/eating/bellymodes_vr.dm +++ b/code/modules/vore/eating/bellymodes_vr.dm @@ -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 diff --git a/code/modules/vore/eating/living_ch.dm b/code/modules/vore/eating/living_ch.dm index 5d8dc28d08..f51bc265b1 100644 --- a/code/modules/vore/eating/living_ch.dm +++ b/code/modules/vore/eating/living_ch.dm @@ -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, "[RTB] has [RTB.reagents.total_volume] units of liquid.") /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("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into their [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their [TB].") else - user.visible_message("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into their [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their [TB].") 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("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [TR]'s [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s [TB].") else - user.visible_message("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]s [RTB] into [TR]'s [TB].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]s [RTB] into [TR]'s [TB].") 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("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into their stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into their stomach.") else - user.visible_message("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into their stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into their stomach.") 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("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [TR]'s stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [TR]'s stomach.") else - user.visible_message("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into [TR]'s stomach.") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [TR]'s stomach.") 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("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from their [RTB] into [T].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from their [RTB] into [T].") else - user.visible_message("[user] [RTB.reagent_transfer_verb]'s [RTB.reagent_name] from [TG]'s [RTB] into [T].") + user.custom_emote_vr(1, "[RTB.reagent_transfer_verb] [RTB.reagent_name] from [TG]'s [RTB] into [T].") 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("[user] spills [RTB.reagent_name] from their [RTB] onto the floor!") + user.custom_emote_vr(1, "spills [RTB.reagent_name] from their [RTB] onto the floor!") else - user.visible_message("[user] spills [RTB.reagent_name] from [TG]'s [RTB] onto the floor!") + user.custom_emote_vr(1, "spills [RTB.reagent_name] from [TG]'s [RTB] onto the floor!") 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 diff --git a/code/modules/vore/eating/living_vr.dm b/code/modules/vore/eating/living_vr.dm index 5173c469cc..d566937c95 100644 --- a/code/modules/vore/eating/living_vr.dm +++ b/code/modules/vore/eating/living_vr.dm @@ -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 diff --git a/code/modules/vore/eating/vorepanel_vr.dm b/code/modules/vore/eating/vorepanel_vr.dm index 3f99821e86..fdaafbb7d4 100644 --- a/code/modules/vore/eating/vorepanel_vr.dm +++ b/code/modules/vore/eating/vorepanel_vr.dm @@ -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") diff --git a/code/modules/vore/fluffstuff/custom_items_vr.dm b/code/modules/vore/fluffstuff/custom_items_vr.dm index 776e7dad2e..53594ceef5 100644 --- a/code/modules/vore/fluffstuff/custom_items_vr.dm +++ b/code/modules/vore/fluffstuff/custom_items_vr.dm @@ -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" diff --git a/html/changelog.html b/html/changelog.html index c25feed16b..48451c87e2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -40,6 +40,20 @@ -->
+

20 March 2021

+

None updated:

+
    +
  • Fixes tracking implant cost to 0, not 10, as a VS edit.
  • +
+ +

12 March 2021

+

CHOMPStationBot updated:

+
    +
  • Omni filters and mixers can now be removed regardless of pressure, just like their non-omni versions.
  • +
  • Fixed laptop vendors not selling tesla relays on tablets
  • +
  • Tested. Appears to have been changed unintentionally in the nanoui -> tgui switchover.
  • +
+

11 March 2021

CHOMPStationBot updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index e6a62e65f9..f68ad25100 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -5510,3 +5510,13 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. the e-cigarette while nearby. - rscadd: A message will appear when an e-cigaratte you are smoking turns off. - bugfix: Fixed a runtime when e-cigarettes are examined. +2021-03-12: + CHOMPStationBot: + - tweak: Omni filters and mixers can now be removed regardless of pressure, just + like their non-omni versions. + - 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. diff --git a/icons/effects/species_tails.dmi b/icons/effects/species_tails.dmi new file mode 100644 index 0000000000..5fea0671c6 Binary files /dev/null and b/icons/effects/species_tails.dmi differ diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index f845638d11..c580e2ccd4 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/human_races/markings_alt.dmi b/icons/mob/human_races/markings_alt.dmi new file mode 100644 index 0000000000..e9fcad5e63 Binary files /dev/null and b/icons/mob/human_races/markings_alt.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/ears.dmi b/icons/mob/human_races/sprite_accessories/ears.dmi new file mode 100644 index 0000000000..243b901e8e Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/ears.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/tails.dmi b/icons/mob/human_races/sprite_accessories/tails.dmi new file mode 100644 index 0000000000..5e4a27597f Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/tails.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/taurs.dmi b/icons/mob/human_races/sprite_accessories/taurs.dmi new file mode 100644 index 0000000000..69d0a91388 Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/taurs.dmi differ diff --git a/icons/mob/human_races/sprite_accessories/wings.dmi b/icons/mob/human_races/sprite_accessories/wings.dmi new file mode 100644 index 0000000000..2042d667f2 Binary files /dev/null and b/icons/mob/human_races/sprite_accessories/wings.dmi differ diff --git a/icons/mob/items/lefthand_material.dmi b/icons/mob/items/lefthand_material.dmi index a2f035cd58..7fbcc1131f 100644 Binary files a/icons/mob/items/lefthand_material.dmi and b/icons/mob/items/lefthand_material.dmi differ diff --git a/icons/mob/items/righthand_material.dmi b/icons/mob/items/righthand_material.dmi index 6895183a5b..ac51aa86f1 100644 Binary files a/icons/mob/items/righthand_material.dmi and b/icons/mob/items/righthand_material.dmi differ diff --git a/icons/mob/limb_mask.dmi b/icons/mob/limb_mask.dmi index ba4d0e3456..4d83672aa4 100644 Binary files a/icons/mob/limb_mask.dmi and b/icons/mob/limb_mask.dmi differ diff --git a/icons/mob/mecha.dmi b/icons/mob/mecha.dmi index a6d3b13773..975e46371d 100644 Binary files a/icons/mob/mecha.dmi and b/icons/mob/mecha.dmi differ diff --git a/icons/mob/screen_full_vore.dmi b/icons/mob/screen_full_vore.dmi index 349e8b0315..3759bcf1c8 100644 Binary files a/icons/mob/screen_full_vore.dmi and b/icons/mob/screen_full_vore.dmi differ diff --git a/icons/mob/suit_1.dmi b/icons/mob/suit_1.dmi index 7d52018483..7515beba12 100644 Binary files a/icons/mob/suit_1.dmi and b/icons/mob/suit_1.dmi differ diff --git a/icons/mob/suit_vr.dmi b/icons/mob/suit_vr.dmi index 79a9d12b76..e3d9079bbf 100644 Binary files a/icons/mob/suit_vr.dmi and b/icons/mob/suit_vr.dmi differ diff --git a/icons/mob/taursuits_cow.dmi b/icons/mob/taursuits_cow.dmi new file mode 100644 index 0000000000..ce592d5edb Binary files /dev/null and b/icons/mob/taursuits_cow.dmi differ diff --git a/icons/mob/taursuits_deer.dmi b/icons/mob/taursuits_deer.dmi new file mode 100644 index 0000000000..6c53a6f4d0 Binary files /dev/null and b/icons/mob/taursuits_deer.dmi differ diff --git a/icons/mob/taursuits_drake.dmi b/icons/mob/taursuits_drake.dmi new file mode 100644 index 0000000000..ca0db57532 Binary files /dev/null and b/icons/mob/taursuits_drake.dmi differ diff --git a/icons/mob/taursuits_feline.dmi b/icons/mob/taursuits_feline.dmi new file mode 100644 index 0000000000..1d4c597e02 Binary files /dev/null and b/icons/mob/taursuits_feline.dmi differ diff --git a/icons/mob/taursuits_horse.dmi b/icons/mob/taursuits_horse.dmi new file mode 100644 index 0000000000..4162463c69 Binary files /dev/null and b/icons/mob/taursuits_horse.dmi differ diff --git a/icons/mob/taursuits_lizard.dmi b/icons/mob/taursuits_lizard.dmi new file mode 100644 index 0000000000..a6b9858f17 Binary files /dev/null and b/icons/mob/taursuits_lizard.dmi differ diff --git a/icons/mob/taursuits_naga.dmi b/icons/mob/taursuits_naga.dmi new file mode 100644 index 0000000000..7df326318c Binary files /dev/null and b/icons/mob/taursuits_naga.dmi differ diff --git a/icons/mob/taursuits_naga_ch.dmi b/icons/mob/taursuits_naga_ch.dmi new file mode 100644 index 0000000000..a532e22a5f Binary files /dev/null and b/icons/mob/taursuits_naga_ch.dmi differ diff --git a/icons/mob/taursuits_otie.dmi b/icons/mob/taursuits_otie.dmi new file mode 100644 index 0000000000..06e083854e Binary files /dev/null and b/icons/mob/taursuits_otie.dmi differ diff --git a/icons/mob/taursuits_slug.dmi b/icons/mob/taursuits_slug.dmi new file mode 100644 index 0000000000..98692375f3 Binary files /dev/null and b/icons/mob/taursuits_slug.dmi differ diff --git a/icons/mob/taursuits_spider.dmi b/icons/mob/taursuits_spider.dmi new file mode 100644 index 0000000000..b8090eceaa Binary files /dev/null and b/icons/mob/taursuits_spider.dmi differ diff --git a/icons/mob/taursuits_wolf.dmi b/icons/mob/taursuits_wolf.dmi new file mode 100644 index 0000000000..0f638ea6d3 Binary files /dev/null and b/icons/mob/taursuits_wolf.dmi differ diff --git a/icons/mob/uniform_1.dmi b/icons/mob/uniform_1.dmi index 27a67cb2ca..1f22a767b6 100644 Binary files a/icons/mob/uniform_1.dmi and b/icons/mob/uniform_1.dmi differ diff --git a/icons/mob/vore/taurs_ch.dmi b/icons/mob/vore/taurs_ch.dmi index 66bc20e205..b6a69816f8 100644 Binary files a/icons/mob/vore/taurs_ch.dmi and b/icons/mob/vore/taurs_ch.dmi differ diff --git a/icons/mob/vore/taurs_vr.dmi b/icons/mob/vore/taurs_vr.dmi index a00d6bb489..87f0b32cc2 100644 Binary files a/icons/mob/vore/taurs_vr.dmi and b/icons/mob/vore/taurs_vr.dmi differ diff --git a/icons/mob/vore64x64.dmi b/icons/mob/vore64x64.dmi index d0fb961594..e349085e63 100644 Binary files a/icons/mob/vore64x64.dmi and b/icons/mob/vore64x64.dmi differ diff --git a/icons/obj/cigarettes.dmi b/icons/obj/cigarettes.dmi index 922dd12508..b85ea96357 100644 Binary files a/icons/obj/cigarettes.dmi and b/icons/obj/cigarettes.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 19fe440cfd..a7a415e54b 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/masks.dmi b/icons/obj/clothing/masks.dmi index 88fa471cfd..d7daacb379 100644 Binary files a/icons/obj/clothing/masks.dmi and b/icons/obj/clothing/masks.dmi differ diff --git a/icons/obj/clothing/suits_1.dmi b/icons/obj/clothing/suits_1.dmi index 7a75bbba5b..3e905eda58 100644 Binary files a/icons/obj/clothing/suits_1.dmi and b/icons/obj/clothing/suits_1.dmi differ diff --git a/icons/obj/clothing/suits_vr.dmi b/icons/obj/clothing/suits_vr.dmi index 97a2d4e58a..738f0a8d5b 100644 Binary files a/icons/obj/clothing/suits_vr.dmi and b/icons/obj/clothing/suits_vr.dmi differ diff --git a/icons/obj/clothing/uniforms_1.dmi b/icons/obj/clothing/uniforms_1.dmi index 446758ab5a..348cf8dd94 100644 Binary files a/icons/obj/clothing/uniforms_1.dmi and b/icons/obj/clothing/uniforms_1.dmi differ diff --git a/icons/obj/vending.dmi b/icons/obj/vending.dmi index 7ab2052817..aead6b558a 100755 Binary files a/icons/obj/vending.dmi and b/icons/obj/vending.dmi differ diff --git a/icons/obj/vending_vr.dmi b/icons/obj/vending_vr.dmi index fe07d5d1f8..64c2ad0f5c 100644 Binary files a/icons/obj/vending_vr.dmi and b/icons/obj/vending_vr.dmi differ diff --git a/maps/expedition_vr/aerostat/_aerostat.dm b/maps/expedition_vr/aerostat/_aerostat.dm index c4c321de1b..ac1d41d1bb 100644 --- a/maps/expedition_vr/aerostat/_aerostat.dm +++ b/maps/expedition_vr/aerostat/_aerostat.dm @@ -132,7 +132,7 @@ VIRGO2_TURF_CREATE(/turf/simulated/mineral) if(mineral) return - var/mineral_name = pickweight(list("marble" = 5, "uranium" = 5, "platinum" = 5, "hematite" = 5, "carbon" = 5, "diamond" = 5, "gold" = 5, "silver" = 5, "lead" = 5, "verdantium" = 5, "rutile" = 20)) + var/mineral_name = pickweight(list("marble" = 5, "uranium" = 5, "platinum" = 5, "hematite" = 5, "carbon" = 5, "diamond" = 5, "gold" = 5, "silver" = 5, "lead" = 5, "verdantium" = 5, "rutile" = 10, "copper" = 5, "tin" = 5, "bauxite" = 5)) if(mineral_name && (mineral_name in ore_data)) mineral = ore_data[mineral_name] diff --git a/maps/southern_cross/items/clothing/sc_under.dm b/maps/southern_cross/items/clothing/sc_under.dm index 9f73935e80..3f7f7eb1a8 100644 --- a/maps/southern_cross/items/clothing/sc_under.dm +++ b/maps/southern_cross/items/clothing/sc_under.dm @@ -12,6 +12,9 @@ ) starting_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1) +/obj/item/clothing/under/rank/pilot1/no_webbing + starting_accessories = null + /obj/item/clothing/under/rank/pilot2 name = "\improper NanoTrasen flight suit" desc = "A dark blue NanoTrasen flight suit. Warm and practical, seveal patches are scattered across it." @@ -24,4 +27,7 @@ sprite_sheets = list( "Teshari" = 'maps/southern_cross/icons/mob/species/teshari/sc_uniform.dmi' ) - starting_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot2) \ No newline at end of file + starting_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot2) + +/obj/item/clothing/under/rank/pilot2/no_webbing + starting_accessories = null diff --git a/maps/southern_cross/job/outfits.dm b/maps/southern_cross/job/outfits.dm index 6310c29afd..56e62dd28d 100644 --- a/maps/southern_cross/job/outfits.dm +++ b/maps/southern_cross/job/outfits.dm @@ -39,11 +39,12 @@ Keep outfits simple. Spawn with basic uniforms and minimal gear. Gear instead go /decl/hierarchy/outfit/job/pilot name = OUTFIT_JOB_NAME("Pilot") shoes = /obj/item/clothing/shoes/black - uniform = /obj/item/clothing/under/rank/pilot1 + uniform = /obj/item/clothing/under/rank/pilot1/no_webbing suit = /obj/item/clothing/suit/storage/toggle/bomber/pilot gloves = /obj/item/clothing/gloves/fingerless glasses = /obj/item/clothing/glasses/fakesunglasses/aviator l_ear = /obj/item/device/radio/headset/pilot/alt + uniform_accessories = list(/obj/item/clothing/accessory/storage/webbing/pilot1 = 1) id_slot = slot_wear_id pda_slot = slot_belt pda_type = /obj/item/device/pda //VOREStation Edit - Civilian diff --git a/maps/southern_cross/southern_cross-2.dmm b/maps/southern_cross/southern_cross-2.dmm index 02cba7100a..b10a81aba1 100644 --- a/maps/southern_cross/southern_cross-2.dmm +++ b/maps/southern_cross/southern_cross-2.dmm @@ -1736,7 +1736,7 @@ "aOh" = (/obj/item/frame/extinguisher_cabinet,/turf/simulated/floor/plating,/area/maintenance/engineering) "aOi" = (/obj/item/stack/tile/floor/yellow,/obj/random/trash_pile,/turf/simulated/floor/plating,/area/maintenance/engineering) "aOj" = (/obj/structure/closet/wardrobe/black,/obj/item/clothing/shoes/boots/combat,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/machinery/alarm{dir = 8; pixel_x = 22},/turf/simulated/floor,/area/maintenance/engineering) -"aOk" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/material/steel{amount = 50},/obj/item/clothing/glasses/welding,/obj/machinery/camera/network/research{c_tag = "SCI - R&D Lab Fore"},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/status_display{pixel_y = 32},/obj/item/stack/material/copper{max_amount = 25},/turf/simulated/floor/tiled/white,/area/rnd/lab) +"aOk" = (/obj/structure/table/standard,/obj/item/stack/material/glass{amount = 50; pixel_x = 3; pixel_y = 3},/obj/item/stack/material/steel{amount = 50},/obj/item/clothing/glasses/welding,/obj/machinery/camera/network/research{c_tag = "SCI - R&D Lab Fore"},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/status_display{pixel_y = 32},/obj/item/stack/material/copper{amount = 25},/turf/simulated/floor/tiled/white,/area/rnd/lab) "aOl" = (/obj/structure/cable/green{d2 = 2; icon_state = "0-2"},/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_y = 24},/obj/structure/table/standard,/obj/machinery/light_switch{pixel_x = 11; pixel_y = 24},/obj/item/weapon/storage/belt/utility,/obj/item/clothing/gloves/sterile/latex,/obj/item/weapon/storage/toolbox/mechanical{pixel_x = 2; pixel_y = 3},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) "aOm" = (/obj/structure/table/standard,/obj/machinery/cell_charger,/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/weapon/cell/high{charge = 100; maxcharge = 15000},/obj/item/device/radio/intercom{dir = 1; name = "Station Intercom (General)"; pixel_y = 21},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) "aOn" = (/obj/machinery/disposal,/obj/structure/disposalpipe/trunk{dir = 4},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) @@ -2939,7 +2939,7 @@ "bsM" = (/obj/structure/flora/pottedplant/crystal,/obj/effect/floor_decal/borderfloorwhite{dir = 9},/obj/effect/floor_decal/corner/purple/border{dir = 9},/turf/simulated/floor/tiled/white,/area/rnd/lab) "bsN" = (/obj/machinery/autolathe,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/rnd/lab) "bsO" = (/obj/structure/filingcabinet/chestdrawer,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) -"bsP" = (/obj/structure/closet{name = "materials"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/item/stack/material/copper{max_amount = 25},/obj/item/stack/material/plastic{max_amount = 25},/obj/item/stack/material/plastic{max_amount = 25},/turf/simulated/floor/tiled/white,/area/assembly/robotics) +"bsP" = (/obj/structure/closet{name = "materials"},/obj/machinery/atmospherics/unary/vent_scrubber/on,/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/steel{amount = 50},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/glass{amount = 50; pixel_x = -2; pixel_y = 2},/obj/item/stack/material/plasteel{amount = 10},/obj/item/stack/material/plasteel{amount = 10},/obj/machinery/light{dir = 1},/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/item/stack/material/plastic{max_amount = 25},/obj/item/stack/material/plastic{max_amount = 25},/obj/item/stack/material/copper{amount = 25},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bsQ" = (/obj/machinery/computer/rdconsole/robotics,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/obj/machinery/status_display{pixel_y = 32},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bsR" = (/obj/structure/table/standard,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/item/weapon/pen,/obj/item/weapon/pen/red,/obj/item/weapon/pen/blue,/obj/machinery/requests_console{department = "Robotics"; departmentType = 2; name = "Robotics RC"; pixel_y = 30},/obj/item/weapon/reagent_containers/glass/beaker/sulphuric,/obj/item/weapon/hand_labeler,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) "bsS" = (/obj/structure/table/standard,/obj/machinery/computer/med_data/laptop,/obj/effect/floor_decal/borderfloorwhite{dir = 1},/obj/effect/floor_decal/corner/purple/border{dir = 1},/turf/simulated/floor/tiled/white,/area/assembly/robotics) diff --git a/maps/southern_cross/southern_cross-5.dmm b/maps/southern_cross/southern_cross-5.dmm index acfd01b414..cc15ca2789 100644 --- a/maps/southern_cross/southern_cross-5.dmm +++ b/maps/southern_cross/southern_cross-5.dmm @@ -289,7 +289,7 @@ "fC" = (/obj/structure/table/standard,/obj/item/weapon/soap/deluxe,/obj/machinery/atmospherics/unary/vent_pump/on,/obj/machinery/light{dir = 1},/turf/simulated/floor/tiled/freezer,/area/surface/outpost/main/dorms/dorm_1) "fD" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers{dir = 4},/obj/machinery/atmospherics/pipe/simple/hidden/supply{dir = 4},/obj/structure/catwalk,/obj/structure/cable/blue{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/structure/cable/blue{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/disposalpipe/segment{dir = 4},/turf/simulated/floor/plating,/area/surface/outpost/engineering/atmos_room) "fE" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/structure/table/steel_reinforced,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/random/maintenance/engineering,/obj/effect/floor_decal/borderfloor/corner,/obj/item/weapon/extinguisher/mini,/obj/effect/floor_decal/corner/yellow/bordercorner,/turf/simulated/floor/tiled,/area/surface/outpost/engineering/monitoring) -"fF" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/lead{amount = 30},/obj/fiftyspawner/plastic,/obj/fiftyspawner/plasteel,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/item/stack/material/copper{max_amount = 25},/turf/simulated/floor/plating,/area/surface/outpost/engineering/atmos_room) +"fF" = (/obj/structure/table/rack/shelf/steel,/obj/item/stack/material/lead{amount = 30},/obj/fiftyspawner/plastic,/obj/fiftyspawner/plasteel,/obj/effect/floor_decal/industrial/warning/corner{dir = 1},/obj/item/stack/material/copper{amount = 25},/turf/simulated/floor/plating,/area/surface/outpost/engineering/atmos_room) "fG" = (/obj/effect/floor_decal/borderfloor{dir = 10},/obj/effect/floor_decal/corner/white/border{dir = 10},/turf/simulated/floor/tiled,/area/surface/outpost/main/corridor/right_upper) "fH" = (/obj/effect/landmark/start{name = "Search and Rescue"},/obj/machinery/atmospherics/unary/vent_scrubber/on{dir = 1},/obj/effect/floor_decal/steeldecal/steel_decals4,/obj/effect/floor_decal/steeldecal/steel_decals4{dir = 10},/turf/simulated/floor/tiled/white,/area/surface/outpost/main/search_and_rescue) "fI" = (/obj/structure/table/rack/shelf/steel,/obj/fiftyspawner/phoronglass,/obj/fiftyspawner/rglass,/obj/fiftyspawner/rods,/obj/fiftyspawner/steel,/obj/machinery/camera/network/engineering_outpost{c_tag = "ENG - Mining Outpost Power 1"; dir = 1},/turf/simulated/floor/plating,/area/surface/outpost/engineering/atmos_room) diff --git a/maps/tether/tether-03-surface3.dmm b/maps/tether/tether-03-surface3.dmm index 2c790c9b89..403d3e6a3f 100644 --- a/maps/tether/tether-03-surface3.dmm +++ b/maps/tether/tether-03-surface3.dmm @@ -14579,6 +14579,7 @@ /obj/effect/floor_decal/corner/mauve/bordercorner2{ dir = 9 }, +/obj/fiftyspawner/copper, /turf/simulated/floor/tiled, /area/rnd/research) "axD" = ( @@ -15730,9 +15731,6 @@ dir = 1 }, /obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, /turf/simulated/floor/tiled/steel_grid, /area/rnd/robotics) "azp" = ( @@ -32979,7 +32977,9 @@ /area/tether/surfacebase/entertainment/backstage) "bee" = ( /obj/structure/disposalpipe/segment, -/obj/machinery/computer/arcade/orion_trail, +/obj/machinery/computer/arcade/orion_trail{ + dir = 4 + }, /turf/simulated/floor/wood, /area/crew_quarters/bar) "bef" = ( @@ -33888,7 +33888,9 @@ /turf/simulated/floor/tiled/eris/steel/bar_dance, /area/tether/surfacebase/barbackmaintenance) "bfR" = ( -/obj/machinery/computer/arcade/battle, +/obj/machinery/computer/arcade/battle{ + dir = 1 + }, /turf/simulated/floor/wood, /area/crew_quarters/bar) "bfS" = ( diff --git a/maps/tether/tether-05-station1.dmm b/maps/tether/tether-05-station1.dmm index 77c6e4f5b4..d9bf9f8111 100644 --- a/maps/tether/tether-05-station1.dmm +++ b/maps/tether/tether-05-station1.dmm @@ -8063,6 +8063,16 @@ "aoO" = ( /turf/simulated/wall/r_wall, /area/storage/emergency_storage/emergency4) +"aoP" = ( +/obj/structure/table/reinforced, +/obj/item/stack/material/plasteel{ + amount = 30 + }, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/plastic, +/obj/fiftyspawner/copper, +/turf/simulated/floor/tiled, +/area/engineering/workshop) "aoR" = ( /obj/structure/grille, /obj/machinery/door/firedoor/border_only, @@ -19507,19 +19517,6 @@ }, /turf/simulated/floor/tiled, /area/storage/tools) -"bkx" = ( -/obj/structure/table/reinforced, -/obj/item/stack/material/plasteel{ - amount = 30 - }, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/plastic, -/obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, -/obj/fiftyspawner/copper, -/turf/simulated/floor/tiled, -/area/engineering/workshop) "bkU" = ( /obj/effect/floor_decal/industrial/warning{ dir = 9 @@ -29895,7 +29892,7 @@ aqM ath avd asA -bkx +aoP aqM akR auA diff --git a/maps/tether/tether-06-station2.dmm b/maps/tether/tether-06-station2.dmm index 62dfe085a5..cb068e84e5 100644 --- a/maps/tether/tether-06-station2.dmm +++ b/maps/tether/tether-06-station2.dmm @@ -7268,6 +7268,7 @@ /obj/item/weapon/stock_parts/matter_bin, /obj/item/weapon/stock_parts/matter_bin, /obj/item/weapon/stock_parts/manipulator, +/obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/circuitboard/partslathe, /turf/simulated/floor/plating, /area/storage/tech) @@ -7289,6 +7290,7 @@ }, /obj/item/weapon/stock_parts/manipulator, /obj/structure/table/rack/steel, +/obj/item/weapon/stock_parts/console_screen, /obj/item/weapon/circuitboard/autolathe, /turf/simulated/floor/plating, /area/storage/tech) @@ -7809,36 +7811,6 @@ /obj/structure/disposalpipe/segment, /turf/simulated/floor, /area/storage/tech) -<<<<<<< HEAD -"ly" = ( -/obj/structure/table/rack{ - dir = 8; - layer = 2.9 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/supply{ - dir = 4 - }, -/obj/item/weapon/circuitboard/transhuman_synthprinter{ - pixel_x = -3; - pixel_y = 4 - }, -/obj/item/weapon/circuitboard/rdconsole{ - pixel_x = 0; - pixel_y = 2 - }, -/obj/item/weapon/circuitboard/destructive_analyzer, -/obj/item/weapon/circuitboard/protolathe{ - pixel_x = 3; - pixel_y = -2 - }, -/obj/item/weapon/circuitboard/rdserver{ - pixel_x = 6; - pixel_y = -4 - }, -/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, -/turf/simulated/floor/plating, -/area/storage/tech) -||||||| parent of 990448b094... Merge pull request #9860 from Heroman3003/boradening "ly" = ( /obj/structure/table/rack{ dir = 8; @@ -7864,8 +7836,6 @@ /obj/machinery/atmospherics/pipe/simple/hidden/scrubbers, /turf/simulated/floor/plating, /area/storage/tech) -======= ->>>>>>> 990448b094... Merge pull request #9860 from Heroman3003/boradening "lz" = ( /obj/item/weapon/stool, /turf/simulated/floor, @@ -10068,7 +10038,7 @@ /turf/space, /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/large_escape_pod1) -"oG" = ( +"oF" = ( /obj/structure/shuttle/engine/propulsion{ dir = 8; icon_state = "propulsion_r" @@ -10076,6 +10046,20 @@ /turf/space, /turf/simulated/shuttle/plating/airless/carry, /area/shuttle/large_escape_pod1) +<<<<<<< HEAD +||||||| parent of 1030f26c08... Merge pull request #9904 from Heroman3003/la-coppera +"oH" = ( +/obj/structure/stairs/spawner/west, +/turf/simulated/sky/virgo3b/west, +/turf/simulated/floor/tiled/white, +/area/medical/biostorage) +======= +"oG" = ( +/obj/structure/stairs/spawner/west, +/turf/simulated/sky/virgo3b/west, +/turf/simulated/floor/tiled/white, +/area/medical/biostorage) +>>>>>>> 1030f26c08... Merge pull request #9904 from Heroman3003/la-coppera "oM" = ( /turf/simulated/open, /area/engineering/foyer_mezzenine) @@ -29051,7 +29035,7 @@ vE wm ws xj -xQ +oG vT aP aP @@ -35994,7 +35978,7 @@ oD oE oE oE -oG +oF oY sW ef diff --git a/maps/tether/tether_turfs.dm b/maps/tether/tether_turfs.dm index 0b99a2a8d7..a0b7b960dd 100644 --- a/maps/tether/tether_turfs.dm +++ b/maps/tether/tether_turfs.dm @@ -69,6 +69,10 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) "uranium" = 10, "platinum" = 10, "hematite" = 20, + "copper" = 8, + "tin" = 4, + "bauxite" = 4, + "rutile" = 4, "carbon" = 20, "diamond" = 1, "gold" = 8, @@ -82,6 +86,10 @@ VIRGO3B_TURF_CREATE(/turf/simulated/mineral/floor) "uranium" = 5, "platinum" = 5, "hematite" = 35, + "copper" = 15, + "tin" = 10, + "bauxite" = 10, + "rutile" = 10, "carbon" = 35, "gold" = 3, "silver" = 3, diff --git a/tgui/.eslintrc.yml b/tgui/.eslintrc.yml index 1db6f6dcd8..14aff98f9d 100644 --- a/tgui/.eslintrc.yml +++ b/tgui/.eslintrc.yml @@ -110,7 +110,7 @@ rules: ## Enforce that class methods utilize this # class-methods-use-this: error ## Enforce a maximum cyclomatic complexity allowed in a program - complexity: [error, { max: 60 }] + complexity: [error, { max: 65 }] ## Require return statements to either always or never specify values # consistent-return: error ## Enforce consistent brace style for all control statements diff --git a/tgui/packages/tgui/interfaces/Autolathe.js b/tgui/packages/tgui/interfaces/Autolathe.js index 56f1153bbe..36381cd189 100644 --- a/tgui/packages/tgui/interfaces/Autolathe.js +++ b/tgui/packages/tgui/interfaces/Autolathe.js @@ -56,7 +56,7 @@ export const Autolathe = (props, context) => {
    - +
    { {data.devtype !== 2 && ( - - - - Processor Unit: - - - -