From 578bae6f6fbb83d68cab7479cead2437f891f44d Mon Sep 17 00:00:00 2001 From: harryob Date: Sun, 30 Apr 2023 22:10:13 +0100 Subject: [PATCH] no relative pathing (#16234) * the voices win in the end * cleanup * changelog * secure.dm hates me * make_exact_fit() in initialize instead of whatever was happening before --- SpacemanDMM.toml | 4 + code/ZAS/Atom.dm | 4 +- code/ZAS/ConnectionGroup.dm | 2 +- code/ZAS/Debug.dm | 4 +- code/ZAS/Diagnostic.dm | 8 +- code/ZAS/Fire.dm | 8 +- code/ZAS/Phoron.dm | 2 +- code/_helpers/game.dm | 2 +- code/_helpers/icons.dm | 168 +- code/_helpers/sorting/__main.dm | 1053 +- code/_helpers/type2type.dm | 2 +- code/_onclick/hud/hud.dm | 2 +- code/datums/computerfiles.dm | 12 +- code/datums/helper_datums/getrev.dm | 2 +- code/defines/obj.dm | 6 +- code/defines/procs/AStar.dm | 116 +- code/defines/procs/hud.dm | 16 +- code/defines/procs/sd_Alert.dm | 139 +- code/game/base_turf.dm | 4 +- code/game/dna/genes/powers.dm | 162 +- code/game/gamemodes/events/clang.dm | 38 +- code/game/gamemodes/game_mode.dm | 6 +- code/game/gamemodes/objective.dm | 1222 +- code/game/jobs/access.dm | 4 +- code/game/machinery/atmo_control.dm | 4 +- .../atmoalter/area_atmos_computer.dm | 274 +- code/game/machinery/camera/tracking.dm | 10 +- code/game/machinery/computer/shuttle.dm | 120 +- code/game/machinery/deployable.dm | 151 +- code/game/machinery/doors/airlock.dm | 2 +- .../game/machinery/doors/firedoor_assembly.dm | 6 +- .../embedded_controller/airlock_program.dm | 4 +- .../embedded_controller_base.dm | 2 +- code/game/machinery/jukebox.dm | 4 +- code/game/machinery/overview.dm | 6 +- code/game/machinery/seed_extractor.dm | 2 +- code/game/objects/effects/effect_system.dm | 210 +- code/game/objects/effects/gibs.dm | 66 +- code/game/objects/effects/step_triggers.dm | 90 +- code/game/objects/empulse.dm | 2 +- .../objects/items/devices/radio/beacon.dm | 6 +- code/game/objects/items/weapons/autopsy.dm | 16 +- code/game/objects/items/weapons/chewables.dm | 4 +- .../circuitboards/machinery/research.dm | 6 +- .../objects/items/weapons/dna_injector.dm | 322 +- code/game/objects/items/weapons/ecigs.dm | 8 +- .../items/weapons/grenades/chem_grenade.dm | 24 +- .../items/weapons/grenades/fragmentation.dm | 2 +- .../game/objects/items/weapons/power_cells.dm | 5 +- .../objects/items/weapons/storage/backpack.dm | 20 +- .../objects/items/weapons/storage/misc.dm | 14 +- .../items/weapons/storage/pill_bottle.dm | 2 +- .../objects/items/weapons/storage/secure.dm | 186 +- code/game/objects/random/random.dm | 70 +- .../crates_lockers/closets/syndicate.dm | 112 +- .../structures/crates_lockers/crates.dm | 42 +- code/game/objects/structures/grille.dm | 9 +- .../objects/structures/windoor_assembly.dm | 4 +- code/game/periodic_news.dm | 193 +- code/game/shuttle_engines.dm | 6 +- code/js/byjax.dm | 2 +- code/modules/admin/IsBanned.dm | 2 +- code/modules/admin/admin.dm | 2 +- code/modules/admin/admin_attack_log.dm | 10 +- code/modules/admin/holder2.dm | 2 +- code/modules/admin/topic.dm | 6 +- code/modules/admin/verbs/SDQL_2_parser.dm | 586 +- code/modules/admin/verbs/mapping.dm | 6 +- code/modules/admin/verbs/randomverbs.dm | 4 +- code/modules/atmospherics/atmospherics.dm | 2 +- .../components/unary/heat_exchanger.dm | 2 +- .../components/unary/unary_base.dm | 140 +- code/modules/awaymissions/exile.dm | 34 +- code/modules/awaymissions/gateway.dm | 2 +- code/modules/awaymissions/zlevel.dm | 2 +- code/modules/battlemonsters/datum_core.dm | 4 +- code/modules/battlemonsters/datum_monsters.dm | 4 +- .../preference_setup/loadout/loadout_suit.dm | 2 +- .../loadout/loadout_xeno/skrell.dm | 8 +- code/modules/client/preferences.dm | 2 +- code/modules/clothing/glasses/glasses.dm | 2 +- code/modules/clothing/shoes/miscellaneous.dm | 4 +- code/modules/clothing/suits/jobs.dm | 2 +- code/modules/clothing/suits/storage.dm | 33 +- code/modules/cooking/recipes/recipes_mix.dm | 8 +- code/modules/cooking/recipes/recipes_pan.dm | 8 +- code/modules/detectivework/forensics.dm | 6 +- code/modules/economy/cash.dm | 2 +- code/modules/flufftext/Dreaming.dm | 6 +- code/modules/flufftext/TextFilters.dm | 8 +- code/modules/heavy_vehicle/mech_icon.dm | 6 +- .../integrated_electronics/subtypes/lists.dm | 2 +- code/modules/library/lib_items.dm | 44 +- code/modules/liquid/splash_simulation.dm | 52 +- code/modules/maps/dmm_suite.dm | 101 +- code/modules/maps/fromdmp.dm | 12 +- code/modules/maps/swapmaps.dm | 644 +- code/modules/martial_arts/skrell.dm | 2 +- code/modules/martial_arts/sol_combat.dm | 4 +- .../abstract/new_player/sprite_accessories.dm | 11561 ++++++++-------- .../modules/mob/abstract/observer/observer.dm | 2 +- .../mob/living/carbon/human/human_powers.dm | 4 +- .../carbon/human/species/station/monkey.dm | 4 +- code/modules/mob/living/say.dm | 2 +- code/modules/mob/living/simple_animal/worm.dm | 278 +- code/modules/mob/mob_helpers.dm | 12 +- code/modules/multiz/_stubs.dm | 11 +- code/modules/multiz/disabled.dm | 10 +- code/modules/organs/blood.dm | 2 +- code/modules/organs/pain.dm | 4 +- code/modules/organs/subtypes/vaurca.dm | 2 +- code/modules/organs/wound.dm | 6 +- code/modules/overmap/_defines.dm | 2 +- code/modules/overmap/spacetravel.dm | 4 +- code/modules/paperwork/silicon_photography.dm | 2 +- code/modules/power/antimatter/shielding.dm | 2 +- code/modules/power/cable.dm | 2 +- code/modules/projectiles/guns/bang/pistol.dm | 2 +- code/modules/projectiles/guns/energy/laser.dm | 4 +- .../targeting/targeting_overlay.dm | 2 +- .../reagents/dispenser/cartridge_presets.dm | 431 +- .../reagent_containers/inhaler_advanced.dm | 26 +- .../reagents/reagent_containers/pill.dm | 117 +- code/modules/recycling/disposal.dm | 10 +- .../designs/protolathe/tool_designs.dm | 4 +- .../xenoarchaeology/artifact/effect.dm | 2 +- .../research/xenoarchaeology/chemistry.dm | 71 +- .../xenoarchaeology/finds/finds_eguns.dm | 20 +- code/modules/research/xenoarchaeology/misc.dm | 18 +- .../scripting/Implementations/_Logic.dm | 18 +- .../spells/spell_list/construct_spells.dm | 2 +- code/modules/surgery/surgery.dm | 2 +- code/stylesheet.dm | 2 +- code/unit_tests/chemistry_tests.dm | 4 +- code/unit_tests/equipment_tests.dm | 12 +- code/unit_tests/foundation_tests.dm | 8 +- code/unit_tests/mob_tests.dm | 118 +- code/unit_tests/observation_tests.dm | 18 +- code/unit_tests/spawner_tests.dm | 5 +- code/unit_tests/zas_tests.dm | 14 +- .../harryob-no-relative-pathing.yml | 4 + maps/_common/areas/station/maintenance.dm | 40 +- tools/Redirector/Configurations.dm | 2 +- tools/Redirector/Redirector.dm | 2 +- 144 files changed, 9951 insertions(+), 9675 deletions(-) create mode 100644 html/changelogs/harryob-no-relative-pathing.yml diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml index dce31e0d22b..722f912725b 100644 --- a/SpacemanDMM.toml +++ b/SpacemanDMM.toml @@ -1,2 +1,6 @@ [debugger] engine = "auxtools" + +[code_standards] +disallow_relative_type_definitions = true +disallow_relative_proc_definitions = true diff --git a/code/ZAS/Atom.dm b/code/ZAS/Atom.dm index a2b40acd32b..34a8756beb3 100644 --- a/code/ZAS/Atom.dm +++ b/code/ZAS/Atom.dm @@ -40,14 +40,14 @@ // AIR_BLOCKED - Blocked // ZONE_BLOCKED - Not blocked, but zone boundaries will not cross. // BLOCKED - Blocked, zone boundaries will not cross even if opened. -atom/proc/c_airblock(turf/other) +/atom/proc/c_airblock(turf/other) #ifdef ZASDBG ASSERT(isturf(other)) #endif return (AIR_BLOCKED*!CanPass(null, other, 0, 0))|(ZONE_BLOCKED*!CanPass(null, other, 1.5, 1)) -turf/c_airblock(turf/other) +/turf/c_airblock(turf/other) #ifdef ZASDBG ASSERT(isturf(other)) #endif diff --git a/code/ZAS/ConnectionGroup.dm b/code/ZAS/ConnectionGroup.dm index 322c24be1c2..e4f96c93cfc 100644 --- a/code/ZAS/ConnectionGroup.dm +++ b/code/ZAS/ConnectionGroup.dm @@ -257,7 +257,7 @@ Class Procs: if(!A.air.compare(air, vacuum_exception = 1)) SSair.mark_edge_active(src) -proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) +/proc/ShareHeat(datum/gas_mixture/A, datum/gas_mixture/B, connecting_tiles) //This implements a simplistic version of the Stefan-Boltzmann law. var/energy_delta = ((A.temperature - B.temperature) ** 4) * STEFAN_BOLTZMANN_CONSTANT * connecting_tiles * 2.5 var/maximum_energy_delta = max(0, min(A.temperature * A.heat_capacity() * A.group_multiplier, B.temperature * B.heat_capacity() * B.group_multiplier)) diff --git a/code/ZAS/Debug.dm b/code/ZAS/Debug.dm index d95314b240a..9ea464d4c8b 100644 --- a/code/ZAS/Debug.dm +++ b/code/ZAS/Debug.dm @@ -16,5 +16,5 @@ var/image/mark = image('icons/zone.dmi', icon_state = "mark") add_overlay(img) dbg_img = img -proc/soft_assert(thing,fail) - if(!thing) message_admins(fail) \ No newline at end of file +/proc/soft_assert(thing,fail) + if(!thing) message_admins(fail) diff --git a/code/ZAS/Diagnostic.dm b/code/ZAS/Diagnostic.dm index 3fa1679cda2..b51a2e5f44f 100644 --- a/code/ZAS/Diagnostic.dm +++ b/code/ZAS/Diagnostic.dm @@ -1,4 +1,4 @@ -client/proc/Zone_Info(turf/T as null|turf) +/client/proc/Zone_Info(turf/T as null|turf) set category = "Debug" if(T) if(istype(T,/turf/simulated) && T:zone) @@ -15,9 +15,9 @@ client/proc/Zone_Info(turf/T as null|turf) images -= zone_debug_images[zone] zone_debug_images = null -client/var/list/zone_debug_images +/client/var/list/zone_debug_images -client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf) +/client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf) set category = "Debug" if(!istype(T)) return @@ -79,7 +79,7 @@ client/proc/Test_ZAS_Connection(var/turf/simulated/T as turf) else to_chat(mob, "both turfs can merge.") -client/proc/ZASSettings() +/client/proc/ZASSettings() set category = "Debug" vsc.SetDefault(mob) diff --git a/code/ZAS/Fire.dm b/code/ZAS/Fire.dm index c01f4be1a54..6fd4d5c7dc2 100644 --- a/code/ZAS/Fire.dm +++ b/code/ZAS/Fire.dm @@ -15,11 +15,11 @@ If it gains pressure too slowly, it may leak or just rupture instead of explodin var/tmp/obj/fire/fire = null //Some legacy definitions so fires can be started. -atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) +/atom/proc/temperature_expose(datum/gas_mixture/air, exposed_temperature, exposed_volume) return null -turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) +/turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) /turf/simulated/hotspot_expose(exposed_temperature, exposed_volume, soh) @@ -152,7 +152,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) set_light(7, FIRE_LIGHT_2, no_update = TRUE) else set_light(5, FIRE_LIGHT_1, no_update = TRUE) - + air_contents.adjust_gas(GAS_CO2, firelevel * 0.07) for(var/mob/living/L in loc) @@ -339,7 +339,7 @@ turf/proc/hotspot_expose(exposed_temperature, exposed_volume, soh = 0) return firelevel -datum/gas_mixture/proc/check_recombustability(list/fuel_objs) +/datum/gas_mixture/proc/check_recombustability(list/fuel_objs) . = 0 for(var/g in gas) if(gas_data.flags[g] & XGM_GAS_OXIDIZER && gas[g] >= 0.1) diff --git a/code/ZAS/Phoron.dm b/code/ZAS/Phoron.dm index 794145cff62..7a7b2fa5cc9 100644 --- a/code/ZAS/Phoron.dm +++ b/code/ZAS/Phoron.dm @@ -169,7 +169,7 @@ var/image/contamination_overlay = image('icons/effects/contamination.dmi') if(gloves) gloves.contaminate() -turf/Entered(atom/movable/thing, turf/oldLoc) +/turf/Entered(atom/movable/thing, turf/oldLoc) . = ..(thing, oldLoc) //Items that are in phoron, but not on a mob, can still be contaminated. var/obj/item/I = thing diff --git a/code/_helpers/game.dm b/code/_helpers/game.dm index e6c5b0893c4..2cc67b25f1c 100644 --- a/code/_helpers/game.dm +++ b/code/_helpers/game.dm @@ -103,7 +103,7 @@ for(var/client/C in group) C.screen -= O -datum/projectile_data +/datum/projectile_data var/src_x var/src_y var/time diff --git a/code/_helpers/icons.dm b/code/_helpers/icons.dm index 3f8659fc3a3..81bce0466bb 100644 --- a/code/_helpers/icons.dm +++ b/code/_helpers/icons.dm @@ -215,85 +215,86 @@ world #define TO_HEX_DIGIT(n) ascii2text((n&15) + ((n&15)<10 ? 48 : 87)) -icon - proc/MakeLying() - var/icon/I = new(src,dir=SOUTH) - I.BecomeLying() - return I +/icon/proc/MakeLying() + var/icon/I = new(src,dir=SOUTH) + I.BecomeLying() + return I - proc/BecomeLying() - Turn(90) - Shift(SOUTH,6) - Shift(EAST,1) +/icon/proc/BecomeLying() + Turn(90) + Shift(SOUTH,6) + Shift(EAST,1) - // Multiply all alpha values by this float - proc/ChangeOpacity(opacity = 1.0) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) +/// Multiply all alpha values by this float +/icon/proc/ChangeOpacity(opacity = 1.0) + MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,opacity, 0,0,0,0) - // Convert to grayscale - proc/GrayScale() - MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) +/// Convert to grayscale +/icon/proc/GrayScale() + MapColors(0.3,0.3,0.3, 0.59,0.59,0.59, 0.11,0.11,0.11, 0,0,0) - proc/ColorTone(tone) - GrayScale() +/icon/proc/ColorTone(tone) + GrayScale() - var/list/TONE = ReadRGB(tone) - var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) + var/list/TONE = ReadRGB(tone) + var/gray = round(TONE[1]*0.3 + TONE[2]*0.59 + TONE[3]*0.11, 1) - var/icon/upper = (255-gray) ? new(src) : null + var/icon/upper = (255-gray) ? new(src) : null - if(gray) - MapColors(255/gray,0,0, 0,255/gray,0, 0,0,255/gray, 0,0,0) - Blend(tone, ICON_MULTIPLY) - else SetIntensity(0) - if(255-gray) - upper.Blend(rgb(gray,gray,gray), ICON_SUBTRACT) - upper.MapColors((255-TONE[1])/(255-gray),0,0,0, 0,(255-TONE[2])/(255-gray),0,0, 0,0,(255-TONE[3])/(255-gray),0, 0,0,0,0, 0,0,0,1) - Blend(upper, ICON_ADD) + if(gray) + MapColors(255/gray,0,0, 0,255/gray,0, 0,0,255/gray, 0,0,0) + Blend(tone, ICON_MULTIPLY) + else SetIntensity(0) + if(255-gray) + upper.Blend(rgb(gray,gray,gray), ICON_SUBTRACT) + upper.MapColors((255-TONE[1])/(255-gray),0,0,0, 0,(255-TONE[2])/(255-gray),0,0, 0,0,(255-TONE[3])/(255-gray),0, 0,0,0,0, 0,0,0,1) + Blend(upper, ICON_ADD) - // Take the minimum color of two icons; combine transparency as if blending with ICON_ADD - proc/MinColors(icon) - var/icon/I = new(src) - I.Opaque() - I.Blend(icon, ICON_SUBTRACT) - Blend(I, ICON_SUBTRACT) +/// Take the minimum color of two icons; combine transparency as if blending with ICON_ADD +/icon/proc/MinColors(icon) + var/icon/I = new(src) + I.Opaque() + I.Blend(icon, ICON_SUBTRACT) + Blend(I, ICON_SUBTRACT) - // Take the maximum color of two icons; combine opacity as if blending with ICON_OR - proc/MaxColors(icon) - var/icon/I - if(isicon(icon)) - I = new(icon) - else - // solid color - I = new(src) - I.Blend("#000000", ICON_OVERLAY) - I.SwapColor("#000000", null) - I.Blend(icon, ICON_OVERLAY) - var/icon/J = new(src) - J.Opaque() - I.Blend(J, ICON_SUBTRACT) - Blend(I, ICON_OR) +/// Take the maximum color of two icons; combine opacity as if blending with ICON_OR +/icon/proc/MaxColors(icon) + var/icon/I + if(isicon(icon)) + I = new(icon) + else + // solid color + I = new(src) + I.Blend("#000000", ICON_OVERLAY) + I.SwapColor("#000000", null) + I.Blend(icon, ICON_OVERLAY) + var/icon/J = new(src) + J.Opaque() + I.Blend(J, ICON_SUBTRACT) + Blend(I, ICON_OR) - // make this icon fully opaque--transparent pixels become black - proc/Opaque(background = "#000000") - SwapColor(null, background) - MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) +/// make this icon fully opaque--transparent pixels become black +/icon/proc/Opaque(background = "#000000") + SwapColor(null, background) + MapColors(1,0,0,0, 0,1,0,0, 0,0,1,0, 0,0,0,0, 0,0,0,1) - // Change a grayscale icon into a white icon where the original color becomes the alpha - // I.e., black -> transparent, gray -> translucent white, white -> solid white - proc/BecomeAlphaMask() - SwapColor(null, "#000000ff") // don't let transparent become gray - MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) +/** + * Change a grayscale icon into a white icon where the original color becomes the alpha + * I.e., black -> transparent, gray -> translucent white, white -> solid white + */ +/icon/proc/BecomeAlphaMask() + SwapColor(null, "#000000ff") // don't let transparent become gray + MapColors(0,0,0,0.3, 0,0,0,0.59, 0,0,0,0.11, 0,0,0,0, 1,1,1,0) - proc/UseAlphaMask(mask) - Opaque() - AddAlphaMask(mask) +/icon/proc/UseAlphaMask(mask) + Opaque() + AddAlphaMask(mask) - proc/AddAlphaMask(mask) - var/icon/M = new(mask) - M.Blend("#ffffff", ICON_SUBTRACT) - // apply mask - Blend(M, ICON_ADD) +/icon/proc/AddAlphaMask(mask) + var/icon/M = new(mask) + M.Blend("#ffffff", ICON_SUBTRACT) + // apply mask + Blend(M, ICON_ADD) /* HSV format is represented as "#hhhssvv" or "#hhhssvvaa" @@ -316,8 +317,7 @@ icon Higher value means brighter color */ - -proc/ReadRGB(rgb) +/proc/ReadRGB(rgb) if(!rgb) return // interpret the HSV or HSVA value @@ -367,7 +367,7 @@ proc/ReadRGB(rgb) . = list(r, g, b) if(usealpha) . += alpha -proc/ReadHSV(hsv) +/proc/ReadHSV(hsv) if(!hsv) return // interpret the HSV or HSVA value @@ -406,7 +406,7 @@ proc/ReadHSV(hsv) . = list(hue, sat, val) if(usealpha) . += alpha -proc/HSVtoRGB(hsv) +/proc/HSVtoRGB(hsv) if(!hsv) return "#000000" var/list/HSV = ReadHSV(hsv) if(!HSV) return "#000000" @@ -434,7 +434,7 @@ proc/HSVtoRGB(hsv) return (HSV.len > 3) ? rgb(r,g,b,HSV[4]) : rgb(r,g,b) -proc/RGBtoHSV(rgb) +/proc/RGBtoHSV(rgb) if(!rgb) return "#0000000" var/list/RGB = ReadRGB(rgb) if(!RGB) return "#0000000" @@ -465,7 +465,7 @@ proc/RGBtoHSV(rgb) return hsv(hue, sat, val, (RGB.len>3 ? RGB[4] : null)) -proc/hsv(hue, sat, val, alpha) +/proc/hsv(hue, sat, val, alpha) if(hue < 0 || hue >= 1536) hue %= 1536 if(hue < 0) hue += 1536 if((hue & 0xFF) == 0xFF) @@ -498,7 +498,7 @@ proc/hsv(hue, sat, val, alpha) amount<0 or amount>1 are allowed */ -proc/BlendHSV(hsv1, hsv2, amount) +/proc/BlendHSV(hsv1, hsv2, amount) var/list/HSV1 = ReadHSV(hsv1) var/list/HSV2 = ReadHSV(hsv2) @@ -552,7 +552,7 @@ proc/BlendHSV(hsv1, hsv2, amount) amount<0 or amount>1 are allowed */ -proc/BlendRGB(rgb1, rgb2, amount) +/proc/BlendRGB(rgb1, rgb2, amount) var/cachekey = "[rgb1]_[rgb2]_[amount]" . = SSicon_cache.rgb_blend_cache[cachekey] if (.) @@ -574,10 +574,10 @@ proc/BlendRGB(rgb1, rgb2, amount) . = isnull(alpha) ? rgb(r, g, b) : rgb(r, g, b, alpha) SSicon_cache.rgb_blend_cache[cachekey] = . -proc/BlendRGBasHSV(rgb1, rgb2, amount) +/proc/BlendRGBasHSV(rgb1, rgb2, amount) return HSVtoRGB(RGBtoHSV(rgb1), RGBtoHSV(rgb2), amount) -proc/HueToAngle(hue) +/proc/HueToAngle(hue) // normalize hsv in case anything is screwy if(hue < 0 || hue >= 1536) hue %= 1536 if(hue < 0) hue += 1536 @@ -585,7 +585,7 @@ proc/HueToAngle(hue) hue -= hue >> 8 return hue / (1530/360) -proc/AngleToHue(angle) +/proc/AngleToHue(angle) // normalize hsv in case anything is screwy if(angle < 0 || angle >= 360) angle -= 360 * round(angle / 360) var/hue = angle * (1530/360) @@ -595,7 +595,7 @@ proc/AngleToHue(angle) // positive angle rotates forward through red->green->blue -proc/RotateHue(hsv, angle) +/proc/RotateHue(hsv, angle) var/list/HSV = ReadHSV(hsv) // normalize hsv in case anything is screwy @@ -617,13 +617,13 @@ proc/RotateHue(hsv, angle) return hsv(HSV[1], HSV[2], HSV[3], (HSV.len > 3 ? HSV[4] : null)) // Convert an rgb color to grayscale -proc/GrayScale(rgb) +/proc/GrayScale(rgb) var/list/RGB = ReadRGB(rgb) var/gray = RGB[1]*0.3 + RGB[2]*0.59 + RGB[3]*0.11 return (RGB.len > 3) ? rgb(gray, gray, gray, RGB[4]) : rgb(gray, gray, gray) // Change grayscale color to black->tone->white range -proc/ColorTone(rgb, tone) +/proc/ColorTone(rgb, tone) var/list/RGB = ReadRGB(rgb) var/list/TONE = ReadRGB(tone) @@ -890,7 +890,7 @@ proc/ColorTone(rgb, tone) composite.Blend(icon(I.icon, I.icon_state, I.dir, 1), ICON_OVERLAY) return composite -proc/adjust_brightness(var/color, var/value) +/proc/adjust_brightness(var/color, var/value) if (!color) return "#FFFFFF" if (!value) return color @@ -900,7 +900,7 @@ proc/adjust_brightness(var/color, var/value) RGB[3] = Clamp(RGB[3]+value,0,255) return rgb(RGB[1],RGB[2],RGB[3]) -proc/sort_atoms_by_layer(var/list/atoms) +/proc/sort_atoms_by_layer(var/list/atoms) // Comb sort icons based on levels var/list/result = atoms.Copy() var/gap = result.len @@ -925,7 +925,7 @@ arguments tx, ty, tz are target coordinates (requred), range defines render dist cap_mode is capturing mode (optional), user is capturing mob (requred only wehen cap_mode = CAPTURE_MODE_REGULAR), lighting determines lighting capturing (optional), suppress_errors suppreses errors and continues to capture (optional). */ -proc/generate_image(var/tx as num, var/ty as num, var/tz as num, var/range as num, var/cap_mode = CAPTURE_MODE_PARTIAL, var/mob/living/user, var/lighting = 1, var/suppress_errors = 1) +/proc/generate_image(var/tx as num, var/ty as num, var/tz as num, var/range as num, var/cap_mode = CAPTURE_MODE_PARTIAL, var/mob/living/user, var/lighting = 1, var/suppress_errors = 1) var/list/turfstocapture = list() //Lines below determine what tiles will be rendered for(var/xoff = 0 to range) @@ -986,7 +986,7 @@ proc/generate_image(var/tx as num, var/ty as num, var/tz as num, var/range as nu return cap -proc/percentage_to_colour(var/P) +/proc/percentage_to_colour(var/P) //Takes a value between 0-1 //Returns a colour - pure green if 1, pure red if 0 //Inbetween values will gradiant through green, yellow, orange, red diff --git a/code/_helpers/sorting/__main.dm b/code/_helpers/sorting/__main.dm index 0f6bc43779c..97e0508a1d2 100644 --- a/code/_helpers/sorting/__main.dm +++ b/code/_helpers/sorting/__main.dm @@ -32,622 +32,629 @@ var/datum/sortInstance/sortInstance = new() var/list/runLens = list() - proc/timSort(start, end) - runBases.Cut() - runLens.Cut() +/datum/sortInstance/proc/timSort(start, end) + runBases.Cut() + runLens.Cut() - var/remaining = end - start + var/remaining = end - start - //If array is small, do a 'mini-TimSort' with no merges - if(remaining < MIN_MERGE) - var/initRunLen = countRunAndMakeAscending(start, end) - binarySort(start, end, start+initRunLen) - return + //If array is small, do a 'mini-TimSort' with no merges + if(remaining < MIN_MERGE) + var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start+initRunLen) + return - //March over the array finding natural runs - //Extend any short natural runs to runs of length minRun - var/minRun = minRunLength(remaining) + //March over the array finding natural runs + //Extend any short natural runs to runs of length minRun + var/minRun = minRunLength(remaining) - do - //identify next run - var/runLen = countRunAndMakeAscending(start, end) + do + //identify next run + var/runLen = countRunAndMakeAscending(start, end) - //if run is short, extend to min(minRun, remaining) - if(runLen < minRun) - var/force = (remaining <= minRun) ? remaining : minRun + //if run is short, extend to min(minRun, remaining) + if(runLen < minRun) + var/force = (remaining <= minRun) ? remaining : minRun - binarySort(start, start+force, start+runLen) - runLen = force + binarySort(start, start+force, start+runLen) + runLen = force - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) - //maybe merge - mergeCollapse() + //maybe merge + mergeCollapse() - //Advance to find next run - start += runLen - remaining -= runLen + //Advance to find next run + start += runLen + remaining -= runLen - while(remaining > 0) + while(remaining > 0) - //Merge all remaining runs to complete sort - //ASSERT(start == end) - mergeForceCollapse(); - //ASSERT(runBases.len == 1) + //Merge all remaining runs to complete sort + //ASSERT(start == end) + mergeForceCollapse(); + //ASSERT(runBases.len == 1) - //reset minGallop, for successive calls - minGallop = MIN_GALLOP + //reset minGallop, for successive calls + minGallop = MIN_GALLOP - return L + return L - /* - Sorts the specified portion of the specified array using a binary - insertion sort. This is the best method for sorting small numbers - of elements. It requires O(n log n) compares, but O(n^2) data - movement (worst case). +/** + * Sorts the specified portion of the specified array using a binary + * insertion sort. This is the best method for sorting small numbers + * of elements. It requires O(n log n) compares, but O(n^2) data + * movement (worst case). + * + * If the initial part of the specified range is already sorted, + * this method can take advantage of it: the method assumes that the + * elements in range [lo,start) are already sorted + * + * lo the index of the first element in the range to be sorted + * hi the index after the last element in the range to be sorted + * start the index of the first element in the range that is not already known to be sorted + */ +/datum/sortInstance/proc/binarySort(lo, hi, start) + //ASSERT(lo <= start && start <= hi) + if(start <= lo) + start = lo + 1 - If the initial part of the specified range is already sorted, - this method can take advantage of it: the method assumes that the - elements in range [lo,start) are already sorted + for(,start < hi, ++start) + var/pivot = fetchElement(L,start) - lo the index of the first element in the range to be sorted - hi the index after the last element in the range to be sorted - start the index of the first element in the range that is not already known to be sorted - */ - proc/binarySort(lo, hi, start) - //ASSERT(lo <= start && start <= hi) - if(start <= lo) - start = lo + 1 + //set left and right to the index where pivot belongs + var/left = lo + var/right = start + //ASSERT(left <= right) - for(,start < hi, ++start) - var/pivot = fetchElement(L,start) - - //set left and right to the index where pivot belongs - var/left = lo - var/right = start - //ASSERT(left <= right) - - //[lo, left) elements <= pivot < [right, start) elements - //in other words, find where the pivot element should go using bisection search - while(left < right) - var/mid = (left + right) >> 1 //round((left+right)/2) - if(call(cmp)(fetchElement(L,mid), pivot) > 0) - right = mid - else - left = mid+1 - - //ASSERT(left == right) - moveElement(L, start, left) //move pivot element to correct location in the sorted range - - /* - Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front - - A run is the longest ascending sequence with: - a[lo] <= a[lo + 1] <= a[lo + 2] <= ... - or the longest descending sequence with: - a[lo] > a[lo + 1] > a[lo + 2] > ... - - For its intended use in a stable mergesort, the strictness of the - definition of "descending" is needed so that the call can safely - reverse a descending sequence without violating stability. - */ - proc/countRunAndMakeAscending(lo, hi) - //ASSERT(lo < hi) - - var/runHi = lo + 1 - if(runHi >= hi) - return 1 - - var/last = fetchElement(L,lo) - var/current = fetchElement(L,runHi++) - - if(call(cmp)(current, last) < 0) - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) >= 0) - break - ++runHi - reverseRange(L, lo, runHi) - else - while(runHi < hi) - last = current - current = fetchElement(L,runHi) - if(call(cmp)(current, last) < 0) - break - ++runHi - - return runHi - lo - - //Returns the minimum acceptable run length for an array of the specified length. - //Natural runs shorter than this will be extended with binarySort - proc/minRunLength(n) - //ASSERT(n >= 0) - var/r = 0 //becomes 1 if any bits are shifted off - while(n >= MIN_MERGE) - r |= (n & 1) - n >>= 1 - return n + r - - //Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: - // runLen[i-3] > runLen[i-2] + runLen[i-1] - // runLen[i-2] > runLen[i-1] - //This method is called each time a new run is pushed onto the stack. - //So the invariants are guaranteed to hold for i= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt(n) + //[lo, left) elements <= pivot < [right, start) elements + //in other words, find where the pivot element should go using bisection search + while(left < right) + var/mid = (left + right) >> 1 //round((left+right)/2) + if(call(cmp)(fetchElement(L,mid), pivot) > 0) + right = mid else - break //Invariant is established + left = mid+1 + //ASSERT(left == right) + moveElement(L, start, left) //move pivot element to correct location in the sorted range - //Merges all runs on the stack until only one remains. - //Called only once, to finalise the sort - proc/mergeForceCollapse() - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) +/** + * Returns the length of the run beginning at the specified position and reverses the run if it is back-to-front + * + * A run is the longest ascending sequence with: + * a[lo] <= a[lo + 1] <= a[lo + 2] <= ... + * or the longest descending sequence with: + * a[lo] > a[lo + 1] > a[lo + 2] > ... + * + * For its intended use in a stable mergesort, the strictness of the + * definition of "descending" is needed so that the call can safely + * reverse a descending sequence without violating stability. + */ +/datum/sortInstance/proc/countRunAndMakeAscending(lo, hi) + //ASSERT(lo < hi) + + var/runHi = lo + 1 + if(runHi >= hi) + return 1 + + var/last = fetchElement(L,lo) + var/current = fetchElement(L,runHi++) + + if(call(cmp)(current, last) < 0) + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) >= 0) + break + ++runHi + reverseRange(L, lo, runHi) + else + while(runHi < hi) + last = current + current = fetchElement(L,runHi) + if(call(cmp)(current, last) < 0) + break + ++runHi + + return runHi - lo + +/** + * Returns the minimum acceptable run length for an array of the specified length. + * Natural runs shorter than this will be extended with binarySort + */ +/datum/sortInstance/proc/minRunLength(n) + //ASSERT(n >= 0) + var/r = 0 //becomes 1 if any bits are shifted off + while(n >= MIN_MERGE) + r |= (n & 1) + n >>= 1 + return n + r + +/** + * Examines the stack of runs waiting to be merged and merges adjacent runs until the stack invariants are reestablished: + * runLen[i-3] > runLen[i-2] + runLen[i-1] + * runLen[i-2] > runLen[i-1] + * This method is called each time a new run is pushed onto the stack. + * So the invariants are guaranteed to hold for i= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) --n mergeAt(n) - - - //Merges the two consecutive runs at stack indices i and i+1 - //Run i must be the penultimate or antepenultimate run on the stack - //In other words, i must be equal to stackSize-2 or stackSize-3 - proc/mergeAt(i) - //ASSERT(runBases.len >= 2) - //ASSERT(i >= 1) - //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) - - var/base1 = runBases[i] - var/base2 = runBases[i+1] - var/len1 = runLens[i] - var/len2 = runLens[i+1] - - //ASSERT(len1 > 0 && len2 > 0) - //ASSERT(base1 + len1 == base2) - - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) - - - //Find where the first element of run2 goes in run1. - //Prior elements in run1 can be ignored (because they're already in place) - var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) - //ASSERT(k >= 0) - base1 += k - len1 -= k - if(len1 == 0) - return - - //Find where the last element of run1 goes in run2. - //Subsequent elements in run2 can be ignored (because they're already in place) - len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) - //ASSERT(len2 >= 0) - if(len2 == 0) - return - - //Merge remaining runs, using tmp array with min(len1, len2) elements - if(len1 <= len2) - mergeLo(base1, len1, base2, len2) + else if(runLens[n] <= runLens[n+1]) + mergeAt(n) else - mergeHi(base1, len1, base2, len2) + break //Invariant is established + +/** + * Merges all runs on the stack until only one remains. + * Called only once, to finalise the sort + */ +/datum/sortInstance/proc/mergeForceCollapse() + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt(n) + +/** + * Merges the two consecutive runs at stack indices i and i+1 + * Run i must be the penultimate or antepenultimate run on the stack + * In other words, i must be equal to stackSize-2 or stackSize-3 + */ +/datum/sortInstance/proc/mergeAt(i) + //ASSERT(runBases.len >= 2) + //ASSERT(i >= 1) + //ASSERT(i == runBases.len - 1 || i == runBases.len - 2) + + var/base1 = runBases[i] + var/base2 = runBases[i+1] + var/len1 = runLens[i] + var/len2 = runLens[i+1] + + //ASSERT(len1 > 0 && len2 > 0) + //ASSERT(base1 + len1 == base2) + + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) - /* - Locates the position to insert key within the specified sorted range - If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements + //Find where the first element of run2 goes in run1. + //Prior elements in run1 can be ignored (because they're already in place) + var/k = gallopRight(fetchElement(L,base2), base1, len1, 0) + //ASSERT(k >= 0) + base1 += k + len1 -= k + if(len1 == 0) + return - key the element to be inserted into the sorted range - base the index of the first element of the sorted range - len the length of the sorted range, must be greater than 0 - hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint + //Find where the last element of run1 goes in run2. + //Subsequent elements in run2 can be ignored (because they're already in place) + len2 = gallopLeft(fetchElement(L,base1 + len1 - 1), base2, len2, len2-1) + //ASSERT(len2 >= 0) + if(len2 == 0) + return - Returns the index at which to insert element 'key' - */ - proc/gallopLeft(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) + //Merge remaining runs, using tmp array with min(len1, len2) elements + if(len1 <= len2) + mergeLo(base1, len1, base2, len2) + else + mergeHi(base1, len1, base2, len2) - var/lastOffset = 0 - var/offset = 1 - if(call(cmp)(key, fetchElement(L,base+hint)) > 0) - var/maxOffset = len - hint - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) - lastOffset = offset - offset = (offset << 1) + 1 - if(offset > maxOffset) - offset = maxOffset +/** + * Locates the position to insert key within the specified sorted range + * If the range contains elements equal to key, this will return the index of the LEFTMOST of those elements + * + * key the element to be inserted into the sorted range + * base the index of the first element of the sorted range + * len the length of the sorted range, must be greater than 0 + * hint the offset from base at which to begin the search, such that 0 <= hint < len; i.e. base <= hint < base+hint + * + * Returns the index at which to insert element 'key' +*/ +/datum/sortInstance/proc/gallopLeft(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) - lastOffset += hint - offset += hint + var/lastOffset = 0 + var/offset = 1 + if(call(cmp)(key, fetchElement(L,base+hint)) > 0) + var/maxOffset = len - hint + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) > 0) + lastOffset = offset + offset = (offset << 1) + 1 - else - var/maxOffset = hint + 1 - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) - lastOffset = offset - offset = (offset << 1) + 1 + if(offset > maxOffset) + offset = maxOffset - if(offset > maxOffset) - offset = maxOffset + lastOffset += hint + offset += hint - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp + else + var/maxOffset = hint + 1 + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) <= 0) + lastOffset = offset + offset = (offset << 1) + 1 - //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + if(offset > maxOffset) + offset = maxOffset - //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than - //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + ((offset - lastOffset) >> 1) - - if(call(cmp)(key, fetchElement(L,base+m)) > 0) - lastOffset = m + 1 - else - offset = m - - //ASSERT(lastOffset == offset) - return offset - - /** - * Like gallopLeft, except that if the range contains an element equal to - * key, gallopRight returns the index after the rightmost equal element. - * - * @param key the key whose insertion point to search for - * @param a the array in which to search - * @param base the index of the first element in the range - * @param len the length of the range; must be > 0 - * @param hint the index at which to begin the search, 0 <= hint < n. - * The closer hint is to the result, the faster this method will run. - * @param c the comparator used to order the range, and to search - * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] - */ - proc/gallopRight(key, base, len, hint) - //ASSERT(len > 0 && hint >= 0 && hint < len) - - var/offset = 1 - var/lastOffset = 0 - if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] - var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards - lastOffset = offset - offset = (offset << 1) + 1 //1 3 7 15 - //if(offset <= 0) //int overflow, not an issue here since we are using floats - // offset = maxOffset - - if(offset > maxOffset) - offset = maxOffset - - var/temp = lastOffset - lastOffset = hint - offset - offset = hint - temp - - else //key > L[base+hint] - var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) - while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) - lastOffset = offset - offset = (offset << 1) + 1 - //if(offset <= 0) //int overflow, not an issue here since we are using floats - // offset = maxOffset - - if(offset > maxOffset) - offset = maxOffset - - lastOffset += hint - offset += hint + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) - ++lastOffset - while(lastOffset < offset) - var/m = lastOffset + ((offset - lastOffset) >> 1) + //Now L[base+lastOffset] < key <= L[base+offset], so key belongs somewhere to the right of lastOffset but no farther than + //offset. Do a binary search with invariant L[base+lastOffset-1] < key <= L[base+offset] + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) - if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] - offset = m - else //key > L[base+m] - lastOffset = m + 1 + if(call(cmp)(key, fetchElement(L,base+m)) > 0) + lastOffset = m + 1 + else + offset = m - //ASSERT(lastOffset == offset) + //ASSERT(lastOffset == offset) + return offset - return offset +/** + * Like gallopLeft, except that if the range contains an element equal to + * key, gallopRight returns the index after the rightmost equal element. + * + * @param key the key whose insertion point to search for + * @param a the array in which to search + * @param base the index of the first element in the range + * @param len the length of the range; must be > 0 + * @param hint the index at which to begin the search, 0 <= hint < n. + * The closer hint is to the result, the faster this method will run. + * @param c the comparator used to order the range, and to search + * @return the int k, 0 <= k <= n such that a[b + k - 1] <= key < a[b + k] + */ +/datum/sortInstance/proc/gallopRight(key, base, len, hint) + //ASSERT(len > 0 && hint >= 0 && hint < len) + + var/offset = 1 + var/lastOffset = 0 + if(call(cmp)(key, fetchElement(L,base+hint)) < 0) //key <= L[base+hint] + var/maxOffset = hint + 1 //therefore we want to insert somewhere in the range [base,base+hint] = [base+,base+(hint+1)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint-offset)) < 0) //we are iterating backwards + lastOffset = offset + offset = (offset << 1) + 1 //1 3 7 15 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + var/temp = lastOffset + lastOffset = hint - offset + offset = hint - temp + + else //key > L[base+hint] + var/maxOffset = len - hint //therefore we want to insert somewhere in the range (base+hint,base+len) = [base+hint+1, base+hint+(len-hint)) + while(offset < maxOffset && call(cmp)(key, fetchElement(L,base+hint+offset)) >= 0) + lastOffset = offset + offset = (offset << 1) + 1 + //if(offset <= 0) //int overflow, not an issue here since we are using floats + // offset = maxOffset + + if(offset > maxOffset) + offset = maxOffset + + lastOffset += hint + offset += hint + + //ASSERT(-1 <= lastOffset && lastOffset < offset && offset <= len) + + ++lastOffset + while(lastOffset < offset) + var/m = lastOffset + ((offset - lastOffset) >> 1) + + if(call(cmp)(key, fetchElement(L,base+m)) < 0) //key <= L[base+m] + offset = m + else //key > L[base+m] + lastOffset = m + 1 + + //ASSERT(lastOffset == offset) + + return offset + +/** + * Merges two adjacent runs in-place in a stable fashion. + * For performance this method should only be called when len1 <= len2! + */ +/datum/sortInstance/proc/mergeLo(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + var/cursor2 = base2 + + //degenerate cases + if(len2 == 1) + moveElement(L, cursor2, cursor1) + return + + if(len1 == 1) + moveElement(L, cursor1, cursor2+len2) + return - //Merges two adjacent runs in-place in a stable fashion. - //For performance this method should only be called when len1 <= len2! - proc/mergeLo(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + //Move first element of second run + moveElement(L, cursor2++, cursor1++) + --len2 - var/cursor1 = base1 - var/cursor2 = base2 + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won - //degenerate cases - if(len2 == 1) - moveElement(L, cursor2, cursor1) - return + //do the straightfoward thin until one run starts winning consistently - if(len1 == 1) - moveElement(L, cursor1, cursor2+len2) - return + do + //ASSERT(len1 > 1 && len2 > 0) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) + moveElement(L, cursor2++, cursor1++) + --len2 + ++count2 + count1 = 0 - //Move first element of second run - moveElement(L, cursor2++, cursor1++) - --len2 - - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won - - //do the straightfoward thin until one run starts winning consistently - - do - //ASSERT(len1 > 1 && len2 > 0) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor2++, cursor1++) - --len2 - - ++count2 - count1 = 0 - - if(len2 == 0) - break outer - else - ++cursor1 - - ++count1 - count2 = 0 - - if(--len1 == 1) - break outer - - while((count1 | count2) < minGallop) - - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 1 && len2 > 0) - - count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) - if(count1) - cursor1 += count1 - len1 -= count1 - - if(len1 <= 1) - break outer - - moveElement(L, cursor2, cursor1) - ++cursor2 - ++cursor1 - if(--len2 == 0) + if(len2 == 0) break outer - - count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) - if(count2) - moveRange(L, cursor2, cursor1, count2) - - cursor2 += count2 - cursor1 += count2 - len2 -= count2 - - if(len2 == 0) - break outer - + else ++cursor1 + + ++count1 + count2 = 0 + if(--len1 == 1) break outer - --minGallop - - while((count1|count2) > MIN_GALLOP) - - if(minGallop < 0) - minGallop = 0 - minGallop += 2; // Penalize for leaving gallop mode + while((count1 | count2) < minGallop) - if(len1 == 1) - //ASSERT(len2 > 0) - moveElement(L, cursor1, cursor2+len2) + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 1 && len2 > 0) - //else - //ASSERT(len2 == 0) - //ASSERT(len1 > 1) + count1 = gallopRight(fetchElement(L,cursor2), cursor1, len1, 0) + if(count1) + cursor1 += count1 + len1 -= count1 - - proc/mergeHi(base1, len1, base2, len2) - //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) - - var/cursor1 = base1 + len1 - 1 //start at end of sublists - var/cursor2 = base2 + len2 - 1 - - //degenerate cases - if(len2 == 1) - moveElement(L, base2, base1) - return - - if(len1 == 1) - moveElement(L, base1, cursor2+1) - return - - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - outer: - while(1) - var/count1 = 0 //# of times in a row that first run won - var/count2 = 0 // " " " " " " second run won - - //do the straightfoward thing until one run starts winning consistently - do - //ASSERT(len1 > 0 && len2 > 1) - if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) - moveElement(L, cursor1--, cursor2-- + 1) - --len1 - - ++count1 - count2 = 0 - - if(len1 == 0) - break outer - else - --cursor2 - --len2 - - ++count2 - count1 = 0 - - if(len2 == 1) - break outer - while((count1 | count2) < minGallop) - - //one run is winning consistently so galloping may provide huge benifits - //so try galloping, until such time as the run is no longer consistently winning - do - //ASSERT(len1 > 0 && len2 > 1) - - count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? - if(count1) - cursor1 -= count1 - - moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition - - cursor2 -= count1 - len1 -= count1 - - if(len1 == 0) - break outer - - --cursor2 - - if(--len2 == 1) + if(len1 <= 1) break outer - count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) - if(count2) - cursor2 -= count2 - len2 -= count2 + moveElement(L, cursor2, cursor1) + ++cursor2 + ++cursor1 + if(--len2 == 0) + break outer - if(len2 <= 1) - break outer + count2 = gallopLeft(fetchElement(L,cursor1), cursor2, len2, 0) + if(count2) + moveRange(L, cursor2, cursor1, count2) + cursor2 += count2 + cursor1 += count2 + len2 -= count2 + + if(len2 == 0) + break outer + + ++cursor1 + if(--len1 == 1) + break outer + + --minGallop + + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2; // Penalize for leaving gallop mode + + + if(len1 == 1) + //ASSERT(len2 > 0) + moveElement(L, cursor1, cursor2+len2) + + //else + //ASSERT(len2 == 0) + //ASSERT(len1 > 1) + + +/datum/sortInstance/proc/mergeHi(base1, len1, base2, len2) + //ASSERT(len1 > 0 && len2 > 0 && base1 + len1 == base2) + + var/cursor1 = base1 + len1 - 1 //start at end of sublists + var/cursor2 = base2 + len2 - 1 + + //degenerate cases + if(len2 == 1) + moveElement(L, base2, base1) + return + + if(len1 == 1) + moveElement(L, base1, cursor2+1) + return + + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + outer: + while(1) + var/count1 = 0 //# of times in a row that first run won + var/count2 = 0 // " " " " " " second run won + + //do the straightfoward thing until one run starts winning consistently + do + //ASSERT(len1 > 0 && len2 > 1) + if(call(cmp)(fetchElement(L,cursor2), fetchElement(L,cursor1)) < 0) moveElement(L, cursor1--, cursor2-- + 1) --len1 + ++count1 + count2 = 0 + + if(len1 == 0) + break outer + else + --cursor2 + --len2 + + ++count2 + count1 = 0 + + if(len2 == 1) + break outer + while((count1 | count2) < minGallop) + + //one run is winning consistently so galloping may provide huge benifits + //so try galloping, until such time as the run is no longer consistently winning + do + //ASSERT(len1 > 0 && len2 > 1) + + count1 = len1 - gallopRight(fetchElement(L,cursor2), base1, len1, len1-1) //should cursor1 be base1? + if(count1) + cursor1 -= count1 + + moveRange(L, cursor1+1, cursor2+1, count1) //cursor1+1 == cursor2 by definition + + cursor2 -= count1 + len1 -= count1 + if(len1 == 0) break outer - --minGallop - while((count1|count2) > MIN_GALLOP) + --cursor2 - if(minGallop < 0) - minGallop = 0 - minGallop += 2 // Penalize for leaving gallop mode + if(--len2 == 1) + break outer - if(len2 == 1) - //ASSERT(len1 > 0) + count2 = len2 - gallopLeft(fetchElement(L,cursor1), cursor1+1, len2, len2-1) + if(count2) + cursor2 -= count2 + len2 -= count2 - cursor1 -= len1 - moveRange(L, cursor1+1, cursor2+1, len1) + if(len2 <= 1) + break outer - //else - //ASSERT(len1 == 0) - //ASSERT(len2 > 0) + moveElement(L, cursor1--, cursor2-- + 1) + --len1 + + if(len1 == 0) + break outer + + --minGallop + while((count1|count2) > MIN_GALLOP) + + if(minGallop < 0) + minGallop = 0 + minGallop += 2 // Penalize for leaving gallop mode + + if(len2 == 1) + //ASSERT(len1 > 0) + + cursor1 -= len1 + moveRange(L, cursor1+1, cursor2+1, len1) + + //else + //ASSERT(len1 == 0) + //ASSERT(len2 > 0) - proc/mergeSort(start, end) - var/remaining = end - start +/datum/sortInstance/proc/mergeSort(start, end) + var/remaining = end - start - //If array is small, do an insertion sort - if(remaining < MIN_MERGE) - //var/initRunLen = countRunAndMakeAscending(start, end) - binarySort(start, end, start)/*+initRunLen*/ - return + //If array is small, do an insertion sort + if(remaining < MIN_MERGE) + //var/initRunLen = countRunAndMakeAscending(start, end) + binarySort(start, end, start)/*+initRunLen*/ + return - var/minRun = minRunLength(remaining) + var/minRun = minRunLength(remaining) - do - var/runLen = (remaining <= minRun) ? remaining : minRun + do + var/runLen = (remaining <= minRun) ? remaining : minRun - binarySort(start, start+runLen, start) + binarySort(start, start+runLen, start) - //add data about run to queue - runBases.Add(start) - runLens.Add(runLen) + //add data about run to queue + runBases.Add(start) + runLens.Add(runLen) - //Advance to find next run - start += runLen - remaining -= runLen + //Advance to find next run + start += runLen + remaining -= runLen - while(remaining > 0) + while(remaining > 0) - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) - if(runLens[n-1] < runLens[n+1]) - --n - mergeAt2(n) - else if(runLens[n] <= runLens[n+1]) - mergeAt2(n) - else - break //Invariant is established - - while(runBases.len >= 2) - var/n = runBases.len - 1 - if(n > 1 && runLens[n-1] < runLens[n+1]) + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] <= runLens[n] + runLens[n+1]) + if(runLens[n-1] < runLens[n+1]) --n mergeAt2(n) + else if(runLens[n] <= runLens[n+1]) + mergeAt2(n) + else + break //Invariant is established - return L + while(runBases.len >= 2) + var/n = runBases.len - 1 + if(n > 1 && runLens[n-1] < runLens[n+1]) + --n + mergeAt2(n) - proc/mergeAt2(i) - var/cursor1 = runBases[i] - var/cursor2 = runBases[i+1] + return L - var/end1 = cursor1+runLens[i] - var/end2 = cursor2+runLens[i+1] +/datum/sortInstance/proc/mergeAt2(i) + var/cursor1 = runBases[i] + var/cursor2 = runBases[i+1] - var/val1 = fetchElement(L,cursor1) - var/val2 = fetchElement(L,cursor2) + var/end1 = cursor1+runLens[i] + var/end2 = cursor2+runLens[i+1] - while(1) - if(call(cmp)(val1,val2) <= 0) - if(++cursor1 >= end1) - break - val1 = fetchElement(L,cursor1) - else - moveElement(L,cursor2,cursor1) + var/val1 = fetchElement(L,cursor1) + var/val2 = fetchElement(L,cursor2) - if(++cursor2 >= end2) - break - ++end1 - ++cursor1 - //if(++cursor1 >= end1) - // break + while(1) + if(call(cmp)(val1,val2) <= 0) + if(++cursor1 >= end1) + break + val1 = fetchElement(L,cursor1) + else + moveElement(L,cursor2,cursor1) - val2 = fetchElement(L,cursor2) + if(++cursor2 >= end2) + break + ++end1 + ++cursor1 + //if(++cursor1 >= end1) + // break + + val2 = fetchElement(L,cursor2) - //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run - //(which isn't involved in this merge). The current run (i+1) goes away in any case. - runLens[i] += runLens[i+1] - runLens.Cut(i+1, i+2) - runBases.Cut(i+1, i+2) + //Record the legth of the combined runs. If i is the 3rd last run now, also slide over the last run + //(which isn't involved in this merge). The current run (i+1) goes away in any case. + runLens[i] += runLens[i+1] + runLens.Cut(i+1, i+2) + runBases.Cut(i+1, i+2) #undef MIN_GALLOP #undef MIN_MERGE diff --git a/code/_helpers/type2type.dm b/code/_helpers/type2type.dm index 83dd093aeea..b2179909237 100644 --- a/code/_helpers/type2type.dm +++ b/code/_helpers/type2type.dm @@ -17,7 +17,7 @@ return splittext(file2text(filename), seperator) // Slower then list2text (replaced with jointext), but correctly processes associative lists. -proc/tg_list2text(list/list, glue=",") +/proc/tg_list2text(list/list, glue=",") if (!istype(list) || !list.len) return var/output diff --git a/code/_onclick/hud/hud.dm b/code/_onclick/hud/hud.dm index 59f248843dc..b824ec7692e 100644 --- a/code/_onclick/hud/hud.dm +++ b/code/_onclick/hud/hud.dm @@ -156,7 +156,7 @@ var/list/global_huds var/obj/screen/movable/action_button/hide_toggle/hide_actions_toggle var/action_buttons_hidden = 0 -datum/hud/New(mob/owner) +/datum/hud/New(mob/owner) mymob = owner instantiate() ..() diff --git a/code/datums/computerfiles.dm b/code/datums/computerfiles.dm index b028f027b13..fe4e8d05634 100644 --- a/code/datums/computerfiles.dm +++ b/code/datums/computerfiles.dm @@ -1,7 +1,7 @@ -datum - computer - var/name - folder - var/list/datum/computer/contents = list() +/datum/computer + var/name - file \ No newline at end of file +/datum/computer/folder + var/list/datum/computer/contents = list() + +/datum/computer/folder/file diff --git a/code/datums/helper_datums/getrev.dm b/code/datums/helper_datums/getrev.dm index 75c7445c7c5..a22195c9c87 100644 --- a/code/datums/helper_datums/getrev.dm +++ b/code/datums/helper_datums/getrev.dm @@ -40,7 +40,7 @@ var/global/datum/getrev/revdata = new() world.log << date world.log << revision -client/verb/showrevinfo() +/client/verb/showrevinfo() set category = "OOC" set name = "Show Server Revision" set desc = "Check the current server code revision" diff --git a/code/defines/obj.dm b/code/defines/obj.dm index 4d803d2dabc..06b1ee71e33 100644 --- a/code/defines/obj.dm +++ b/code/defines/obj.dm @@ -51,9 +51,9 @@ drop_sound = 'sound/items/drop/rubber.ogg' pickup_sound = 'sound/items/pickup/rubber.ogg' - afterattack(atom/target as mob|obj|turf|area, mob/user as mob) - user.drop_item() - src.throw_at(target, throw_range, throw_speed, user) +/obj/item/beach_ball/afterattack(atom/target as mob|obj|turf|area, mob/user as mob) + user.drop_item() + src.throw_at(target, throw_range, throw_speed, user) /obj/effect/spawner name = "object spawner" diff --git a/code/defines/procs/AStar.dm b/code/defines/procs/AStar.dm index 5e4041597d6..fedc85da8f4 100644 --- a/code/defines/procs/AStar.dm +++ b/code/defines/procs/AStar.dm @@ -37,69 +37,69 @@ length to avoid portals or something i guess?? Not that they're counted right no // Also added 'exclude' turf to avoid travelling over; defaults to null -PriorityQueue +/PriorityQueue var/list/queue var/comparison_function - New(compare) - queue = list() - comparison_function = compare +/PriorityQueue/New(compare) + queue = list() + comparison_function = compare - proc/IsEmpty() - return !queue.len +/PriorityQueue/proc/IsEmpty() + return !queue.len - proc/Enqueue(var/data) - queue.Add(data) - var/index = queue.len +/PriorityQueue/proc/Enqueue(var/data) + queue.Add(data) + var/index = queue.len - //From what I can tell, this automagically sorts the added data into the correct location. - while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0) - queue.Swap(index, index / 2) - index /= 2 + //From what I can tell, this automagically sorts the added data into the correct location. + while(index > 2 && call(comparison_function)(queue[index / 2], queue[index]) > 0) + queue.Swap(index, index / 2) + index /= 2 - proc/Dequeue() - if(!queue.len) - return 0 - return Remove(1) +/PriorityQueue/proc/Dequeue() + if(!queue.len) + return 0 + return Remove(1) - proc/Remove(var/index) - if(index > queue.len) - return 0 +/PriorityQueue/proc/Remove(var/index) + if(index > queue.len) + return 0 - var/thing = queue[index] - queue.Swap(index, queue.len) - queue.Cut(queue.len) - if(index < queue.len) - FixQueue(index) - return thing + var/thing = queue[index] + queue.Swap(index, queue.len) + queue.Cut(queue.len) + if(index < queue.len) + FixQueue(index) + return thing - proc/FixQueue(var/index) - var/child = 2 * index - var/item = queue[index] +/PriorityQueue/proc/FixQueue(var/index) + var/child = 2 * index + var/item = queue[index] - while(child <= queue.len) - if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0) - child++ - if(call(comparison_function)(item, queue[child]) > 0) - queue[index] = queue[child] - index = child - else - break - child = 2 * index - queue[index] = item + while(child <= queue.len) + if(child < queue.len && call(comparison_function)(queue[child], queue[child + 1]) > 0) + child++ + if(call(comparison_function)(item, queue[child]) > 0) + queue[index] = queue[child] + index = child + else + break + child = 2 * index + queue[index] = item - proc/List() - return queue.Copy() +/PriorityQueue/proc/List() + return queue.Copy() - proc/Length() - return queue.len +/PriorityQueue/proc/Length() + return queue.len - proc/RemoveItem(data) - var/index = queue.Find(data) - if(index) - return Remove(index) +/PriorityQueue/proc/RemoveItem(data) + var/index = queue.Find(data) + if(index) + return Remove(index) -PathNode +/PathNode var/datum/position var/PathNode/previous_node @@ -109,21 +109,21 @@ PathNode var/cost var/nodes_traversed - New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) - position = _position - previous_node = _previous_node +/PathNode/New(_position, _previous_node, _known_cost, _cost, _nodes_traversed) + position = _position + previous_node = _previous_node - known_cost = _known_cost - cost = _cost - estimated_cost = cost + known_cost + known_cost = _known_cost + cost = _cost + estimated_cost = cost + known_cost - best_estimated_cost = estimated_cost - nodes_traversed = _nodes_traversed + best_estimated_cost = estimated_cost + nodes_traversed = _nodes_traversed -proc/PathWeightCompare(PathNode/a, PathNode/b) +/proc/PathWeightCompare(PathNode/a, PathNode/b) return a.estimated_cost - b.estimated_cost -proc/AStar(var/start, var/end, adjacent, dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude) +/proc/AStar(var/start, var/end, adjacent, dist, var/max_nodes, var/max_node_depth = 30, var/min_target_dist = 0, var/min_node_dist, var/id, var/datum/exclude) var/PriorityQueue/open = new /PriorityQueue(/proc/PathWeightCompare) var/list/closed = list() var/list/path diff --git a/code/defines/procs/hud.dm b/code/defines/procs/hud.dm index 7b090cacd78..edd7e78add9 100644 --- a/code/defines/procs/hud.dm +++ b/code/defines/procs/hud.dm @@ -13,7 +13,7 @@ the HUD updates properly! */ appearance_flags = APPEARANCE_UI //Medical HUD outputs. Called by the Life() proc of the mob using it, usually. -proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt) +/proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt) if(!can_process_hud(M)) return @@ -35,7 +35,7 @@ proc/process_med_hud(var/mob/M, var/local_scanner, var/mob/Alt) P.Client.images += patient.hud_list[TRIAGE_HUD] //Security HUDs. Pass a value for the second argument to enable implant viewing or other special features. -proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt) +/proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt) if(!can_process_hud(M)) return var/datum/arranged_hud_process/P = arrange_hud_process(M, Alt, sec_hud_users) @@ -50,12 +50,12 @@ proc/process_sec_hud(var/mob/M, var/advanced_mode, var/mob/Alt) P.Client.images += perp.hud_list[IMPLOYAL_HUD] P.Client.images += perp.hud_list[IMPCHEM_HUD] -datum/arranged_hud_process +/datum/arranged_hud_process var/client/Client var/mob/Mob var/turf/Turf -proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list) +/proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list) hud_list |= M var/datum/arranged_hud_process/P = new P.Client = M.client @@ -63,7 +63,7 @@ proc/arrange_hud_process(var/mob/M, var/mob/Alt, var/list/hud_list) P.Turf = get_turf(P.Mob) return P -proc/can_process_hud(var/mob/M) +/proc/can_process_hud(var/mob/M) if(!M) return 0 if(!M.client) @@ -73,14 +73,14 @@ proc/can_process_hud(var/mob/M) return 1 //Deletes the current HUD images so they can be refreshed with new ones. -mob/proc/handle_hud_glasses() //Used in the life.dm of mobs that can use HUDs. +/mob/proc/handle_hud_glasses() //Used in the life.dm of mobs that can use HUDs. if(client) for(var/image/hud_overlay/hud in client.images) client.images -= hud med_hud_users -= src sec_hud_users -= src -mob/proc/in_view(var/turf/T) +/mob/proc/in_view(var/turf/T) return view(T) /mob/abstract/eye/in_view(var/turf/T) @@ -90,7 +90,7 @@ mob/proc/in_view(var/turf/T) viewed += H return viewed -proc/get_sec_hud_icon(var/mob/living/carbon/human/H)//This function is called from human/life,dm, ~line 1663 +/proc/get_sec_hud_icon(var/mob/living/carbon/human/H)//This function is called from human/life,dm, ~line 1663 var/state var/obj/item/card/id/I = H.GetIdCard() if(I) diff --git a/code/defines/procs/sd_Alert.dm b/code/defines/procs/sd_Alert.dm index 2467909d7be..f2a4dc2758a 100644 --- a/code/defines/procs/sd_Alert.dm +++ b/code/defines/procs/sd_Alert.dm @@ -66,7 +66,7 @@ Version 1 changes (from version 0): #define SD_ALERT_LINKS 4 #define SD_ALERT_NOVALIDATE 8 -proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ +/proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ default, duration = 0, unfocus = 1, size = "300x200", \ table = "width=100% height=100%", style, tag, select, flags = SD_ALERT_SCROLL) @@ -87,82 +87,81 @@ proc/sd_Alert(client/who, message, title, buttons = list("Ok"),\ T.Display(message,title,buttons,default,unfocus,size,table,style,select,flags) . = T.Response() -sd_alert - var - client/target - response - list/validation +/sd_alert + var/client/target + var/response + var/list/validation - Destroy() - target << browse(null,"window=\ref[src]") - return ..() +/sd_alert/Destroy() + target << browse(null,"window=\ref[src]") + return ..() - New(who, tag) - ..() - target = who - src.tag = tag +/sd_alert/New(who, tag) + ..() + target = who + src.tag = tag - Topic(href,params[]) - if(usr.client != target) return - response = params["clk"] +/sd_alert/Topic(href,params[]) + if(usr.client != target) return + response = params["clk"] - proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags) - if(unfocus) spawn() target << browse(null,null) - if(istext(buttons)) buttons = list(buttons) - if(!default) default = buttons[1] - if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy() +/sd_alert/proc/Display(message,title,list/buttons,default,unfocus,size,table,style,select,flags) + if(unfocus) spawn() target << browse(null,null) + if(istext(buttons)) buttons = list(buttons) + if(!default) default = buttons[1] + if(!(flags & SD_ALERT_NOVALIDATE)) validation = buttons.Copy() - var/html = {"[title][style]\ -
[message]
"} + var/html = {"[title][style]\ +
[message]
"} - if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices - html += {"
\ - -
" - else if(flags & SD_ALERT_LINKS) // text link style - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += "[html_encode(b)]\ -
" - else // button style choices - for(var/b in buttons) - var/list/L = list() - L["clk"] = b - var/html_string=list2params(L) - var/focus - if(b == default) focus = " ID=fcs" - html += " " + if(select || (flags & SD_ALERT_SELECT_MULTI)) // select style choices + html += {"
\ + +
" + else if(flags & SD_ALERT_LINKS) // text link style + for(var/b in buttons) + var/list/L = list() + L["clk"] = b + var/html_string=list2params(L) + var/focus + if(b == default) focus = " ID=fcs" + html += "[html_encode(b)]\ +
" + else // button style choices + for(var/b in buttons) + var/list/L = list() + L["clk"] = b + var/html_string=list2params(L) + var/focus + if(b == default) focus = " ID=fcs" + html += " " - html += "
" + html += "
" - target << browse(html,"window=\ref[src];size=[size];can_close=0") + target << browse(html,"window=\ref[src];size=[size];can_close=0") - proc/Response() - var/validated - while(!validated) - while(target && !response) // wait for a response - sleep(2) +/sd_alert/proc/Response() + var/validated + while(!validated) + while(target && !response) // wait for a response + sleep(2) - if(response && validation) - if(istype(response, /list)) - var/list/L = response - validation - if(L.len) response = null - else validated = 1 - else if(response in validation) validated = 1 - else response=null - else validated = 1 - spawn(2) qdel(src) - return response + if(response && validation) + if(istype(response, /list)) + var/list/L = response - validation + if(L.len) response = null + else validated = 1 + else if(response in validation) validated = 1 + else response=null + else validated = 1 + spawn(2) qdel(src) + return response diff --git a/code/game/base_turf.dm b/code/game/base_turf.dm index 854be7f5e12..433f5ac2295 100644 --- a/code/game/base_turf.dm +++ b/code/game/base_turf.dm @@ -1,10 +1,10 @@ -proc/get_base_turf(var/z) +/proc/get_base_turf(var/z) if(!current_map.base_turf_by_z["[z]"]) current_map.base_turf_by_z["[z]"] = /turf/space return current_map.base_turf_by_z["[z]"] //An area can override the z-level base turf, so our solar array areas etc. can be space-based. -proc/get_base_turf_by_area(var/turf/T) +/proc/get_base_turf_by_area(var/turf/T) if (!istype(T)) T = get_turf(T) if (!T) diff --git a/code/game/dna/genes/powers.dm b/code/game/dna/genes/powers.dm index e590aa9602a..0d13bf8c491 100644 --- a/code/game/dna/genes/powers.dm +++ b/code/game/dna/genes/powers.dm @@ -7,60 +7,60 @@ activation_messages=list("You feel no need to breathe.") mutation=mNobreath - New() - block=NOBREATHBLOCK +/datum/dna/gene/basic/nobreath/New() + block = NOBREATHBLOCK /datum/dna/gene/basic/remoteview name="Remote Viewing" activation_messages=list("Your mind expands.") mutation=mRemote - New() - block=REMOTEVIEWBLOCK +/datum/dna/gene/basic/nobreath/New() + block = REMOTEVIEWBLOCK - activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remoteobserve +/datum/dna/gene/basic/nobreath/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.verbs += /mob/living/carbon/human/proc/remoteobserve /datum/dna/gene/basic/regenerate name="Regenerate" activation_messages=list("You feel better.") mutation=mRegen - New() - block=REGENERATEBLOCK +/datum/dna/gene/basic/regenerate/New() + block = REGENERATEBLOCK /datum/dna/gene/basic/increaserun name="Super Speed" activation_messages=list("Your leg muscles pulsate.") mutation=mRun - New() - block=INCREASERUNBLOCK +/datum/dna/gene/basic/increaserun/New() + block = INCREASERUNBLOCK /datum/dna/gene/basic/remotetalk name="Telepathy" activation_messages=list("You expand your mind outwards.") mutation=mRemotetalk - New() - block=REMOTETALKBLOCK +/datum/dna/gene/basic/remotetalk/New() + block = REMOTETALKBLOCK - activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.verbs += /mob/living/carbon/human/proc/remotesay +/datum/dna/gene/basic/remotetalk/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.verbs += /mob/living/carbon/human/proc/remotesay /datum/dna/gene/basic/morph name="Morph" activation_messages=list("Your skin feels strange.") mutation=mMorph - New() +/datum/dna/gene/basic/morph/New() block=MORPHBLOCK - activate(var/mob/M) - ..(M) - M.verbs += /mob/living/carbon/human/proc/morph +/datum/dna/gene/basic/morph/activate(var/mob/M) + ..(M) + M.verbs += /mob/living/carbon/human/proc/morph /* Not used on bay /datum/dna/gene/basic/heat_resist @@ -68,21 +68,21 @@ activation_messages=list("Your skin is icy to the touch.") mutation=mHeatres - New() - block=COLDBLOCK +/datum/dna/gene/basic/heat_resist/New() + block=COLDBLOCK - can_activate(var/mob/M,var/flags) - if(flags & MUTCHK_FORCED) - return !(/datum/dna/gene/basic/cold_resist in M.active_genes) - // Probability check - var/_prob = 15 - if(COLD_RESISTANCE in M.mutations) - _prob=5 - if(probinj(_prob,(flags&MUTCHK_FORCED))) - return 1 +/datum/dna/gene/basic/heat_resist/can_activate(var/mob/M,var/flags) + if(flags & MUTCHK_FORCED) + return !(/datum/dna/gene/basic/cold_resist in M.active_genes) + // Probability check + var/_prob = 15 + if(COLD_RESISTANCE in M.mutations) + _prob=5 + if(probinj(_prob,(flags&MUTCHK_FORCED))) + return 1 - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "cold[fat]_s" +/datum/dna/gene/basic/heat_resist/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "cold[fat]_s" */ /datum/dna/gene/basic/cold_resist @@ -90,88 +90,88 @@ activation_messages=list("Your body is filled with warmth.") mutation=COLD_RESISTANCE - New() - block=FIREBLOCK +/datum/dna/gene/basic/cold_resist/New() + block = FIREBLOCK - can_activate(var/mob/M,var/flags) - if(flags & MUTCHK_FORCED) - return 1 - // return !(/datum/dna/gene/basic/heat_resist in M.active_genes) - // Probability check - var/_prob=30 - //if(mHeatres in M.mutations) - // _prob=5 - if(probinj(_prob,(flags&MUTCHK_FORCED))) - return 1 +/datum/dna/gene/basic/cold_resist/can_activate(var/mob/M,var/flags) + if(flags & MUTCHK_FORCED) + return 1 + // return !(/datum/dna/gene/basic/heat_resist in M.active_genes) + // Probability check + var/_prob=30 + //if(mHeatres in M.mutations) + // _prob=5 + if(probinj(_prob,(flags&MUTCHK_FORCED))) + return 1 - OnDrawUnderlays(var/mob/M,var/g,var/fat) - return "fire[fat]_s" +/datum/dna/gene/basic/cold_resist/OnDrawUnderlays(var/mob/M,var/g,var/fat) + return "fire[fat]_s" /datum/dna/gene/basic/noprints name="No Prints" activation_messages=list("Your fingers feel numb.") mutation=mFingerprints - New() - block=NOPRINTSBLOCK +/datum/dna/gene/basic/noprints/New() + block = NOPRINTSBLOCK /datum/dna/gene/basic/noshock name="Shock Immunity" activation_messages=list("Your skin feels strange.") mutation=mShock - New() - block=SHOCKIMMUNITYBLOCK +/datum/dna/gene/basic/noshock/New() + block = SHOCKIMMUNITYBLOCK /datum/dna/gene/basic/midget name="Midget" activation_messages=list("Your skin feels rubbery.") mutation=mSmallsize - New() - block=SMALLSIZEBLOCK +/datum/dna/gene/basic/midget/New() + block=SMALLSIZEBLOCK - can_activate(var/mob/M,var/flags) - // Can't be big and small. - if(HAS_FLAG(M.mutations, HULK)) - return 0 - return ..(M,flags) +/datum/dna/gene/basic/midget/can_activate(var/mob/M,var/flags) + // Can't be big and small. + if(HAS_FLAG(M.mutations, HULK)) + return 0 + return ..(M,flags) - activate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.pass_flags |= 1 +/datum/dna/gene/basic/midget/activate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.pass_flags |= 1 - deactivate(var/mob/M, var/connected, var/flags) - ..(M,connected,flags) - M.pass_flags &= ~1 //This may cause issues down the track, but offhand I can't think of any other way for humans to get passtable short of varediting so it should be fine. ~Z +/datum/dna/gene/basic/midget/deactivate(var/mob/M, var/connected, var/flags) + ..(M,connected,flags) + M.pass_flags &= ~1 //This may cause issues down the track, but offhand I can't think of any other way for humans to get passtable short of varediting so it should be fine. ~Z /datum/dna/gene/basic/hulk name="Hulk" activation_messages=list("Your muscles hurt.") mutation=HULK - New() - block=HULKBLOCK +/datum/dna/gene/basic/hulk/New() + block=HULKBLOCK - can_activate(var/mob/M,var/flags) - // Can't be big and small. - if(HAS_FLAG(M.mutations, mSmallsize)) - return 0 - return ..(M,flags) +/datum/dna/gene/basic/hulk/can_activate(var/mob/M,var/flags) + // Can't be big and small. + if(HAS_FLAG(M.mutations, mSmallsize)) + return 0 + return ..(M,flags) - OnMobLife(var/mob/living/carbon/human/M) - if(!istype(M)) return - if(M.health <= 25) - M.mutations &= ~HULK - M.update_mutations() //update our mutation overlays - to_chat(M, "You suddenly feel very weak.") - M.Weaken(3) - M.emote("collapse") +/datum/dna/gene/basic/hulk/OnMobLife(var/mob/living/carbon/human/M) + if(!istype(M)) return + if(M.health <= 25) + M.mutations &= ~HULK + M.update_mutations() //update our mutation overlays + to_chat(M, "You suddenly feel very weak.") + M.Weaken(3) + M.emote("collapse") /datum/dna/gene/basic/xray name="X-Ray Vision" activation_messages=list("The walls suddenly disappear.") mutation=XRAY - New() - block=XRAYBLOCK +/datum/dna/gene/basic/xray/New() + block = XRAYBLOCK diff --git a/code/game/gamemodes/events/clang.dm b/code/game/gamemodes/events/clang.dm index 636e59bd542..f43459fae61 100644 --- a/code/game/gamemodes/events/clang.dm +++ b/code/game/gamemodes/events/clang.dm @@ -16,28 +16,28 @@ In my current plan for it, 'solid' will be defined as anything with density == 1 density = 1 anchored = 1 - Collide(atom/clong) - . = ..() - if (istype(clong, /turf) && !istype(clong, /turf/unsimulated)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) +/obj/effect/immovablerod/Collide(atom/clong) + . = ..() + if (istype(clong, /turf) && !istype(clong, /turf/unsimulated)) + if(clong.density) + clong.ex_act(2) + for (var/mob/O in hearers(src, null)) + O.show_message("CLANG", 2) - else if (istype(clong, /obj)) - if(clong.density) - clong.ex_act(2) - for (var/mob/O in hearers(src, null)) - O.show_message("CLANG", 2) + else if (istype(clong, /obj)) + if(clong.density) + clong.ex_act(2) + for (var/mob/O in hearers(src, null)) + O.show_message("CLANG", 2) - else if (istype(clong, /mob)) - if(clong.density || prob(10)) - clong.ex_act(2) - else - qdel(src) + else if (istype(clong, /mob)) + if(clong.density || prob(10)) + clong.ex_act(2) + else + qdel(src) - if(clong && prob(25)) - src.forceMove(clong.loc) + if(clong && prob(25)) + src.forceMove(clong.loc) /proc/immovablerod() var/startx = 0 diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index cc8c2d4c0ab..46679a005e2 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -490,7 +490,7 @@ var/global/list/additional_antag_types = list() ////////////////////////// //Reports player logouts// ////////////////////////// -proc/get_logout_report() +/proc/get_logout_report() var/msg = "Logout report\n\n" for(var/mob/living/L in mob_list) @@ -532,7 +532,7 @@ proc/get_logout_report() msg += "" // close the span from right at the top return msg -proc/display_logout_report() +/proc/display_logout_report() var/logout_report = get_logout_report() for(var/s in staff) var/client/C = s @@ -547,7 +547,7 @@ proc/display_logout_report() return to_chat(src,get_logout_report()) -proc/get_poor() +/proc/get_poor() var/list/characters = list() for(var/mob/living/carbon/human/character in player_list) diff --git a/code/game/gamemodes/objective.dm b/code/game/gamemodes/objective.dm index 71b7a26f82d..bd464f13f10 100644 --- a/code/game/gamemodes/objective.dm +++ b/code/game/gamemodes/objective.dm @@ -2,7 +2,7 @@ var/global/list/all_objectives = list() var/global/list/process_objectives = list() -datum/objective +/datum/objective var/datum/mind/owner = null //Who owns the objective. var/explanation_text = "Nothing" //What that person is supposed to do. var/datum/mind/target = null //If they are focused on a particular person. @@ -10,408 +10,411 @@ datum/objective var/completed = 0 //currently only used for custom objectives. var/process = 0 //Does the objective need regular checking? - New(var/text) - all_objectives |= src - if(text) - explanation_text = text - ..() +/datum/objective/New(var/text) + all_objectives |= src + if(text) + explanation_text = text + ..() - if (process) - process_objectives |= src + if (process) + process_objectives |= src - Destroy() - all_objectives -= src +/datum/objective/Destroy() + all_objectives -= src - if (process) - process_objectives -= src - return ..() + if (process) + process_objectives -= src + return ..() - proc/check_completion() - return completed +/datum/objective/proc/check_completion() + return completed - proc/find_target() - var/list/possible_targets = list() - for(var/datum/mind/possible_target in SSticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) - possible_targets += possible_target - if(possible_targets.len > 0) - target = pick(possible_targets) +/datum/objective/proc/find_target() + var/list/possible_targets = list() + for(var/datum/mind/possible_target in SSticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2)) + possible_targets += possible_target + if(possible_targets.len > 0) + target = pick(possible_targets) - proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. - for(var/datum/mind/possible_target in SSticker.minds) - if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) - target = possible_target - break +/datum/objective/proc/find_target_by_role(role, role_type=0)//Option sets either to check assigned role or special role. Default to assigned. + for(var/datum/mind/possible_target in SSticker.minds) + if((possible_target != owner) && ishuman(possible_target.current) && ((role_type ? possible_target.special_role : possible_target.assigned_role) == role) ) + target = possible_target + break - process() - return +/datum/objective/process() + return -datum/objective/assassinate - find_target() - ..() - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target +/datum/objective/assassinate + +/datum/objective/assassinate/find_target() + ..() + if(target && target.current) + explanation_text = "Assassinate [target.current.real_name], the [target.assigned_role]." + else + explanation_text = "Free Objective" + return target - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target +/datum/objective/assassinate/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Assassinate [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target - check_completion() - if(target && target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite - return 1 - return 0 - return 1 +/datum/objective/assassinate/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current) || target.current.z > 6 || !target.current.ckey) //Borgs/brains/AIs count as dead for traitor objectives. --NeoFite + return 1 + return 0 + return 1 -datum/objective/anti_revolution/execute - find_target() - ..() - if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute [target.current.get_pronoun("him")]." - else - explanation_text = "Free Objective" - return target +/datum/objective/anti_revolution/execute + +/datum/objective/anti_revolution/execute/find_target() + ..() + if(target && target.current) + explanation_text = "[target.current.real_name], the [target.assigned_role] has extracted confidential information above their clearance. Execute [target.current.get_pronoun("him")]." + else + explanation_text = "Free Objective" + return target - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute [target.current.get_pronoun("him")]." - else - explanation_text = "Free Objective" - return target +/datum/objective/anti_revolution/execute/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has extracted confidential information above their clearance. Execute [target.current.get_pronoun("him")]." + else + explanation_text = "Free Objective" + return target - check_completion() - if(target && target.current) - if(target.current.stat == DEAD || !ishuman(target.current)) - return 1 - return 0 - return 1 +/datum/objective/anti_revolution/execute/check_completion() + if(target && target.current) + if(target.current.stat == DEAD || !ishuman(target.current)) + return 1 + return 0 + return 1 -datum/objective/anti_revolution/brig +/datum/objective/anti_revolution/brig var/already_completed = 0 - find_target() - ..() - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [target.assigned_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target +/datum/objective/anti_revolution/brig/find_target() + ..() + if(target && target.current) + explanation_text = "Brig [target.current.real_name], the [target.assigned_role] for 20 minutes to set an example." + else + explanation_text = "Free Objective" + return target - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Brig [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] for 20 minutes to set an example." - else - explanation_text = "Free Objective" - return target +/datum/objective/anti_revolution/brig/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Brig [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] for 20 minutes to set an example." + else + explanation_text = "Free Objective" + return target - check_completion() - if(already_completed) - return 1 - - if(target && target.current) - if(target.current.stat == DEAD) - return 0 - if(target.is_brigged(10 * 60 * 10)) - already_completed = 1 - return 1 - return 0 - return 0 - -datum/objective/anti_revolution/demote - find_target() - ..() - if(target && target.current) - explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [current_map.company_name]'s goals. Demote [target.current.get_pronoun("him")] to assistant." - else - explanation_text = "Free Objective" - return target - - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [current_map.company_name]'s goals. Demote [target.current.get_pronoun("him")] to assistant." - else - explanation_text = "Free Objective" - return target - - check_completion() - if(target && target.current && ishuman(target)) - var/mob/living/carbon/human/H = target - var/obj/item/card/id/I = H.GetIdCard() - - if(!istype(I)) return 1 - - if(I.assignment == "Assistant") - return 1 - else - return 0 +/datum/objective/anti_revolution/brig/check_completion() + if(already_completed) return 1 -datum/objective/debrain//I want braaaainssss - find_target() - ..() - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name]." - else - explanation_text = "Free Objective" - return target - - - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - - check_completion() - if(!target)//If it's a free objective. - return 1 - if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. + if(target && target.current) + if(target.current.stat == DEAD) return 0 - if( !target.current || !isbrain(target.current) ) - return 0 - var/atom/A = target.current - while(A.loc) //check to see if the brainmob is on our person - A = A.loc - if(A == owner.current) - return 1 - return 0 - - -datum/objective/protect//The opposite of killing a dude. - find_target() - ..() - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." - else - explanation_text = "Free Objective" - return target - - - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." - else - explanation_text = "Free Objective" - return target - - check_completion() - if(!target) //If it's a free objective. - return 1 - if(target.current) - if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) - return 0 + if(target.is_brigged(10 * 60 * 10)) + already_completed = 1 return 1 return 0 + return 0 + +/datum/objective/anti_revolution/demote + +/datum/objective/anti_revolution/demote/find_target() + ..() + if(target && target.current) + explanation_text = "[target.current.real_name], the [target.assigned_role] has been classified as harmful to [current_map.company_name]'s goals. Demote [target.current.get_pronoun("him")] to assistant." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/demote/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "[target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] has been classified as harmful to [current_map.company_name]'s goals. Demote [target.current.get_pronoun("him")] to assistant." + else + explanation_text = "Free Objective" + return target + +/datum/objective/anti_revolution/demote/check_completion() + if(target && target.current && ishuman(target)) + var/mob/living/carbon/human/H = target + var/obj/item/card/id/I = H.GetIdCard() + + if(!istype(I)) return 1 + + if(I.assignment == "Assistant") + return 1 + else + return 0 + return 1 + +/datum/objective/debrain//I want braaaainssss + +/datum/objective/debrain/find_target() + ..() + if(target && target.current) + explanation_text = "Steal the brain of [target.current.real_name]." + else + explanation_text = "Free Objective" + return target -datum/objective/hijack +/datum/objective/debrain/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Steal the brain of [target.current.real_name] the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/debrain/check_completion() + if(!target)//If it's a free objective. + return 1 + if( !owner.current || owner.current.stat==DEAD )//If you're otherwise dead. + return 0 + if( !target.current || !isbrain(target.current) ) + return 0 + var/atom/A = target.current + while(A.loc) //check to see if the brainmob is on our person + A = A.loc + if(A == owner.current) + return 1 + return 0 + + +/datum/objective/protect//The opposite of killing a dude. + +/datum/objective/protect/find_target() + ..() + if(target && target.current) + explanation_text = "Protect [target.current.real_name], the [target.assigned_role]." + else + explanation_text = "Free Objective" + return target + + +/datum/objective/protect/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Protect [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]." + else + explanation_text = "Free Objective" + return target + +/datum/objective/protect/check_completion() + if(!target) //If it's a free objective. + return 1 + if(target.current) + if(target.current.stat == DEAD || issilicon(target.current) || isbrain(target.current)) + return 0 + return 1 + return 0 + + +/datum/objective/hijack explanation_text = "Hijack the emergency shuttle by escaping alone." - check_completion() - if(!owner.current || owner.current.stat) - return 0 - if(!evacuation_controller.round_over()) - return 0 - if(issilicon(owner.current)) - return 0 - var/area/shuttle = locate(/area/shuttle/escape) - var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai) - for(var/mob/living/player in player_list) - if(player.type in protected_mobs) continue - if (player.mind && (player.mind != owner)) - if(player.stat != DEAD) //they're not dead! - if(get_turf(player) in shuttle) - return 0 - return 1 +/datum/objective/hijack/check_completion() + if(!owner.current || owner.current.stat) + return 0 + if(!evacuation_controller.round_over()) + return 0 + if(issilicon(owner.current)) + return 0 + var/area/shuttle = locate(/area/shuttle/escape) + var/list/protected_mobs = list(/mob/living/silicon/ai, /mob/living/silicon/pai) + for(var/mob/living/player in player_list) + if(player.type in protected_mobs) continue + if (player.mind && (player.mind != owner)) + if(player.stat != DEAD) //they're not dead! + if(get_turf(player) in shuttle) + return 0 + return 1 -datum/objective/block +/datum/objective/block explanation_text = "Do not allow any organic lifeforms to escape on the shuttle alive." - check_completion() - if(!istype(owner.current, /mob/living/silicon)) - return 0 - if(!evacuation_controller.round_over()) - return 0 - if(!owner.current) - return 0 - var/area/shuttle = locate(/area/shuttle/escape) - var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot) - for(var/mob/living/player in player_list) - if(player.type in protected_mobs) continue - if (player.mind) - if (player.stat != 2) - if (get_turf(player) in shuttle) - return 0 - return 1 +/datum/objective/block/check_completion() + if(!istype(owner.current, /mob/living/silicon)) + return 0 + if(!evacuation_controller.round_over()) + return 0 + if(!owner.current) + return 0 + var/area/shuttle = locate(/area/shuttle/escape) + var/protected_mobs[] = list(/mob/living/silicon/ai, /mob/living/silicon/pai, /mob/living/silicon/robot) + for(var/mob/living/player in player_list) + if(player.type in protected_mobs) continue + if (player.mind) + if (player.stat != 2) + if (get_turf(player) in shuttle) + return 0 + return 1 -datum/objective/silence +/datum/objective/silence explanation_text = "Do not allow anyone to escape the station. Only allow the shuttle to be called when everyone is dead and your story is the only one left." - check_completion() - if(!evacuation_controller.round_over()) - return 0 +/datum/objective/silence/check_completion() + if(!evacuation_controller.round_over()) + return 0 - for(var/mob/living/player in player_list) - if(player == owner.current) - continue - if(player.mind) - if(player.stat != DEAD) - var/turf/T = get_turf(player) - if(!T) - continue - if(istype(T.loc.type, /area/shuttle/escape) || istype(T.loc.type, /area/shuttle/escape_pod)) - return 0 - return 1 + for(var/mob/living/player in player_list) + if(player == owner.current) + continue + if(player.mind) + if(player.stat != DEAD) + var/turf/T = get_turf(player) + if(!T) + continue + if(istype(T.loc.type, /area/shuttle/escape) || istype(T.loc.type, /area/shuttle/escape_pod)) + return 0 + return 1 -datum/objective/escape +/datum/objective/escape explanation_text = "Escape on the shuttle or an escape pod alive and free." - check_completion() - if(issilicon(owner.current)) - return 0 - if(isbrain(owner.current)) - return 0 - if(!evacuation_controller.round_over()) - return 0 - if(!owner.current || owner.current.stat ==2) - return 0 - var/turf/location = get_turf(owner.current.loc) - if(!location) - return 0 +/datum/objective/escape/check_completion() + if(issilicon(owner.current)) + return 0 + if(isbrain(owner.current)) + return 0 + if(!evacuation_controller.round_over()) + return 0 + if(!owner.current || owner.current.stat ==2) + return 0 + var/turf/location = get_turf(owner.current.loc) + if(!location) + return 0 - var/area/check_area = location.loc - if(istype(check_area, /area/shuttle/escape)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod)) - return 1 - else - return 0 + var/area/check_area = location.loc + if(istype(check_area, /area/shuttle/escape)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod)) + return 1 + else + return 0 -datum/objective/survive +/datum/objective/survive explanation_text = "Stay alive until the end." - check_completion() - if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) - return 0 //Brains no longer win survive objectives. --NEO - if(issilicon(owner.current) && owner.current != owner.original) - return 0 - return 1 +/datum/objective/survive/check_completion() + if(!owner.current || owner.current.stat == DEAD || isbrain(owner.current)) + return 0 //Brains no longer win survive objectives. --NEO + if(issilicon(owner.current) && owner.current != owner.original) + return 0 + return 1 // Similar to the anti-rev objective, but for traitors -datum/objective/brig +/datum/objective/brig var/already_completed = 0 - find_target() - ..() - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [target.assigned_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target +/datum/objective/brig/find_target() + ..() + if(target && target.current) + explanation_text = "Have [target.current.real_name], the [target.assigned_role] brigged for 10 minutes." + else + explanation_text = "Free Objective" + return target - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Have [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] brigged for 10 minutes." - else - explanation_text = "Free Objective" - return target +/datum/objective/brig/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Have [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role] brigged for 10 minutes." + else + explanation_text = "Free Objective" + return target - check_completion() - if(already_completed) - return 1 +/datum/objective/brig/check_completion() + if(already_completed) + return 1 - if(target && target.current) - if(target.current.stat == DEAD) - return 0 - // Make the actual required time a bit shorter than the official time - if(target.is_brigged(10 * 60 * 5)) - already_completed = 1 - return 1 + if(target && target.current) + if(target.current.stat == DEAD) return 0 + // Make the actual required time a bit shorter than the official time + if(target.is_brigged(10 * 60 * 5)) + already_completed = 1 + return 1 return 0 + return 0 // Harm a crew member, making an example of them -datum/objective/harm +/datum/objective/harm var/already_completed = 0 - find_target() - ..() - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [target.assigned_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target +/datum/objective/harm/find_target() + ..() + if(target && target.current) + explanation_text = "Make an example of [target.current.real_name], the [target.assigned_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." + else + explanation_text = "Free Objective" + return target - find_target_by_role(role, role_type=0) - ..(role, role_type) - if(target && target.current) - explanation_text = "Make an example of [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." - else - explanation_text = "Free Objective" - return target +/datum/objective/harm/find_target_by_role(role, role_type=0) + ..(role, role_type) + if(target && target.current) + explanation_text = "Make an example of [target.current.real_name], the [!role_type ? target.assigned_role : target.special_role]. Break one of their bones, detach one of their limbs or disfigure their face. Make sure they're alive when you do it." + else + explanation_text = "Free Objective" + return target - check_completion() - if(already_completed) - return 1 +/datum/objective/harm/check_completion() + if(already_completed) + return 1 - if(target && target.current && istype(target.current, /mob/living/carbon/human)) - if(target.current.stat == DEAD) - return 0 + if(target && target.current && istype(target.current, /mob/living/carbon/human)) + if(target.current.stat == DEAD) + return 0 - var/mob/living/carbon/human/H = target.current - for(var/obj/item/organ/external/E in H.organs) - if(E.status & ORGAN_BROKEN) - return 1 - for(var/limb_tag in H.species.has_limbs) //todo check prefs for robotic limbs and amputations. - var/list/organ_data = H.species.has_limbs[limb_tag] - var/limb_type = organ_data["path"] - var/found - for(var/obj/item/organ/external/E in H.organs) - if(limb_type == E.type) - found = 1 - break - if(!found) - return 1 - - var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD) - if(head.disfigured) + var/mob/living/carbon/human/H = target.current + for(var/obj/item/organ/external/E in H.organs) + if(E.status & ORGAN_BROKEN) return 1 - return 0 + for(var/limb_tag in H.species.has_limbs) //todo check prefs for robotic limbs and amputations. + var/list/organ_data = H.species.has_limbs[limb_tag] + var/limb_type = organ_data["path"] + var/found + for(var/obj/item/organ/external/E in H.organs) + if(limb_type == E.type) + found = 1 + break + if(!found) + return 1 + + var/obj/item/organ/external/head/head = H.get_organ(BP_HEAD) + if(head.disfigured) + return 1 + return 0 -datum/objective/nuclear +/datum/objective/nuclear explanation_text = "Destroy the station with a nuclear device." - - -datum/objective/steal +/datum/objective/steal var/obj/item/steal_target var/target_name @@ -450,332 +453,335 @@ datum/objective/steal ) - proc/set_target(item_name) - target_name = item_name - steal_target = possible_items[target_name] - if (!steal_target ) - steal_target = possible_items_special[target_name] +/datum/objective/steal/proc/set_target(item_name) + target_name = item_name + steal_target = possible_items[target_name] + if (!steal_target ) + steal_target = possible_items_special[target_name] + explanation_text = "Steal [target_name]." + return steal_target + + +/datum/objective/steal/find_target() + return set_target(pick(possible_items)) + + +/datum/objective/steal/proc/select_target() + var/list/possible_items_all = possible_items+possible_items_special+"custom" + var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all + if (!new_target) return + if (new_target == "custom") + var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) + if (!custom_target) return + var/tmp_obj = new custom_target + var/custom_name = tmp_obj:name + qdel(tmp_obj) + custom_name = sanitize(input("Enter target name:", "Objective target", custom_name) as text|null) + if (!custom_name) return + target_name = custom_name + steal_target = custom_target explanation_text = "Steal [target_name]." - return steal_target + else + set_target(new_target) + return steal_target +/datum/objective/steal/check_completion() + if(!steal_target || !owner.current) return 0 + if(!isliving(owner.current)) return 0 + var/list/all_items = owner.current.get_contents() + switch (target_name) + if("28 moles of phoron (full tank)","10 diamonds","50 gold bars","25 refined uranium bars") + var/target_amount = text2num(target_name)//Non-numbers are ignored. + var/found_amount = 0.0//Always starts as zero. - find_target() - return set_target(pick(possible_items)) + for(var/obj/item/I in all_items) //Check for phoron tanks + if(istype(I, steal_target)) + found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas[GAS_PHORON]) : (I:amount)) + return found_amount>=target_amount + if("50 coins (in bag)") + var/obj/item/storage/bag/money/B = locate() in all_items - proc/select_target() - var/list/possible_items_all = possible_items+possible_items_special+"custom" - var/new_target = input("Select target:", "Objective target", steal_target) as null|anything in possible_items_all - if (!new_target) return - if (new_target == "custom") - var/obj/item/custom_target = input("Select type:","Type") as null|anything in typesof(/obj/item) - if (!custom_target) return - var/tmp_obj = new custom_target - var/custom_name = tmp_obj:name - qdel(tmp_obj) - custom_name = sanitize(input("Enter target name:", "Objective target", custom_name) as text|null) - if (!custom_name) return - target_name = custom_name - steal_target = custom_target - explanation_text = "Steal [target_name]." - else - set_target(new_target) - return steal_target + if(B) + var/target = text2num(target_name) + var/found_amount = 0.0 + for(var/obj/item/coin/C in B) + found_amount++ + return found_amount>=target - check_completion() - if(!steal_target || !owner.current) return 0 - if(!isliving(owner.current)) return 0 - var/list/all_items = owner.current.get_contents() - switch (target_name) - if("28 moles of phoron (full tank)","10 diamonds","50 gold bars","25 refined uranium bars") - var/target_amount = text2num(target_name)//Non-numbers are ignored. - var/found_amount = 0.0//Always starts as zero. + if("a functional AI") - for(var/obj/item/I in all_items) //Check for phoron tanks - if(istype(I, steal_target)) - found_amount += (target_name=="28 moles of phoron (full tank)" ? (I:air_contents:gas[GAS_PHORON]) : (I:amount)) - return found_amount>=target_amount - - if("50 coins (in bag)") - var/obj/item/storage/bag/money/B = locate() in all_items - - if(B) - var/target = text2num(target_name) - var/found_amount = 0.0 - for(var/obj/item/coin/C in B) - found_amount++ - return found_amount>=target - - if("a functional AI") - - for(var/obj/item/aicard/C in all_items) //Check for ai card - for(var/mob/living/silicon/ai/M in C) - if(istype(M, /mob/living/silicon/ai) && M.stat != 2) //See if any AI's are alive inside that card. - return 1 - - for(var/mob/living/silicon/ai/ai in silicon_mob_list) - var/turf/T = get_turf(ai) - if(istype(T)) - var/area/check_area = get_area(ai) - if(istype(check_area, /area/shuttle/escape)) - return 1 - if(istype(check_area, /area/shuttle/escape_pod)) - return 1 - else - - for(var/obj/I in all_items) //Check for items - if(istype(I, steal_target)) + for(var/obj/item/aicard/C in all_items) //Check for ai card + for(var/mob/living/silicon/ai/M in C) + if(istype(M, /mob/living/silicon/ai) && M.stat != 2) //See if any AI's are alive inside that card. return 1 + + for(var/mob/living/silicon/ai/ai in silicon_mob_list) + var/turf/T = get_turf(ai) + if(istype(T)) + var/area/check_area = get_area(ai) + if(istype(check_area, /area/shuttle/escape)) + return 1 + if(istype(check_area, /area/shuttle/escape_pod)) + return 1 + else + + for(var/obj/I in all_items) //Check for items + if(istype(I, steal_target)) + return 1 + return 0 + +/datum/objective/download + +/datum/objective/download/proc/gen_amount_goal() + target_amount = rand(10,20) + explanation_text = "Download [target_amount] research levels." + return target_amount + + +/datum/objective/download/check_completion() + if(!ishuman(owner.current)) + return 0 + if(!owner.current || owner.current.stat == 2) return 0 -datum/objective/download - proc/gen_amount_goal() - target_amount = rand(10,20) - explanation_text = "Download [target_amount] research levels." - return target_amount + var/current_amount + var/obj/item/rig/S + if(istype(owner.current,/mob/living/carbon/human)) + var/mob/living/carbon/human/H = owner.current + S = H.back + + if(!istype(S) || !S.installed_modules || !S.installed_modules.len) + return 0 + + var/obj/item/rig_module/datajack/stolen_data = locate() in S.installed_modules + if(!istype(stolen_data)) + return 0 + + for(var/datum/tech/current_data in stolen_data.stored_research) + if(current_data.level > 1) + current_amount += (current_data.level-1) + + return (current_amount 1) - current_amount += (current_data.level-1) - - return (current_amount= target_amount)) - return 1 - else - return 0 + explanation_text = "Absorb [target_amount] compatible genomes." + return target_amount + +/datum/objective/absorb/check_completion() + var/datum/changeling/changeling = owner.antag_datums[MODE_CHANGELING] + if(owner && changeling?.absorbed_dna && (changeling.absorbedcount >= target_amount)) + return 1 + else + return 0 // Heist objectives. -datum/objective/heist - proc/choose_target() - return +/datum/objective/heist -datum/objective/heist/kidnap - choose_target() - var/list/roles = list("Chief Engineer","Research Director","Machinist","Pharmacist","Engineer") - var/list/possible_targets = list() - var/list/priority_targets = list() +/datum/objective/heist/proc/choose_target() + return - for(var/datum/mind/possible_target in SSticker.minds) - if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role)) - possible_targets += possible_target - for(var/role in roles) - if(possible_target.assigned_role == role) - priority_targets += possible_target - continue +/datum/objective/heist/kidnap - if(priority_targets.len > 0) - target = pick(priority_targets) - else if(possible_targets.len > 0) - target = pick(possible_targets) +/datum/objective/heist/kidnap/choose_target() + var/list/roles = list("Chief Engineer","Research Director","Machinist","Pharmacist","Engineer") + var/list/possible_targets = list() + var/list/priority_targets = list() - if(target && target.current) - explanation_text = "We can get a good price for [target.current.real_name], the [target.assigned_role]. Take them alive." - else - explanation_text = "Free Objective" - return target + for(var/datum/mind/possible_target in SSticker.minds) + if(possible_target != owner && ishuman(possible_target.current) && (possible_target.current.stat != 2) && (!possible_target.special_role)) + possible_targets += possible_target + for(var/role in roles) + if(possible_target.assigned_role == role) + priority_targets += possible_target + continue - check_completion() - if(target && target.current) - if (target.current.stat == 2) - return 0 // They're dead. Fail. - //if (!target.current.restrained()) - // return 0 // They're loose. Close but no cigar. + if(priority_targets.len > 0) + target = pick(priority_targets) + else if(possible_targets.len > 0) + target = pick(possible_targets) - var/area/shuttle/skipjack/A = locate() - for(var/mob/living/carbon/human/M in A) - if(target.current == M) - return 1 //They're restrained on the shuttle. Success. - else - return 0 + if(target && target.current) + explanation_text = "We can get a good price for [target.current.real_name], the [target.assigned_role]. Take them alive." + else + explanation_text = "Free Objective" + return target -datum/objective/heist/loot - - choose_target() - var/loot = "an object" - switch(rand(1,8)) - if(1) - target = /obj/structure/particle_accelerator - target_amount = 6 - loot = "a complete particle accelerator" - if(2) - target = /obj/machinery/the_singularitygen - target_amount = 1 - loot = "a gravitational generator" - if(3) - target = /obj/machinery/power/emitter - target_amount = 4 - loot = "four emitters" - if(4) - target = /obj/machinery/nuclearbomb - target_amount = 1 - loot = "a nuclear bomb" - if(5) - target = /obj/item/gun - target_amount = 6 - loot = "six guns" - if(6) - target = /obj/item/gun/energy - target_amount = 4 - loot = "four energy guns" - if(7) - target = /obj/item/gun/energy/laser - target_amount = 2 - loot = "two laser guns" - if(8) - target = /obj/item/gun/energy/rifle/ionrifle - target_amount = 1 - loot = "an ion gun" - - explanation_text = "It's a buyer's market out here. Steal [loot] for resale." - - check_completion() - - var/total_amount = 0 - - for(var/obj/O in locate(/area/shuttle/skipjack)) - if(istype(O,target)) total_amount++ - for(var/obj/I in O.contents) - if(istype(I,target)) total_amount++ - if(total_amount >= target_amount) return 1 - - for(var/datum/mind/raider in raiders.current_antagonists) - if(raider.current) - for(var/obj/O in raider.current.get_contents()) - if(istype(O,target)) total_amount++ - if(total_amount >= target_amount) return 1 +/datum/objective/heist/kidnap/check_completion() + if(target && target.current) + if (target.current.stat == 2) + return 0 // They're dead. Fail. + //if (!target.current.restrained()) + // return 0 // They're loose. Close but no cigar. + var/area/shuttle/skipjack/A = locate() + for(var/mob/living/carbon/human/M in A) + if(target.current == M) + return 1 //They're restrained on the shuttle. Success. + else return 0 -datum/objective/heist/salvage +/datum/objective/heist/loot - choose_target() - switch(rand(1,8)) - if(1) - target = DEFAULT_WALL_MATERIAL - target_amount = 300 - if(2) - target = "glass" - target_amount = 200 - if(3) - target = "plasteel" - target_amount = 100 - if(4) - target = MATERIAL_PHORON - target_amount = 100 - if(5) - target = "silver" - target_amount = 50 - if(6) - target = "gold" - target_amount = 20 - if(7) - target = "uranium" - target_amount = 20 - if(8) - target = "diamond" - target_amount = 20 +/datum/objective/heist/loot/choose_target() + var/loot = "an object" + switch(rand(1,8)) + if(1) + target = /obj/structure/particle_accelerator + target_amount = 6 + loot = "a complete particle accelerator" + if(2) + target = /obj/machinery/the_singularitygen + target_amount = 1 + loot = "a gravitational generator" + if(3) + target = /obj/machinery/power/emitter + target_amount = 4 + loot = "four emitters" + if(4) + target = /obj/machinery/nuclearbomb + target_amount = 1 + loot = "a nuclear bomb" + if(5) + target = /obj/item/gun + target_amount = 6 + loot = "six guns" + if(6) + target = /obj/item/gun/energy + target_amount = 4 + loot = "four energy guns" + if(7) + target = /obj/item/gun/energy/laser + target_amount = 2 + loot = "two laser guns" + if(8) + target = /obj/item/gun/energy/rifle/ionrifle + target_amount = 1 + loot = "an ion gun" - explanation_text = "Ransack the station and escape with [target_amount] [target]." + explanation_text = "It's a buyer's market out here. Steal [loot] for resale." - check_completion() +/datum/objective/heist/loot/check_completion() + var/total_amount = 0 - var/total_amount = 0 + for(var/obj/O in locate(/area/shuttle/skipjack)) + if(istype(O,target)) total_amount++ + for(var/obj/I in O.contents) + if(istype(I,target)) total_amount++ + if(total_amount >= target_amount) return 1 - for(var/obj/item/O in locate(/area/shuttle/skipjack)) + for(var/datum/mind/raider in raiders.current_antagonists) + if(raider.current) + for(var/obj/O in raider.current.get_contents()) + if(istype(O,target)) total_amount++ + if(total_amount >= target_amount) return 1 - var/obj/item/stack/material/S - if(istype(O,/obj/item/stack/material)) - if(O.name == target) - S = O + return 0 + +/datum/objective/heist/salvage + +/datum/objective/heist/salvage/choose_target() + switch(rand(1,8)) + if(1) + target = DEFAULT_WALL_MATERIAL + target_amount = 300 + if(2) + target = "glass" + target_amount = 200 + if(3) + target = "plasteel" + target_amount = 100 + if(4) + target = MATERIAL_PHORON + target_amount = 100 + if(5) + target = "silver" + target_amount = 50 + if(6) + target = "gold" + target_amount = 20 + if(7) + target = "uranium" + target_amount = 20 + if(8) + target = "diamond" + target_amount = 20 + + explanation_text = "Ransack the station and escape with [target_amount] [target]." + +/datum/objective/heist/salvage/check_completion() + var/total_amount = 0 + + for(var/obj/item/O in locate(/area/shuttle/skipjack)) + + var/obj/item/stack/material/S + if(istype(O,/obj/item/stack/material)) + if(O.name == target) + S = O + total_amount += S.get_amount() + for(var/obj/I in O.contents) + if(istype(I,/obj/item/stack/material)) + if(I.name == target) + S = I total_amount += S.get_amount() - for(var/obj/I in O.contents) - if(istype(I,/obj/item/stack/material)) - if(I.name == target) - S = I + + for(var/datum/mind/raider in raiders.current_antagonists) + if(raider.current) + for(var/obj/item/O in raider.current.get_contents()) + if(istype(O,/obj/item/stack/material)) + if(O.name == target) + var/obj/item/stack/material/S = O total_amount += S.get_amount() - for(var/datum/mind/raider in raiders.current_antagonists) - if(raider.current) - for(var/obj/item/O in raider.current.get_contents()) - if(istype(O,/obj/item/stack/material)) - if(O.name == target) - var/obj/item/stack/material/S = O - total_amount += S.get_amount() - - if(total_amount >= target_amount) return 1 - return 0 + if(total_amount >= target_amount) return 1 + return 0 /datum/objective/heist/preserve_crew explanation_text = "Do not leave anyone behind, alive or dead." - check_completion() - if(raiders && raiders.is_raider_crew_safe()) return 1 - return 0 +/datum/objective/heist/preserve_crew/check_completion() + if(raiders && raiders.is_raider_crew_safe()) return 1 + return 0 //Borer objective(s). /datum/objective/borer_survive diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index aa192e3d4a5..82bc3eef537 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -258,13 +258,13 @@ var/obj/item/card/id/all_access/ghost_all_access /mob/living/silicon/GetIdCard() return id_card -proc/FindNameFromID(var/mob/M, var/missing_id_name = "Unknown") +/proc/FindNameFromID(var/mob/M, var/missing_id_name = "Unknown") var/obj/item/card/id/C = M.GetIdCard() if(C) return C.registered_name return missing_id_name -proc/get_all_job_icons() //For all existing HUD icons +/proc/get_all_job_icons() //For all existing HUD icons return joblist + list("Prisoner") /obj/proc/GetJobName() //Used in secHUD icon generation diff --git a/code/game/machinery/atmo_control.dm b/code/game/machinery/atmo_control.dm index 83d17e0ee12..82f8dc101cd 100644 --- a/code/game/machinery/atmo_control.dm +++ b/code/game/machinery/atmo_control.dm @@ -78,7 +78,7 @@ . = ..() set_frequency(frequency) -obj/machinery/air_sensor/Destroy() +/obj/machinery/air_sensor/Destroy() if(SSradio) SSradio.remove_object(src,frequency) return ..() @@ -97,7 +97,7 @@ obj/machinery/air_sensor/Destroy() var/datum/radio_frequency/radio_connection circuit = /obj/item/circuitboard/air_management -obj/machinery/computer/general_air_control/Destroy() +/obj/machinery/computer/general_air_control/Destroy() if(SSradio) SSradio.remove_object(src, frequency) return ..() diff --git a/code/game/machinery/atmoalter/area_atmos_computer.dm b/code/game/machinery/atmoalter/area_atmos_computer.dm index 87f47c664e8..426422f1607 100644 --- a/code/game/machinery/atmoalter/area_atmos_computer.dm +++ b/code/game/machinery/atmoalter/area_atmos_computer.dm @@ -14,168 +14,168 @@ //Simple variable to prevent me from doing attack_hand in both this and the child computer var/zone = "This computer is working on a wireless range, the range is currently limited to 25 meters." - Initialize() - . = ..() +/obj/machinery/computer/area_atmos/Initialize() + . = ..() - scanscrubbers() + scanscrubbers() - attack_ai(var/mob/user as mob) - return src.attack_hand(user) - - attack_hand(var/mob/user as mob) - if(..(user)) - return - src.add_fingerprint(usr) - var/dat = {" - - - - - -

Area Air Control

- [status]
- Scan - "} - for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers) - dat += {" - - - - "} +/obj/machinery/computer/area_atmos/attack_ai(var/mob/user as mob) + return src.attack_hand(user) +/obj/machinery/computer/area_atmos/attack_hand(var/mob/user as mob) + if(..(user)) + return + src.add_fingerprint(usr) + var/dat = {" + + + + + +

Area Air Control

+ [status]
+ Scan +
- [scrubber.name]
- Pressure: [round(scrubber.air_contents.return_pressure(), 0.01)] kPa
- Flow Rate: [round(scrubber.last_flow_rate,0.1)] L/s
-
- Turn On - Turn Off
- Load: [round(scrubber.last_power_draw)] W -
"} + for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in connectedscrubbers) dat += {" -

- [zone] - - "} - user << browse("[dat]", "window=miningshuttle;size=400x400") - status = "" + + + [scrubber.name]
+ Pressure: [round(scrubber.air_contents.return_pressure(), 0.01)] kPa
+ Flow Rate: [round(scrubber.last_flow_rate,0.1)] L/s
+ + + Turn On + Turn Off
+ Load: [round(scrubber.last_power_draw)] W + + "} - Topic(href, href_list) - if(..()) + dat += {" +
+ [zone] + + "} + user << browse("[dat]", "window=miningshuttle;size=400x400") + status = "" + +/obj/machinery/computer/area_atmos/Topic(href, href_list) + if(..()) + return + usr.set_machine(src) + src.add_fingerprint(usr) + + + if(href_list["scan"]) + scanscrubbers() + else if(href_list["toggle"]) + var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"]) + + if(!validscrubber(scrubber)) + spawn(20) + status = "ERROR: Couldn't connect to scrubber! (timeout)" + connectedscrubbers -= scrubber + src.updateUsrDialog() return - usr.set_machine(src) - src.add_fingerprint(usr) + scrubber.on = text2num(href_list["toggle"]) + scrubber.update_icon() - if(href_list["scan"]) - scanscrubbers() - else if(href_list["toggle"]) - var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber = locate(href_list["scrub"]) +/obj/machinery/computer/area_atmos/proc/validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj ) + if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z) + return 0 - if(!validscrubber(scrubber)) - spawn(20) - status = "ERROR: Couldn't connect to scrubber! (timeout)" - connectedscrubbers -= scrubber - src.updateUsrDialog() - return + return 1 - scrubber.on = text2num(href_list["toggle"]) - scrubber.update_icon() +/obj/machinery/computer/area_atmos/proc/scanscrubbers() + connectedscrubbers = new() - proc/validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj ) - if(!isobj(scrubber) || get_dist(scrubber.loc, src.loc) > src.range || scrubber.loc.z != src.loc.z) - return 0 + var/found = 0 + for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in range(range, src.loc)) + if(istype(scrubber)) + found = 1 + connectedscrubbers += scrubber - return 1 + if(!found) + status = "ERROR: No scrubber found!" - proc/scanscrubbers() - connectedscrubbers = new() - - var/found = 0 - for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in range(range, src.loc)) - if(istype(scrubber)) - found = 1 - connectedscrubbers += scrubber - - if(!found) - status = "ERROR: No scrubber found!" - - src.updateUsrDialog() + src.updateUsrDialog() /obj/machinery/computer/area_atmos/area zone = "This computer is working in a wired network limited to this area." - validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj ) - if(!isobj(scrubber)) - return 0 +/obj/machinery/computer/area_atmos/area/validscrubber( var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber as obj ) + if(!isobj(scrubber)) + return 0 - /* - wow this is stupid, someone help me - */ - var/turf/T_src = get_turf(src) - if(!T_src.loc) return 0 - var/area/A_src = T_src.loc + /* + wow this is stupid, someone help me + */ + var/turf/T_src = get_turf(src) + if(!T_src.loc) return 0 + var/area/A_src = T_src.loc - var/turf/T_scrub = get_turf(scrubber) - if(!T_scrub.loc) return 0 - var/area/A_scrub = T_scrub.loc + var/turf/T_scrub = get_turf(scrubber) + if(!T_scrub.loc) return 0 + var/area/A_scrub = T_scrub.loc - if(A_scrub != A_src) - return 0 + if(A_scrub != A_src) + return 0 - return 1 + return 1 - scanscrubbers() - connectedscrubbers = new() +/obj/machinery/computer/area_atmos/area/scanscrubbers() + connectedscrubbers = new() - var/found = 0 + var/found = 0 - var/turf/T = get_turf(src) - if(!T.loc) return - var/area/A = T.loc - for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in world ) - var/turf/T2 = get_turf(scrubber) - if(T2 && T2.loc) - var/area/A2 = T2.loc - if(istype(A2) && A2 == A) - connectedscrubbers += scrubber - found = 1 + var/turf/T = get_turf(src) + if(!T.loc) return + var/area/A = T.loc + for(var/obj/machinery/portable_atmospherics/powered/scrubber/huge/scrubber in world ) + var/turf/T2 = get_turf(scrubber) + if(T2 && T2.loc) + var/area/A2 = T2.loc + if(istype(A2) && A2 == A) + connectedscrubbers += scrubber + found = 1 - if(!found) - status = "ERROR: No scrubber found!" + if(!found) + status = "ERROR: No scrubber found!" - src.updateUsrDialog() + src.updateUsrDialog() diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 1fcdc9605a8..121ac4aca32 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -205,7 +205,7 @@ // sortTim sorts in-place, but returns a ref to the list anyways. return sortTim(target, GLOBAL_PROC_REF(cmp_camera), FALSE) -mob/living/proc/near_camera() +/mob/living/proc/near_camera() if (!isturf(loc)) return 0 else if(!cameranet.is_visible(src)) @@ -251,16 +251,16 @@ mob/living/proc/near_camera() if(T && isStationLevel(T.z) && hassensorlevel(src, SUIT_SENSOR_TRACKING)) return TRACKING_POSSIBLE -mob/living/proc/tracking_initiated() +/mob/living/proc/tracking_initiated() -mob/living/silicon/robot/tracking_initiated() +/mob/living/silicon/robot/tracking_initiated() tracking_entities++ if(tracking_entities == 1 && has_zeroth_law()) to_chat(src, "Internal camera is currently being accessed.") -mob/living/proc/tracking_cancelled() +/mob/living/proc/tracking_cancelled() -mob/living/silicon/robot/tracking_initiated() +/mob/living/silicon/robot/tracking_initiated() tracking_entities-- if(!tracking_entities && has_zeroth_law()) to_chat(src, "Internal camera is no longer being accessed.") diff --git a/code/game/machinery/computer/shuttle.dm b/code/game/machinery/computer/shuttle.dm index 5e759588e92..5bb18ac8894 100644 --- a/code/game/machinery/computer/shuttle.dm +++ b/code/game/machinery/computer/shuttle.dm @@ -9,72 +9,72 @@ var/list/authorized = list( ) - attackby(var/obj/item/card/W as obj, var/mob/user as mob) - if(stat & (BROKEN|NOPOWER)) +/obj/machinery/computer/shuttle/attackby(var/obj/item/card/W as obj, var/mob/user as mob) + if(stat & (BROKEN|NOPOWER)) + return + + var/datum/evacuation_controller/shuttle/evac_control = evacuation_controller + if(!istype(evac_control)) + to_chat(user, SPAN_DANGER("This console should not in use on this map. Please report this to a developer.")) + return + + if ((!( istype(W, /obj/item/card) ) || !( SSticker ) || evacuation_controller.has_evacuated() || !( user ))) + return + + if (W.GetID()) + var/obj/item/card/id/id = W + + if (!id.access) //no access + to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") return - var/datum/evacuation_controller/shuttle/evac_control = evacuation_controller - if(!istype(evac_control)) - to_chat(user, SPAN_DANGER("This console should not in use on this map. Please report this to a developer.")) + var/list/cardaccess = id.access + if(!istype(cardaccess, /list) || !cardaccess.len) //no access + to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") return - if ((!( istype(W, /obj/item/card) ) || !( SSticker ) || evacuation_controller.has_evacuated() || !( user ))) - return + if(!(access_heads in id.access)) //doesn't have this access + to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") + return 0 - if (W.GetID()) - var/obj/item/card/id/id = W - - if (!id.access) //no access - to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") - return - - var/list/cardaccess = id.access - if(!istype(cardaccess, /list) || !cardaccess.len) //no access - to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") - return - - if(!(access_heads in id.access)) //doesn't have this access - to_chat(user, "The access level of [id.registered_name]\'s card is not high enough. ") - return 0 - - var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") - if(evacuation_controller.is_prepared() && user.get_active_hand() != id) - return 0 - switch(choice) - if("Authorize") - src.authorized -= id.registered_name - src.authorized += id.registered_name - if (src.auth_need - src.authorized.len > 0) - message_admins("[key_name_admin(user)] has authorized early shuttle launch") - log_game("[key_name(user)] has authorized early shuttle launch",ckey=key_name(user)) - to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) - else - message_admins("[key_name_admin(user)] has launched the shuttle") - log_game("[key_name(user)] has launched the shuttle early",ckey=key_name(user)) - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - evacuation_controller.set_launch_time(world.time+100) - //src.authorized = null - qdel(src.authorized) - src.authorized = list( ) - - if("Repeal") - src.authorized -= id.registered_name + var/choice = alert(user, text("Would you like to (un)authorize a shortened launch time? [] authorization\s are still needed. Use abort to cancel all authorizations.", src.auth_need - src.authorized.len), "Shuttle Launch", "Authorize", "Repeal", "Abort") + if(evacuation_controller.is_prepared() && user.get_active_hand() != id) + return 0 + switch(choice) + if("Authorize") + src.authorized -= id.registered_name + src.authorized += id.registered_name + if (src.auth_need - src.authorized.len > 0) + message_admins("[key_name_admin(user)] has authorized early shuttle launch") + log_game("[key_name(user)] has authorized early shuttle launch",ckey=key_name(user)) to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) - - if("Abort") - to_world("All authorizations to shortening time for shuttle launch have been revoked!") - src.authorized.len = 0 + else + message_admins("[key_name_admin(user)] has launched the shuttle") + log_game("[key_name(user)] has launched the shuttle early",ckey=key_name(user)) + to_world("Alert: Shuttle launch time shortened to 10 seconds!") + evacuation_controller.set_launch_time(world.time+100) + //src.authorized = null + qdel(src.authorized) src.authorized = list( ) - else if (istype(W, /obj/item/card/emag) && !emagged) - var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") + if("Repeal") + src.authorized -= id.registered_name + to_world(text("Alert: [] authorizations needed until shuttle is launched early", src.auth_need - src.authorized.len)) - if(!emagged && !evacuation_controller.is_prepared() && user.get_active_hand() == W) - switch(choice) - if("Launch") - to_world("Alert: Shuttle launch time shortened to 10 seconds!") - evacuation_controller.set_launch_time(world.time+100) - emagged = 1 - if("Cancel") - return - return + if("Abort") + to_world("All authorizations to shortening time for shuttle launch have been revoked!") + src.authorized.len = 0 + src.authorized = list( ) + + else if (istype(W, /obj/item/card/emag) && !emagged) + var/choice = alert(user, "Would you like to launch the shuttle?","Shuttle control", "Launch", "Cancel") + + if(!emagged && !evacuation_controller.is_prepared() && user.get_active_hand() == W) + switch(choice) + if("Launch") + to_world("Alert: Shuttle launch time shortened to 10 seconds!") + evacuation_controller.set_launch_time(world.time+100) + emagged = 1 + if("Cancel") + return + return diff --git a/code/game/machinery/deployable.dm b/code/game/machinery/deployable.dm index df3ec3a52c0..c42c5a99ab4 100644 --- a/code/game/machinery/deployable.dm +++ b/code/game/machinery/deployable.dm @@ -192,92 +192,93 @@ for reference: var/locked = 0.0 // req_access = list(access_maint_tunnels) - New() +/obj/machinery/deployable/barrier/New() + ..() + + src.icon_state = "[initial(icon_state)][src.locked]" + +/obj/machinery/deployable/barrier/attackby(obj/item/W as obj, mob/user as mob) + if (istype(W, /obj/item/card/id/)) + if (src.allowed(user)) + if (src.emagged < 2.0) + src.locked = !src.locked + src.anchored = !src.anchored + src.icon_state = "[initial(icon_state)][src.locked]" + if ((src.locked == 1.0) && (src.emagged < 2.0)) + to_chat(user, "Barrier lock toggled on.") + return + else if ((src.locked == 0.0) && (src.emagged < 2.0)) + to_chat(user, "Barrier lock toggled off.") + return + else + spark(src, 2, src) + visible_message("BZZzZZzZZzZT") + return + return + else if (W.iswrench()) + if (src.health < src.maxhealth) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + src.health = src.maxhealth + src.emagged = 0 + src.req_access = list(access_security) + visible_message("[user] repairs \the [src]!") + return + else if (src.emagged > 0) + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + src.emagged = 0 + src.req_access = list(access_security) + visible_message("[user] repairs \the [src]!") + return + return + else + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + switch(W.damtype) + if("fire") + src.health -= W.force * 0.75 + if("brute") + src.health -= W.force * 0.5 + else + if (src.health <= 0) + src.explode() ..() - src.icon_state = "[initial(icon_state)][src.locked]" - - attackby(obj/item/W as obj, mob/user as mob) - if (istype(W, /obj/item/card/id/)) - if (src.allowed(user)) - if (src.emagged < 2.0) - src.locked = !src.locked - src.anchored = !src.anchored - src.icon_state = "[initial(icon_state)][src.locked]" - if ((src.locked == 1.0) && (src.emagged < 2.0)) - to_chat(user, "Barrier lock toggled on.") - return - else if ((src.locked == 0.0) && (src.emagged < 2.0)) - to_chat(user, "Barrier lock toggled off.") - return - else - spark(src, 2, src) - visible_message("BZZzZZzZZzZT") - return +/obj/machinery/deployable/barrier/ex_act(severity) + switch(severity) + if(1.0) + src.explode() return - else if (W.iswrench()) - if (src.health < src.maxhealth) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - src.health = src.maxhealth - src.emagged = 0 - src.req_access = list(access_security) - visible_message("[user] repairs \the [src]!") - return - else if (src.emagged > 0) - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - src.emagged = 0 - src.req_access = list(access_security) - visible_message("[user] repairs \the [src]!") - return - return - else - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - switch(W.damtype) - if("fire") - src.health -= W.force * 0.75 - if("brute") - src.health -= W.force * 0.5 - else + if(2.0) + src.health -= 25 if (src.health <= 0) src.explode() - ..() - - ex_act(severity) - switch(severity) - if(1.0) - src.explode() - return - if(2.0) - src.health -= 25 - if (src.health <= 0) - src.explode() - return - emp_act(severity) - if(stat & (BROKEN|NOPOWER)) return - if(prob(50/severity)) - locked = !locked - anchored = !anchored - icon_state = "[initial(icon_state)][src.locked]" - CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. - if(air_group || (height==0)) - return 1 - if(istype(mover) && mover.checkpass(PASSTABLE)) - return 1 - else - return 0 +/obj/machinery/deployable/barrier/emp_act(severity) + if(stat & (BROKEN|NOPOWER)) + return + if(prob(50/severity)) + locked = !locked + anchored = !anchored + icon_state = "[initial(icon_state)][src.locked]" - proc/explode() - visible_message("[src] blows apart!") +/obj/machinery/deployable/barrier/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)//So bullets will fly over and stuff. + if(air_group || (height==0)) + return 1 + if(istype(mover) && mover.checkpass(PASSTABLE)) + return 1 + else + return 0 - /* var/obj/item/stack/rods/ =*/ - new /obj/item/stack/rods(get_turf(src)) +/obj/machinery/deployable/barrier/proc/explode() + visible_message("[src] blows apart!") - spark(src, 3, alldirs) +/* var/obj/item/stack/rods/ =*/ + new /obj/item/stack/rods(get_turf(src)) - explosion(src.loc,-1,-1,0) - qdel(src) + spark(src, 3, alldirs) + + explosion(src.loc,-1,-1,0) + qdel(src) /obj/machinery/deployable/barrier/emag_act(var/remaining_charges, var/mob/user) if (src.emagged == 0) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 9f5b44c6f68..5ba5ac2a713 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -289,7 +289,7 @@ open_sound_powered = 'sound/machines/airlock/vault1o.ogg' close_sound_powered = 'sound/machines/airlock/vault1c.ogg' -obj/machinery/door/airlock/glass_centcom/attackby(obj/item/I, mob/user) +/obj/machinery/door/airlock/glass_centcom/attackby(obj/item/I, mob/user) if (operating) return TRUE diff --git a/code/game/machinery/doors/firedoor_assembly.dm b/code/game/machinery/doors/firedoor_assembly.dm index e806d30feea..d3f1b7737ba 100644 --- a/code/game/machinery/doors/firedoor_assembly.dm +++ b/code/game/machinery/doors/firedoor_assembly.dm @@ -1,4 +1,4 @@ -obj/structure/firedoor_assembly +/obj/structure/firedoor_assembly name = "emergency shutter assembly" desc = "An emergency shutter assembly." icon = 'icons/obj/doors/DoorHazard.dmi' @@ -9,13 +9,13 @@ obj/structure/firedoor_assembly build_amt = 4 var/wired = 0 -obj/structure/firedoor_assembly/update_icon() +/obj/structure/firedoor_assembly/update_icon() if(anchored) icon_state = "door_anchored" else icon_state = "door_construction" -obj/structure/firedoor_assembly/attackby(var/obj/item/C as obj, mob/user as mob) +/obj/structure/firedoor_assembly/attackby(var/obj/item/C as obj, mob/user as mob) if(C.iscoil() && !wired && anchored) var/obj/item/stack/cable_coil/cable = C if (cable.get_amount() < 1) diff --git a/code/game/machinery/embedded_controller/airlock_program.dm b/code/game/machinery/embedded_controller/airlock_program.dm index 1ae5e96c0c2..6a9f389b2a8 100644 --- a/code/game/machinery/embedded_controller/airlock_program.dm +++ b/code/game/machinery/embedded_controller/airlock_program.dm @@ -272,7 +272,7 @@ state = STATE_IDLE target_state = TARGET_INOPEN memory["purge"] = cycle_to_external_air - + /datum/computer/file/embedded_program/airlock/proc/begin_dock_cycle() state = STATE_IDLE target_state = TARGET_INOPEN @@ -339,7 +339,7 @@ signalDoor(tag_exterior_door, command) signalDoor(tag_interior_door, command) -datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(var/command, var/sensor) +/datum/computer/file/embedded_program/airlock/proc/signal_mech_sensor(var/command, var/sensor) var/datum/signal/signal = new signal.data["tag"] = sensor signal.data["command"] = command diff --git a/code/game/machinery/embedded_controller/embedded_controller_base.dm b/code/game/machinery/embedded_controller/embedded_controller_base.dm index 9e397f40349..5947e964dd4 100644 --- a/code/game/machinery/embedded_controller/embedded_controller_base.dm +++ b/code/game/machinery/embedded_controller/embedded_controller_base.dm @@ -10,7 +10,7 @@ var/on = 1 -obj/machinery/embedded_controller/radio/Destroy() +/obj/machinery/embedded_controller/radio/Destroy() if(SSradio) SSradio.remove_object(src,frequency) return ..() diff --git a/code/game/machinery/jukebox.dm b/code/game/machinery/jukebox.dm index eb7c1b2beea..820ad0918de 100644 --- a/code/game/machinery/jukebox.dm +++ b/code/game/machinery/jukebox.dm @@ -1,8 +1,8 @@ -datum/track +/datum/track var/title var/sound -datum/track/New(var/title_name, var/audio) +/datum/track/New(var/title_name, var/audio) title = title_name sound = audio diff --git a/code/game/machinery/overview.dm b/code/game/machinery/overview.dm index 8cce48c1479..4157cd8fff5 100644 --- a/code/game/machinery/overview.dm +++ b/code/game/machinery/overview.dm @@ -325,13 +325,13 @@ return -proc/getr(col) +/proc/getr(col) return hex2num( copytext(col, 2,4)) -proc/getg(col) +/proc/getg(col) return hex2num( copytext(col, 4,6)) -proc/getb(col) +/proc/getb(col) return hex2num( copytext(col, 6)) diff --git a/code/game/machinery/seed_extractor.dm b/code/game/machinery/seed_extractor.dm index 54f5348d36c..1d407387026 100644 --- a/code/game/machinery/seed_extractor.dm +++ b/code/game/machinery/seed_extractor.dm @@ -6,7 +6,7 @@ density = 1 anchored = 1 -obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) +/obj/machinery/seed_extractor/attackby(var/obj/item/O as obj, var/mob/user as mob) // Fruits and vegetables. if(istype(O, /obj/item/reagent_containers/food/snacks/grown) || istype(O, /obj/item/grown)) diff --git a/code/game/objects/effects/effect_system.dm b/code/game/objects/effects/effect_system.dm index d955114e226..bd129d72847 100644 --- a/code/game/objects/effects/effect_system.dm +++ b/code/game/objects/effects/effect_system.dm @@ -25,18 +25,18 @@ would spawn and follow the beaker, even if it is carried or thrown. var/atom/holder var/setup = 0 - proc/set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc - setup = 1 +/datum/effect/effect/system/proc/set_up(n = 3, c = 0, turf/loc) + if(n > 10) + n = 10 + number = n + cardinals = c + location = loc + setup = 1 - proc/attach(atom/atom) - holder = atom +/datum/effect/effect/system/proc/attach(atom/atom) + holder = atom - proc/start() +/datum/effect/effect/system/proc/start() ///////////////////////////////////////////// @@ -62,29 +62,29 @@ steam.start() -- spawns the effect /datum/effect/effect/system/steam_spread - set_up(n = 3, c = 0, turf/loc) - if(n > 10) - n = 10 - number = n - cardinals = c - location = loc +/datum/effect/effect/system/steam_spread/set_up(n = 3, c = 0, turf/loc) + if(n > 10) + n = 10 + number = n + cardinals = c + location = loc - start() - var/i = 0 - for(i=0, iThe solution violently explodes.") + for(var/mob/M in viewers(1, location)) + if (prob (50 * amount)) + to_chat(M, "The explosion knocks you down.") + M.Weaken(rand(1,5)) return + else + var/devst = -1 + var/heavy = -1 + var/light = -1 + var/flash = -1 - start() - if (amount <= 2) - spark(location, 2) + // Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs + if (round(amount/12) > 0) + devst = devst + amount/12 - for(var/mob/M in viewers(5, location)) - to_chat(M, "The solution violently explodes.") - for(var/mob/M in viewers(1, location)) - if (prob (50 * amount)) - to_chat(M, "The explosion knocks you down.") - M.Weaken(rand(1,5)) - return - else - var/devst = -1 - var/heavy = -1 - var/light = -1 - var/flash = -1 + if (round(amount/6) > 0) + heavy = heavy + amount/6 - // Clamp all values to fractions of max_explosion_range, following the same pattern as for tank transfer bombs - if (round(amount/12) > 0) - devst = devst + amount/12 + if (round(amount/3) > 0) + light = light + amount/3 - if (round(amount/6) > 0) - heavy = heavy + amount/6 + if (flashing && flashing_factor) + flash = (amount/4) * flashing_factor - if (round(amount/3) > 0) - light = light + amount/3 + for(var/mob/M in viewers(8, location)) + to_chat(M, "The solution violently explodes.") - if (flashing && flashing_factor) - flash = (amount/4) * flashing_factor - - for(var/mob/M in viewers(8, location)) - to_chat(M, "The solution violently explodes.") - - explosion( - location, - round(min(devst, BOMBCAP_DVSTN_RADIUS)), - round(min(heavy, BOMBCAP_HEAVY_RADIUS)), - round(min(light, BOMBCAP_LIGHT_RADIUS)), - round(min(flash, BOMBCAP_FLASH_RADIUS)) - ) + explosion( + location, + round(min(devst, BOMBCAP_DVSTN_RADIUS)), + round(min(heavy, BOMBCAP_HEAVY_RADIUS)), + round(min(light, BOMBCAP_LIGHT_RADIUS)), + round(min(flash, BOMBCAP_FLASH_RADIUS)) + ) /obj/effect/temporary_effect name = "self deleting effect" diff --git a/code/game/objects/effects/gibs.dm b/code/game/objects/effects/gibs.dm index bf8443e1a2d..d7809eb0c08 100644 --- a/code/game/objects/effects/gibs.dm +++ b/code/game/objects/effects/gibs.dm @@ -10,45 +10,45 @@ var/fleshcolor //Used for gibbed humans. var/bloodcolor //Used for gibbed humans. - Initialize(mapload, list/viruses, datum/dna/MobDNA, fleshcolor, bloodcolor) - . = ..() +/obj/effect/gibspawner/Initialize(mapload, list/viruses, datum/dna/MobDNA, fleshcolor, bloodcolor) + . = ..() - if(fleshcolor) src.fleshcolor = fleshcolor - if(bloodcolor) src.bloodcolor = bloodcolor - Gib(loc,viruses,MobDNA) + if(fleshcolor) src.fleshcolor = fleshcolor + if(bloodcolor) src.bloodcolor = bloodcolor + Gib(loc,viruses,MobDNA) - proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null) - if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) - to_world("Gib list length mismatch!") - return +/obj/effect/gibspawner/proc/Gib(atom/location, var/list/viruses = list(), var/datum/dna/MobDNA = null) + if(gibtypes.len != gibamounts.len || gibamounts.len != gibdirections.len) + to_world("Gib list length mismatch!") + return - var/obj/effect/decal/cleanable/blood/gibs/gib = null + var/obj/effect/decal/cleanable/blood/gibs/gib = null - if(sparks) - spark(location, 2, alldirs) + if(sparks) + spark(location, 2, alldirs) - for(var/i = 1, i<= gibtypes.len, i++) - if(gibamounts[i]) - for(var/j = 1, j<= gibamounts[i], j++) - var/gibType = gibtypes[i] - gib = new gibType(location) + for(var/i = 1, i<= gibtypes.len, i++) + if(gibamounts[i]) + for(var/j = 1, j<= gibamounts[i], j++) + var/gibType = gibtypes[i] + gib = new gibType(location) - // Apply human species colouration to masks. - if(fleshcolor) - gib.fleshcolor = fleshcolor - if(bloodcolor) - gib.basecolor = bloodcolor + // Apply human species colouration to masks. + if(fleshcolor) + gib.fleshcolor = fleshcolor + if(bloodcolor) + gib.basecolor = bloodcolor - gib.update_icon() + gib.update_icon() - gib.blood_DNA = list() - if(MobDNA) - gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type - else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey - gib.blood_DNA["Non-human DNA"] = "A+" - if(istype(location,/turf/)) - var/list/directions = gibdirections[i] - if(directions.len) - gib.streak(directions) + gib.blood_DNA = list() + if(MobDNA) + gib.blood_DNA[MobDNA.unique_enzymes] = MobDNA.b_type + else if(istype(src, /obj/effect/gibspawner/human)) // Probably a monkey + gib.blood_DNA["Non-human DNA"] = "A+" + if(istype(location,/turf/)) + var/list/directions = gibdirections[i] + if(directions.len) + gib.streak(directions) - qdel(src) + qdel(src) diff --git a/code/game/objects/effects/step_triggers.dm b/code/game/objects/effects/step_triggers.dm index 4a49e5965d1..043e357f955 100644 --- a/code/game/objects/effects/step_triggers.dm +++ b/code/game/objects/effects/step_triggers.dm @@ -31,54 +31,54 @@ var/nostop = 0 // if 1: will only be stopped by teleporters var/list/affecting = list() - Trigger(var/atom/A) - if(!A || !istype(A, /atom/movable)) +/obj/effect/step_trigger/thrower/Trigger(var/atom/A) + if(!A || !istype(A, /atom/movable)) + return + var/atom/movable/AM = A + var/curtiles = 0 + var/stopthrow = 0 + for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) + if(AM in T.affecting) return - var/atom/movable/AM = A - var/curtiles = 0 - var/stopthrow = 0 - for(var/obj/effect/step_trigger/thrower/T in orange(2, src)) - if(AM in T.affecting) - return - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 0 + if(ismob(AM)) + var/mob/M = AM + if(immobilize) + M.canmove = 0 - affecting.Add(AM) - while(AM && !stopthrow) - if(tiles) - if(curtiles >= tiles) - break - if(AM.z != src.z) + affecting.Add(AM) + while(AM && !stopthrow) + if(tiles) + if(curtiles >= tiles) break + if(AM.z != src.z) + break - curtiles++ + curtiles++ - sleep(speed) + sleep(speed) - // Calculate if we should stop the process - if(!nostop) - for(var/obj/effect/step_trigger/T in get_step(AM, dir)) - if(T.stopper && T != src) - stopthrow = 1 - else - for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, dir)) - if(T.stopper) - stopthrow = 1 + // Calculate if we should stop the process + if(!nostop) + for(var/obj/effect/step_trigger/T in get_step(AM, dir)) + if(T.stopper && T != src) + stopthrow = 1 + else + for(var/obj/effect/step_trigger/teleporter/T in get_step(AM, dir)) + if(T.stopper) + stopthrow = 1 - if(AM) - var/predir = AM.dir - step(AM, dir) - if(!facedir) - AM.set_dir(predir) + if(AM) + var/predir = AM.dir + step(AM, dir) + if(!facedir) + AM.set_dir(predir) - affecting.Remove(AM) - if(ismob(AM)) - var/mob/M = AM - if(immobilize) - M.canmove = 1 + affecting.Remove(AM) + if(ismob(AM)) + var/mob/M = AM + if(immobilize) + M.canmove = 1 /obj/effect/step_trigger/thrower/shuttle icon_state = "dir_arrow" @@ -129,12 +129,12 @@ var/teleport_y = 0 var/teleport_z = 0 - Trigger(var/atom/movable/A) - if(teleport_x && teleport_y && teleport_z) +/obj/effect/step_trigger/teleporter/Trigger(var/atom/movable/A) + if(teleport_x && teleport_y && teleport_z) - A.x = teleport_x - A.y = teleport_y - A.z = teleport_z + A.x = teleport_x + A.y = teleport_y + A.z = teleport_z /* Random teleporter, teleports atoms to locations ranging from teleport_x - teleport_x_offset, etc */ @@ -154,4 +154,4 @@ A.z = rand(teleport_z, teleport_z_offset) if(isliving(A)) var/mob/M = A - M.visible_message(FONT_LARGE(SPAN_WARNING("\The [A] blinks into reality!")), FONT_LARGE(SPAN_WARNING("You feel your stomach turn as you get thrown out of bluespace!"))) \ No newline at end of file + M.visible_message(FONT_LARGE(SPAN_WARNING("\The [A] blinks into reality!")), FONT_LARGE(SPAN_WARNING("You feel your stomach turn as you get thrown out of bluespace!"))) diff --git a/code/game/objects/empulse.dm b/code/game/objects/empulse.dm index bb07ca940cd..f4bf5eb77ee 100644 --- a/code/game/objects/empulse.dm +++ b/code/game/objects/empulse.dm @@ -4,7 +4,7 @@ // #define EMPDEBUG 10 -proc/empulse(turf/epicenter, heavy_range, light_range, log = FALSE, list/exclude = null) +/proc/empulse(turf/epicenter, heavy_range, light_range, log = FALSE, list/exclude = null) if(!epicenter) return if(!istype(epicenter, /turf)) diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index c017a43e138..6bcf8171e85 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -53,9 +53,9 @@ var/global/list/teleportbeacons = list() return -/obj/item/device/radio/beacon/bacon //Probably a better way of doing this, I'm lazy. - proc/digest_delay() - QDEL_IN(src, 600) +// Probably a better way of doing this, I'm lazy. +/obj/item/device/radio/beacon/bacon/proc/digest_delay() + QDEL_IN(src, 600) /obj/item/device/radio/beacon/fixed alpha = 0 diff --git a/code/game/objects/items/weapons/autopsy.dm b/code/game/objects/items/weapons/autopsy.dm index bfbc6d4d444..886431e3344 100644 --- a/code/game/objects/items/weapons/autopsy.dm +++ b/code/game/objects/items/weapons/autopsy.dm @@ -28,14 +28,14 @@ var/hits = 0 var/time_inflicted = 0 - proc/copy() - var/datum/autopsy_data/W = new() - W.weapon = weapon - W.pretend_weapon = pretend_weapon - W.damage = damage - W.hits = hits - W.time_inflicted = time_inflicted - return W +/datum/autopsy_data/proc/copy() + var/datum/autopsy_data/W = new() + W.weapon = weapon + W.pretend_weapon = pretend_weapon + W.damage = damage + W.hits = hits + W.time_inflicted = time_inflicted + return W /obj/item/autopsy_scanner/proc/add_data(var/obj/item/organ/external/O) if(!O.autopsy_data.len && !O.trace_chemicals.len) return diff --git a/code/game/objects/items/weapons/chewables.dm b/code/game/objects/items/weapons/chewables.dm index 523c432d8e9..5a863bfbbe2 100644 --- a/code/game/objects/items/weapons/chewables.dm +++ b/code/game/objects/items/weapons/chewables.dm @@ -29,7 +29,7 @@ base_overlay.appearance_flags = RESET_COLOR add_overlay(base_overlay) -obj/item/clothing/mask/chewable/Initialize() +/obj/item/clothing/mask/chewable/Initialize() create_reagents(chem_volume) // making the cigarrete a chemical holder with a maximum volume of 15 . = ..() flags |= NOREACT // so it doesn't react until you light it @@ -50,7 +50,7 @@ obj/item/clothing/mask/chewable/Initialize() STOP_PROCESSING(SSprocessing, src) ..() -obj/item/clothing/mask/chewable/Destroy() +/obj/item/clothing/mask/chewable/Destroy() . = ..() STOP_PROCESSING(SSprocessing, src) diff --git a/code/game/objects/items/weapons/circuitboards/machinery/research.dm b/code/game/objects/items/weapons/circuitboards/machinery/research.dm index 34464d7bd1e..8982b218374 100644 --- a/code/game/objects/items/weapons/circuitboards/machinery/research.dm +++ b/code/game/objects/items/weapons/circuitboards/machinery/research.dm @@ -2,7 +2,7 @@ #error T_BOARD macro is not defined but we need it! #endif -obj/item/circuitboard/rdserver +/obj/item/circuitboard/rdserver name = T_BOARD("R&D server") build_path = /obj/machinery/r_n_d/server board_type = "machine" @@ -11,7 +11,7 @@ obj/item/circuitboard/rdserver "/obj/item/stack/cable_coil" = 2, "/obj/item/stock_parts/scanning_module" = 1) -obj/item/circuitboard/rdtechprocessor +/obj/item/circuitboard/rdtechprocessor name = T_BOARD("R&D tech processor") build_path = /obj/machinery/r_n_d/tech_processor board_type = "machine" @@ -84,7 +84,7 @@ obj/item/circuitboard/rdtechprocessor "/obj/item/stack/cable_coil" = 1, "/obj/item/stock_parts/console_screen" = 1) -obj/item/circuitboard/ntnet_relay +/obj/item/circuitboard/ntnet_relay name = "Circuit board (NTNet Quantum Relay)" build_path = /obj/machinery/ntnet_relay board_type = "machine" diff --git a/code/game/objects/items/weapons/dna_injector.dm b/code/game/objects/items/weapons/dna_injector.dm index ade253d8643..e719755b808 100644 --- a/code/game/objects/items/weapons/dna_injector.dm +++ b/code/game/objects/items/weapons/dna_injector.dm @@ -150,9 +150,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = HULKBLOCK - ..() + +/obj/item/dnainjector/hulkmut/New() + block = HULKBLOCK + ..() /obj/item/dnainjector/antihulk name = "\improper DNA injector (Anti-Hulk)" @@ -160,9 +161,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = HULKBLOCK - ..() + +/obj/item/dnainjector/antihulk/New() + block = HULKBLOCK + ..() /obj/item/dnainjector/xraymut name = "\improper DNA injector (Xray)" @@ -170,9 +172,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 8 - New() - block = XRAYBLOCK - ..() + +/obj/item/dnainjector/xraymut/New() + block = XRAYBLOCK + ..() /obj/item/dnainjector/antixray name = "\improper DNA injector (Anti-Xray)" @@ -180,9 +183,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 8 - New() - block = XRAYBLOCK - ..() + +/obj/item/dnainjector/antixray/New() + block = XRAYBLOCK + ..() /obj/item/dnainjector/firemut name = "\improper DNA injector (Fire)" @@ -190,9 +194,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 10 - New() - block = FIREBLOCK - ..() + +/obj/item/dnainjector/firemut/New() + block = FIREBLOCK + ..() /obj/item/dnainjector/antifire name = "\improper DNA injector (Anti-Fire)" @@ -200,9 +205,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 10 - New() - block = FIREBLOCK - ..() + +/obj/item/dnainjector/antifire/New() + block = FIREBLOCK + ..() /obj/item/dnainjector/telemut name = "\improper DNA injector (Tele.)" @@ -210,9 +216,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 12 - New() - block = TELEBLOCK - ..() + +/obj/item/dnainjector/telemut/New() + block = TELEBLOCK + ..() /obj/item/dnainjector/antitele name = "\improper DNA injector (Anti-Tele.)" @@ -220,9 +227,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 12 - New() - block = TELEBLOCK - ..() + +/obj/item/dnainjector/antitele/New() + block = TELEBLOCK + ..() /obj/item/dnainjector/nobreath name = "\improper DNA injector (No Breath)" @@ -230,9 +238,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = NOBREATHBLOCK - ..() + +/obj/item/dnainjector/nobreath/New() + block = NOBREATHBLOCK + ..() /obj/item/dnainjector/antinobreath name = "\improper DNA injector (Anti-No Breath)" @@ -240,9 +249,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = NOBREATHBLOCK - ..() + +/obj/item/dnainjector/antinobreath/New() + block = NOBREATHBLOCK + ..() /obj/item/dnainjector/remoteview name = "\improper DNA injector (Remote View)" @@ -250,9 +260,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = REMOTEVIEWBLOCK - ..() + +/obj/item/dnainjector/remoteview/New() + block = REMOTEVIEWBLOCK + ..() /obj/item/dnainjector/antiremoteview name = "\improper DNA injector (Anti-Remote View)" @@ -260,9 +271,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = REMOTEVIEWBLOCK - ..() + +/obj/item/dnainjector/antiremoteview/New() + block = REMOTEVIEWBLOCK + ..() /obj/item/dnainjector/regenerate name = "\improper DNA injector (Regeneration)" @@ -270,9 +282,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = REGENERATEBLOCK - ..() + +/obj/item/dnainjector/regenerate/New() + block = REGENERATEBLOCK + ..() /obj/item/dnainjector/antiregenerate name = "\improper DNA injector (Anti-Regeneration)" @@ -280,9 +293,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = REGENERATEBLOCK - ..() + +/obj/item/dnainjector/antiregenerate/New() + block = REGENERATEBLOCK + ..() /obj/item/dnainjector/runfast name = "\improper DNA injector (Increase Run)" @@ -290,9 +304,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = INCREASERUNBLOCK - ..() + +/obj/item/dnainjector/runfast/New() + block = INCREASERUNBLOCK + ..() /obj/item/dnainjector/antirunfast name = "\improper DNA injector (Anti-Increase Run)" @@ -300,9 +315,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = INCREASERUNBLOCK - ..() + +/obj/item/dnainjector/antirunfast/New() + block = INCREASERUNBLOCK + ..() /obj/item/dnainjector/morph name = "\improper DNA injector (Morph)" @@ -310,9 +326,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = MORPHBLOCK - ..() + +/obj/item/dnainjector/morph/New() + block = MORPHBLOCK + ..() /obj/item/dnainjector/antimorph name = "\improper DNA injector (Anti-Morph)" @@ -320,9 +337,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = MORPHBLOCK - ..() + +/obj/item/dnainjector/antimorph/New() + block = MORPHBLOCK + ..() /* No COLDBLOCK on bay /obj/item/dnainjector/cold @@ -331,9 +349,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = COLDBLOCK - ..() + +/obj/item/dnainjector/cold/New() + block = COLDBLOCK + ..() /obj/item/dnainjector/anticold name = "\improper DNA injector (Anti-Cold)" @@ -341,9 +360,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = COLDBLOCK - ..() + +/obj/item/dnainjector/anticold/New() + block = COLDBLOCK + ..() */ /obj/item/dnainjector/noprints @@ -352,9 +372,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = NOPRINTSBLOCK - ..() + +/obj/item/dnainjector/noprints/New() + block = NOPRINTSBLOCK + ..() /obj/item/dnainjector/antinoprints name = "\improper DNA injector (Anti-No Prints)" @@ -362,9 +383,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = NOPRINTSBLOCK - ..() + +/obj/item/dnainjector/antinoprints/New() + block = NOPRINTSBLOCK + ..() /obj/item/dnainjector/insulation name = "\improper DNA injector (Shock Immunity)" @@ -372,9 +394,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = SHOCKIMMUNITYBLOCK - ..() + +/obj/item/dnainjector/insulation/New() + block = SHOCKIMMUNITYBLOCK + ..() /obj/item/dnainjector/antiinsulation name = "\improper DNA injector (Anti-Shock Immunity)" @@ -382,9 +405,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = SHOCKIMMUNITYBLOCK - ..() + +/obj/item/dnainjector/antiinsulation/New() + block = SHOCKIMMUNITYBLOCK + ..() /obj/item/dnainjector/midgit name = "\improper DNA injector (Small Size)" @@ -392,9 +416,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = SMALLSIZEBLOCK - ..() + +/obj/item/dnainjector/midgit/New() + block = SMALLSIZEBLOCK + ..() /obj/item/dnainjector/antimidgit name = "\improper DNA injector (Anti-Small Size)" @@ -402,9 +427,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = SMALLSIZEBLOCK - ..() + +/obj/item/dnainjector/antimidgit/New() + block = SMALLSIZEBLOCK + ..() ///////////////////////////////////// /obj/item/dnainjector/antiglasses @@ -413,9 +439,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 1 - New() - block = GLASSESBLOCK - ..() + +/obj/item/dnainjector/antiglasses/New() + block = GLASSESBLOCK + ..() /obj/item/dnainjector/glassesmut name = "\improper DNA injector (Glasses)" @@ -423,9 +450,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 1 - New() - block = GLASSESBLOCK - ..() + +/obj/item/dnainjector/glassesmut/New() + block = GLASSESBLOCK + ..() /obj/item/dnainjector/epimut name = "\improper DNA injector (Epi.)" @@ -433,9 +461,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 3 - New() - block = HEADACHEBLOCK - ..() + +/obj/item/dnainjector/epimut/New() + block = HEADACHEBLOCK + ..() /obj/item/dnainjector/antiepi name = "\improper DNA injector (Anti-Epi.)" @@ -443,9 +472,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 3 - New() - block = HEADACHEBLOCK - ..() + +/obj/item/dnainjector/antiepi/New() + block = HEADACHEBLOCK + ..() /obj/item/dnainjector/anticough name = "\improper DNA injector (Anti-Cough)" @@ -453,9 +483,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 5 - New() - block = COUGHBLOCK - ..() + +/obj/item/dnainjector/anticough/New() + block = COUGHBLOCK + ..() /obj/item/dnainjector/coughmut name = "\improper DNA injector (Cough)" @@ -463,9 +494,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 5 - New() - block = COUGHBLOCK - ..() + +/obj/item/dnainjector/coughmut/New() + block = COUGHBLOCK + ..() /obj/item/dnainjector/clumsymut name = "\improper DNA injector (Clumsy)" @@ -473,9 +505,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 6 - New() - block = CLUMSYBLOCK - ..() + +/obj/item/dnainjector/clumsymut/New() + block = CLUMSYBLOCK + ..() /obj/item/dnainjector/anticlumsy name = "\improper DNA injector (Anti-Clumy)" @@ -483,9 +516,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 6 - New() - block = CLUMSYBLOCK - ..() + +/obj/item/dnainjector/anticlumsy/New() + block = CLUMSYBLOCK + ..() /obj/item/dnainjector/antitour name = "\improper DNA injector (Anti-Tour.)" @@ -493,9 +527,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 7 - New() - block = TWITCHBLOCK - ..() + +/obj/item/dnainjector/antitour/New() + block = TWITCHBLOCK + ..() /obj/item/dnainjector/tourmut name = "\improper DNA injector (Tour.)" @@ -503,9 +538,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 7 - New() - block = TWITCHBLOCK - ..() + +/obj/item/dnainjector/tourmut/New() + block = TWITCHBLOCK + ..() /obj/item/dnainjector/stuttmut name = "\improper DNA injector (Stutt.)" @@ -513,9 +549,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 9 - New() - block = STUTTERBLOCK - ..() + +/obj/item/dnainjector/stuttmut/New() + block = STUTTERBLOCK + ..() /obj/item/dnainjector/antistutt name = "\improper DNA injector (Anti-Stutt.)" @@ -523,9 +560,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 9 - New() - block = STUTTERBLOCK - ..() + +/obj/item/dnainjector/antistutt/New() + block = STUTTERBLOCK + ..() /obj/item/dnainjector/blindmut name = "\improper DNA injector (Blind)" @@ -533,9 +571,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 11 - New() - block = BLINDBLOCK - ..() + +/obj/item/dnainjector/blindmut/New() + block = BLINDBLOCK + ..() /obj/item/dnainjector/antiblind name = "\improper DNA injector (Anti-Blind)" @@ -543,9 +582,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 11 - New() - block = BLINDBLOCK - ..() + +/obj/item/dnainjector/antiblind/New() + block = BLINDBLOCK + ..() /obj/item/dnainjector/deafmut name = "\improper DNA injector (Deaf)" @@ -553,9 +593,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 13 - New() - block = DEAFBLOCK - ..() + +/obj/item/dnainjector/deafmut/New() + block = DEAFBLOCK + ..() /obj/item/dnainjector/antideaf name = "\improper DNA injector (Anti-Deaf)" @@ -563,9 +604,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 13 - New() - block = DEAFBLOCK - ..() + +/obj/item/dnainjector/antideaf/New() + block = DEAFBLOCK + ..() /obj/item/dnainjector/hallucination name = "\improper DNA injector (Halluctination)" @@ -573,9 +615,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 2 - New() - block = HALLUCINATIONBLOCK - ..() + +/obj/item/dnainjector/hallucination/New() + block = HALLUCINATIONBLOCK + ..() /obj/item/dnainjector/antihallucination name = "\improper DNA injector (Anti-Hallucination)" @@ -583,9 +626,10 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 2 - New() - block = HALLUCINATIONBLOCK - ..() + +/obj/item/dnainjector/antihallucination/New() + block = HALLUCINATIONBLOCK + ..() /obj/item/dnainjector/h2m name = "\improper DNA injector (Human > Monkey)" @@ -593,9 +637,10 @@ datatype = DNA2_BUF_SE value = 0xFFF //block = 14 - New() - block = MONKEYBLOCK - ..() + +/obj/item/dnainjector/h2m/New() + block = MONKEYBLOCK + ..() /obj/item/dnainjector/m2h name = "\improper DNA injector (Monkey > Human)" @@ -603,6 +648,7 @@ datatype = DNA2_BUF_SE value = 0x001 //block = 14 - New() - block = MONKEYBLOCK - ..() + +/obj/item/dnainjector/m2h/New() + block = MONKEYBLOCK + ..() diff --git a/code/game/objects/items/weapons/ecigs.dm b/code/game/objects/items/weapons/ecigs.dm index 3abdc58db3d..84d1738afbe 100644 --- a/code/game/objects/items/weapons/ecigs.dm +++ b/code/game/objects/items/weapons/ecigs.dm @@ -61,7 +61,7 @@ . = ..() color = pick(ecig_colors) -obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) +/obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) . = ..() if(ec_cartridge) to_chat(user, SPAN_NOTICE("There are [round(ec_cartridge.reagents.total_volume, 1)] unit\s of liquid remaining.")) @@ -225,7 +225,7 @@ obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) if(blocked) to_chat(C, SPAN_WARNING("\The [blocked] is in the way!")) return TRUE - if(last_drag <= world.time - 30) + if(last_drag <= world.time - 30) if(!cig_cell.checked_use(power_usage * CELLRATE)) //if this passes, there's not enough power in the battery deactivate() to_chat(C,SPAN_WARNING("\The [src]'s power meter flashes a low battery warning and shuts down.")) @@ -234,7 +234,7 @@ obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) idle = 0 C.visible_message(SPAN_NOTICE("[C.name] takes a drag of their [name].")) playsound(C, 'sound/items/cigs_lighters/inhale.ogg', 50, 0, -1) - ec_cartridge.reagents.trans_to_mob(C, REM, CHEM_BREATHE, 0.4) + ec_cartridge.reagents.trans_to_mob(C, REM, CHEM_BREATHE, 0.4) return TRUE return ..() @@ -295,4 +295,4 @@ obj/item/clothing/mask/smokable/ecig/util/examine(mob/user) /obj/item/reagent_containers/ecig_cartridge/coffee name = "coffee flavour cartridge" desc = "A small metal cartridge which contains an atomizing coil and a solution to be atomized. The label says its coffee flavored." - reagents_to_add = list(/singleton/reagent/toxin/tobacco/liquid = 10, /singleton/reagent/water = 10, /singleton/reagent/drink/coffee = 5) \ No newline at end of file + reagents_to_add = list(/singleton/reagent/toxin/tobacco/liquid = 10, /singleton/reagent/water = 10, /singleton/reagent/drink/coffee = 5) diff --git a/code/game/objects/items/weapons/grenades/chem_grenade.dm b/code/game/objects/items/weapons/grenades/chem_grenade.dm index 894c432585a..1d5fff79b15 100644 --- a/code/game/objects/items/weapons/grenades/chem_grenade.dm +++ b/code/game/objects/items/weapons/grenades/chem_grenade.dm @@ -378,18 +378,18 @@ stage = 2 path = 1 - Initialize() - . = ..() - var/obj/item/reagent_containers/glass/beaker/B1 = new(src) - var/obj/item/reagent_containers/glass/beaker/B2 = new(src) +/obj/item/grenade/chem_grenade/monoammoniumphosphate/Initialize() + . = ..() + var/obj/item/reagent_containers/glass/beaker/B1 = new(src) + var/obj/item/reagent_containers/glass/beaker/B2 = new(src) - B1.reagents.add_reagent(/singleton/reagent/surfactant, 40) - B1.reagents.add_reagent(/singleton/reagent/toxin/fertilizer/monoammoniumphosphate, 20) - B2.reagents.add_reagent(/singleton/reagent/water, 40) - B2.reagents.add_reagent(/singleton/reagent/toxin/fertilizer/monoammoniumphosphate, 20) + B1.reagents.add_reagent(/singleton/reagent/surfactant, 40) + B1.reagents.add_reagent(/singleton/reagent/toxin/fertilizer/monoammoniumphosphate, 20) + B2.reagents.add_reagent(/singleton/reagent/water, 40) + B2.reagents.add_reagent(/singleton/reagent/toxin/fertilizer/monoammoniumphosphate, 20) - detonator = new/obj/item/device/assembly_holder/timer_igniter(src) + detonator = new/obj/item/device/assembly_holder/timer_igniter(src) - beakers += B1 - beakers += B2 - icon_state = initial(icon_state) +"_locked" + beakers += B1 + beakers += B2 + icon_state = initial(icon_state) +"_locked" diff --git a/code/game/objects/items/weapons/grenades/fragmentation.dm b/code/game/objects/items/weapons/grenades/fragmentation.dm index 625707412c4..3bc97312d84 100644 --- a/code/game/objects/items/weapons/grenades/fragmentation.dm +++ b/code/game/objects/items/weapons/grenades/fragmentation.dm @@ -1,4 +1,4 @@ -proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50) +/proc/fragem(var/source,var/fragx,var/fragy,var/light_dam,var/flash_dam,var/p_dam,var/p_range,var/can_cover=TRUE,var/shard_range = 50) var/turf/O = get_turf(source) var/fragger = rand(fragx,fragy) explosion(O, -1, -1, light_dam, flash_dam) diff --git a/code/game/objects/items/weapons/power_cells.dm b/code/game/objects/items/weapons/power_cells.dm index 44b9c267cb5..242fae098d4 100644 --- a/code/game/objects/items/weapons/power_cells.dm +++ b/code/game/objects/items/weapons/power_cells.dm @@ -125,9 +125,10 @@ maxcharge = 30000 //determines how badly mobs get shocked matter = list(DEFAULT_WALL_MATERIAL = 700, MATERIAL_GLASS = 80) - check_charge() +/obj/item/cell/infinite/check_charge() return 1 - use() + +/obj/item/cell/infinite/use() return 1 /obj/item/cell/potato diff --git a/code/game/objects/items/weapons/storage/backpack.dm b/code/game/objects/items/weapons/storage/backpack.dm index 2174de0641c..af62f8cb3e2 100644 --- a/code/game/objects/items/weapons/storage/backpack.dm +++ b/code/game/objects/items/weapons/storage/backpack.dm @@ -94,18 +94,18 @@ storage_cost = 29 empty_delay = 0.8 SECOND - attackby(obj/item/W as obj, mob/user as mob) - if(istype(W, /obj/item/storage/backpack/holding)) - to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") - qdel(W) - return - ..() +/obj/item/storage/backpack/holding/attackby(obj/item/W as obj, mob/user as mob) + if(istype(W, /obj/item/storage/backpack/holding)) + to_chat(user, "The Bluespace interfaces of the two devices conflict and malfunction.") + qdel(W) + return + ..() //Please don't clutter the parent storage item with stupid hacks. - can_be_inserted(obj/item/W as obj, stop_messages = 0) - if(istype(W, /obj/item/storage/backpack/holding)) - return 1 - return ..() +/obj/item/storage/backpack/holding/can_be_inserted(obj/item/W as obj, stop_messages = 0) + if(istype(W, /obj/item/storage/backpack/holding)) + return 1 + return ..() /obj/item/storage/backpack/santabag name = "\improper Santa's gift bag" diff --git a/code/game/objects/items/weapons/storage/misc.dm b/code/game/objects/items/weapons/storage/misc.dm index a14590ccb81..86efa12a5ac 100644 --- a/code/game/objects/items/weapons/storage/misc.dm +++ b/code/game/objects/items/weapons/storage/misc.dm @@ -70,6 +70,10 @@ throwforce = 2 slot_flags = SLOT_BELT starts_with = list(/obj/item/paper/cig = 10) + +/obj/item/storage/box/fancy/cigpaper/Initialize() + . = ..() + make_exact_fit() /obj/item/storage/box/fancy/cigpaper/update_icon() @@ -91,11 +95,15 @@ ) w_class = ITEMSIZE_SMALL starts_with = list(/obj/item/cigarette_filter = 10) - make_exact_fit() drop_sound = 'sound/items/drop/gloves.ogg' pickup_sound = 'sound/items/pickup/gloves.ogg' use_sound = 'sound/items/storage/wrapper.ogg' +/obj/item/storage/cigfilter/Initialize(mapload, defer_shrinkwrap) + . = ..() + + make_exact_fit() + /obj/item/storage/box/fancy/cigpaper/fine name = "\improper Trident cigarette paper" desc = "A fancy brand of Trident cigarette paper, for rolling your own cigarettes. Like a person who appreciates the finer things in life." @@ -122,6 +130,10 @@ throwforce = 2 slot_flags = SLOT_BELT starts_with = list(/obj/item/clothing/mask/chewable/tobacco = 6) + +/obj/item/storage/chewables/Initialize(mapload, defer_shrinkwrap) + . = ..() + make_exact_fit() /obj/item/storage/chewables/tobacco/bad diff --git a/code/game/objects/items/weapons/storage/pill_bottle.dm b/code/game/objects/items/weapons/storage/pill_bottle.dm index 0bc33d50386..53e7386a32b 100644 --- a/code/game/objects/items/weapons/storage/pill_bottle.dm +++ b/code/game/objects/items/weapons/storage/pill_bottle.dm @@ -73,7 +73,7 @@ desc = "Contains pills used to treat minor burns." starts_with = list(/obj/item/reagent_containers/pill/kelotane = 7) -obj/item/storage/pill_bottle/butazoline +/obj/item/storage/pill_bottle/butazoline name = "bottle of 10u Butazoline pills" desc = "Contains pills used to severe injuries and bleeding." starts_with = list(/obj/item/reagent_containers/pill/butazoline = 7) diff --git a/code/game/objects/items/weapons/storage/secure.dm b/code/game/objects/items/weapons/storage/secure.dm index 4169c1243f3..7b2f6350192 100644 --- a/code/game/objects/items/weapons/storage/secure.dm +++ b/code/game/objects/items/weapons/storage/secure.dm @@ -28,105 +28,105 @@ max_storage_space = 16 use_sound = 'sound/items/storage/briefcase.ogg' - examine(mob/user) - if(..(user, 1)) - to_chat(user, text("The service panel is [src.open ? "open" : "closed"].")) +/obj/item/storage/secure/examine(mob/user) + if(..(user, 1)) + to_chat(user, text("The service panel is [src.open ? "open" : "closed"].")) - attackby(obj/item/W as obj, mob/user as mob) - if(locked) - if (istype(W, /obj/item/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) - var/obj/item/melee/energy/blade/blade = W - blade.spark_system.queue() - playsound(src.loc, 'sound/weapons/blade.ogg', 50, 1) - playsound(src.loc, /singleton/sound_category/spark_sound, 50, 1) - return - - if (W.isscrewdriver()) - if(W.use_tool(src, user, 20, volume = 50)) - src.open =! src.open - to_chat(user, SPAN_NOTICE("You [src.open ? "open" : "close"] the service panel.")) - return - if ((W.ismultitool()) && (src.open == 1)&& (!src.l_hacking)) - to_chat(user, SPAN_NOTICE("Now attempting to reset internal memory, please hold.")) - src.l_hacking = 1 - if (do_after(usr, 100)) - if (prob(40)) - src.l_setshort = 1 - src.l_set = 0 - to_chat(user, SPAN_NOTICE("Internal memory reset. Please give it a few seconds to reinitialize.")) - sleep(80) - src.l_setshort = 0 - src.l_hacking = 0 - else - to_chat(user, SPAN_WARNING("Unable to reset internal memory.")) - src.l_hacking = 0 - else src.l_hacking = 0 - return - //At this point you have exhausted all the special things to do when locked - // ... but it's still locked. +/obj/item/storage/secure/attackby(obj/item/W as obj, mob/user as mob) + if(locked) + if (istype(W, /obj/item/melee/energy/blade) && emag_act(INFINITY, user, "You slice through the lock of \the [src]")) + var/obj/item/melee/energy/blade/blade = W + blade.spark_system.queue() + playsound(src.loc, 'sound/weapons/blade.ogg', 50, 1) + playsound(src.loc, /singleton/sound_category/spark_sound, 50, 1) return - // -> storage/attackby() what with handle insertion, etc - ..() - - - MouseDrop(over_object, src_location, over_location) - if (locked) - src.add_fingerprint(usr) + if (W.isscrewdriver()) + if(W.use_tool(src, user, 20, volume = 50)) + src.open =! src.open + to_chat(user, SPAN_NOTICE("You [src.open ? "open" : "close"] the service panel.")) return - ..() - - - attack_self(mob/user as mob) - user.set_machine(src) - var/dat = text("[]
\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED")) - var/message = "Code" - if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) - dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") - if (src.emagged) - dat += text("

\nLOCKING SYSTEM ERROR - 1701") - if (src.l_setshort) - dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") - message = text("[]", src.code) - if (!src.locked) - message = "*****" - dat += text("


\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message, src, src, src, src, src, src, src, src, src, src, src, src) - send_theme_resources(user) - user << browse(enable_ui_theme(user, dat), "window=caselock;size=300x280") - - Topic(href, href_list) - ..() - if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) - return - if (href_list["type"]) - if (href_list["type"] == "E") - if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) - src.l_code = src.code - src.l_set = 1 - else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) - src.locked = 0 - cut_overlays() - add_overlay(icon_opened) - src.code = null + if ((W.ismultitool()) && (src.open == 1)&& (!src.l_hacking)) + to_chat(user, SPAN_NOTICE("Now attempting to reset internal memory, please hold.")) + src.l_hacking = 1 + if (do_after(usr, 100)) + if (prob(40)) + src.l_setshort = 1 + src.l_set = 0 + to_chat(user, SPAN_NOTICE("Internal memory reset. Please give it a few seconds to reinitialize.")) + sleep(80) + src.l_setshort = 0 + src.l_hacking = 0 else - src.code = "ERROR" - else - if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) - src.locked = 1 - cut_overlays() - src.code = null - src.close(usr) - else - src.code += text("[]", href_list["type"]) - if (length(src.code) > 5) - src.code = "ERROR" - src.add_fingerprint(usr) - for(var/mob/M in viewers(1, src.loc)) - if ((M.client && M.machine == src)) - src.attack_self(M) - return + to_chat(user, SPAN_WARNING("Unable to reset internal memory.")) + src.l_hacking = 0 + else src.l_hacking = 0 + return + //At this point you have exhausted all the special things to do when locked + // ... but it's still locked. return + // -> storage/attackby() what with handle insertion, etc + ..() + + +/obj/item/storage/secure/MouseDrop(over_object, src_location, over_location) + if (locked) + src.add_fingerprint(usr) + return + ..() + + +/obj/item/storage/secure/attack_self(mob/user as mob) + user.set_machine(src) + var/dat = text("[]
\n\nLock Status: []",src, (src.locked ? "LOCKED" : "UNLOCKED")) + var/message = "Code" + if ((src.l_set == 0) && (!src.emagged) && (!src.l_setshort)) + dat += text("

\n5-DIGIT PASSCODE NOT SET.
ENTER NEW PASSCODE.
") + if (src.emagged) + dat += text("

\nLOCKING SYSTEM ERROR - 1701") + if (src.l_setshort) + dat += text("

\nALERT: MEMORY SYSTEM ERROR - 6040 201") + message = text("[]", src.code) + if (!src.locked) + message = "*****" + dat += text("


\n>[]
\n1-2-3
\n4-5-6
\n7-8-9
\nR-0-E
\n
", message, src, src, src, src, src, src, src, src, src, src, src, src) + send_theme_resources(user) + user << browse(enable_ui_theme(user, dat), "window=caselock;size=300x280") + +/obj/item/storage/secure/Topic(href, href_list) + ..() + if ((usr.stat || usr.restrained()) || (get_dist(src, usr) > 1)) + return + if (href_list["type"]) + if (href_list["type"] == "E") + if ((src.l_set == 0) && (length(src.code) == 5) && (!src.l_setshort) && (src.code != "ERROR")) + src.l_code = src.code + src.l_set = 1 + else if ((src.code == src.l_code) && (src.emagged == 0) && (src.l_set == 1)) + src.locked = 0 + cut_overlays() + add_overlay(icon_opened) + src.code = null + else + src.code = "ERROR" + else + if ((href_list["type"] == "R") && (src.emagged == 0) && (!src.l_setshort)) + src.locked = 1 + cut_overlays() + src.code = null + src.close(usr) + else + src.code += text("[]", href_list["type"]) + if (length(src.code) > 5) + src.code = "ERROR" + src.add_fingerprint(usr) + for(var/mob/M in viewers(1, src.loc)) + if ((M.client && M.machine == src)) + src.attack_self(M) + return + return + /obj/item/storage/secure/emag_act(var/remaining_charges, var/mob/user, var/feedback) if(!emagged) emagged = 1 @@ -190,7 +190,7 @@ starts_with = list(/obj/item/paper = 1, /obj/item/pen = 1) /obj/item/storage/secure/safe/attack_hand(mob/user as mob) - return attack_self(user) + return attack_self(user) /*obj/item/storage/secure/safe/HoS/New() ..() diff --git a/code/game/objects/random/random.dm b/code/game/objects/random/random.dm index 6aeed99e29c..1adce95b160 100644 --- a/code/game/objects/random/random.dm +++ b/code/game/objects/random/random.dm @@ -51,8 +51,9 @@ desc = "This item type is used to randomly spawn a given object at round-start" icon_state = "x3" var/spawn_object = null - item_to_spawn() - return ispath(spawn_object) ? spawn_object : text2path(spawn_object) + +/obj/random/single/item_to_spawn() + return ispath(spawn_object) ? spawn_object : text2path(spawn_object) /obj/random/tool name = "random tool" @@ -1487,46 +1488,47 @@ /obj/item/toy/mech/honk ) has_postspawn = TRUE - post_spawn(obj/thing) - var/list/frames = list( - /obj/item/gun/custom_ka/frame01 = 1, - /obj/item/gun/custom_ka/frame02 = 2, - /obj/item/gun/custom_ka/frame03 = 3, - /obj/item/gun/custom_ka/frame04 = 2, - /obj/item/gun/custom_ka/frame05 = 1 - ) - var/list/cells = list( - /obj/item/custom_ka_upgrade/cells/cell01 = 2, - /obj/item/custom_ka_upgrade/cells/cell02 = 3, - /obj/item/custom_ka_upgrade/cells/cell03 = 2, - /obj/item/custom_ka_upgrade/cells/cell04 = 1, - /obj/item/custom_ka_upgrade/cells/cell05 = 1 - ) +/obj/random/custom_ka/post_spawn(obj/thing) + var/list/frames = list( + /obj/item/gun/custom_ka/frame01 = 1, + /obj/item/gun/custom_ka/frame02 = 2, + /obj/item/gun/custom_ka/frame03 = 3, + /obj/item/gun/custom_ka/frame04 = 2, + /obj/item/gun/custom_ka/frame05 = 1 + ) - var/list/barrels = list( - /obj/item/custom_ka_upgrade/barrels/barrel01 = 2, - /obj/item/custom_ka_upgrade/barrels/barrel02 = 3, - /obj/item/custom_ka_upgrade/barrels/barrel03 = 2, - /obj/item/custom_ka_upgrade/barrels/barrel04 = 1, - /obj/item/custom_ka_upgrade/barrels/barrel05 = 1 - ) + var/list/cells = list( + /obj/item/custom_ka_upgrade/cells/cell01 = 2, + /obj/item/custom_ka_upgrade/cells/cell02 = 3, + /obj/item/custom_ka_upgrade/cells/cell03 = 2, + /obj/item/custom_ka_upgrade/cells/cell04 = 1, + /obj/item/custom_ka_upgrade/cells/cell05 = 1 + ) - var/frame_type = pickweight(frames) - var/obj/item/gun/custom_ka/spawned_frame = new frame_type(thing.loc) + var/list/barrels = list( + /obj/item/custom_ka_upgrade/barrels/barrel01 = 2, + /obj/item/custom_ka_upgrade/barrels/barrel02 = 3, + /obj/item/custom_ka_upgrade/barrels/barrel03 = 2, + /obj/item/custom_ka_upgrade/barrels/barrel04 = 1, + /obj/item/custom_ka_upgrade/barrels/barrel05 = 1 + ) - var/cell_type = pickweight(cells) - spawned_frame.installed_cell = new cell_type(spawned_frame) + var/frame_type = pickweight(frames) + var/obj/item/gun/custom_ka/spawned_frame = new frame_type(thing.loc) - var/barrel_type = pickweight(barrels) - spawned_frame.installed_barrel = new barrel_type(spawned_frame) + var/cell_type = pickweight(cells) + spawned_frame.installed_cell = new cell_type(spawned_frame) - spawned_frame.installed_upgrade_chip = new /obj/item/custom_ka_upgrade/upgrade_chips/capacity(spawned_frame) + var/barrel_type = pickweight(barrels) + spawned_frame.installed_barrel = new barrel_type(spawned_frame) - spawned_frame.update_icon() - spawned_frame.update_stats() + spawned_frame.installed_upgrade_chip = new /obj/item/custom_ka_upgrade/upgrade_chips/capacity(spawned_frame) - qdel(thing) + spawned_frame.update_icon() + spawned_frame.update_stats() + + qdel(thing) /obj/random/prebuilt_ka name = "random prebuilt kinetic accelerator" diff --git a/code/game/objects/structures/crates_lockers/closets/syndicate.dm b/code/game/objects/structures/crates_lockers/closets/syndicate.dm index 4b67bd10b62..3448bb8d4d5 100644 --- a/code/game/objects/structures/crates_lockers/closets/syndicate.dm +++ b/code/game/objects/structures/crates_lockers/closets/syndicate.dm @@ -57,79 +57,79 @@ U.hidden_uplink.uses = 40 return -/obj/structure/closet/syndicate/resources/ +/obj/structure/closet/syndicate/resources desc = "An old, dusty locker." - fill() - var/common_min = 30 //Minimum amount of minerals in the stack for common minerals - var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals - var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals - var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK +/obj/structure/closet/syndicate/resources/fill() + var/common_min = 30 //Minimum amount of minerals in the stack for common minerals + var/common_max = 50 //Maximum amount of HONK in the stack for HONK common minerals + var/rare_min = 5 //Minimum HONK of HONK in the stack HONK HONK rare minerals + var/rare_max = 20 //Maximum HONK HONK HONK in the HONK for HONK rare HONK - var/pickednum = rand(1, 50) + var/pickednum = rand(1, 50) - //Sad trombone - if(pickednum == 1) - var/obj/item/paper/P = new /obj/item/paper(src) - P.name = "IOU" - P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!" + //Sad trombone + if(pickednum == 1) + var/obj/item/paper/P = new /obj/item/paper(src) + P.name = "IOU" + P.info = "Sorry man, we needed the money so we sold your stash. It's ok, we'll double our money for sure this time!" - //Metal (common ore) - if(pickednum >= 2) - new /obj/item/stack/material/steel(src, rand(common_min, common_max)) + //Metal (common ore) + if(pickednum >= 2) + new /obj/item/stack/material/steel(src, rand(common_min, common_max)) - //Glass (common ore) - if(pickednum >= 5) - new /obj/item/stack/material/glass(src, rand(common_min, common_max)) + //Glass (common ore) + if(pickednum >= 5) + new /obj/item/stack/material/glass(src, rand(common_min, common_max)) - //Plasteel (common ore) Because it has a million more uses then phoron - if(pickednum >= 10) - new /obj/item/stack/material/plasteel(src, rand(common_min, common_max)) + //Plasteel (common ore) Because it has a million more uses then phoron + if(pickednum >= 10) + new /obj/item/stack/material/plasteel(src, rand(common_min, common_max)) - //Phoron (rare ore) - if(pickednum >= 15) - new /obj/item/stack/material/phoron(src, rand(rare_min, rare_max)) + //Phoron (rare ore) + if(pickednum >= 15) + new /obj/item/stack/material/phoron(src, rand(rare_min, rare_max)) - //Silver (rare ore) - if(pickednum >= 20) - new /obj/item/stack/material/silver(src, rand(rare_min, rare_max)) + //Silver (rare ore) + if(pickednum >= 20) + new /obj/item/stack/material/silver(src, rand(rare_min, rare_max)) - //Gold (rare ore) - if(pickednum >= 30) - new /obj/item/stack/material/gold(src, rand(rare_min, rare_max)) + //Gold (rare ore) + if(pickednum >= 30) + new /obj/item/stack/material/gold(src, rand(rare_min, rare_max)) - //Uranium (rare ore) - if(pickednum >= 40) - new /obj/item/stack/material/uranium(src, rand(rare_min, rare_max)) + //Uranium (rare ore) + if(pickednum >= 40) + new /obj/item/stack/material/uranium(src, rand(rare_min, rare_max)) - //Diamond (rare HONK) - if(pickednum >= 45) - new /obj/item/stack/material/diamond(src, rand(rare_min, rare_max)) + //Diamond (rare HONK) + if(pickednum >= 45) + new /obj/item/stack/material/diamond(src, rand(rare_min, rare_max)) - //Jetpack (You hit the jackpot!) - if(pickednum == 50) - new /obj/item/tank/jetpack/carbondioxide(src) + //Jetpack (You hit the jackpot!) + if(pickednum == 50) + new /obj/item/tank/jetpack/carbondioxide(src) - return + return /obj/structure/closet/syndicate/resources/everything desc = "It's an emergency storage closet for repairs." - fill() - var/list/resources = list( - /obj/item/stack/material/steel, - /obj/item/stack/material/glass, - /obj/item/stack/material/gold, - /obj/item/stack/material/silver, - /obj/item/stack/material/phoron, - /obj/item/stack/material/uranium, - /obj/item/stack/material/diamond, - /obj/item/stack/material/plasteel, - /obj/item/stack/rods - ) +/obj/structure/closet/syndicate/resources/everything/fill() + var/list/resources = list( + /obj/item/stack/material/steel, + /obj/item/stack/material/glass, + /obj/item/stack/material/gold, + /obj/item/stack/material/silver, + /obj/item/stack/material/phoron, + /obj/item/stack/material/uranium, + /obj/item/stack/material/diamond, + /obj/item/stack/material/plasteel, + /obj/item/stack/rods + ) - for(var/i = 0, i<2, i++) - for(var/res in resources) - var/obj/item/stack/R = new res(src) - R.amount = R.max_amount + for(var/i = 0, i<2, i++) + for(var/res in resources) + var/obj/item/stack/R = new res(src) + R.amount = R.max_amount diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 4c5d67fe30c..cb5946c8b3d 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -311,18 +311,18 @@ var/target_temp = T0C - 40 var/cooling_power = 40 - return_air() - var/datum/gas_mixture/gas = (..()) - if(!gas) return null - var/datum/gas_mixture/newgas = new/datum/gas_mixture() - newgas.copy_from(gas) - if(newgas.temperature <= target_temp) return +/obj/structure/closet/crate/freezer/return_air() + var/datum/gas_mixture/gas = (..()) + if(!gas) return null + var/datum/gas_mixture/newgas = new/datum/gas_mixture() + newgas.copy_from(gas) + if(newgas.temperature <= target_temp) return - if((newgas.temperature - cooling_power) > target_temp) - newgas.temperature -= cooling_power - else - newgas.temperature = target_temp - return newgas + if((newgas.temperature - cooling_power) > target_temp) + newgas.temperature -= cooling_power + else + newgas.temperature = target_temp + return newgas /obj/structure/closet/crate/freezer/rations //For use in the escape shuttle name = "emergency rations" @@ -507,17 +507,17 @@ icon_state = "hydro_crate" /obj/structure/closet/crate/hydroponics/prespawned - //This exists so the prespawned hydro crates spawn with their contents. - fill() - new /obj/item/reagent_containers/spray/plantbgone(src) - new /obj/item/reagent_containers/spray/plantbgone(src) - new /obj/item/material/minihoe(src) -// new /obj/item/weedspray(src) -// new /obj/item/weedspray(src) -// new /obj/item/pestspray(src) -// new /obj/item/pestspray(src) -// new /obj/item/pestspray(src) +//This exists so the prespawned hydro crates spawn with their contents. +/obj/structure/closet/crate/hydroponics/prespawned/fill() + new /obj/item/reagent_containers/spray/plantbgone(src) + new /obj/item/reagent_containers/spray/plantbgone(src) + new /obj/item/material/minihoe(src) +// new /obj/item/weedspray(src) +// new /obj/item/weedspray(src) +// new /obj/item/pestspray(src) +// new /obj/item/pestspray(src) +// new /obj/item/pestspray(src) diff --git a/code/game/objects/structures/grille.dm b/code/game/objects/structures/grille.dm index b43d3dc9772..d8f4b3394b0 100644 --- a/code/game/objects/structures/grille.dm +++ b/code/game/objects/structures/grille.dm @@ -244,10 +244,11 @@ destroyed = 1 icon_state = "grille-b" density = 0 - New() - ..() - health = rand(-5, -1) //In the destroyed but not utterly threshold. - healthcheck() //Send this to healthcheck just in case we want to do something else with it. + +/obj/structure/grille/broken/New() + ..() + health = rand(-5, -1) //In the destroyed but not utterly threshold. + healthcheck() //Send this to healthcheck just in case we want to do something else with it. /obj/structure/grille/diagonal icon_state = "grille_diagonal" diff --git a/code/game/objects/structures/windoor_assembly.dm b/code/game/objects/structures/windoor_assembly.dm index ea40c9ce574..157480aa55d 100644 --- a/code/game/objects/structures/windoor_assembly.dm +++ b/code/game/objects/structures/windoor_assembly.dm @@ -9,7 +9,7 @@ */ -obj/structure/windoor_assembly +/obj/structure/windoor_assembly name = "windoor assembly" icon = 'icons/obj/doors/windoor.dmi' icon_state = "l_windoor_assembly01" @@ -40,7 +40,7 @@ obj/structure/windoor_assembly update_nearby_tiles(need_rebuild=1) -obj/structure/windoor_assembly/Destroy() +/obj/structure/windoor_assembly/Destroy() density = 0 update_nearby_tiles() return ..() diff --git a/code/game/periodic_news.dm b/code/game/periodic_news.dm index eda911f93ca..a89a877eb32 100644 --- a/code/game/periodic_news.dm +++ b/code/game/periodic_news.dm @@ -2,133 +2,122 @@ // Uses BYOND's type system to put everything into a nice format /datum/news_announcement - var - round_time // time of the round at which this should be announced, in seconds - message // body of the message - author = "NanoTrasen Editor" - channel_name = "Tau Ceti Daily" - can_be_redacted = 0 - message_type = "Story" + /// time of the round at which this should be announced, in seconds + var/round_time + /// body of the message + var/message + var/author = "NanoTrasen Editor" + var/channel_name = "Tau Ceti Daily" + var/can_be_redacted = 0 + var/message_type = "Story" - revolution_inciting_event +/datum/news_announcement/revolution_inciting_event/paycuts_suspicion + round_time = 60*10 + message = {"Reports have leaked that NanoTrasen is planning to put paycuts into + effect on many of its Research Stations in Tau Ceti. Apparently these research + stations haven't been able to yield the expected revenue, and thus adjustments + have to be made."} + author = "Unauthorized" - paycuts_suspicion - round_time = 60*10 - message = {"Reports have leaked that NanoTrasen is planning to put paycuts into - effect on many of its Research Stations in Tau Ceti. Apparently these research - stations haven't been able to yield the expected revenue, and thus adjustments - have to be made."} - author = "Unauthorized" +/datum/news_announcement/revolution_inciting_event/paycuts_confirmation + round_time = 60*40 + message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have + been confirmed. Shockingly, however, the cuts will only affect lower tier + personnel. Heads of Staff will, according to our sources, not be affected."} + author = "Unauthorized" - paycuts_confirmation - round_time = 60*40 - message = {"Earlier rumours about paycuts on Research Stations in the Tau Ceti system have - been confirmed. Shockingly, however, the cuts will only affect lower tier - personnel. Heads of Staff will, according to our sources, not be affected."} - author = "Unauthorized" +/datum/news_announcement/revolution_inciting_event/human_experiments + round_time = 60*90 + message = {"Unbelievable reports about human experimentation have reached our ears. According + to a refugee from one of the Tau Ceti Research Stations, their station, in order + to increase revenue, has refactored several of their facilities to perform experiments + on live humans, including virology research, genetic manipulation, and \"feeding them + to the slimes to see what happens\". Allegedly, these test subjects were neither + humanified monkeys nor volunteers, but rather unqualified staff that were forced into + the experiments, and reported to have died in a \"work accident\" by NanoTrasen."} + author = "Unauthorized" +/datum/news_announcement/bluespace_research/announcement + round_time = 60*20 + message = {"The new field of research trying to explain several interesting spacetime oddities, + also known as \"Bluespace Research\", has reached new heights. Of the several + hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped + to experiment with and research Bluespace effects. Rumours have it some of these + stations even sport functional \"travel gates\" that can instantly move a whole research + team to an alternate reality."} +/datum/news_announcement/random_junk/cheesy_honkers + author = "Editor Carl Ritz" + channel_name = "The Gibson Gazette" + message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations + say so!"} + round_time = 60 * 15 - human_experiments - round_time = 60*90 - message = {"Unbelievable reports about human experimentation have reached our ears. According - to a refugee from one of the Tau Ceti Research Stations, their station, in order - to increase revenue, has refactored several of their facilities to perform experiments - on live humans, including virology research, genetic manipulation, and \"feeding them - to the slimes to see what happens\". Allegedly, these test subjects were neither - humanified monkeys nor volunteers, but rather unqualified staff that were forced into - the experiments, and reported to have died in a \"work accident\" by NanoTrasen."} - author = "Unauthorized" +/datum/news_announcement/random_junk/net_block + author = "Editor Carl Ritz" + channel_name = "The Gibson Gazette" + message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators + claiming violation of net laws."} + round_time = 60 * 50 - bluespace_research +/datum/news_announcement/random_junk/found_ssd + channel_name = "Tau Ceti Daily" + author = "Doctor Eric Hanfield" - announcement - round_time = 60*20 - message = {"The new field of research trying to explain several interesting spacetime oddities, - also known as \"Bluespace Research\", has reached new heights. Of the several - hundred space stations now orbiting in Tau Ceti, fifteen are now specially equipped - to experiment with and research Bluespace effects. Rumours have it some of these - stations even sport functional \"travel gates\" that can instantly move a whole research - team to an alternate reality."} + message = {"Several people have been found unconscious at their terminals. It is thought that it was due + to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage + reveals that many of them were playing games instead of working and their pay has been docked + accordingly."} + round_time = 60 * 90 - random_junk +/datum/news_announcement/lotus_tree/explosions + channel_name = "Tau Ceti Daily" + author = "Reporter Leland H. Howards" - cheesy_honkers - author = "Editor Carl Ritz" - channel_name = "The Gibson Gazette" - message = {"Do cheesy honkers increase risk of having a miscarriage? Several health administrations - say so!"} - round_time = 60 * 15 + message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the + bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of + the explosions remain unknown, but there is speculation that it might have something to do with + the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L + announced that they were officially acknowledging inter-species marriage and providing couples + with marriage tax-benefits."} + round_time = 60 * 30 - net_block - author = "Editor Carl Ritz" - channel_name = "The Gibson Gazette" - message = {"Several corporations banding together to block access to 'wetskrell.nt', site administrators - claiming violation of net laws."} - round_time = 60 * 50 +/datum/news_announcement/food_riots/breaking_news + channel_name = "Tau Ceti Daily" + author = "Reporter Ro'kii Ar-Raqis" - found_ssd - channel_name = "Tau Ceti Daily" - author = "Doctor Eric Hanfield" + message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae + Lupus system. This comes only hours after NanoTrasen officials announced they will no longer trade with the + colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to + continue. NanoTrasen officials have not given any details about said factions. More on that at the top of + the hour."} + round_time = 60 * 10 - message = {"Several people have been found unconscious at their terminals. It is thought that it was due - to a lack of sleep or of simply migraines from staring at the screen too long. Camera footage - reveals that many of them were playing games instead of working and their pay has been docked - accordingly."} - round_time = 60 * 90 +/datum/news_announcement/food_riots/more + channel_name = "Tau Ceti Daily" + author = "Reporter Ro'kii Ar-Raqis" - lotus_tree - - explosions - channel_name = "Tau Ceti Daily" - author = "Reporter Leland H. Howards" - - message = {"The newly-christened civillian transport Lotus Tree suffered two very large explosions near the - bridge today, and there are unconfirmed reports that the death toll has passed 50. The cause of - the explosions remain unknown, but there is speculation that it might have something to do with - the recent change of regulation in the Moore-Lee Corporation, a major funder of the ship, when M-L - announced that they were officially acknowledging inter-species marriage and providing couples - with marriage tax-benefits."} - round_time = 60 * 30 - - food_riots - - breaking_news - channel_name = "Tau Ceti Daily" - author = "Reporter Ro'kii Ar-Raqis" - - message = {"Breaking news: Food riots have broken out throughout the Refuge asteroid colony in the Tenebrae - Lupus system. This comes only hours after NanoTrasen officials announced they will no longer trade with the - colony, citing the increased presence of \"hostile factions\" on the colony has made trade too dangerous to - continue. NanoTrasen officials have not given any details about said factions. More on that at the top of - the hour."} - round_time = 60 * 10 - - more - channel_name = "Tau Ceti Daily" - author = "Reporter Ro'kii Ar-Raqis" - - message = {"More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from - the colony, claiming \"there has been no increase in anti-NanoTrasen activity\", and \"\[the only] reason - NanoTrasen withdrew was because the \[Tenebrae Lupus] system's Phoron deposits have been completely mined out. - We have little to trade with them now\". NanoTrasen officials have denied these allegations, calling them - \"further proof\" of the colony's anti-NanoTrasen stance. Meanwhile, Refuge Security has been unable to quell - the riots. More on this at 6."} - round_time = 60 * 60 + message = {"More on the Refuge food riots: The Refuge Council has condemned NanoTrasen's withdrawal from + the colony, claiming \"there has been no increase in anti-NanoTrasen activity\", and \"\[the only] reason + NanoTrasen withdrew was because the \[Tenebrae Lupus] system's Phoron deposits have been completely mined out. + We have little to trade with them now\". NanoTrasen officials have denied these allegations, calling them + \"further proof\" of the colony's anti-NanoTrasen stance. Meanwhile, Refuge Security has been unable to quell + the riots. More on this at 6."} + round_time = 60 * 60 var/global/list/newscaster_standard_feeds = list(/datum/news_announcement/bluespace_research, /datum/news_announcement/lotus_tree, /datum/news_announcement/random_junk, /datum/news_announcement/food_riots) -proc/process_newscaster() +/proc/process_newscaster() check_for_newscaster_updates(SSticker.mode.newscaster_announcements) var/global/tmp/announced_news_types = list() -proc/check_for_newscaster_updates(type) +/proc/check_for_newscaster_updates(type) for(var/subtype in typesof(type)-type) var/datum/news_announcement/news = new subtype() if(news.round_time * 10 <= world.time && !(subtype in announced_news_types)) announced_news_types += subtype announce_newscaster_news(news) -proc/announce_newscaster_news(datum/news_announcement/news) +/proc/announce_newscaster_news(datum/news_announcement/news) var/datum/feed_channel/sendto = SSnews.GetFeedChannel(news.channel_name) if(!sendto) SSnews.CreateFeedChannel(news.channel_name, news.author, 1, 1) diff --git a/code/game/shuttle_engines.dm b/code/game/shuttle_engines.dm index a2a34e56e52..d81a38c6841 100644 --- a/code/game/shuttle_engines.dm +++ b/code/game/shuttle_engines.dm @@ -12,9 +12,9 @@ anchored = 1 atmos_canpass = CANPASS_NEVER - CanPass(atom/movable/mover, turf/target, height, air_group) - if(!height || air_group) return 0 - else return ..() +/obj/structure/shuttle/window/CanPass(atom/movable/mover, turf/target, height, air_group) + if(!height || air_group) return 0 + else return ..() /obj/structure/shuttle/engine name = "engine" diff --git a/code/js/byjax.dm b/code/js/byjax.dm index 9a7dc651715..a7949d18570 100644 --- a/code/js/byjax.dm +++ b/code/js/byjax.dm @@ -34,7 +34,7 @@ callback_args - arguments for callback function Be sure to include required js functions in your page, or it'll raise an exception. */ -proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) +/proc/send_byjax(receiver, control_id, target_element, new_content=null, callback=null, list/callback_args=null) if(receiver && target_element && control_id) // && winexists(receiver, control_id)) var/list/argums = list(target_element, new_content) if(callback) diff --git a/code/modules/admin/IsBanned.dm b/code/modules/admin/IsBanned.dm index 234bd3466a0..e4ad72b0432 100644 --- a/code/modules/admin/IsBanned.dm +++ b/code/modules/admin/IsBanned.dm @@ -3,7 +3,7 @@ #define STICKYBAN_MAX_ADMIN_MATCHES 1 //Blocks an attempt to connect before even creating our client datum thing. -world/IsBanned(key, address, computer_id, type, real_bans_only = FALSE) +/world/IsBanned(key, address, computer_id, type, real_bans_only = FALSE) if (type == "world") return ..() diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 233a6df78c8..0541d23093d 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -28,7 +28,7 @@ var/global/enabled_spooking = 0 var/msg = rendered to_chat(C, msg) -proc/admin_notice(var/message, var/rights) +/proc/admin_notice(var/message, var/rights) for(var/mob/M in mob_list) if(check_rights(rights, 0, M)) to_chat(M, message) diff --git a/code/modules/admin/admin_attack_log.dm b/code/modules/admin/admin_attack_log.dm index a5b7556c5b0..e74f2328714 100644 --- a/code/modules/admin/admin_attack_log.dm +++ b/code/modules/admin/admin_attack_log.dm @@ -2,7 +2,7 @@ /mob/var/mob/lastattacked = null /mob/var/attack_log = list() -proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location) +/proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/location) var/turf/T = location ? location : (user ? get_turf(user) : null) if(T) message = message + " (JMP)" @@ -10,7 +10,7 @@ proc/log_and_message_admins(var/message as text, var/mob/user = usr, var/turf/lo log_admin(user ? "[key_name(user)] [message]" : "EVENT [message]") message_admins(user ? "[key_name_admin(user)] [message]" : "EVENT [message]") -proc/log_and_message_admins_many(var/list/mob/users, var/message) +/proc/log_and_message_admins_many(var/list/mob/users, var/message) if(!users || !users.len) return @@ -21,7 +21,7 @@ proc/log_and_message_admins_many(var/list/mob/users, var/message) log_admin("[english_list(user_keys)] [message]") message_admins("[english_list(user_keys)] [message]") -proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message) +/proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, var/victim_message, var/admin_message) var/jmp_link = "" if(victim) victim.attack_log += text("\[[time_stamp()]\] [key_name(attacker)] - [victim_message]") @@ -32,14 +32,14 @@ proc/admin_attack_log(var/mob/attacker, var/mob/victim, var/attacker_message, va msg_admin_attack("[attacker ? key_name_admin(attacker) : ""] [admin_message] [victim ? key_name_admin(victim) : ""] (INTENT: [attacker? uppertext(attacker.a_intent) : "N/A"])[jmp_link]",ckey=key_name(attacker),ckey_target=key_name(victim)) -proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var/attacker_message, var/victim_message, var/admin_message) +/proc/admin_attacker_log_many_victims(var/mob/attacker, var/list/mob/victims, var/attacker_message, var/victim_message, var/admin_message) if(!victims || !victims.len) return for(var/mob/victim in victims) admin_attack_log(attacker, victim, attacker_message, victim_message, admin_message) -proc/admin_inject_log(mob/attacker, mob/victim, obj/item/I, reagents, temperature, amount_transferred, violent=0) +/proc/admin_inject_log(mob/attacker, mob/victim, obj/item/I, reagents, temperature, amount_transferred, violent=0) if(violent) violent = "violently " else diff --git a/code/modules/admin/holder2.dm b/code/modules/admin/holder2.dm index 9a30f38c262..864feaa57d3 100644 --- a/code/modules/admin/holder2.dm +++ b/code/modules/admin/holder2.dm @@ -73,7 +73,7 @@ if rights_required == 0, then it simply checks if they are an admin. if it doesn't return 1 and show_msg=1 it will prints a message explaining why the check has failed generally it would be used like so: -proc/admin_proc() +/proc/admin_proc() if(!check_rights(R_ADMIN)) return to_world("you have enough rights!") diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index fc52ae6f8dc..3a1fad46bda 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1468,13 +1468,13 @@ access_control_topic(href_list["access_control"]) return -mob/living/proc/can_centcom_reply() +/mob/living/proc/can_centcom_reply() return 0 -mob/living/carbon/human/can_centcom_reply() +/mob/living/carbon/human/can_centcom_reply() return istype(l_ear, /obj/item/device/radio/headset) || istype(r_ear, /obj/item/device/radio/headset) -mob/living/silicon/ai/can_centcom_reply() +/mob/living/silicon/ai/can_centcom_reply() return common_radio != null && !check_unable(2) /client/proc/extra_admin_link() diff --git a/code/modules/admin/verbs/SDQL_2_parser.dm b/code/modules/admin/verbs/SDQL_2_parser.dm index 59c5b390db1..040a555267f 100644 --- a/code/modules/admin/verbs/SDQL_2_parser.dm +++ b/code/modules/admin/verbs/SDQL_2_parser.dm @@ -98,332 +98,362 @@ -/datum/SDQL_parser/proc - //query: select_query | delete_query | update_query - query(i, list/node) - query_type = tokenl(i) +/datum/SDQL_parser/proc/query(i, list/node) + query_type = tokenl(i) - switch(query_type) - if("select") - select_query(i, node) + switch(query_type) + if("select") + select_query(i, node) - if("delete") - delete_query(i, node) + if("delete") + delete_query(i, node) - if("update") - update_query(i, node) + if("update") + update_query(i, node) - if("call") - call_query(i, node) + if("call") + call_query(i, node) - if("explain") - node += "explain" - node["explain"] = list() - query(i + 1, node["explain"]) + if("explain") + node += "explain" + node["explain"] = list() + query(i + 1, node["explain"]) // select_query: 'SELECT' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] - select_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) +/datum/SDQL_parser/proc/select_query(i, list/node) + var/list/select = list() + i = select_list(i + 1, select) - node += "select" - node["select"] = select + node += "select" + node["select"] = select - var/list/from = list() - if(tokenl(i) in list("from", "in")) - i = from_list(i + 1, from) - else - from += "world" + var/list/from = list() + if(tokenl(i) in list("from", "in")) + i = from_list(i + 1, from) + else + from += "world" - node += "from" - node["from"] = from + node += "from" + node["from"] = from - if(tokenl(i) == "where") - var/list/where = list() - i = bool_expression(i + 1, where) + if(tokenl(i) == "where") + var/list/where = list() + i = bool_expression(i + 1, where) - node += "where" - node["where"] = where + node += "where" + node["where"] = where - return i + return i //delete_query: 'DELETE' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression] - delete_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) +/datum/SDQL_parser/proc/delete_query(i, list/node) + var/list/select = list() + i = select_list(i + 1, select) - node += "delete" - node["delete"] = select + node += "delete" + node["delete"] = select - var/list/from = list() - if(tokenl(i) in list("from", "in")) - i = from_list(i + 1, from) - else - from += "world" + var/list/from = list() + if(tokenl(i) in list("from", "in")) + i = from_list(i + 1, from) + else + from += "world" - node += "from" - node["from"] = from + node += "from" + node["from"] = from - if(tokenl(i) == "where") - var/list/where = list() - i = bool_expression(i + 1, where) + if(tokenl(i) == "where") + var/list/where = list() + i = bool_expression(i + 1, where) - node += "where" - node["where"] = where + node += "where" + node["where"] = where - return i + return i //update_query: 'UPDATE' select_list [('FROM' | 'IN') from_list] 'SET' assignments ['WHERE' bool_expression] - update_query(i, list/node) - var/list/select = list() - i = select_list(i + 1, select) +/datum/SDQL_parser/proc/update_query(i, list/node) + var/list/select = list() + i = select_list(i + 1, select) - node += "update" - node["update"] = select + node += "update" + node["update"] = select - var/list/from = list() - if(tokenl(i) in list("from", "in")) - i = from_list(i + 1, from) - else - from += "world" + var/list/from = list() + if(tokenl(i) in list("from", "in")) + i = from_list(i + 1, from) + else + from += "world" - node += "from" - node["from"] = from + node += "from" + node["from"] = from - if(tokenl(i) != "set") - i = parse_error("UPDATE has misplaced SET") + if(tokenl(i) != "set") + i = parse_error("UPDATE has misplaced SET") - var/list/set_assignments = list() - i = assignments(i + 1, set_assignments) + var/list/set_assignments = list() + i = assignments(i + 1, set_assignments) - node += "set" - node["set"] = set_assignments + node += "set" + node["set"] = set_assignments - if(tokenl(i) == "where") - var/list/where = list() - i = bool_expression(i + 1, where) + if(tokenl(i) == "where") + var/list/where = list() + i = bool_expression(i + 1, where) - node += "where" - node["where"] = where + node += "where" + node["where"] = where - return i + return i //call_query: 'CALL' call_function ['ON' select_list [('FROM' | 'IN') from_list] ['WHERE' bool_expression]] - call_query(i, list/node) - var/list/func = list() - i = call_function(i + 1, func) +/datum/SDQL_parser/proc/call_query(i, list/node) + var/list/func = list() + i = call_function(i + 1, func) - node += "call" - node["call"] = func - - if(tokenl(i) != "on") - return i - - var/list/select = list() - i = select_list(i + 1, select) - - node += "on" - node["on"] = select - - var/list/from = list() - if(tokenl(i) in list("from", "in")) - i = from_list(i + 1, from) - else - from += "world" - - node += "from" - node["from"] = from - - if(tokenl(i) == "where") - var/list/where = list() - i = bool_expression(i + 1, where) - - node += "where" - node["where"] = where + node += "call" + node["call"] = func + if(tokenl(i) != "on") return i + var/list/select = list() + i = select_list(i + 1, select) + + node += "on" + node["on"] = select + + var/list/from = list() + if(tokenl(i) in list("from", "in")) + i = from_list(i + 1, from) + else + from += "world" + + node += "from" + node["from"] = from + + if(tokenl(i) == "where") + var/list/where = list() + i = bool_expression(i + 1, where) + + node += "where" + node["where"] = where + + return i + //select_list: select_item [',' select_list] - select_list(i, list/node) - i = select_item(i, node) +/datum/SDQL_parser/proc/select_list(i, list/node) + i = select_item(i, node) - if(token(i) == ",") - i = select_list(i + 1, node) + if(token(i) == ",") + i = select_list(i + 1, node) - return i + return i //from_list: from_item [',' from_list] - from_list(i, list/node) - i = from_item(i, node) +/datum/SDQL_parser/proc/from_list(i, list/node) + i = from_item(i, node) - if(token(i) == ",") - i = from_list(i + 1, node) + if(token(i) == ",") + i = from_list(i + 1, node) - return i + return i //assignments: assignment, [',' assignments] - assignments(i, list/node) - i = assignment(i, node) +/datum/SDQL_parser/proc/assignments(i, list/node) + i = assignment(i, node) - if(token(i) == ",") - i = assignments(i + 1, node) + if(token(i) == ",") + i = assignments(i + 1, node) - return i + return i //select_item: '*' | select_function | object_type - select_item(i, list/node) +/datum/SDQL_parser/proc/select_item(i, list/node) + if(token(i) == "*") + node += "*" + i++ - if(token(i) == "*") - node += "*" - i++ + else if(tokenl(i) in select_functions) + i = select_function(i, node) - else if(tokenl(i) in select_functions) - i = select_function(i, node) + else + i = object_type(i, node) - else - i = object_type(i, node) - - return i + return i //from_item: 'world' | object_type - from_item(i, list/node) +/datum/SDQL_parser/proc/from_item(i, list/node) + if(token(i) == "world") + node += "world" + i++ - if(token(i) == "world") - node += "world" - i++ + else + i = object_type(i, node) - else - i = object_type(i, node) - - return i + return i //bool_expression: expression [bool_operator bool_expression] - bool_expression(i, list/node) +/datum/SDQL_parser/proc/bool_expression(i, list/node) + var/list/bool = list() + i = expression(i, bool) - var/list/bool = list() - i = expression(i, bool) + node[++node.len] = bool - node[++node.len] = bool + if(tokenl(i) in boolean_operators) + i = bool_operator(i, node) + i = bool_expression(i, node) - if(tokenl(i) in boolean_operators) - i = bool_operator(i, node) - i = bool_expression(i, node) - - return i + return i //assignment: '=' expression - assignment(i, list/node) +/datum/SDQL_parser/proc/assignment(i, list/node) + node += token(i) - node += token(i) + if(token(i + 1) == "=") + var/varname = token(i) + node[varname] = list() - if(token(i + 1) == "=") - var/varname = token(i) - node[varname] = list() + i = expression(i + 2, node[varname]) - i = expression(i + 2, node[varname]) + else + parse_error("Assignment expected, but no = found") - else - parse_error("Assignment expected, but no = found") - - return i + return i //variable: | '.' variable - variable(i, list/node) - var/list/L = list(token(i)) - node[++node.len] = L +/datum/SDQL_parser/proc/variable(i, list/node) + var/list/L = list(token(i)) + node[++node.len] = L - if(token(i + 1) == ".") - L += "." - i = variable(i + 2, L) + if(token(i + 1) == ".") + L += "." + i = variable(i + 2, L) + + else + i++ + + return i + + +//object_type: | string +/datum/SDQL_parser/proc/object_type(i, list/node) + if(copytext(token(i), 1, 2) == "/") + node += token(i) + + else + i = string(i, node) + + return i + 1 + + +//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' +/datum/SDQL_parser/proc/comparitor(i, list/node) + if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">=")) + node += token(i) + + else + parse_error("Unknown comparitor [token(i)]") + + return i + 1 + + +//bool_operator: 'AND' | '&&' | 'OR' | '||' +/datum/SDQL_parser/proc/bool_operator(i, list/node) + if(tokenl(i) in list("and", "or", "&&", "||")) + node += token(i) + + else + parse_error("Unknown comparitor [token(i)]") + + return i + 1 + + +//string: ''' ''' | '"' '"' +/datum/SDQL_parser/proc/string(i, list/node) + if(copytext(token(i), 1, 2) in list("'", "\"")) + node += token(i) + + else + parse_error("Expected string but found '[token(i)]'") + + return i + 1 + + +//call_function: ['(' [arguments] ')'] +/datum/SDQL_parser/proc/call_function(i, list/node) + parse_error("Sorry, function calls aren't available yet") + + return i + + +//select_function: count_function +/datum/SDQL_parser/proc/select_function(i, list/node) + parse_error("Sorry, function calls aren't available yet") + + return i + + +//expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression] +/datum/SDQL_parser/proc/expression(i, list/node) + if(token(i) in unary_operators) + i = unary_expression(i, node) + + else if(token(i) == "(") + var/list/expr = list() + + i = expression(i + 1, expr) + + if(token(i) != ")") + parse_error("Missing ) at end of expression.") else i++ - return i + node[++node.len] = expr + + else + i = value(i, node) + + if(token(i) in binary_operators) + i = binary_operator(i, node) + i = expression(i, node) + + else if(token(i) in comparitors) + i = binary_operator(i, node) + + var/list/rhs = list() + i = expression(i, rhs) + + node[++node.len] = rhs -//object_type: | string - object_type(i, list/node) - - if(copytext(token(i), 1, 2) == "/") - node += token(i) - - else - i = string(i, node) - - return i + 1 + return i -//comparitor: '=' | '==' | '!=' | '<>' | '<' | '<=' | '>' | '>=' - comparitor(i, list/node) +//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' ) +/datum/SDQL_parser/proc/unary_expression(i, list/node) + if(token(i) in unary_operators) + var/list/unary_exp = list() - if(token(i) in list("=", "==", "!=", "<>", "<", "<=", ">", ">=")) - node += token(i) - - else - parse_error("Unknown comparitor [token(i)]") - - return i + 1 - - -//bool_operator: 'AND' | '&&' | 'OR' | '||' - bool_operator(i, list/node) - - if(tokenl(i) in list("and", "or", "&&", "||")) - node += token(i) - - else - parse_error("Unknown comparitor [token(i)]") - - return i + 1 - - -//string: ''' ''' | '"' '"' - string(i, list/node) - - if(copytext(token(i), 1, 2) in list("'", "\"")) - node += token(i) - - else - parse_error("Expected string but found '[token(i)]'") - - return i + 1 - - -//call_function: ['(' [arguments] ')'] - call_function(i, list/node) - - parse_error("Sorry, function calls aren't available yet") - - return i - - -//select_function: count_function - select_function(i, list/node) - - parse_error("Sorry, function calls aren't available yet") - - return i - - -//expression: ( unary_expression | '(' expression ')' | value ) [binary_operator expression] - expression(i, list/node) + unary_exp += token(i) + i++ if(token(i) in unary_operators) - i = unary_expression(i, node) + i = unary_expression(i, unary_exp) else if(token(i) == "(") var/list/expr = list() @@ -436,96 +466,50 @@ else i++ - node[++node.len] = expr + unary_exp[++unary_exp.len] = expr else - i = value(i, node) + i = value(i, unary_exp) - if(token(i) in binary_operators) - i = binary_operator(i, node) - i = expression(i, node) - - else if(token(i) in comparitors) - i = binary_operator(i, node) - - var/list/rhs = list() - i = expression(i, rhs) - - node[++node.len] = rhs + node[++node.len] = unary_exp - return i + else + parse_error("Expected unary operator but found '[token(i)]'") - -//unary_expression: unary_operator ( unary_expression | value | '(' expression ')' ) - unary_expression(i, list/node) - - if(token(i) in unary_operators) - var/list/unary_exp = list() - - unary_exp += token(i) - i++ - - if(token(i) in unary_operators) - i = unary_expression(i, unary_exp) - - else if(token(i) == "(") - var/list/expr = list() - - i = expression(i + 1, expr) - - if(token(i) != ")") - parse_error("Missing ) at end of expression.") - - else - i++ - - unary_exp[++unary_exp.len] = expr - - else - i = value(i, unary_exp) - - node[++node.len] = unary_exp - - - else - parse_error("Expected unary operator but found '[token(i)]'") - - return i + return i //binary_operator: comparitor | '+' | '-' | '/' | '*' | '&' | '|' | '^' - binary_operator(i, list/node) +/datum/SDQL_parser/proc/binary_operator(i, list/node) + if(token(i) in (binary_operators + comparitors)) + node += token(i) - if(token(i) in (binary_operators + comparitors)) - node += token(i) + else + parse_error("Unknown binary operator [token(i)]") - else - parse_error("Unknown binary operator [token(i)]") - - return i + 1 + return i + 1 //value: variable | string | number | 'null' - value(i, list/node) +/datum/SDQL_parser/proc/value(i, list/node) + if(token(i) == "null") + node += "null" + i++ - if(token(i) == "null") - node += "null" - i++ + else if(isnum(text2num(token(i)))) + node += text2num(token(i)) + i++ - else if(isnum(text2num(token(i)))) - node += text2num(token(i)) - i++ + else if(copytext(token(i), 1, 2) in list("'", "\"")) + i = string(i, node) - else if(copytext(token(i), 1, 2) in list("'", "\"")) - i = string(i, node) + else + i = variable(i, node) - else - i = variable(i, node) - - return i + return i -/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/ \ No newline at end of file +/*EXPLAIN SELECT * WHERE 42 = 6 * 9 OR val = - 5 == 7*/ diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 95e080ef27f..e29af79bd86 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -26,9 +26,9 @@ var/intercom_range_display_status = 0 icon = 'icons/480x480.dmi' icon_state = "25percent" - New() - src.pixel_x = -224 - src.pixel_y = -224 +/obj/effect/debugging/camera_range/New() + src.pixel_x = -224 + src.pixel_y = -224 /obj/effect/debugging/marker icon = 'icons/turf/areas.dmi' diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 896ff601bd1..de92bdb8fa0 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -157,7 +157,7 @@ feedback_add_details("admin_verb","GOD") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) +/proc/cmd_admin_mute(mob/M as mob, mute_type, automute = 0) if(automute) if(!config.automute_on) return else @@ -231,7 +231,7 @@ Allow admins to set players to be able to respawn/bypass 30 min wait, without th Ccomp's first proc. */ -proc/get_ghosts(var/notify = 0,var/what = 2, var/client/C = null) +/proc/get_ghosts(var/notify = 0,var/what = 2, var/client/C = null) // what = 1, return ghosts ass list. // what = 2, return mob list diff --git a/code/modules/atmospherics/atmospherics.dm b/code/modules/atmospherics/atmospherics.dm index c0833310d58..4c0b5b1218b 100644 --- a/code/modules/atmospherics/atmospherics.dm +++ b/code/modules/atmospherics/atmospherics.dm @@ -77,7 +77,7 @@ Pipelines + Other Objects -> Pipe network else return 0 -obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/atmos1, obj/machinery/atmospherics/atmos2) +/obj/machinery/atmospherics/proc/check_connect_types(obj/machinery/atmospherics/atmos1, obj/machinery/atmospherics/atmos2) return (atmos1.connect_types & atmos2.connect_types) /obj/machinery/atmospherics/proc/check_connect_types_construction(obj/machinery/atmospherics/atmos1, obj/item/pipe/pipe2) diff --git a/code/modules/atmospherics/components/unary/heat_exchanger.dm b/code/modules/atmospherics/components/unary/heat_exchanger.dm index 30899232512..d31e31d5921 100644 --- a/code/modules/atmospherics/components/unary/heat_exchanger.dm +++ b/code/modules/atmospherics/components/unary/heat_exchanger.dm @@ -85,4 +85,4 @@ "You hear a ratchet." ) new /obj/item/pipe(loc, make_from=src) - qdel(src) \ No newline at end of file + qdel(src) diff --git a/code/modules/atmospherics/components/unary/unary_base.dm b/code/modules/atmospherics/components/unary/unary_base.dm index 1f232b1213a..e383919727b 100644 --- a/code/modules/atmospherics/components/unary/unary_base.dm +++ b/code/modules/atmospherics/components/unary/unary_base.dm @@ -9,87 +9,87 @@ var/datum/pipe_network/network - Initialize() - initialize_directions = dir - air_contents = new - air_contents.volume = 200 - . = ..() +/obj/machinery/atmospherics/unary/Initialize() + initialize_directions = dir + air_contents = new + air_contents.volume = 200 + . = ..() // Housekeeping and pipe network stuff below - network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) - if(reference == node) - network = new_network +/obj/machinery/atmospherics/unary/network_expand(datum/pipe_network/new_network, obj/machinery/atmospherics/pipe/reference) + if(reference == node) + network = new_network - if(new_network.normal_members.Find(src)) - return 0 + if(new_network.normal_members.Find(src)) + return 0 - new_network.normal_members += src + new_network.normal_members += src - return null + return null - Destroy() - QDEL_NULL(air_contents) +/obj/machinery/atmospherics/unary/Destroy() + QDEL_NULL(air_contents) - if(node) - node.disconnect(src) - QDEL_NULL(network) + if(node) + node.disconnect(src) + QDEL_NULL(network) + node = null + + return ..() + +/obj/machinery/atmospherics/unary/atmos_init() + if(node) return + + var/node_connect = dir + + for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) + if(target.initialize_directions & get_dir(target,src)) + if (check_connect_types(target,src)) + node = target + break + + update_icon() + update_underlays() + +/obj/machinery/atmospherics/unary/build_network() + if(!network && node) + network = new /datum/pipe_network() + network.normal_members += src + network.build_network(node, src) + + +/obj/machinery/atmospherics/unary/return_network(obj/machinery/atmospherics/reference) + build_network() + + if(reference==node) + return network + + return null + +/obj/machinery/atmospherics/unary/reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) + if(network == old_network) + network = new_network + + return 1 + +/obj/machinery/atmospherics/unary/return_network_air(datum/pipe_network/reference) + var/list/results = list() + + if(network == reference) + results += air_contents + + return results + +/obj/machinery/atmospherics/unary/disconnect(obj/machinery/atmospherics/reference) + if(reference==node) + qdel(network) node = null - return ..() + update_icon() + update_underlays() - atmos_init() - if(node) return - - var/node_connect = dir - - for(var/obj/machinery/atmospherics/target in get_step(src,node_connect)) - if(target.initialize_directions & get_dir(target,src)) - if (check_connect_types(target,src)) - node = target - break - - update_icon() - update_underlays() - - build_network() - if(!network && node) - network = new /datum/pipe_network() - network.normal_members += src - network.build_network(node, src) - - - return_network(obj/machinery/atmospherics/reference) - build_network() - - if(reference==node) - return network - - return null - - reassign_network(datum/pipe_network/old_network, datum/pipe_network/new_network) - if(network == old_network) - network = new_network - - return 1 - - return_network_air(datum/pipe_network/reference) - var/list/results = list() - - if(network == reference) - results += air_contents - - return results - - disconnect(obj/machinery/atmospherics/reference) - if(reference==node) - qdel(network) - node = null - - update_icon() - update_underlays() - - return null + return null /obj/machinery/atmospherics/unary/vent_pump/proc/is_welded() // TODO: refactor welding into unary if (welded > 0) diff --git a/code/modules/awaymissions/exile.dm b/code/modules/awaymissions/exile.dm index 806423a0e5f..fadbc540c23 100644 --- a/code/modules/awaymissions/exile.dm +++ b/code/modules/awaymissions/exile.dm @@ -15,12 +15,12 @@ name = "exile" desc = "Prevents you from returning from away missions" - get_data() - var/dat = {" +/obj/item/implant/exile/get_data() + var/dat = {" Implant Specifications:
Name: [current_map.company_name] Employee Exile Implant
Implant Details: The onboard gateway system has been modified to reject entry by individuals containing this implant
"} - return dat + return dat /obj/item/implantcase/exile name = "Glass Case- 'Exile'" @@ -29,23 +29,23 @@ icon_state = "implantcase-r" - New() - src.imp = new /obj/item/implant/exile( src ) - ..() - return +/obj/item/implantcase/exile/New() + src.imp = new /obj/item/implant/exile( src ) + ..() + return /obj/structure/closet/secure_closet/exile name = "Exile Implants" req_access = list(access_hos) - New() - ..() - sleep(2) - new /obj/item/implanter/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - new /obj/item/implantcase/exile(src) - return +/obj/structure/closet/secure_closet/exile/New() + ..() + sleep(2) + new /obj/item/implanter/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + new /obj/item/implantcase/exile(src) + return diff --git a/code/modules/awaymissions/gateway.dm b/code/modules/awaymissions/gateway.dm index ce1606ee2b4..ab81b7e1417 100644 --- a/code/modules/awaymissions/gateway.dm +++ b/code/modules/awaymissions/gateway.dm @@ -49,7 +49,7 @@ -obj/machinery/gateway/centerstation/process() +/obj/machinery/gateway/centerstation/process() if(stat & (NOPOWER)) if(active) toggleoff() return diff --git a/code/modules/awaymissions/zlevel.dm b/code/modules/awaymissions/zlevel.dm index 06779e83292..7a9dc0d02c7 100644 --- a/code/modules/awaymissions/zlevel.dm +++ b/code/modules/awaymissions/zlevel.dm @@ -1,4 +1,4 @@ -proc/createRandomZlevel() +/proc/createRandomZlevel() if(awaydestinations.len) //crude, but it saves another var! return diff --git a/code/modules/battlemonsters/datum_core.dm b/code/modules/battlemonsters/datum_core.dm index af880ff0f10..afd141c7203 100644 --- a/code/modules/battlemonsters/datum_core.dm +++ b/code/modules/battlemonsters/datum_core.dm @@ -1,4 +1,4 @@ -datum/battle_monsters/ +/datum/battle_monsters var/name = "ERROR" var/icon_state var/id @@ -18,4 +18,4 @@ datum/battle_monsters/ var/attack_mul = 1 var/defense_add = 0 - var/defense_mul = 1 \ No newline at end of file + var/defense_mul = 1 diff --git a/code/modules/battlemonsters/datum_monsters.dm b/code/modules/battlemonsters/datum_monsters.dm index 5f4625c307c..8e1c39cdff8 100644 --- a/code/modules/battlemonsters/datum_monsters.dm +++ b/code/modules/battlemonsters/datum_monsters.dm @@ -81,7 +81,7 @@ rarity = BATTLE_MONSTERS_RARITY_RARE rarity_score = 1 -datum/battle_monsters/monster/human/warrior +/datum/battle_monsters/monster/human/warrior name = "Barbarian" id = "warrior" icon_state = "human" @@ -288,4 +288,4 @@ datum/battle_monsters/monster/human/warrior description = "a quadruped chitin female %SPECIES citizen of the hills of Kalakest. Despite being a peaceful race, %NAME can be seen wielding %WEAPON_AND to defend their nests from foolish raiders looking to steal from their valuable eggs. The females make excellent defenders because of this." attack_type = BATTLE_MONSTERS_ATTACKTYPE_CLAWS | BATTLE_MONSTERS_ATTACKTYPE_SWORDSMAN | BATTLE_MONSTERS_ATTACKTYPE_SHIELD rarity = BATTLE_MONSTERS_RARITY_UNCOMMON - rarity_score = 1 \ No newline at end of file + rarity_score = 1 diff --git a/code/modules/client/preference_setup/loadout/loadout_suit.dm b/code/modules/client/preference_setup/loadout/loadout_suit.dm index 24bdcbae9fa..17e94f280f2 100644 --- a/code/modules/client/preference_setup/loadout/loadout_suit.dm +++ b/code/modules/client/preference_setup/loadout/loadout_suit.dm @@ -6,7 +6,7 @@ sort_category = "Suits and Overwear" cost = 1 -datum/gear/suit/colorvest +/datum/gear/suit/colorvest display_name = "colorable vest" path = /obj/item/clothing/suit/storage/toggle/brown_jacket/sleeveless/colorable flags = GEAR_HAS_NAME_SELECTION | GEAR_HAS_DESC_SELECTION | GEAR_HAS_COLOR_SELECTION diff --git a/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm b/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm index 1f6a02ce441..83053ebc4a8 100644 --- a/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm +++ b/code/modules/client/preference_setup/loadout/loadout_xeno/skrell.dm @@ -240,19 +240,19 @@ */ var/datum/gear_tweak/social_credit/social_credit_tweak = new() -datum/gear_tweak/social_credit/get_contents(var/metadata) +/datum/gear_tweak/social_credit/get_contents(var/metadata) return "Social Credit Score: [metadata]" -datum/gear_tweak/social_credit/get_default() +/datum/gear_tweak/social_credit/get_default() return 5 -datum/gear_tweak/social_credit/get_metadata(var/user, var/metadata) +/datum/gear_tweak/social_credit/get_metadata(var/user, var/metadata) var/credit_score = input(user, "Set the credit score your passport will display, refer to the wiki to gauge it. (It will be slightly randomized to simulate Nralakk calculations.)", "Social Credit Score") as null|num if(credit_score) return round(credit_score, 0.01) return metadata -datum/gear_tweak/social_credit/tweak_item(var/obj/item/clothing/accessory/badge/passport/nralakk/PP, var/metadata) +/datum/gear_tweak/social_credit/tweak_item(var/obj/item/clothing/accessory/badge/passport/nralakk/PP, var/metadata) if(!istype(PP)) return PP.credit_score = metadata + pick(-0.01, 0, 0.01) diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index f67b2d91dd8..43656f558c4 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2,7 +2,7 @@ var/list/preferences_datums = list() -datum/preferences +/datum/preferences //doohickeys for savefiles var/path var/default_slot = 1 //Holder so it doesn't default to slot 1, rather the last one used diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index dfa88dce480..40f1b780d6c 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -894,7 +894,7 @@ BLIND // can't see anything icon_state = "aviator_sec_idris" off_state = "aviator_sec_idris_off" -obj/item/clothing/glasses/sunglasses/sechud/aviator/visor +/obj/item/clothing/glasses/sunglasses/sechud/aviator/visor name = "security HUD visor" desc = "NanoTrasen security visor glasses that can be switched between HUD and flash protection modes. They come with a built-in prescription overlay." icon_state = "visor_sec" diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index a9cc9d4061b..28ea5d34a35 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -87,7 +87,7 @@ item_state = "thongsandal" sprite_sheets = list("Tajara" = 'icons/mob/species/tajaran/shoes.dmi') -obj/item/clothing/shoes/sandal/clogs +/obj/item/clothing/shoes/sandal/clogs name = "plastic clogs" desc = "A pair of plastic clog shoes." icon_state = "clogs" @@ -300,4 +300,4 @@ obj/item/clothing/shoes/sandal/clogs icon = 'icons/clothing/kit/skrell_armor.dmi' icon_state = "kala_boots" item_state = "kala_boots" - contained_sprite = TRUE \ No newline at end of file + contained_sprite = TRUE diff --git a/code/modules/clothing/suits/jobs.dm b/code/modules/clothing/suits/jobs.dm index 2fd293c15e1..ab482a1ea0d 100644 --- a/code/modules/clothing/suits/jobs.dm +++ b/code/modules/clothing/suits/jobs.dm @@ -131,7 +131,7 @@ /obj/item/clothing/suit/storage/toggle/warden/zavod icon_state = "zav_warden_coat" item_state = "zav_warden_coat" - + /obj/item/clothing/suit/storage/toggle/warden/zavod/alt icon_state = "zav_warden_coat_alt" item_state = "zav_warden_coat_alt" diff --git a/code/modules/clothing/suits/storage.dm b/code/modules/clothing/suits/storage.dm index 773e6762188..be47eb638e2 100644 --- a/code/modules/clothing/suits/storage.dm +++ b/code/modules/clothing/suits/storage.dm @@ -80,23 +80,24 @@ /obj/item/clothing/suit/storage/vest var/icon_badge var/icon_nobadge - verb/toggle() - set name ="Adjust Badge" - set category = "Object" - set src in usr - if(!usr.canmove || usr.stat || usr.restrained()) - return 0 - if(icon_state == icon_badge) - icon_state = icon_nobadge - to_chat(usr, "You conceal \the [src]'s badge.") - else if(icon_state == icon_nobadge) - icon_state = icon_badge - to_chat(usr, "You reveal \the [src]'s badge.") - else - to_chat(usr, "\The [src] does not have a vest badge.") - return - update_clothing_icon() +/obj/item/clothing/suit/storage/vest/verb/toggle() + set name ="Adjust Badge" + set category = "Object" + set src in usr + if(!usr.canmove || usr.stat || usr.restrained()) + return 0 + + if(icon_state == icon_badge) + icon_state = icon_nobadge + to_chat(usr, "You conceal \the [src]'s badge.") + else if(icon_state == icon_nobadge) + icon_state = icon_badge + to_chat(usr, "You reveal \the [src]'s badge.") + else + to_chat(usr, "\The [src] does not have a vest badge.") + return + update_clothing_icon() // Corporate Jackets diff --git a/code/modules/cooking/recipes/recipes_mix.dm b/code/modules/cooking/recipes/recipes_mix.dm index afbc1cea81d..8e357c3be87 100644 --- a/code/modules/cooking/recipes/recipes_mix.dm +++ b/code/modules/cooking/recipes/recipes_mix.dm @@ -210,11 +210,11 @@ fruit = list("potato" = 1, "ambrosia" = 3) items = list(/obj/item/reagent_containers/food/snacks/meatball) result = /obj/item/reagent_containers/food/snacks/salad/validsalad - make_food(var/obj/container as obj) - . = ..(container) - for (var/obj/item/reagent_containers/food/snacks/salad/validsalad/being_cooked in .) - being_cooked.reagents.del_reagent(/singleton/reagent/toxin) +/singleton/recipe/validsalad/make_food(var/obj/container as obj) + . = ..(container) + for (var/obj/item/reagent_containers/food/snacks/salad/validsalad/being_cooked in .) + being_cooked.reagents.del_reagent(/singleton/reagent/toxin) /* /singleton/recipe/neuralbroke diff --git a/code/modules/cooking/recipes/recipes_pan.dm b/code/modules/cooking/recipes/recipes_pan.dm index c301976e4e8..95c983b8d9b 100644 --- a/code/modules/cooking/recipes/recipes_pan.dm +++ b/code/modules/cooking/recipes/recipes_pan.dm @@ -8,11 +8,11 @@ appliance = SAUCEPAN reagents = list(/singleton/reagent/water = 5, /singleton/reagent/alcohol/vodka = 5, /singleton/reagent/toxin/amatoxin = 5) result = /obj/item/reagent_containers/food/snacks/amanitajelly - make_food(var/obj/container as obj) - . = ..(container) - for (var/obj/item/reagent_containers/food/snacks/amanitajelly/being_cooked in .) - being_cooked.reagents.del_reagent(/singleton/reagent/toxin/amatoxin) +/singleton/recipe/amanitajelly/make_food(var/obj/container as obj) + . = ..(container) + for (var/obj/item/reagent_containers/food/snacks/amanitajelly/being_cooked in .) + being_cooked.reagents.del_reagent(/singleton/reagent/toxin/amatoxin) // Ports from the microwave... yeah diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index 8b49cd3a92d..dfbb6b37309 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -5,12 +5,12 @@ //This is the output of the stringpercent(print) proc, and means about 80% of //the print must be there for it to be complete. (Prints are 32 digits) var/const/FINGERPRINT_COMPLETE = 6 -proc/is_complete_print(var/print) +/proc/is_complete_print(var/print) return stringpercent(print) <= FINGERPRINT_COMPLETE -atom/var/list/suit_fibers +/atom/var/list/suit_fibers -atom/proc/add_fibers(mob/living/carbon/human/M) +/atom/proc/add_fibers(mob/living/carbon/human/M) if(M.gloves && istype(M.gloves,/obj/item/clothing/gloves)) var/obj/item/clothing/gloves/G = M.gloves if(G.transfer_blood && G.bloody_hands_mob?.resolve()) //bloodied gloves transfer blood to touched objects diff --git a/code/modules/economy/cash.dm b/code/modules/economy/cash.dm index e480f071fcd..797ac5246b6 100644 --- a/code/modules/economy/cash.dm +++ b/code/modules/economy/cash.dm @@ -153,7 +153,7 @@ desc = "It's worth 1000 credits." worth = 1000 -proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) +/proc/spawn_money(var/sum, spawnloc, mob/living/carbon/human/human_user as mob) if(sum in list(1000,500,200,100,50,20,10,1)) var/cash_type = text2path("/obj/item/spacecash/c[sum]") var/obj/cash = new cash_type (spawnloc) diff --git a/code/modules/flufftext/Dreaming.dm b/code/modules/flufftext/Dreaming.dm index 3747c0547c6..ca8126b41b9 100644 --- a/code/modules/flufftext/Dreaming.dm +++ b/code/modules/flufftext/Dreaming.dm @@ -14,7 +14,7 @@ var/list/dreams = list( "a unathi","a tajaran","the ai core","the mining station","the research station","a beaker of strange liquid" ) -mob/living/carbon/proc/dream() +/mob/living/carbon/proc/dream() dreaming = 1 spawn(0) @@ -25,8 +25,8 @@ mob/living/carbon/proc/dream() break dreaming = 0 -mob/living/carbon/proc/handle_dreams() +/mob/living/carbon/proc/handle_dreams() if(client && !dreaming && prob(5)) dream() -mob/living/carbon/var/dreaming = 0 +/mob/living/carbon/var/dreaming = 0 diff --git a/code/modules/flufftext/TextFilters.dm b/code/modules/flufftext/TextFilters.dm index d881b7fff9d..e994d9fb904 100644 --- a/code/modules/flufftext/TextFilters.dm +++ b/code/modules/flufftext/TextFilters.dm @@ -1,6 +1,6 @@ //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:32 -proc/Intoxicated(phrase) +/proc/Intoxicated(phrase) phrase = html_decode(phrase) var/leng=length(phrase) var/counter=length(phrase) @@ -23,7 +23,7 @@ proc/Intoxicated(phrase) newphrase+="[newletter]";counter-=1 return newphrase -proc/stutter(phrase, str = 1) +/proc/stutter(phrase, str = 1) if(str < 1) return phrase else @@ -78,10 +78,10 @@ proc/stutter(phrase, str = 1) return jointext(split_phrase, " ") -proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness. +/proc/Stagger(mob/M,d) //Technically not a filter, but it relates to drunkenness. step(M, pick(d,turn(d,90),turn(d,-90))) -proc/Ellipsis(original_msg, chance = 50) +/proc/Ellipsis(original_msg, chance = 50) if(chance <= 0) return "..." if(chance >= 100) return original_msg diff --git a/code/modules/heavy_vehicle/mech_icon.dm b/code/modules/heavy_vehicle/mech_icon.dm index 7b0f219a884..326f6a2e255 100644 --- a/code/modules/heavy_vehicle/mech_icon.dm +++ b/code/modules/heavy_vehicle/mech_icon.dm @@ -1,7 +1,7 @@ var/global/list/mecha_image_cache = list() var/global/list/mecha_icon_cache = list() -proc/get_mech_image(var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER) +/proc/get_mech_image(var/cache_key, var/cache_icon, var/image_colour, var/overlay_layer = FLOAT_LAYER) var/use_key = "[cache_key]-[cache_icon]-[image_colour ? image_colour : "none"]" if(image_colour) use_key += "-[image_colour]" if(!mecha_image_cache[use_key]) @@ -13,7 +13,7 @@ proc/get_mech_image(var/cache_key, var/cache_icon, var/image_colour, var/overlay global.mecha_image_cache[use_key] = I return global.mecha_image_cache[use_key] -proc/get_mech_icon(var/list/components = list(), var/overlay_layer = FLOAT_LAYER) +/proc/get_mech_icon(var/list/components = list(), var/overlay_layer = FLOAT_LAYER) var/list/all_images = list() for(var/obj/item/mech_component/comp in components) all_images += get_mech_image(comp.icon_state, comp.on_mech_icon, comp.color, overlay_layer) @@ -60,4 +60,4 @@ proc/get_mech_icon(var/list/components = list(), var/overlay_layer = FLOAT_LAYER overlays = new_overlays /mob/living/heavy_vehicle/regenerate_icons() - return \ No newline at end of file + return diff --git a/code/modules/integrated_electronics/subtypes/lists.dm b/code/modules/integrated_electronics/subtypes/lists.dm index 94d3c853d89..358eacba54c 100644 --- a/code/modules/integrated_electronics/subtypes/lists.dm +++ b/code/modules/integrated_electronics/subtypes/lists.dm @@ -142,7 +142,7 @@ push_data() activate_pin(2) -obj/item/integrated_circuit/list/len +/obj/item/integrated_circuit/list/len name = "len circuit" desc = "This circuit will give length of the list." inputs = list( diff --git a/code/modules/library/lib_items.dm b/code/modules/library/lib_items.dm index f51983bc61d..068fefc2c0e 100644 --- a/code/modules/library/lib_items.dm +++ b/code/modules/library/lib_items.dm @@ -148,36 +148,36 @@ /obj/structure/bookcase/manuals/medical name = "Medical Manuals bookcase" - New() - ..() - new /obj/item/book/manual/medical_diagnostics_manual(src) - new /obj/item/book/manual/medical_diagnostics_manual(src) - new /obj/item/book/manual/medical_diagnostics_manual(src) - new /obj/item/book/manual/medical_diagnostics_manual(src) - update_icon() +/obj/structure/bookcase/manuals/medical/New() + ..() + new /obj/item/book/manual/medical_diagnostics_manual(src) + new /obj/item/book/manual/medical_diagnostics_manual(src) + new /obj/item/book/manual/medical_diagnostics_manual(src) + new /obj/item/book/manual/medical_diagnostics_manual(src) + update_icon() /obj/structure/bookcase/manuals/engineering name = "Engineering Manuals bookcase" - New() - ..() - new /obj/item/book/manual/wiki/engineering_construction(src) - new /obj/item/book/manual/engineering_particle_accelerator(src) - new /obj/item/book/manual/wiki/engineering_hacking(src) - new /obj/item/book/manual/wiki/engineering_guide(src) - new /obj/item/book/manual/atmospipes(src) - new /obj/item/book/manual/engineering_singularity_safety(src) - new /obj/item/book/manual/evaguide(src) - update_icon() +/obj/structure/bookcase/manuals/engineering/New() + ..() + new /obj/item/book/manual/wiki/engineering_construction(src) + new /obj/item/book/manual/engineering_particle_accelerator(src) + new /obj/item/book/manual/wiki/engineering_hacking(src) + new /obj/item/book/manual/wiki/engineering_guide(src) + new /obj/item/book/manual/atmospipes(src) + new /obj/item/book/manual/engineering_singularity_safety(src) + new /obj/item/book/manual/evaguide(src) + update_icon() /obj/structure/bookcase/manuals/research_and_development name = "R&D Manuals bookcase" - New() - ..() - new /obj/item/book/manual/research_and_development(src) - update_icon() +/obj/structure/bookcase/manuals/research_and_development/New() + ..() + new /obj/item/book/manual/research_and_development(src) + update_icon() /* @@ -354,4 +354,4 @@ to_chat(user, SPAN_NOTICE("Computer has been associated with this unit.")) else to_chat(user, SPAN_WARNING("No associated computer found. Only local scans will function properly.")) - to_chat(user, "\n") \ No newline at end of file + to_chat(user, "\n") diff --git a/code/modules/liquid/splash_simulation.dm b/code/modules/liquid/splash_simulation.dm index 440d0a0eecb..183787fef7e 100644 --- a/code/modules/liquid/splash_simulation.dm +++ b/code/modules/liquid/splash_simulation.dm @@ -4,10 +4,10 @@ var/liquid_delay = 4 var/list/datum/puddle/puddles = list() -datum/puddle +/datum/puddle var/list/obj/effect/liquid/liquid_objects = list() -datum/puddle/process() +/datum/puddle/process() for(var/obj/effect/liquid/L in liquid_objects) L.spread() @@ -17,17 +17,17 @@ datum/puddle/process() if(liquid_objects.len == 0) qdel(src) -datum/puddle/New() +/datum/puddle/New() ..() puddles += src -datum/puddle/Destroy() +/datum/puddle/Destroy() puddles -= src for(var/obj/O in liquid_objects) qdel(O) return ..() -client/proc/splash() +/client/proc/splash() var/volume = input("Volume?","Volume?", 0 ) as num if(!isnum(volume)) return if(volume <= LIQUID_TRANSFER_THRESHOLD) return @@ -35,7 +35,7 @@ client/proc/splash() if(!isturf(T)) return trigger_splash(T, volume) -proc/trigger_splash(turf/epicenter as turf, volume as num) +/proc/trigger_splash(turf/epicenter as turf, volume as num) if(!epicenter) return if(volume <= 0) @@ -51,7 +51,7 @@ proc/trigger_splash(turf/epicenter as turf, volume as num) -obj/effect/liquid +/obj/effect/liquid icon = 'icons/effects/liquid.dmi' icon_state = "0" name = "liquid" @@ -59,7 +59,7 @@ obj/effect/liquid var/new_volume = 0 var/datum/puddle/controller -obj/effect/liquid/New() +/obj/effect/liquid/New() ..() if( !isturf(loc) ) qdel(src) @@ -68,7 +68,7 @@ obj/effect/liquid/New() if(L != src) qdel(L) -obj/effect/liquid/proc/spread() +/obj/effect/liquid/proc/spread() var/surrounding_volume = 0 var/list/spread_directions = list(1,2,4,8) @@ -114,7 +114,7 @@ obj/effect/liquid/proc/spread() src.volume -= volume_per_tile //Remove the volume from this tile L.new_volume = L.new_volume + volume_per_tile //Add it to the volume to the other tile -obj/effect/liquid/proc/apply_calculated_effect() +/obj/effect/liquid/proc/apply_calculated_effect() volume += new_volume if(volume < LIQUID_TRANSFER_THRESHOLD) @@ -122,14 +122,14 @@ obj/effect/liquid/proc/apply_calculated_effect() new_volume = 0 update_icon2() -obj/effect/liquid/Move() +/obj/effect/liquid/Move() return 0 -obj/effect/liquid/Destroy() +/obj/effect/liquid/Destroy() src.controller.liquid_objects.Remove(src) return ..() -obj/effect/liquid/proc/update_icon2() +/obj/effect/liquid/proc/update_icon2() //icon_state = num2text( max(1,min(7,(floor(volume),10)/10)) ) switch(volume) @@ -150,17 +150,19 @@ obj/effect/liquid/proc/update_icon2() if(50 to INFINITY) icon_state = "7" -turf/proc/can_accept_liquid(from_direction) - return 0 -turf/proc/can_leave_liquid(from_direction) +/turf/proc/can_accept_liquid(from_direction) return 0 -turf/space/can_accept_liquid(from_direction) - return 1 -turf/space/can_leave_liquid(from_direction) +/turf/proc/can_leave_liquid(from_direction) + return 0 + +/turf/space/can_accept_liquid(from_direction) return 1 -turf/simulated/floor/can_accept_liquid(from_direction) +/turf/space/can_leave_liquid(from_direction) + return 1 + +/turf/simulated/floor/can_accept_liquid(from_direction) for(var/obj/structure/window/W in src) if(W.dir in list(5,6,9,10)) return 0 @@ -171,7 +173,7 @@ turf/simulated/floor/can_accept_liquid(from_direction) return 0 return 1 -turf/simulated/floor/can_leave_liquid(to_direction) +/turf/simulated/floor/can_leave_liquid(to_direction) for(var/obj/structure/window/W in src) if(W.dir in list(5,6,9,10)) return 0 @@ -182,15 +184,15 @@ turf/simulated/floor/can_leave_liquid(to_direction) return 0 return 1 -turf/simulated/wall/can_accept_liquid(from_direction) +/turf/simulated/wall/can_accept_liquid(from_direction) return 0 -turf/simulated/wall/can_leave_liquid(from_direction) +/turf/simulated/wall/can_leave_liquid(from_direction) return 0 -obj/proc/liquid_pass() +/obj/proc/liquid_pass() return 1 -obj/machinery/door/liquid_pass() +/obj/machinery/door/liquid_pass() return !density #undef LIQUID_TRANSFER_THRESHOLD diff --git a/code/modules/maps/dmm_suite.dm b/code/modules/maps/dmm_suite.dm index 4206a4a79f8..536cfe08ff7 100644 --- a/code/modules/maps/dmm_suite.dm +++ b/code/modules/maps/dmm_suite.dm @@ -1,63 +1,62 @@ -dmm_suite{ - /* +/* + dmm_suite version 1.0 + Released January 30th, 2011. - dmm_suite version 1.0 - Released January 30th, 2011. + NOTE: Map saving functionality removed - NOTE: Map saving functionality removed + defines the object /dmm_suite + - Provides the proc load_map() + - Loads the specified map file onto the specified z-level. + - provides the proc write_map() + - Returns a text string of the map in dmm format + ready for output to a file. + - provides the proc save_map() + - Returns a .dmm file if map is saved + - Returns FALSE if map fails to save - defines the object /dmm_suite - - Provides the proc load_map() - - Loads the specified map file onto the specified z-level. - - provides the proc write_map() - - Returns a text string of the map in dmm format - ready for output to a file. - - provides the proc save_map() - - Returns a .dmm file if map is saved - - Returns FALSE if map fails to save + The dmm_suite provides saving and loading of map files in BYOND's native DMM map + format. It approximates the map saving and loading processes of the Dream Maker + and Dream Seeker programs so as to allow editing, saving, and loading of maps at + runtime. - The dmm_suite provides saving and loading of map files in BYOND's native DMM map - format. It approximates the map saving and loading processes of the Dream Maker - and Dream Seeker programs so as to allow editing, saving, and loading of maps at - runtime. + ------------------------ - ------------------------ + To save a map at runtime, create an instance of /dmm_suite, and then call + write_map(), which accepts three arguments: + - A turf representing one corner of a three dimensional grid (Required). + - Another turf representing the other corner of the same grid (Required). + - Any, or a combination, of several bit flags (Optional, see documentation). - To save a map at runtime, create an instance of /dmm_suite, and then call - write_map(), which accepts three arguments: - - A turf representing one corner of a three dimensional grid (Required). - - Another turf representing the other corner of the same grid (Required). - - Any, or a combination, of several bit flags (Optional, see documentation). + The order in which the turfs are supplied does not matter, the /dmm_writer will + determine the grid containing both, in much the same way as DM's block() function. + write_map() will then return a string representing the saved map in dmm format; + this string can then be saved to a file, or used for any other purose. - The order in which the turfs are supplied does not matter, the /dmm_writer will - determine the grid containing both, in much the same way as DM's block() function. - write_map() will then return a string representing the saved map in dmm format; - this string can then be saved to a file, or used for any other purose. + ------------------------ - ------------------------ + To load a map at runtime, create an instance of /dmm_suite, and then call load_map(), + which accepts two arguments: + - A .dmm file to load (Required). + - A number representing the z-level on which to start loading the map (Optional). - To load a map at runtime, create an instance of /dmm_suite, and then call load_map(), - which accepts two arguments: - - A .dmm file to load (Required). - - A number representing the z-level on which to start loading the map (Optional). + The /dmm_suite will load the map file starting on the specified z-level. If no + z-level was specified, world.maxz will be increased so as to fit the map. Note + that if you wish to load a map onto a z-level that already has objects on it, + you will have to handle the removal of those objects. Otherwise the new map will + simply load the new objects on top of the old ones. - The /dmm_suite will load the map file starting on the specified z-level. If no - z-level was specified, world.maxz will be increased so as to fit the map. Note - that if you wish to load a map onto a z-level that already has objects on it, - you will have to handle the removal of those objects. Otherwise the new map will - simply load the new objects on top of the old ones. + Also note that all type paths specified in the .dmm file must exist in the world's + code, and that the /dmm_reader trusts that files to be loaded are in fact valid + .dmm files. Errors in the .dmm format will cause runtime errors. +*/ +/dmm_suite - Also note that all type paths specified in the .dmm file must exist in the world's - code, and that the /dmm_reader trusts that files to be loaded are in fact valid - .dmm files. Errors in the .dmm format will cause runtime errors. +/** + * dmm_file: A .dmm file to load (Required). + * z_offset: A number representing the z-level on which to start loading the map (Optional). + * cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). + * measureOnly: When true, no changes will be made to the world (Optional). + * no_changeturf: When true, turf/AfterChange won't be called on loaded turfs + */ - */ - - verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num, var/measureOnly as num, no_changeturf as num){ - // dmm_file: A .dmm file to load (Required). - // z_offset: A number representing the z-level on which to start loading the map (Optional). - // cropMap: When true, the map will be cropped to fit the existing world dimensions (Optional). - // measureOnly: When true, no changes will be made to the world (Optional). - // no_changeturf: When true, turf/AfterChange won't be called on loaded turfs - } -} +/dmm_suite/verb/load_map(var/dmm_file as file, var/x_offset as num, var/y_offset as num, var/z_offset as num, var/cropMap as num, var/measureOnly as num, no_changeturf as num) diff --git a/code/modules/maps/fromdmp.dm b/code/modules/maps/fromdmp.dm index 0eb41ebd5a9..bc3d263dfd0 100644 --- a/code/modules/maps/fromdmp.dm +++ b/code/modules/maps/fromdmp.dm @@ -8,7 +8,7 @@ mob/verb/Convert(filename as file) dmp2swapmap(filename) -proc/d2sm_prepmap(filename) +/proc/d2sm_prepmap(filename) var/txt = file2text(filename) if(!txt) return var/i,j @@ -23,7 +23,7 @@ proc/d2sm_prepmap(filename) i=findText(txt,"\\\n",i) return txt -proc/dmp2swapmap(filename) +/proc/dmp2swapmap(filename) //var/txt = file2text(filename) //if(!txt) return var/txt = d2sm_prepmap(filename) @@ -185,7 +185,7 @@ proc/dmp2swapmap(filename) to_chat(F, "\t\t\t[x]") to_chat(F, codes[pick(codes)] */ -proc/d2sm_ParseCommaList(txt) +/proc/d2sm_ParseCommaList(txt) var/list/L=new var/i,ch for(i=1,i<=length(txt),++i) @@ -203,7 +203,7 @@ proc/d2sm_ParseCommaList(txt) if(i>1) L+=copytext(txt,1,i) return L -proc/d2sm_MatchBrace(txt, i, which) +/proc/d2sm_MatchBrace(txt, i, which) if(which==40) ++which else which+=2 var/j,ch @@ -214,7 +214,7 @@ proc/d2sm_MatchBrace(txt, i, which) j=d2sm_MatchBrace(txt,j,ch) if(!j) return 0 -proc/d2sm_ConvertType(tt,tabs="") +/proc/d2sm_ConvertType(tt,tabs="") var/i=findText(tt,"{") if(!i) return "[tabs]type = [tt]\n" .="[tabs]type = [copytext(tt,1,i)]\n" @@ -223,7 +223,7 @@ proc/d2sm_ConvertType(tt,tabs="") for(var/pair in L) .="[.][tabs][pair]\n" -proc/d2sm_Contents(list/conts,n,tabs="") +/proc/d2sm_Contents(list/conts,n,tabs="") .="[tabs]contents = list(" var/i for(i=0,iswapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - qdel(src) - return - x2=x?(x):world.maxx - y2=y?(y):world.maxy - z2=z?(z):1 - AllocateSwapMap() +/swapmap/New(_id,x,y,z) + if(isnull(_id)) return + id=_id + mode=swapmaps_mode + if(isturf(x) && isturf(y)) + /* + Special format: Defines a map as an existing set of turfs; + this is useful for saving a compiled map in swapmap format. + Because this is a compiled-in map, its turfs are not deleted + when the datum is deleted. + */ + x1=min(x:x,y:x);x2=max(x:x,y:x) + y1=min(x:y,y:y);y2=max(x:y,y:y) + z1=min(x:z,y:z);z2=max(x:z,y:z) + InitializeSwapMaps() + if(z2>swapmaps_compiled_maxz ||\ + y2>swapmaps_compiled_maxy ||\ + x2>swapmaps_compiled_maxx) + qdel(src) + return + x2=x?(x):world.maxx + y2=y?(y):world.maxy + z2=z?(z):1 + AllocateSwapMap() - Del() - // a temporary datum for a chunk can be deleted outright - // for others, some cleanup is necessary - if(!ischunk) - swapmaps_loaded-=src - swapmaps_byname-=id - if(z2>swapmaps_compiled_maxz ||\ - y2>swapmaps_compiled_maxy ||\ - x2>swapmaps_compiled_maxx) - var/list/areas=new - for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2))) - for(var/obj/O in A) qdel(O) - for(var/mob/M in A) - if(!M.key) qdel(M) - else M.loc=null - areas[A.loc]=null - qdel(A) - // delete areas that belong only to this map - for(var/area/a in areas) - if(a && !a.contents.len) qdel(a) - if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ() - qdel(areas) - ..() +/swapmap/Del() + // a temporary datum for a chunk can be deleted outright + // for others, some cleanup is necessary + if(!ischunk) + swapmaps_loaded-=src + swapmaps_byname-=id + if(z2>swapmaps_compiled_maxz ||\ + y2>swapmaps_compiled_maxy ||\ + x2>swapmaps_compiled_maxx) + var/list/areas=new + for(var/atom/A in block(locate(x1,y1,z1),locate(x2,y2,z2))) + for(var/obj/O in A) qdel(O) + for(var/mob/M in A) + if(!M.key) qdel(M) + else M.loc=null + areas[A.loc]=null + qdel(A) + // delete areas that belong only to this map + for(var/area/a in areas) + if(a && !a.contents.len) qdel(a) + if(x2>=world.maxx || y2>=world.maxy || z2>=world.maxz) CutXYZ() + qdel(areas) + ..() /* Savefile format: @@ -202,102 +202,102 @@ swapmap AREA // if non-default; saved as a number (index into areas list) vars // all other changed vars */ - Write(savefile/S) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - if(!defarea) defarea=new world.area - areas=list() - for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2))) - areas[T.loc]=null - for(n in areas) // quickly eliminate associations for smaller storage - areas-=n - areas+=n - areas-=defarea - InitializeSwapMaps() - locked=1 - S["id"] << id - S["z"] << z2-z1+1 - S["y"] << y2-y1+1 - S["x"] << x2-x1+1 - S["areas"] << areas - for(n in 1 to areas.len) areas[areas[n]]=n - var/oldcd=S.cd - for(z=z1,z<=z2,++z) - S.cd="[z-z1+1]" - for(y=y1,y<=y2,++y) - S.cd="[y-y1+1]" - for(x=x1,x<=x2,++x) - S.cd="[x-x1+1]" - var/turf/T=locate(x,y,z) - S["type"] << T.type - if(T.loc!=defarea) S["AREA"] << areas[T.loc] - T.Write(S) - S.cd=".." +/swapmap/Write(savefile/S) + var/x + var/y + var/z + var/n + var/list/areas + var/area/defarea=locate(world.area) + if(!defarea) defarea=new world.area + areas=list() + for(var/turf/T in block(locate(x1,y1,z1),locate(x2,y2,z2))) + areas[T.loc]=null + for(n in areas) // quickly eliminate associations for smaller storage + areas-=n + areas+=n + areas-=defarea + InitializeSwapMaps() + locked=1 + S["id"] << id + S["z"] << z2-z1+1 + S["y"] << y2-y1+1 + S["x"] << x2-x1+1 + S["areas"] << areas + for(n in 1 to areas.len) areas[areas[n]]=n + var/oldcd=S.cd + for(z=z1,z<=z2,++z) + S.cd="[z-z1+1]" + for(y=y1,y<=y2,++y) + S.cd="[y-y1+1]" + for(x=x1,x<=x2,++x) + S.cd="[x-x1+1]" + var/turf/T=locate(x,y,z) + S["type"] << T.type + if(T.loc!=defarea) S["AREA"] << areas[T.loc] + T.Write(S) S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) + S.cd=".." + sleep() + S.cd=oldcd + locked=0 + qdel(areas) - Read(savefile/S,_id,turf/locorner) - var/x - var/y - var/z - var/n - var/list/areas - var/area/defarea=locate(world.area) - id=_id - if(locorner) - ischunk=1 - x1=locorner.x - y1=locorner.y - z1=locorner.z - if(!defarea) defarea=new world.area - if(!_id) - S["id"] >> id - else - var/dummy - S["id"] >> dummy - S["z"] >> z2 // these are depth, - S["y"] >> y2 // height, - S["x"] >> x2 // width - S["areas"] >> areas - locked=1 - AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords - var/oldcd=S.cd - for(z=z1,z<=z2,++z) - S.cd="[z-z1+1]" - for(y=y1,y<=y2,++y) - S.cd="[y-y1+1]" - for(x=x1,x<=x2,++x) - S.cd="[x-x1+1]" - var/tp - S["type"]>>tp - var/turf/T=locate(x,y,z) - T.loc.contents-=T - T=new tp(locate(x,y,z)) - if("AREA" in S.dir) - S["AREA"]>>n - var/area/A=areas[n] - A.contents+=T - else defarea.contents+=T - // clear the turf - for(var/obj/O in T) qdel(O) - for(var/mob/M in T) - if(!M.key) qdel(M) - else M.loc=null - // finish the read - T.Read(S) - S.cd=".." +/swapmap/Read(savefile/S,_id,turf/locorner) + var/x + var/y + var/z + var/n + var/list/areas + var/area/defarea=locate(world.area) + id=_id + if(locorner) + ischunk=1 + x1=locorner.x + y1=locorner.y + z1=locorner.z + if(!defarea) defarea=new world.area + if(!_id) + S["id"] >> id + else + var/dummy + S["id"] >> dummy + S["z"] >> z2 // these are depth, + S["y"] >> y2 // height, + S["x"] >> x2 // width + S["areas"] >> areas + locked=1 + AllocateSwapMap() // adjust x1,y1,z1 - x2,y2,z2 coords + var/oldcd=S.cd + for(z=z1,z<=z2,++z) + S.cd="[z-z1+1]" + for(y=y1,y<=y2,++y) + S.cd="[y-y1+1]" + for(x=x1,x<=x2,++x) + S.cd="[x-x1+1]" + var/tp + S["type"]>>tp + var/turf/T=locate(x,y,z) + T.loc.contents-=T + T=new tp(locate(x,y,z)) + if("AREA" in S.dir) + S["AREA"]>>n + var/area/A=areas[n] + A.contents+=T + else defarea.contents+=T + // clear the turf + for(var/obj/O in T) qdel(O) + for(var/mob/M in T) + if(!M.key) qdel(M) + else M.loc=null + // finish the read + T.Read(S) S.cd=".." - sleep() - S.cd=oldcd - locked=0 - qdel(areas) + S.cd=".." + sleep() + S.cd=oldcd + locked=0 + qdel(areas) /* Find an empty block on the world map in which to load this map. @@ -308,186 +308,186 @@ swapmap Ignore certain operations if loading a map as a chunk. Use the x1,y1,z1 position for it, and *don't* count it as a loaded map. */ - proc/AllocateSwapMap() - InitializeSwapMaps() - world.maxx=max(x2,world.maxx) // stretch x/y if necessary - world.maxy=max(y2,world.maxy) - if(!ischunk) - if(world.maxz<=swapmaps_compiled_maxz) - z1=swapmaps_compiled_maxz+1 - x1=1;y1=1 - else - var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1) - x1=l[1] - y1=l[2] - z1=l[3] - qdel(l) - x2+=x1-1 - y2+=y1-1 - z2+=z1-1 - if(z2 > world.maxz) - world.maxz = z2 // stretch z if necessary - SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, world.maxz) - if(!ischunk) - swapmaps_loaded[src]=null - swapmaps_byname[id]=src - - proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2) - while(1) - var/nextz=0 - var/swapmap/M - for(M in swapmaps_loaded) - if(M.z2Z2) || M.z1>=Z1+z2 ||\ - M.x1>X2 || M.x2=X1+x2 ||\ - M.y1>Y2 || M.y2=Y1+y2) continue - // look for sub-regions with a defined ceiling - var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1 - if(M.x1>=X1+x2) - .=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2) - if(.) return - else if(M.x2<=X2-x2) - .=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2) - if(.) return - if(M.y1>=Y1+y2) - .=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2) - if(.) return - else if(M.y2<=Y2-y2) - .=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2) - if(.) return - nextz=nextz?min(nextz,M.z2+1):(M.z2+1) - if(!M) - /* If nextz is not 0, then at some point there was an overlap that - could not be resolved by using an area to the side */ - if(nextz) Z1=nextz - if(!nextz || (Z2 && Z2-Z1+1=z2)?list(X1,Y1,Z1):null - X1=1;X2=world.maxx - Y1=1;Y2=world.maxy - - proc/CutXYZ() - var/mx=swapmaps_compiled_maxx - var/my=swapmaps_compiled_maxy - var/mz=swapmaps_compiled_maxz - for(var/swapmap/M in swapmaps_loaded) // may not include src - mx=max(mx,M.x2) - my=max(my,M.y2) - mz=max(mz,M.z2) - world.maxx=mx - world.maxy=my - world.maxz=mz - - // save and delete - proc/Unload() - Save() - qdel(src) - - proc/Save() - if(id==src) return 0 - var/savefile/S=mode?(new):new("map_[id].sav") - to_chat(S, src) - while(locked) sleep(1) - if(mode) - fdel("map_[id].txt") - S.ExportText("/","map_[id].txt") - return 1 - - // this will not delete existing savefiles for this map - proc/SetID(newid) - swapmaps_byname-=id - id=newid +/swapmap/proc/AllocateSwapMap() + InitializeSwapMaps() + world.maxx=max(x2,world.maxx) // stretch x/y if necessary + world.maxy=max(y2,world.maxy) + if(!ischunk) + if(world.maxz<=swapmaps_compiled_maxz) + z1=swapmaps_compiled_maxz+1 + x1=1;y1=1 + else + var/list/l=ConsiderRegion(1,1,world.maxx,world.maxy,swapmaps_compiled_maxz+1) + x1=l[1] + y1=l[2] + z1=l[3] + qdel(l) + x2+=x1-1 + y2+=y1-1 + z2+=z1-1 + if(z2 > world.maxz) + world.maxz = z2 // stretch z if necessary + SEND_GLOBAL_SIGNAL(COMSIG_GLOB_NEW_Z, world.maxz) + if(!ischunk) + swapmaps_loaded[src]=null swapmaps_byname[id]=src - proc/AllTurfs(z) - if(isnum(z) && (zz2)) return null - return block(LoCorner(z),HiCorner(z)) +/swapmap/proc/ConsiderRegion(X1,Y1,X2,Y2,Z1,Z2) + while(1) + var/nextz=0 + var/swapmap/M + for(M in swapmaps_loaded) + if(M.z2Z2) || M.z1>=Z1+z2 ||\ + M.x1>X2 || M.x2=X1+x2 ||\ + M.y1>Y2 || M.y2=Y1+y2) continue + // look for sub-regions with a defined ceiling + var/nz2=Z2?(Z2):Z1+z2-1+M.z2-M.z1 + if(M.x1>=X1+x2) + .=ConsiderRegion(X1,Y1,M.x1-1,Y2,Z1,nz2) + if(.) return + else if(M.x2<=X2-x2) + .=ConsiderRegion(M.x2+1,Y1,X2,Y2,Z1,nz2) + if(.) return + if(M.y1>=Y1+y2) + .=ConsiderRegion(X1,Y1,X2,M.y1-1,Z1,nz2) + if(.) return + else if(M.y2<=Y2-y2) + .=ConsiderRegion(X1,M.y2+1,X2,Y2,Z1,nz2) + if(.) return + nextz=nextz?min(nextz,M.z2+1):(M.z2+1) + if(!M) + /* If nextz is not 0, then at some point there was an overlap that + could not be resolved by using an area to the side */ + if(nextz) Z1=nextz + if(!nextz || (Z2 && Z2-Z1+1=z2)?list(X1,Y1,Z1):null + X1=1;X2=world.maxx + Y1=1;Y2=world.maxy - // this could be safely called for an obj or mob as well, but - // probably not an area - proc/Contains(turf/T) - return (T && T.x>=x1 && T.x<=x2\ - && T.y>=y1 && T.y<=y2\ - && T.z>=z1 && T.z<=z2) +/swapmap/proc/CutXYZ() + var/mx=swapmaps_compiled_maxx + var/my=swapmaps_compiled_maxy + var/mz=swapmaps_compiled_maxz + for(var/swapmap/M in swapmaps_loaded) // may not include src + mx=max(mx,M.x2) + my=max(my,M.y2) + mz=max(mz,M.z2) + world.maxx=mx + world.maxy=my + world.maxz=mz - proc/InUse() - for(var/turf/T in AllTurfs()) - for(var/mob/M in T) if(M.key) return 1 +// save and delete +/swapmap/proc/Unload() + Save() + qdel(src) - proc/LoCorner(z=z1) - return locate(x1,y1,z) - proc/HiCorner(z=z2) - return locate(x2,y2,z) +/swapmap/proc/Save() + if(id==src) return 0 + var/savefile/S=mode?(new):new("map_[id].sav") + to_chat(S, src) + while(locked) sleep(1) + if(mode) + fdel("map_[id].txt") + S.ExportText("/","map_[id].txt") + return 1 + +// this will not delete existing savefiles for this map +/swapmap/proc/SetID(newid) + swapmaps_byname-=id + id=newid + swapmaps_byname[id]=src + +/swapmap/proc/AllTurfs(z) + if(isnum(z) && (zz2)) return null + return block(LoCorner(z),HiCorner(z)) + +// this could be safely called for an obj or mob as well, but +// probably not an area +/swapmap/proc/Contains(turf/T) + return (T && T.x>=x1 && T.x<=x2\ + && T.y>=y1 && T.y<=y2\ + && T.z>=z1 && T.z<=z2) + +/swapmap/proc/InUse() + for(var/turf/T in AllTurfs()) + for(var/mob/M in T) if(M.key) return 1 + +/swapmap/proc/LoCorner(z=z1) + return locate(x1,y1,z) + +/swapmap/proc/HiCorner(z=z2) + return locate(x2,y2,z) - // Build procs: Take 2 turfs as corners, plus an item type. - // An item may be like: - // - // /turf/wall - // /obj/fence{icon_state="iron"} +// Build procs: Take 2 turfs as corners, plus an item type. +// An item may be like: +// +// /turf/wall +// /obj/fence{icon_state="iron"} +/swapmap/proc/BuildFilledRectangle(turf/T1,turf/T2,item) + if(!Contains(T1) || !Contains(T2)) return + var/turf/T=T1 + // pick new corners in a block()-friendly form + T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) + T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) + for(T in block(T1,T2)) new item(T) - proc/BuildFilledRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - for(T in block(T1,T2)) new item(T) +/swapmap/proc/BuildRectangle(turf/T1,turf/T2,item) + if(!Contains(T1) || !Contains(T2)) return + var/turf/T=T1 + // pick new corners in a block()-friendly form + T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) + T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) + if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item) + else + //for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z))) + for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T) + for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T) + for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T) + for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T) - proc/BuildRectangle(turf/T1,turf/T2,item) - if(!Contains(T1) || !Contains(T2)) return - var/turf/T=T1 - // pick new corners in a block()-friendly form - T1=locate(min(T1.x,T2.x),min(T1.y,T2.y),min(T1.z,T2.z)) - T2=locate(max(T.x,T2.x),max(T.y,T2.y),max(T.z,T2.z)) - if(T2.x-T1.x<2 || T2.y-T1.y<2) BuildFilledRectangle(T1,T2,item) - else - //for(T in block(T1,T2)-block(locate(T1.x+1,T1.y+1,T1.z),locate(T2.x-1,T2.y-1,T2.z))) - for(T in block(T1,locate(T2.x,T1.y,T2.z))) new item(T) - for(T in block(locate(T1.x,T2.y,T1.z),T2)) new item(T) - for(T in block(locate(T1.x,T1.y+1,T1.z),locate(T1.x,T2.y-1,T2.z))) new item(T) - for(T in block(locate(T2.x,T1.y+1,T1.z),locate(T2.x,T2.y-1,T2.z))) new item(T) - - /* - Supplementary build proc: Takes a list of turfs, plus an item - type. Actually the list doesn't have to be just turfs. - */ - proc/BuildInTurfs(list/turfs,item) +/* + Supplementary build proc: Takes a list of turfs, plus an item + type. Actually the list doesn't have to be just turfs. +*/ +/swapmap/proc/BuildInTurfs(list/turfs,item) for(var/T in turfs) new item(T) -atom - Write(savefile/S) - for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays") - if(issaved(vars[V])) - if(vars[V]!=initial(vars[V])) S[V]<>ic - if(istext(ic)) icon=swapmaps_iconcache[ic] - if(l && contents!=l) - contents+=l - qdel(l) +/atom/Write(savefile/S) + for(var/V in vars-"x"-"y"-"z"-"contents"-"icon"-"overlays"-"underlays") + if(issaved(vars[V])) + if(vars[V]!=initial(vars[V])) S[V]<>ic + if(istext(ic)) icon=swapmaps_iconcache[ic] + if(l && contents!=l) + contents+=l + qdel(l) // set this up (at runtime) as follows: @@ -510,7 +510,7 @@ var/swapmaps_initialized var/swapmaps_loaded var/swapmaps_byname -proc/InitializeSwapMaps() +/proc/InitializeSwapMaps() if(swapmaps_initialized) return swapmaps_initialized=1 swapmaps_compiled_maxx=world.maxx @@ -524,16 +524,16 @@ proc/InitializeSwapMaps() // so you can look up an icon file by name or vice-versa swapmaps_iconcache[swapmaps_iconcache[V]]=V -proc/SwapMaps_AddIconToCache(name,icon) +/proc/SwapMaps_AddIconToCache(name,icon) if(!swapmaps_iconcache) swapmaps_iconcache=list() swapmaps_iconcache[name]=icon swapmaps_iconcache[icon]=name -proc/SwapMaps_Find(id) +/proc/SwapMaps_Find(id) InitializeSwapMaps() return swapmaps_byname[id] -proc/SwapMaps_Load(id) +/proc/SwapMaps_Load(id) InitializeSwapMaps() var/swapmap/M=swapmaps_byname[id] if(!M) @@ -554,29 +554,29 @@ proc/SwapMaps_Load(id) M.mode=text return M -proc/SwapMaps_Save(id) +/proc/SwapMaps_Save(id) InitializeSwapMaps() var/swapmap/M=swapmaps_byname[id] if(M) M.Save() return M -proc/SwapMaps_Save_All() +/proc/SwapMaps_Save_All() InitializeSwapMaps() for(var/swapmap/M in swapmaps_loaded) if(M) M.Save() -proc/SwapMaps_Unload(id) +/proc/SwapMaps_Unload(id) InitializeSwapMaps() var/swapmap/M=swapmaps_byname[id] if(!M) return // return silently from an error M.Unload() return 1 -proc/SwapMaps_DeleteFile(id) +/proc/SwapMaps_DeleteFile(id) fdel("map_[id].sav") fdel("map_[id].txt") -proc/SwapMaps_CreateFromTemplate(template_id) +/proc/SwapMaps_CreateFromTemplate(template_id) var/swapmap/M=new var/savefile/S var/text=0 @@ -603,7 +603,7 @@ proc/SwapMaps_CreateFromTemplate(template_id) while(M.locked) sleep(1) return M -proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) +/proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) var/swapmap/M=new var/savefile/S var/text=0 @@ -630,7 +630,7 @@ proc/SwapMaps_LoadChunk(chunk_id,turf/locorner) qdel(M) return 1 -proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) +/proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) if(!corner1 || !corner2) world.log << "SwapMaps error in SwapMaps_SaveChunk():" if(!corner1) world.log << " corner1 turf is null" @@ -651,7 +651,7 @@ proc/SwapMaps_SaveChunk(chunk_id,turf/corner1,turf/corner2) qdel(M) return 1 -proc/SwapMaps_GetSize(id) +/proc/SwapMaps_GetSize(id) var/savefile/S var/text=0 if(swapmaps_mode==SWAPMAPS_TEXT && fexists("map_[id].txt")) diff --git a/code/modules/martial_arts/skrell.dm b/code/modules/martial_arts/skrell.dm index 66acedb452f..5d87ba2145a 100644 --- a/code/modules/martial_arts/skrell.dm +++ b/code/modules/martial_arts/skrell.dm @@ -57,7 +57,7 @@ A.visible_message("[A] strikes [D] with their closed fist!") return 1 -datum/martial_art/karak_virul/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) +/datum/martial_art/karak_virul/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) return 1 ..() diff --git a/code/modules/martial_arts/sol_combat.dm b/code/modules/martial_arts/sol_combat.dm index f6e9caa9055..5138c6f2347 100644 --- a/code/modules/martial_arts/sol_combat.dm +++ b/code/modules/martial_arts/sol_combat.dm @@ -48,7 +48,7 @@ D.silent += 10 return 1 -datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) +/datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/living/carbon/human/D) if(check_streak(A,D)) return 1 ..() @@ -111,4 +111,4 @@ datum/martial_art/sol_combat/grab_act(var/mob/living/carbon/human/A, var/mob/liv #undef NECK_CHOP #undef LEG_SWEEP -#undef QUICK_CHOKE \ No newline at end of file +#undef QUICK_CHOKE diff --git a/code/modules/mob/abstract/new_player/sprite_accessories.dm b/code/modules/mob/abstract/new_player/sprite_accessories.dm index 94b41a72f09..8f5d4fc364f 100644 --- a/code/modules/mob/abstract/new_player/sprite_accessories.dm +++ b/code/modules/mob/abstract/new_player/sprite_accessories.dm @@ -65,1744 +65,1744 @@ Follow by example and make good judgement based on length which list to include icon = 'icons/mob/human_face/hair.dmi' // default icon for all hairs var/length = 1 - bald - name = "Bald" // try to capitalize the names please~ - icon_state = "bald" // you do not need to define _s or _l sub-states, game automatically does this for you - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi,/datum/species/diona, /datum/species/diona/coeu, /datum/species/machine, /datum/species/machine/industrial, /datum/species/machine/industrial/hephaestus, /datum/species/machine/industrial/xion, /datum/species/machine/zenghu, /datum/species/machine/bishop) - length = 0 - chatname = "bald head" //aim to keep these lowercase so they fit into the hair tugging message - - eighties - name = "80's" - icon_state = "hair_80s" - length = 3 - chatname = "long hair" - - eighties_ponytail - name = "80's Ponytail" - icon_state = "hair_80s_ponytail" - length = 2 - chatname = "ponytail" - - eighties_ponytail_alt - name = "80's Ponytail Alt" - icon_state = "hair_80s_ponytail_alt" - length = 2 - chatname = "ponytail" - - afro - name = "Afro" - icon_state = "hair_afro" - length = 4 - chatname = "afro" - - afro2 - name = "Afro 2" - icon_state = "hair_afro2" - length = 4 - chatname = "afro" - - afro3 - name = "Afro, Big" - icon_state = "hair_afrobig" - length = 4 - chatname = "big afro" - - amanita - name = "Amanita" - icon_state = "hair_amanita" - chatname = "short curls" - - amanita_long - name = "Amanita, Long" - icon_state = "hair_amanita_long" - length = 3 - chatname = "long curls" - - amanita_long_alt - name = "Amanita, Long Alt" - icon_state = "hair_amanita_long_alt" - length = 3 - chatname = "long curls" - - amazon - name = "Amazon" - icon_state = "hair_amazon" - length = 2 - chatname = "long hair" - - averagejoe - name = "Average Joe" - icon_state = "hair_averagejoe" - chatname = "short hair" - - baldingfade - name = "Balding Fade" - icon_state = "hair_baldingfade" - length = 0 - chatname = "bald head" - - baldinghair - name = "Balding Hair" - icon_state = "hair_baldinghair" //hair_e - length = 0 - chatname = "balding hair" - - bangs - name = "Bangs" - icon_state = "hair_bangs" - length = 2 - chatname = "fringe" - - bangs_short - name = "Bangs, Short" - icon_state = "hair_bangs_short" - chatname = "fringe" - - bangs_veryshort - name = "Bangs, Very Short" - icon_state = "hair_bangs_veryshort" - chatname = "fringe" - - bedhead - name = "Bedhead" - icon_state = "hair_bedhead" - chatname = "messy locks" - - bedhead2 - name = "Bedhead 2" - icon_state = "hair_bedhead2" - chatname = "messy locks" - - bedhead3 - name = "Bedhead 3" - icon_state = "hair_bedhead3" - chatname = "wavy hair" - - bedhead4 - name = "Bedhead 4" - icon_state = "hair_bedhead4" - length = 4 - chatname = "messy locks" - - beehive - name = "Beehive" - icon_state = "hair_beehive" - length = 2 - chatname = "beehive hairdo" - - beehive2 - name = "Beehive 2" - icon_state = "hair_beehive2" - length = 2 - chatname = "beehive hairdo" - - beehive3 - name = "Beehive 3" - icon_state = "hair_beehive3" - length = 2 - chatname = "beehive hairdo" - - belenko - name = "Belenko" - icon_state = "hair_belenko" - length = 2 - chatname = "messy hair" - - belenko_tied - name = "Belenko (Tied)" - icon_state = "hair_belenkotied" - length = 2 - chatname = "messy ponytail" - - bob - name = "Bob" - icon_state = "hair_bob" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - chatname = "short hair" - - bob_chin - name = "Bob, Chin Length" - icon_state = "hair_bob_chin" - chatname = "short hair" - - bob_kusanagi - name = "Bob, Kusanagi" - icon_state = "hair_bob_kusanagi" - chatname = "short hair" - - bob_shoulder - name = "Bob, Shoulder Length" - icon_state = "hair_bob_shoulder" - chatname = "short hair" - - bobcurl - name = "Bobcurl" - icon_state = "hair_bobcurl" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - chatname = "curls" - - bobcurl2 - name = "Bobcurl 2" - icon_state = "hair_bobcurl2" - chatname = "curls" - - bowl - name = "Bowl" - icon_state = "hair_bowlcut" - chatname = "bowl cut" - - bowlcut2 - name = "Bowl 2" - icon_state = "hair_bowlcut2" - chatname = "bowl cut" - - bowlcut_birdnest - name = "Bowl, Birdnest" - icon_state = "hair_bowlcut_birdnest" - length = 4 - chatname = "bowl cut" - - braid_grande - name = "Braid, Grande" - icon_state = "hair_braid_grande" - length = 3 - chatname = "braid" - - braid_medium - name = "Braid, Medium" - icon_state = "hair_braid_medium" - length = 2 - chatname = "braid" - - braided - name = "Braided" - icon_state = "hair_braided" - length = 3 - chatname = "braids" - - braided_alt - name = "Braided, Alt" - icon_state = "hair_braided_alt" - length = 3 - chatname = "braids" - - braided_hipster - name = "Braided, Hipster" - icon_state = "hair_braided_hipster" - length = 3 - chatname = "braids" - - bun - name = "Bun" - icon_state = "hair_bun" - length = 2 - chatname = "hair bun" - - bun_casual - name = "Bun, Casual" - icon_state = "hair_bun_casual" - length = 2 - chatname = "hair bun" - - bun_donut - name = "Bun, Donut" - icon_state = "hair_bun_donut" - length = 2 - chatname = "hair bun" - - bun_double - name = "Bun, Double" - icon_state = "hair_bun_double" - length = 3 - chatname = "hair buns" - - bun_low - name = "Bun, Low" - icon_state = "hair_bun_low" - length = 2 - chatname = "hair bun" - - bun_manbun - name = "Bun, Manbun" - icon_state = "hair_bun_manbun" - length = 2 - chatname = "manbun" - - bun_odango - name = "Bun, Odango" - icon_state = "hair_bun_odango" - length = 2 - chatname = "hair buns" - - bun_odango2 - name = "Bun, Odango 2" - icon_state = "hair_bun_odango2" - length = 2 - chatname = "hair buns" - - bun_odango3 - name = "Bun, Odango 3" - icon_state = "hair_bun_odango3" - length = 3 - chatname = "hair buns" - - bun_overeye - name = "Bun, Overeye" - icon_state = "hair_bun_overeye" - length = 2 - chatname = "hair bun" - - bun_short - name = "Bun, Short" - icon_state = "hair_bun_short" - length = 2 - chatname = "hair bun" - - bun_short2 - name = "Bun, Short 2" - icon_state = "hair_bun_short2" - length = 2 - chatname = "hair bun" - - bun_tight - name = "Bun, Tight" - icon_state = "hair_bun_tight" - length = 2 - chatname = "hair bun" - - bun_topknot - name = "Bun, Topknot" - icon_state = "hair_bun_topknot" - length = 2 - chatname = "hair bun" - - buzzcut - name = "Buzzcut" - icon_state = "hair_buzzcut" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - chatname = "unbuzzed hair" //grabbing the grabbable hair - - buzzcut2 - name = "Buzzcut 2" - icon_state = "hair_buzzcut2" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - chatname = "unbuzzed hair" - - chrono - name = "Chrono" - icon_state = "hair_chrono" - length = 4 - chatname = "spiked hair" - - cia - name = "CIA" - icon_state = "hair_cia" - chatname = "short hair" - - coffeehouse - name = "Coffee House Cut" - icon_state = "hair_coffeehouse" - chatname = "coffee house haircut" - - coffeehouse_shave - name = "Coffee House Shave" - icon_state = "hair_coffeehouse_shave" - chatname = "coffee house haircut" - - combover - name = "Combover" - icon_state = "hair_combover" - chatname = "groomed hair" - - country - name = "Country" - icon_state = "hair_country" - chatname = "ponytail" - - crew - name = "Crewcut" - icon_state = "hair_crewcut" - chatname = "short hair" - - curls - name = "Curls" - icon_state = "hair_curls" - chatname = "curls" - - cut - name = "Cut Hair" - icon_state = "hair_cuthair" //hair_c - chatname = "short hair" - - devillock - name = "Devil Lock" - icon_state = "hair_devilock" - chatname = "devil locks" - - dreadlocks - name = "Dreadlocks" - icon_state = "hair_dreads" - length = 4 - chatname = "dreadlocks" - - drills_drillruru - name = "Drills, Drillruru" - icon_state = "hair_drills_drillruru" - length = 2 - chatname = "hair drills" - - drills_drillruru_long - name = "Drills, Drillruru Long" - icon_state = "hair_drills_drillruru_long" - length = 3 - chatname = "hair drills" - - emo - name = "Emo" - icon_state = "hair_emo" - chatname = "fringe" - - emo_alt - name = "Emo, Alt" - icon_state = "hair_emo_alt" - chatname = "fringe" - - emo_long - name = "Emo, Long" - icon_state = "hair_emo_long" - chatname = "long fringe" - length = 2 - - emofringe - name = "Emo Fringe" - icon_state = "hair_emofringe" - chatname = "fringe" - - emofringe_long - name = "Emo Fringe Long" - icon_state = "hair_emofringe_long" - length = 3 - chatname = "long fringe" - - emofringe_longbun - name = "Emo Fringe Long Bun" - icon_state = "hair_emofringe_longbun" - length = 3 - chatname = "hair bun" - - emorightfringe_long - name = "Emo Right Fringe Long" - icon_state = "hair_emofringe_long" - length = 3 - chatname = "long fringe" - - emofringe_long_alt - name = "Emo Fringe Long Alt" - icon_state = "hair_emofringe_longalt" - length = 3 - chatname = "long fringe" - - emorightfringe_long_alt - name = "Emo Right Fringe Long Alt" - icon_state = "hair_emorightfringe_longalt" - length = 3 - chatname = "long fringe" - - fade_clean - name = "Fade, Clean" - icon_state = "hair_fade_clean" - chatname = "short hair" - - fade_cleanlow - name = "Fade, Clean Low" - icon_state = "hair_fade_cleanlow" - chatname = "short hair" - - fade_high - name = "Fade, High" - icon_state = "hair_fade_high" - chatname = "unshaved hair" - - fade_low - name = "Fade, Low" - icon_state = "hair_fade_low" - chatname = "short hair" - - fade_manbun - name = "Fade, Manbun" - icon_state = "hair_fade_manbun" - chatname = "short hair" - - fade_medium - name = "Fade, Medium" - icon_state = "hair_fade_medium" - chatname = "unshaved hair" - - fade_none - name = "Fade, None" - icon_state = "hair_fade_none" - chatname = "short hair" - - father - name = "Father" - icon_state = "hair_father" - chatname = "short hair" - - feather - name = "Feather" - icon_state = "hair_feather" - length = 2 - chatname = "short hair" - - flat_top - name = "Flat Top" - icon_state = "hair_flattop" - chatname = "flat top hair" - - flair - name = "Flaired Hair" - icon_state = "hair_flair" - length = 2 - chatname = "flaired hair" - - flow - name = "Flow Hair" - icon_state = "hair_flow" //hair_f - chatname = "short hair" - - gelled - name = "Gelled Back" - icon_state = "hair_gelled" - length = 2 - chatname = "gelled-back hair" - - gentle - name = "Gentle" - icon_state = "hair_gentle" - length = 3 - chatname = "long hair" - - gentlealt - name = "Gentle Alt" - icon_state = "hair_gentlealt" - length = 3 - chatname = "long hair" - - gentle2 - name = "Gentle 2" - icon_state = "hair_gentle2" - length = 2 - chatname = "long hair" - - gentle2_alt - name = "Gentle 2, Alt" - icon_state = "hair_gentle2_alt" - length = 2 - chatname = "long hair" - - gentle2_long - name = "Gentle 2, Long" - icon_state = "hair_gentle2_long" - length = 3 - chatname = "long hair" - - gentle2_longalt - name = "Gentle 2, Long Alt" - icon_state = "hair_gentle2_longalt" - length = 3 - chatname = "long hair" - - glossy - name = "Glossy" - icon_state = "hair_glossy" - length = 2 - chatname = "short hair" - - halfbang - name = "Half-banged Hair" - icon_state = "hair_halfbang" - chatname = "short hair" - - halfbangalt - name = "Half-banged Hair, Alt" - icon_state = "hair_halfbang_alt" - chatname = "short hair" - - himecut - name = "Hime Cut" - icon_state = "hair_himecut" - length = 3 - chatname = "long hair" - - himecut_alt - name = "Hime Cut, Alt" - icon_state = "hair_himecut_alt" - length = 3 - chatname = "long hair" - - himecut_alt2 - name = "Hime Cut, Alt 2" - icon_state = "hair_himecut_alt2" - length = 3 - chatname = "long hair" - - himecut_long - name = "Hime Cut, Long" - icon_state = "hair_himecut_long" - length = 3 - chatname = "long hair" - - himecut_long_ponytail - name = "Hime Cut, Long Ponytail" - icon_state = "hair_himecut_long_ponytail" - length = 3 - chatname = "long hair" - - himecut_ponytail - name = "Hime Cut, Ponytail" - icon_state = "hair_himecut_ponytail" - length = 3 - chatname = "long hair" - - himecut_ponytail_up - name = "Hime Cut, Ponytail Up" - icon_state = "hair_himecut_ponytail_up" - length = 2 - chatname = "long hair" - - himecut_short - name = "Hime Cut, Short" - icon_state = "hair_himecut_short" - chatname = "short hair" - - hitop - name = "Hitop" - icon_state = "hair_hitop" - chatname = "hitop" - - jade - name = "Jade" - icon_state = "hair_jade" - length = 2 - chatname = "messy hair" - - jensen - name = "Jensen Hair" // Removing Videogame References - icon_state = "hair_jensen" - chatname = "short hair" - - joestar - name = "Joestar" - icon_state = "hair_joestar" - chatname = "short hair" - - longfringe - name = "Long Fringe" - icon_state = "hair_longfringe" - length = 2 - chatname = "long hair" - - longfringe_longer - name = "Long Fringe, Longer" - icon_state = "hair_longfringe_longer" - length = 3 - chatname = "long hair" - - long - name = "Long Hair" - icon_state = "hair_long" - length = 3 - chatname = "long hair" - - long_alt - name = "Long Hair, Alt" - icon_state = "hair_long_alt" - length = 2 - chatname = "long hair" - - long_shoulder - name = "Long Hair, Shoulder-length" - icon_state = "hair_long_shoulder" //hair_b - length = 2 - chatname = "shoulder-length hair" - - long_verylong - name = "Long Hair, Very Long" - icon_state = "hair_long_verylong" - length = 4 - chatname = "very long hair" - - marysue - name = "Mary Sue" - icon_state = "hair_marysue" - length = 3 - chatname = "long hair" - - messy - name = "Messy" - icon_state = "hair_messy" - length = 2 - chatname = "messy hair" - - messy2 - name = "Messy 2" - icon_state = "hair_messy2" - length = 2 - chatname = "messy hair" - - messy3 - name = "Messy 3" - icon_state = "hair_messy3" - length = 2 - chatname = "messy hair" - - modern - name = "Modern" - icon_state = "hair_modern" - length = 3 - chatname = "long hair" - - mohawk - name = "Mohawk" - icon_state = "hair_mohawk" - chatname = "mohawk" - - mohawk_big - name = "Mohawk, Big" - icon_state = "hair_mohawk_big" - chatname = "mohawk" - - mohawk_high - name = "Mohawk, High" - icon_state = "hair_mohawk_high" //hair_d - chatname = "mohawk" - - mohawk_hightight - name = "Mohawk, High and Tight" - icon_state = "hair_mohawk_hightight" - chatname = "mohawk" - - mohawk_naomi - name = "Mohawk, Naomi" - icon_state = "hair_mohawk_naomi" //slightly longer on the side icons, in case you were wondering - chatname = "mohawk" - - mohawk_reverse - name = "Mohawk, Reverse" - icon_state = "hair_mohawk_reverse" - chatname = "short hair" - - mohawk_shaved - name = "Mohawk, Shaved" - icon_state = "hair_mohawk_shaved" - chatname = "mohawk" - - mohawk_shavedlong - name = "Mohawk, Shaved and Long" - icon_state = "hair_mohawk_shavedlong" - chatname = "mohawk" - - mohawk_shavedback - name = "Mohawk, Shaved Back" - icon_state = "hair_mohawk_shavedback" - chatname = "mohawk" - - mohawk_shavedbacklong - name = "Mohawk, Shaved Back and Long" - icon_state = "hair_mohawk_shavedbacklong" - chatname = "mohawk" - - mohawk_shavedtight - name = "Mohawk, Shaved and Tight" - icon_state = "hair_mohawk_shavedtight" - chatname = "mohawk" - - mulder - name = "Mulder" - icon_state = "hair_mulder" - chatname = "short hair" - - neat - name = "Neat" - icon_state = "hair_neat" - chatname = "groomed hair" - - neatlong - name = "Neat (Long)" - icon_state = "hair_neatlong" - length = 2 - chatname = "long hair" - - newyou - name = "New You" - icon_state = "hair_newyou" - length = 3 - chatname = "ponytail" - - nia - name = "Nia" - icon_state = "hair_nia" - length = 3 - chatname = "long hair" - - ombre - name = "Ombre" - icon_state = "hair_ombre" - length = 2 - chatname = "short hair" - - oneshoulder - name = "One Shoulder" - icon_state = "hair_oneshoulder" - length = 2 - chatname = "one shoulder hairstyle" - - overeye_long - name = "Overeye, Long" - icon_state = "hair_overeye_long" - length = 3 - chatname = "long hair" - - overeye_short - name = "Overeye, Short" - icon_state = "hair_overeye_short" - chatname = "long hair" - length = 2 - - overeye_verylong - name = "Overeye, Very Long" - icon_state = "hair_overeye_verylong" - length = 3 - chatname = "long hair" - - overeye_veryshort - name = "Overeye, Very Short" - icon_state = "hair_overeye_veryshort" - chatname = "short hair" - - overeye_veryshort_alt - name = "Overeye, Very Short Alt" - icon_state = "hair_overeye_veryshort_alt" - chatname = "short hair" - - oxton - name = "Oxton" - icon_state = "hair_oxton" - chatname = "short hair" - - parted - name = "Parted" - icon_state = "hair_parted" - chatname = "short hair" - - parted_alt - name = "Parted, Alt" - icon_state = "hair_parted_alt" - chatname = "short hair" - - parted_swept - name = "Parted, Swept" - icon_state = "hair_parted_swept" - chatname = "short hair" - - pigtails_belle - name = "Pigtails, Belle" - icon_state = "hair_pigtails_belle" - gender = FEMALE - length = 2 - chatname = "pigtails" - - pigtails_kagami - name = "Pigtails, Kagami" - icon_state = "hair_pigtails_kagami" - length = 2 - chatname = "pigtails" - - pigtails_low - name = "Pigtails, Low" - icon_state = "hair_pigtails_low" - length = 2 - chatname = "pigtails" - - pigtails_nitori - name = "Pigtails, Nitori" - icon_state = "hair_pigtails_nitori" - length = 2 - chatname = "pigtails" - - pigtails_twintail - name = "Pigtails, Twintail" - icon_state = "hair_pigtails_twintail" - length = 2 - chatname = "pigtails" - - pigtails_twintail_ombre - name = "Pigtails, Twintail Ombre" - icon_state = "hair_pigtails_twintail_ombre" - length = 2 - chatname = "pigtails" - - pigtails_twintail_ombre_alt - name = "Pigtails, Twintail Ombre Alt" - icon_state = "hair_pigtails_twintail_ombre_alt" - length = 3 - chatname = "pigtails" - - pompadour - name = "Pompadour" - icon_state = "hair_pompadour" - length = 3 - chatname = "pompadour" - - pompadour_dandy - name = "Pompadour, Dandy" - icon_state = "hair_pompadour_dandy" - length = 3 - chatname = "pompadour" - - ponytail1 - name = "Ponytail 1" - icon_state = "hair_ponytail1" - length = 2 - chatname = "ponytail" - - ponytail2 - name = "Ponytail 2" - icon_state = "hair_ponytail2" //hair_pa - length = 2 - chatname = "ponytail" - - ponytail3 - name = "Ponytail 3" - icon_state = "hair_ponytail3" - length = 2 - chatname = "ponytail" - - ponytail4 - name = "Ponytail 4" - icon_state = "hair_ponytail4" - length = 2 - chatname = "ponytail" - - ponytail5 - name = "Ponytail 5" - icon_state = "hair_ponytail5" - length = 2 - chatname = "ponytail" - - ponytail6 - name = "Ponytail 6" - icon_state = "hair_ponytail6" - length = 2 - chatname = "ponytail" - - ponytail7 - name = "Ponytail 7" - icon_state = "hair_ponytail7" - length = 2 - chatname = "ponytail" - - ponytail8 - name = "Ponytail 8" - icon_state = "hair_ponytail8" - length = 2 - chatname = "ponytail" - - ponytail9 - name = "Ponytail 9" - icon_state = "hair_ponytail9" - length = 2 - chatname = "ponytail" - - ponytail_short - name = "Ponytail, Short" - icon_state = "hair_ponytail_short" - length = 2 - chatname = "short ponytail" - - ponytail_short2 - name = "Ponytail, Short 2" - icon_state = "hair_ponytail_short2" - length = 2 - chatname = "short ponytail" - - ponytail_short3 - name = "Ponytail, Short 3" - icon_state = "hair_ponytail_short3" - length = 2 - chatname = "short ponytail" - - ponytail_short4 - name = "Ponytail, Short 4" - icon_state = "hair_ponytail_short4" - length = 2 - chatname = "short ponytail" - - ponytail_short5 - name = "Ponytail, Short 5" - icon_state = "hair_ponytail_short5" - length = 2 - chatname = "short ponytail" - - ponytail_fringetail - name = "Ponytail, Fringetail" - icon_state = "hair_ponytail_fringetail" - length = 2 - chatname = "ponytail" - - ponytail_high - name = "Ponytail, High" - icon_state = "hair_ponytail_high" - length = 2 - chatname = "ponytail" - - ponytail_side - name = "Ponytail, Side" - icon_state = "hair_ponytail_side" - length = 2 - chatname = "ponytail" - - ponytail_side2 - name = "Ponytail, Side 2" - icon_state = "hair_ponytail_side2" - length = 2 - chatname = "ponytail" - - ponytail_side3 - name = "Ponytail, Side 3" - icon_state = "hair_ponytail_side3" - length = 2 - chatname = "ponytail" - - ponytail_side4 - name = "Ponytail, Side 4" - icon_state = "hair_ponytail_side4" - length = 2 - chatname = "ponytail" - - ponytail_spiky - name = "Ponytail, Spiky" - icon_state = "hair_ponytail_spiky" - length = 4 - chatname = "ponytail" - - ponytail_wisp - name = "Ponytail, Wisp" - icon_state = "hair_ponytail_wisp" - length = 3 - chatname = "ponytail" - - ponytail_zieglertail - name = "Ponytail, Zieglertail" - icon_state = "hair_ponytail_ziegler" - length = 2 - chatname = "ponytail" - - bunlarge2 - name = "Bun, Large 2" - icon_state = "hair_bun_large2" - length = 2 - chatname = "large bun" - - poofy - name = "Poofy" - icon_state = "hair_poofy" - length = 2 - chatname = "poofy hair" - - poofy2 - name = "Poofy 2" - icon_state = "hair_poofy2" - length = 2 - chatname = "poofy hair" - - punk_chelsea - name = "Punk Shave, Chelsea" - icon_state = "hair_punk_chelsea" - chatname = "fringe" - - punk_chelsea_bighawk - name = "Punk Shave, Chelsea Big Hawk" - icon_state = "hair_punk_chelsea_bighawk" - chatname = "mohawk" - - punk_chelsea_smallhawk - name = "Punk Shave, Chelsea Small Hawk" - icon_state = "hair_punk_chelsea_smallhawk" - chatname = "mohawk" - - punk_chelsea_ponytail - name = "Punk Shave, Chelsea Ponytail" - icon_state = "hair_punk_chelsea_ponytail" - chatname = "ponytail" - - punk_chelseafringe - name = "Punk Shave, Chelsea Fringe" - icon_state = "hair_punk_chelseafringe" - chatname = "fringe" - - punk_chelseafringealt - name = "Punk Shave, Chelsea Fringe Alt" - icon_state = "hair_punk_chelseafringe_alt" - chatname = "fringe" - - punk_chelseafringe_bighawk - name = "Punk Shave, Chelsea Big Hawk" - icon_state = "hair_punk_chelseafringe_bighawk" - chatname = "mohawk" - - punk_chelseafringe_smallhawk - name = "Punk Shave, Chelsea Small Hawk" - icon_state = "hair_punk_chelseafringe_smallhawk" - chatname = "mohawk" - - punk_chelseafringe_ponytail - name = "Punk Shave, Chelsea Ponytail" - icon_state = "hair_punk_chelseafringe_ponytail" - chatname = "ponytail" - - punk_halfshaved - name = "Punk Shave, Half-Shaved" - icon_state = "hair_punk_halfshaved" - chatname = "unshaved hair" // grabbing the parts that can be grabbed - - punk_halfshaved_alt - name = "Punk Shave, Half-Shaved Alt" - icon_state = "hair_punk_halfshaved_alt" - chatname = "unshaved hair" - - punk_halfshaved_bun - name = "Punk Shave, Half-Shaved Bun" - icon_state = "hair_punk_halfshaved_bun" - length = 2 - chatname = "hair bun" - - punk_halfshaved_bun_alt - name = "Punk Shave, Half-Shaved Bun Alt" - icon_state = "hair_punk_halfshaved_bun_alt" - length = 2 - chatname = "hair bun" - - punk_halfshaved_emo - name = "Punk Shave, Half-Shaved Emo" - icon_state = "hair_punk_halfshaved_emo" - length = 2 - chatname = "unshaved hair" - - punk_sidecut_left - name = "Punk Shave, Sidecut Left" - icon_state = "hair_punk_sideleft" - length = 2 - chatname = "unshaved hair" - - punk_sidecut_right - name = "Punk Shave, Sidecut Right" - icon_state = "hair_punk_sideright" - length = 2 - chatname = "unshaved hair" - - quiff - name = "Quiff" - icon_state = "hair_quiff" - length = 2 - chatname = "quiff" - - ronin - name = "Ronin" - icon_state = "hair_ronin" - length = 2 - chatname = "long hair" - - rosa - name = "Rosa" - icon_state = "hair_rosa" - chatname = "short hair" - - rows - name = "Rows" - icon_state = "hair_rows" - length = 2 - chatname = "cornrows" - - rows_braid - name = "Rows, Braid" - icon_state = "hair_rows_braid" - length = 2 - chatname = "cornrows" - - rows_bun - name = "Rows, Bun" - icon_state = "hair_rows_bun" - length = 2 - chatname = "cornrows" - - rows_dualtail - name = "Rows, Dual Tail" - icon_state = "hair_rows_dualtail" - length = 2 - chatname = "cornrows" - - rows_long - name = "Rows, Long" - icon_state = "hair_rows_long" - length = 2 - chatname = "cornrows" - - scully - name = "Scully" - icon_state = "hair_scully" - chatname = "short hair" - - shaved - name = "Shaved" - icon_state = "hair_shaved" - length = 0 - chatname = "shaved head" - - short - name = "Short Hair" - icon_state = "hair_shorthair" //hair_a - chatname = "short hair" - - short2 - name = "Short Hair 2" - icon_state = "hair_shorthair2" - chatname = "short hair" - - short3 - name = "Short Hair 3" - icon_state = "hair_shorthair3" - chatname = "short hair" - - short4 - name = "Short Hair 4" - icon_state = "hair_shorthair4" - chatname = "short hair" - - sideswept - name = "Sideswept Hair" - icon_state = "hair_sideswept" - chatname = "short hair" - - skinhead - name = "Skinhead" - icon_state = "hair_skinhead" - chatname = "matted shaved hair" - - sleeze - name = "Sleeze" - icon_state = "hair_sleeze" - chatname = "short hair" - - slick - name = "Slick" - icon_state = "hair_slick" - chatname = "slicked hair" - - spiky - name = "Spiky" - icon_state = "hair_spiky" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - chatname = "mighty spikes" - - straightlong - name = "Straight Long" - icon_state = "hair_straightlong" - length = 3 - chatname = "long hair" - - thinning - name = "Thinning" - icon_state = "hair_thinning" - chatname = "short hair" - - thinningback - name = "Thinning Back" - icon_state = "hair_thinningback" - chatname = "short hair" - - thinningfront - name = "Thinning Front" - icon_state = "hair_thinningfront" - chatname = "short hair" - - tresshoulder - name = "Tress Shoulder" - icon_state = "hair_tressshoulder" - length = 2 - chatname = "curls" - - tresshoulderdouble - name = "Tress Shoulder Double" - icon_state = "hair_tressshoulder_double" - length = 2 - chatname = "curls" - - trimmed - name = "Trimmed" - icon_state = "hair_trimmed" - chatname = "trimmed hair" - - trimmedflat - name = "Trimmed Flat Top" - icon_state = "hair_trimmedflat" - chatname = "trimmed hair" - - twincurls - name = "Twincurls" - icon_state = "hair_twincurls" - length = 2 - chatname = "curls" - - twincurls2 - name = "Twincurls 2" - icon_state = "hair_twincurls2" - length = 2 - chatname = "curls" - - undercut - name = "Undercut" - icon_state = "hair_undercut" - chatname = "unshaved hair" - - undercut2 - name = "Undercut 2" - icon_state = "hair_undercut2" - chatname = "undercut" - - undercut3 - chatname = "unshaved hair" - name = "Undercut 3" - icon_state = "hair_undercut3" - chatname = "unshaved hair" - - undercut4 - name = "Undercut 4" - icon_state = "hair_undercut4" - chatname = "unshaved hair" - - undercut5 - name = "Undercut 5" - icon_state = "hair_undercut5" - chatname = "unshaved hair" - - unkept - name = "Unkept" - icon_state = "hair_unkept" - length = 3 - chatname = "unkept hairdo" - - updo - name = "Updo" - icon_state = "hair_updo" - length = 2 - chatname = "updo" - - vegeta - name = "Vegeta" - icon_state = "hair_vegeta" - length = 4 - chatname = "mighty spikes" - - volaju - name = "Volaju" - icon_state = "hair_volaju" - length = 2 - chatname = "long hair" - - wheeler - name = "Wheeler" - icon_state = "hair_wheeler" - chatname = "short hair" - - fingerwave - name = "Fingerwave" - icon_state = "hair_fingercurl" - chatname = "fluffy hair" - - bug_eyes - icon = 'icons/mob/human_face/dionae_hair.dmi' - name = "Bug Eyes" - icon_state = "bugeyes" - species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) - gender = NEUTER - do_colouration = FALSE - - human_eyes - name = "Human Eyes" - icon_state = "humaneyes" - - skrell_eyes - name = "Skrell Eyes" - icon_state = "skrelleyes" - - skrell_eyes_2 - name = "Skrell Eyes 2" - icon_state = "skrelleyes2" - - small_horns - name = "Small Horns" - icon_state = "smallhorns" - - horny - name = "Horny" - icon_state = "horny" - - headtails - name = "Head tails" - icon_state = "headtails" - - headtails_2 - name = "Head tails 2" - icon_state = "headtails2" - - tiny_eye - name = "Tiny Eye" - icon_state = "tinyeye" - - eyebrow - name = "Eyebrow" - icon_state = "eyebrow" - - bullhorn - name = "Bullhorn" - icon_state = "bullhorn" - - blinkinghelmethead - name = "Blinking Helmethead" - icon_state = "blinkinghelmethead" - - periscope - name = "Periscope" - icon_state = "periscope" - - glorp - name = "Glorp" - icon_state = "glorp" - - mellow_cap - name = "Mellow Cap" - icon_state = "mellowcap" - - red_cap - name = "Red Cap" - icon_state = "redcap" - - fun_guy - name = "Fun Guy" - icon_state = "funguy" - - spanish_moss - name = "Spanish Moss" - icon_state = "spanishmoss" - - shelflife - name = "Shelflife" - icon_state = "shelflife" - do_colouration = TRUE - - oak - name = "Oak" - icon_state = "oak" - - thorns - name = "Thorns" - icon_state = "thorns" - - stump - name = "Stump" - icon_state = "stump" - - // TG-format hair - uses ICON_MULTIPLY instead of ICON_ADD - balding - icon = 'icons/mob/human_face/hair_multiply.dmi' - icon_blend_mode = ICON_MULTIPLY - name = "Balding" - icon_state = "hair_balding" - length = 0 - chatname = "balding hair" - - balding_boddicker - name = "Balding, Boddicker" - icon_state = "hair_balding_boddicker" - length = 1 - chatname = "balding hair" - - bangs_light - name = "Bangs, Light" - icon_state = "hair_bangs_light" - length = 2 - chatname = "long hair" - - bob_alt - name = "Bob, Alt" - icon_state = "hair_bob_alt" - length = 1 - chatname = "short hair" - - braided_tail - name = "Braided, Tail" - icon_state = "hair_braided_tail" - length = 2 - chatname = "braids" - - bun_large - name = "Bun, Large" - icon_state = "hair_bun_large" - length = 2 - chatname = "hair bun" - - bun_librarian - name = "Bun, Librarian" - icon_state = "hair_bun_librarian" - length = 2 - chatname = "hair bun" - - bun_quad - name = "Bun, Quad" - icon_state = "hair_bun_quad" - length = 2 - chatname = "hair buns" - - bun_uniter - name = "Bun, Uniter" - icon_state = "hair_bun_uniter" - length = 2 - chatname = "hair bun" - - business - name = "Business" - icon_state = "hair_business" - length = 1 - chatname = "short hair" - - business2 - name = "Business 2" - icon_state = "hair_business2" - length = 1 - chatname = "short hair" - - business3 - name = "Business 3" - icon_state = "hair_business3" - length = 1 - chatname = "short hair" - - business4 - name = "Business 4" - icon_state = "hair_business4" - length = 1 - chatname = "short hair" - - cactus - name = "Cactus" - icon_state = "hair_cactus" - length = 3 - chatname = "very long hair" - - choppy - name = "Choppy" - icon_state = "hair_choppy" - length = 1 - chatname = "choppy hair" - - fade - name = "Fade" - icon_state = "hair_fade" - length = 1 - chatname = "groomed hair" - - fade_grown - name = "Fade, Grown" - icon_state = "hair_fade_grown" - length = 1 - chatname = "groomed hair" - - floof - name = "Floof" - icon_state = "hair_floof" - length = 2 - chatname = "fluffy hair" - - floof_short - name = "Floof, Short" - icon_state = "hair_floof_short" - length = 1 - chatname = "fluffy hair" - - hair_antenna - name = "Hair Antenna" - icon_state = "hair_hairantenna" - length = 2 - chatname = "long hair" - - hedgehog - name = "Hedgehog" - icon_state = "hair_hedgehog" - length = 1 - chatname = "short hair" - - keanu - name = "Keanu" - icon_state = "hair_keanu" - length = 1 - chatname = "short hair" - - krewcut - name = "Krewcut" - icon_state = "hair_krewcut" - length = 1 - chatname = "fringe" - - messy4 - name = "Messy 4" - icon_state = "hair_messy4" - length = 1 - chatname = "messy hair" - - nia2 - name = "Nia 2" - icon_state = "hair_nia2" - length = 3 - chatname = "long hair" - - nia3 - name = "Nia 3" - icon_state = "hair_nia3" - length = 3 - chatname = "long hair" - - parted_short - name = "Parted, Short" - icon_state = "hair_parted_short" - length = 1 - chatname = "short hair" - - pigtails_simple - name = "Pigtails, Simple" - icon_state = "hair_pigtails_simple" - length = 2 - chatname = "pigtails" - - pixie - name = "Pixie" - icon_state = "hair_pixie" - length = 1 - chatname = "short hair" - - pompadour_iii - name = "Pompadour, Pomp III" - icon_state = "hair_pomp_iii" - length = 3 - chatname = "pompadour" - - ponytail_high2 - name = "Ponytail, High 2" - icon_state = "hair_ponytail_high2" - length = 2 - chatname = "ponytail" - - ponytail_jenjen - name = "Ponytail, Jenjen" - icon_state = "hair_ponytail_jenjen" - length = 2 - chatname = "ponytail" - - ponytail_side5 - name = "Ponytail, Side 5" - icon_state = "hair_ponytail_side5" - length = 2 - chatname = "ponytail" - - ponytail_side6 - name = "Ponytail, Side 6" - icon_state = "hair_ponytail_side6" - length = 2 - chatname = "ponytail" - - ponytail_side7 - name = "Ponytail, Side 7" - icon_state = "hair_ponytail_side7" - length = 2 - chatname = "braided ponytail" - - ponytail_straight - name = "Ponytail, Straight" - icon_state = "hair_ponytail_straight" - length = 2 - chatname = "ponytail" - - protagonist - name = "Protagonist" - icon_state = "hair_protagonist" - length = 1 - chatname = "short hair" - - punk_sideshaved - name = "Punk Shave, Sideshaved" - icon_state = "hair_punk_sideshaved" - length = 1 - chatname = "unshaved hair" //in reference to tugging the unshaved parts - - short_spiked - name = "Short Spiked" - icon_state = "hair_short_spiked" - length = 1 - chatname = "spiked hair" - - sidepart - name = "Sidepart" - icon_state = "hair_sidepart" - length = 1 - chatname = "short hair" - - sidepart_long - name = "Sidepart, Long" - icon_state = "hair_sidepart_long" - length = 3 - chatname = "long hair" - - swept - name = "Swept" - icon_state = "hair_swept" - length = 1 - chatname = "short hair" - - swept_short - name = "Swept, Short" - icon_state = "hair_swept_short" - length = 1 - chatname = "short hair" - - swept_back - name = "Swept, Back" - icon_state = "hair_swept_back" - length = 1 - chatname = "short hair" - - superbowl - name = "Bowl, Superbowl" - icon_state = "hair_bowlcut_superbowl" - length = 1 - chatname = "bowl cut" - - waxed - name = "Waxed" - icon_state = "hair_waxed" - chatname = "bald head" - - wavyshoulder - name = "Wavy Shoulder (Down)" - icon_state = "hair_wavyshoulder_down" - length = 2 - chatname = "wavy hair" - - wavyshoulder_pt - name = "Wavy Shoulder (Ponytail)" - icon_state = "hair_wavyshoulder_up" - length = 2 - chatname = "ponytail" +/datum/sprite_accessory/hair/bald + name = "Bald" // try to capitalize the names please~ + icon_state = "bald" // you do not need to define _s or _l sub-states, game automatically does this for you + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi,/datum/species/diona, /datum/species/diona/coeu, /datum/species/machine, /datum/species/machine/industrial, /datum/species/machine/industrial/hephaestus, /datum/species/machine/industrial/xion, /datum/species/machine/zenghu, /datum/species/machine/bishop) + length = 0 + chatname = "bald head" //aim to keep these lowercase so they fit into the hair tugging message + +/datum/sprite_accessory/hair/eighties + name = "80's" + icon_state = "hair_80s" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/eighties_ponytail + name = "80's Ponytail" + icon_state = "hair_80s_ponytail" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/eighties_ponytail_alt + name = "80's Ponytail Alt" + icon_state = "hair_80s_ponytail_alt" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/afro + name = "Afro" + icon_state = "hair_afro" + length = 4 + chatname = "afro" + +/datum/sprite_accessory/hair/afro2 + name = "Afro 2" + icon_state = "hair_afro2" + length = 4 + chatname = "afro" + +/datum/sprite_accessory/hair/afro3 + name = "Afro, Big" + icon_state = "hair_afrobig" + length = 4 + chatname = "big afro" + +/datum/sprite_accessory/hair/amanita + name = "Amanita" + icon_state = "hair_amanita" + chatname = "short curls" + +/datum/sprite_accessory/hair/amanita_long + name = "Amanita, Long" + icon_state = "hair_amanita_long" + length = 3 + chatname = "long curls" + +/datum/sprite_accessory/hair/amanita_long_alt + name = "Amanita, Long Alt" + icon_state = "hair_amanita_long_alt" + length = 3 + chatname = "long curls" + +/datum/sprite_accessory/hair/amazon + name = "Amazon" + icon_state = "hair_amazon" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/averagejoe + name = "Average Joe" + icon_state = "hair_averagejoe" + chatname = "short hair" + +/datum/sprite_accessory/hair/baldingfade + name = "Balding Fade" + icon_state = "hair_baldingfade" + length = 0 + chatname = "bald head" + +/datum/sprite_accessory/hair/baldinghair + name = "Balding Hair" + icon_state = "hair_baldinghair" //hair_e + length = 0 + chatname = "balding hair" + +/datum/sprite_accessory/hair/bangs + name = "Bangs" + icon_state = "hair_bangs" + length = 2 + chatname = "fringe" + +/datum/sprite_accessory/hair/bangs_short + name = "Bangs, Short" + icon_state = "hair_bangs_short" + chatname = "fringe" + +/datum/sprite_accessory/hair/bangs_veryshort + name = "Bangs, Very Short" + icon_state = "hair_bangs_veryshort" + chatname = "fringe" + +/datum/sprite_accessory/hair/bedhead + name = "Bedhead" + icon_state = "hair_bedhead" + chatname = "messy locks" + +/datum/sprite_accessory/hair/bedhead2 + name = "Bedhead 2" + icon_state = "hair_bedhead2" + chatname = "messy locks" + +/datum/sprite_accessory/hair/bedhead3 + name = "Bedhead 3" + icon_state = "hair_bedhead3" + chatname = "wavy hair" + +/datum/sprite_accessory/hair/bedhead4 + name = "Bedhead 4" + icon_state = "hair_bedhead4" + length = 4 + chatname = "messy locks" + +/datum/sprite_accessory/hair/beehive + name = "Beehive" + icon_state = "hair_beehive" + length = 2 + chatname = "beehive hairdo" + +/datum/sprite_accessory/hair/beehive2 + name = "Beehive 2" + icon_state = "hair_beehive2" + length = 2 + chatname = "beehive hairdo" + +/datum/sprite_accessory/hair/beehive3 + name = "Beehive 3" + icon_state = "hair_beehive3" + length = 2 + chatname = "beehive hairdo" + +/datum/sprite_accessory/hair/belenko + name = "Belenko" + icon_state = "hair_belenko" + length = 2 + chatname = "messy hair" + +/datum/sprite_accessory/hair/belenko_tied + name = "Belenko (Tied)" + icon_state = "hair_belenkotied" + length = 2 + chatname = "messy ponytail" + +/datum/sprite_accessory/hair/bob + name = "Bob" + icon_state = "hair_bob" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) + chatname = "short hair" + +/datum/sprite_accessory/hair/bob_chin + name = "Bob, Chin Length" + icon_state = "hair_bob_chin" + chatname = "short hair" + +/datum/sprite_accessory/hair/bob_kusanagi + name = "Bob, Kusanagi" + icon_state = "hair_bob_kusanagi" + chatname = "short hair" + +/datum/sprite_accessory/hair/bob_shoulder + name = "Bob, Shoulder Length" + icon_state = "hair_bob_shoulder" + chatname = "short hair" + +/datum/sprite_accessory/hair/bobcurl + name = "Bobcurl" + icon_state = "hair_bobcurl" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) + chatname = "curls" + +/datum/sprite_accessory/hair/bobcurl2 + name = "Bobcurl 2" + icon_state = "hair_bobcurl2" + chatname = "curls" + +/datum/sprite_accessory/hair/bowl + name = "Bowl" + icon_state = "hair_bowlcut" + chatname = "bowl cut" + +/datum/sprite_accessory/hair/bowlcut2 + name = "Bowl 2" + icon_state = "hair_bowlcut2" + chatname = "bowl cut" + +/datum/sprite_accessory/hair/bowlcut_birdnest + name = "Bowl, Birdnest" + icon_state = "hair_bowlcut_birdnest" + length = 4 + chatname = "bowl cut" + +/datum/sprite_accessory/hair/braid_grande + name = "Braid, Grande" + icon_state = "hair_braid_grande" + length = 3 + chatname = "braid" + +/datum/sprite_accessory/hair/braid_medium + name = "Braid, Medium" + icon_state = "hair_braid_medium" + length = 2 + chatname = "braid" + +/datum/sprite_accessory/hair/braided + name = "Braided" + icon_state = "hair_braided" + length = 3 + chatname = "braids" + +/datum/sprite_accessory/hair/braided_alt + name = "Braided, Alt" + icon_state = "hair_braided_alt" + length = 3 + chatname = "braids" + +/datum/sprite_accessory/hair/braided_hipster + name = "Braided, Hipster" + icon_state = "hair_braided_hipster" + length = 3 + chatname = "braids" + +/datum/sprite_accessory/hair/bun + name = "Bun" + icon_state = "hair_bun" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_casual + name = "Bun, Casual" + icon_state = "hair_bun_casual" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_donut + name = "Bun, Donut" + icon_state = "hair_bun_donut" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_double + name = "Bun, Double" + icon_state = "hair_bun_double" + length = 3 + chatname = "hair buns" + +/datum/sprite_accessory/hair/bun_low + name = "Bun, Low" + icon_state = "hair_bun_low" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_manbun + name = "Bun, Manbun" + icon_state = "hair_bun_manbun" + length = 2 + chatname = "manbun" + +/datum/sprite_accessory/hair/bun_odango + name = "Bun, Odango" + icon_state = "hair_bun_odango" + length = 2 + chatname = "hair buns" + +/datum/sprite_accessory/hair/bun_odango2 + name = "Bun, Odango 2" + icon_state = "hair_bun_odango2" + length = 2 + chatname = "hair buns" + +/datum/sprite_accessory/hair/bun_odango3 + name = "Bun, Odango 3" + icon_state = "hair_bun_odango3" + length = 3 + chatname = "hair buns" + +/datum/sprite_accessory/hair/bun_overeye + name = "Bun, Overeye" + icon_state = "hair_bun_overeye" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_short + name = "Bun, Short" + icon_state = "hair_bun_short" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_short2 + name = "Bun, Short 2" + icon_state = "hair_bun_short2" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_tight + name = "Bun, Tight" + icon_state = "hair_bun_tight" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/bun_topknot + name = "Bun, Topknot" + icon_state = "hair_bun_topknot" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/buzzcut + name = "Buzzcut" + icon_state = "hair_buzzcut" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) + chatname = "unbuzzed hair" //grabbing the grabbable hair + +/datum/sprite_accessory/hair/buzzcut2 + name = "Buzzcut 2" + icon_state = "hair_buzzcut2" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) + chatname = "unbuzzed hair" + +/datum/sprite_accessory/hair/chrono + name = "Chrono" + icon_state = "hair_chrono" + length = 4 + chatname = "spiked hair" + +/datum/sprite_accessory/hair/cia + name = "CIA" + icon_state = "hair_cia" + chatname = "short hair" + +/datum/sprite_accessory/hair/coffeehouse + name = "Coffee House Cut" + icon_state = "hair_coffeehouse" + chatname = "coffee house haircut" + +/datum/sprite_accessory/hair/coffeehouse_shave + name = "Coffee House Shave" + icon_state = "hair_coffeehouse_shave" + chatname = "coffee house haircut" + +/datum/sprite_accessory/hair/combover + name = "Combover" + icon_state = "hair_combover" + chatname = "groomed hair" + +/datum/sprite_accessory/hair/country + name = "Country" + icon_state = "hair_country" + chatname = "ponytail" + +/datum/sprite_accessory/hair/crew + name = "Crewcut" + icon_state = "hair_crewcut" + chatname = "short hair" + +/datum/sprite_accessory/hair/curls + name = "Curls" + icon_state = "hair_curls" + chatname = "curls" + +/datum/sprite_accessory/hair/cut + name = "Cut Hair" + icon_state = "hair_cuthair" //hair_c + chatname = "short hair" + +/datum/sprite_accessory/hair/devillock + name = "Devil Lock" + icon_state = "hair_devilock" + chatname = "devil locks" + +/datum/sprite_accessory/hair/dreadlocks + name = "Dreadlocks" + icon_state = "hair_dreads" + length = 4 + chatname = "dreadlocks" + +/datum/sprite_accessory/hair/drills_drillruru + name = "Drills, Drillruru" + icon_state = "hair_drills_drillruru" + length = 2 + chatname = "hair drills" + +/datum/sprite_accessory/hair/drills_drillruru_long + name = "Drills, Drillruru Long" + icon_state = "hair_drills_drillruru_long" + length = 3 + chatname = "hair drills" + +/datum/sprite_accessory/hair/emo + name = "Emo" + icon_state = "hair_emo" + chatname = "fringe" + +/datum/sprite_accessory/hair/emo_alt + name = "Emo, Alt" + icon_state = "hair_emo_alt" + chatname = "fringe" + +/datum/sprite_accessory/hair/emo_long + name = "Emo, Long" + icon_state = "hair_emo_long" + chatname = "long fringe" + length = 2 + +/datum/sprite_accessory/hair/emofringe + name = "Emo Fringe" + icon_state = "hair_emofringe" + chatname = "fringe" + +/datum/sprite_accessory/hair/emofringe_long + name = "Emo Fringe Long" + icon_state = "hair_emofringe_long" + length = 3 + chatname = "long fringe" + +/datum/sprite_accessory/hair/emofringe_longbun + name = "Emo Fringe Long Bun" + icon_state = "hair_emofringe_longbun" + length = 3 + chatname = "hair bun" + +/datum/sprite_accessory/hair/emorightfringe_long + name = "Emo Right Fringe Long" + icon_state = "hair_emofringe_long" + length = 3 + chatname = "long fringe" + +/datum/sprite_accessory/hair/emofringe_long_alt + name = "Emo Fringe Long Alt" + icon_state = "hair_emofringe_longalt" + length = 3 + chatname = "long fringe" + +/datum/sprite_accessory/hair/emorightfringe_long_alt + name = "Emo Right Fringe Long Alt" + icon_state = "hair_emorightfringe_longalt" + length = 3 + chatname = "long fringe" + +/datum/sprite_accessory/hair/fade_clean + name = "Fade, Clean" + icon_state = "hair_fade_clean" + chatname = "short hair" + +/datum/sprite_accessory/hair/fade_cleanlow + name = "Fade, Clean Low" + icon_state = "hair_fade_cleanlow" + chatname = "short hair" + +/datum/sprite_accessory/hair/fade_high + name = "Fade, High" + icon_state = "hair_fade_high" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/fade_low + name = "Fade, Low" + icon_state = "hair_fade_low" + chatname = "short hair" + +/datum/sprite_accessory/hair/fade_manbun + name = "Fade, Manbun" + icon_state = "hair_fade_manbun" + chatname = "short hair" + +/datum/sprite_accessory/hair/fade_medium + name = "Fade, Medium" + icon_state = "hair_fade_medium" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/fade_none + name = "Fade, None" + icon_state = "hair_fade_none" + chatname = "short hair" + +/datum/sprite_accessory/hair/father + name = "Father" + icon_state = "hair_father" + chatname = "short hair" + +/datum/sprite_accessory/hair/feather + name = "Feather" + icon_state = "hair_feather" + length = 2 + chatname = "short hair" + +/datum/sprite_accessory/hair/flat_top + name = "Flat Top" + icon_state = "hair_flattop" + chatname = "flat top hair" + +/datum/sprite_accessory/hair/flair + name = "Flaired Hair" + icon_state = "hair_flair" + length = 2 + chatname = "flaired hair" + +/datum/sprite_accessory/hair/flow + name = "Flow Hair" + icon_state = "hair_flow" //hair_f + chatname = "short hair" + +/datum/sprite_accessory/hair/gelled + name = "Gelled Back" + icon_state = "hair_gelled" + length = 2 + chatname = "gelled-back hair" + +/datum/sprite_accessory/hair/gentle + name = "Gentle" + icon_state = "hair_gentle" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/gentlealt + name = "Gentle Alt" + icon_state = "hair_gentlealt" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/gentle2 + name = "Gentle 2" + icon_state = "hair_gentle2" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/gentle2_alt + name = "Gentle 2, Alt" + icon_state = "hair_gentle2_alt" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/gentle2_long + name = "Gentle 2, Long" + icon_state = "hair_gentle2_long" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/gentle2_longalt + name = "Gentle 2, Long Alt" + icon_state = "hair_gentle2_longalt" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/glossy + name = "Glossy" + icon_state = "hair_glossy" + length = 2 + chatname = "short hair" + +/datum/sprite_accessory/hair/halfbang + name = "Half-banged Hair" + icon_state = "hair_halfbang" + chatname = "short hair" + +/datum/sprite_accessory/hair/halfbangalt + name = "Half-banged Hair, Alt" + icon_state = "hair_halfbang_alt" + chatname = "short hair" + +/datum/sprite_accessory/hair/himecut + name = "Hime Cut" + icon_state = "hair_himecut" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_alt + name = "Hime Cut, Alt" + icon_state = "hair_himecut_alt" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_alt2 + name = "Hime Cut, Alt 2" + icon_state = "hair_himecut_alt2" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_long + name = "Hime Cut, Long" + icon_state = "hair_himecut_long" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_long_ponytail + name = "Hime Cut, Long Ponytail" + icon_state = "hair_himecut_long_ponytail" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_ponytail + name = "Hime Cut, Ponytail" + icon_state = "hair_himecut_ponytail" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_ponytail_up + name = "Hime Cut, Ponytail Up" + icon_state = "hair_himecut_ponytail_up" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/himecut_short + name = "Hime Cut, Short" + icon_state = "hair_himecut_short" + chatname = "short hair" + +/datum/sprite_accessory/hair/hitop + name = "Hitop" + icon_state = "hair_hitop" + chatname = "hitop" + +/datum/sprite_accessory/hair/jade + name = "Jade" + icon_state = "hair_jade" + length = 2 + chatname = "messy hair" + +/datum/sprite_accessory/hair/jensen + name = "Jensen Hair" // Removing Videogame References + icon_state = "hair_jensen" + chatname = "short hair" + +/datum/sprite_accessory/hair/joestar + name = "Joestar" + icon_state = "hair_joestar" + chatname = "short hair" + +/datum/sprite_accessory/hair/longfringe + name = "Long Fringe" + icon_state = "hair_longfringe" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/longfringe_longer + name = "Long Fringe, Longer" + icon_state = "hair_longfringe_longer" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/long + name = "Long Hair" + icon_state = "hair_long" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/long_alt + name = "Long Hair, Alt" + icon_state = "hair_long_alt" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/long_shoulder + name = "Long Hair, Shoulder-length" + icon_state = "hair_long_shoulder" //hair_b + length = 2 + chatname = "shoulder-length hair" + +/datum/sprite_accessory/hair/long_verylong + name = "Long Hair, Very Long" + icon_state = "hair_long_verylong" + length = 4 + chatname = "very long hair" + +/datum/sprite_accessory/hair/marysue + name = "Mary Sue" + icon_state = "hair_marysue" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/messy + name = "Messy" + icon_state = "hair_messy" + length = 2 + chatname = "messy hair" + +/datum/sprite_accessory/hair/messy2 + name = "Messy 2" + icon_state = "hair_messy2" + length = 2 + chatname = "messy hair" + +/datum/sprite_accessory/hair/messy3 + name = "Messy 3" + icon_state = "hair_messy3" + length = 2 + chatname = "messy hair" + +/datum/sprite_accessory/hair/modern + name = "Modern" + icon_state = "hair_modern" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/mohawk + name = "Mohawk" + icon_state = "hair_mohawk" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_big + name = "Mohawk, Big" + icon_state = "hair_mohawk_big" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_high + name = "Mohawk, High" + icon_state = "hair_mohawk_high" //hair_d + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_hightight + name = "Mohawk, High and Tight" + icon_state = "hair_mohawk_hightight" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_naomi + name = "Mohawk, Naomi" + icon_state = "hair_mohawk_naomi" //slightly longer on the side icons, in case you were wondering + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_reverse + name = "Mohawk, Reverse" + icon_state = "hair_mohawk_reverse" + chatname = "short hair" + +/datum/sprite_accessory/hair/mohawk_shaved + name = "Mohawk, Shaved" + icon_state = "hair_mohawk_shaved" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_shavedlong + name = "Mohawk, Shaved and Long" + icon_state = "hair_mohawk_shavedlong" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_shavedback + name = "Mohawk, Shaved Back" + icon_state = "hair_mohawk_shavedback" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_shavedbacklong + name = "Mohawk, Shaved Back and Long" + icon_state = "hair_mohawk_shavedbacklong" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mohawk_shavedtight + name = "Mohawk, Shaved and Tight" + icon_state = "hair_mohawk_shavedtight" + chatname = "mohawk" + +/datum/sprite_accessory/hair/mulder + name = "Mulder" + icon_state = "hair_mulder" + chatname = "short hair" + +/datum/sprite_accessory/hair/neat + name = "Neat" + icon_state = "hair_neat" + chatname = "groomed hair" + +/datum/sprite_accessory/hair/neatlong + name = "Neat (Long)" + icon_state = "hair_neatlong" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/newyou + name = "New You" + icon_state = "hair_newyou" + length = 3 + chatname = "ponytail" + +/datum/sprite_accessory/hair/nia + name = "Nia" + icon_state = "hair_nia" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/ombre + name = "Ombre" + icon_state = "hair_ombre" + length = 2 + chatname = "short hair" + +/datum/sprite_accessory/hair/oneshoulder + name = "One Shoulder" + icon_state = "hair_oneshoulder" + length = 2 + chatname = "one shoulder hairstyle" + +/datum/sprite_accessory/hair/overeye_long + name = "Overeye, Long" + icon_state = "hair_overeye_long" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/overeye_short + name = "Overeye, Short" + icon_state = "hair_overeye_short" + chatname = "long hair" + length = 2 + +/datum/sprite_accessory/hair/overeye_verylong + name = "Overeye, Very Long" + icon_state = "hair_overeye_verylong" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/overeye_veryshort + name = "Overeye, Very Short" + icon_state = "hair_overeye_veryshort" + chatname = "short hair" + +/datum/sprite_accessory/hair/overeye_veryshort_alt + name = "Overeye, Very Short Alt" + icon_state = "hair_overeye_veryshort_alt" + chatname = "short hair" + +/datum/sprite_accessory/hair/oxton + name = "Oxton" + icon_state = "hair_oxton" + chatname = "short hair" + +/datum/sprite_accessory/hair/parted + name = "Parted" + icon_state = "hair_parted" + chatname = "short hair" + +/datum/sprite_accessory/hair/parted_alt + name = "Parted, Alt" + icon_state = "hair_parted_alt" + chatname = "short hair" + +/datum/sprite_accessory/hair/parted_swept + name = "Parted, Swept" + icon_state = "hair_parted_swept" + chatname = "short hair" + +/datum/sprite_accessory/hair/pigtails_belle + name = "Pigtails, Belle" + icon_state = "hair_pigtails_belle" + gender = FEMALE + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_kagami + name = "Pigtails, Kagami" + icon_state = "hair_pigtails_kagami" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_low + name = "Pigtails, Low" + icon_state = "hair_pigtails_low" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_nitori + name = "Pigtails, Nitori" + icon_state = "hair_pigtails_nitori" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_twintail + name = "Pigtails, Twintail" + icon_state = "hair_pigtails_twintail" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_twintail_ombre + name = "Pigtails, Twintail Ombre" + icon_state = "hair_pigtails_twintail_ombre" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pigtails_twintail_ombre_alt + name = "Pigtails, Twintail Ombre Alt" + icon_state = "hair_pigtails_twintail_ombre_alt" + length = 3 + chatname = "pigtails" + +/datum/sprite_accessory/hair/pompadour + name = "Pompadour" + icon_state = "hair_pompadour" + length = 3 + chatname = "pompadour" + +/datum/sprite_accessory/hair/pompadour_dandy + name = "Pompadour, Dandy" + icon_state = "hair_pompadour_dandy" + length = 3 + chatname = "pompadour" + +/datum/sprite_accessory/hair/ponytail1 + name = "Ponytail 1" + icon_state = "hair_ponytail1" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail2 + name = "Ponytail 2" + icon_state = "hair_ponytail2" //hair_pa + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail3 + name = "Ponytail 3" + icon_state = "hair_ponytail3" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail4 + name = "Ponytail 4" + icon_state = "hair_ponytail4" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail5 + name = "Ponytail 5" + icon_state = "hair_ponytail5" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail6 + name = "Ponytail 6" + icon_state = "hair_ponytail6" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail7 + name = "Ponytail 7" + icon_state = "hair_ponytail7" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail8 + name = "Ponytail 8" + icon_state = "hair_ponytail8" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail9 + name = "Ponytail 9" + icon_state = "hair_ponytail9" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_short + name = "Ponytail, Short" + icon_state = "hair_ponytail_short" + length = 2 + chatname = "short ponytail" + +/datum/sprite_accessory/hair/ponytail_short2 + name = "Ponytail, Short 2" + icon_state = "hair_ponytail_short2" + length = 2 + chatname = "short ponytail" + +/datum/sprite_accessory/hair/ponytail_short3 + name = "Ponytail, Short 3" + icon_state = "hair_ponytail_short3" + length = 2 + chatname = "short ponytail" + +/datum/sprite_accessory/hair/ponytail_short4 + name = "Ponytail, Short 4" + icon_state = "hair_ponytail_short4" + length = 2 + chatname = "short ponytail" + +/datum/sprite_accessory/hair/ponytail_short5 + name = "Ponytail, Short 5" + icon_state = "hair_ponytail_short5" + length = 2 + chatname = "short ponytail" + +/datum/sprite_accessory/hair/ponytail_fringetail + name = "Ponytail, Fringetail" + icon_state = "hair_ponytail_fringetail" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_high + name = "Ponytail, High" + icon_state = "hair_ponytail_high" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_side + name = "Ponytail, Side" + icon_state = "hair_ponytail_side" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_side2 + name = "Ponytail, Side 2" + icon_state = "hair_ponytail_side2" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_side3 + name = "Ponytail, Side 3" + icon_state = "hair_ponytail_side3" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_side4 + name = "Ponytail, Side 4" + icon_state = "hair_ponytail_side4" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_spiky + name = "Ponytail, Spiky" + icon_state = "hair_ponytail_spiky" + length = 4 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_wisp + name = "Ponytail, Wisp" + icon_state = "hair_ponytail_wisp" + length = 3 + chatname = "ponytail" + +/datum/sprite_accessory/hair/ponytail_zieglertail + name = "Ponytail, Zieglertail" + icon_state = "hair_ponytail_ziegler" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/bunlarge2 + name = "Bun, Large 2" + icon_state = "hair_bun_large2" + length = 2 + chatname = "large bun" + +/datum/sprite_accessory/hair/poofy + name = "Poofy" + icon_state = "hair_poofy" + length = 2 + chatname = "poofy hair" + +/datum/sprite_accessory/hair/poofy2 + name = "Poofy 2" + icon_state = "hair_poofy2" + length = 2 + chatname = "poofy hair" + +/datum/sprite_accessory/hair/punk_chelsea + name = "Punk Shave, Chelsea" + icon_state = "hair_punk_chelsea" + chatname = "fringe" + +/datum/sprite_accessory/hair/punk_chelsea_bighawk + name = "Punk Shave, Chelsea Big Hawk" + icon_state = "hair_punk_chelsea_bighawk" + chatname = "mohawk" + +/datum/sprite_accessory/hair/punk_chelsea_smallhawk + name = "Punk Shave, Chelsea Small Hawk" + icon_state = "hair_punk_chelsea_smallhawk" + chatname = "mohawk" + +/datum/sprite_accessory/hair/punk_chelsea_ponytail + name = "Punk Shave, Chelsea Ponytail" + icon_state = "hair_punk_chelsea_ponytail" + chatname = "ponytail" + +/datum/sprite_accessory/hair/punk_chelseafringe + name = "Punk Shave, Chelsea Fringe" + icon_state = "hair_punk_chelseafringe" + chatname = "fringe" + +/datum/sprite_accessory/hair/punk_chelseafringealt + name = "Punk Shave, Chelsea Fringe Alt" + icon_state = "hair_punk_chelseafringe_alt" + chatname = "fringe" + +/datum/sprite_accessory/hair/punk_chelseafringe_bighawk + name = "Punk Shave, Chelsea Big Hawk" + icon_state = "hair_punk_chelseafringe_bighawk" + chatname = "mohawk" + +/datum/sprite_accessory/hair/punk_chelseafringe_smallhawk + name = "Punk Shave, Chelsea Small Hawk" + icon_state = "hair_punk_chelseafringe_smallhawk" + chatname = "mohawk" + +/datum/sprite_accessory/hair/punk_chelseafringe_ponytail + name = "Punk Shave, Chelsea Ponytail" + icon_state = "hair_punk_chelseafringe_ponytail" + chatname = "ponytail" + +/datum/sprite_accessory/hair/punk_halfshaved + name = "Punk Shave, Half-Shaved" + icon_state = "hair_punk_halfshaved" + chatname = "unshaved hair" // grabbing the parts that can be grabbed + +/datum/sprite_accessory/hair/punk_halfshaved_alt + name = "Punk Shave, Half-Shaved Alt" + icon_state = "hair_punk_halfshaved_alt" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/punk_halfshaved_bun + name = "Punk Shave, Half-Shaved Bun" + icon_state = "hair_punk_halfshaved_bun" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/punk_halfshaved_bun_alt + name = "Punk Shave, Half-Shaved Bun Alt" + icon_state = "hair_punk_halfshaved_bun_alt" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/punk_halfshaved_emo + name = "Punk Shave, Half-Shaved Emo" + icon_state = "hair_punk_halfshaved_emo" + length = 2 + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/punk_sidecut_left + name = "Punk Shave, Sidecut Left" + icon_state = "hair_punk_sideleft" + length = 2 + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/punk_sidecut_right + name = "Punk Shave, Sidecut Right" + icon_state = "hair_punk_sideright" + length = 2 + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/quiff + name = "Quiff" + icon_state = "hair_quiff" + length = 2 + chatname = "quiff" + +/datum/sprite_accessory/hair/ronin + name = "Ronin" + icon_state = "hair_ronin" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/rosa + name = "Rosa" + icon_state = "hair_rosa" + chatname = "short hair" + +/datum/sprite_accessory/hair/rows + name = "Rows" + icon_state = "hair_rows" + length = 2 + chatname = "cornrows" + +/datum/sprite_accessory/hair/rows_braid + name = "Rows, Braid" + icon_state = "hair_rows_braid" + length = 2 + chatname = "cornrows" + +/datum/sprite_accessory/hair/rows_bun + name = "Rows, Bun" + icon_state = "hair_rows_bun" + length = 2 + chatname = "cornrows" + +/datum/sprite_accessory/hair/rows_dualtail + name = "Rows, Dual Tail" + icon_state = "hair_rows_dualtail" + length = 2 + chatname = "cornrows" + +/datum/sprite_accessory/hair/rows_long + name = "Rows, Long" + icon_state = "hair_rows_long" + length = 2 + chatname = "cornrows" + +/datum/sprite_accessory/hair/scully + name = "Scully" + icon_state = "hair_scully" + chatname = "short hair" + +/datum/sprite_accessory/hair/shaved + name = "Shaved" + icon_state = "hair_shaved" + length = 0 + chatname = "shaved head" + +/datum/sprite_accessory/hair/short + name = "Short Hair" + icon_state = "hair_shorthair" //hair_a + chatname = "short hair" + +/datum/sprite_accessory/hair/short2 + name = "Short Hair 2" + icon_state = "hair_shorthair2" + chatname = "short hair" + +/datum/sprite_accessory/hair/short3 + name = "Short Hair 3" + icon_state = "hair_shorthair3" + chatname = "short hair" + +/datum/sprite_accessory/hair/short4 + name = "Short Hair 4" + icon_state = "hair_shorthair4" + chatname = "short hair" + +/datum/sprite_accessory/hair/sideswept + name = "Sideswept Hair" + icon_state = "hair_sideswept" + chatname = "short hair" + +/datum/sprite_accessory/hair/skinhead + name = "Skinhead" + icon_state = "hair_skinhead" + chatname = "matted shaved hair" + +/datum/sprite_accessory/hair/sleeze + name = "Sleeze" + icon_state = "hair_sleeze" + chatname = "short hair" + +/datum/sprite_accessory/hair/slick + name = "Slick" + icon_state = "hair_slick" + chatname = "slicked hair" + +/datum/sprite_accessory/hair/spiky + name = "Spiky" + icon_state = "hair_spiky" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) + chatname = "mighty spikes" + +/datum/sprite_accessory/hair/straightlong + name = "Straight Long" + icon_state = "hair_straightlong" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/thinning + name = "Thinning" + icon_state = "hair_thinning" + chatname = "short hair" + +/datum/sprite_accessory/hair/thinningback + name = "Thinning Back" + icon_state = "hair_thinningback" + chatname = "short hair" + +/datum/sprite_accessory/hair/thinningfront + name = "Thinning Front" + icon_state = "hair_thinningfront" + chatname = "short hair" + +/datum/sprite_accessory/hair/tresshoulder + name = "Tress Shoulder" + icon_state = "hair_tressshoulder" + length = 2 + chatname = "curls" + +/datum/sprite_accessory/hair/tresshoulderdouble + name = "Tress Shoulder Double" + icon_state = "hair_tressshoulder_double" + length = 2 + chatname = "curls" + +/datum/sprite_accessory/hair/trimmed + name = "Trimmed" + icon_state = "hair_trimmed" + chatname = "trimmed hair" + +/datum/sprite_accessory/hair/trimmedflat + name = "Trimmed Flat Top" + icon_state = "hair_trimmedflat" + chatname = "trimmed hair" + +/datum/sprite_accessory/hair/twincurls + name = "Twincurls" + icon_state = "hair_twincurls" + length = 2 + chatname = "curls" + +/datum/sprite_accessory/hair/twincurls2 + name = "Twincurls 2" + icon_state = "hair_twincurls2" + length = 2 + chatname = "curls" + +/datum/sprite_accessory/hair/undercut + name = "Undercut" + icon_state = "hair_undercut" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/undercut2 + name = "Undercut 2" + icon_state = "hair_undercut2" + chatname = "undercut" + +/datum/sprite_accessory/hair/undercut3 + chatname = "unshaved hair" + name = "Undercut 3" + icon_state = "hair_undercut3" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/undercut4 + name = "Undercut 4" + icon_state = "hair_undercut4" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/undercut5 + name = "Undercut 5" + icon_state = "hair_undercut5" + chatname = "unshaved hair" + +/datum/sprite_accessory/hair/unkept + name = "Unkept" + icon_state = "hair_unkept" + length = 3 + chatname = "unkept hairdo" + +/datum/sprite_accessory/hair/updo + name = "Updo" + icon_state = "hair_updo" + length = 2 + chatname = "updo" + +/datum/sprite_accessory/hair/vegeta + name = "Vegeta" + icon_state = "hair_vegeta" + length = 4 + chatname = "mighty spikes" + +/datum/sprite_accessory/hair/volaju + name = "Volaju" + icon_state = "hair_volaju" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/wheeler + name = "Wheeler" + icon_state = "hair_wheeler" + chatname = "short hair" + +/datum/sprite_accessory/hair/fingerwave + name = "Fingerwave" + icon_state = "hair_fingercurl" + chatname = "fluffy hair" + +/datum/sprite_accessory/hair/bug_eyes + icon = 'icons/mob/human_face/dionae_hair.dmi' + name = "Bug Eyes" + icon_state = "bugeyes" + species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) + gender = NEUTER + do_colouration = FALSE + +/datum/sprite_accessory/hair/bug_eyes/human_eyes + name = "Human Eyes" + icon_state = "humaneyes" + +/datum/sprite_accessory/hair/bug_eyes/skrell_eyes + name = "Skrell Eyes" + icon_state = "skrelleyes" + +/datum/sprite_accessory/hair/bug_eyes/skrell_eyes_2 + name = "Skrell Eyes 2" + icon_state = "skrelleyes2" + +/datum/sprite_accessory/hair/bug_eyes/small_horns + name = "Small Horns" + icon_state = "smallhorns" + +/datum/sprite_accessory/hair/bug_eyes/horny + name = "Horny" + icon_state = "horny" + +/datum/sprite_accessory/hair/bug_eyes/headtails + name = "Head tails" + icon_state = "headtails" + +/datum/sprite_accessory/hair/bug_eyes/headtails_2 + name = "Head tails 2" + icon_state = "headtails2" + +/datum/sprite_accessory/hair/bug_eyes/tiny_eye + name = "Tiny Eye" + icon_state = "tinyeye" + +/datum/sprite_accessory/hair/bug_eyes/eyebrow + name = "Eyebrow" + icon_state = "eyebrow" + +/datum/sprite_accessory/hair/bug_eyes/bullhorn + name = "Bullhorn" + icon_state = "bullhorn" + +/datum/sprite_accessory/hair/bug_eyes/blinkinghelmethead + name = "Blinking Helmethead" + icon_state = "blinkinghelmethead" + +/datum/sprite_accessory/hair/bug_eyes/periscope + name = "Periscope" + icon_state = "periscope" + +/datum/sprite_accessory/hair/bug_eyes/glorp + name = "Glorp" + icon_state = "glorp" + +/datum/sprite_accessory/hair/bug_eyes/mellow_cap + name = "Mellow Cap" + icon_state = "mellowcap" + +/datum/sprite_accessory/hair/bug_eyes/red_cap + name = "Red Cap" + icon_state = "redcap" + +/datum/sprite_accessory/hair/bug_eyes/fun_guy + name = "Fun Guy" + icon_state = "funguy" + +/datum/sprite_accessory/hair/bug_eyes/spanish_moss + name = "Spanish Moss" + icon_state = "spanishmoss" + +/datum/sprite_accessory/hair/bug_eyes/shelflife + name = "Shelflife" + icon_state = "shelflife" + do_colouration = TRUE + +/datum/sprite_accessory/hair/bug_eyes/oak + name = "Oak" + icon_state = "oak" + +/datum/sprite_accessory/hair/bug_eyes/thorns + name = "Thorns" + icon_state = "thorns" + +/datum/sprite_accessory/hair/bug_eyes/stump + name = "Stump" + icon_state = "stump" + +// TG-format hair - uses ICON_MULTIPLY instead of ICON_ADD +/datum/sprite_accessory/hair/balding + icon = 'icons/mob/human_face/hair_multiply.dmi' + icon_blend_mode = ICON_MULTIPLY + name = "Balding" + icon_state = "hair_balding" + length = 0 + chatname = "balding hair" + +/datum/sprite_accessory/hair/balding/balding_boddicker + name = "Balding, Boddicker" + icon_state = "hair_balding_boddicker" + length = 1 + chatname = "balding hair" + +/datum/sprite_accessory/hair/balding/bangs_light + name = "Bangs, Light" + icon_state = "hair_bangs_light" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/balding/bob_alt + name = "Bob, Alt" + icon_state = "hair_bob_alt" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/braided_tail + name = "Braided, Tail" + icon_state = "hair_braided_tail" + length = 2 + chatname = "braids" + +/datum/sprite_accessory/hair/balding/bun_large + name = "Bun, Large" + icon_state = "hair_bun_large" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/balding/bun_librarian + name = "Bun, Librarian" + icon_state = "hair_bun_librarian" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/balding/bun_quad + name = "Bun, Quad" + icon_state = "hair_bun_quad" + length = 2 + chatname = "hair buns" + +/datum/sprite_accessory/hair/balding/bun_uniter + name = "Bun, Uniter" + icon_state = "hair_bun_uniter" + length = 2 + chatname = "hair bun" + +/datum/sprite_accessory/hair/balding/business + name = "Business" + icon_state = "hair_business" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/business2 + name = "Business 2" + icon_state = "hair_business2" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/business3 + name = "Business 3" + icon_state = "hair_business3" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/business4 + name = "Business 4" + icon_state = "hair_business4" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/cactus + name = "Cactus" + icon_state = "hair_cactus" + length = 3 + chatname = "very long hair" + +/datum/sprite_accessory/hair/balding/choppy + name = "Choppy" + icon_state = "hair_choppy" + length = 1 + chatname = "choppy hair" + +/datum/sprite_accessory/hair/balding/fade + name = "Fade" + icon_state = "hair_fade" + length = 1 + chatname = "groomed hair" + +/datum/sprite_accessory/hair/balding/fade_grown + name = "Fade, Grown" + icon_state = "hair_fade_grown" + length = 1 + chatname = "groomed hair" + +/datum/sprite_accessory/hair/balding/floof + name = "Floof" + icon_state = "hair_floof" + length = 2 + chatname = "fluffy hair" + +/datum/sprite_accessory/hair/balding/floof_short + name = "Floof, Short" + icon_state = "hair_floof_short" + length = 1 + chatname = "fluffy hair" + +/datum/sprite_accessory/hair/balding/hair_antenna + name = "Hair Antenna" + icon_state = "hair_hairantenna" + length = 2 + chatname = "long hair" + +/datum/sprite_accessory/hair/balding/hedgehog + name = "Hedgehog" + icon_state = "hair_hedgehog" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/keanu + name = "Keanu" + icon_state = "hair_keanu" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/krewcut + name = "Krewcut" + icon_state = "hair_krewcut" + length = 1 + chatname = "fringe" + +/datum/sprite_accessory/hair/balding/messy4 + name = "Messy 4" + icon_state = "hair_messy4" + length = 1 + chatname = "messy hair" + +/datum/sprite_accessory/hair/balding/nia2 + name = "Nia 2" + icon_state = "hair_nia2" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/balding/nia3 + name = "Nia 3" + icon_state = "hair_nia3" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/balding/parted_short + name = "Parted, Short" + icon_state = "hair_parted_short" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/pigtails_simple + name = "Pigtails, Simple" + icon_state = "hair_pigtails_simple" + length = 2 + chatname = "pigtails" + +/datum/sprite_accessory/hair/balding/pixie + name = "Pixie" + icon_state = "hair_pixie" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/pompadour_iii + name = "Pompadour, Pomp III" + icon_state = "hair_pomp_iii" + length = 3 + chatname = "pompadour" + +/datum/sprite_accessory/hair/balding/ponytail_high2 + name = "Ponytail, High 2" + icon_state = "hair_ponytail_high2" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/balding/ponytail_jenjen + name = "Ponytail, Jenjen" + icon_state = "hair_ponytail_jenjen" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/balding/ponytail_side5 + name = "Ponytail, Side 5" + icon_state = "hair_ponytail_side5" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/balding/ponytail_side6 + name = "Ponytail, Side 6" + icon_state = "hair_ponytail_side6" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/balding/ponytail_side7 + name = "Ponytail, Side 7" + icon_state = "hair_ponytail_side7" + length = 2 + chatname = "braided ponytail" + +/datum/sprite_accessory/hair/balding/ponytail_straight + name = "Ponytail, Straight" + icon_state = "hair_ponytail_straight" + length = 2 + chatname = "ponytail" + +/datum/sprite_accessory/hair/balding/protagonist + name = "Protagonist" + icon_state = "hair_protagonist" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/punk_sideshaved + name = "Punk Shave, Sideshaved" + icon_state = "hair_punk_sideshaved" + length = 1 + chatname = "unshaved hair" //in reference to tugging the unshaved parts + +/datum/sprite_accessory/hair/balding/short_spiked + name = "Short Spiked" + icon_state = "hair_short_spiked" + length = 1 + chatname = "spiked hair" + +/datum/sprite_accessory/hair/balding/sidepart + name = "Sidepart" + icon_state = "hair_sidepart" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/sidepart_long + name = "Sidepart, Long" + icon_state = "hair_sidepart_long" + length = 3 + chatname = "long hair" + +/datum/sprite_accessory/hair/balding/swept + name = "Swept" + icon_state = "hair_swept" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/swept_short + name = "Swept, Short" + icon_state = "hair_swept_short" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/swept_back + name = "Swept, Back" + icon_state = "hair_swept_back" + length = 1 + chatname = "short hair" + +/datum/sprite_accessory/hair/balding/superbowl + name = "Bowl, Superbowl" + icon_state = "hair_bowlcut_superbowl" + length = 1 + chatname = "bowl cut" + +/datum/sprite_accessory/hair/balding/waxed + name = "Waxed" + icon_state = "hair_waxed" + chatname = "bald head" + +/datum/sprite_accessory/hair/balding/wavyshoulder + name = "Wavy Shoulder (Down)" + icon_state = "hair_wavyshoulder_down" + length = 2 + chatname = "wavy hair" + +/datum/sprite_accessory/hair/balding/wavyshoulder_pt + name = "Wavy Shoulder (Ponytail)" + icon_state = "hair_wavyshoulder_up" + length = 2 + chatname = "ponytail" /* ///////////////////////////////////// @@ -1818,76 +1818,76 @@ Follow by example and make good judgement based on length which list to include /datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell, /datum/species/bug, /datum/species/bug/type_b, /datum/species/unathi, /datum/species/zombie/unathi) - none - name = "None" - icon_state = "none" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi, +/datum/sprite_accessory/hair_gradients/none + name = "None" + icon_state = "none" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi, /datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara,/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell, /datum/species/bug, /datum/species/bug/type_b) - none_48 - name = "None (Vaurca Type C/E)" - icon = "icons/mob/base_48.dmi" - icon_state = "none" - species_allowed = list(/datum/species/bug/type_e, /datum/species/bug/type_c) +/datum/sprite_accessory/hair_gradients/none_48 + name = "None (Vaurca Type C/E)" + icon = "icons/mob/base_48.dmi" + icon_state = "none" + species_allowed = list(/datum/species/bug/type_e, /datum/species/bug/type_c) - fade_up - name = "Fade (Up)" - icon_state = "fadeup" +/datum/sprite_accessory/hair_gradients/fade_up + name = "Fade (Up)" + icon_state = "fadeup" - fade_down - name = "Fade (Down)" - icon_state = "fadedown" +/datum/sprite_accessory/hair_gradients/fade_down + name = "Fade (Down)" + icon_state = "fadedown" - fade_right - name = "Fade (Right)" - icon_state = "faderight" +/datum/sprite_accessory/hair_gradients/fade_right + name = "Fade (Right)" + icon_state = "faderight" - fade_left - name = "Fade (Left)" - icon_state = "fadeleft" +/datum/sprite_accessory/hair_gradients/fade_left + name = "Fade (Left)" + icon_state = "fadeleft" - vertical_split_right - name = "Vertical Split (Right)" - icon_state = "vsplit_right" +/datum/sprite_accessory/hair_gradients/vertical_split_right + name = "Vertical Split (Right)" + icon_state = "vsplit_right" - vertical_split_left - name = "Vertical Split (Left)" - icon_state = "vsplit_left" +/datum/sprite_accessory/hair_gradients/vertical_split_left + name = "Vertical Split (Left)" + icon_state = "vsplit_left" - horizontal - name = "Horizontal Split" - icon_state = "hsplit" +/datum/sprite_accessory/hair_gradients/horizontal + name = "Horizontal Split" + icon_state = "hsplit" - taj_inner_ear_fur - name = "Inner Ear Fur" - icon_state = "taj_innerearfur" - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan, /datum/species/zombie/tajara) +/datum/sprite_accessory/hair_gradients/taj_inner_ear_fur + name = "Inner Ear Fur" + icon_state = "taj_innerearfur" + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan, /datum/species/zombie/tajara) - taj_msai_inner_ear_fur - name = "M'sai Inner Ear Fur" - icon_state = "taj_msai_innerearfur" - species_allowed = list(/datum/species/tajaran/m_sai) +/datum/sprite_accessory/hair_gradients/taj_msai_inner_ear_fur + name = "M'sai Inner Ear Fur" + icon_state = "taj_msai_innerearfur" + species_allowed = list(/datum/species/tajaran/m_sai) - skrell_spots - name = "Skrell Spots" - icon_state = "skrell_gradient_spots" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) +/datum/sprite_accessory/hair_gradients/skrell_spots + name = "Skrell Spots" + icon_state = "skrell_gradient_spots" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) - skrell_stripes - name = "Skrell Headtail Blotches" - icon_state = "skr_headtail_stripes" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) +/datum/sprite_accessory/hair_gradients/skrell_stripes + name = "Skrell Headtail Blotches" + icon_state = "skr_headtail_stripes" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) - skrell_headtail_middle - name = "Skrell Headtail Middle" - icon_state = "skr_headtail_mid" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) +/datum/sprite_accessory/hair_gradients/skrell_headtail_middle + name = "Skrell Headtail Middle" + icon_state = "skr_headtail_mid" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) - skrell_headtail_hfade - name = "Skrell Headtail Hard Fade" - icon_state = "skr_headtail_hfade" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) +/datum/sprite_accessory/hair_gradients/skrell_headtail_hfade + name = "Skrell Headtail Hard Fade" + icon_state = "skr_headtail_hfade" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori, /datum/species/zombie/skrell) /* @@ -1902,184 +1902,184 @@ Follow by example and make good judgement based on length which list to include icon = 'icons/mob/human_face/facial_hair.dmi' gender = MALE // barf (unless you're a dorf, dorfs dig chix /w beards :P) - shaved - name = "Shaved" - icon_state = "bald" - gender = NEUTER - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi, +/datum/sprite_accessory/facial_hair/shaved + name = "Shaved" + icon_state = "bald" + gender = NEUTER + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie,/datum/species/unathi,/datum/species/zombie/unathi, /datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/tajaran/tesla_body,/datum/species/zombie/tajara,/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell,/datum/species/diona, /datum/species/diona/coeu, /datum/species/bug/type_b) - threeOclock - name = "3 O'clock Shadow" - icon_state = "facial_3oclock" +/datum/sprite_accessory/facial_hair/threeOclock + name = "3 O'clock Shadow" + icon_state = "facial_3oclock" - threeOclockstache - name = "3 O'clock Shadow and Moustache" - icon_state = "facial_3oclockmoustache" +/datum/sprite_accessory/facial_hair/threeOclockstache + name = "3 O'clock Shadow and Moustache" + icon_state = "facial_3oclockmoustache" - fiveOclock - name = "5 O'clock Shadow" - icon_state = "facial_5oclock" +/datum/sprite_accessory/facial_hair/fiveOclock + name = "5 O'clock Shadow" + icon_state = "facial_5oclock" - fiveOclockstache - name = "5 O'clock Shadow and Moustache" - icon_state = "facial_5oclockmoustache" +/datum/sprite_accessory/facial_hair/fiveOclockstache + name = "5 O'clock Shadow and Moustache" + icon_state = "facial_5oclockmoustache" - sevenOclock - name = "7 O'clock Shadow" - icon_state = "facial_7oclock" +/datum/sprite_accessory/facial_hair/sevenOclock + name = "7 O'clock Shadow" + icon_state = "facial_7oclock" - sevenOclockstache - name = "7 O'clock Shadow and Moustache" - icon_state = "facial_7oclockmoustache" +/datum/sprite_accessory/facial_hair/sevenOclockstache + name = "7 O'clock Shadow and Moustache" + icon_state = "facial_7oclockmoustache" - abe - name = "Abraham Lincoln Beard" - icon_state = "facial_abe" +/datum/sprite_accessory/facial_hair/abe + name = "Abraham Lincoln Beard" + icon_state = "facial_abe" - biker - name = "Biker Beard" - icon_state = "facial_biker" +/datum/sprite_accessory/facial_hair/biker + name = "Biker Beard" + icon_state = "facial_biker" - britstache - name = "Britstache" - icon_state = "facial_britstache" +/datum/sprite_accessory/facial_hair/britstache + name = "Britstache" + icon_state = "facial_britstache" - chaplin - name = "Square Mustache" - icon_state = "facial_chaplin" +/datum/sprite_accessory/facial_hair/chaplin + name = "Square Mustache" + icon_state = "facial_chaplin" - chinless - name = "Chinless Beard" - icon_state = "facial_chinlessbeard" +/datum/sprite_accessory/facial_hair/chinless + name = "Chinless Beard" + icon_state = "facial_chinlessbeard" - chinstrap - name = "Chinstrap" - icon_state = "facial_chinstrap" +/datum/sprite_accessory/facial_hair/chinstrap + name = "Chinstrap" + icon_state = "facial_chinstrap" - croppedbeard - name = "Full Cropped Beard" - icon_state = "facial_croppedfullbeard" +/datum/sprite_accessory/facial_hair/croppedbeard + name = "Full Cropped Beard" + icon_state = "facial_croppedfullbeard" - dwarf - name = "Dwarf Beard" - icon_state = "facial_dwarf" +/datum/sprite_accessory/facial_hair/dwarf + name = "Dwarf Beard" + icon_state = "facial_dwarf" - elvis - name = "Elvis Sideburns" - icon_state = "facial_elvis" - species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) +/datum/sprite_accessory/facial_hair/elvis + name = "Elvis Sideburns" + icon_state = "facial_elvis" + species_allowed = list(/datum/species/human,/datum/species/human/offworlder,/datum/species/machine/shell,/datum/species/machine/shell/rogue,/datum/species/zombie) - fullbeard - name = "Full Beard" - icon_state = "facial_fullbeard" +/datum/sprite_accessory/facial_hair/fullbeard + name = "Full Beard" + icon_state = "facial_fullbeard" - gt - name = "Goatee" - icon_state = "facial_gt" +/datum/sprite_accessory/facial_hair/gt + name = "Goatee" + icon_state = "facial_gt" - gt2 - name = "Goatee 2" - icon_state = "facial_gt2" +/datum/sprite_accessory/facial_hair/gt2 + name = "Goatee 2" + icon_state = "facial_gt2" - gt3 - name = "Goatee 3" - icon_state = "facial_gt3" +/datum/sprite_accessory/facial_hair/gt3 + name = "Goatee 3" + icon_state = "facial_gt3" - hip - name = "Hipster Beard" - icon_state = "facial_hip" +/datum/sprite_accessory/facial_hair/hip + name = "Hipster Beard" + icon_state = "facial_hip" - hogan - name = "Hulk Hogan Mustache" - icon_state = "facial_hogan" //-Neek +/datum/sprite_accessory/facial_hair/hogan + name = "Hulk Hogan Mustache" + icon_state = "facial_hogan" //-Neek - horseshoe - name = "Horseshoe Mustache" - icon_state = "facial_horseshoe" +/datum/sprite_accessory/facial_hair/horseshoe + name = "Horseshoe Mustache" + icon_state = "facial_horseshoe" - jensen - name = "Jensen Beard" - icon_state = "facial_jensen" +/datum/sprite_accessory/facial_hair/jensen + name = "Jensen Beard" + icon_state = "facial_jensen" - longbeard - name = "Long Beard" - icon_state = "facial_longbeard" +/datum/sprite_accessory/facial_hair/longbeard + name = "Long Beard" + icon_state = "facial_longbeard" - lumberjack - name = "Lumberjack" - icon_state = "facial_lumberjack" +/datum/sprite_accessory/facial_hair/lumberjack + name = "Lumberjack" + icon_state = "facial_lumberjack" - martial_artist - name = "Martial Artist" - icon_state = "facial_martialartist" +/datum/sprite_accessory/facial_hair/martial_artist + name = "Martial Artist" + icon_state = "facial_martialartist" - moonshiner - name = "Moonshiner" - icon_state = "facial_moonshiner" +/datum/sprite_accessory/facial_hair/moonshiner + name = "Moonshiner" + icon_state = "facial_moonshiner" - mutton - name = "Mutton Chops" - icon_state = "facial_mutton" +/datum/sprite_accessory/facial_hair/mutton + name = "Mutton Chops" + icon_state = "facial_mutton" - muttonstache - name = "Mutton Chops and Moustache" - icon_state = "facial_muttonmus" +/datum/sprite_accessory/facial_hair/muttonstache + name = "Mutton Chops and Moustache" + icon_state = "facial_muttonmus" - neckbeard - name = "Neckbeard" - icon_state = "facial_neckbeard" +/datum/sprite_accessory/facial_hair/neckbeard + name = "Neckbeard" + icon_state = "facial_neckbeard" - seadog - name = "Sea Dog" - icon_state = "facial_seadog" +/datum/sprite_accessory/facial_hair/seadog + name = "Sea Dog" + icon_state = "facial_seadog" - selleck - name = "Selleck Mustache" - icon_state = "facial_selleck" +/datum/sprite_accessory/facial_hair/selleck + name = "Selleck Mustache" + icon_state = "facial_selleck" - sideburns - name = "Sideburns" - icon_state = "facial_sideburns" +/datum/sprite_accessory/facial_hair/sideburns + name = "Sideburns" + icon_state = "facial_sideburns" - tribeard - name = "Tribeard" - icon_state = "facial_tribeard" +/datum/sprite_accessory/facial_hair/tribeard + name = "Tribeard" + icon_state = "facial_tribeard" - volaju - name = "Volaju" - icon_state = "facial_volaju" +/datum/sprite_accessory/facial_hair/volaju + name = "Volaju" + icon_state = "facial_volaju" - walrus - name = "Walrus Moustache" - icon_state = "facial_walrus" +/datum/sprite_accessory/facial_hair/walrus + name = "Walrus Moustache" + icon_state = "facial_walrus" - watson - name = "Watson Mustache" - icon_state = "facial_watson" +/datum/sprite_accessory/facial_hair/watson + name = "Watson Mustache" + icon_state = "facial_watson" - wise - name = "Wise Beard" - icon_state = "facial_wise" +/datum/sprite_accessory/facial_hair/wise + name = "Wise Beard" + icon_state = "facial_wise" - chinstrap2 - icon = 'icons/mob/human_face/facial_hair_multiply.dmi' - name = "Chinstrap, Alt" - icon_state = "facial_chinstrap_ii" - icon_blend_mode = ICON_MULTIPLY +/datum/sprite_accessory/facial_hair/chinstrap2 + icon = 'icons/mob/human_face/facial_hair_multiply.dmi' + name = "Chinstrap, Alt" + icon_state = "facial_chinstrap_ii" + icon_blend_mode = ICON_MULTIPLY - stark - name = "Stark" - icon_state = "facial_stark" +/datum/sprite_accessory/facial_hair/chinstrap2/stark + name = "Stark" + icon_state = "facial_stark" - swire - name = "Swire" - icon_state = "facial_swire" +/datum/sprite_accessory/facial_hair/chinstrap2/swire + name = "Swire" + icon_state = "facial_swire" - vandyke - name = "Van Dyke Mustache" - icon_state = "facial_vandyke" +/datum/sprite_accessory/facial_hair/chinstrap2/vandyke + name = "Van Dyke Mustache" + icon_state = "facial_vandyke" /* /////////////////////////////////// @@ -2094,2319 +2094,2318 @@ Follow by example and make good judgement based on length which list to include //unathi hair - una_aquaticfrill - icon = 'icons/mob/human_face/unathi_hair.dmi' - name = "Unathi Aquatic Frills" - icon_state = "unathi_aquaticfrills" - species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill + icon = 'icons/mob/human_face/unathi_hair.dmi' + name = "Unathi Aquatic Frills" + icon_state = "unathi_aquaticfrills" + species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) + length = 0 + chatname = "frills" - una_bighorns - name = "Unathi Big Horns" - icon_state = "unathi_bighorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_bighorns + name = "Unathi Big Horns" + icon_state = "unathi_bighorn" + length = 5 + chatname = "horns" - una_bighorns_noside - name = "Unathi Big Horns (No Sides)" - icon_state = "unathi_bighorn_nosides" +/datum/sprite_accessory/hair/una_aquaticfrill/una_bighorns/una_bighorns_noside + name = "Unathi Big Horns (No Sides)" + icon_state = "unathi_bighorn_nosides" - una_chinhorn - name = "Unathi Chin Horn" - icon_state = "unathi_chinhorns" - length = 0 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_chinhorn + name = "Unathi Chin Horn" + icon_state = "unathi_chinhorns" + length = 0 + chatname = "horns" - una_curlhorn - name = "Unathi Curled Horns" - icon_state = "unathi_curledhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_curlhorn + name = "Unathi Curled Horns" + icon_state = "unathi_curledhorn" + length = 5 + chatname = "horns" - una_dorsalfrill - name = "Unathi Dorsal Frill" - icon_state = "unathi_dorsalfrill" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_dorsalfrill + name = "Unathi Dorsal Frill" + icon_state = "unathi_dorsalfrill" + length = 0 + chatname = "frills" - una_dracfrills - name = "Unathi Draconic Frills" - icon_state = "unathi_dracfrills" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_dracfrills + name = "Unathi Draconic Frills" + icon_state = "unathi_dracfrills" + length = 0 + chatname = "frills" - una_drachorn - name = "Unathi Draconic Horns" - icon_state = "unathi_drachorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_drachorn + name = "Unathi Draconic Horns" + icon_state = "unathi_drachorn" + length = 5 + chatname = "horns" - una_elvis - name = "Elvis Sideburns" - icon_state = "unathi_elvis" - length = 0 - chatname = "sideburns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_elvis + name = "Elvis Sideburns" + icon_state = "unathi_elvis" + length = 0 + chatname = "sideburns" - una_hornadorns - name = "Unathi Horn Adorns" - icon_state = "unathi_hornadorns" - length = 0 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_hornadorns + name = "Unathi Horn Adorns" + icon_state = "unathi_hornadorns" + length = 0 + chatname = "horns" - una_longdorsal - name = "Unathi Long Dorsal Frill" - icon_state = "unathi_longdorsal" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_longdorsal + name = "Unathi Long Dorsal Frill" + icon_state = "unathi_longdorsal" + length = 0 + chatname = "frills" - una_longfrill - name = "Unathi Long Frills" - icon_state = "unathi_longfrills" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_longfrill + name = "Unathi Long Frills" + icon_state = "unathi_longfrills" + length = 0 + chatname = "frills" - una_longfrill2 - name = "Unathi Long Frills 2" - icon_state = "unathi_longfrills2" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_longfrill2 + name = "Unathi Long Frills 2" + icon_state = "unathi_longfrills2" + length = 0 + chatname = "frills" - una_longspines - name = "Unathi Long Spines" - icon_state = "unathi_longspines" - length = 0 - chatname = "spines" +/datum/sprite_accessory/hair/una_aquaticfrill/una_longspines + name = "Unathi Long Spines" + icon_state = "unathi_longspines" + length = 0 + chatname = "spines" - una_lowerhorn - name = "Unathi Lower Horns" - icon_state = "unathi_lowerhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_lowerhorn + name = "Unathi Lower Horns" + icon_state = "unathi_lowerhorn" + length = 5 + chatname = "horns" - una_mohawk - name = "Unathi Mohawk" - icon_state = "unathi_mohawk" - length = 5 - chatname = "mohawk" +/datum/sprite_accessory/hair/una_aquaticfrill/una_mohawk + name = "Unathi Mohawk" + icon_state = "unathi_mohawk" + length = 5 + chatname = "mohawk" - una_ramhornshort - name = "Unathi Short Ram Horns" - icon_state = "unathi_ramhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_ramhornshort + name = "Unathi Short Ram Horns" + icon_state = "unathi_ramhorn" + length = 5 + chatname = "horns" - una_ramhornlong - name = "Unathi Long Ram Horns" - icon_state = "unathi_ramhorn2" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_ramhornlong + name = "Unathi Long Ram Horns" + icon_state = "unathi_ramhorn2" + length = 5 + chatname = "horns" - una_shortfrill - name = "Unathi Short Frills" - icon_state = "unathi_shortfrills" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shortfrill + name = "Unathi Short Frills" + icon_state = "unathi_shortfrills" + length = 0 + chatname = "frills" - una_shortfrill2 - name = "Unathi Short Frills 2" - icon_state = "unathi_shortfrills2" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shortfrill2 + name = "Unathi Short Frills 2" + icon_state = "unathi_shortfrills2" + length = 0 + chatname = "frills" - una_shorthorn - name = "Unathi Short Horns" - icon_state = "unathi_shorthorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shorthorn + name = "Unathi Short Horns" + icon_state = "unathi_shorthorn" + length = 5 + chatname = "horns" - una_shortspines - name = "Unathi Short Spines" - icon_state = "unathi_shortspines" - length = 0 - chatname = "spines" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shortspines + name = "Unathi Short Spines" + icon_state = "unathi_shortspines" + length = 0 + chatname = "spines" - una_sidefrills - name = "Unathi Side Frills" - icon_state = "unathi_sidefrills" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_sidefrills + name = "Unathi Side Frills" + icon_state = "unathi_sidefrills" + length = 0 + chatname = "frills" - una_horns - name = "Unathi Horns" - icon_state = "unathi_simplehorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_horns + name = "Unathi Horns" + icon_state = "unathi_simplehorn" + length = 5 + chatname = "horns" - una_smallhorns - name = "Unathi Small Horns" - icon_state = "unathi_smallhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_smallhorns + name = "Unathi Small Horns" + icon_state = "unathi_smallhorn" + length = 5 + chatname = "horns" - una_spikehorn - name = "Unathi Spike Horns" - icon_state = "unathi_spikehorn" - length = 5 - chatname = "spiked horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_spikehorn + name = "Unathi Spike Horns" + icon_state = "unathi_spikehorn" + length = 5 + chatname = "spiked horns" - una_swepthorns - name = "Unathi Swept-Forward Horns" - icon_state = "unathi_swepthorn" - length = 0 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_swepthorns + name = "Unathi Swept-Forward Horns" + icon_state = "unathi_swepthorn" + length = 0 + chatname = "horns" - una_swepthorns2 - name = "Unathi Swept-Forward Horns 2" - icon_state = "unathi_swepthorn2" - length = 0 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_swepthorns2 + name = "Unathi Swept-Forward Horns 2" + icon_state = "unathi_swepthorn2" + length = 0 + chatname = "horns" - una_demonforward - name = "Unathi Forward Demon Horns" - icon_state = "unathi_demonforward" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_demonforward + name = "Unathi Forward Demon Horns" + icon_state = "unathi_demonforward" + length = 5 + chatname = "horns" - una_bullhorns - name = "Unathi Bull Horns" - icon_state = "unathi_bullhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_bullhorns + name = "Unathi Bull Horns" + icon_state = "unathi_bullhorn" + length = 5 + chatname = "horns" - una_longhorns - name = "Unathi Long Bull Horns" - icon_state = "unathi_longhorn" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_longhorns + name = "Unathi Long Bull Horns" + icon_state = "unathi_longhorn" + length = 5 + chatname = "horns" - una_faun - name = "Unathi Faun Horns" - icon_state = "unathi_faun" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_faun + name = "Unathi Faun Horns" + icon_state = "unathi_faun" + length = 5 + chatname = "horns" - una_double - name = "Unathi Double Horns" - icon_state = "unathi_dubhorns" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_double + name = "Unathi Double Horns" + icon_state = "unathi_dubhorns" + length = 5 + chatname = "horns" - una_hood - name = "Unathi Cobra Hood" - icon_state = "unathi_hood" - length = 5 - chatname = "hood" +/datum/sprite_accessory/hair/una_aquaticfrill/una_hood + name = "Unathi Cobra Hood" + icon_state = "unathi_hood" + length = 5 + chatname = "hood" - una_skewers - name = "Unathi Super Long Horns" - icon_state = "unathi_skewers" - length = 6 - chatname = "huge horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_skewers + name = "Unathi Super Long Horns" + icon_state = "unathi_skewers" + length = 6 + chatname = "huge horns" - una_chameleon - name = "Unathi Chameleon Horns" - icon_state = "unathi_chameleon" - length = 3 - chatname = "small horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_chameleon + name = "Unathi Chameleon Horns" + icon_state = "unathi_chameleon" + length = 3 + chatname = "small horns" - una_dilocrest - name = "Unathi Dilo Crest" - icon_state = "dilocrest" - length = 0 - chatname = "crests" +/datum/sprite_accessory/hair/una_aquaticfrill/una_dilocrest + name = "Unathi Dilo Crest" + icon_state = "dilocrest" + length = 0 + chatname = "crests" - una_monocrest - name = "Unathi Mono Crest" - icon_state = "monocrest" - length = 0 - chatname = "crest" +/datum/sprite_accessory/hair/una_aquaticfrill/una_monocrest + name = "Unathi Mono Crest" + icon_state = "monocrest" + length = 0 + chatname = "crest" - una_cryocrest - name = "Unathi Cryo Crest" - icon_state = "cryocrest" - length = 0 - chatname = "crest" +/datum/sprite_accessory/hair/una_aquaticfrill/una_cryocrest + name = "Unathi Cryo Crest" + icon_state = "cryocrest" + length = 0 + chatname = "crest" - una_corycrest - name = "Unathi Cory Crest" - icon_state = "corycrest" - length = 0 - chatname = "crest" +/datum/sprite_accessory/hair/una_aquaticfrill/una_corycrest + name = "Unathi Cory Crest" + icon_state = "corycrest" + length = 0 + chatname = "crest" - una_albertahorns - name = "Unathi Alberta Horns" - icon_state = "albertahorns" - length = 5 - chatname = "small horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_albertahorns + name = "Unathi Alberta Horns" + icon_state = "albertahorns" + length = 5 + chatname = "small horns" - una_styrahorn - name = "Unathi Styra Horn" - icon_state = "styrahorn" - length = 5 - chatname = "massive horn" +/datum/sprite_accessory/hair/una_aquaticfrill/una_styrahorn + name = "Unathi Styra Horn" + icon_state = "styrahorn" + length = 5 + chatname = "massive horn" - una_styracrest - name = "Unathi Styra Frill" - icon_state = "styrafrill" - length = 0 - chatname = "frill" +/datum/sprite_accessory/hair/una_aquaticfrill/una_styracrest + name = "Unathi Styra Frill" + icon_state = "styrafrill" + length = 0 + chatname = "frill" - una_pachyboss - name = "Unathi Pachy Boss" - icon_state = "pachylump" - length = 0 - chatname = "lump" +/datum/sprite_accessory/hair/una_aquaticfrill/una_pachyboss + name = "Unathi Pachy Boss" + icon_state = "pachylump" + length = 0 + chatname = "lump" - una_droopy - name = "Unathi Droopy Dorsal Frill" - icon_state = "unathi_droopydorsal" - length = 0 - chatname = "droopy frill" +/datum/sprite_accessory/hair/una_aquaticfrill/una_droopy + name = "Unathi Droopy Dorsal Frill" + icon_state = "unathi_droopydorsal" + length = 0 + chatname = "droopy frill" - una_regal - name = "Unathi Regal Frills" - icon_state = "unathi_regalfrills" - length = 6 - chatname = "massive frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_regal + name = "Unathi Regal Frills" + icon_state = "unathi_regalfrills" + length = 6 + chatname = "massive frills" - una_hornsbusted - name = "Unathi Horns-Busted" - icon_state = "unathi_simplehornbusted" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_hornsbusted + name = "Unathi Horns-Busted" + icon_state = "unathi_simplehornbusted" + length = 5 + chatname = "horns" - una_ramhornshortbusted - name = "Unathi Short Ram Horns-Busted" - icon_state = "unathi_ramhornbusted" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_ramhornshortbusted + name = "Unathi Short Ram Horns-Busted" + icon_state = "unathi_ramhornbusted" + length = 5 + chatname = "horns" - una_shorthornbusted - name = "Unathi Short Horns-Busted" - icon_state = "unathi_shorthornbusted" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shorthornbusted + name = "Unathi Short Horns-Busted" + icon_state = "unathi_shorthornbusted" + length = 5 + chatname = "horns" - una_drachornbusted - name = "Unathi Draconic Horns-Busted" - icon_state = "unathi_drachornbusted" - length = 5 - chatname = "horns" +/datum/sprite_accessory/hair/una_aquaticfrill/una_drachornbusted + name = "Unathi Draconic Horns-Busted" + icon_state = "unathi_drachornbusted" + length = 5 + chatname = "horns" - una_shortfrill2busted - name = "Unathi Short Frills 2-Busted" - icon_state = "unathi_shortfrills2busted" - length = 0 - chatname = "frills" +/datum/sprite_accessory/hair/una_aquaticfrill/una_shortfrill2busted + name = "Unathi Short Frills 2-Busted" + icon_state = "unathi_shortfrills2busted" + length = 0 + chatname = "frills" - una_styrahornbusted - name = "Unathi Styra Horn-Busted" - icon_state = "styrahornbusted" - length = 2 - chatname = "horn stub" +/datum/sprite_accessory/hair/una_aquaticfrill/una_styrahornbusted + name = "Unathi Styra Horn-Busted" + icon_state = "styrahornbusted" + length = 2 + chatname = "horn stub" //skrell tentacles - skr_tentacle_damaged_long_r - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Long Headtails, damaged (right)" - icon_state = "verylong_s_dmg_r" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 6 - chatname = "long headtails" - - skr_tentacle_damaged_long_l - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Long Headtails, damaged (left)" - icon_state = "verylong_s_dmg_l" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_long_r + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Long Headtails, damaged (right)" + icon_state = "verylong_s_dmg_r" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 6 + chatname = "long headtails" - skr_tentacle_damaged_r - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Headtails, damaged (right)" - icon_state = "skrell_hair_f_dmg_r" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_long_l + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Long Headtails, damaged (left)" + icon_state = "verylong_s_dmg_l" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 6 + chatname = "long headtails" - skr_tentacle_damaged_l - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Headtails, damaged (left)" - icon_state = "skrell_hair_f_dmg_l" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_r + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Headtails, damaged (right)" + icon_state = "skrell_hair_f_dmg_r" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 4 + chatname = "headtails" - skr_tentacle_damaged_b_r - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Headtails, damaged behind (right)" - icon_state = "skrell_both_behind_dmg_r" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 4 - chatname = "headtails" - - skr_tentacle_damaged_b_l - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Headtails, damaged behind (left)" - icon_state = "skrell_both_behind_dmg_l" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 4 - chatname = "headtails" - - skr_tentacle_damaged_blong_l - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Long Headtails, damaged behind (left)" - icon_state = "skrell_both_behind_long_dmg_l" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_l + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Headtails, damaged (left)" + icon_state = "skrell_hair_f_dmg_l" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 4 + chatname = "headtails" - skr_tentacle_damaged_blong_r - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Long Headtails, damaged behind (right)" - icon_state = "skrell_both_behind_long_dmg_r" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_b_r + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Headtails, damaged behind (right)" + icon_state = "skrell_both_behind_dmg_r" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 4 + chatname = "headtails" - skr_tentacle_m - icon = 'icons/mob/human_face/skrell_hair.dmi' - name = "Short Headtails" - icon_state = "skrell_hair_m" - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - length = 2 - chatname = "short headtails" - var/scrunchy_style = "seaweed" // seaweed fits the normal tentacles pretty well +/datum/sprite_accessory/hair/skr_tentacle_damaged_b_l + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Headtails, damaged behind (left)" + icon_state = "skrell_both_behind_dmg_l" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 4 + chatname = "headtails" - skr_tentacle_f - name = "Headtails" - icon_state = "skrell_hair_f" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_blong_l + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Long Headtails, damaged behind (left)" + icon_state = "skrell_both_behind_long_dmg_l" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 6 + chatname = "long headtails" - skr_tentacle_short - name = "Very Short Headtails" - icon_state = "veryshort_s" - length = 1 - chatname = "short headtails" +/datum/sprite_accessory/hair/skr_tentacle_damaged_blong_r + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Long Headtails, damaged behind (right)" + icon_state = "skrell_both_behind_long_dmg_r" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 6 + chatname = "long headtails" - skr_tentacle_long - name = "Long Headtails" - icon_state = "verylong_s" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m + icon = 'icons/mob/human_face/skrell_hair.dmi' + name = "Short Headtails" + icon_state = "skrell_hair_m" + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + length = 2 + chatname = "short headtails" + var/scrunchy_style = "seaweed" // seaweed fits the normal tentacles pretty well - skr_tentacle_doubletail - name = "Headtails, ponytail (hoop)" - icon_state = "skrell_hoop" - length = 5 - chatname = "headtails" - scrunchy_style = "hoop" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_f + name = "Headtails" + icon_state = "skrell_hair_f" + length = 4 + chatname = "headtails" - skr_tentacle_flb - name = "Headtails, ponytail (reef)" - icon_state = "skrell_reef" - length = 5 - chatname = "headtails" - scrunchy_style = "reef" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_short + name = "Very Short Headtails" + icon_state = "veryshort_s" + length = 1 + chatname = "short headtails" - skr_tentacle_backwater - name = "Headtails, ponytail (backwater)" - icon_state = "skrell_backwater" - length = 5 - chatname = "headtails" - scrunchy_style = "backwater" - - skr_tentacle_braided - name = "Headtails, braided" - icon_state = "skrell_loose_braid" - length = 5 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_long + name = "Long Headtails" + icon_state = "verylong_s" + length = 6 + chatname = "long headtails" - skr_tentacle_reserved - name = "Expressive Headtails, reserved" - icon_state = "skrell_reserved" - length = 6 - chatname = "headtails" - - skr_tentacle_reserved_long - name = "Expressive Headtails, reserved (long)" - icon_state = "skrell_reserved_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_doubletail + name = "Headtails, ponytail (hoop)" + icon_state = "skrell_hoop" + length = 5 + chatname = "headtails" + scrunchy_style = "hoop" - skr_tentacle_excited - name = "Expressive Headtails, excited" - icon_state = "skrell_excited" - length = 6 - chatname = "headtails" - - skr_tentacle_excited_long - name = "Expressive Headtails, excited (long)" - icon_state = "skrell_excited_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_flb + name = "Headtails, ponytail (reef)" + icon_state = "skrell_reef" + length = 5 + chatname = "headtails" + scrunchy_style = "reef" - skr_tentacle_insulted - name = "Expressive Headtails, insulted" - icon_state = "skrell_insulted" - length = 6 - chatname = "headtails" - - skr_tentacle_insulted_long - name = "Expressive Headtails, insulted (long)" - icon_state = "skrell_insulted_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_backwater + name = "Headtails, ponytail (backwater)" + icon_state = "skrell_backwater" + length = 5 + chatname = "headtails" + scrunchy_style = "backwater" - skr_tentacle_tucked - name = "Short Headtails, tucked" - icon_state = "skrell_tucked" - length = 2 - chatname = "short headtails" - - skr_tentacle_bun_short - name = "Short Headtails, bun" - icon_state = "skrell_short_mid_bun" - length = 3 - chatname = "short headtails" - scrunchy_style = "short bun" - - skr_tentacle_bun - name = "Headtails, bun" - icon_state = "skrell_mid_bun" - length = 4 - chatname = "headtails" - scrunchy_style = "bun" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_braided + name = "Headtails, braided" + icon_state = "skrell_loose_braid" + length = 5 + chatname = "headtails" - skr_tentacle_bun_long - name = "Long Headtails, bun" - icon_state = "skrell_long_mid_bun" - length = 6 - chatname = "long headtails" - scrunchy_style = "long bun" - - skr_tentacle_low_bun - name = "Headtails, low bun" - icon_state = "skrell_low_bun" - length = 4 - chatname = "headtails" - scrunchy_style = "low bun" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_reserved + name = "Expressive Headtails, reserved" + icon_state = "skrell_reserved" + length = 6 + chatname = "headtails" - skr_tentacle_tuux_wavy - name = "Headtails, wavy tuux" - icon_state = "skrell_long_tuux" - length = 5 - chatname = "headtails" - - skr_tentacle_tuux_straight - name = "Headtails, straight tuux" - icon_state = "skrell_straight_tuux" - length = 5 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_reserved_long + name = "Expressive Headtails, reserved (long)" + icon_state = "skrell_reserved_long" + length = 6 + chatname = "long headtails" - skr_tentacle_tuux_short - name = "Short Headtails, tuux" - icon_state = "skrell_short_tuux" - length = 3 - chatname = "short headtails" - - skr_tentacle_tuux_straight_l - name = "Long Headtails, tuux" - icon_state = "skrell_straight_tuux_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_excited + name = "Expressive Headtails, excited" + icon_state = "skrell_excited" + length = 6 + chatname = "headtails" - skr_tentacle_slicked - name = "Short Headtails, slicked" - icon_state = "skrell_slicked" - length = 2 - chatname = "short headtails" - - skr_tentacle_mullet - name = "Headtails, mullet" - icon_state = "skrell_mullet" - length = 4 - chatname = "headtails" - - skr_tentacle_behind_r - name = "Headtails, behind (right)" - icon_state = "skrell_right_behind" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_excited_long + name = "Expressive Headtails, excited (long)" + icon_state = "skrell_excited_long" + length = 6 + chatname = "long headtails" - skr_tentacle_behind_l - name = "Headtails, behind (left)" - icon_state = "skrell_left_behind" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_insulted + name = "Expressive Headtails, insulted" + icon_state = "skrell_insulted" + length = 6 + chatname = "headtails" - skr_tentacle_behind_b - name = "Headtails, behind" - icon_state = "skrell_both_behind" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_insulted_long + name = "Expressive Headtails, insulted (long)" + icon_state = "skrell_insulted_long" + length = 6 + chatname = "long headtails" - skr_tentacle_behind_b_s - name = "Short Headtails, behind" - icon_state = "skrell_both_behind_short" - length = 2 - chatname = "short headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_tucked + name = "Short Headtails, tucked" + icon_state = "skrell_tucked" + length = 2 + chatname = "short headtails" - skr_tentacle_behind_b_l - name = "Long Headtails, behind" - icon_state = "skrell_both_behind_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_bun_short + name = "Short Headtails, bun" + icon_state = "skrell_short_mid_bun" + length = 3 + chatname = "short headtails" + scrunchy_style = "short bun" - skr_tentacle_behind_l_l - name = "Long Headtails, behind (left)" - icon_state = "skrell_left_behind_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_bun + name = "Headtails, bun" + icon_state = "skrell_mid_bun" + length = 4 + chatname = "headtails" + scrunchy_style = "bun" - skr_tentacle_behind_r_l - name = "Long Headtails, behind (right)" - icon_state = "skrell_right_behind_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_bun_long + name = "Long Headtails, bun" + icon_state = "skrell_long_mid_bun" + length = 6 + chatname = "long headtails" + scrunchy_style = "long bun" - skr_tentacle_reef - name = "Short Headtails, ponytail (reef)" - icon_state = "skrell_reef_short" - length = 3 - chatname = "short headtails" - scrunchy_style = "reef_short" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_low_bun + name = "Headtails, low bun" + icon_state = "skrell_low_bun" + length = 4 + chatname = "headtails" + scrunchy_style = "low bun" - skr_tentacle_emo_l_l - name = "Long Headtails, emo (left)" - icon_state = "skrell_left_emo_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_tuux_wavy + name = "Headtails, wavy tuux" + icon_state = "skrell_long_tuux" + length = 5 + chatname = "headtails" - skr_tentacle_emo_r_l - name = "Long Headtails, emo (right)" - icon_state = "skrell_right_emo_long" - length = 6 - chatname = "long headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_tuux_straight + name = "Headtails, straight tuux" + icon_state = "skrell_straight_tuux" + length = 5 + chatname = "headtails" - skr_tentacle_emo_l - name = "Headtails, emo (left)" - icon_state = "skrell_left_emo" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_tuux_short + name = "Short Headtails, tuux" + icon_state = "skrell_short_tuux" + length = 3 + chatname = "short headtails" - skr_tentacle_emo_r - name = "Headtails, emo (right)" - icon_state = "skrell_right_emo" - length = 4 - chatname = "headtails" +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_tuux_straight_l + name = "Long Headtails, tuux" + icon_state = "skrell_straight_tuux_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_slicked + name = "Short Headtails, slicked" + icon_state = "skrell_slicked" + length = 2 + chatname = "short headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_mullet + name = "Headtails, mullet" + icon_state = "skrell_mullet" + length = 4 + chatname = "headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_r + name = "Headtails, behind (right)" + icon_state = "skrell_right_behind" + length = 4 + chatname = "headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_l + name = "Headtails, behind (left)" + icon_state = "skrell_left_behind" + length = 4 + chatname = "headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_b + name = "Headtails, behind" + icon_state = "skrell_both_behind" + length = 4 + chatname = "headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_b_s + name = "Short Headtails, behind" + icon_state = "skrell_both_behind_short" + length = 2 + chatname = "short headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_b_l + name = "Long Headtails, behind" + icon_state = "skrell_both_behind_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_l_l + name = "Long Headtails, behind (left)" + icon_state = "skrell_left_behind_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_behind_r_l + name = "Long Headtails, behind (right)" + icon_state = "skrell_right_behind_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_reef + name = "Short Headtails, ponytail (reef)" + icon_state = "skrell_reef_short" + length = 3 + chatname = "short headtails" + scrunchy_style = "reef_short" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_emo_l_l + name = "Long Headtails, emo (left)" + icon_state = "skrell_left_emo_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_emo_r_l + name = "Long Headtails, emo (right)" + icon_state = "skrell_right_emo_long" + length = 6 + chatname = "long headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_emo_l + name = "Headtails, emo (left)" + icon_state = "skrell_left_emo" + length = 4 + chatname = "headtails" + +/datum/sprite_accessory/hair/skr_tentacle_m/skr_tentacle_emo_r + name = "Headtails, emo (right)" + icon_state = "skrell_right_emo" + length = 4 + chatname = "headtails" //tajaran hair - taj_ears - icon = 'icons/mob/human_face/tajara_hair.dmi' - name = "Tajaran Ears" - icon_state = "ears_plain" - length = 1 - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/zombie/tajara) +/datum/sprite_accessory/hair/taj_ears + icon = 'icons/mob/human_face/tajara_hair.dmi' + name = "Tajaran Ears" + icon_state = "ears_plain" + length = 1 + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/zombie/tajara) - taj_ears_bangs - name = "Tajara Bangs" - icon_state = "hair_bangs" - length = 3 - chatname = "bangs" +/datum/sprite_accessory/hair/taj_ears/taj_ears_bangs + name = "Tajara Bangs" + icon_state = "hair_bangs" + length = 3 + chatname = "bangs" - taj_ears_bangs_alt - name = "Tajara Bangs Alt" - icon_state = "hair_bangs_alt" - length = 3 - chatname = "short bangs" +/datum/sprite_accessory/hair/taj_ears/taj_ears_bangs_alt + name = "Tajara Bangs Alt" + icon_state = "hair_bangs_alt" + length = 3 + chatname = "short bangs" - taj_ears_shortfringe - name = "Tajara Short Fringe" - icon_state = "hair_shortfringe" - length = 2 - chatname = "short fringe" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shortfringe + name = "Tajara Short Fringe" + icon_state = "hair_shortfringe" + length = 2 + chatname = "short fringe" - taj_ears_bob - name = "Tajara Bob" - icon_state = "hair_bob" - length = 2 - chatname = "groomed short mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_bob + name = "Tajara Bob" + icon_state = "hair_bob" + length = 2 + chatname = "groomed short mane" - taj_ears_braid - name = "Tajara Braid" - icon_state = "hair_braid" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/taj_ears/taj_ears_braid + name = "Tajara Braid" + icon_state = "hair_braid" + length = 3 + chatname = "braid" - taj_ears_braid_alt - name = "Tajara Braid Alt" - icon_state = "hair_braid_alt" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/taj_ears/taj_ears_braid_alt + name = "Tajara Braid Alt" + icon_state = "hair_braid_alt" + length = 3 + chatname = "braid" - taj_ears_clean - name = "Tajara Clean" - icon_state = "hair_clean" - length = 1 - chatname = "short mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_clean + name = "Tajara Clean" + icon_state = "hair_clean" + length = 1 + chatname = "short mane" - taj_ears_curls - name = "Tajara Curly" - icon_state = "hair_curly" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_curls + name = "Tajara Curly" + icon_state = "hair_curly" + length = 3 + chatname = "curly mane" - taj_ears_curlsalt - name = "Tajara Curly Alt" - icon_state = "hair_curlyalt" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_curlsalt + name = "Tajara Curly Alt" + icon_state = "hair_curlyalt" + length = 3 + chatname = "curly mane" - taj_ears_fingercurl - name = "Tajara Finger Curls" - icon_state = "hair_fingerwave" - length = 2 - chatname = "curls" +/datum/sprite_accessory/hair/taj_ears/taj_ears_fingercurl + name = "Tajara Finger Curls" + icon_state = "hair_fingerwave" + length = 2 + chatname = "curls" - taj_ears_pompadour - name = "Tajara Greaser" - icon_state = "hair_greaser" - length = 2 - chatname = "pompadour" +/datum/sprite_accessory/hair/taj_ears/taj_ears_pompadour + name = "Tajara Greaser" + icon_state = "hair_greaser" + length = 2 + chatname = "pompadour" - taj_ears_housewife - name = "Tajara Housewife" - icon_state = "hair_housewife" - length = 2 - chatname = "long mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_housewife + name = "Tajara Housewife" + icon_state = "hair_housewife" + length = 2 + chatname = "long mane" - taj_ears_long - name = "Tajara Long" - icon_state = "hair_long" - length = 3 - chatname = "long mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_long + name = "Tajara Long" + icon_state = "hair_long" + length = 3 + chatname = "long mane" - taj_ears_messy - name = "Tajara Messy" - icon_state = "hair_messy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_messy + name = "Tajara Messy" + icon_state = "hair_messy" + length = 1 + chatname = "messy mane" - taj_ears_mohawk - name = "Tajara Mohawk" - icon_state = "hair_mohawk" - length = 1 - chatname = "mohawk" +/datum/sprite_accessory/hair/taj_ears/taj_ears_mohawk + name = "Tajara Mohawk" + icon_state = "hair_mohawk" + length = 1 + chatname = "mohawk" - taj_ears_plait - name = "Tajara Plait" - icon_state = "hair_plait" - length = 1 - chatname = "braid" +/datum/sprite_accessory/hair/taj_ears/taj_ears_plait + name = "Tajara Plait" + icon_state = "hair_plait" + length = 1 + chatname = "braid" - taj_ears_rattail - name = "Tajara Rat Tail" - icon_state = "hair_rattail" - length = 2 - chatname = "thin ponytail" +/datum/sprite_accessory/hair/taj_ears/taj_ears_rattail + name = "Tajara Rat Tail" + icon_state = "hair_rattail" + length = 2 + chatname = "thin ponytail" - taj_ears_shaggy - name = "Tajara Shaggy" - icon_state = "hair_shaggy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shaggy + name = "Tajara Shaggy" + icon_state = "hair_shaggy" + length = 1 + chatname = "messy mane" - taj_ears_straight - name = "Tajara Straight" - icon_state = "hair_straight" - length = 3 - chatname = "short mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_straight + name = "Tajara Straight" + icon_state = "hair_straight" + length = 3 + chatname = "short mane" - taj_ears_spiky - name = "Tajara Spiky" - icon_state = "hair_spiky" - length = 1 - chatname = "spiky mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_spiky + name = "Tajara Spiky" + icon_state = "hair_spiky" + length = 1 + chatname = "spiky mane" - taj_ears_victory - name = "Tajara Victory Curls" - icon_state = "hair_victory" - length = 3 - chatname = "curls" +/datum/sprite_accessory/hair/taj_ears/taj_ears_victory + name = "Tajara Victory Curls" + icon_state = "hair_victory" + length = 3 + chatname = "curls" - taj_ears_mane - name = "Tajara Mane" - icon_state = "hair_mane" - length = 3 - gender = MALE - chatname = "long mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_mane + name = "Tajara Mane" + icon_state = "hair_mane" + length = 3 + gender = MALE + chatname = "long mane" - taj_ears_sidepony - name = "Tajara Side Ponytail" - icon_state = "hair_sidepony" - length = 3 - chatname = "sideponytail" +/datum/sprite_accessory/hair/taj_ears/taj_ears_sidepony + name = "Tajara Side Ponytail" + icon_state = "hair_sidepony" + length = 3 + chatname = "sideponytail" - taj_ears_governmentman - name = "Tajara Government Man" - icon_state = "hair_gman" - length = 1 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_governmentman + name = "Tajara Government Man" + icon_state = "hair_gman" + length = 1 + chatname = "styled mane" - taj_ears_bun - name = "Tajara Bun" - icon_state = "hair_bun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/taj_ears/taj_ears_bun + name = "Tajara Bun" + icon_state = "hair_bun" + length = 2 + chatname = "hair bun" - taj_ears_smallbun - name = "Tajara Bun (Small)" - icon_state = "hair_bunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/taj_ears/taj_ears_smallbun + name = "Tajara Bun (Small)" + icon_state = "hair_bunsmall" + length = 2 + chatname = "hair bun" - taj_ears_lowbun - name = "Tajara Bun (Low)" - icon_state = "hair_lowbun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/taj_ears/taj_ears_lowbun + name = "Tajara Bun (Low)" + icon_state = "hair_lowbun" + length = 2 + chatname = "hair bun" - taj_ears_smalllowbun - name = "Tajara Bun (Low, Small)" - icon_state = "hair_lowbunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/taj_ears/taj_ears_smalllowbun + name = "Tajara Bun (Low, Small)" + icon_state = "hair_lowbunsmall" + length = 2 + chatname = "hair bun" - taj_ears_bunshort - name = "Tajara Bun (Short)" - icon_state = "hair_bunshort" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/taj_ears/taj_ears_bunshort + name = "Tajara Bun (Short)" + icon_state = "hair_bunshort" + length = 2 + chatname = "hair bun" - taj_ears_wedge - name = "Tajara Wedge" - icon_state = "hair_wedge" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_wedge + name = "Tajara Wedge" + icon_state = "hair_wedge" + length = 2 + chatname = "styled mane" - taj_ears_tresses - name = "Tajara Tresses" - icon_state = "hair_tresses" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_tresses + name = "Tajara Tresses" + icon_state = "hair_tresses" + length = 3 + chatname = "styled mane" - taj_ears_shoulderparted - name = "Tajara Shoulder Parted" - icon_state = "hair_shoulderparted" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shoulderparted + name = "Tajara Shoulder Parted" + icon_state = "hair_shoulderparted" + length = 3 + chatname = "styled mane" - taj_ears_shoulderpartedsmall - name = "Tajara Shoulder Parted Small" - icon_state = "hair_shoulderpartedsmall" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shoulderpartedsmall + name = "Tajara Shoulder Parted Small" + icon_state = "hair_shoulderpartedsmall" + length = 3 + chatname = "styled mane" - taj_ears_shoulderpartedlong - name = "Tajara Shoulder Parted Long" - icon_state = "hair_shoulderpartedlong" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shoulderpartedlong + name = "Tajara Shoulder Parted Long" + icon_state = "hair_shoulderpartedlong" + length = 3 + chatname = "styled mane" - taj_ears_shoulderlength - name = "Tajara Shoulderlength" - icon_state = "hair_shoulderlength" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shoulderlength + name = "Tajara Shoulderlength" + icon_state = "hair_shoulderlength" + length = 2 + chatname = "styled mane" - taj_ears_shoulderlengthalt - name = "Tajara Shoulderlength Alt" - icon_state = "hair_shoulderlengthalt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_shoulderlengthalt + name = "Tajara Shoulderlength Alt" + icon_state = "hair_shoulderlengthalt" + length = 2 + chatname = "styled mane" - taj_ears_sidepartedleft - name = "Tajara Sideparted Left" - icon_state = "hair_sidepartedleft" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_sidepartedleft + name = "Tajara Sideparted Left" + icon_state = "hair_sidepartedleft" + length = 3 + chatname = "styled mane" - taj_ears_sidepartedright - name = "Tajara Sideparted Right" - icon_state = "hair_sidepartedright" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_sidepartedright + name = "Tajara Sideparted Right" + icon_state = "hair_sidepartedright" + length = 3 + chatname = "styled mane" - taj_ears_fringeup - name = "Tajara Fringe Up" - icon_state = "hair_fringeup" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_fringeup + name = "Tajara Fringe Up" + icon_state = "hair_fringeup" + length = 2 + chatname = "styled mane" - taj_ears_cascading - name = "Tajara Cascading" - icon_state = "hair_cascading" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_cascading + name = "Tajara Cascading" + icon_state = "hair_cascading" + length = 3 + chatname = "styled mane" - taj_ears_cascadingalt - name = "Tajara Cascading Alt" - icon_state = "hair_cascadingalt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_cascadingalt + name = "Tajara Cascading Alt" + icon_state = "hair_cascadingalt" + length = 3 + chatname = "styled mane" - taj_ears_swoop - name = "Tajara Swoop" - icon_state = "hair_swoop" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_swoop + name = "Tajara Swoop" + icon_state = "hair_swoop" + length = 2 + chatname = "styled mane" - taj_ears_swoop_alt - name = "Tajara Swoop Alt" - icon_state = "hair_swoop_alt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_swoop_alt + name = "Tajara Swoop Alt" + icon_state = "hair_swoop_alt" + length = 2 + chatname = "styled mane" - taj_ears_swoop_bangs - name = "Tajara Swoop Bangs" - icon_state = "hair_swoop_bangs" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_swoop_bangs + name = "Tajara Swoop Bangs" + icon_state = "hair_swoop_bangs" + length = 2 + chatname = "styled mane" - taj_ears_swoop_long - name = "Tajara Swoop Long" - icon_state = "hair_longswoop" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_swoop_long + name = "Tajara Swoop Long" + icon_state = "hair_longswoop" + length = 3 + chatname = "styled mane" - taj_ears_swoop_long_alt - name = "Tajara Swoop Long Alt" - icon_state = "hair_longswoop_alt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/taj_ears/taj_ears_swoop_long_alt + name = "Tajara Swoop Long Alt" + icon_state = "hair_longswoop_alt" + length = 3 + chatname = "styled mane" //msai hair, longer ears - msai_ears - icon = 'icons/mob/human_face/msai_hair.dmi' - name = "M'sai Ears" - icon_state = "msai_plain" - length = 1 - species_allowed = list(/datum/species/tajaran/m_sai) +/datum/sprite_accessory/hair/msai_ears + icon = 'icons/mob/human_face/msai_hair.dmi' + name = "M'sai Ears" + icon_state = "msai_plain" + length = 1 + species_allowed = list(/datum/species/tajaran/m_sai) - msai_ears_bangs - name = "M'sai Bangs" - icon_state = "msai_bangs" - length = 3 - chatname = "bangs" +/datum/sprite_accessory/hair/msai_ears/msai_ears_bangs + name = "M'sai Bangs" + icon_state = "msai_bangs" + length = 3 + chatname = "bangs" - msai_ears_bangs_alt - name = "M'sai Bangs Alt" - icon_state = "msai_bangs_alt" - length = 3 - chatname = "smallbangs" +/datum/sprite_accessory/hair/msai_ears/msai_ears_bangs_alt + name = "M'sai Bangs Alt" + icon_state = "msai_bangs_alt" + length = 3 + chatname = "smallbangs" - msai_ears_shortfringe - name = "M'sai Short Fringe" - icon_state = "msai_shortfringe" - length = 2 - chatname = "short fringe" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shortfringe + name = "M'sai Short Fringe" + icon_state = "msai_shortfringe" + length = 2 + chatname = "short fringe" - msai_ears_bob - name = "M'sai Bob" - icon_state = "msai_bob" - length = 2 - chatname = "groomed short mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_bob + name = "M'sai Bob" + icon_state = "msai_bob" + length = 2 + chatname = "groomed short mane" - msai_ears_braid - name = "M'sai Braid" - icon_state = "msai_braid" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/msai_ears/msai_ears_braid + name = "M'sai Braid" + icon_state = "msai_braid" + length = 3 + chatname = "braid" - msai_ears_braid_alt - name = "M'sai Braid Alt" - icon_state = "msai_braid_alt" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/msai_ears/msai_ears_braid_alt + name = "M'sai Braid Alt" + icon_state = "msai_braid_alt" + length = 3 + chatname = "braid" - msai_ears_clean - name = "M'sai Clean" - icon_state = "msai_clean" - length = 1 - chatname = "short mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_clean + name = "M'sai Clean" + icon_state = "msai_clean" + length = 1 + chatname = "short mane" - msai_ears_curls - name = "M'sai Curly" - icon_state = "msai_curly" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_curls + name = "M'sai Curly" + icon_state = "msai_curly" + length = 3 + chatname = "curly mane" - msai_ears_curls - name = "M'sai Curly Alt" - icon_state = "msai_curlyalt" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_curls + name = "M'sai Curly Alt" + icon_state = "msai_curlyalt" + length = 3 + chatname = "curly mane" - msai_ears_fingercurl - name = "M'sai Finger Curls" - icon_state = "msai_fingerwave" - length = 2 - chatname = "curls" +/datum/sprite_accessory/hair/msai_ears/msai_ears_fingercurl + name = "M'sai Finger Curls" + icon_state = "msai_fingerwave" + length = 2 + chatname = "curls" - msai_ears_pompadour - name = "M'sai Greaser" - icon_state = "msai_greaser" - length = 2 - chatname = "pompadour" +/datum/sprite_accessory/hair/msai_ears/msai_ears_pompadour + name = "M'sai Greaser" + icon_state = "msai_greaser" + length = 2 + chatname = "pompadour" - msai_ears_housewife - name = "M'sai Housewife" - icon_state = "msai_housewife" - length = 2 - chatname = "long mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_housewife + name = "M'sai Housewife" + icon_state = "msai_housewife" + length = 2 + chatname = "long mane" - msai_ears_long - name = "M'sai Long" - icon_state = "msai_long" - length = 3 - chatname = "long mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_long + name = "M'sai Long" + icon_state = "msai_long" + length = 3 + chatname = "long mane" - msai_ears_messy - name = "M'sai Messy" - icon_state = "msai_messy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_messy + name = "M'sai Messy" + icon_state = "msai_messy" + length = 1 + chatname = "messy mane" - msai_ears_mohawk - name = "M'sai Mohawk" - icon_state = "msai_mohawk" - length = 1 - chatname = "mohawk" +/datum/sprite_accessory/hair/msai_ears/msai_ears_mohawk + name = "M'sai Mohawk" + icon_state = "msai_mohawk" + length = 1 + chatname = "mohawk" - msai_ears_plait - name = "M'sai Plait" - icon_state = "msai_plait" - length = 1 - chatname = "braid" +/datum/sprite_accessory/hair/msai_ears/msai_ears_plait + name = "M'sai Plait" + icon_state = "msai_plait" + length = 1 + chatname = "braid" - msai_ears_rattail - name = "M'sai Rat Tail" - icon_state = "msai_rattail" - length = 2 - chatname = "thin ponytail" +/datum/sprite_accessory/hair/msai_ears/msai_ears_rattail + name = "M'sai Rat Tail" + icon_state = "msai_rattail" + length = 2 + chatname = "thin ponytail" - msai_ears_shaggy - name = "M'sai Shaggy" - icon_state = "msai_shaggy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shaggy + name = "M'sai Shaggy" + icon_state = "msai_shaggy" + length = 1 + chatname = "messy mane" - msai_ears_straight - name = "M'sai Straight" - icon_state = "msai_straight" - length = 3 - chatname = "short mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_straight + name = "M'sai Straight" + icon_state = "msai_straight" + length = 3 + chatname = "short mane" - msai_ears_spiky - name = "M'sai Spiky" - icon_state = "msai_spiky" - length = 1 - chatname = "spiky mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_spiky + name = "M'sai Spiky" + icon_state = "msai_spiky" + length = 1 + chatname = "spiky mane" - msai_ears_victory - name = "M'sai Victory Curls" - icon_state = "msai_victory" - length = 2 - chatname = "curls" +/datum/sprite_accessory/hair/msai_ears/msai_ears_victory + name = "M'sai Victory Curls" + icon_state = "msai_victory" + length = 2 + chatname = "curls" - msai_ears_mane - name = "M'sai Mane" - icon_state = "msai_mane" - length = 3 - gender = MALE - chatname = "long mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_mane + name = "M'sai Mane" + icon_state = "msai_mane" + length = 3 + gender = MALE + chatname = "long mane" - msai_ears_sidepony - name = "M'sai Side Ponytail" - icon_state = "msai_sidepony" - length = 3 - chatname = "sideponytail" +/datum/sprite_accessory/hair/msai_ears/msai_ears_sidepony + name = "M'sai Side Ponytail" + icon_state = "msai_sidepony" + length = 3 + chatname = "sideponytail" - msai_ears_governmentman - name = "M'sai Government Man" - icon_state = "msai_gman" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_governmentman + name = "M'sai Government Man" + icon_state = "msai_gman" + length = 2 + chatname = "styled mane" - msai_ears_bun - name = "M'sai Bun" - icon_state = "msai_bun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/msai_ears/msai_ears_bun + name = "M'sai Bun" + icon_state = "msai_bun" + length = 2 + chatname = "hair bun" - taj_ears_smallbun - name = "M'sai Bun (Small)" - icon_state = "msai_bunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/msai_ears/taj_ears_smallbun + name = "M'sai Bun (Small)" + icon_state = "msai_bunsmall" + length = 2 + chatname = "hair bun" - msai_ears_lowbun - name = "M'sai Bun (Low)" - icon_state = "msai_lowbun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/msai_ears/msai_ears_lowbun + name = "M'sai Bun (Low)" + icon_state = "msai_lowbun" + length = 2 + chatname = "hair bun" - msai_ears_lowsmallbun - name = "M'sai Bun (Low, Small)" - icon_state = "msai_lowbunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/msai_ears/msai_ears_lowsmallbun + name = "M'sai Bun (Low, Small)" + icon_state = "msai_lowbunsmall" + length = 2 + chatname = "hair bun" - msai_ears_bunshort - name = "M'sai Bun (Short)" - icon_state = "msai_bunshort" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/msai_ears/msai_ears_bunshort + name = "M'sai Bun (Short)" + icon_state = "msai_bunshort" + length = 2 + chatname = "hair bun" - msai_ears_wedge - name = "M'sai Wedge" - icon_state = "msai_wedge" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_wedge + name = "M'sai Wedge" + icon_state = "msai_wedge" + length = 2 + chatname = "styled mane" - msai_ears_tresses - name = "M'sai Tresses" - icon_state = "msai_tresses" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_tresses + name = "M'sai Tresses" + icon_state = "msai_tresses" + length = 3 + chatname = "styled mane" - msai_ears_shoulderparted - name = "M'sai Shoulderparted" - icon_state = "msai_shoulderparted" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shoulderparted + name = "M'sai Shoulderparted" + icon_state = "msai_shoulderparted" + length = 3 + chatname = "styled mane" - msai_ears_shoulderpartedsmall - name = "M'sai Shoulderparted Small" - icon_state = "msai_shoulderpartedsmall" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shoulderpartedsmall + name = "M'sai Shoulderparted Small" + icon_state = "msai_shoulderpartedsmall" + length = 3 + chatname = "styled mane" - msai_ears_shoulderpartedlong - name = "M'sai Shoulderparted Long" - icon_state = "msai_shoulderpartedlong" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shoulderpartedlong + name = "M'sai Shoulderparted Long" + icon_state = "msai_shoulderpartedlong" + length = 3 + chatname = "styled mane" - msai_ears_sidepartedleft - name = "M'sai Sideparted Left" - icon_state = "msai_sidepartedleft" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_sidepartedleft + name = "M'sai Sideparted Left" + icon_state = "msai_sidepartedleft" + length = 3 + chatname = "styled mane" - msai_ears_sidepartedright - name = "M'sai Sideparted Right" - icon_state = "msai_sidepartedright" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_sidepartedright + name = "M'sai Sideparted Right" + icon_state = "msai_sidepartedright" + length = 3 + chatname = "styled mane" - msai_ears_shoulderlength - name = "M'sai Shoulderlength" - icon_state = "msai_shoulderlength" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shoulderlength + name = "M'sai Shoulderlength" + icon_state = "msai_shoulderlength" + length = 2 + chatname = "styled mane" - msai_ears_shoulderlengthalt - name = "M'sai Shoulderlength Alt" - icon_state = "msai_shoulderlengthalt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_shoulderlengthalt + name = "M'sai Shoulderlength Alt" + icon_state = "msai_shoulderlengthalt" + length = 2 + chatname = "styled mane" - msai_ears_fringeup - name = "M'sai Fringe Up" - icon_state = "msai_fringeup" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_fringeup + name = "M'sai Fringe Up" + icon_state = "msai_fringeup" + length = 2 + chatname = "styled mane" - msai_ears_cascading - name = "M'sai Cascading" - icon_state = "msai_cascading" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_cascading + name = "M'sai Cascading" + icon_state = "msai_cascading" + length = 3 + chatname = "styled mane" - msai_ears_cascadingalt - name = "M'sai Cascading Alt" - icon_state = "msai_cascadingalt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_cascadingalt + name = "M'sai Cascading Alt" + icon_state = "msai_cascadingalt" + length = 3 + chatname = "styled mane" - msai_ears_swoop - name = "M'sai Swoop" - icon_state = "msai_swoop" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_swoop + name = "M'sai Swoop" + icon_state = "msai_swoop" + length = 2 + chatname = "styled mane" - msai_ears_swoop_alt - name = "M'sai Swoop Alt" - icon_state = "msai_swoop_alt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_swoop_alt + name = "M'sai Swoop Alt" + icon_state = "msai_swoop_alt" + length = 2 + chatname = "styled mane" - msai_ears_swoop_bangs - name = "M'sai Swoop Bangs" - icon_state = "msai_swoop_bangs" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_swoop_bangs + name = "M'sai Swoop Bangs" + icon_state = "msai_swoop_bangs" + length = 2 + chatname = "styled mane" - msai_ears_swoop_long - name = "M'sai Swoop Long" - icon_state = "msai_longswoop" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_swoop_long + name = "M'sai Swoop Long" + icon_state = "msai_longswoop" + length = 3 + chatname = "styled mane" - msai_ears_swoop_long_alt - name = "M'sai Swoop Long Alt" - icon_state = "msai_longswoop_alt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/msai_ears/msai_ears_swoop_long_alt + name = "M'sai Swoop Long Alt" + icon_state = "msai_longswoop_alt" + length = 3 + chatname = "styled mane" //tesla rejuvenation suit hair - tesla_ears - icon = 'icons/mob/human_face/tesla_body_hair.dmi' - name = "Tesla Rejuvenation Suit Ears" - icon_state = "ears_plain" - length = 1 - species_allowed = list(/datum/species/tajaran/tesla_body) +/datum/sprite_accessory/hair/tesla_ears + icon = 'icons/mob/human_face/tesla_body_hair.dmi' + name = "Tesla Rejuvenation Suit Ears" + icon_state = "ears_plain" + length = 1 + species_allowed = list(/datum/species/tajaran/tesla_body) - tesla_ears_bangs - name = "Tesla Rejuvenation Suit Bangs" - icon_state = "hair_bangs" - length = 3 - chatname = "bangs" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_bangs + name = "Tesla Rejuvenation Suit Bangs" + icon_state = "hair_bangs" + length = 3 + chatname = "bangs" - tesla_ears_bangs_alt - name = "Tesla Rejuvenation Suit Bangs Alt" - icon_state = "hair_bangs_alt" - length = 3 - chatname = "short bangs" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_bangs_alt + name = "Tesla Rejuvenation Suit Bangs Alt" + icon_state = "hair_bangs_alt" + length = 3 + chatname = "short bangs" - tesla_ears_shortfringe - name = "Tesla Rejuvenation Suit Short Fringe" - icon_state = "hair_shortfringe" - length = 2 - chatname = "short fringe" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shortfringe + name = "Tesla Rejuvenation Suit Short Fringe" + icon_state = "hair_shortfringe" + length = 2 + chatname = "short fringe" - tesla_ears_bob - name = "Tesla Rejuvenation Suit Bob" - icon_state = "hair_bob" - length = 2 - chatname = "groomed short mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_bob + name = "Tesla Rejuvenation Suit Bob" + icon_state = "hair_bob" + length = 2 + chatname = "groomed short mane" - tesla_ears_braid - name = "Tesla Rejuvenation Suit Braid" - icon_state = "hair_braid" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_braid + name = "Tesla Rejuvenation Suit Braid" + icon_state = "hair_braid" + length = 3 + chatname = "braid" - tesla_ears_braid_alt - name = "Tesla Rejuvenation Suit Braid Alt" - icon_state = "hair_braid_alt" - length = 3 - chatname = "braid" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_braid_alt + name = "Tesla Rejuvenation Suit Braid Alt" + icon_state = "hair_braid_alt" + length = 3 + chatname = "braid" - tesla_ears_clean - name = "Tesla Rejuvenation Suit Clean" - icon_state = "hair_clean" - length = 1 - chatname = "short mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_clean + name = "Tesla Rejuvenation Suit Clean" + icon_state = "hair_clean" + length = 1 + chatname = "short mane" - tesla_ears_curls - name = "Tesla Rejuvenation Suit Curly" - icon_state = "hair_curly" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_curls + name = "Tesla Rejuvenation Suit Curly" + icon_state = "hair_curly" + length = 3 + chatname = "curly mane" - tesla_ears_curlsalt - name = "Tesla Rejuvenation Suit Curly Alt" - icon_state = "hair_curlyalt" - length = 3 - chatname = "curly mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_curlsalt + name = "Tesla Rejuvenation Suit Curly Alt" + icon_state = "hair_curlyalt" + length = 3 + chatname = "curly mane" - tesla_ears_fingercurl - name = "Tesla Rejuvenation Suit Finger Curls" - icon_state = "hair_fingerwave" - length = 2 - chatname = "curls" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_fingercurl + name = "Tesla Rejuvenation Suit Finger Curls" + icon_state = "hair_fingerwave" + length = 2 + chatname = "curls" - tesla_ears_housewife - name = "Tesla Rejuvenation Suit Housewife" - icon_state = "hair_housewife" - length = 2 - chatname = "long mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_housewife + name = "Tesla Rejuvenation Suit Housewife" + icon_state = "hair_housewife" + length = 2 + chatname = "long mane" - tesla_ears_long - name = "Tesla Rejuvenation Suit Long" - icon_state = "hair_long" - length = 3 - chatname = "long mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_long + name = "Tesla Rejuvenation Suit Long" + icon_state = "hair_long" + length = 3 + chatname = "long mane" - tesla_ears_messy - name = "Tesla Rejuvenation Suit Messy" - icon_state = "hair_messy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_messy + name = "Tesla Rejuvenation Suit Messy" + icon_state = "hair_messy" + length = 1 + chatname = "messy mane" - tesla_ears_mohawk - name = "Tesla Rejuvenation Suit Mohawk" - icon_state = "hair_mohawk" - length = 1 - chatname = "mohawk" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_mohawk + name = "Tesla Rejuvenation Suit Mohawk" + icon_state = "hair_mohawk" + length = 1 + chatname = "mohawk" - tesla_ears_plait - name = "Tesla Rejuvenation Suit Plait" - icon_state = "hair_plait" - length = 1 - chatname = "braid" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_plait + name = "Tesla Rejuvenation Suit Plait" + icon_state = "hair_plait" + length = 1 + chatname = "braid" - tesla_ears_rattail - name = "Tesla Rejuvenation Suit Rat Tail" - icon_state = "hair_rattail" - length = 2 - chatname = "thin ponytail" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_rattail + name = "Tesla Rejuvenation Suit Rat Tail" + icon_state = "hair_rattail" + length = 2 + chatname = "thin ponytail" - tesla_ears_shaggy - name = "Tesla Rejuvenation Suit Shaggy" - icon_state = "hair_shaggy" - length = 1 - chatname = "messy mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shaggy + name = "Tesla Rejuvenation Suit Shaggy" + icon_state = "hair_shaggy" + length = 1 + chatname = "messy mane" - tesla_ears_straight - name = "Tesla Rejuvenation Suit Straight" - icon_state = "hair_straight" - length = 3 - chatname = "short mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_straight + name = "Tesla Rejuvenation Suit Straight" + icon_state = "hair_straight" + length = 3 + chatname = "short mane" - tesla_ears_spiky - name = "Tesla Rejuvenation Suit Spiky" - icon_state = "hair_spiky" - length = 1 - chatname = "spiky mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_spiky + name = "Tesla Rejuvenation Suit Spiky" + icon_state = "hair_spiky" + length = 1 + chatname = "spiky mane" - tesla_ears_victory - name = "Tesla Rejuvenation Suit Victory Curls" - icon_state = "hair_victory" - length = 3 - chatname = "curls" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_victory + name = "Tesla Rejuvenation Suit Victory Curls" + icon_state = "hair_victory" + length = 3 + chatname = "curls" - tesla_ears_mane - name = "Tesla Rejuvenation Suit Mane" - icon_state = "hair_mane" - length = 3 - gender = MALE - chatname = "long mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_mane + name = "Tesla Rejuvenation Suit Mane" + icon_state = "hair_mane" + length = 3 + gender = MALE + chatname = "long mane" - tesla_ears_sidepony - name = "Tesla Rejuvenation Suit Side Ponytail" - icon_state = "hair_sidepony" - length = 3 - chatname = "sideponytail" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_sidepony + name = "Tesla Rejuvenation Suit Side Ponytail" + icon_state = "hair_sidepony" + length = 3 + chatname = "sideponytail" - tesla_ears_governmentman - name = "Tesla Rejuvenation Suit Government Man" - icon_state = "hair_gman" - length = 1 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_governmentman + name = "Tesla Rejuvenation Suit Government Man" + icon_state = "hair_gman" + length = 1 + chatname = "styled mane" - tesla_ears_bun - name = "Tesla Rejuvenation Suit Bun" - icon_state = "hair_bun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_bun + name = "Tesla Rejuvenation Suit Bun" + icon_state = "hair_bun" + length = 2 + chatname = "hair bun" - tesla_ears_smallbun - name = "Tesla Rejuvenation Suit Bun (Small)" - icon_state = "hair_bunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_smallbun + name = "Tesla Rejuvenation Suit Bun (Small)" + icon_state = "hair_bunsmall" + length = 2 + chatname = "hair bun" - tesla_ears_lowbun - name = "Tesla Rejuvenation Suit Bun (Low)" - icon_state = "hair_lowbun" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_lowbun + name = "Tesla Rejuvenation Suit Bun (Low)" + icon_state = "hair_lowbun" + length = 2 + chatname = "hair bun" - tesla_ears_smalllowbun - name = "Tesla Rejuvenation Suit Bun (Low, Small)" - icon_state = "hair_lowbunsmall" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_smalllowbun + name = "Tesla Rejuvenation Suit Bun (Low, Small)" + icon_state = "hair_lowbunsmall" + length = 2 + chatname = "hair bun" - tesla_ears_bunshort - name = "Tesla Rejuvenation Suit Bun (Short)" - icon_state = "hair_bunshort" - length = 2 - chatname = "hair bun" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_bunshort + name = "Tesla Rejuvenation Suit Bun (Short)" + icon_state = "hair_bunshort" + length = 2 + chatname = "hair bun" - tesla_ears_wedge - name = "Tesla Rejuvenation Suit Wedge" - icon_state = "hair_wedge" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_wedge + name = "Tesla Rejuvenation Suit Wedge" + icon_state = "hair_wedge" + length = 2 + chatname = "styled mane" - tesla_ears_tresses - name = "Tesla Rejuvenation Suit Tresses" - icon_state = "hair_tresses" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_tresses + name = "Tesla Rejuvenation Suit Tresses" + icon_state = "hair_tresses" + length = 3 + chatname = "styled mane" - tesla_ears_shoulderparted - name = "Tesla Rejuvenation Suit Shoulder Parted" - icon_state = "hair_shoulderparted" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shoulderparted + name = "Tesla Rejuvenation Suit Shoulder Parted" + icon_state = "hair_shoulderparted" + length = 3 + chatname = "styled mane" - tesla_ears_shoulderpartedsmall - name = "Tesla Rejuvenation Suit Shoulder Parted Small" - icon_state = "hair_shoulderpartedsmall" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shoulderpartedsmall + name = "Tesla Rejuvenation Suit Shoulder Parted Small" + icon_state = "hair_shoulderpartedsmall" + length = 3 + chatname = "styled mane" - tesla_ears_shoulderpartedlong - name = "Tesla Rejuvenation Suit Shoulder Parted Long" - icon_state = "hair_shoulderpartedlong" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shoulderpartedlong + name = "Tesla Rejuvenation Suit Shoulder Parted Long" + icon_state = "hair_shoulderpartedlong" + length = 3 + chatname = "styled mane" - tesla_ears_shoulderlength - name = "Tesla Rejuvenation Suit Shoulderlength" - icon_state = "hair_shoulderlength" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shoulderlength + name = "Tesla Rejuvenation Suit Shoulderlength" + icon_state = "hair_shoulderlength" + length = 2 + chatname = "styled mane" - tesla_ears_shoulderlengthalt - name = "Tesla Rejuvenation Suit Shoulderlength Alt" - icon_state = "hair_shoulderlengthalt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_shoulderlengthalt + name = "Tesla Rejuvenation Suit Shoulderlength Alt" + icon_state = "hair_shoulderlengthalt" + length = 2 + chatname = "styled mane" - tesla_ears_sidepartedleft - name = "Tesla Rejuvenation Suit Sideparted Left" - icon_state = "hair_sidepartedleft" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_sidepartedleft + name = "Tesla Rejuvenation Suit Sideparted Left" + icon_state = "hair_sidepartedleft" + length = 3 + chatname = "styled mane" - tesla_ears_sidepartedright - name = "Tesla Rejuvenation Suit Sideparted Right" - icon_state = "hair_sidepartedright" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_sidepartedright + name = "Tesla Rejuvenation Suit Sideparted Right" + icon_state = "hair_sidepartedright" + length = 3 + chatname = "styled mane" - tesla_ears_fringeup - name = "Tesla Rejuvenation Suit Fringe Up" - icon_state = "hair_fringeup" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_fringeup + name = "Tesla Rejuvenation Suit Fringe Up" + icon_state = "hair_fringeup" + length = 2 + chatname = "styled mane" - tesla_ears_cascading - name = "Tesla Rejuvenation Suit Cascading" - icon_state = "hair_cascading" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_cascading + name = "Tesla Rejuvenation Suit Cascading" + icon_state = "hair_cascading" + length = 3 + chatname = "styled mane" - taj_ears_cascadingalt - name = "Tesla Rejuvenation Suit Cascading Alt" - icon_state = "hair_cascadingalt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/taj_ears_cascadingalt + name = "Tesla Rejuvenation Suit Cascading Alt" + icon_state = "hair_cascadingalt" + length = 3 + chatname = "styled mane" - taj_ears_swoop - name = "Tesla Rejuvenation Suit Swoop" - icon_state = "hair_swoop" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/taj_ears_swoop + name = "Tesla Rejuvenation Suit Swoop" + icon_state = "hair_swoop" + length = 2 + chatname = "styled mane" - tesla_ears_swoop_alt - name = "Tesla Rejuvenation Suit Swoop Alt" - icon_state = "hair_swoop_alt" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_swoop_alt + name = "Tesla Rejuvenation Suit Swoop Alt" + icon_state = "hair_swoop_alt" + length = 2 + chatname = "styled mane" - tesla_ears_swoop_bangs - name = "Tesla Rejuvenation Suit Swoop Bangs" - icon_state = "hair_swoop_bangs" - length = 2 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_swoop_bangs + name = "Tesla Rejuvenation Suit Swoop Bangs" + icon_state = "hair_swoop_bangs" + length = 2 + chatname = "styled mane" - tesla_ears_swoop_long - name = "Tesla Rejuvenation Suit Swoop Long" - icon_state = "hair_longswoop" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_swoop_long + name = "Tesla Rejuvenation Suit Swoop Long" + icon_state = "hair_longswoop" + length = 3 + chatname = "styled mane" - tesla_ears_swoop_long_alt - name = "Tesla Rejuvenation Suit Swoop Long Alt" - icon_state = "hair_longswoop_alt" - length = 3 - chatname = "styled mane" +/datum/sprite_accessory/hair/tesla_ears/tesla_ears_swoop_long_alt + name = "Tesla Rejuvenation Suit Swoop Long Alt" + icon_state = "hair_longswoop_alt" + length = 3 + chatname = "styled mane" //vaurca antennae - vaurca_classic - icon = 'icons/mob/human_face/vaurca_hair.dmi' - name = "Classic Antennae" - icon_state = "vaurca_classic" - species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) - gender = NEUTER - chatname = "antennae" +/datum/sprite_accessory/hair/vaurca_classic + icon = 'icons/mob/human_face/vaurca_hair.dmi' + name = "Classic Antennae" + icon_state = "vaurca_classic" + species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) + gender = NEUTER + chatname = "antennae" - vaurca_braided - name = "Braided Antennae" - icon_state = "vaurca_braided" - chatname = "antennae" - length = 3 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_braided + name = "Braided Antennae" + icon_state = "vaurca_braided" + chatname = "antennae" + length = 3 - vaurca_catfish - name = "Catfish Antennae" - icon_state = "vaurca_catfish" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_catfish + name = "Catfish Antennae" + icon_state = "vaurca_catfish" + chatname = "antennae" + length = 2 - vaurca_dipole - name = "Dipole Antennae" - icon_state = "vaurca_dipole" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_dipole + name = "Dipole Antennae" + icon_state = "vaurca_dipole" + chatname = "antennae" + length = 2 - vaurca_droop - name = "Droopy Antennae" - icon_state = "vaurca_droop" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_droop + name = "Droopy Antennae" + icon_state = "vaurca_droop" + chatname = "antennae" + length = 2 - vaurca_fla - name = "Floor Length Antennae" - icon_state = "vaurca_fla" - chatname = "long antennae" - length = 4 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_fla + name = "Floor Length Antennae" + icon_state = "vaurca_fla" + chatname = "long antennae" + length = 4 - vaurca_formic - name = "Formic Antennae" - icon_state = "vaurca_formic" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_formic + name = "Formic Antennae" + icon_state = "vaurca_formic" + chatname = "antennae" + length = 2 - vaurca_damaged_left - name = "Injured Antenna, Left" - icon_state = "vaurca_inj_left" - chatname = "antenna" - length = 1 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_damaged_left + name = "Injured Antenna, Left" + icon_state = "vaurca_inj_left" + chatname = "antenna" + length = 1 - vaurca_damaged_right - name = "Injured Antenna, Right" - icon_state = "vaurca_inj_right" - chatname = "antenna" - length = 1 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_damaged_right + name = "Injured Antenna, Right" + icon_state = "vaurca_inj_right" + chatname = "antenna" + length = 1 - vaurca_knight - name = "Knight Antennae" - icon_state = "vaurca_knight" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_knight + name = "Knight Antennae" + icon_state = "vaurca_knight" + chatname = "antennae" + length = 2 - vaurca_mid - name = "Mid Length Antennae" - icon_state = "vaurca_mid" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_mid + name = "Mid Length Antennae" + icon_state = "vaurca_mid" + chatname = "antennae" + length = 2 - vaurca_parabolic - name = "Parabolic Antennae" - icon_state = "vaurca_parabolic" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_parabolic + name = "Parabolic Antennae" + icon_state = "vaurca_parabolic" + chatname = "antennae" + length = 2 - vaurca_zappy - name = "Zappy Antennae" - icon_state = "vaurca_zappy" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/vaurca_classic/vaurca_zappy + name = "Zappy Antennae" + icon_state = "vaurca_zappy" + chatname = "antennae" + length = 2 //Bulwark antennae - bulwark_classic - icon = 'icons/mob/human_face/bulwark_hair.dmi' - name = "Bulwark Classic Antennae" - icon_state = "bully_classic" - species_allowed = list(/datum/species/bug/type_e) - gender = NEUTER - chatname = "antennae" +/datum/sprite_accessory/hair/bulwark_classic + icon = 'icons/mob/human_face/bulwark_hair.dmi' + name = "Bulwark Classic Antennae" + icon_state = "bully_classic" + species_allowed = list(/datum/species/bug/type_e) + gender = NEUTER + chatname = "antennae" - bulwark_damaged_left - name = "Bulwark Injured Antenna, Left" - icon_state = "bully_inj_left" - chatname = "antenna" - length = 1 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_damaged_left + name = "Bulwark Injured Antenna, Left" + icon_state = "bully_inj_left" + chatname = "antenna" + length = 1 - bulwark_damaged_right - name = "Bulwark Injured Antenna, Right" - icon_state = "bully_inj_right" - chatname = "antenna" - length = 1 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_damaged_right + name = "Bulwark Injured Antenna, Right" + icon_state = "bully_inj_right" + chatname = "antenna" + length = 1 - bulwark_knight - name = "Bulwark Knight Antennae" - icon_state = "bully_knight" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_knight + name = "Bulwark Knight Antennae" + icon_state = "bully_knight" + chatname = "antennae" + length = 2 - bulwark_pointy - name = "Pointy Antennae" - icon_state = "bully_pointy" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_pointy + name = "Pointy Antennae" + icon_state = "bully_pointy" + chatname = "antennae" + length = 2 - bulwark_original - name = "Original Antennae" - icon_state = "bully_original" - chatname = "antennae" - length = 2 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_original + name = "Original Antennae" + icon_state = "bully_original" + chatname = "antennae" + length = 2 - bulwark_islero - name = "Islero Antennae" - icon_state = "bully_islero" - chatname = "antennae" - length = 3 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_islero + name = "Islero Antennae" + icon_state = "bully_islero" + chatname = "antennae" + length = 3 - bulwark_tall - name = "Tall Antennae" - icon_state = "bully_tall" - chatname = "antennae" - length = 4 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_tall + name = "Tall Antennae" + icon_state = "bully_tall" + chatname = "antennae" + length = 4 - bulwark_stag - name = "Stag Antennae" - icon_state = "bully_stag" - chatname = "antennae" - length = 5 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_stag + name = "Stag Antennae" + icon_state = "bully_stag" + chatname = "antennae" + length = 5 - bulwark_rhino - name = "Rhinoceros Antenna" - icon_state = "bully_rhino" - chatname = "antenna" - length = 5 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_rhino + name = "Rhinoceros Antenna" + icon_state = "bully_rhino" + chatname = "antenna" + length = 5 - bulwark_ladybug - name = "Ladybug Antennae" - icon_state = "bully_ladybug" - chatname = "antennae" - length = 6 +/datum/sprite_accessory/hair/bulwark_classic/bulwark_ladybug + name = "Ladybug Antennae" + icon_state = "bully_ladybug" + chatname = "antennae" + length = 6 //Breeder antennae - breeder_standard - icon = 'icons/mob/human_face/breeder_hair.dmi' - name = "Breeder Standard Antennae" - icon_state = "breeder_standard" - species_allowed = list(/datum/species/bug/type_c) - gender = NEUTER - chatname = "antennae" - length = 3 +/datum/sprite_accessory/hair/breeder_standard + icon = 'icons/mob/human_face/breeder_hair.dmi' + name = "Breeder Standard Antennae" + icon_state = "breeder_standard" + species_allowed = list(/datum/species/bug/type_c) + gender = NEUTER + chatname = "antennae" + length = 3 - breeder_quad - name = "Breeder Quad Antennae" - icon_state = "breeder_quad" - length = 3 +/datum/sprite_accessory/hair/breeder_standard/breeder_quad + name = "Breeder Quad Antennae" + icon_state = "breeder_quad" + length = 3 - breeder_crownedcrest - name = "Breeder Crowned Crest" - icon_state = "breeder_crownedcrest" - length = 1 +/datum/sprite_accessory/hair/breeder_standard/breeder_crownedcrest + name = "Breeder Crowned Crest" + icon_state = "breeder_crownedcrest" + length = 1 - breeder_hammerhead - name = "Breeder Hammerhead" - icon_state = "breeder_hammerhead" - length = 1 +/datum/sprite_accessory/hair/breeder_standard/breeder_hammerhead + name = "Breeder Hammerhead" + icon_state = "breeder_hammerhead" + length = 1 - breeder_princess - name = "Breeder Princess Antennae" - icon_state = "breeder_princess" - length = 2 +/datum/sprite_accessory/hair/breeder_standard/breeder_princess + name = "Breeder Princess Antennae" + icon_state = "breeder_princess" + length = 2 -/datum/sprite_accessory/facial_hair - taj_goatee - icon = 'icons/mob/human_face/tajara_facial_hair.dmi' - name = "Tajara Goatee" - icon_state = "facial_goatee" - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/facial_hair/taj_goatee + icon = 'icons/mob/human_face/tajara_facial_hair.dmi' + name = "Tajara Goatee" + icon_state = "facial_goatee" + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_goatee_faded - name = "Tajara Goatee Faded" - icon_state = "facial_goatee_faded" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_goatee_faded + name = "Tajara Goatee Faded" + icon_state = "facial_goatee_faded" - taj_moustache - name = "Tajara Moustache" - icon_state = "facial_moustache" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_moustache + name = "Tajara Moustache" + icon_state = "facial_moustache" - taj_mutton - name = "Tajara Mutton" - icon_state = "facial_mutton" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_mutton + name = "Tajara Mutton" + icon_state = "facial_mutton" - taj_pencilstache - name = "Tajara Pencilstache" - icon_state = "facial_pencilstache" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_pencilstache + name = "Tajara Pencilstache" + icon_state = "facial_pencilstache" - taj_sideburns - name = "Tajara Sideburns" - icon_state = "facial_sideburns" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_sideburns + name = "Tajara Sideburns" + icon_state = "facial_sideburns" - taj_smallstache - name = "Tajara Smallsatche" - icon_state = "facial_smallstache" +/datum/sprite_accessory/facial_hair/taj_goatee/taj_smallstache + name = "Tajara Smallsatche" + icon_state = "facial_smallstache" -/datum/sprite_accessory/facial_hair - tesla_body_goatee - icon = 'icons/mob/human_face/tesla_body_facial_hair.dmi' - name = "Tesla Rejuvenation Suit Goatee" - icon_state = "facial_goatee" - species_allowed = list(/datum/species/tajaran/tesla_body) - tesla_body_goatee_faded - name = "Tesla Rejuvenation Suit Goatee Faded" - icon_state = "facial_goatee_faded" +/datum/sprite_accessory/facial_hair/tesla_body_goatee + icon = 'icons/mob/human_face/tesla_body_facial_hair.dmi' + name = "Tesla Rejuvenation Suit Goatee" + icon_state = "facial_goatee" + species_allowed = list(/datum/species/tajaran/tesla_body) - tesla_body_moustache - name = "Tesla Rejuvenation Suit Moustache" - icon_state = "facial_moustache" +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_goatee_faded + name = "Tesla Rejuvenation Suit Goatee Faded" + icon_state = "facial_goatee_faded" - tesla_body_mutton - name = "Tesla Rejuvenation Suit Mutton" - icon_state = "facial_mutton" +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_moustache + name = "Tesla Rejuvenation Suit Moustache" + icon_state = "facial_moustache" - tesla_body_pencilstache - name = "Tesla Rejuvenation Suit Pencilstache" - icon_state = "facial_pencilstache" +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_mutton + name = "Tesla Rejuvenation Suit Mutton" + icon_state = "facial_mutton" - tesla_body_sideburns - name = "Tesla Rejuvenation Suit Sideburns" - icon_state = "facial_sideburns" +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_pencilstache + name = "Tesla Rejuvenation Suit Pencilstache" + icon_state = "facial_pencilstache" - tesla_body_smallstache - name = "Tesla Rejuvenation Suit Smallsatche" - icon_state = "facial_smallstache" +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_sideburns + name = "Tesla Rejuvenation Suit Sideburns" + icon_state = "facial_sideburns" + +/datum/sprite_accessory/facial_hair/tesla_body_goatee/tesla_body_smallstache + name = "Tesla Rejuvenation Suit Smallsatche" + icon_state = "facial_smallstache" //unathi horn beards and the like - una_aquaticfrill - icon = 'icons/mob/human_face/unathi_hair.dmi' - name = "Unathi Aquatic Frills" - icon_state = "facial_aquaticfrills" - species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) - gender = NEUTER +/datum/sprite_accessory/facial_hair/una_aquaticfrill + icon = 'icons/mob/human_face/unathi_hair.dmi' + name = "Unathi Aquatic Frills" + icon_state = "facial_aquaticfrills" + species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) + gender = NEUTER - una_bighorns - name = "Unathi Big Horns" - icon_state = "facial_bighorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_bighorns + name = "Unathi Big Horns" + icon_state = "facial_bighorn" - una_bob - name = "Bob" - icon_state = "facial_bob" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_bob + name = "Bob" + icon_state = "facial_bob" - una_bobcurl - name = "Bobcurl" - icon_state = "facial_bobcurl" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_bobcurl + name = "Bobcurl" + icon_state = "facial_bobcurl" - una_buzzcut - name = "Buzzcut" - icon_state = "facial_buzzcut" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_buzzcut + name = "Buzzcut" + icon_state = "facial_buzzcut" - una_buzzcut2 - name = "Buzzcut 2" - icon_state = "facial_buzzcut2" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_buzzcut2 + name = "Buzzcut 2" + icon_state = "facial_buzzcut2" - una_chinhorn - name = "Unathi Chin Horn" - icon_state = "facial_chinhorns" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_chinhorn + name = "Unathi Chin Horn" + icon_state = "facial_chinhorns" - una_curlhorn - name = "Unathi Curled Horns" - icon_state = "facial_curledhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_curlhorn + name = "Unathi Curled Horns" + icon_state = "facial_curledhorn" - una_dorsalfrill - name = "Unathi Dorsal Frill" - icon_state = "facial_dorsalfrill" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_dorsalfrill + name = "Unathi Dorsal Frill" + icon_state = "facial_dorsalfrill" - una_dracfrills - name = "Unathi Draconic Frills" - icon_state = "facial_dracfrills" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_dracfrills + name = "Unathi Draconic Frills" + icon_state = "facial_dracfrills" - una_drachorn - name = "Unathi Draconic Horns" - icon_state = "facial_drachorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_drachorn + name = "Unathi Draconic Horns" + icon_state = "facial_drachorn" - una_hornadorns - name = "Unathi Horn Adorns" - icon_state = "facial_hornadorns" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_hornadorns + name = "Unathi Horn Adorns" + icon_state = "facial_hornadorns" - una_longdorsal - name = "Unathi Long Dorsal Frill" - icon_state = "facial_longdorsal" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_longdorsal + name = "Unathi Long Dorsal Frill" + icon_state = "facial_longdorsal" - una_longfrill - name = "Unathi Long Frills" - icon_state = "facial_longfrills" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_longfrill + name = "Unathi Long Frills" + icon_state = "facial_longfrills" - una_longfrill2 - name = "Unathi Long Frills 2" - icon_state = "facial_longfrills2" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_longfrill2 + name = "Unathi Long Frills 2" + icon_state = "facial_longfrills2" - una_longspines - name = "Unathi Long Spines" - icon_state = "facial_longspines" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_longspines + name = "Unathi Long Spines" + icon_state = "facial_longspines" - una_lowerhorn - name = "Unathi Lower Horns" - icon_state = "facial_lowerhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_lowerhorn + name = "Unathi Lower Horns" + icon_state = "facial_lowerhorn" - una_mohawk - name = "Unathi Mohawk" - icon_state = "facial_mohawk" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_mohawk + name = "Unathi Mohawk" + icon_state = "facial_mohawk" - una_ramhornshort - name = "Unathi Short Ram Horns" - icon_state = "facial_ramhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_ramhornshort + name = "Unathi Short Ram Horns" + icon_state = "facial_ramhorn" - una_ramhornlong - name = "Unathi Long Ram Horns" - icon_state = "facial_ramhorn2" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_ramhornlong + name = "Unathi Long Ram Horns" + icon_state = "facial_ramhorn2" - una_shortfrill - name = "Unathi Short Frills" - icon_state = "facial_shortfrills" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shortfrill + name = "Unathi Short Frills" + icon_state = "facial_shortfrills" - una_shortfrill2 - name = "Unathi Short Frills 2" - icon_state = "facial_shortfrills2" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shortfrill2 + name = "Unathi Short Frills 2" + icon_state = "facial_shortfrills2" - una_shorthorn - name = "Unathi Short Horns" - icon_state = "facial_shorthorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shorthorn + name = "Unathi Short Horns" + icon_state = "facial_shorthorn" - una_shortspines - name = "Unathi Short Spines" - icon_state = "facial_shortspines" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shortspines + name = "Unathi Short Spines" + icon_state = "facial_shortspines" - una_sidefrills - name = "Unathi Side Frills" - icon_state = "facial_sidefrills" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_sidefrills + name = "Unathi Side Frills" + icon_state = "facial_sidefrills" - una_spiky - name = "Spiky" - icon_state = "facial_spiky" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_spiky + name = "Spiky" + icon_state = "facial_spiky" - una_horns - name = "Unathi Horns" - icon_state = "facial_simplehorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_horns + name = "Unathi Horns" + icon_state = "facial_simplehorn" - una_smallhorns - name = "Unathi Small Horns" - icon_state = "facial_smallhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_smallhorns + name = "Unathi Small Horns" + icon_state = "facial_smallhorn" - una_spikehorn - name = "Unathi Spike Horns" - icon_state = "facial_spikehorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_spikehorn + name = "Unathi Spike Horns" + icon_state = "facial_spikehorn" - una_swepthorns - name = "Unathi Swept-Forward Horns" - icon_state = "facial_swepthorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_swepthorns + name = "Unathi Swept-Forward Horns" + icon_state = "facial_swepthorn" - una_swepthorns2 - name = "Unathi Swept-Forward Horns 2" - icon_state = "facial_swepthorn2" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_swepthorns2 + name = "Unathi Swept-Forward Horns 2" + icon_state = "facial_swepthorn2" - una_demonforward - name = "Unathi Forward Demon Horns" - icon_state = "facial_demonforward" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_demonforward + name = "Unathi Forward Demon Horns" + icon_state = "facial_demonforward" - una_bullhorns - name = "Unathi Bull Horns" - icon_state = "facial_bullhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_bullhorns + name = "Unathi Bull Horns" + icon_state = "facial_bullhorn" - una_longhorns - name = "Unathi Long Bull Horns" - icon_state = "facial_longhorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_longhorns + name = "Unathi Long Bull Horns" + icon_state = "facial_longhorn" - una_faun - name = "Unathi Faun Horns" - icon_state = "facial_faun" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_faun + name = "Unathi Faun Horns" + icon_state = "facial_faun" - una_double - name = "Unathi Double Horns" - icon_state = "facial_dubhorns" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_double + name = "Unathi Double Horns" + icon_state = "facial_dubhorns" - una_hood - name = "Unathi Cobra Hood" - icon_state = "facial_hood" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_hood + name = "Unathi Cobra Hood" + icon_state = "facial_hood" - una_skewers - name = "Unathi Super Long Horns" - icon_state = "facial_skewers" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_skewers + name = "Unathi Super Long Horns" + icon_state = "facial_skewers" - una_chameleon - name = "Unathi Chameleon Horns" - icon_state = "facial_chameleon" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_chameleon + name = "Unathi Chameleon Horns" + icon_state = "facial_chameleon" - una_dilocrest - name = "Unathi Dilo Crest" - icon_state = "dilocrest" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_dilocrest + name = "Unathi Dilo Crest" + icon_state = "dilocrest" - una_monocrest - name = "Unathi Mono Crest" - icon_state = "monocrest" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_monocrest + name = "Unathi Mono Crest" + icon_state = "monocrest" - una_cryocrest - name = "Unathi Cryo Crest" - icon_state = "cryocrest" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_cryocrest + name = "Unathi Cryo Crest" + icon_state = "cryocrest" - una_corycrest - name = "Unathi Cory Crest" - icon_state = "corycrest" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_corycrest + name = "Unathi Cory Crest" + icon_state = "corycrest" - una_albertahorns - name = "Unathi Alberta Horns" - icon_state = "albertahorns" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_albertahorns + name = "Unathi Alberta Horns" + icon_state = "albertahorns" - una_styrahorn - name = "Unathi Styra Horn" - icon_state = "styrahorn" - una_styracrest - name = "Unathi Styra Frill" - icon_state = "styrafrill" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_styrahorn + name = "Unathi Styra Horn" + icon_state = "styrahorn" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_styracrest + name = "Unathi Styra Frill" + icon_state = "styrafrill" - una_pachyboss - name = "Unathi Pachy Boss" - icon_state = "pachylump" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_pachyboss + name = "Unathi Pachy Boss" + icon_state = "pachylump" - una_droopy - name = "Unathi Droopy Dorsal Frill" - icon_state = "unathi_droopydorsal" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_droopy + name = "Unathi Droopy Dorsal Frill" + icon_state = "unathi_droopydorsal" - una_regal - name = "Unathi Regal Frills" - icon_state = "unathi_regalfrills" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_regal + name = "Unathi Regal Frills" + icon_state = "unathi_regalfrills" - una_hornsbusted - name = "Unathi Horns-Busted" - icon_state = "unathi_simplehornbusted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_hornsbusted + name = "Unathi Horns-Busted" + icon_state = "unathi_simplehornbusted" - una_ramhornshortbusted - name = "Unathi Short Ram Horns-Busted" - icon_state = "unathi_ramhornbusted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_ramhornshortbusted + name = "Unathi Short Ram Horns-Busted" + icon_state = "unathi_ramhornbusted" - una_shorthornbusted - name = "Unathi Short Horns-Busted" - icon_state = "unathi_shorthornbusted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shorthornbusted + name = "Unathi Short Horns-Busted" + icon_state = "unathi_shorthornbusted" - una_drachornbusted - name = "Unathi Draconic Horns-Busted" - icon_state = "unathi_drachornbusted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_drachornbusted + name = "Unathi Draconic Horns-Busted" + icon_state = "unathi_drachornbusted" - una_shortfrill2busted - name = "Unathi Short Frills 2-Busted" - icon_state = "unathi_shortfrills2busted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_shortfrill2busted + name = "Unathi Short Frills 2-Busted" + icon_state = "unathi_shortfrills2busted" - una_styrahornbusted - name = "Unathi Styra Horn-Busted" - icon_state = "styrahornbusted" +/datum/sprite_accessory/facial_hair/una_aquaticfrill/una_styrahornbusted + name = "Unathi Styra Horn-Busted" + icon_state = "styrahornbusted" //ipc screens - ipc_screen_blank - icon = 'icons/mob/human_face/ipc_screens.dmi' - name = "blank IPC screen" - icon_state = "ipc_blank" - species_allowed = list(/datum/species/machine) - gender = NEUTER +/datum/sprite_accessory/facial_hair/ipc_screen_blank + icon = 'icons/mob/human_face/ipc_screens.dmi' + name = "blank IPC screen" + icon_state = "ipc_blank" + species_allowed = list(/datum/species/machine) + gender = NEUTER - ipc_screen_blue - name = "blue IPC screen" - icon_state = "ipc_blue" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_blue + name = "blue IPC screen" + icon_state = "ipc_blue" - ipc_screen_breakout - name = "breakout IPC screen" - icon_state = "ipc_breakout" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_breakout + name = "breakout IPC screen" + icon_state = "ipc_breakout" - ipc_screen_cancel - name = "cancel IPC screen" - icon_state = "ipc_cancel" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_cancel + name = "cancel IPC screen" + icon_state = "ipc_cancel" - ipc_screen_console - name = "console IPC screen" - icon_state = "ipc_console" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_console + name = "console IPC screen" + icon_state = "ipc_console" - ipc_screen_database - name = "database IPC screen" - icon_state = "ipc_database" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_database + name = "database IPC screen" + icon_state = "ipc_database" - ipc_screen_eight - name = "eight IPC screen" - icon_state = "ipc_eight" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_eight + name = "eight IPC screen" + icon_state = "ipc_eight" - ipc_screen_eye - name = "eye IPC screen" - icon_state = "ipc_eye" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_eye + name = "eye IPC screen" + icon_state = "ipc_eye" - ipc_screen_goggles - name = "goggles IPC screen" - icon_state = "ipc_goggles" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_goggles + name = "goggles IPC screen" + icon_state = "ipc_goggles" - ipc_screen_gol_glider - name = "GoL glider IPC screen" - icon_state = "ipc_gol_glider" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_gol_glider + name = "GoL glider IPC screen" + icon_state = "ipc_gol_glider" - ipc_screen_green - name = "green IPC screen" - icon_state = "ipc_green" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_green + name = "green IPC screen" + icon_state = "ipc_green" - ipc_screen_heart - name = "heart IPC screen" - icon_state = "ipc_heart" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_heart + name = "heart IPC screen" + icon_state = "ipc_heart" - ipc_screen_heartrate - name = "heartrate IPC screen" - icon_state = "ipc_heartrate" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_heartrate + name = "heartrate IPC screen" + icon_state = "ipc_heartrate" - ipc_screen_lumi_eyes - name = "lumi eyes IPC screen" - icon_state = "ipc_lumi_eyes" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_lumi_eyes + name = "lumi eyes IPC screen" + icon_state = "ipc_lumi_eyes" - ipc_screen_monoeye - name = "monoeye IPC screen" - icon_state = "ipc_monoeye" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_monoeye + name = "monoeye IPC screen" + icon_state = "ipc_monoeye" - ipc_scren_music - name = "music IPC screen" - icon_state = "ipc_music" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_scren_music + name = "music IPC screen" + icon_state = "ipc_music" - ipc_screen_nature - name = "nature IPC screen" - icon_state = "ipc_nature" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_nature + name = "nature IPC screen" + icon_state = "ipc_nature" - ipc_screen_orange - name = "orange IPC screen" - icon_state = "ipc_orange" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_orange + name = "orange IPC screen" + icon_state = "ipc_orange" - ipc_screen_pink - name = "pink IPC screen" - icon_state = "ipc_pink" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_pink + name = "pink IPC screen" + icon_state = "ipc_pink" - ipc_screen_purple - name = "purple IPC screen" - icon_state = "ipc_purple" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_purple + name = "purple IPC screen" + icon_state = "ipc_purple" - ipc_screen_rainbow - name = "rainbow IPC screen" - icon_state = "ipc_rainbow" - - ipc_screen_red - name = "red IPC screen" - icon_state = "ipc_red" - - ipc_screen_rgb - name = "RGB IPC screen" - icon_state = "ipc_rgb" - - ipc_screen_scroll - name = "scroll IPC screen" - icon_state = "ipc_scroll" - - ipc_screen_shower - name = "shower IPC screen" - icon_state = "ipc_shower" - - ipc_screen_smiley - name = "smiley IPC screen" - icon_state = "ipc_smiley" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_rainbow + name = "rainbow IPC screen" + icon_state = "ipc_rainbow" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_red + name = "red IPC screen" + icon_state = "ipc_red" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_rgb + name = "RGB IPC screen" + icon_state = "ipc_rgb" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_scroll + name = "scroll IPC screen" + icon_state = "ipc_scroll" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_shower + name = "shower IPC screen" + icon_state = "ipc_shower" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_smiley + name = "smiley IPC screen" + icon_state = "ipc_smiley" - ipc_screen_static - name = "static IPC screen" - icon_state = "ipc_static" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_static + name = "static IPC screen" + icon_state = "ipc_static" - ipc_screen_static2 - name = "static2 IPC screen" - icon_state = "ipc_static2" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_static2 + name = "static2 IPC screen" + icon_state = "ipc_static2" - ipc_screen_static3 - name = "static3 IPC screen" - icon_state = "ipc_static3" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_static3 + name = "static3 IPC screen" + icon_state = "ipc_static3" - ipc_screen_testcard - name = "testcard IPC screen" - icon_state = "ipc_testcard" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_testcard + name = "testcard IPC screen" + icon_state = "ipc_testcard" - ipc_screen_waiting - name = "waiting IPC screen" - icon_state = "ipc_waiting" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_waiting + name = "waiting IPC screen" + icon_state = "ipc_waiting" - ipc_screen_yellow - name = "yellow IPC screen" - icon_state = "ipc_yellow" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_yellow + name = "yellow IPC screen" + icon_state = "ipc_yellow" - ipc_screen_nanotrasen - name = "nanotrasen IPC screen" - icon_state = "ipc_nt" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_nanotrasen + name = "nanotrasen IPC screen" + icon_state = "ipc_nt" - ipc_screen_hephaestus - name = "hephaestus IPC screen" - icon_state = "ipc_heph" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_hephaestus + name = "hephaestus IPC screen" + icon_state = "ipc_heph" - ipc_screen_idris - name = "idris IPC screen" - icon_state = "ipc_idris" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_idris + name = "idris IPC screen" + icon_state = "ipc_idris" - ipc_screen_zavodskoi - name = "zavodskoi IPC screen" - icon_state = "ipc_zavod" - - ipc_screen_zenghu - name = "zeng-hu IPC screen" - icon_state = "ipc_zenghu" - - ipc_screen_scc - name = "scc IPC screen" - icon_state = "ipc_scc" - - ipc_screen_biesel - name = "republic of biesel IPC screen" - icon_state = "ipc_biesel" - - ipc_screen_sol - name = "sol alliance IPC screen" - icon_state = "ipc_sol" - - ipc_screen_coalition - name = "coalition of colonies IPC screen" - icon_state = "ipc_coc" - - ipc_screen_elyra - name = "republic of elyra IPC screen" - icon_state = "ipc_elyra" - - ipc_screen_eridani - name = "eridani IPC screen" - icon_state = "ipc_eridani" - - ipc_screen_burzsia - name = "burzsia IPC screen" - icon_state = "ipc_burzsia" - - ipc_screen_tp - name = "trinary perfection IPC screen" - icon_state = "ipc_tp" - - diona_eye - icon = 'icons/mob/human_face/dionae_hair.dmi' - name = "Mono Eye" - icon_state = "monoeye" - species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) - gender = NEUTER - do_colouration = FALSE - - trioptics - name = "Trioptics" - icon_state = "trioptics" - - lopsided - name = "Lopsided Eyes" - icon_state = "lopsided" - - helmethead - name = "Helmethead" - icon_state = "helmethead" - - eyestalk - name = "Eyestalk" - icon_state = "eyestalk" - - treebeard - name = "Treebeard" - icon_state = "treebeard" - - bug_eyes - name = "Bug Eyes" - icon_state = "bugeyes" - - human_eyes - name = "Human Eyes" - icon_state = "humaneyes" - - skrell_eyes - name = "Skrell Eyes" - icon_state = "skrelleyes" - - skrell_eyes_2 - name = "Skrell Eyes 2" - icon_state = "skrelleyes2" - - tiny_eye - name = "Tiny Eye" - icon_state = "tinyeye" - - eyebrow - name = "Eyebrow" - icon_state = "eyebrow" - - blinkinghelmethead - name = "Blinking Helmethead" - icon_state = "blinkinghelmethead" - - periscope - name = "Periscope" - icon_state = "periscope" - - glorp - name = "Glorp" - icon_state = "glorp" - - tuux_whiskers - icon = 'icons/mob/human_face/skrell_beards.dmi' - name = "Tuux Tentacle Whiskers" - icon_state = "Tuux_Whiskers" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) - gender = NEUTER - - tuux_whiskers_chin - icon = 'icons/mob/human_face/skrell_beards.dmi' - name = "Tuux Tentacle Whiskers w/Chin" - icon_state = "Tuux_Whiskers_Chin" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) - gender = NEUTER - - tuux_patch - icon = 'icons/mob/human_face/skrell_beards.dmi' - name = "Tuux Chin Patch" - icon_state = "Tuux_Patch" - species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) - gender = NEUTER - - tuux_goatee - name = "Tuux Goatee" - icon_state = "Tuux_Goatee" - - tuux_tri_point - name = "Tuux Tri-Point" - icon_state = "Tuux_Tri-Point" - - tuux_strap - name = "Tuux Chin Strap" - icon_state = "Tuux_Strap" - - tuux_monotail - name = "Tuux Monotail" - icon_state = "Tuux_Monotail" - - tuux_monotail_long - name = "Tuux Monotail (Long)" - icon_state = "Tuux_Monotail_Long" - - tuux_full - name = "Tuux Full Beard" - icon_state = "Tuux_Full" - - tuux_chops - name = "Tuux Chops" - icon_state = "Tuux_Chops" - - tuux_chops_big - name = "Tuux Chops (Big)" - icon_state = "Tuux_Chops_Big" - - tuux_adorns - name = "Tuux Face Adorns" - icon_state = "Tuux_Adorns" - - tuux_handlebar - name = "Tuux Handlebar" - icon_state = "Tuux_Handlebar" - - tuux_fumanchu - name = "Tuux FuManChu" - icon_state = "Tuux_FuManChu" - - tuux_overeye_left - name = "Tuux Overeye (Left)" - icon_state = "Tuux_Overeye_Left" - - tuux_overeye_right - name = "Tuux Overeye (Right)" - icon_state = "Tuux_Overeye_Right" - - tuux_mustache - name = "Tuux Stache" - icon_state = "Tuux_Mustache" - - tuux_overgrown - name = "Tuux Overgrown" - icon_state = "Tuux_Overgrown" - - tuux_braided - name = "Tuux Braided" - icon_state = "Tuux_Braided" - - tuux_braided_long - name = "Tuux Braided (Long)" - icon_state = "Tuux_Braided_Long" - - tuux_braided_double - name = "Tuux Braided (Double)" - icon_state = "Tuux_Braided_Double" +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_zavodskoi + name = "zavodskoi IPC screen" + icon_state = "ipc_zavod" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_zenghu + name = "zeng-hu IPC screen" + icon_state = "ipc_zenghu" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_scc + name = "scc IPC screen" + icon_state = "ipc_scc" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_biesel + name = "republic of biesel IPC screen" + icon_state = "ipc_biesel" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_sol + name = "sol alliance IPC screen" + icon_state = "ipc_sol" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_coalition + name = "coalition of colonies IPC screen" + icon_state = "ipc_coc" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_elyra + name = "republic of elyra IPC screen" + icon_state = "ipc_elyra" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_eridani + name = "eridani IPC screen" + icon_state = "ipc_eridani" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_burzsia + name = "burzsia IPC screen" + icon_state = "ipc_burzsia" + +/datum/sprite_accessory/facial_hair/ipc_screen_blank/ipc_screen_tp + name = "trinary perfection IPC screen" + icon_state = "ipc_tp" + +/datum/sprite_accessory/facial_hair/diona_eye + icon = 'icons/mob/human_face/dionae_hair.dmi' + name = "Mono Eye" + icon_state = "monoeye" + species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) + gender = NEUTER + do_colouration = FALSE + +/datum/sprite_accessory/facial_hair/diona_eye/trioptics + name = "Trioptics" + icon_state = "trioptics" + +/datum/sprite_accessory/facial_hair/diona_eye/lopsided + name = "Lopsided Eyes" + icon_state = "lopsided" + +/datum/sprite_accessory/facial_hair/diona_eye/helmethead + name = "Helmethead" + icon_state = "helmethead" + +/datum/sprite_accessory/facial_hair/diona_eye/eyestalk + name = "Eyestalk" + icon_state = "eyestalk" + +/datum/sprite_accessory/facial_hair/diona_eye/treebeard + name = "Treebeard" + icon_state = "treebeard" + +/datum/sprite_accessory/facial_hair/diona_eye/bug_eyes + name = "Bug Eyes" + icon_state = "bugeyes" + +/datum/sprite_accessory/facial_hair/diona_eye/human_eyes + name = "Human Eyes" + icon_state = "humaneyes" + +/datum/sprite_accessory/facial_hair/diona_eye/skrell_eyes + name = "Skrell Eyes" + icon_state = "skrelleyes" + +/datum/sprite_accessory/facial_hair/diona_eye/skrell_eyes_2 + name = "Skrell Eyes 2" + icon_state = "skrelleyes2" + +/datum/sprite_accessory/facial_hair/diona_eye/tiny_eye + name = "Tiny Eye" + icon_state = "tinyeye" + +/datum/sprite_accessory/facial_hair/diona_eye/eyebrow + name = "Eyebrow" + icon_state = "eyebrow" + +/datum/sprite_accessory/facial_hair/diona_eye/blinkinghelmethead + name = "Blinking Helmethead" + icon_state = "blinkinghelmethead" + +/datum/sprite_accessory/facial_hair/diona_eye/periscope + name = "Periscope" + icon_state = "periscope" + +/datum/sprite_accessory/facial_hair/diona_eye/glorp + name = "Glorp" + icon_state = "glorp" + +/datum/sprite_accessory/facial_hair/tuux_whiskers + icon = 'icons/mob/human_face/skrell_beards.dmi' + name = "Tuux Tentacle Whiskers" + icon_state = "Tuux_Whiskers" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/tuux_whiskers_chin + icon = 'icons/mob/human_face/skrell_beards.dmi' + name = "Tuux Tentacle Whiskers w/Chin" + icon_state = "Tuux_Whiskers_Chin" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/tuux_patch + icon = 'icons/mob/human_face/skrell_beards.dmi' + name = "Tuux Chin Patch" + icon_state = "Tuux_Patch" + species_allowed = list(/datum/species/skrell, /datum/species/skrell/axiori) + gender = NEUTER + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_goatee + name = "Tuux Goatee" + icon_state = "Tuux_Goatee" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_tri_point + name = "Tuux Tri-Point" + icon_state = "Tuux_Tri-Point" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_strap + name = "Tuux Chin Strap" + icon_state = "Tuux_Strap" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_monotail + name = "Tuux Monotail" + icon_state = "Tuux_Monotail" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_monotail_long + name = "Tuux Monotail (Long)" + icon_state = "Tuux_Monotail_Long" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_full + name = "Tuux Full Beard" + icon_state = "Tuux_Full" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_chops + name = "Tuux Chops" + icon_state = "Tuux_Chops" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_chops_big + name = "Tuux Chops (Big)" + icon_state = "Tuux_Chops_Big" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_adorns + name = "Tuux Face Adorns" + icon_state = "Tuux_Adorns" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_handlebar + name = "Tuux Handlebar" + icon_state = "Tuux_Handlebar" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_fumanchu + name = "Tuux FuManChu" + icon_state = "Tuux_FuManChu" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_overeye_left + name = "Tuux Overeye (Left)" + icon_state = "Tuux_Overeye_Left" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_overeye_right + name = "Tuux Overeye (Right)" + icon_state = "Tuux_Overeye_Right" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_mustache + name = "Tuux Stache" + icon_state = "Tuux_Mustache" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_overgrown + name = "Tuux Overgrown" + icon_state = "Tuux_Overgrown" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_braided + name = "Tuux Braided" + icon_state = "Tuux_Braided" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_braided_long + name = "Tuux Braided (Long)" + icon_state = "Tuux_Braided_Long" + +/datum/sprite_accessory/facial_hair/tuux_patch/tuux_braided_double + name = "Tuux Braided (Double)" + icon_state = "Tuux_Braided_Double" //Vaurca mandibles - clicky - icon = 'icons/mob/human_face/vaurca_facial_hair.dmi' - name = "Clicky Mandibles" - icon_state = "vaurca_clicky" - species_allowed = list(/datum/species/bug/type_b) - gender = NEUTER +/datum/sprite_accessory/facial_hair/clicky + icon = 'icons/mob/human_face/vaurca_facial_hair.dmi' + name = "Clicky Mandibles" + icon_state = "vaurca_clicky" + species_allowed = list(/datum/species/bug/type_b) + gender = NEUTER - clacky - name = "Clacky Mandibles" - icon_state = "vaurca_clacky" +/datum/sprite_accessory/facial_hair/clicky/clacky + name = "Clacky Mandibles" + icon_state = "vaurca_clacky" - bulldog - name = "Bulldog Mandibles" - icon_state = "vaurca_bulldog" +/datum/sprite_accessory/facial_hair/clicky/bulldog + name = "Bulldog Mandibles" + icon_state = "vaurca_bulldog" - mantis - name = "Mantis Mandibles" - icon_state = "vaurca_mantis" +/datum/sprite_accessory/facial_hair/clicky/mantis + name = "Mantis Mandibles" + icon_state = "vaurca_mantis" - stag - name = "Stag Mandibles" - icon_state = "vaurca_stag" +/datum/sprite_accessory/facial_hair/clicky/stag + name = "Stag Mandibles" + icon_state = "vaurca_stag" - ectatomma - name = "Ectatomma Mandibles" - icon_state = "vaurca_ectatomma" +/datum/sprite_accessory/facial_hair/clicky/ectatomma + name = "Ectatomma Mandibles" + icon_state = "vaurca_ectatomma" - horridus - name = "Horridus Mandibles" - icon_state = "vaurca_horridus" +/datum/sprite_accessory/facial_hair/clicky/horridus + name = "Horridus Mandibles" + icon_state = "vaurca_horridus" - tusks - name = "Tusk Mandibles" - icon_state = "vaurca_tusks" +/datum/sprite_accessory/facial_hair/clicky/tusks + name = "Tusk Mandibles" + icon_state = "vaurca_tusks" - acanthognathus - name = "Acanthognathus Mandibles" - icon_state = "vaurca_acanthognathus" +/datum/sprite_accessory/facial_hair/clicky/acanthognathus + name = "Acanthognathus Mandibles" + icon_state = "vaurca_acanthognathus" - myrmoteras - name = "Myrmoteras Mandibles" - icon_state = "vaurca_myrmoteras" +/datum/sprite_accessory/facial_hair/clicky/myrmoteras + name = "Myrmoteras Mandibles" + icon_state = "vaurca_myrmoteras" /* //////////////////////////// @@ -4427,1987 +4426,1987 @@ Follow by example and make good judgement based on length which list to include var/robotize_type_required // if set, this marking will only apply when put on a valid robolimb type - bandage_head - name = "Bandage, head 1" - icon_state = "bandage1" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - head_2 - name = "Bandage, head 2" - icon_state= "bandage2" - - head_3 - name = "Bandage, head 3" - icon_state= "bandage3" - - bandage_chest - name = "Bandage, chest 1" - icon_state = "bandage1" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - chest_2 - name= "Bandage, chest 2" - icon_state = "bandage2" - - chest_3 - name= "Bandage, chest 3" - icon_state = "bandage3" - - bandage_groin - name = "Bandage, groin 1" - icon_state = "bandage1" - body_parts = list(BP_GROIN) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - groin_2 - name= "Bandage, groin 2" - icon_state = "bandage2" - - groin_3 - name= "Bandage, groin 3" - icon_state = "bandage3" - - bandage_l_arm - name = "Bandage, left arm 1" - icon_state = "bandage1" - body_parts = list(BP_L_ARM) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - l_arm_2 - name= "Bandage, left arm 2" - icon_state = "bandage2" - - l_arm_3 - name= "Bandage, left arm 3" - icon_state = "bandage3" - - bandage_l_hand - name = "Bandage, left hand 1" - icon_state = "bandage1" - body_parts = list(BP_L_HAND) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - l_hand_2 - name= "Bandage, left hand 2" - icon_state = "bandage2" - - l_hand_3 - name= "Bandage, left hand 3" - icon_state = "bandage3" - - bandage_r_arm - name = "Bandage, right arm 1" - icon_state = "bandage1" - body_parts = list(BP_R_ARM) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - r_arm_2 - name= "Bandage, right arm 2" - icon_state = "bandage2" - - r_arm_3 - name= "Bandage, right arm 3" - icon_state = "bandage3" - - bandage_r_hand - name = "Bandage, right hand 1" - icon_state = "bandage1" - body_parts = list(BP_R_HAND) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - r_hand_2 - name= "Bandage, right hand 2" - icon_state = "bandage2" - - r_hand_3 - name= "Bandage, right hand 3" - icon_state = "bandage3" - - bandage_l_leg - name = "Bandage, left leg 1" - icon_state = "bandage1" - body_parts = list(BP_L_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - l_leg_2 - name= "Bandage, left leg 2" - icon_state = "bandage2" - - l_leg_3 - name= "Bandage, left leg 3" - icon_state = "bandage3" - - bandage_l_foot - name = "Bandage, left foot 1" - icon_state = "bandage1" - body_parts = list(BP_L_FOOT) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - l_foot_2 - name= "Bandage, left foot 2" - icon_state = "bandage2" - - l_foot_3 - name= "Bandage, left foot 3" - icon_state = "bandage3" - - bandage_r_leg - name = "Bandage, right leg 1" - icon_state = "bandage1" - body_parts = list(BP_R_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - r_leg_2 - name= "Bandage, right leg 2" - icon_state = "bandage2" - - r_leg_3 - name= "Bandage, right leg 3" - icon_state = "bandage3" - - bandage_r_foot - name = "Bandage, right foot 1" - icon_state = "bandage1" - body_parts = list(BP_R_FOOT) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) - is_genetic = FALSE - - r_foot_2 - name= "Bandage, right foot 2" - icon_state = "bandage2" - - r_foot_3 - name= "Bandage, right foot 3" - icon_state = "bandage3" - - heterochromia - name = "Heterochromia (Right eye)" - icon_state = "heterochromia" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_scalpports - name = "Augment (Scalp Ports)" - icon_state = "aug_scalpports" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - vertex_left - name = "Augment (Scalp Port, Vertex Left)" - icon_state = "aug_vertexport_l" - - vertex_right - name = "Augment (Scalp Port, Vertex Right)" - icon_state = "aug_vertexport_r" - - occipital_left - name = "Augment (Scalp Port, Occipital Left)" - icon_state = "aug_occipitalport_l" - - occipital_right - name = "Augment (Scalp Port, Occipital Right)" - icon_state = "aug_occipitalport_r" - - aug_scalpportsdiode - name = "Augment (Scalp Ports Diode)" - icon_state = "aug_scalpportsdiode" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - vertex_left - name = "Augment (Scalp Port Diode, Vertex Left )" - icon_state = "aug_vertexportdiode_l" - - vertex_right - name = "Augment (Scalp Port Diode, Vertex Right)" - icon_state = "aug_vertexportdiode_r" - - occipital_left - name = "Augment (Scalp Port Diode, Occipital Left)" - icon_state = "aug_occipitalportdiode_l" - - occipital_right - name = "Augment (Scalp Port Diode, Occipital Right)" - icon_state = "aug_occipitalportdiode_r" - - aug_backside_left - name = "Augment (Backside Left, Head)" - icon_state = "aug_backside_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - side_diode - name = "Augment (Backside Left Diode, Head)" - icon_state = "aug_sidediode_l" - - aug_backside_right - name = "Augment (Backside Right, Head)" - icon_state = "aug_backside_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - side_diode - name = "Augment (Backside Right Diode, Head)" - icon_state = "aug_sidediode_r" - - aug_side_deunan_left - name = "Augment (Deunan, Side Left)" - icon_state = "aug_sidedeunan_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_side_deunan_right - name = "Augment (Deunan, Side Right)" - icon_state = "aug_sidedeunan_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_side_kuze_left - name = "Augment (Kuze, Side Left)" - icon_state = "aug_sidekuze_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - side_diode - name = "Augment (Kuze Diode, Side Left)" - icon_state = "aug_sidekuzediode_l" - - aug_side_kuze_right - name = "Augment (Kuze, Side Right)" - icon_state = "aug_sidekuze_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - side_diode - name = "Augment (Kuze Diode, Side Right)" - icon_state = "aug_sidekuzediode_r" - - aug_side_kinzie_left - name = "Augment (Kinzie, Side Left)" - icon_state = "aug_sidekinzie_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_side_kinzie_right - name = "Augment (Kinzie, Side Right)" - icon_state = "aug_sidekinzie_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_side_shelly_left - name = "Augment (Shelly, Side Left)" - icon_state = "aug_sideshelly_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_side_shelly_right - name = "Augment (Shelly, Side Right)" - icon_state = "aug_sideshelly_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_chestports - name = "Augment (Chest Ports)" - icon_state = "aug_chestports" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - aug_abdomenports - name = "Augment (Abdomen Ports)" - icon_state = "aug_abdomenports" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - aug_lowerjaw - name = "Augment (Lower Jaw)" - icon_state = "aug_lowerjaw" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori,/datum/species/unathi) - - aug_headcase - name = "Augment (Headcase)" - icon_state = "aug_headcase" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - aug_headcaselight - name = "Augment (Headcase, Light)" - icon_state = "aug_headcaselight" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - vaurca_augs - name = "Mecha Chest" - icon = 'icons/mob/human_races/markings_vaurca.dmi' - icon_state = "mecha_chest" - do_colouration = FALSE - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/bug, /datum/species/bug/type_b) - - mecha_abdomen - name = "Mecha Abdomen" - icon_state = "mecha_abdomen" - - mecha_spine - name = "Mecha Spine" - icon_state = "mecha_spine" - body_parts = list(BP_HEAD, BP_CHEST) - - chest_tubes - name = "Chest Tubes" - icon_state = "chest_tubes" - - chest_wires - name = "Chest Wires" - icon_state = "chest_wires" - - mecha_eye_b - name = "Mecha Eye (Blue, Right)" - icon_state = "mecha_eye_b_r" - body_parts = list(BP_HEAD) - - mecha_eye_b_l - name = "Mecha Eye (Blue, Left)" - icon_state = "mecha_eye_b_l" - - mecha_eye_r_l - name = "Mecha Eye (Red, Left)" - icon_state = "mecha_eye_r_l" - - mecha_eye_r_r - name = "Mecha Eye (Red, Right)" - icon_state = "mecha_eye_r_r" - - mecha_eye_y_l - name = "Mecha Eye (Yellow, Left)" - icon_state = "mecha_eye_y_l" - - mecha_eye_y_r - name = "Mecha Eye (Yellow, Right)" - icon_state = "mecha_eye_y_r" - - mandible - name = "Mecha Mandibles" - icon_state = "mecha_mandibles" - - hand_panel_r - name = "Hand Panel (Right)" - icon_state = "hand_panel_r" - body_parts = list(BP_R_HAND) - - hand_panel_l - name = "Hand Panel (Left)" - icon_state = "hand_panel_l" - body_parts = list(BP_L_HAND) - - bulwark_augs - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Mecha Eye L" - icon_state = "mechaeyebully_l" - do_colouration = FALSE - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/bug/type_e) - - mechaeyebully_r - name = "Mecha Eye R" - icon_state = "mechaeyebully_r" - - mechaeyeoverlaybully_l - name = "Mecha Eye Overlay L" - icon_state = "mechaeyeoverlaybully_l" - - mechaeyeoverlaybully_r - name = "Mecha Eye Overlay R" - icon_state = "mechaeyeoverlaybully_r" - - mechamandiblesbully - name = "Mecha Mandibles (Bulwark)" - icon_state = "mechamandiblesbully" - - mechamandiblesoverlaybully - name = "Mecha Mandibles Overlay" - icon_state = "mechamandiblesoverlaybully" - - visorbully - name = "Visor" - icon_state = "visorbully" - - visorbullyoverlay - name = "Visor Overlay" - icon_state = "visorbullyoverlay" - - spidereyesbully - name = "Spider Eyes" - icon_state = "spidereyesbully" - - spidereyesbullyoverlay - name = "Spider Eyes Overlay" - icon_state = "spidereyesbullyoverlay" - - mechamonoculusbully - name = "Mecha Monoculus" - icon_state = "mechamonoculusbully" - - mechamonoculusbullyoverlay - name = "Mecha Monoculus Overlay" - icon_state = "mechamonoculusbullyoverlay" - - bullybackmeter - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Back Meter (Bulwark)" - icon_state = "bullybackmeter" - do_colouration = FALSE - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/bug/type_e) - - bullybackmeteroverlay - name = "Back Meter Overlay" - icon_state = "bullybackmeteroverlay" - - mechahorn_l - name = "Mecha Horn L" - icon_state = "mechahorn_l" - - mechahorn_r - name = "Mecha Horn R" - icon_state = "mechahorn_r" - - bullybackwires - name = "Back Wires (Bulwark)" - icon_state = "bullybackwires" - - bullybacktubes - name = "Back Tubes (Bulwark)" - icon_state = "bullybacktubes" - - ventsbully - name = "Vents (Bulwark)" - icon_state = "ventsbully" - - shellpanelbully - name = "Shell Panel" - icon_state = "shellpanelbully" - - mechakneesbully_l - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Mecha Knees L" - icon_state = "mechakneesbully_l" - do_colouration = FALSE - body_parts = list(BP_L_LEG) - species_allowed = list(/datum/species/bug/type_e) - - mechakneesbully_r - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Mecha Knees R" - icon_state = "mechakneesbully_r" - do_colouration = FALSE - body_parts = list(BP_R_LEG) - species_allowed = list(/datum/species/bug/type_e) - - mechaabdomenbully - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Mecha Abdomen (Bulwark)" - icon_state = "mechaabdomenbully" - do_colouration = FALSE - body_parts = list(BP_GROIN) - species_allowed = list(/datum/species/bug/type_e) - - mechapelvisbully - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Mecha Pelvis (Bulwark)" - icon_state = "mechapelvisbully" - do_colouration = FALSE - body_parts = list(BP_GROIN) - species_allowed = list(/datum/species/bug/type_e) - - handpanelbully_l - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Panel L" - icon_state = "handpanelbully_l" - do_colouration = FALSE - body_parts = list(BP_L_HAND) - species_allowed = list(/datum/species/bug/type_e) - - handpanelbully_r - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Panel R" - icon_state = "handpanelbully_r" - do_colouration = FALSE - body_parts = list(BP_R_HAND) - species_allowed = list(/datum/species/bug/type_e) - - handpanelbully_loverlay - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Panel L Overlay" - icon_state = "handpanelbully_loverlay" - do_colouration = FALSE - body_parts = list(BP_L_HAND) - species_allowed = list(/datum/species/bug/type_e) - - handpanelbully_roverlay - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Panel R Overlay" - icon_state = "handpanelbully_roverlay" - do_colouration = FALSE - body_parts = list(BP_R_HAND) - species_allowed = list(/datum/species/bug/type_e) - - armwirebully_l - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Arm Wires L" - icon_state = "armwirebully_l" - do_colouration = FALSE - body_parts = list(BP_L_ARM) - species_allowed = list(/datum/species/bug/type_e) - - armwirebully_r - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Arm Wires R" - icon_state = "armwirebully_r" - do_colouration = FALSE - body_parts = list(BP_R_ARM) - species_allowed = list(/datum/species/bug/type_e) - - armwirebullyhand_l - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Wires L" - icon_state = "handwirebully_l" - do_colouration = FALSE - body_parts = list(BP_L_HAND) - species_allowed = list(/datum/species/bug/type_e) - - armwiresbullyhand_r - icon = 'icons/mob/human_races/markings_vaurcae.dmi' - name = "Hand Wires R" - icon_state = "handwirebully_r" - do_colouration = FALSE - body_parts = list(BP_R_HAND) - species_allowed = list(/datum/species/bug/type_e) - - backstripe - name = "Back Stripe" - icon_state = "backstripe" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - spinemarks - name = "Back Stripe Marks" - icon_state = "backstripemarks" - - bands - name = "Color Bands (All)" - icon_state = "bands" - body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_GROIN, BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - chest - name = "Color Bands (Torso)" - body_parts = list(BP_CHEST) - - groin - name = "Color Bands (Groin)" - body_parts = list(BP_GROIN) - - left_arm - name = "Color Bands (Left Arm)" - body_parts = list(BP_L_ARM) - - right_arm - name = "Color Bands (Right Arm)" - body_parts = list(BP_R_ARM) - - left_hand - name = "Color Bands (Left Hand)" - body_parts = list(BP_L_HAND) - - right_hand - name = "Color Bands (Right Hand)" - body_parts = list(BP_R_HAND) - - left_leg - name = "Color Bands (Left Leg)" - body_parts = list(BP_L_LEG) - - right_leg - name = "Color Bands (Right Leg)" - body_parts = list(BP_R_LEG) - - left_foot - name = "Color Bands (Left Foot)" - body_parts = list(BP_L_FOOT) - species_allowed = list(/datum/species/unathi) - - left_foot_human - name = "Color Bands (Left Foot)" - icon_state = "bandshuman" - body_parts = list(BP_L_FOOT) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) - - right_foot - name = "Color Bands (Right Foot)" - body_parts = list(BP_R_FOOT) - species_allowed = list(/datum/species/unathi) - - right_foot_human - name = "Color Bands (Right Foot)" - icon_state = "bandshuman" - body_parts = list(BP_R_FOOT) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) - - bandsface - name = "Color Bands (Face)" - icon_state = "bandsface" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - bandsface_human - name = "Color Bands (Face)" - icon_state = "bandshumanface" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) - - bindi - name = "Bindi" - icon_state = "bindi" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - blush - name = "Blush" - icon_state= "blush" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - cheekspot_left - name = "Cheek Spot (Left Cheek)" - icon_state = "cheekspot_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - cheekspot_right - name = "Cheek Spot (Right Cheek)" - icon_state = "cheekspot_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - cheshire_left - name = "Cheshire (Left Cheek)" - icon_state = "cheshire_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) - - cheshire_right - name = "Cheshire (Right Cheek)" - icon_state = "cheshire_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) - - crow_left - name = "Crow Mark (Left Eye)" - icon_state = "crow_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - crow_right - name = "Crow Mark (Right Eye)" - icon_state = "crow_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - ear_left - name = "Ear Cover (Left)" - icon_state = "ear_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) - - ear_right - name = "Ear Cover (Right)" - icon_state = "ear_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) - - eyestripe - name = "Eye Stripe" - icon_state = "eyestripe" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - eyecorner_left - name = "Eye Corner Left" - icon_state = "eyecorner_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - eyecorner_right - name = "Eye Corner Right" - icon_state = "eyecorner_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - eyelash_left - name = "Eyelash Left" - icon_state = "eyelash_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - eyebrows - name = "Eyebrows" - icon_state = "eyebrows" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - unibrow - name = "Unibrow" - icon_state = "unibrow" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - eyelash_right - name = "Eyelash Right" - icon_state = "eyelash_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - lips - name = "Lips" - icon_state = "lips" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) - - lipcorner_left - name = "Lip Corner Left" - icon_state = "lipcorner_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) - - lipcorner_right - name = "Lip Corner Right" - icon_state = "lipcorner_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) - - lowercheek_left - name = "Lower Cheek Left" - icon_state = "lowercheek_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) - - lowercheek_right - name = "Lower Cheek Right" - icon_state = "lowercheek_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) - - neck - name = "Neck Cover" - icon_state = "neck" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - neckthick - name = "Neck Cover (Thick)" - icon_state = "neckthick" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - nosestripe - name = "Nose Stripe" - icon_state = "nosestripe" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - nosetape - name = "Nose Tape" - icon_state = "nosetape" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/bug, /datum/species/bug/type_b) - - scar_chest - name = "Scar, Chest" - icon_state = "surgicalscar" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scar_chest_left - name = "Scar, Chest Left" - icon_state = "chestscar1" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scar_chest_right - name = "Scar, Chest Right" - icon_state = "chestscar2" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_abdomen_left - name = "Scratch, Abdomen Left" - icon_state = "scratch_abdomen_l" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_abdomen_right - name = "Scratch, Abdomen Right" - icon_state = "scratch_abdomen_r" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_abdomen_small_left - name = "Scratch, Abdomen Small Left" - icon_state = "scratch_abdomensmall_l" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_abdomen_small_right - name = "Scratch, Abdomen Small Right" - icon_state = "scratch_abdomensmall_r" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_back - name = "Scratch, Back" - icon_state = "scratch_back" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) - - scratch_chest_left - name = "Scratch, Chest (Left)" - icon_state = "scratch_chest_l" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - scratch_chest_right - name = "Scratch, Chest (Right)" - icon_state = "scratch_chest_r" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_belly - name = "Tattoo (Belly)" - icon_state = "tat_belly" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_campbell_leftarm - name = "Tattoo (Campbell, Left Arm)" - icon_state = "tat_campbell" - body_parts = list(BP_L_ARM) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_campbell_rightarm - name = "Tattoo (Campbell, Right Arm)" - icon_state = "tat_campbell" - body_parts= list(BP_R_ARM) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_campbell_leftleg - name = "Tattoo (Campbell, Left Leg)" - icon_state = "tat_campbell" - body_parts= list(BP_L_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_campbell_rightleg - name = "Tattoo (Campbell, Right Leg)" - icon_state = "tat_campbell" - body_parts= list(BP_R_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_circle_back - name = "Tattoo (Circle, Back)" - icon_state = "tat_circle" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_circle_big_back - name = "Tattoo (Big Circle, Back)" - icon_state = "tat_bigcircle" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_forrest_left - name = "Tattoo (Forrest, Left Eye)" - icon_state = "tat_forrest_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_forrest_right - name = "Tattoo (Forrest, Right Eye)" - icon_state = "tat_forrest_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_harness - name = "Tattoo (Harness, Chest)" - icon_state = "tat_harness" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_hive - name = "Tattoo (Hive, Back)" - icon_state = "tat_hive" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_heart_arm - name = "Tattoo (Heart, Left Arm)" - icon_state = "tat_lheart" - body_parts = list(BP_L_ARM) - species_allowed = list(/datum/species/human, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - right - name = "Tattoo (Heart, Right Arm)" - icon_state = "tat_rheart" - body_parts = list(BP_R_ARM) - - tat_heart_back - name = "Tattoo (Heart, Lower Back)" - icon_state = "tat_heartback" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) - - tat_hunter_left - name = "Tattoo (Hunter, Left Eye)" - icon_state = "tat_hunter_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_hunter_right - name = "Tattoo (Hunter, Right Eye)" - icon_state = "tat_hunter_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_jaeger_left - name = "Tattoo (Jaeger, Left Eye)" - icon_state = "tat_jaeger_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_jaeger_right - name = "Tattoo (Jaeger, Right Eye)" - icon_state = "tat_jaeger_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_kater_left - name = "Tattoo (Kater, Left Eye)" - icon_state = "tat_kater_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_kater_right - name = "Tattoo (Kater, Right Eye)" - icon_state = "tat_kater_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_lujan_left - name = "Tattoo (Lujan, Left Eye)" - icon_state = "tat_lujan_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_lujan_right - name = "Tattoo (Lujan, Right Eye)" - icon_state = "tat_lujan_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_natasha_left - name = "Tattoo (Natasha, Left Eye)" - icon_state = "tat_natasha_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_natasha_right - name = "Tattoo (Natasha, Right Eye)" - icon_state = "tat_natasha_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_nightling - name = "Tattoo (Nightling, Back)" - icon_state = "tat_nightling" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_silverburgh_left - name = "Tattoo (Silverburgh, Left Leg)" - icon_state = "tat_silverburgh" - body_parts = list(BP_L_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,/datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_silverburgh_right - name = "Tattoo (Silverburgh, Right Leg)" - icon_state = "tat_silverburgh" - body_parts = list(BP_R_LEG) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_spine_back - name = "Tattoo (Spine, Back)" - icon_state = "tat_spine" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_tamoko - name = "Tattoo (Ta Moko, Face)" - icon_state = "tat_tamoko" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) - - tat_tiger - name = "Tattoo (Tiger Stripes, All)" - icon_state = "tat_tiger" - 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_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - chest - name = "Tattoo (Tiger Stripes, Chest)" - body_parts = list(BP_CHEST) - - groin - name = "Tattoo (Tiger Stripes, Groin)" - body_parts = list(BP_GROIN) - - left_arm - name = "Tattoo (Tiger Stripes, Left Arm)" - body_parts = list(BP_L_ARM) - - right_arm - name = "Tattoo (Tiger Stripes, Right Arm)" - body_parts = list(BP_R_ARM) - - left_hand - name = "Tattoo (Tiger Stripes, Left Hand)" - body_parts = list(BP_L_HAND) - - right_hand - name = "Tattoo (Tiger Stripes, Right Hand)" - body_parts = list(BP_R_HAND) - - left_leg - name = "Tattoo (Tiger Stripes, Left Leg)" - body_parts = list(BP_L_LEG) - - right_leg - name = "Tattoo (Tiger Stripes, Right Leg)" - body_parts = list(BP_R_LEG) - - left_foot - name = "Tattoo (Tiger Stripes, Left Foot)" - body_parts = list(BP_L_FOOT) - - right_foot - name = "Tattoo (Tiger Stripes, Right Foot)" - body_parts = list(BP_R_FOOT) - - tat_toshi_left - name = "Tattoo (Toshi, Left Eye)" - icon_state = "tat_toshi_l" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_toshi_right - name = "Tattoo (Volgin, Right Eye)" - icon_state = "tat_toshi_r" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - tat_wings_back - name = "Tattoo (Wings, Lower Back)" - icon_state = "tat_wingsback" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) - - big - name = "Tattoo (Wings, Full Back)" - icon_state = "tat_wingsbig" - - tat_face_ridge - name = "Tattoo (Nose Ridge, Face)" - icon_state = "tat_face_ridge" - body_parts = list(BP_HEAD) - - tat_face_hunter - name = "Tattoo (Hunter Marks, Face)" - icon_state = "tat_face_hunter" - body_parts = list(BP_HEAD) - - tat_armband - name = "Tattoo (Forearm Band, R. Arm)" - icon_state = "tat_armband" - body_parts = list(BP_R_ARM) - - left_arm - name = "Tattoo (Forearm Band, L. Arm)" - body_parts = list(BP_L_ARM) - - tat_knuckle - name = "Tattoo (Knuckle Tats, R. Hand)" - icon_state = "tat_knuckle" - body_parts = list(BP_R_HAND) - - left_hand - name = "Tattoo (Knuckle Tats, L. Hand)" - body_parts = list(BP_L_HAND) - - tat_collarbone - name = "Tattoo (Collarbone, Chest)" - icon_state = "tat_laurel" - body_parts = list(BP_CHEST) - - tat_pecs - name = "Tattoo (Pectoral Lines, Chest)" - icon_state = "tat_pecs" - body_parts = list(BP_CHEST) - - tat_barcode - name = "Tattoo (Barcode, Neck)" - icon_state = "tat_neckcode" - body_parts = list(BP_CHEST, BP_HEAD) - species_allowed = list(/datum/species/machine/shell) - - left_leg - name = "Tattoo (Barcode, Left Leg)" - icon_state = "tat_legcode" - body_parts = list(BP_L_LEG) - - right_leg - name = "Tattoo (Barcode, Right Leg)" - icon_state = "tat_legcode" - body_parts = list(BP_R_LEG) - - tat_moon - name = "Tattoo (Moon, Left Chest)" - icon_state = "tat_moonleft" - body_parts = list(BP_CHEST) - - right - name = "Tattoo (Moon, Right Chest)" - icon_state = "tat_moonright" - - tat_gang - name = "Tattoo (Gang Mark, Upper Back)" - icon_state = "tat_gang1" - body_parts = list(BP_CHEST) - - middle - name = "Tattoo (Gang Mark, Middle Back)" - icon_state = "tat_gang2" - - right - name = "Tattoo (Gang Mark, Right Back)" - icon_state = "tat_gang3" - - tat_snake - name = "Tattoo (Snake Colorable, R. Arm)" - icon_state = "tat_snake_col" - body_parts = list(BP_R_ARM) - - green - name = "Tattoo (Snake Green, R. Arm)" - icon_state = "tat_snake" - do_colouration = FALSE - - left - name = "Tattoo (Snake Colorable, L. Arm)" - icon_state = "tat_snake_col" - body_parts = list(BP_L_ARM) - - green - name = "Tattoo (Snake Green, L. Arm)" - icon_state = "tat_snake" - do_colouration = FALSE - - tat_serpent - name = "Tattoo (Red Serpent, Chest)" - icon_state = "tat_serpent" - body_parts = list(BP_CHEST, BP_GROIN) - do_colouration = FALSE - - tat_rose - name = "Tattoo (Roses, L. Leg)" - icon_state = "tat_rose" - body_parts = list(BP_L_LEG) - do_colouration = FALSE - - right_leg - name = "Tattoo (Roses, R. Leg)" - icon_state = "tat_rose" - body_parts = list(BP_R_LEG) - - left_arm - name = "Tattoo (Roses, L. Arm)" - icon_state = "tat_rose" - body_parts = list(BP_L_ARM) - - right_arm - name = "Tattoo (Roses, R. Arm)" - icon_state = "tat_rose" - body_parts = list(BP_R_ARM) - - tat_nanotrasen - name = "Tattoo (NanoTrasen, Chest)" - icon_state = "tat_nt" - body_parts = list(BP_CHEST) - do_colouration = FALSE - - tat_heartbreak - name = "Tattoo (Heart and Sword, Back)" - icon_state = "tat_heartbreaker" - body_parts = list(BP_CHEST, BP_GROIN) - do_colouration = FALSE - - tat_heartthorn - name = "Tattoo (Heart and Thorns, Back)" - icon_state = "tat_thornheart" - body_parts = list(BP_CHEST) - do_colouration = FALSE - - tat_koi - name = "Tattoo (Koi, Full Torso)" - icon_state = "tat_koi" - body_parts = list(BP_CHEST, BP_GROIN) - do_colouration = FALSE - - back - name = "Tattoo (Koi, Back)" - icon_state = "tat_koi_back" - - left_leg - name = "Tattoo (Koi, L. Leg)" - body_parts = list(BP_L_LEG) - - right_leg - name = "Tattoo (Koi, R. Leg)" - body_parts = list(BP_R_LEG) - - left_arm - name = "Tattoo (Koi, L. Arm)" - body_parts = list(BP_L_ARM) - - right_arm - name = "Tattoo (Koi, R. Arm)" - body_parts = list(BP_R_ARM) - - tat_sol - name = "Tattoo (Solarian Flag)" - icon_state = "tat_sol" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) - - tat_biesel - name = "Tattoo (Biesellite Flag)" - icon_state = "tat_biesel" - body_parts = list(BP_CHEST) - do_colouration = FALSE - - tigerhead - name = "Tiger Stripes (Head, Minor)" - icon_state = "tigerhead" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - - backstripe - name = "Back Stripe" - icon_state = "backstripe" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara,/datum/species/unathi,/datum/species/zombie/unathi) - - una_paw_socks - name = "Socks Coloration (Unathi)" - icon = 'icons/mob/human_races/markings_unathi.dmi' - icon_state = "una_pawsocks" - 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(/datum/species/unathi,/datum/species/zombie/unathi) - - bands - name = "Color Bands" - icon_state = "bands" - 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_CHEST,BP_GROIN) - species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) - - bandsface - name = "Color Bands (Face)" - icon_state = "bandsface" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara,/datum/species/unathi,/datum/species/zombie/unathi) - - una_face - name = "Face Color" - icon_state = "una_face" - body_parts = list(BP_HEAD) - icon = 'icons/mob/human_races/markings_unathi.dmi' - species_allowed = list(/datum/species/unathi, /datum/species/zombie/unathi) - - paint - name = "Face Paint" - icon_state = "una_facepaint" - - una_facelow - name = "Face Color Low" - icon_state = "una_facelow" - body_parts = list(BP_HEAD) - - una_scutes - name = "Scutes" - icon_state = "una_scutes" - body_parts = list(BP_CHEST) - - una_maswaist - name = "Masculine Waist (For Females)" - icon_state = "una_maswaist" - body_parts = list(BP_CHEST) - - una_clawshand - name = "Claws (Hands)" - icon_state = "una_claws" - body_parts = list(BP_L_HAND,BP_R_HAND) - - una_clawsfoot - name = "Claws (Feet)" - icon_state = "una_claws" - body_parts = list(BP_L_FOOT,BP_R_FOOT) - - spelunker - name = "Spelunker" - icon_state = "spelunker" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) - species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) - - delver - name = "Delver" - icon_state = "delver" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) - species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) - - skr_tears - name = "Skrell Tear Stains (Xiialt)" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_tears" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) - - skr_tears_axiori - name = "Skrell Tear Stains (Axiori)" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_tears_axiori" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_dart_frog - name = "Skrell Dart Frog (Xiialt)" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_dart_frog" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) - - skr_dart_frog_axiori - name = "Skrell Dart Frog (Axiori)" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_dart_frog_axiori" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_axiori_eyes - name = "Axiori Eyes" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_axiori_eyes" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) - - skr_arms - name = "Skrell Arms" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_arms" - body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_blotch_arms - name = "Skrell Arm Blotches" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_blotch_arms" - body_parts = list(BP_L_ARM,BP_R_ARM) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_blotch_leg - name = "Skrell Leg Blotches" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_blotch_legs" - body_parts = list(BP_L_LEG,BP_R_LEG) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_back_stripes - name = "Skrell Back Stripes" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_back_stripes" - body_parts = list(BP_CHEST) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_stomach - name = "Skrell Stomach" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_stomach" - body_parts = list(BP_CHEST, BP_GROIN) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_chin - name = "Skrell Chin" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_chin" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_gills - name = "Skrell Gills" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_gills" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - skr_xibus - name = "Skrell Xibus" - icon = 'icons/mob/human_races/markings_skrell.dmi' - icon_state = "skr_beak" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) - - diona_leaves - name = "Diona Leaves" - icon = 'icons/mob/human_races/markings_diona.dmi' - icon_state = "diona_leaves" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) - species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) - - thorns_head - name = "Diona Thorns (Head)" - icon_state = "diona_thorns" - body_parts = list(BP_HEAD) - - thorns_torso - name = "Diona Thorns (Torso)" - icon_state = "diona_thorns" - body_parts = list(BP_CHEST) - - flowers_head - name = "Diona Flowers (Head)" - icon_state = "diona_flowers" - body_parts = list(BP_HEAD) - - flowers_torso - name = "Diona Flowers (Torso)" - icon_state = "diona_flowers" - body_parts = list(BP_CHEST) - - moss - name = "Diona Moss" - icon_state = "diona_moss" - body_parts = list(BP_CHEST) - - mushroom - name = "Diona Mushroom" - icon_state = "diona_mushroom" - body_parts = list(BP_HEAD) - - antennae - name = "Diona Antennae" - icon_state = "diona_antennae" - - bug_eyes - name = "Bug Eyes" - icon_state = "bugeyes" - body_parts = list(BP_HEAD) - do_colouration = FALSE - - human_eyes - name = "Human Eyes" - icon_state = "humaneyes" - - skrell_eyes - name = "Skrell Eyes" - icon_state = "skrelleyes" - - skrell_eyes_2 - name = "Skrell Eyes 2" - icon_state = "skrelleyes2" - - small_horns - name = "Small Horns" - icon_state = "smallhorns" - - horny - name = "Horny" - icon_state = "horny" - - treebeard - name = "Treebeard" - icon_state = "treebeard" - - tinyeye - name = "Tiny Eye" - icon_state = "tinyeye" - - eyebrow - name = "Eyebrow" - icon_state = "eyebrow" - - bullhorn - name = "Bullhorn" - icon_state = "bullhorn" - - mono_eye - name = "Mono Eye" - icon_state = "monoeye" - - trioptics - name = "Trioptics" - icon_state = "trioptics" - - lopsided - name = "Lopsided" - icon_state = "lopsided" - - helmethead - name = "Helmethead" - icon_state = "helmethead" - - eyestalk - name = "Eyestalk" - icon_state = "eyestalk" - - periscope - name = "Periscope" - icon_state = "periscope" - - glorp - name = "Glorp" - icon_state = "glorp" - - oak - name = "Oak" - icon_state = "oak" - - thorns - name = "Thorns" - icon_state = "thorns" - - stump - name = "Stump" - icon_state = "stump" - - pbody - name = "P-Body" - icon_state = "pbody" - body_parts = list(BP_CHEST) - do_colouration = FALSE - - blinking - name = "Blinking P-Body" - icon_state = "blinkingpbody" - - foot_eye - name = "Foot Eye" - icon_state = "footeye" - body_parts = list(BP_L_FOOT) - do_colouration = FALSE - - hand_eyes - name = "Hand Eyes" - icon_state = "handeye" - body_parts = list(BP_R_HAND, BP_L_HAND) - do_colouration = FALSE - - tail - name = "Tail" - icon_state = "dionatail" - body_parts = list(BP_GROIN) - do_colouration = FALSE +/datum/sprite_accessory/marking/bandage_head + name = "Bandage, head 1" + icon_state = "bandage1" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_head/head_2 + name = "Bandage, head 2" + icon_state= "bandage2" + +/datum/sprite_accessory/marking/bandage_head/head_3 + name = "Bandage, head 3" + icon_state= "bandage3" + +/datum/sprite_accessory/marking/bandage_chest + name = "Bandage, chest 1" + icon_state = "bandage1" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_chest/chest_2 + name= "Bandage, chest 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_chest/chest_3 + name= "Bandage, chest 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_groin + name = "Bandage, groin 1" + icon_state = "bandage1" + body_parts = list(BP_GROIN) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_groin/groin_2 + name= "Bandage, groin 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_groin/groin_3 + name= "Bandage, groin 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_l_arm + name = "Bandage, left arm 1" + icon_state = "bandage1" + body_parts = list(BP_L_ARM) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_l_arm/l_arm_2 + name= "Bandage, left arm 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_l_arm/l_arm_3 + name= "Bandage, left arm 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_l_hand + name = "Bandage, left hand 1" + icon_state = "bandage1" + body_parts = list(BP_L_HAND) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_l_hand/l_hand_2 + name= "Bandage, left hand 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_l_hand/l_hand_3 + name= "Bandage, left hand 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_r_arm + name = "Bandage, right arm 1" + icon_state = "bandage1" + body_parts = list(BP_R_ARM) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_r_arm/r_arm_2 + name= "Bandage, right arm 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_r_arm/r_arm_3 + name= "Bandage, right arm 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_r_hand + name = "Bandage, right hand 1" + icon_state = "bandage1" + body_parts = list(BP_R_HAND) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_r_hand/r_hand_2 + name= "Bandage, right hand 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_r_hand/r_hand_3 + name= "Bandage, right hand 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_l_leg + name = "Bandage, left leg 1" + icon_state = "bandage1" + body_parts = list(BP_L_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_l_leg/l_leg_2 + name= "Bandage, left leg 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_l_leg/l_leg_3 + name= "Bandage, left leg 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_l_foot + name = "Bandage, left foot 1" + icon_state = "bandage1" + body_parts = list(BP_L_FOOT) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_l_foot/l_foot_2 + name= "Bandage, left foot 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_l_foot/l_foot_3 + name= "Bandage, left foot 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_r_leg + name = "Bandage, right leg 1" + icon_state = "bandage1" + body_parts = list(BP_R_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_r_leg/r_leg_2 + name= "Bandage, right leg 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_r_leg/r_leg_3 + name= "Bandage, right leg 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/bandage_r_foot + name = "Bandage, right foot 1" + icon_state = "bandage1" + body_parts = list(BP_R_FOOT) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/skrell, /datum/species/skrell/axiori) + is_genetic = FALSE + +/datum/sprite_accessory/marking/bandage_r_foot/r_foot_2 + name= "Bandage, right foot 2" + icon_state = "bandage2" + +/datum/sprite_accessory/marking/bandage_r_foot/r_foot_3 + name= "Bandage, right foot 3" + icon_state = "bandage3" + +/datum/sprite_accessory/marking/heterochromia + name = "Heterochromia (Right eye)" + icon_state = "heterochromia" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_scalpports + name = "Augment (Scalp Ports)" + icon_state = "aug_scalpports" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_scalpports/vertex_left + name = "Augment (Scalp Port, Vertex Left)" + icon_state = "aug_vertexport_l" + +/datum/sprite_accessory/marking/aug_scalpports/vertex_right + name = "Augment (Scalp Port, Vertex Right)" + icon_state = "aug_vertexport_r" + +/datum/sprite_accessory/marking/aug_scalpports/occipital_left + name = "Augment (Scalp Port, Occipital Left)" + icon_state = "aug_occipitalport_l" + +/datum/sprite_accessory/marking/aug_scalpports/occipital_right + name = "Augment (Scalp Port, Occipital Right)" + icon_state = "aug_occipitalport_r" + +/datum/sprite_accessory/marking/aug_scalpportsdiode + name = "Augment (Scalp Ports Diode)" + icon_state = "aug_scalpportsdiode" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_scalpportsdiode/vertex_left + name = "Augment (Scalp Port Diode, Vertex Left )" + icon_state = "aug_vertexportdiode_l" + +/datum/sprite_accessory/marking/aug_scalpportsdiode/vertex_right + name = "Augment (Scalp Port Diode, Vertex Right)" + icon_state = "aug_vertexportdiode_r" + +/datum/sprite_accessory/marking/aug_scalpportsdiode/occipital_left + name = "Augment (Scalp Port Diode, Occipital Left)" + icon_state = "aug_occipitalportdiode_l" + +/datum/sprite_accessory/marking/aug_scalpportsdiode/occipital_right + name = "Augment (Scalp Port Diode, Occipital Right)" + icon_state = "aug_occipitalportdiode_r" + +/datum/sprite_accessory/marking/aug_backside_left + name = "Augment (Backside Left, Head)" + icon_state = "aug_backside_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_backside_left/side_diode + name = "Augment (Backside Left Diode, Head)" + icon_state = "aug_sidediode_l" + +/datum/sprite_accessory/marking/aug_backside_right + name = "Augment (Backside Right, Head)" + icon_state = "aug_backside_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_backside_right/side_diode + name = "Augment (Backside Right Diode, Head)" + icon_state = "aug_sidediode_r" + +/datum/sprite_accessory/marking/aug_side_deunan_left + name = "Augment (Deunan, Side Left)" + icon_state = "aug_sidedeunan_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_deunan_right + name = "Augment (Deunan, Side Right)" + icon_state = "aug_sidedeunan_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_kuze_left + name = "Augment (Kuze, Side Left)" + icon_state = "aug_sidekuze_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_kuze_left/side_diode + name = "Augment (Kuze Diode, Side Left)" + icon_state = "aug_sidekuzediode_l" + +/datum/sprite_accessory/marking/aug_side_kuze_right + name = "Augment (Kuze, Side Right)" + icon_state = "aug_sidekuze_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_kuze_right/side_diode + name = "Augment (Kuze Diode, Side Right)" + icon_state = "aug_sidekuzediode_r" + +/datum/sprite_accessory/marking/aug_side_kinzie_left + name = "Augment (Kinzie, Side Left)" + icon_state = "aug_sidekinzie_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_kinzie_right + name = "Augment (Kinzie, Side Right)" + icon_state = "aug_sidekinzie_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_shelly_left + name = "Augment (Shelly, Side Left)" + icon_state = "aug_sideshelly_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_side_shelly_right + name = "Augment (Shelly, Side Right)" + icon_state = "aug_sideshelly_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_chestports + name = "Augment (Chest Ports)" + icon_state = "aug_chestports" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/aug_abdomenports + name = "Augment (Abdomen Ports)" + icon_state = "aug_abdomenports" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/aug_lowerjaw + name = "Augment (Lower Jaw)" + icon_state = "aug_lowerjaw" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori,/datum/species/unathi) + +/datum/sprite_accessory/marking/aug_headcase + name = "Augment (Headcase)" + icon_state = "aug_headcase" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/aug_headcaselight + name = "Augment (Headcase, Light)" + icon_state = "aug_headcaselight" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/vaurca_augs + name = "Mecha Chest" + icon = 'icons/mob/human_races/markings_vaurca.dmi' + icon_state = "mecha_chest" + do_colouration = FALSE + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/vaurca_augs/mecha_abdomen + name = "Mecha Abdomen" + icon_state = "mecha_abdomen" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_spine + name = "Mecha Spine" + icon_state = "mecha_spine" + body_parts = list(BP_HEAD, BP_CHEST) + +/datum/sprite_accessory/marking/vaurca_augs/chest_tubes + name = "Chest Tubes" + icon_state = "chest_tubes" + +/datum/sprite_accessory/marking/vaurca_augs/chest_wires + name = "Chest Wires" + icon_state = "chest_wires" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b + name = "Mecha Eye (Blue, Right)" + icon_state = "mecha_eye_b_r" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mecha_eye_b_l + name = "Mecha Eye (Blue, Left)" + icon_state = "mecha_eye_b_l" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mecha_eye_r_l + name = "Mecha Eye (Red, Left)" + icon_state = "mecha_eye_r_l" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mecha_eye_r_r + name = "Mecha Eye (Red, Right)" + icon_state = "mecha_eye_r_r" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mecha_eye_y_l + name = "Mecha Eye (Yellow, Left)" + icon_state = "mecha_eye_y_l" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mecha_eye_y_r + name = "Mecha Eye (Yellow, Right)" + icon_state = "mecha_eye_y_r" + +/datum/sprite_accessory/marking/vaurca_augs/mecha_eye_b/mandible + name = "Mecha Mandibles" + icon_state = "mecha_mandibles" + +/datum/sprite_accessory/marking/vaurca_augs/hand_panel_r + name = "Hand Panel (Right)" + icon_state = "hand_panel_r" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/vaurca_augs/hand_panel_l + name = "Hand Panel (Left)" + icon_state = "hand_panel_l" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/bulwark_augs + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Mecha Eye L" + icon_state = "mechaeyebully_l" + do_colouration = FALSE + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/bulwark_augs/mechaeyebully_r + name = "Mecha Eye R" + icon_state = "mechaeyebully_r" + +/datum/sprite_accessory/marking/bulwark_augs/mechaeyeoverlaybully_l + name = "Mecha Eye Overlay L" + icon_state = "mechaeyeoverlaybully_l" + +/datum/sprite_accessory/marking/bulwark_augs/mechaeyeoverlaybully_r + name = "Mecha Eye Overlay R" + icon_state = "mechaeyeoverlaybully_r" + +/datum/sprite_accessory/marking/bulwark_augs/mechamandiblesbully + name = "Mecha Mandibles (Bulwark)" + icon_state = "mechamandiblesbully" + +/datum/sprite_accessory/marking/bulwark_augs/mechamandiblesoverlaybully + name = "Mecha Mandibles Overlay" + icon_state = "mechamandiblesoverlaybully" + +/datum/sprite_accessory/marking/bulwark_augs/visorbully + name = "Visor" + icon_state = "visorbully" + +/datum/sprite_accessory/marking/bulwark_augs/visorbullyoverlay + name = "Visor Overlay" + icon_state = "visorbullyoverlay" + +/datum/sprite_accessory/marking/bulwark_augs/spidereyesbully + name = "Spider Eyes" + icon_state = "spidereyesbully" + +/datum/sprite_accessory/marking/bulwark_augs/spidereyesbullyoverlay + name = "Spider Eyes Overlay" + icon_state = "spidereyesbullyoverlay" + +/datum/sprite_accessory/marking/bulwark_augs/mechamonoculusbully + name = "Mecha Monoculus" + icon_state = "mechamonoculusbully" + +/datum/sprite_accessory/marking/bulwark_augs/mechamonoculusbullyoverlay + name = "Mecha Monoculus Overlay" + icon_state = "mechamonoculusbullyoverlay" + +/datum/sprite_accessory/marking/bullybackmeter + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Back Meter (Bulwark)" + icon_state = "bullybackmeter" + do_colouration = FALSE + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/bullybackmeter/bullybackmeteroverlay + name = "Back Meter Overlay" + icon_state = "bullybackmeteroverlay" + +/datum/sprite_accessory/marking/bullybackmeter/mechahorn_l + name = "Mecha Horn L" + icon_state = "mechahorn_l" + +/datum/sprite_accessory/marking/bullybackmeter/mechahorn_r + name = "Mecha Horn R" + icon_state = "mechahorn_r" + +/datum/sprite_accessory/marking/bullybackmeter/bullybackwires + name = "Back Wires (Bulwark)" + icon_state = "bullybackwires" + +/datum/sprite_accessory/marking/bullybackmeter/bullybacktubes + name = "Back Tubes (Bulwark)" + icon_state = "bullybacktubes" + +/datum/sprite_accessory/marking/bullybackmeter/ventsbully + name = "Vents (Bulwark)" + icon_state = "ventsbully" + +/datum/sprite_accessory/marking/bullybackmeter/shellpanelbully + name = "Shell Panel" + icon_state = "shellpanelbully" + +/datum/sprite_accessory/marking/mechakneesbully_l + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Mecha Knees L" + icon_state = "mechakneesbully_l" + do_colouration = FALSE + body_parts = list(BP_L_LEG) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/mechakneesbully_r + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Mecha Knees R" + icon_state = "mechakneesbully_r" + do_colouration = FALSE + body_parts = list(BP_R_LEG) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/mechaabdomenbully + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Mecha Abdomen (Bulwark)" + icon_state = "mechaabdomenbully" + do_colouration = FALSE + body_parts = list(BP_GROIN) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/mechapelvisbully + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Mecha Pelvis (Bulwark)" + icon_state = "mechapelvisbully" + do_colouration = FALSE + body_parts = list(BP_GROIN) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/handpanelbully_l + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Panel L" + icon_state = "handpanelbully_l" + do_colouration = FALSE + body_parts = list(BP_L_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/handpanelbully_r + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Panel R" + icon_state = "handpanelbully_r" + do_colouration = FALSE + body_parts = list(BP_R_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/handpanelbully_loverlay + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Panel L Overlay" + icon_state = "handpanelbully_loverlay" + do_colouration = FALSE + body_parts = list(BP_L_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/handpanelbully_roverlay + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Panel R Overlay" + icon_state = "handpanelbully_roverlay" + do_colouration = FALSE + body_parts = list(BP_R_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/armwirebully_l + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Arm Wires L" + icon_state = "armwirebully_l" + do_colouration = FALSE + body_parts = list(BP_L_ARM) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/armwirebully_r + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Arm Wires R" + icon_state = "armwirebully_r" + do_colouration = FALSE + body_parts = list(BP_R_ARM) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/armwirebullyhand_l + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Wires L" + icon_state = "handwirebully_l" + do_colouration = FALSE + body_parts = list(BP_L_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/armwiresbullyhand_r + icon = 'icons/mob/human_races/markings_vaurcae.dmi' + name = "Hand Wires R" + icon_state = "handwirebully_r" + do_colouration = FALSE + body_parts = list(BP_R_HAND) + species_allowed = list(/datum/species/bug/type_e) + +/datum/sprite_accessory/marking/backstripe + name = "Back Stripe" + icon_state = "backstripe" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/backstripe/spinemarks + name = "Back Stripe Marks" + icon_state = "backstripemarks" + +/datum/sprite_accessory/marking/bands + name = "Color Bands (All)" + icon_state = "bands" + body_parts = list(BP_L_LEG, BP_R_LEG, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_GROIN, BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/diona, /datum/species/diona/coeu, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/bands/chest + name = "Color Bands (Torso)" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/bands/groin + name = "Color Bands (Groin)" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/bands/left_arm + name = "Color Bands (Left Arm)" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/bands/right_arm + name = "Color Bands (Right Arm)" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/bands/left_hand + name = "Color Bands (Left Hand)" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/bands/right_hand + name = "Color Bands (Right Hand)" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/bands/left_leg + name = "Color Bands (Left Leg)" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/bands/right_leg + name = "Color Bands (Right Leg)" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/bands/left_foot + name = "Color Bands (Left Foot)" + body_parts = list(BP_L_FOOT) + species_allowed = list(/datum/species/unathi) + +/datum/sprite_accessory/marking/bands/left_foot_human + name = "Color Bands (Left Foot)" + icon_state = "bandshuman" + body_parts = list(BP_L_FOOT) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/bands/right_foot + name = "Color Bands (Right Foot)" + body_parts = list(BP_R_FOOT) + species_allowed = list(/datum/species/unathi) + +/datum/sprite_accessory/marking/bands/right_foot_human + name = "Color Bands (Right Foot)" + icon_state = "bandshuman" + body_parts = list(BP_R_FOOT) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/bandsface + name = "Color Bands (Face)" + icon_state = "bandsface" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/bandsface_human + name = "Color Bands (Face)" + icon_state = "bandshumanface" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/bindi + name = "Bindi" + icon_state = "bindi" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/blush + name = "Blush" + icon_state= "blush" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/cheekspot_left + name = "Cheek Spot (Left Cheek)" + icon_state = "cheekspot_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/cheekspot_right + name = "Cheek Spot (Right Cheek)" + icon_state = "cheekspot_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell,/datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/cheshire_left + name = "Cheshire (Left Cheek)" + icon_state = "cheshire_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) + +/datum/sprite_accessory/marking/cheshire_right + name = "Cheshire (Right Cheek)" + icon_state = "cheshire_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) + +/datum/sprite_accessory/marking/crow_left + name = "Crow Mark (Left Eye)" + icon_state = "crow_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/crow_right + name = "Crow Mark (Right Eye)" + icon_state = "crow_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/ear_left + name = "Ear Cover (Left)" + icon_state = "ear_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/ear_right + name = "Ear Cover (Right)" + icon_state = "ear_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/eyestripe + name = "Eye Stripe" + icon_state = "eyestripe" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/eyecorner_left + name = "Eye Corner Left" + icon_state = "eyecorner_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/eyecorner_right + name = "Eye Corner Right" + icon_state = "eyecorner_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/eyelash_left + name = "Eyelash Left" + icon_state = "eyelash_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/eyebrows + name = "Eyebrows" + icon_state = "eyebrows" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/unibrow + name = "Unibrow" + icon_state = "unibrow" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/eyelash_right + name = "Eyelash Right" + icon_state = "eyelash_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/skrell/axiori, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/lips + name = "Lips" + icon_state = "lips" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) + +/datum/sprite_accessory/marking/lipcorner_left + name = "Lip Corner Left" + icon_state = "lipcorner_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) + +/datum/sprite_accessory/marking/lipcorner_right + name = "Lip Corner Right" + icon_state = "lipcorner_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) + +/datum/sprite_accessory/marking/lowercheek_left + name = "Lower Cheek Left" + icon_state = "lowercheek_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) + +/datum/sprite_accessory/marking/lowercheek_right + name = "Lower Cheek Right" + icon_state = "lowercheek_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,) + +/datum/sprite_accessory/marking/neck + name = "Neck Cover" + icon_state = "neck" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/neckthick + name = "Neck Cover (Thick)" + icon_state = "neckthick" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/nosestripe + name = "Nose Stripe" + icon_state = "nosestripe" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/nosetape + name = "Nose Tape" + icon_state = "nosetape" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scar_chest + name = "Scar, Chest" + icon_state = "surgicalscar" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scar_chest_left + name = "Scar, Chest Left" + icon_state = "chestscar1" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scar_chest_right + name = "Scar, Chest Right" + icon_state = "chestscar2" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_abdomen_left + name = "Scratch, Abdomen Left" + icon_state = "scratch_abdomen_l" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_abdomen_right + name = "Scratch, Abdomen Right" + icon_state = "scratch_abdomen_r" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_abdomen_small_left + name = "Scratch, Abdomen Small Left" + icon_state = "scratch_abdomensmall_l" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_abdomen_small_right + name = "Scratch, Abdomen Small Right" + icon_state = "scratch_abdomensmall_r" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_back + name = "Scratch, Back" + icon_state = "scratch_back" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi, /datum/species/bug, /datum/species/bug/type_b) + +/datum/sprite_accessory/marking/scratch_chest_left + name = "Scratch, Chest (Left)" + icon_state = "scratch_chest_l" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/scratch_chest_right + name = "Scratch, Chest (Right)" + icon_state = "scratch_chest_r" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_belly + name = "Tattoo (Belly)" + icon_state = "tat_belly" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_campbell_leftarm + name = "Tattoo (Campbell, Left Arm)" + icon_state = "tat_campbell" + body_parts = list(BP_L_ARM) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_campbell_rightarm + name = "Tattoo (Campbell, Right Arm)" + icon_state = "tat_campbell" + body_parts= list(BP_R_ARM) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_campbell_leftleg + name = "Tattoo (Campbell, Left Leg)" + icon_state = "tat_campbell" + body_parts= list(BP_L_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_campbell_rightleg + name = "Tattoo (Campbell, Right Leg)" + icon_state = "tat_campbell" + body_parts= list(BP_R_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_circle_back + name = "Tattoo (Circle, Back)" + icon_state = "tat_circle" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_circle_big_back + name = "Tattoo (Big Circle, Back)" + icon_state = "tat_bigcircle" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_forrest_left + name = "Tattoo (Forrest, Left Eye)" + icon_state = "tat_forrest_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_forrest_right + name = "Tattoo (Forrest, Right Eye)" + icon_state = "tat_forrest_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_harness + name = "Tattoo (Harness, Chest)" + icon_state = "tat_harness" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_hive + name = "Tattoo (Hive, Back)" + icon_state = "tat_hive" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_heart_arm + name = "Tattoo (Heart, Left Arm)" + icon_state = "tat_lheart" + body_parts = list(BP_L_ARM) + species_allowed = list(/datum/species/human, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_heart_arm/right + name = "Tattoo (Heart, Right Arm)" + icon_state = "tat_rheart" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_heart_back + name = "Tattoo (Heart, Lower Back)" + icon_state = "tat_heartback" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/tat_hunter_left + name = "Tattoo (Hunter, Left Eye)" + icon_state = "tat_hunter_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_hunter_right + name = "Tattoo (Hunter, Right Eye)" + icon_state = "tat_hunter_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_jaeger_left + name = "Tattoo (Jaeger, Left Eye)" + icon_state = "tat_jaeger_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_jaeger_right + name = "Tattoo (Jaeger, Right Eye)" + icon_state = "tat_jaeger_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_kater_left + name = "Tattoo (Kater, Left Eye)" + icon_state = "tat_kater_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_kater_right + name = "Tattoo (Kater, Right Eye)" + icon_state = "tat_kater_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_lujan_left + name = "Tattoo (Lujan, Left Eye)" + icon_state = "tat_lujan_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_lujan_right + name = "Tattoo (Lujan, Right Eye)" + icon_state = "tat_lujan_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_natasha_left + name = "Tattoo (Natasha, Left Eye)" + icon_state = "tat_natasha_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_natasha_right + name = "Tattoo (Natasha, Right Eye)" + icon_state = "tat_natasha_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_nightling + name = "Tattoo (Nightling, Back)" + icon_state = "tat_nightling" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_silverburgh_left + name = "Tattoo (Silverburgh, Left Leg)" + icon_state = "tat_silverburgh" + body_parts = list(BP_L_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori,/datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_silverburgh_right + name = "Tattoo (Silverburgh, Right Leg)" + icon_state = "tat_silverburgh" + body_parts = list(BP_R_LEG) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_spine_back + name = "Tattoo (Spine, Back)" + icon_state = "tat_spine" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_tamoko + name = "Tattoo (Ta Moko, Face)" + icon_state = "tat_tamoko" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori) + +/datum/sprite_accessory/marking/tat_tiger + name = "Tattoo (Tiger Stripes, All)" + icon_state = "tat_tiger" + 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_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_tiger/chest + name = "Tattoo (Tiger Stripes, Chest)" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/tat_tiger/groin + name = "Tattoo (Tiger Stripes, Groin)" + body_parts = list(BP_GROIN) + +/datum/sprite_accessory/marking/tat_tiger/left_arm + name = "Tattoo (Tiger Stripes, Left Arm)" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_tiger/right_arm + name = "Tattoo (Tiger Stripes, Right Arm)" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_tiger/left_hand + name = "Tattoo (Tiger Stripes, Left Hand)" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/tat_tiger/right_hand + name = "Tattoo (Tiger Stripes, Right Hand)" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/tat_tiger/left_leg + name = "Tattoo (Tiger Stripes, Left Leg)" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/tat_tiger/right_leg + name = "Tattoo (Tiger Stripes, Right Leg)" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/tat_tiger/left_foot + name = "Tattoo (Tiger Stripes, Left Foot)" + body_parts = list(BP_L_FOOT) + +/datum/sprite_accessory/marking/tat_tiger/right_foot + name = "Tattoo (Tiger Stripes, Right Foot)" + body_parts = list(BP_R_FOOT) + +/datum/sprite_accessory/marking/tat_toshi_left + name = "Tattoo (Toshi, Left Eye)" + icon_state = "tat_toshi_l" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_toshi_right + name = "Tattoo (Volgin, Right Eye)" + icon_state = "tat_toshi_r" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/tat_wings_back + name = "Tattoo (Wings, Lower Back)" + icon_state = "tat_wingsback" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/tat_wings_back/big + name = "Tattoo (Wings, Full Back)" + icon_state = "tat_wingsbig" + +/datum/sprite_accessory/marking/tat_face_ridge + name = "Tattoo (Nose Ridge, Face)" + icon_state = "tat_face_ridge" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_face_hunter + name = "Tattoo (Hunter Marks, Face)" + icon_state = "tat_face_hunter" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/tat_armband + name = "Tattoo (Forearm Band, R. Arm)" + icon_state = "tat_armband" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_armband/left_arm + name = "Tattoo (Forearm Band, L. Arm)" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_knuckle + name = "Tattoo (Knuckle Tats, R. Hand)" + icon_state = "tat_knuckle" + body_parts = list(BP_R_HAND) + +/datum/sprite_accessory/marking/tat_knuckle/left_hand + name = "Tattoo (Knuckle Tats, L. Hand)" + body_parts = list(BP_L_HAND) + +/datum/sprite_accessory/marking/tat_collarbone + name = "Tattoo (Collarbone, Chest)" + icon_state = "tat_laurel" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/tat_pecs + name = "Tattoo (Pectoral Lines, Chest)" + icon_state = "tat_pecs" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/tat_barcode + name = "Tattoo (Barcode, Neck)" + icon_state = "tat_neckcode" + body_parts = list(BP_CHEST, BP_HEAD) + species_allowed = list(/datum/species/machine/shell) + +/datum/sprite_accessory/marking/tat_barcode/left_leg + name = "Tattoo (Barcode, Left Leg)" + icon_state = "tat_legcode" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/tat_barcode/right_leg + name = "Tattoo (Barcode, Right Leg)" + icon_state = "tat_legcode" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/tat_moon + name = "Tattoo (Moon, Left Chest)" + icon_state = "tat_moonleft" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/tat_moon/right + name = "Tattoo (Moon, Right Chest)" + icon_state = "tat_moonright" + +/datum/sprite_accessory/marking/tat_gang + name = "Tattoo (Gang Mark, Upper Back)" + icon_state = "tat_gang1" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/tat_gang/middle + name = "Tattoo (Gang Mark, Middle Back)" + icon_state = "tat_gang2" + +/datum/sprite_accessory/marking/tat_gang/right + name = "Tattoo (Gang Mark, Right Back)" + icon_state = "tat_gang3" + +/datum/sprite_accessory/marking/tat_snake + name = "Tattoo (Snake Colorable, R. Arm)" + icon_state = "tat_snake_col" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_snake/green + name = "Tattoo (Snake Green, R. Arm)" + icon_state = "tat_snake" + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_snake/left + name = "Tattoo (Snake Colorable, L. Arm)" + icon_state = "tat_snake_col" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_snake/left/green + name = "Tattoo (Snake Green, L. Arm)" + icon_state = "tat_snake" + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_serpent + name = "Tattoo (Red Serpent, Chest)" + icon_state = "tat_serpent" + body_parts = list(BP_CHEST, BP_GROIN) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_rose + name = "Tattoo (Roses, L. Leg)" + icon_state = "tat_rose" + body_parts = list(BP_L_LEG) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_rose/right_leg + name = "Tattoo (Roses, R. Leg)" + icon_state = "tat_rose" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/tat_rose/left_arm + name = "Tattoo (Roses, L. Arm)" + icon_state = "tat_rose" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_rose/right_arm + name = "Tattoo (Roses, R. Arm)" + icon_state = "tat_rose" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_nanotrasen + name = "Tattoo (NanoTrasen, Chest)" + icon_state = "tat_nt" + body_parts = list(BP_CHEST) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_heartbreak + name = "Tattoo (Heart and Sword, Back)" + icon_state = "tat_heartbreaker" + body_parts = list(BP_CHEST, BP_GROIN) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_heartthorn + name = "Tattoo (Heart and Thorns, Back)" + icon_state = "tat_thornheart" + body_parts = list(BP_CHEST) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_koi + name = "Tattoo (Koi, Full Torso)" + icon_state = "tat_koi" + body_parts = list(BP_CHEST, BP_GROIN) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tat_koi/back + name = "Tattoo (Koi, Back)" + icon_state = "tat_koi_back" + +/datum/sprite_accessory/marking/tat_koi/left_leg + name = "Tattoo (Koi, L. Leg)" + body_parts = list(BP_L_LEG) + +/datum/sprite_accessory/marking/tat_koi/right_leg + name = "Tattoo (Koi, R. Leg)" + body_parts = list(BP_R_LEG) + +/datum/sprite_accessory/marking/tat_koi/left_arm + name = "Tattoo (Koi, L. Arm)" + body_parts = list(BP_L_ARM) + +/datum/sprite_accessory/marking/tat_koiright_arm + name = "Tattoo (Koi, R. Arm)" + body_parts = list(BP_R_ARM) + +/datum/sprite_accessory/marking/tat_sol + name = "Tattoo (Solarian Flag)" + icon_state = "tat_sol" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/machine/shell) + +/datum/sprite_accessory/marking/tat_biesel + name = "Tattoo (Biesellite Flag)" + icon_state = "tat_biesel" + body_parts = list(BP_CHEST) + do_colouration = FALSE + +/datum/sprite_accessory/marking/tigerhead + name = "Tiger Stripes (Head, Minor)" + icon_state = "tigerhead" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) + +/datum/sprite_accessory/marking/backstripe + name = "Back Stripe" + icon_state = "backstripe" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara,/datum/species/unathi,/datum/species/zombie/unathi) + +/datum/sprite_accessory/marking/una_paw_socks + name = "Socks Coloration (Unathi)" + icon = 'icons/mob/human_races/markings_unathi.dmi' + icon_state = "una_pawsocks" + 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(/datum/species/unathi,/datum/species/zombie/unathi) + +/datum/sprite_accessory/marking/bands + name = "Color Bands" + icon_state = "bands" + 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_CHEST,BP_GROIN) + species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi) + +/datum/sprite_accessory/marking/bandsface + name = "Color Bands (Face)" + icon_state = "bandsface" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara,/datum/species/unathi,/datum/species/zombie/unathi) + +/datum/sprite_accessory/marking/una_face + name = "Face Color" + icon_state = "una_face" + body_parts = list(BP_HEAD) + icon = 'icons/mob/human_races/markings_unathi.dmi' + species_allowed = list(/datum/species/unathi, /datum/species/zombie/unathi) + +/datum/sprite_accessory/marking/una_face/paint + name = "Face Paint" + icon_state = "una_facepaint" + +/datum/sprite_accessory/marking/una_face/una_facelow + name = "Face Color Low" + icon_state = "una_facelow" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/una_face/una_scutes + name = "Scutes" + icon_state = "una_scutes" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/una_face/una_maswaist + name = "Masculine Waist (For Females)" + icon_state = "una_maswaist" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/una_face/una_clawshand + name = "Claws (Hands)" + icon_state = "una_claws" + body_parts = list(BP_L_HAND,BP_R_HAND) + +/datum/sprite_accessory/marking/una_face/una_clawsfoot + name = "Claws (Feet)" + icon_state = "una_claws" + body_parts = list(BP_L_FOOT,BP_R_FOOT) + +/datum/sprite_accessory/marking/spelunker + name = "Spelunker" + icon_state = "spelunker" + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) + species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) + +/datum/sprite_accessory/marking/delver + name = "Delver" + icon_state = "delver" + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) + species_allowed = list(/datum/species/bug,/datum/species/bug/type_b) + +/datum/sprite_accessory/marking/skr_tears + name = "Skrell Tear Stains (Xiialt)" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_tears" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_tears_axiori + name = "Skrell Tear Stains (Axiori)" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_tears_axiori" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_dart_frog + name = "Skrell Dart Frog (Xiialt)" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_dart_frog" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_dart_frog_axiori + name = "Skrell Dart Frog (Axiori)" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_dart_frog_axiori" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_axiori_eyes + name = "Axiori Eyes" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_axiori_eyes" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_arms + name = "Skrell Arms" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_arms" + body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_blotch_arms + name = "Skrell Arm Blotches" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_blotch_arms" + body_parts = list(BP_L_ARM,BP_R_ARM) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_blotch_leg + name = "Skrell Leg Blotches" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_blotch_legs" + body_parts = list(BP_L_LEG,BP_R_LEG) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_back_stripes + name = "Skrell Back Stripes" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_back_stripes" + body_parts = list(BP_CHEST) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_stomach + name = "Skrell Stomach" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_stomach" + body_parts = list(BP_CHEST, BP_GROIN) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_chin + name = "Skrell Chin" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_chin" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_gills + name = "Skrell Gills" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_gills" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/skr_xibus + name = "Skrell Xibus" + icon = 'icons/mob/human_races/markings_skrell.dmi' + icon_state = "skr_beak" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/skrell,/datum/species/skrell/axiori,/datum/species/zombie/skrell) + +/datum/sprite_accessory/marking/diona_leaves + name = "Diona Leaves" + icon = 'icons/mob/human_races/markings_diona.dmi' + icon_state = "diona_leaves" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN,BP_HEAD) + species_allowed = list(/datum/species/diona, /datum/species/diona/coeu) + +/datum/sprite_accessory/marking/diona_leaves/thorns_head + name = "Diona Thorns (Head)" + icon_state = "diona_thorns" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/diona_leaves/thorns_torso + name = "Diona Thorns (Torso)" + icon_state = "diona_thorns" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/diona_leaves/flowers_head + name = "Diona Flowers (Head)" + icon_state = "diona_flowers" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/diona_leaves/flowers_torso + name = "Diona Flowers (Torso)" + icon_state = "diona_flowers" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/diona_leaves/moss + name = "Diona Moss" + icon_state = "diona_moss" + body_parts = list(BP_CHEST) + +/datum/sprite_accessory/marking/diona_leaves/mushroom + name = "Diona Mushroom" + icon_state = "diona_mushroom" + body_parts = list(BP_HEAD) + +/datum/sprite_accessory/marking/diona_leaves/mushroom/antennae + name = "Diona Antennae" + icon_state = "diona_antennae" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes + name = "Bug Eyes" + icon_state = "bugeyes" + body_parts = list(BP_HEAD) + do_colouration = FALSE + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/human_eyes + name = "Human Eyes" + icon_state = "humaneyes" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/skrell_eyes + name = "Skrell Eyes" + icon_state = "skrelleyes" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/skrell_eyes_2 + name = "Skrell Eyes 2" + icon_state = "skrelleyes2" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/small_horns + name = "Small Horns" + icon_state = "smallhorns" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/horny + name = "Horny" + icon_state = "horny" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/treebeard + name = "Treebeard" + icon_state = "treebeard" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/tinyeye + name = "Tiny Eye" + icon_state = "tinyeye" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/eyebrow + name = "Eyebrow" + icon_state = "eyebrow" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/bullhorn + name = "Bullhorn" + icon_state = "bullhorn" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/mono_eye + name = "Mono Eye" + icon_state = "monoeye" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/trioptics + name = "Trioptics" + icon_state = "trioptics" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/lopsided + name = "Lopsided" + icon_state = "lopsided" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/helmethead + name = "Helmethead" + icon_state = "helmethead" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/eyestalk + name = "Eyestalk" + icon_state = "eyestalk" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/periscope + name = "Periscope" + icon_state = "periscope" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/glorp + name = "Glorp" + icon_state = "glorp" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/oak + name = "Oak" + icon_state = "oak" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/thorns + name = "Thorns" + icon_state = "thorns" + +/datum/sprite_accessory/marking/diona_leaves/bug_eyes/stump + name = "Stump" + icon_state = "stump" + +/datum/sprite_accessory/marking/diona_leaves/pbody + name = "P-Body" + icon_state = "pbody" + body_parts = list(BP_CHEST) + do_colouration = FALSE + +/datum/sprite_accessory/marking/diona_leaves/pbody/blinking + name = "Blinking P-Body" + icon_state = "blinkingpbody" + +/datum/sprite_accessory/marking/diona_leaves/foot_eye + name = "Foot Eye" + icon_state = "footeye" + body_parts = list(BP_L_FOOT) + do_colouration = FALSE + +/datum/sprite_accessory/marking/diona_leaves/hand_eyes + name = "Hand Eyes" + icon_state = "handeye" + body_parts = list(BP_R_HAND, BP_L_HAND) + do_colouration = FALSE + +/datum/sprite_accessory/marking/diona_leaves/tail + name = "Tail" + icon_state = "dionatail" + body_parts = list(BP_GROIN) + do_colouration = FALSE //bishop - bishop_lights - name = "Bishop - Lights Colour" - icon = 'icons/mob/human_races/markings_bishop.dmi' - icon_state = "bishop_lights" - icon_blend_mode = ICON_MULTIPLY - is_painted = TRUE - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) - robotize_type_required = PROSTHETIC_BC +/datum/sprite_accessory/marking/bishop_lights + name = "Bishop - Lights Colour" + icon = 'icons/mob/human_races/markings_bishop.dmi' + icon_state = "bishop_lights" + icon_blend_mode = ICON_MULTIPLY + is_painted = TRUE + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) + robotize_type_required = PROSTHETIC_BC - bishop_mask - name = "Bishop - Face Mask" - icon_state = "bishop_mask" - do_colouration = FALSE - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/bishop_lights/bishop_mask + name = "Bishop - Face Mask" + icon_state = "bishop_mask" + do_colouration = FALSE + body_parts = list(BP_HEAD) - bishop_triangular_mask - name = "Bishop - Triangular Face Mask" - icon_state = "bishop_triangular_mask" +/datum/sprite_accessory/marking/bishop_lights/bishop_mask/bishop_triangular_mask + name = "Bishop - Triangular Face Mask" + icon_state = "bishop_triangular_mask" - bishop_panels - name = "Bishop - Full Body Panel Colors" - icon_state = "bishop_panels" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) +/datum/sprite_accessory/marking/bishop_lights/bishop_panels + name = "Bishop - Full Body Panel Colors" + icon_state = "bishop_panels" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) - bishop_head - name = "Bishop - Head Panel Colors" - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/bishop_lights/bishop_head + name = "Bishop - Head Panel Colors" + body_parts = list(BP_HEAD) - bishop_legs - name = "Bishop - Leg Panel Colors" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) +/datum/sprite_accessory/marking/bishop_lights/bishop_legs + name = "Bishop - Leg Panel Colors" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - bishop_arms - name = "Bishop - Arm Panel Colors" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) +/datum/sprite_accessory/marking/bishop_lights/bishop_arms + name = "Bishop - Arm Panel Colors" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) //hephaestus g1 - g1_panels - name = "G1 - Full Panel Colors" - icon = 'icons/mob/human_races/markings_industrial.dmi' - icon_state = "g1_primary" - icon_blend_mode = ICON_MULTIPLY - is_painted = TRUE - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) - robotize_type_required = PROSTHETIC_IND +/datum/sprite_accessory/marking/g1_panels + name = "G1 - Full Panel Colors" + icon = 'icons/mob/human_races/markings_industrial.dmi' + icon_state = "g1_primary" + icon_blend_mode = ICON_MULTIPLY + is_painted = TRUE + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) + robotize_type_required = PROSTHETIC_IND - g1_head - name = "G1 - Head Panel Colors" - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/g1_panels/g1_head + name = "G1 - Head Panel Colors" + body_parts = list(BP_HEAD) - g1_legs - name = "G1 - Leg Panel Colors" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) +/datum/sprite_accessory/marking/g1_panels/g1_legs + name = "G1 - Leg Panel Colors" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - g1_arms - name = "G1 - Arm Panel Colors" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) +/datum/sprite_accessory/marking/g1_panels/g1_arms + name = "G1 - Arm Panel Colors" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - g1_lights - name = "G1 - Lights Color" - icon_state = "g1_lights" - body_parts = list(BP_CHEST,BP_HEAD) +/datum/sprite_accessory/marking/g1_panels/g1_lights + name = "G1 - Lights Color" + icon_state = "g1_lights" + body_parts = list(BP_CHEST,BP_HEAD) //hephaestus g2 - g2_panels - name = "G2 - Full Panel Colors" - icon = 'icons/mob/human_races/markings_hephaestus.dmi' - icon_state = "g2_primary" - icon_blend_mode = ICON_MULTIPLY - is_painted = TRUE - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) - robotize_type_required = PROSTHETIC_HI +/datum/sprite_accessory/marking/g2_panels + name = "G2 - Full Panel Colors" + icon = 'icons/mob/human_races/markings_hephaestus.dmi' + icon_state = "g2_primary" + icon_blend_mode = ICON_MULTIPLY + is_painted = TRUE + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) + robotize_type_required = PROSTHETIC_HI - g2_head - name = "G2 - Head Panel Colors" - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/g2_panels/g2_head + name = "G2 - Head Panel Colors" + body_parts = list(BP_HEAD) - g2_legs - name = "G2 - Leg Panel Colors" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) +/datum/sprite_accessory/marking/g2_panels/g2_legs + name = "G2 - Leg Panel Colors" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - g2_arms - name = "G2 - Arm Panel Colors" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) +/datum/sprite_accessory/marking/g2_panels/g2_arms + name = "G2 - Arm Panel Colors" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - g2_lights - name = "G2 - Lights Color" - icon_state = "g2_lights" - body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG,BP_GROIN,BP_CHEST,BP_HEAD) +/datum/sprite_accessory/marking/g2_panels/g2_lights + name = "G2 - Lights Color" + icon_state = "g2_lights" + body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_LEG,BP_R_LEG,BP_GROIN,BP_CHEST,BP_HEAD) //zeng-hu mobility frame - zeng_panels - name = "Zeng-Hu - Full Panel Colors" - icon = 'icons/mob/human_races/markings_zenghu.dmi' - icon_state = "zeng_primary" - icon_blend_mode = ICON_MULTIPLY - is_painted = TRUE - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) - robotize_type_required = PROSTHETIC_ZH +/datum/sprite_accessory/marking/zeng_panels + name = "Zeng-Hu - Full Panel Colors" + icon = 'icons/mob/human_races/markings_zenghu.dmi' + icon_state = "zeng_primary" + icon_blend_mode = ICON_MULTIPLY + is_painted = TRUE + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) + robotize_type_required = PROSTHETIC_ZH - zeng_head - name = "Zeng-Hu - Head Panel Colors" - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/zeng_panels/zeng_head + name = "Zeng-Hu - Head Panel Colors" + body_parts = list(BP_HEAD) - zeng_legs - name = "Zeng-Hu - Leg Panel Colors" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) +/datum/sprite_accessory/marking/zeng_panels/zeng_legs + name = "Zeng-Hu - Leg Panel Colors" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - zeng_arms - name = "Zeng-Hu - Arm Panel Colors" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) +/datum/sprite_accessory/marking/zeng_panels/zeng_arms + name = "Zeng-Hu - Arm Panel Colors" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - zeng_lights - name = "Zeng-Hu - Lights Color" - icon_state = "zeng_lights" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) +/datum/sprite_accessory/marking/zeng_panels/zeng_lights + name = "Zeng-Hu - Lights Color" + icon_state = "zeng_lights" + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) //xion - xion_panels - name = "Xion - Full Panel Colors" - icon = 'icons/mob/human_races/markings_xion.dmi' - icon_state = "xion_primary" - icon_blend_mode = ICON_MULTIPLY - is_painted = TRUE - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) - robotize_type_required = PROSTHETIC_XMG +/datum/sprite_accessory/marking/xion_panels + name = "Xion - Full Panel Colors" + icon = 'icons/mob/human_races/markings_xion.dmi' + icon_state = "xion_primary" + icon_blend_mode = ICON_MULTIPLY + is_painted = TRUE + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM,BP_GROIN,BP_CHEST,BP_HEAD) + robotize_type_required = PROSTHETIC_XMG - xion_head - name = "Xion - Head Panel Colors" - body_parts = list(BP_HEAD) +/datum/sprite_accessory/marking/xion_panels/xion_head + name = "Xion - Head Panel Colors" + body_parts = list(BP_HEAD) - xion_legs - name = "Xion - Leg Panel Colors" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) +/datum/sprite_accessory/marking/xion_panels/xion_legs + name = "Xion - Leg Panel Colors" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - xion_arms - name = "Xion - Arm Panel Colors" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) +/datum/sprite_accessory/marking/xion_panels/xion_arms + name = "Xion - Arm Panel Colors" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - xion_lights - name = "Xion - Lights Color" - icon_state = "xion_lights" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) +/datum/sprite_accessory/marking/xion_panels/xion_lights + name = "Xion - Lights Color" + icon_state = "xion_lights" + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_HEAD) //Tajara - taj_tigerstripes - name = "Tiger Stripes (Tajara)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "tiger" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN) - species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi,/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_tigerstripes + name = "Tiger Stripes (Tajara)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "tiger" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_CHEST,BP_GROIN) + species_allowed = list(/datum/species/unathi,/datum/species/zombie/unathi,/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_paw_socks - name = "Socks Coloration (Tajara)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks" - 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(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_paw_socks + name = "Socks Coloration (Tajara)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks" + 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(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_pawsocks_alternate - name = "Socks Coloration (Tajara Alternate)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks_alternate" - 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_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_pawsocks_alternate + name = "Socks Coloration (Tajara Alternate)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks_alternate" + 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_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_gloves - name = "Socks Coloration (Gloves)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks" - body_parts = list(BP_L_HAND,BP_R_HAND) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_gloves + name = "Socks Coloration (Gloves)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks" + body_parts = list(BP_L_HAND,BP_R_HAND) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_paws - name = "Socks Coloration (Paws)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks" - body_parts = list(BP_L_FOOT,BP_R_FOOT) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_paws + name = "Socks Coloration (Paws)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_glovesfull - name = "Socks Coloration (Full Gloves)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_glovesfull + name = "Socks Coloration (Full Gloves)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_pawsfull - name = "Socks Coloration (Full Paws)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_pawsfull + name = "Socks Coloration (Full Paws)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_glovesfull_alt - name = "Socks Coloration (Full Gloves Alt)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks_alternate" - body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_glovesfull_alt + name = "Socks Coloration (Full Gloves Alt)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks_alternate" + body_parts = list(BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_pawsfull_alt - name = "Socks Coloration (Full Paws Alt)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_pawsocks_alternate" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_pawsfull_alt + name = "Socks Coloration (Full Paws Alt)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_pawsocks_alternate" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_glovesfull_alt2 - name = "Socks Coloration (Full Gloves Alt 2)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor" - body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_glovesfull_alt2 + name = "Socks Coloration (Full Gloves Alt 2)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor" + body_parts = list(BP_L_HAND,BP_R_HAND,BP_L_ARM,BP_R_ARM) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_pawsfull_alt2 - name = "Socks Coloration (Full Paws Alt 2)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor" - body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_pawsfull_alt2 + name = "Socks Coloration (Full Paws Alt 2)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor" + body_parts = list(BP_L_FOOT,BP_R_FOOT,BP_L_LEG,BP_R_LEG) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_bands - name = "Color Bands (Tajara)" - icon_state = "bands" - body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_bands + name = "Color Bands (Tajara)" + icon_state = "bands" + body_parts = list(BP_L_LEG,BP_R_LEG,BP_L_ARM,BP_R_ARM,BP_L_HAND,BP_R_HAND,BP_CHEST,BP_GROIN) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_tigerhead_veryminor - name = "Tiger Stripes (Head, Very Minor)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "tigerheadminor" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) +/datum/sprite_accessory/marking/taj_tigerhead_veryminor + name = "Tiger Stripes (Head, Very Minor)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "tigerheadminor" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/human, /datum/species/human/offworlder, /datum/species/diona, /datum/species/diona/coeu, /datum/species/machine/shell, /datum/species/skrell, /datum/species/skrell/axiori, /datum/species/tajaran, /datum/species/tajaran/zhan_khazan, /datum/species/tajaran/m_sai, /datum/species/unathi) - taj_tigerface - name = "Tiger Stripes (Head, Major)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "tigerface" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_tigerface + name = "Tiger Stripes (Head, Major)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "tigerface" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_nose - name = "Nose Color" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_nose" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_nose + name = "Nose Color" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_nose" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_muzzle - name = "Muzzle Color" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_muzzle" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_muzzle + name = "Muzzle Color" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_muzzle" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_muzzle_female - name = "Muzzle Color (Female)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_muzzle_female" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_muzzle_female + name = "Muzzle Color (Female)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_muzzle_female" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_face_minor - name = "Cheeks Color (Minor)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_face_minor" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_face_minor + name = "Cheeks Color (Minor)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_face_minor" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_face - name = "Cheeks Color" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_face" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_face + name = "Cheeks Color" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_face" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_all - name = "All Tajara Head" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_all" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_all + name = "All Tajara Head" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_all" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_belly_hands_feet_minor - name = "Hands,Feet,Belly Color (Minor)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor" - 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_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_belly_hands_feet_minor + name = "Hands,Feet,Belly Color (Minor)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor" + 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_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_belly_hands_feet_minor_female - name = "Hands,Feet,Belly Color (Female, Minor)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor_female" - 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_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_belly_hands_feet_minor_female + name = "Hands,Feet,Belly Color (Female, Minor)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor_female" + 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_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_belly_male - name = "Belly Color (Male)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor" - body_parts = list(BP_GROIN,BP_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_belly_male + name = "Belly Color (Male)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor" + body_parts = list(BP_GROIN,BP_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_belly_female - name = "Belly Color (Female)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_minor_female" - body_parts = list(BP_GROIN,BP_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_belly_female + name = "Belly Color (Female)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_minor_female" + body_parts = list(BP_GROIN,BP_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_chest_male - name = "Chest,Belly Coloration (Male)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet" - body_parts = list(BP_GROIN,BP_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_chest_male + name = "Chest,Belly Coloration (Male)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet" + body_parts = list(BP_GROIN,BP_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_chest_female - name = "Chest,Belly Coloration (Female)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_bellyhandsfeet_female" - body_parts = list(BP_GROIN,BP_CHEST) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_chest_female + name = "Chest,Belly Coloration (Female)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_bellyhandsfeet_female" + body_parts = list(BP_GROIN,BP_CHEST) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_full - name = "Color Patches (Full)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - 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_CHEST,BP_GROIN) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_full + name = "Color Patches (Full)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + 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_CHEST,BP_GROIN) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_leftleg - name = "Color Patches (Left Leg)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - body_parts = list(BP_L_FOOT,BP_L_LEG) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_leftleg + name = "Color Patches (Left Leg)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + body_parts = list(BP_L_FOOT,BP_L_LEG) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_rightleg - name = "Color Patches (Right Leg)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - body_parts = list(BP_R_FOOT,BP_R_LEG) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_rightleg + name = "Color Patches (Right Leg)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + body_parts = list(BP_R_FOOT,BP_R_LEG) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_leftarm - name = "Color Patches (Left Arm)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - body_parts = list(BP_L_ARM,BP_L_HAND) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_leftarm + name = "Color Patches (Left Arm)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + body_parts = list(BP_L_ARM,BP_L_HAND) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_rightarm - name = "Color Patches (Right Arm)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - body_parts = list(BP_R_ARM,BP_R_HAND) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_rightarm + name = "Color Patches (Right Arm)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + body_parts = list(BP_R_ARM,BP_R_HAND) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patches_chest - name = "Color Patches (Torso)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patches" - body_parts = list(BP_CHEST,BP_GROIN) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patches_chest + name = "Color Patches (Torso)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patches" + body_parts = list(BP_CHEST,BP_GROIN) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) - taj_patchesface - name = "Color Patches (Face)" - icon = "icons/mob/human_races/markings_tajara.dmi" - icon_state = "taj_patchesface" - body_parts = list(BP_HEAD) - species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) +/datum/sprite_accessory/marking/taj_patchesface + name = "Color Patches (Face)" + icon = "icons/mob/human_races/markings_tajara.dmi" + icon_state = "taj_patchesface" + body_parts = list(BP_HEAD) + species_allowed = list(/datum/species/tajaran,/datum/species/tajaran/zhan_khazan,/datum/species/tajaran/m_sai,/datum/species/zombie/tajara) diff --git a/code/modules/mob/abstract/observer/observer.dm b/code/modules/mob/abstract/observer/observer.dm index 3314b5238e3..a31654b68ff 100644 --- a/code/modules/mob/abstract/observer/observer.dm +++ b/code/modules/mob/abstract/observer/observer.dm @@ -912,7 +912,7 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp if (ghostimage) client.images -= ghostimage //remove ourself -mob/abstract/observer/MayRespawn(var/feedback = 0, var/respawn_type = null) +/mob/abstract/observer/MayRespawn(var/feedback = 0, var/respawn_type = null) if(!client) return 0 if(config.antag_hud_restricted && has_enabled_antagHUD == 1) diff --git a/code/modules/mob/living/carbon/human/human_powers.dm b/code/modules/mob/living/carbon/human/human_powers.dm index 62db8efd46e..44efe7c4e36 100644 --- a/code/modules/mob/living/carbon/human/human_powers.dm +++ b/code/modules/mob/living/carbon/human/human_powers.dm @@ -54,7 +54,7 @@ else to_chat(src, "You're already using that style.") -mob/living/carbon/human/proc/change_monitor() +/mob/living/carbon/human/proc/change_monitor() set name = "Change IPC Screen" set desc = "Change the display on your screen." set category = "Abilities" @@ -1262,7 +1262,7 @@ mob/living/carbon/human/proc/change_monitor() if(!istype(M)) to_chat(usr, SPAN_WARNING("You aren't allowed to rename \the [src].")) return - + if(usr == src) to_chat(usr, SPAN_WARNING("You're a simple creature, you can't rename yourself!")) return diff --git a/code/modules/mob/living/carbon/human/species/station/monkey.dm b/code/modules/mob/living/carbon/human/species/station/monkey.dm index 2610478a8a5..411e9be7da6 100644 --- a/code/modules/mob/living/carbon/human/species/station/monkey.dm +++ b/code/modules/mob/living/carbon/human/species/station/monkey.dm @@ -182,12 +182,12 @@ darksight = 8 death_message = "chitters faintly before crumbling to the ground, their eyes dead and lifeless..." halloss_message = "crumbles to the ground, too weak to continue fighting." - list/heat_discomfort_strings = list( + heat_discomfort_strings = list( "Your blood feels like its boiling in the heat.", "You feel uncomfortably warm.", "Your carapace feels hot as the sun." ) - list/cold_discomfort_strings = list( + cold_discomfort_strings = list( "You chitter in the cold.", "You shiver suddenly.", "Your carapace is ice to the touch." diff --git a/code/modules/mob/living/say.dm b/code/modules/mob/living/say.dm index 41e41c565d0..a29445f43a2 100644 --- a/code/modules/mob/living/say.dm +++ b/code/modules/mob/living/say.dm @@ -64,7 +64,7 @@ var/list/department_radio_keys = list( var/list/channel_to_radio_key = new -proc/get_radio_key_from_channel(var/channel) +/proc/get_radio_key_from_channel(var/channel) var/key = channel_to_radio_key[channel] if(!key) for(var/radio_key in department_radio_keys) diff --git a/code/modules/mob/living/simple_animal/worm.dm b/code/modules/mob/living/simple_animal/worm.dm index caa0a0e53a4..80d670e7d09 100644 --- a/code/modules/mob/living/simple_animal/worm.dm +++ b/code/modules/mob/living/simple_animal/worm.dm @@ -47,157 +47,157 @@ var/atom/currentlyEating //what the worm is currently eating var/eatingDuration = 0 //how long he's been eating it for - head - name = "space worm head" - icon_state = "spacewormhead0" - icon_living = "spacewormhead0" - icon_dead = "spacewormheaddead" +/mob/living/simple_animal/space_worm/Life() + ..() - maxHealth = 20 - health = 20 + if(next && !(next in view(src,1))) + Detach() - melee_damage_lower = 10 - melee_damage_upper = 15 - attacktext = "bitten" - - animate_movement = SLIDE_STEPS - - New(var/location, var/segments = 6) - ..() - - var/mob/living/simple_animal/space_worm/current = src - - for(var/i = 1 to segments) - var/mob/living/simple_animal/space_worm/newSegment = new /mob/living/simple_animal/space_worm(loc) - current.Attach(newSegment) - current = newSegment - - update_icon() - if(stat == CONSCIOUS || stat == UNCONSCIOUS) - icon_state = "spacewormhead[previous?1:0]" - if(previous) - set_dir(get_dir(previous,src)) - else - icon_state = "spacewormheaddead" - - Life() - ..() - - if(next && !(next in view(src,1))) - Detach() - - if(stat == DEAD) //dead chunks fall off and die immediately - if(previous) - previous.Detach() - if(next) - Detach(1) - - if(prob(stomachProcessProbability)) - ProcessStomach() - - update_icon() - - return - - Destroy() //if a chunk a destroyed, make a new worm out of the split halves + if(stat == DEAD) //dead chunks fall off and die immediately if(previous) previous.Detach() - return ..() + if(next) + Detach(1) - Move() - var/attachementNextPosition = loc - if(..()) - if(previous) - previous.Move(attachementNextPosition) - update_icon() + if(prob(stomachProcessProbability)) + ProcessStomach() - Collide(atom/obstacle) - . = ..() - if(currentlyEating != obstacle) - currentlyEating = obstacle - eatingDuration = 0 + update_icon() - if(!AttemptToEat(obstacle)) - eatingDuration++ - else - currentlyEating = null - eatingDuration = 0 + return - update_icon() //only for the sake of consistency with the other update icon procs - if(stat != DEAD) - if(previous) //midsection - icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below - else //tail - icon_state = "spacewormtail" - set_dir(get_dir(src,next)) //next will always be present since it's not a head and if it's dead, it goes in the other if branch - else - icon_state = "spacewormdead" - - return - - proc/AttemptToEat(var/atom/target) - if(istype(target,/turf/simulated/wall)) - var/turf/simulated/wall/W = target - if((!W.reinf_material && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one - W.dismantle_wall() - return 1 - else if(istype(target,/atom/movable)) - if(istype(target,/mob) || eatingDuration >= 50) //5 ticks to eat stuff like airlocks - var/atom/movable/objectOrMob = target - contents += objectOrMob - return 1 - - return 0 - - proc/Attach(var/mob/living/simple_animal/space_worm/attachement) - if(!attachement) - return - - previous = attachement - attachement.next = src - - return - - proc/Detach(die = 0) - var/mob/living/simple_animal/space_worm/newHead = new /mob/living/simple_animal/space_worm/head(loc,0) - var/mob/living/simple_animal/space_worm/newHeadPrevious = previous - - previous = null //so that no extra heads are spawned - - newHead.Attach(newHeadPrevious) - - if(die) - newHead.death() - - qdel(src) - - proc/ProcessStomach() - for(var/atom/movable/stomachContent in contents) - if(prob(digestionProbability)) - if(istype(stomachContent,/obj/item/stack)) //converts to plasma, keeping the stack value - if(!istype(stomachContent,/obj/item/stack/material/phoron)) - var/obj/item/stack/oldStack = stomachContent - new /obj/item/stack/material/phoron(src, oldStack.get_amount()) - qdel(oldStack) - continue - else if(istype(stomachContent,/obj/item)) //converts to plasma, keeping the w_class - var/obj/item/oldItem = stomachContent - new /obj/item/stack/material/phoron(src, oldItem.w_class) - qdel(oldItem) - continue - else - new /obj/item/stack/material/phoron(src, flatPlasmaValue) //just flat amount - qdel(stomachContent) - continue +/mob/living/simple_animal/space_worm/Destroy() //if a chunk a destroyed, make a new worm out of the split halves + if(previous) + previous.Detach() + return ..() +/mob/living/simple_animal/space_worm/Move() + var/attachementNextPosition = loc + if(..()) if(previous) - for(var/atom/movable/stomachContent in contents) //transfer it along the digestive tract - previous.contents += stomachContent - else - for(var/atom/movable/stomachContent in contents) //or poop it out - loc.contents += stomachContent + previous.Move(attachementNextPosition) + update_icon() +/mob/living/simple_animal/space_worm/Collide(atom/obstacle) + . = ..() + if(currentlyEating != obstacle) + currentlyEating = obstacle + eatingDuration = 0 + + if(!AttemptToEat(obstacle)) + eatingDuration++ + else + currentlyEating = null + eatingDuration = 0 + +/mob/living/simple_animal/space_worm/update_icon() //only for the sake of consistency with the other update icon procs + if(stat != DEAD) + if(previous) //midsection + icon_state = "spaceworm[get_dir(src,previous) | get_dir(src,next)]" //see 3 lines below + else //tail + icon_state = "spacewormtail" + set_dir(get_dir(src,next)) //next will always be present since it's not a head and if it's dead, it goes in the other if branch + else + icon_state = "spacewormdead" + + return + +/mob/living/simple_animal/space_worm/proc/AttemptToEat(var/atom/target) + if(istype(target,/turf/simulated/wall)) + var/turf/simulated/wall/W = target + if((!W.reinf_material && eatingDuration >= 100) || eatingDuration >= 200) //need 20 ticks to eat an rwall, 10 for a regular one + W.dismantle_wall() + return 1 + else if(istype(target,/atom/movable)) + if(istype(target,/mob) || eatingDuration >= 50) //5 ticks to eat stuff like airlocks + var/atom/movable/objectOrMob = target + contents += objectOrMob + return 1 + + return 0 + +/mob/living/simple_animal/space_worm/proc/Attach(var/mob/living/simple_animal/space_worm/attachement) + if(!attachement) return + previous = attachement + attachement.next = src + + return + +/mob/living/simple_animal/space_worm/proc/Detach(die = 0) + var/mob/living/simple_animal/space_worm/newHead = new /mob/living/simple_animal/space_worm/head(loc,0) + var/mob/living/simple_animal/space_worm/newHeadPrevious = previous + + previous = null //so that no extra heads are spawned + + newHead.Attach(newHeadPrevious) + + if(die) + newHead.death() + + qdel(src) + +/mob/living/simple_animal/space_worm/proc/ProcessStomach() + for(var/atom/movable/stomachContent in contents) + if(prob(digestionProbability)) + if(istype(stomachContent,/obj/item/stack)) //converts to plasma, keeping the stack value + if(!istype(stomachContent,/obj/item/stack/material/phoron)) + var/obj/item/stack/oldStack = stomachContent + new /obj/item/stack/material/phoron(src, oldStack.get_amount()) + qdel(oldStack) + continue + else if(istype(stomachContent,/obj/item)) //converts to plasma, keeping the w_class + var/obj/item/oldItem = stomachContent + new /obj/item/stack/material/phoron(src, oldItem.w_class) + qdel(oldItem) + continue + else + new /obj/item/stack/material/phoron(src, flatPlasmaValue) //just flat amount + qdel(stomachContent) + continue + + if(previous) + for(var/atom/movable/stomachContent in contents) //transfer it along the digestive tract + previous.contents += stomachContent + else + for(var/atom/movable/stomachContent in contents) //or poop it out + loc.contents += stomachContent + + return + /mob/living/simple_animal/space_worm/can_name(var/mob/living/M) return FALSE + +/mob/living/simple_animal/space_worm/head + name = "space worm head" + icon_state = "spacewormhead0" + icon_living = "spacewormhead0" + icon_dead = "spacewormheaddead" + + maxHealth = 20 + health = 20 + + melee_damage_lower = 10 + melee_damage_upper = 15 + attacktext = "bitten" + + animate_movement = SLIDE_STEPS + +/mob/living/simple_animal/space_worm/head/New(var/location, var/segments = 6) + ..() + + var/mob/living/simple_animal/space_worm/current = src + + for(var/i = 1 to segments) + var/mob/living/simple_animal/space_worm/newSegment = new /mob/living/simple_animal/space_worm(loc) + current.Attach(newSegment) + current = newSegment + +/mob/living/simple_animal/space_worm/head/update_icon() + if(stat == CONSCIOUS || stat == UNCONSCIOUS) + icon_state = "spacewormhead[previous?1:0]" + if(previous) + set_dir(get_dir(previous,src)) + else + icon_state = "spacewormheaddead" diff --git a/code/modules/mob/mob_helpers.dm b/code/modules/mob/mob_helpers.dm index 8ed0962f082..ea2b0e6fe7a 100644 --- a/code/modules/mob/mob_helpers.dm +++ b/code/modules/mob/mob_helpers.dm @@ -200,27 +200,27 @@ return 1 return 0 -proc/isdeaf(A) +/proc/isdeaf(A) if(istype(A, /mob)) var/mob/M = A return M.ear_deaf return 0 -proc/iscuffed(A) +/proc/iscuffed(A) if(istype(A, /mob/living/carbon)) var/mob/living/carbon/C = A if(C.handcuffed) return 1 return 0 -proc/hassensorlevel(A, var/level) +/proc/hassensorlevel(A, var/level) var/mob/living/carbon/human/H = A if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = H.w_uniform return U.sensor_mode >= level return 0 -proc/getsensorlevel(A) +/proc/getsensorlevel(A) var/mob/living/carbon/human/H = A if(istype(H) && istype(H.w_uniform, /obj/item/clothing/under)) var/obj/item/clothing/under/U = H.w_uniform @@ -371,7 +371,7 @@ var/list/global/organ_rel_size = list( p++ return t -proc/slur(phrase, strength = 100) +/proc/slur(phrase, strength = 100) phrase = html_decode(phrase) var/leng=length(phrase) var/counter=length(phrase) @@ -397,7 +397,7 @@ proc/slur(phrase, strength = 100) newphrase+="[newletter]";counter-=1 return newphrase -proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added +/proc/Gibberish(t, p)//t is the inputted message, and any value higher than 70 for p will cause letters to be replaced instead of added /* Turn text into complete gibberish! */ var/returntext = "" for(var/i = 1, i <= length(t), i++) diff --git a/code/modules/multiz/_stubs.dm b/code/modules/multiz/_stubs.dm index 4c6e63cb7e6..6efa98ecd1d 100644 --- a/code/modules/multiz/_stubs.dm +++ b/code/modules/multiz/_stubs.dm @@ -9,8 +9,11 @@ // FOR THE LOVE OF GOD USE THESE. DO NOT FUCKING SPAGHETTIFY THIS. // Use the Has*() functions if you ONLY need to check. // If you need to do something, use Get*(). -HasAbove(var/z) -HasBelow(var/z) +/HasAbove(var/z) + +/HasBelow(var/z) + // These give either the turf or null. -GetAbove(var/atom/atom) -GetBelow(var/atom/atom) \ No newline at end of file +/GetAbove(var/atom/atom) + +/GetBelow(var/atom/atom) diff --git a/code/modules/multiz/disabled.dm b/code/modules/multiz/disabled.dm index b91fb789319..5c99bcb370c 100644 --- a/code/modules/multiz/disabled.dm +++ b/code/modules/multiz/disabled.dm @@ -1,10 +1,10 @@ -proc/HasAbove(var/z) +/proc/HasAbove(var/z) return 0 -proc/HasBelow(var/z) +/proc/HasBelow(var/z) return 0 // These give either the turf or null. -proc/GetAbove(var/turf/turf) +/proc/GetAbove(var/turf/turf) + return null +/proc/GetBelow(var/turf/turf) return null -proc/GetBelow(var/turf/turf) - return null \ No newline at end of file diff --git a/code/modules/organs/blood.dm b/code/modules/organs/blood.dm index b98e79edc97..a25b842308d 100644 --- a/code/modules/organs/blood.dm +++ b/code/modules/organs/blood.dm @@ -176,7 +176,7 @@ vessel.add_reagent(/singleton/reagent/blood, amount, REAGENT_DATA(donor, /singleton/reagent/blood), temperature = species?.body_temperature) ..() -proc/blood_incompatible(donor,receiver,donor_species,receiver_species) +/proc/blood_incompatible(donor,receiver,donor_species,receiver_species) if(!donor || !receiver) return 0 if(donor_species && receiver_species) diff --git a/code/modules/organs/pain.dm b/code/modules/organs/pain.dm index b99adac92db..cce6649c855 100644 --- a/code/modules/organs/pain.dm +++ b/code/modules/organs/pain.dm @@ -3,8 +3,8 @@ animate(pain, alpha = target, time = 15, easing = ELASTIC_EASING) animate(pain, alpha = 0, time = 20) -mob/var/last_pain_message = "" -mob/var/next_pain_time = 0 +/mob/var/last_pain_message = "" +/mob/var/next_pain_time = 0 // message is the custom message to be displayed // power decides how much painkillers will stop the message diff --git a/code/modules/organs/subtypes/vaurca.dm b/code/modules/organs/subtypes/vaurca.dm index 9c7f57eb3de..fbf8b734321 100644 --- a/code/modules/organs/subtypes/vaurca.dm +++ b/code/modules/organs/subtypes/vaurca.dm @@ -69,7 +69,7 @@ parent_organ = BP_HEAD robotic = ROBOTIC_MECHANICAL -obj/item/organ/vaurca/neuralsocket/process() +/obj/item/organ/vaurca/neuralsocket/process() if (is_broken()) if (all_languages[LANGUAGE_VAURCA] in owner.languages) owner.remove_language(LANGUAGE_VAURCA) diff --git a/code/modules/organs/wound.dm b/code/modules/organs/wound.dm index bdfeda2dca2..7e371647c80 100644 --- a/code/modules/organs/wound.dm +++ b/code/modules/organs/wound.dm @@ -288,7 +288,7 @@ max_bleeding_stage = 3 stages = list("big gaping wound" = 60, "healing gaping wound" = 40, "large blood soaked clot" = 25, "large angry scar" = 10, "large straight scar" = 0) -datum/wound/cut/massive +/datum/wound/cut/massive max_bleeding_stage = 3 stages = list("massive wound" = 70, "massive healing wound" = 50, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0) @@ -317,7 +317,7 @@ datum/wound/cut/massive max_bleeding_stage = 3 stages = list("big gaping hole" = 50, "healing gaping hole" = 20, "large blood soaked clot" = 15, "large angry scar" = 10, "large round scar" = 0) -datum/wound/puncture/massive +/datum/wound/puncture/massive max_bleeding_stage = 3 stages = list("massive wound" = 60, "massive healing wound" = 30, "massive blood soaked clot" = 25, "massive angry scar" = 10, "massive jagged scar" = 0) @@ -384,4 +384,4 @@ datum/wound/puncture/massive ..(damage_amt) /datum/wound/lost_limb/can_merge(var/datum/wound/other) - return 0 //cannot be merged \ No newline at end of file + return 0 //cannot be merged diff --git a/code/modules/overmap/_defines.dm b/code/modules/overmap/_defines.dm index ee70f55f264..cc66e967a43 100644 --- a/code/modules/overmap/_defines.dm +++ b/code/modules/overmap/_defines.dm @@ -55,7 +55,7 @@ var/list/moving_levels = list() //Proc to 'move' stars in spess //yes it looks ugly, but it should only fire when state actually change. //null direction stops movement -proc/toggle_move_stars(zlevel, direction) +/proc/toggle_move_stars(zlevel, direction) if(!zlevel) return diff --git a/code/modules/overmap/spacetravel.dm b/code/modules/overmap/spacetravel.dm index 48ae90b7bc1..64a39c546b7 100644 --- a/code/modules/overmap/spacetravel.dm +++ b/code/modules/overmap/spacetravel.dm @@ -29,7 +29,7 @@ var/list/cached_space = list() return 0 return 1 -proc/get_deepspace(x,y) +/proc/get_deepspace(x,y) var/obj/effect/overmap/visitable/sector/temporary/res = locate(x,y,current_map.overmap_z) if(istype(res)) return res @@ -54,7 +54,7 @@ proc/get_deepspace(x,y) /mob/living/carbon/human/lost_in_space() return isnull(client) && stat == DEAD -proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) +/proc/overmap_spacetravel(var/turf/space/T, var/atom/movable/A) if (!T || !A) return diff --git a/code/modules/paperwork/silicon_photography.dm b/code/modules/paperwork/silicon_photography.dm index 34cbda2e91c..6184e379513 100644 --- a/code/modules/paperwork/silicon_photography.dm +++ b/code/modules/paperwork/silicon_photography.dm @@ -143,7 +143,7 @@ deletepicture(src) -obj/item/device/camera/siliconcam/proc/getsource() +/obj/item/device/camera/siliconcam/proc/getsource() if(istype(src.loc, /mob/living/silicon/ai)) return src diff --git a/code/modules/power/antimatter/shielding.dm b/code/modules/power/antimatter/shielding.dm index b8f70eaab9e..0b161c51f12 100644 --- a/code/modules/power/antimatter/shielding.dm +++ b/code/modules/power/antimatter/shielding.dm @@ -1,5 +1,5 @@ //like orange but only checks north/south/east/west for one step -proc/cardinalrange(var/center) +/proc/cardinalrange(var/center) var/list/things = list() for(var/direction in cardinal) var/turf/T = get_step(center, direction) diff --git a/code/modules/power/cable.dm b/code/modules/power/cable.dm index d009687e38d..6bed4f1ee1d 100644 --- a/code/modules/power/cable.dm +++ b/code/modules/power/cable.dm @@ -225,7 +225,7 @@ By design, d1 is the smallest direction and d2 is the highest qdel(src) return -obj/structure/cable/proc/cableColor(var/colorC) +/obj/structure/cable/proc/cableColor(var/colorC) var/color_n = "#DD0000" if(colorC) color_n = colorC diff --git a/code/modules/projectiles/guns/bang/pistol.dm b/code/modules/projectiles/guns/bang/pistol.dm index 5f2ff92b5b7..0b089b23bfc 100644 --- a/code/modules/projectiles/guns/bang/pistol.dm +++ b/code/modules/projectiles/guns/bang/pistol.dm @@ -57,7 +57,7 @@ pixel_offset_x = -4 pixel_offset_y = 15 -obj/item/gun/bang/deagle +/obj/item/gun/bang/deagle name = ".50 magnum pistol" desc = "A robust handgun that uses .50 AE ammo." icon = 'icons/obj/guns/deagle.dmi' diff --git a/code/modules/projectiles/guns/energy/laser.dm b/code/modules/projectiles/guns/energy/laser.dm index 54da447bc47..e19ce245ab7 100644 --- a/code/modules/projectiles/guns/energy/laser.dm +++ b/code/modules/projectiles/guns/energy/laser.dm @@ -35,7 +35,7 @@ desc = "A modified version of the HI G40E, this one fires less concentrated energy bolts designed for target practice." projectile_type = /obj/item/projectile/beam/practice -obj/item/gun/energy/retro +/obj/item/gun/energy/retro name = "retro laser" icon = 'icons/obj/guns/retro.dmi' icon_state = "retro" @@ -265,4 +265,4 @@ obj/item/gun/energy/retro /obj/item/gun/energy/lasertag/red icon = 'icons/obj/guns/redtag.dmi' icon_state = "redtag" - item_state = "redtag" \ No newline at end of file + item_state = "redtag" diff --git a/code/modules/projectiles/targeting/targeting_overlay.dm b/code/modules/projectiles/targeting/targeting_overlay.dm index 93e247d814b..aac547cff96 100644 --- a/code/modules/projectiles/targeting/targeting_overlay.dm +++ b/code/modules/projectiles/targeting/targeting_overlay.dm @@ -90,7 +90,7 @@ owner = null return ..() -obj/aiming_overlay/proc/update_aiming_deferred() +/obj/aiming_overlay/proc/update_aiming_deferred() set waitfor = 0 sleep(0) update_aiming() diff --git a/code/modules/reagents/dispenser/cartridge_presets.dm b/code/modules/reagents/dispenser/cartridge_presets.dm index a2e7590a884..8b620219d57 100644 --- a/code/modules/reagents/dispenser/cartridge_presets.dm +++ b/code/modules/reagents/dispenser/cartridge_presets.dm @@ -1,124 +1,331 @@ /obj/item/reagent_containers/chem_disp_cartridge - small - volume = CARTRIDGE_VOLUME_SMALL +/obj/item/reagent_containers/chem_disp_cartridge/small + volume = CARTRIDGE_VOLUME_SMALL - medium - volume = CARTRIDGE_VOLUME_MEDIUM +/obj/item/reagent_containers/chem_disp_cartridge/medium + volume = CARTRIDGE_VOLUME_MEDIUM - // Multiple - sugar spawn_reagent = /singleton/reagent/sugar - water spawn_reagent = /singleton/reagent/water +// Multiple +/obj/item/reagent_containers/chem_disp_cartridge/sugar + spawn_reagent = /singleton/reagent/sugar + +/obj/item/reagent_containers/chem_disp_cartridge/water + spawn_reagent = /singleton/reagent/water + +// Chemistry +/obj/item/reagent_containers/chem_disp_cartridge/acetone + spawn_reagent = /singleton/reagent/acetone + +/obj/item/reagent_containers/chem_disp_cartridge/aluminum + spawn_reagent = /singleton/reagent/aluminum + +/obj/item/reagent_containers/chem_disp_cartridge/ammonia + spawn_reagent = /singleton/reagent/ammonia + +/obj/item/reagent_containers/chem_disp_cartridge/butanol + spawn_reagent = /singleton/reagent/alcohol/butanol + +/obj/item/reagent_containers/chem_disp_cartridge/carbon + spawn_reagent = /singleton/reagent/carbon + +/obj/item/reagent_containers/chem_disp_cartridge/copper + spawn_reagent = /singleton/reagent/copper + +/obj/item/reagent_containers/chem_disp_cartridge/ethanol + spawn_reagent = /singleton/reagent/alcohol + +/obj/item/reagent_containers/chem_disp_cartridge/hclacid + spawn_reagent = /singleton/reagent/acid/hydrochloric + +/obj/item/reagent_containers/chem_disp_cartridge/hydrazine + spawn_reagent = /singleton/reagent/hydrazine + +/obj/item/reagent_containers/chem_disp_cartridge/iron + spawn_reagent = /singleton/reagent/iron + +/obj/item/reagent_containers/chem_disp_cartridge/lithium + spawn_reagent = /singleton/reagent/lithium + +/obj/item/reagent_containers/chem_disp_cartridge/mercury + spawn_reagent = /singleton/reagent/mercury + +/obj/item/reagent_containers/chem_disp_cartridge/phosphorus + spawn_reagent = /singleton/reagent/phosphorus + +/obj/item/reagent_containers/chem_disp_cartridge/potassium + spawn_reagent = /singleton/reagent/potassium + +/obj/item/reagent_containers/chem_disp_cartridge/radium + spawn_reagent = /singleton/reagent/radium + +/obj/item/reagent_containers/chem_disp_cartridge/radium/small + volume = CARTRIDGE_VOLUME_SMALL //For bar drinks + +/obj/item/reagent_containers/chem_disp_cartridge/sacid + spawn_reagent = /singleton/reagent/acid + +/obj/item/reagent_containers/chem_disp_cartridge/silicon + spawn_reagent = /singleton/reagent/silicon + +/obj/item/reagent_containers/chem_disp_cartridge/sodium + spawn_reagent = /singleton/reagent/sodium + +/obj/item/reagent_containers/chem_disp_cartridge/sulfur + spawn_reagent = /singleton/reagent/sulfur + +/obj/item/reagent_containers/chem_disp_cartridge/tungsten + spawn_reagent = /singleton/reagent/tungsten - // Chemistry - acetone spawn_reagent = /singleton/reagent/acetone - aluminum spawn_reagent = /singleton/reagent/aluminum - ammonia spawn_reagent = /singleton/reagent/ammonia - butanol spawn_reagent = /singleton/reagent/alcohol/butanol - carbon spawn_reagent = /singleton/reagent/carbon - copper spawn_reagent = /singleton/reagent/copper - ethanol spawn_reagent = /singleton/reagent/alcohol - hclacid spawn_reagent = /singleton/reagent/acid/hydrochloric - hydrazine spawn_reagent = /singleton/reagent/hydrazine - iron spawn_reagent = /singleton/reagent/iron - lithium spawn_reagent = /singleton/reagent/lithium - mercury spawn_reagent = /singleton/reagent/mercury - phosphorus spawn_reagent = /singleton/reagent/phosphorus - potassium spawn_reagent = /singleton/reagent/potassium - radium spawn_reagent = /singleton/reagent/radium - radium/small volume = CARTRIDGE_VOLUME_SMALL //For bar drinks - sacid spawn_reagent = /singleton/reagent/acid - silicon spawn_reagent = /singleton/reagent/silicon - sodium spawn_reagent = /singleton/reagent/sodium - sulfur spawn_reagent = /singleton/reagent/sulfur - tungsten spawn_reagent = /singleton/reagent/tungsten // Bar, alcoholic - ale spawn_reagent = /singleton/reagent/alcohol/ale - beer spawn_reagent = /singleton/reagent/alcohol/beer - champagne spawn_reagent = /singleton/reagent/alcohol/champagne - cognac spawn_reagent = /singleton/reagent/alcohol/cognac - gin spawn_reagent = /singleton/reagent/alcohol/gin - kahlua spawn_reagent = /singleton/reagent/alcohol/coffee/kahlua - mead spawn_reagent = /singleton/reagent/alcohol/mead - rum spawn_reagent = /singleton/reagent/alcohol/rum - tequila spawn_reagent = /singleton/reagent/alcohol/tequila - vermouth spawn_reagent = /singleton/reagent/alcohol/vermouth - vodka spawn_reagent = /singleton/reagent/alcohol/vodka - whiskey spawn_reagent = /singleton/reagent/alcohol/whiskey - wine spawn_reagent = /singleton/reagent/alcohol/wine +/obj/item/reagent_containers/chem_disp_cartridge/ale + spawn_reagent = /singleton/reagent/alcohol/ale + +/obj/item/reagent_containers/chem_disp_cartridge/beer + spawn_reagent = /singleton/reagent/alcohol/beer + +/obj/item/reagent_containers/chem_disp_cartridge/champagne + spawn_reagent = /singleton/reagent/alcohol/champagne + +/obj/item/reagent_containers/chem_disp_cartridge/cognac + spawn_reagent = /singleton/reagent/alcohol/cognac + +/obj/item/reagent_containers/chem_disp_cartridge/gin + spawn_reagent = /singleton/reagent/alcohol/gin + +/obj/item/reagent_containers/chem_disp_cartridge/kahlua + spawn_reagent = /singleton/reagent/alcohol/coffee/kahlua + +/obj/item/reagent_containers/chem_disp_cartridge/mead + spawn_reagent = /singleton/reagent/alcohol/mead + +/obj/item/reagent_containers/chem_disp_cartridge/rum + spawn_reagent = /singleton/reagent/alcohol/rum + +/obj/item/reagent_containers/chem_disp_cartridge/tequila + spawn_reagent = /singleton/reagent/alcohol/tequila + +/obj/item/reagent_containers/chem_disp_cartridge/vermouth + spawn_reagent = /singleton/reagent/alcohol/vermouth + +/obj/item/reagent_containers/chem_disp_cartridge/vodka + spawn_reagent = /singleton/reagent/alcohol/vodka + +/obj/item/reagent_containers/chem_disp_cartridge/whiskey + spawn_reagent = /singleton/reagent/alcohol/whiskey + +/obj/item/reagent_containers/chem_disp_cartridge/wine + spawn_reagent = /singleton/reagent/alcohol/wine + // Bar, soft - apple spawn_reagent = /singleton/reagent/drink/applejuice - banana spawn_reagent = /singleton/reagent/drink/banana - berryjuice spawn_reagent = /singleton/reagent/drink/berryjuice - brownstar spawn_reagent = /singleton/reagent/drink/brownstar - clean_kois spawn_reagent = /singleton/reagent/kois/clean - cola spawn_reagent = /singleton/reagent/drink/space_cola - dr_gibb spawn_reagent = /singleton/reagent/drink/dr_gibb - grenadine spawn_reagent = /singleton/reagent/drink/grenadine - ice spawn_reagent = /singleton/reagent/drink/ice - icetea spawn_reagent = /singleton/reagent/drink/icetea - lemon_lime spawn_reagent = /singleton/reagent/drink/lemon_lime - lime spawn_reagent = /singleton/reagent/drink/limejuice - orange spawn_reagent = /singleton/reagent/drink/orangejuice - root_beer spawn_reagent = /singleton/reagent/drink/root_beer - smw spawn_reagent = /singleton/reagent/drink/spacemountainwind - sodawater spawn_reagent = /singleton/reagent/drink/sodawater - spaceup spawn_reagent = /singleton/reagent/drink/spaceup - tea spawn_reagent = /singleton/reagent/drink/tea - tonic spawn_reagent = /singleton/reagent/drink/tonic - watermelon spawn_reagent = /singleton/reagent/drink/watermelonjuice +/obj/item/reagent_containers/chem_disp_cartridge/apple + spawn_reagent = /singleton/reagent/drink/applejuice + +/obj/item/reagent_containers/chem_disp_cartridge/banana + spawn_reagent = /singleton/reagent/drink/banana + +/obj/item/reagent_containers/chem_disp_cartridge/berryjuice + spawn_reagent = /singleton/reagent/drink/berryjuice + +/obj/item/reagent_containers/chem_disp_cartridge/brownstar + spawn_reagent = /singleton/reagent/drink/brownstar + +/obj/item/reagent_containers/chem_disp_cartridge/clean_kois + spawn_reagent = /singleton/reagent/kois/clean + +/obj/item/reagent_containers/chem_disp_cartridge/cola + spawn_reagent = /singleton/reagent/drink/space_cola + +/obj/item/reagent_containers/chem_disp_cartridge/dr_gibb + spawn_reagent = /singleton/reagent/drink/dr_gibb + +/obj/item/reagent_containers/chem_disp_cartridge/grenadine + spawn_reagent = /singleton/reagent/drink/grenadine + +/obj/item/reagent_containers/chem_disp_cartridge/ice + spawn_reagent = /singleton/reagent/drink/ice + +/obj/item/reagent_containers/chem_disp_cartridge/icetea + spawn_reagent = /singleton/reagent/drink/icetea + +/obj/item/reagent_containers/chem_disp_cartridge/lemon_lime + spawn_reagent = /singleton/reagent/drink/lemon_lime + +/obj/item/reagent_containers/chem_disp_cartridge/lime + spawn_reagent = /singleton/reagent/drink/limejuice + +/obj/item/reagent_containers/chem_disp_cartridge/orange + spawn_reagent = /singleton/reagent/drink/orangejuice + +/obj/item/reagent_containers/chem_disp_cartridge/root_beer + spawn_reagent = /singleton/reagent/drink/root_beer + +/obj/item/reagent_containers/chem_disp_cartridge/smw + spawn_reagent = /singleton/reagent/drink/spacemountainwind + +/obj/item/reagent_containers/chem_disp_cartridge/sodawater + spawn_reagent = /singleton/reagent/drink/sodawater + +/obj/item/reagent_containers/chem_disp_cartridge/spaceup + spawn_reagent = /singleton/reagent/drink/spaceup + +/obj/item/reagent_containers/chem_disp_cartridge/tea + spawn_reagent = /singleton/reagent/drink/tea + +/obj/item/reagent_containers/chem_disp_cartridge/tonic + spawn_reagent = /singleton/reagent/drink/tonic + +/obj/item/reagent_containers/chem_disp_cartridge/watermelon + spawn_reagent = /singleton/reagent/drink/watermelonjuice + // Bar, coffee and tea - chaitea spawn_reagent = /singleton/reagent/drink/tea/chaitea - ciderhot spawn_reagent = /singleton/reagent/drink/ciderhot - coffee spawn_reagent = /singleton/reagent/drink/coffee - cream spawn_reagent = /singleton/reagent/drink/milk/cream - espresso spawn_reagent = /singleton/reagent/drink/coffee/espresso - fatshouter_milk spawn_reagent = /singleton/reagent/drink/milk/adhomai - greentea spawn_reagent = /singleton/reagent/drink/tea/greentea - hot_coco spawn_reagent = /singleton/reagent/drink/hot_coco - milk spawn_reagent = /singleton/reagent/drink/milk - soymilk spawn_reagent = /singleton/reagent/drink/milk/soymilk +/obj/item/reagent_containers/chem_disp_cartridge/chaitea + spawn_reagent = /singleton/reagent/drink/tea/chaitea - // Bar, misc. mixed drink ingredients - uranium spawn_reagent = /singleton/reagent/uranium - uranium/small volume = CARTRIDGE_VOLUME_SMALL - toothpaste spawn_reagent = /singleton/reagent/drink/toothpaste +/obj/item/reagent_containers/chem_disp_cartridge/ciderhot + spawn_reagent = /singleton/reagent/drink/ciderhot + +/obj/item/reagent_containers/chem_disp_cartridge/coffee + spawn_reagent = /singleton/reagent/drink/coffee + +/obj/item/reagent_containers/chem_disp_cartridge/cream + spawn_reagent = /singleton/reagent/drink/milk/cream + +/obj/item/reagent_containers/chem_disp_cartridge/espresso + spawn_reagent = /singleton/reagent/drink/coffee/espresso + +/obj/item/reagent_containers/chem_disp_cartridge/fatshouter_milk + spawn_reagent = /singleton/reagent/drink/milk/adhomai + +/obj/item/reagent_containers/chem_disp_cartridge/greentea + spawn_reagent = /singleton/reagent/drink/tea/greentea + +/obj/item/reagent_containers/chem_disp_cartridge/hot_coco + spawn_reagent = /singleton/reagent/drink/hot_coco + +/obj/item/reagent_containers/chem_disp_cartridge/milk + spawn_reagent = /singleton/reagent/drink/milk + +/obj/item/reagent_containers/chem_disp_cartridge/soymilk + spawn_reagent = /singleton/reagent/drink/milk/soymilk + + +// Bar, misc. mixed drink ingredients +/obj/item/reagent_containers/chem_disp_cartridge/uranium + spawn_reagent = /singleton/reagent/uranium + +/obj/item/reagent_containers/chem_disp_cartridge/uranium/small + volume = CARTRIDGE_VOLUME_SMALL + +/obj/item/reagent_containers/chem_disp_cartridge/toothpaste + spawn_reagent = /singleton/reagent/drink/toothpaste + + +// ERT +/obj/item/reagent_containers/chem_disp_cartridge/alkysine + spawn_reagent = /singleton/reagent/alkysine + +/obj/item/reagent_containers/chem_disp_cartridge/arithrazine + spawn_reagent = /singleton/reagent/arithrazine + +/obj/item/reagent_containers/chem_disp_cartridge/cetahydramine + spawn_reagent = /singleton/reagent/cetahydramine + +/obj/item/reagent_containers/chem_disp_cartridge/bicaridine + spawn_reagent = /singleton/reagent/bicaridine + +/obj/item/reagent_containers/chem_disp_cartridge/chloral + spawn_reagent = /singleton/reagent/polysomnine + +/obj/item/reagent_containers/chem_disp_cartridge/clonexadone + spawn_reagent = /singleton/reagent/clonexadone + +/obj/item/reagent_containers/chem_disp_cartridge/coughsyrup + spawn_reagent = /singleton/reagent/antidexafen + +/obj/item/reagent_containers/chem_disp_cartridge/cryoxadone + spawn_reagent = /singleton/reagent/cryoxadone + +/obj/item/reagent_containers/chem_disp_cartridge/dermaline + spawn_reagent = /singleton/reagent/dermaline + +/obj/item/reagent_containers/chem_disp_cartridge/dexalin + spawn_reagent = /singleton/reagent/dexalin + +/obj/item/reagent_containers/chem_disp_cartridge/dexalin/small + volume = CARTRIDGE_VOLUME_SMALL // For the medicine cartridge crate, so it's not too easy to get large amounts of dexalin + +/obj/item/reagent_containers/chem_disp_cartridge/dexalin_p + spawn_reagent = /singleton/reagent/dexalin/plus + +/obj/item/reagent_containers/chem_disp_cartridge/dylovene + spawn_reagent = /singleton/reagent/dylovene + +/obj/item/reagent_containers/chem_disp_cartridge/ethylredox + spawn_reagent = /singleton/reagent/ethylredoxrazine + +/obj/item/reagent_containers/chem_disp_cartridge/hyperzine + spawn_reagent = /singleton/reagent/hyperzine + +/obj/item/reagent_containers/chem_disp_cartridge/hyronalin + spawn_reagent = /singleton/reagent/hyronalin + +/obj/item/reagent_containers/chem_disp_cartridge/oculine + spawn_reagent = /singleton/reagent/oculine + +/obj/item/reagent_containers/chem_disp_cartridge/kelotane + spawn_reagent = /singleton/reagent/kelotane + +/obj/item/reagent_containers/chem_disp_cartridge/butazoline + spawn_reagent = /singleton/reagent/butazoline + +/obj/item/reagent_containers/chem_disp_cartridge/saline + spawn_reagent = /singleton/reagent/saline + +/obj/item/reagent_containers/chem_disp_cartridge/leporazine + spawn_reagent = /singleton/reagent/leporazine + +/obj/item/reagent_containers/chem_disp_cartridge/inaprov + spawn_reagent = /singleton/reagent/inaprovaline + +/obj/item/reagent_containers/chem_disp_cartridge/oxycomorphine + spawn_reagent = /singleton/reagent/oxycomorphine + +/obj/item/reagent_containers/chem_disp_cartridge/perconol + spawn_reagent = /singleton/reagent/perconol + +/obj/item/reagent_containers/chem_disp_cartridge/peridaxon + spawn_reagent = /singleton/reagent/peridaxon + +/obj/item/reagent_containers/chem_disp_cartridge/pneumalin + spawn_reagent = /singleton/reagent/pneumalin + +/obj/item/reagent_containers/chem_disp_cartridge/rezadone + spawn_reagent = /singleton/reagent/rezadone + +/obj/item/reagent_containers/chem_disp_cartridge/ryetalyn + spawn_reagent = /singleton/reagent/ryetalyn + +/obj/item/reagent_containers/chem_disp_cartridge/sleeptox + spawn_reagent = /singleton/reagent/soporific + +/obj/item/reagent_containers/chem_disp_cartridge/sterilizine + spawn_reagent = /singleton/reagent/sterilizine + +/obj/item/reagent_containers/chem_disp_cartridge/synaptizine + spawn_reagent = /singleton/reagent/synaptizine + +/obj/item/reagent_containers/chem_disp_cartridge/thetamycin + spawn_reagent = /singleton/reagent/thetamycin + +/obj/item/reagent_containers/chem_disp_cartridge/mortaphenyl + spawn_reagent = /singleton/reagent/mortaphenyl + +/obj/item/reagent_containers/chem_disp_cartridge/tricord + spawn_reagent = /singleton/reagent/tricordrazine + +/obj/item/reagent_containers/chem_disp_cartridge/sanasomnum + spawn_reagent = /singleton/reagent/sanasomnum - // ERT - alkysine spawn_reagent = /singleton/reagent/alkysine - arithrazine spawn_reagent = /singleton/reagent/arithrazine - cetahydramine spawn_reagent = /singleton/reagent/cetahydramine - bicaridine spawn_reagent = /singleton/reagent/bicaridine - chloral spawn_reagent = /singleton/reagent/polysomnine - clonexadone spawn_reagent = /singleton/reagent/clonexadone - coughsyrup spawn_reagent = /singleton/reagent/antidexafen - cryoxadone spawn_reagent = /singleton/reagent/cryoxadone - dermaline spawn_reagent = /singleton/reagent/dermaline - dexalin spawn_reagent = /singleton/reagent/dexalin - dexalin/small volume = CARTRIDGE_VOLUME_SMALL // For the medicine cartridge crate, so it's not too easy to get large amounts of dexalin - dexalin_p spawn_reagent = /singleton/reagent/dexalin/plus - dylovene spawn_reagent = /singleton/reagent/dylovene - ethylredox spawn_reagent = /singleton/reagent/ethylredoxrazine - hyperzine spawn_reagent = /singleton/reagent/hyperzine - hyronalin spawn_reagent = /singleton/reagent/hyronalin - oculine spawn_reagent = /singleton/reagent/oculine - kelotane spawn_reagent = /singleton/reagent/kelotane - butazoline spawn_reagent = /singleton/reagent/butazoline - saline spawn_reagent = /singleton/reagent/saline - leporazine spawn_reagent = /singleton/reagent/leporazine - inaprov spawn_reagent = /singleton/reagent/inaprovaline - oxycomorphine spawn_reagent = /singleton/reagent/oxycomorphine - perconol spawn_reagent = /singleton/reagent/perconol - peridaxon spawn_reagent = /singleton/reagent/peridaxon - pneumalin spawn_reagent = /singleton/reagent/pneumalin - rezadone spawn_reagent = /singleton/reagent/rezadone - ryetalyn spawn_reagent = /singleton/reagent/ryetalyn - sleeptox spawn_reagent = /singleton/reagent/soporific - sterilizine spawn_reagent = /singleton/reagent/sterilizine - synaptizine spawn_reagent = /singleton/reagent/synaptizine - thetamycin spawn_reagent = /singleton/reagent/thetamycin - mortaphenyl spawn_reagent = /singleton/reagent/mortaphenyl - tricord spawn_reagent = /singleton/reagent/tricordrazine - sanasomnum spawn_reagent = /singleton/reagent/sanasomnum diff --git a/code/modules/reagents/reagent_containers/inhaler_advanced.dm b/code/modules/reagents/reagent_containers/inhaler_advanced.dm index 7cc03093e84..0c6dac68b2e 100644 --- a/code/modules/reagents/reagent_containers/inhaler_advanced.dm +++ b/code/modules/reagents/reagent_containers/inhaler_advanced.dm @@ -210,18 +210,20 @@ /obj/item/reagent_containers/personal_inhaler_cartridge/large/hyperzine name = "large inhaler cartridge (hyperzine)" - Initialize() - . =..() - reagents.add_reagent(/singleton/reagent/hyperzine, 30) - flags ^= OPENCONTAINER - update_icon() - return + +/obj/item/reagent_containers/personal_inhaler_cartridge/large/hyperzine/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/hyperzine, 30) + flags ^= OPENCONTAINER + update_icon() + return /obj/item/reagent_containers/personal_inhaler_cartridge/large/inaprovaline name = "large inhaler cartridge (inaprovaline)" - Initialize() - . =..() - reagents.add_reagent(/singleton/reagent/inaprovaline, 30) - flags ^= OPENCONTAINER - update_icon() - return + +/obj/item/reagent_containers/personal_inhaler_cartridge/large/inaprovaline/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/inaprovaline, 30) + flags ^= OPENCONTAINER + update_icon() + return diff --git a/code/modules/reagents/reagent_containers/pill.dm b/code/modules/reagents/reagent_containers/pill.dm index a668c6b9d71..125cf586c26 100644 --- a/code/modules/reagents/reagent_containers/pill.dm +++ b/code/modules/reagents/reagent_containers/pill.dm @@ -18,68 +18,67 @@ drop_sound = 'sound/items/drop/food.ogg' pickup_sound = 'sound/items/pickup/food.ogg' - New() - ..() - if(!icon_state) - icon_state = "pill[rand(1, 20)]" +/obj/item/reagent_containers/pill/New() + ..() + if(!icon_state) + icon_state = "pill[rand(1, 20)]" - attack(mob/M as mob, mob/user as mob, def_zone) - //TODO: replace with standard_feed_mob() call. +/obj/item/reagent_containers/pill/attack(mob/M as mob, mob/user as mob, def_zone) + //TODO: replace with standard_feed_mob() call. - if(M == user) - if(!M.can_eat(src)) - return - - M.visible_message("[M] swallows a pill.", SPAN_NOTICE("You swallow \the [src]."), null, 2) - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - return 1 - - else if(istype(M, /mob/living/carbon/human)) - if(!M.can_force_feed(user, src)) - return - - user.visible_message(SPAN_WARNING("[user] attempts to force [M] to swallow \the [src]!")) - - user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) - if(!do_mob(user, M)) - return - - user.visible_message(SPAN_WARNING("[user] forces [M] to swallow \the [src].")) - - var/contained = reagentlist() - M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained]") - user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained]") - msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(M)) - - if(reagents.total_volume) - reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) - qdel(src) - - return 1 - - return 0 - - afterattack(obj/target, mob/user, proximity) - - if(proximity && target.is_open_container() && target.reagents) - if(!target.reagents.total_volume) - to_chat(user, SPAN_NOTICE("You can't dissolve \the [src] in an empty [target].")) - return - to_chat(user, SPAN_NOTICE("You dissolve \the [src] in [target].")) - - user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]") - msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(target)) - - reagents.trans_to(target, reagents.total_volume) - for(var/mob/O in viewers(2, user)) - O.show_message(SPAN_WARNING("[user] puts something in \the [target]."), 1) - - qdel(src) + if(M == user) + if(!M.can_eat(src)) return - . = ..() + M.visible_message("[M] swallows a pill.", SPAN_NOTICE("You swallow \the [src]."), null, 2) + if(reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) + return 1 + + else if(istype(M, /mob/living/carbon/human)) + if(!M.can_force_feed(user, src)) + return + + user.visible_message(SPAN_WARNING("[user] attempts to force [M] to swallow \the [src]!")) + + user.setClickCooldown(DEFAULT_ATTACK_COOLDOWN) + if(!do_mob(user, M)) + return + + user.visible_message(SPAN_WARNING("[user] forces [M] to swallow \the [src].")) + + var/contained = reagentlist() + M.attack_log += text("\[[time_stamp()]\] Has been fed [name] by [key_name(user)] Reagents: [contained]") + user.attack_log += text("\[[time_stamp()]\] Fed [name] to [key_name(M)] Reagents: [contained]") + msg_admin_attack("[key_name_admin(user)] fed [key_name_admin(M)] with [name] Reagents: [contained] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(M)) + + if(reagents.total_volume) + reagents.trans_to_mob(M, reagents.total_volume, CHEM_INGEST) + qdel(src) + + return 1 + + return 0 + +/obj/item/reagent_containers/pill/afterattack(obj/target, mob/user, proximity) + if(proximity && target.is_open_container() && target.reagents) + if(!target.reagents.total_volume) + to_chat(user, SPAN_NOTICE("You can't dissolve \the [src] in an empty [target].")) + return + to_chat(user, SPAN_NOTICE("You dissolve \the [src] in [target].")) + + user.attack_log += text("\[[time_stamp()]\] Spiked \a [target] with a pill. Reagents: [reagentlist()]") + msg_admin_attack("[user.name] ([user.ckey]) spiked \a [target] with a pill. Reagents: [reagentlist()] (INTENT: [uppertext(user.a_intent)]) (JMP)",ckey=key_name(user),ckey_target=key_name(target)) + + reagents.trans_to(target, reagents.total_volume) + for(var/mob/O in viewers(2, user)) + O.show_message(SPAN_WARNING("[user] puts something in \the [target]."), 1) + + qdel(src) + return + + . = ..() //////////////////////////////////////////////////////////////////////////////// /// Pills. END @@ -235,7 +234,7 @@ icon_state = "pill18" reagents_to_add = list(/singleton/reagent/impedrezene = 5, /singleton/reagent/synaptizine = 5, /singleton/reagent/hyperzine = 5) -obj/item/reagent_containers/pill/joy +/obj/item/reagent_containers/pill/joy name = "Joy Pill" desc = "Peace, at last." icon_state = "pill8" diff --git a/code/modules/recycling/disposal.dm b/code/modules/recycling/disposal.dm index 38869083d0b..3558b6af686 100644 --- a/code/modules/recycling/disposal.dm +++ b/code/modules/recycling/disposal.dm @@ -1377,16 +1377,18 @@ name = "tagged sorting junction" desc = "An underfloor disposal pipe which filters all wrapped and tagged items." subtype = 1 - divert_check(var/checkTag) - return checkTag != "" + +/obj/structure/disposalpipe/sortjunction/wildcard/divert_check(var/checkTag) + return checkTag != "" //junction that filters all untagged items /obj/structure/disposalpipe/sortjunction/untagged name = "untagged sorting junction" desc = "An underfloor disposal pipe which filters all untagged items." subtype = 2 - divert_check(var/checkTag) - return checkTag == "" + +/obj/structure/disposalpipe/sortjunction/untagged/divert_check(var/checkTag) + return checkTag == "" /obj/structure/disposalpipe/sortjunction/flipped //for easier and cleaner mapping icon_state = "pipe-j2s" diff --git a/code/modules/research/designs/protolathe/tool_designs.dm b/code/modules/research/designs/protolathe/tool_designs.dm index 8ed546305fb..0b2a2ea3f07 100644 --- a/code/modules/research/designs/protolathe/tool_designs.dm +++ b/code/modules/research/designs/protolathe/tool_designs.dm @@ -20,7 +20,7 @@ req_tech = list(TECH_ENGINEERING = 6, TECH_MATERIAL = 5) build_path = /obj/item/overcapacitor -datum/design/item/tool/advanced_light_replacer +/datum/design/item/tool/advanced_light_replacer desc = "A specialised light replacer which stores more lights, refills faster from boxes, and sucks up broken bulbs." req_tech = list(TECH_MAGNET = 3, TECH_MATERIAL = 4) materials = list(DEFAULT_WALL_MATERIAL = 500) @@ -161,4 +161,4 @@ datum/design/item/tool/advanced_light_replacer /datum/design/item/tool/inductive_charger/engineering name = "Inductive Charger (Engineering)" - build_path = /obj/item/inductive_charger/handheld/engineering \ No newline at end of file + build_path = /obj/item/inductive_charger/handheld/engineering diff --git a/code/modules/research/xenoarchaeology/artifact/effect.dm b/code/modules/research/xenoarchaeology/artifact/effect.dm index 103675ae5ed..e23a8829ea1 100644 --- a/code/modules/research/xenoarchaeology/artifact/effect.dm +++ b/code/modules/research/xenoarchaeology/artifact/effect.dm @@ -83,7 +83,7 @@ DoEffectPulse() //returns 0..1, with 1 being no protection and 0 being fully protected -proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) +/proc/GetAnomalySusceptibility(var/mob/living/carbon/human/H) if(!H || !istype(H)) return 1 diff --git a/code/modules/research/xenoarchaeology/chemistry.dm b/code/modules/research/xenoarchaeology/chemistry.dm index 6e2ffa7d069..f69880c4e28 100644 --- a/code/modules/research/xenoarchaeology/chemistry.dm +++ b/code/modules/research/xenoarchaeology/chemistry.dm @@ -13,7 +13,7 @@ volume = 2 flags = OPENCONTAINER -obj/item/reagent_containers/glass/solution_tray/attackby(obj/item/W as obj, mob/living/user as mob) +/obj/item/reagent_containers/glass/solution_tray/attackby(obj/item/W as obj, mob/living/user as mob) if(W.ispen()) var/new_label = sanitizeSafe(input("What should the new label be?","Label solution tray"), MAX_NAME_LEN) if(new_label) @@ -26,57 +26,60 @@ obj/item/reagent_containers/glass/solution_tray/attackby(obj/item/W as obj, mob/ name = "solution tray box" icon_state = "solution_trays" - fill() - ..() - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) - new /obj/item/reagent_containers/glass/solution_tray( src ) +/obj/item/storage/box/solution_trays/fill() + ..() + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) + new /obj/item/reagent_containers/glass/solution_tray( src ) /obj/item/reagent_containers/glass/beaker/tungsten name = "beaker 'tungsten'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/tungsten,50) - update_icon() + +/obj/item/reagent_containers/glass/beaker/tungsten/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/tungsten,50) + update_icon() /obj/item/reagent_containers/glass/beaker/oxygen name = "beaker 'oxygen'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/acetone,50) - update_icon() + +/obj/item/reagent_containers/glass/beaker/oxygen/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/acetone,50) + update_icon() /obj/item/reagent_containers/glass/beaker/sodium name = "beaker 'sodium'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/sodium,50) - update_icon() + +/obj/item/reagent_containers/glass/beaker/sodium/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/sodium,50) + update_icon() /obj/item/reagent_containers/glass/beaker/lithium name = "beaker 'lithium'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/lithium,50) - update_icon() +/obj/item/reagent_containers/glass/beaker/lithium/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/lithium,50) + update_icon() /obj/item/reagent_containers/glass/beaker/water name = "beaker 'water'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/water,50) - update_icon() +/obj/item/reagent_containers/glass/beaker/water/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/water,50) + update_icon() /obj/item/reagent_containers/glass/beaker/fuel name = "beaker 'fuel'" - Initialize() - . = ..() - reagents.add_reagent(/singleton/reagent/fuel,50) - update_icon() +/obj/item/reagent_containers/glass/beaker/fuel/Initialize() + . = ..() + reagents.add_reagent(/singleton/reagent/fuel,50) + update_icon() diff --git a/code/modules/research/xenoarchaeology/finds/finds_eguns.dm b/code/modules/research/xenoarchaeology/finds/finds_eguns.dm index 803be9d4b13..3d378e1425c 100644 --- a/code/modules/research/xenoarchaeology/finds/finds_eguns.dm +++ b/code/modules/research/xenoarchaeology/finds/finds_eguns.dm @@ -2,23 +2,27 @@ /obj/item/gun/energy/laser/xenoarch icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "egun3" - update_icon() - return + +/obj/item/gun/energy/laser/xenoarch/update_icon() + return /obj/item/gun/energy/laser/practice/xenoarch icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "egun1" - update_icon() - return + +/obj/item/gun/energy/laser/practice/xenoarch/update_icon() + return /obj/item/gun/energy/xray/xenoarch icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "egun5" - update_icon() - return + +/obj/item/gun/energy/xray/xenoarch/update_icon() + return /obj/item/gun/energy/captain/xenoarch icon = 'icons/obj/xenoarchaeology.dmi' icon_state = "egun4" - update_icon() - return + +/obj/item/gun/energy/captain/xenoarch/update_icon() + return diff --git a/code/modules/research/xenoarchaeology/misc.dm b/code/modules/research/xenoarchaeology/misc.dm index f58f51dac95..b6b397556f3 100644 --- a/code/modules/research/xenoarchaeology/misc.dm +++ b/code/modules/research/xenoarchaeology/misc.dm @@ -47,15 +47,15 @@ /obj/structure/bookcase/manuals/xenoarchaeology name = "Xenoarchaeology Manuals bookcase" - New() - ..() - new /obj/item/book/manual/excavation(src) - new /obj/item/book/manual/mass_spectrometry(src) - new /obj/item/book/manual/materials_chemistry_analysis(src) - new /obj/item/book/manual/anomaly_testing(src) - new /obj/item/book/manual/anomaly_spectroscopy(src) - new /obj/item/book/manual/stasis(src) - update_icon() +/obj/structure/bookcase/manuals/xenoarchaeology/New() + ..() + new /obj/item/book/manual/excavation(src) + new /obj/item/book/manual/mass_spectrometry(src) + new /obj/item/book/manual/materials_chemistry_analysis(src) + new /obj/item/book/manual/anomaly_testing(src) + new /obj/item/book/manual/anomaly_spectroscopy(src) + new /obj/item/book/manual/stasis(src) + update_icon() //---- Lockers and closets diff --git a/code/modules/scripting/Implementations/_Logic.dm b/code/modules/scripting/Implementations/_Logic.dm index ce11d7dd37d..84a0e72507d 100644 --- a/code/modules/scripting/Implementations/_Logic.dm +++ b/code/modules/scripting/Implementations/_Logic.dm @@ -137,7 +137,7 @@ /* //Makes a list where all indicies in a string is a seperate index in the list // JUST A HELPER DON'T ADD TO NTSCRIPT -proc/string_tolist(var/string) +/proc/string_tolist(var/string) var/list/L = new/list() var/i @@ -146,7 +146,7 @@ proc/string_tolist(var/string) return L -proc/string_explode(var/string, var/separator) +/proc/string_explode(var/string, var/separator) if(istext(string)) if(istext(separator) && separator == "") return string_tolist(string) @@ -165,11 +165,11 @@ proc/string_explode(var/string, var/separator) Just found out there was already a string explode function, did some benchmarking, and that function were a bit faster, sticking to that. */ -proc/string_explode(var/string, var/separator) +/proc/string_explode(var/string, var/separator) if(istext(string) && istext(separator)) return text2list(string, separator) -proc/n_repeat(var/string, var/amount) +/proc/n_repeat(var/string, var/amount) if(istext(string) && isnum(amount)) var/i var/newstring = "" @@ -182,7 +182,7 @@ proc/n_repeat(var/string, var/amount) return newstring -proc/n_reverse(var/string) +/proc/n_reverse(var/string) if(istext(string)) var/newstring = "" var/i @@ -194,22 +194,22 @@ proc/n_reverse(var/string) return newstring // I don't know if it's neccesary to make my own proc, but I think I have to to be able to check for istext. -proc/n_str2num(var/string) +/proc/n_str2num(var/string) if(istext(string)) return text2num(string) // Number shit -proc/n_num2str(var/num) +/proc/n_num2str(var/num) if(isnum(num)) return num2text(num) // Squareroot -proc/n_sqrt(var/num) +/proc/n_sqrt(var/num) if(isnum(num)) return sqrt(num) // Magnitude of num -proc/n_abs(var/num) +/proc/n_abs(var/num) if(isnum(num)) return abs(num) diff --git a/code/modules/spell_system/spells/spell_list/construct_spells.dm b/code/modules/spell_system/spells/spell_list/construct_spells.dm index 6905c5b428d..0c705aff4fc 100644 --- a/code/modules/spell_system/spells/spell_list/construct_spells.dm +++ b/code/modules/spell_system/spells/spell_list/construct_spells.dm @@ -1,6 +1,6 @@ //////////////////////////////Construct Spells///////////////////////// -proc/findNullRod(var/atom/target) +/proc/findNullRod(var/atom/target) if(istype(target,/obj/item/nullrod)) return 1 else if(target.contents) diff --git a/code/modules/surgery/surgery.dm b/code/modules/surgery/surgery.dm index b41df601409..02f46dbeceb 100644 --- a/code/modules/surgery/surgery.dm +++ b/code/modules/surgery/surgery.dm @@ -76,7 +76,7 @@ /singleton/surgery_step/proc/fail_step(mob/living/user, mob/living/carbon/human/target, target_zone, obj/item/tool) return null -proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user) +/proc/spread_germs_to_organ(var/obj/item/organ/external/E, var/mob/living/carbon/human/user) if(!istype(user) || !istype(E)) return FALSE diff --git a/code/stylesheet.dm b/code/stylesheet.dm index 7342099fba8..9080664a316 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -1,4 +1,4 @@ -client/script = {"