Merge remote-tracking branch 'upstream/master'
@@ -7014,9 +7014,6 @@
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,
|
||||
/turf/closed/wall,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"amG" = (
|
||||
/turf/closed/wall,
|
||||
/area/space)
|
||||
"amH" = (
|
||||
/obj/machinery/door/airlock/external{
|
||||
req_one_access_txt = "13,8"
|
||||
@@ -46794,7 +46791,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
/area/maintenance/starboard/fore)
|
||||
"bOZ" = (
|
||||
/obj/machinery/chem_master/condimaster{
|
||||
name = "CondiMaster Neo";
|
||||
@@ -70554,7 +70551,7 @@
|
||||
dir = 8
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
/area/maintenance/starboard/aft)
|
||||
"cJg" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/supply/hidden,
|
||||
/obj/item/bedsheet/medical,
|
||||
@@ -81152,10 +81149,6 @@
|
||||
/obj/machinery/vr_sleeper,
|
||||
/turf/open/floor/plasteel,
|
||||
/area/crew_quarters/fitness/recreation)
|
||||
"evy" = (
|
||||
/obj/effect/spawner/structure/window/reinforced,
|
||||
/turf/open/floor/plating,
|
||||
/area/space)
|
||||
"eEe" = (
|
||||
/obj/machinery/atmospherics/components/unary/vent_pump/on{
|
||||
dir = 8
|
||||
@@ -81385,10 +81378,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/port/aft)
|
||||
"hKW" = (
|
||||
/obj/structure/lattice,
|
||||
/turf/open/space/basic,
|
||||
/area/maintenance/aft)
|
||||
"ioI" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -82834,10 +82823,6 @@
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/security/prison)
|
||||
"wkz" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
"wlH" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{
|
||||
dir = 4
|
||||
@@ -113085,7 +113070,7 @@ cCq
|
||||
cgN
|
||||
cMl
|
||||
bTs
|
||||
hKW
|
||||
lMJ
|
||||
aaf
|
||||
aaf
|
||||
aaf
|
||||
@@ -113342,7 +113327,7 @@ cCq
|
||||
cLA
|
||||
bTs
|
||||
bTs
|
||||
hKW
|
||||
lMJ
|
||||
aaf
|
||||
aaa
|
||||
aaa
|
||||
@@ -119762,9 +119747,9 @@ cEA
|
||||
aaf
|
||||
aaa
|
||||
aaa
|
||||
blx
|
||||
dvY
|
||||
cJf
|
||||
blx
|
||||
dvY
|
||||
aaa
|
||||
dbN
|
||||
gsT
|
||||
@@ -120019,9 +120004,9 @@ blx
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
wkz
|
||||
ack
|
||||
uim
|
||||
wkz
|
||||
ack
|
||||
aaa
|
||||
aaf
|
||||
dbR
|
||||
@@ -121287,7 +121272,7 @@ ciL
|
||||
cgs
|
||||
csc
|
||||
dvY
|
||||
evy
|
||||
dxk
|
||||
krD
|
||||
lsv
|
||||
txj
|
||||
@@ -129695,8 +129680,8 @@ aaa
|
||||
aaa
|
||||
aaf
|
||||
aaa
|
||||
amG
|
||||
blx
|
||||
dnh
|
||||
dnh
|
||||
bOY
|
||||
dqT
|
||||
aaf
|
||||
|
||||
@@ -2822,7 +2822,7 @@
|
||||
req_access_txt = "65"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
/area/ai_monitored/turret_protected/aisat_interior)
|
||||
"ahi" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space,
|
||||
@@ -2923,8 +2923,15 @@
|
||||
/turf/open/floor/plasteel/showroomfloor,
|
||||
/area/security/main)
|
||||
"ahr" = (
|
||||
/turf/closed/wall/r_wall,
|
||||
/area/space)
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Security External Airlock";
|
||||
req_access_txt = "63"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"ahs" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/structure/transit_tube,
|
||||
@@ -4686,7 +4693,7 @@
|
||||
pixel_y = 20
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
/area/space/nearstation)
|
||||
"alc" = (
|
||||
/obj/structure/table,
|
||||
/obj/item/storage/fancy/cigarettes/cigars,
|
||||
@@ -6629,13 +6636,6 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"apn" = (
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Security External Airlock";
|
||||
req_access_txt = "63"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/fore)
|
||||
"apo" = (
|
||||
@@ -8698,9 +8698,18 @@
|
||||
/turf/closed/wall,
|
||||
/area/bridge)
|
||||
"atZ" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/turf/open/space,
|
||||
/area/space)
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Solar Maintenance";
|
||||
req_access_txt = "10; 13"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/solars/starboard)
|
||||
"aua" = (
|
||||
/obj/structure/closet/secure_closet/freezer/money,
|
||||
/obj/item/reagent_containers/food/drinks/bottle/vodka/badminka,
|
||||
@@ -23763,18 +23772,12 @@
|
||||
/turf/open/floor/plating,
|
||||
/area/bridge)
|
||||
"bcO" = (
|
||||
/obj/structure/cable{
|
||||
icon_state = "4-8"
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
|
||||
dir = 9
|
||||
},
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 8
|
||||
},
|
||||
/obj/machinery/door/airlock/external{
|
||||
name = "Solar Maintenance";
|
||||
req_access_txt = "10; 13"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/maintenance/solars/starboard)
|
||||
/turf/open/space,
|
||||
/area/space/nearstation)
|
||||
"bcQ" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/structure/cable{
|
||||
@@ -39888,12 +39891,6 @@
|
||||
/area/science/mixing)
|
||||
"bMp" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/obj/machinery/door/airlock/external{
|
||||
req_access_txt = "8"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/science/mixing)
|
||||
"bMq" = (
|
||||
@@ -40373,11 +40370,10 @@
|
||||
/turf/open/floor/engine/vacuum,
|
||||
/area/science/mixing)
|
||||
"bNq" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
|
||||
dir = 6
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/space,
|
||||
/turf/open/floor/plating/airless,
|
||||
/area/science/mixing)
|
||||
"bNr" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -40813,10 +40809,11 @@
|
||||
/turf/open/floor/engine/vacuum,
|
||||
/area/science/mixing)
|
||||
"bOu" = (
|
||||
/obj/machinery/atmospherics/components/unary/outlet_injector/on{
|
||||
dir = 1
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
|
||||
dir = 6
|
||||
},
|
||||
/turf/open/floor/plating/airless,
|
||||
/turf/open/space,
|
||||
/area/science/mixing)
|
||||
"bOv" = (
|
||||
/obj/structure/window/reinforced{
|
||||
@@ -41104,12 +41101,15 @@
|
||||
/turf/open/floor/engine/n2o,
|
||||
/area/engine/atmos)
|
||||
"bPl" = (
|
||||
/obj/structure/lattice/catwalk,
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{
|
||||
dir = 9
|
||||
/obj/machinery/atmospherics/pipe/simple/scrubbers/visible,
|
||||
/obj/effect/mapping_helpers/airlock/cyclelink_helper{
|
||||
dir = 1
|
||||
},
|
||||
/turf/open/space,
|
||||
/area/space/nearstation)
|
||||
/obj/machinery/door/airlock/external{
|
||||
req_access_txt = "8"
|
||||
},
|
||||
/turf/open/floor/plating,
|
||||
/area/science/mixing)
|
||||
"bPn" = (
|
||||
/obj/machinery/door/airlock/grunge{
|
||||
name = "Chapel"
|
||||
@@ -53174,10 +53174,6 @@
|
||||
},
|
||||
/turf/open/floor/plasteel,
|
||||
/area/hallway/primary/aft)
|
||||
"dhS" = (
|
||||
/obj/structure/window/reinforced,
|
||||
/turf/open/space/basic,
|
||||
/area/space)
|
||||
"dir" = (
|
||||
/obj/machinery/atmospherics/pipe/simple/general/visible{
|
||||
dir = 5
|
||||
@@ -59590,7 +59586,7 @@
|
||||
},
|
||||
/obj/machinery/door/airlock/external,
|
||||
/turf/open/floor/plating,
|
||||
/area/space/nearstation)
|
||||
/area/chapel/asteroid/monastery)
|
||||
"rBh" = (
|
||||
/obj/structure/mopbucket,
|
||||
/obj/item/mop,
|
||||
@@ -77801,7 +77797,7 @@ aiu
|
||||
aiu
|
||||
axC
|
||||
axB
|
||||
rKr
|
||||
azN
|
||||
axB
|
||||
aaa
|
||||
aaa
|
||||
@@ -82501,8 +82497,8 @@ aht
|
||||
aaa
|
||||
aaa
|
||||
abI
|
||||
dhS
|
||||
cqS
|
||||
bGI
|
||||
bNs
|
||||
rzF
|
||||
bNs
|
||||
bOw
|
||||
@@ -90640,9 +90636,9 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
ahi
|
||||
ahi
|
||||
aoz
|
||||
ahr
|
||||
aoz
|
||||
aqG
|
||||
arD
|
||||
asO
|
||||
@@ -90898,8 +90894,8 @@ aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
cdm
|
||||
cdm
|
||||
aqG
|
||||
arE
|
||||
arA
|
||||
@@ -94741,7 +94737,7 @@ ags
|
||||
adX
|
||||
adX
|
||||
adX
|
||||
ahr
|
||||
adX
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -94997,7 +94993,7 @@ cnC
|
||||
adX
|
||||
adX
|
||||
adX
|
||||
shH
|
||||
adX
|
||||
alb
|
||||
aaa
|
||||
aaa
|
||||
@@ -95255,7 +95251,7 @@ agt
|
||||
agD
|
||||
agR
|
||||
ahh
|
||||
atZ
|
||||
ahi
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -95511,7 +95507,7 @@ agg
|
||||
adX
|
||||
adX
|
||||
adX
|
||||
shH
|
||||
adX
|
||||
alb
|
||||
aaa
|
||||
aaa
|
||||
@@ -95769,7 +95765,7 @@ ags
|
||||
adX
|
||||
adX
|
||||
adX
|
||||
shH
|
||||
adX
|
||||
aFj
|
||||
aht
|
||||
aht
|
||||
@@ -105617,9 +105613,9 @@ bIN
|
||||
dAF
|
||||
bCV
|
||||
bCV
|
||||
bNq
|
||||
bCV
|
||||
bOu
|
||||
aht
|
||||
bNq
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -105875,8 +105871,8 @@ bJT
|
||||
wOS
|
||||
bMp
|
||||
bPl
|
||||
mZE
|
||||
aht
|
||||
bcO
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
aaa
|
||||
@@ -106131,9 +106127,9 @@ fBz
|
||||
bCV
|
||||
bCV
|
||||
bCV
|
||||
bCV
|
||||
ahi
|
||||
aht
|
||||
aht
|
||||
abI
|
||||
abI
|
||||
abI
|
||||
@@ -109182,7 +109178,7 @@ aXC
|
||||
aYF
|
||||
baG
|
||||
sut
|
||||
bcO
|
||||
oCX
|
||||
rWE
|
||||
baG
|
||||
dsv
|
||||
@@ -109439,7 +109435,7 @@ aEl
|
||||
aEl
|
||||
baG
|
||||
rWE
|
||||
oCX
|
||||
atZ
|
||||
rWE
|
||||
baG
|
||||
aEj
|
||||
|
||||
@@ -64,7 +64,6 @@
|
||||
#define DEFAULT_BODYPART_ICON 'icons/mob/human_parts.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ORGANIC 'icons/mob/human_parts_greyscale.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_ROBOTIC 'icons/mob/augmentation/augments.dmi'
|
||||
#define DEFAULT_BODYPART_ICON_CITADEL 'modular_citadel/icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
#define MONKEY_BODYPART "monkey"
|
||||
#define ALIEN_BODYPART "alien"
|
||||
@@ -333,4 +332,4 @@
|
||||
/// If you examine the same atom twice in this timeframe, we call examine_more() instead of examine()
|
||||
#define EXAMINE_MORE_TIME 1 SECONDS
|
||||
|
||||
#define SILENCE_RANGED_MESSAGE (1<<0)
|
||||
#define SILENCE_RANGED_MESSAGE (1<<0)
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
#define ROCKPAPERSCISSORS_RANGE 3
|
||||
#define ROCKPAPERSCISSORS_TIME_LIMIT 20 SECONDS
|
||||
|
||||
#define ROCKPAPERSCISSORS_LOSE "lose"
|
||||
#define ROCKPAPERSCISSORS_WIN "win"
|
||||
#define ROCKPAPERSCISSORS_TIE "tie"
|
||||
#define ROCKPAPERSCISSORS_NOT_DECIDED "not_decided"
|
||||
@@ -24,7 +24,10 @@ GLOBAL_LIST_INIT(default_weight_class_to_volume, list(
|
||||
// Let's keep all of this in one place. given what we put above anyways..
|
||||
|
||||
// volume amount for items
|
||||
/// volume for a data disk
|
||||
#define ITEM_VOLUME_DISK 1
|
||||
/// volume for a shotgun stripper clip holding 4 shells
|
||||
#define ITEM_VOLUME_STRIPPER_CLIP (DEFAULT_VOLUME_NORMAL * 0.5)
|
||||
|
||||
// #define SAMPLE_VOLUME_AMOUNT 2
|
||||
|
||||
|
||||
@@ -17,9 +17,9 @@ For fast lookups, this is generated using regenerate_donator_grouping_list()
|
||||
/proc/regenerate_donator_grouping_list()
|
||||
GLOB.donators_by_group = list() //reinit everything
|
||||
var/list/donator_list = GLOB.donators_by_group //cache
|
||||
var/list/tier_1 = TIER_1_DONATORS
|
||||
donator_list[DONATOR_GROUP_TIER_1] = tier_1.Copy() //The .Copy() is to "decouple"/make a new list, rather than letting the global list impact the config list.
|
||||
var/list/tier_2 = tier_1 + TIER_2_DONATORS //Using + on lists implies making new lists, so we don't need to manually Copy().
|
||||
var/list/tier_3 = TIER_3_DONATORS
|
||||
donator_list[DONATOR_GROUP_TIER_3] = tier_3.Copy() //The .Copy() is to "decouple"/make a new list, rather than letting the global list impact the config list.
|
||||
var/list/tier_2 = tier_3 + TIER_2_DONATORS //Using + on lists implies making new lists, so we don't need to manually Copy().
|
||||
donator_list[DONATOR_GROUP_TIER_2] = tier_2
|
||||
var/list/tier_3 = tier_2 + TIER_3_DONATORS
|
||||
donator_list[DONATOR_GROUP_TIER_3] = tier_3
|
||||
var/list/tier_1 = tier_2 + TIER_1_DONATORS
|
||||
donator_list[DONATOR_GROUP_TIER_1] = tier_1
|
||||
|
||||
@@ -278,3 +278,8 @@ GLOBAL_LIST_INIT(all_mutant_parts, list("tail_lizard" = "Tail", "mam_tail" = "Ta
|
||||
GLOBAL_LIST_INIT(unlocked_mutant_parts, list("horns", "insect_fluff"))
|
||||
//parts in either of the above two lists that require a second option that allows them to be coloured
|
||||
GLOBAL_LIST_INIT(colored_mutant_parts, list("insect_wings" = "wings_color", "deco_wings" = "wings_color", "horns" = "horns_color"))
|
||||
|
||||
//species ids that have greyscale sprites
|
||||
GLOBAL_LIST_INIT(greyscale_limb_types, list("human","moth","lizard","pod","plant","jelly","slime","golem","lum","stargazer","mush","ethereal","snail","c_golem","b_golem","mammal","xeno","ipc","insect","synthliz","avian","aquatic"))
|
||||
|
||||
//species ids that need snowflake coloring applied
|
||||
|
||||
@@ -41,3 +41,6 @@ GLOBAL_LIST_EMPTY(ai_status_displays)
|
||||
|
||||
GLOBAL_LIST_EMPTY(mob_spawners) // All mob_spawn objects
|
||||
GLOBAL_LIST_EMPTY(alert_consoles) // Station alert consoles, /obj/machinery/computer/station_alert
|
||||
|
||||
//list of everyone playing rock paper scissors
|
||||
GLOBAL_LIST_EMPTY(rockpaperscissors_players)
|
||||
|
||||
@@ -32,4 +32,4 @@
|
||||
/mob/camera/blob/AltClickOn(atom/A) //Remove a blob
|
||||
var/turf/T = get_turf(A)
|
||||
if(T)
|
||||
remove_blob(T)
|
||||
remove_blob(T)
|
||||
|
||||
@@ -4,16 +4,26 @@ PROCESSING_SUBSYSTEM_DEF(instruments)
|
||||
init_order = INIT_ORDER_INSTRUMENTS
|
||||
flags = SS_KEEP_TIMING
|
||||
priority = FIRE_PRIORITY_INSTRUMENTS
|
||||
var/static/list/datum/instrument/instrument_data = list() //id = datum
|
||||
/// List of all instrument data, associative id = datum
|
||||
var/static/list/datum/instrument/instrument_data = list()
|
||||
/// List of all song datums.
|
||||
var/static/list/datum/song/songs = list()
|
||||
/// Max lines in songs
|
||||
var/static/musician_maxlines = 600
|
||||
/// Max characters per line in songs
|
||||
var/static/musician_maxlinechars = 300
|
||||
/// Deciseconds between hearchecks. Too high and instruments seem to lag when people are moving around in terms of who can hear it. Too low and the server lags from this.
|
||||
var/static/musician_hearcheck_mindelay = 5
|
||||
/// Maximum instrument channels total instruments are allowed to use. This is so you don't have instruments deadlocking all sound channels.
|
||||
var/static/max_instrument_channels = MAX_INSTRUMENT_CHANNELS
|
||||
/// Current number of channels allocated for instruments
|
||||
var/static/current_instrument_channels = 0
|
||||
/// Single cached list for synthesizer instrument ids, so you don't have to have a new list with every synthesizer.
|
||||
var/static/list/synthesizer_instrument_ids
|
||||
|
||||
/datum/controller/subsystem/processing/instruments/Initialize()
|
||||
initialize_instrument_data()
|
||||
synthesizer_instrument_ids = get_allowed_instrument_ids()
|
||||
return ..()
|
||||
|
||||
/datum/controller/subsystem/processing/instruments/proc/on_song_new(datum/song/S)
|
||||
@@ -29,7 +39,10 @@ PROCESSING_SUBSYSTEM_DEF(instruments)
|
||||
continue
|
||||
I = new path
|
||||
I.Initialize()
|
||||
instrument_data[I.id || "[I.type]"] = I
|
||||
if(!I.id)
|
||||
qdel(I)
|
||||
continue
|
||||
instrument_data[I.id] = I
|
||||
CHECK_TICK
|
||||
|
||||
/datum/controller/subsystem/processing/instruments/proc/get_instrument(id_or_path)
|
||||
|
||||
@@ -103,13 +103,21 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
// 3/7/14 will calculate to 80 + 35
|
||||
|
||||
var/far_dist = 0
|
||||
far_dist += heavy_impact_range * 5
|
||||
far_dist += heavy_impact_range * 15 // Large explosions carry further
|
||||
far_dist += devastation_range * 20
|
||||
|
||||
if(!silent)
|
||||
var/frequency = get_rand_frequency()
|
||||
var/sound/explosion_sound = sound(get_sfx("explosion"))
|
||||
var/sound/far_explosion_sound = sound('sound/effects/explosionfar.ogg')
|
||||
var/sound/creaking_explosion_sound = sound(get_sfx("explosion_creaking"))
|
||||
var/sound/hull_creaking_sound = sound(get_sfx("hull_creaking"))
|
||||
var/sound/explosion_echo_sound = sound('sound/effects/explosion_distant.ogg')
|
||||
var/on_station = SSmapping.level_trait(epicenter.z, ZTRAIT_STATION)
|
||||
var/creaking_explosion = FALSE
|
||||
|
||||
if(prob(devastation_range*30+heavy_impact_range*5) && on_station) // Huge explosions are near guaranteed to make the station creak and whine, smaller ones might.
|
||||
creaking_explosion = TRUE // prob over 100 always returns true
|
||||
|
||||
for(var/mob/M in GLOB.player_list)
|
||||
// Double check for client
|
||||
@@ -126,11 +134,29 @@ GLOBAL_LIST_EMPTY(explosions)
|
||||
shake_camera(M, 25, clamp(baseshakeamount, 0, 10))
|
||||
// You hear a far explosion if you're outside the blast radius. Small bombs shouldn't be heard all over the station.
|
||||
else if(dist <= far_dist)
|
||||
var/far_volume = clamp(far_dist, 30, 50) // Volume is based on explosion size and dist
|
||||
far_volume += (dist <= far_dist * 0.5 ? 50 : 0) // add 50 volume if the mob is pretty close to the explosion
|
||||
M.playsound_local(epicenter, null, far_volume, 1, frequency, falloff = 5, S = far_explosion_sound)
|
||||
if(baseshakeamount > 0)
|
||||
var/far_volume = clamp(far_dist/2, 40, 60) // Volume is based on explosion size and dist
|
||||
if(creaking_explosion)
|
||||
M.playsound_local(epicenter, null, far_volume, 1, frequency, S = creaking_explosion_sound, distance_multiplier = 0)
|
||||
else if(prob(75))
|
||||
M.playsound_local(epicenter, null, far_volume, 1, frequency, S = far_explosion_sound, distance_multiplier = 0) // Far sound
|
||||
else
|
||||
M.playsound_local(epicenter, null, far_volume, 1, frequency, S = explosion_echo_sound, distance_multiplier = 0) // Echo sound
|
||||
|
||||
if(baseshakeamount > 0 || devastation_range)
|
||||
if(!baseshakeamount) // Devastating explosions rock the station and ground
|
||||
baseshakeamount = devastation_range*3
|
||||
shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5))
|
||||
|
||||
else if(M.can_hear() && !isspaceturf(get_turf(M)) && heavy_impact_range) // Big enough explosions echo throughout the hull
|
||||
var/echo_volume = 40
|
||||
if(devastation_range)
|
||||
baseshakeamount = devastation_range
|
||||
shake_camera(M, 10, clamp(baseshakeamount*0.25, 0, 2.5))
|
||||
echo_volume = 60
|
||||
M.playsound_local(epicenter, null, echo_volume, 1, frequency, S = explosion_echo_sound, distance_multiplier = 0)
|
||||
|
||||
if(creaking_explosion) // 5 seconds after the bang, the station begins to creak
|
||||
addtimer(CALLBACK(M, /mob/proc/playsound_local, epicenter, null, rand(25, 40), 1, frequency, null, null, FALSE, hull_creaking_sound, null, null, null, null, 0), 5 SECONDS)
|
||||
EX_PREPROCESS_CHECK_TICK
|
||||
|
||||
//postpone processing for a bit
|
||||
|
||||
@@ -90,6 +90,8 @@
|
||||
to_chat(user, "<span class='boldnotice'>You catch some drifting memories of their past conversations...</span>")
|
||||
for(var/spoken_memory in recent_speech)
|
||||
to_chat(user, "<span class='notice'>[recent_speech[spoken_memory]]</span>")
|
||||
if(usr in GLOB.rockpaperscissors_players)
|
||||
to_chat(user, "<span class='notice'>They're planning on playing [GLOB.rockpaperscissors_players[usr][1]]</span>")
|
||||
if(iscarbon(M))
|
||||
var/mob/living/carbon/human/H = M
|
||||
to_chat(user, "<span class='boldnotice'>You find that their intent is to [H.a_intent]...</span>")
|
||||
|
||||
@@ -53,8 +53,6 @@
|
||||
|
||||
/datum/wires/airlock/interactable(mob/user)
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
if(!A.hasSiliconAccessInArea(user) && A.isElectrified() && A.shock(user, 100))
|
||||
return FALSE
|
||||
if(A.panel_open)
|
||||
return TRUE
|
||||
|
||||
@@ -73,6 +71,8 @@
|
||||
/datum/wires/airlock/on_pulse(wire)
|
||||
set waitfor = FALSE
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100))
|
||||
return FALSE
|
||||
switch(wire)
|
||||
if(WIRE_POWER1, WIRE_POWER2) // Pulse to loose power.
|
||||
A.loseMainPower()
|
||||
@@ -127,6 +127,8 @@
|
||||
|
||||
/datum/wires/airlock/on_cut(wire, mend)
|
||||
var/obj/machinery/door/airlock/A = holder
|
||||
if(!A.hasSiliconAccessInArea(usr) && A.isElectrified() && A.shock(usr, 100))
|
||||
return FALSE
|
||||
switch(wire)
|
||||
if(WIRE_POWER1, WIRE_POWER2) // Cut to loose power, repair all to gain power.
|
||||
if(mend && !is_cut(WIRE_POWER1) && !is_cut(WIRE_POWER2))
|
||||
@@ -174,4 +176,4 @@
|
||||
A.update_icon()
|
||||
if(WIRE_ZAP1, WIRE_ZAP2) // Ouch.
|
||||
if(isliving(usr))
|
||||
A.shock(usr, 50)
|
||||
A.shock(usr, 50)
|
||||
|
||||
@@ -3,13 +3,14 @@
|
||||
|
||||
/obj/machinery/iv_drip
|
||||
name = "\improper IV drip"
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate."
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. Alt-Click to change the transfer rate."
|
||||
icon = 'icons/obj/iv_drip.dmi'
|
||||
icon_state = "iv_drip"
|
||||
anchored = FALSE
|
||||
mouse_drag_pointer = MOUSE_ACTIVE_POINTER
|
||||
var/mob/living/carbon/attached
|
||||
var/mode = IV_INJECTING
|
||||
var/dripfeed = FALSE
|
||||
var/obj/item/reagent_containers/beaker
|
||||
var/static/list/drip_containers = typecacheof(list(/obj/item/reagent_containers/blood,
|
||||
/obj/item/reagent_containers/food,
|
||||
@@ -132,9 +133,11 @@
|
||||
if(mode)
|
||||
if(beaker.reagents.total_volume)
|
||||
var/transfer_amount = 5
|
||||
if (dripfeed)
|
||||
transfer_amount = 1
|
||||
if(istype(beaker, /obj/item/reagent_containers/blood))
|
||||
// speed up transfer on blood packs
|
||||
transfer_amount = 10
|
||||
transfer_amount *= 2
|
||||
var/fraction = min(transfer_amount/beaker.reagents.total_volume, 1) //the fraction that is transfered of the total volume
|
||||
beaker.reagents.reaction(attached, INJECT, fraction, FALSE) //make reagents reacts, but don't spam messages
|
||||
beaker.reagents.trans_to(attached, transfer_amount)
|
||||
@@ -169,6 +172,16 @@
|
||||
else
|
||||
toggle_mode()
|
||||
|
||||
/obj/machinery/iv_drip/AltClick(mob/living/user)
|
||||
if(!user.canUseTopic(src, be_close=TRUE))
|
||||
return
|
||||
if(dripfeed)
|
||||
dripfeed = FALSE
|
||||
to_chat(usr, "<span class='notice'>You loosen the valve to speed up the [src].</span>")
|
||||
else
|
||||
dripfeed = TRUE
|
||||
to_chat(usr, "<span class='notice'>You tighten the valve to slowly drip-feed the contents of [src].</span>")
|
||||
|
||||
/obj/machinery/iv_drip/attack_robot(mob/user)
|
||||
if(Adjacent(user))
|
||||
attack_hand(user)
|
||||
@@ -227,7 +240,7 @@
|
||||
|
||||
/obj/machinery/iv_drip/telescopic
|
||||
name = "telescopic IV drip"
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down."
|
||||
desc = "An IV drip with an advanced infusion pump that can both drain blood into and inject liquids from attached containers. Blood packs are processed at an accelerated rate. This one is telescopic, and can be picked up and put down.Alt-Click with a beaker attached to change the transfer rate."
|
||||
icon_state = "iv_drip"
|
||||
|
||||
/obj/machinery/iv_drip/telescopic/update_icon_state()
|
||||
|
||||
@@ -63,3 +63,23 @@
|
||||
|
||||
/datum/effect_system/lightning_spread
|
||||
effect_type = /obj/effect/particle_effect/sparks/electricity
|
||||
|
||||
//fake sparks, not subtyped because we don't want light/heat, nor checks inside an often used proc for a rare subcase for saving like 10 lines of code
|
||||
/obj/effect/particle_effect/fake_sparks
|
||||
name = "lightning"
|
||||
icon_state = "electricity"
|
||||
|
||||
/obj/effect/particle_effect/fake_sparks/Initialize()
|
||||
. = ..()
|
||||
flick(icon_state, src) // replay the animation
|
||||
playsound(src, "sparks", 100, TRUE)
|
||||
QDEL_IN(src, 20)
|
||||
|
||||
/datum/effect_system/fake_spark_spread
|
||||
effect_type = /obj/effect/particle_effect/fake_sparks
|
||||
|
||||
/proc/do_fake_sparks(n, c, source)
|
||||
var/datum/effect_system/fake_spark_spread/sparks = new
|
||||
sparks.set_up(n, c, source)
|
||||
sparks.autocleanup = TRUE
|
||||
sparks.start()
|
||||
|
||||
@@ -47,8 +47,11 @@
|
||||
spawn_option(stored_options[choice],M)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/choice_beacon/proc/spawn_option(obj/choice,mob/living/M)
|
||||
var/obj/new_item = new choice()
|
||||
/obj/item/choice_beacon/proc/create_choice_atom(atom/choice, mob/owner)
|
||||
return new choice()
|
||||
|
||||
/obj/item/choice_beacon/proc/spawn_option(atom/choice,mob/living/M)
|
||||
var/obj/new_item = create_choice_atom(choice, M)
|
||||
var/obj/structure/closet/supplypod/bluespacepod/pod = new()
|
||||
pod.explosionSize = list(0,0,0,0)
|
||||
new_item.forceMove(pod)
|
||||
@@ -152,10 +155,50 @@
|
||||
augment_list[initial(A.name)] = A
|
||||
return augment_list
|
||||
|
||||
/obj/item/choice_beacon/augments/spawn_option(obj/choice,mob/living/M)
|
||||
/obj/item/choice_beacon/augments/spawn_option(atom/choice,mob/living/M)
|
||||
new choice(get_turf(M))
|
||||
to_chat(M, "<span class='hear'>You hear something crackle from the beacon for a moment before a voice speaks. \"Please stand by for a message from S.E.L.F. Message as follows: <b>Item request received. Your package has been transported, use the autosurgeon supplied to apply the upgrade.</b> Message ends.\"</span>")
|
||||
|
||||
/obj/item/choice_beacon/pet //donator beacon that summons a small friendly animal
|
||||
name = "pet beacon"
|
||||
desc = "Straight from the outerspace pet shop to your feet."
|
||||
var/static/list/pets = list("Crab" = /mob/living/simple_animal/crab,
|
||||
"Cat" = /mob/living/simple_animal/pet/cat,
|
||||
"Space cat" = /mob/living/simple_animal/pet/cat/space,
|
||||
"Kitten" = /mob/living/simple_animal/pet/cat/kitten,
|
||||
"Dog" = /mob/living/simple_animal/pet/dog,
|
||||
"Corgi" = /mob/living/simple_animal/pet/dog/corgi,
|
||||
"Pug" = /mob/living/simple_animal/pet/dog/pug,
|
||||
"Exotic Corgi" = /mob/living/simple_animal/pet/dog/corgi/exoticcorgi,
|
||||
"Fox" = /mob/living/simple_animal/pet/fox,
|
||||
"Red Panda" = /mob/living/simple_animal/pet/redpanda,
|
||||
"Possum" = /mob/living/simple_animal/opossum)
|
||||
var/pet_name
|
||||
|
||||
/obj/item/choice_beacon/pet/generate_display_names()
|
||||
return pets
|
||||
|
||||
/obj/item/choice_beacon/pet/create_choice_atom(atom/choice, mob/owner)
|
||||
var/mob/living/simple_animal/new_choice = new choice()
|
||||
new_choice.butcher_results = null //please don't eat your pet, chef
|
||||
var/obj/item/pet_carrier/donator/carrier = new() //a donator pet carrier is just a carrier that can't be shoved in an autolathe for metal
|
||||
carrier.add_occupant(new_choice)
|
||||
new_choice.mob_size = MOB_SIZE_TINY //yeah we're not letting you use this roundstart pet to hurt people / knock them down
|
||||
new_choice.pass_flags = PASSTABLE | PASSMOB //your pet is not a bullet/person shield
|
||||
new_choice.density = FALSE
|
||||
new_choice.blood_volume = 0 //your pet cannot be used to drain blood from for a bloodsucker
|
||||
new_choice.desc = "A pet [initial(choice.name)], owned by [owner]!"
|
||||
new_choice.can_have_ai = FALSE //no it cant be sentient damnit
|
||||
if(pet_name)
|
||||
new_choice.name = pet_name
|
||||
new_choice.unique_name = TRUE
|
||||
return carrier
|
||||
|
||||
/obj/item/choice_beacon/pet/spawn_option(atom/choice,mob/living/M)
|
||||
pet_name = input(M, "What would you like to name the pet? (leave blank for default name)", "Pet Name")
|
||||
..()
|
||||
|
||||
//choice boxes (they just open in your hand instead of making a pod)
|
||||
/obj/item/choice_beacon/box
|
||||
name = "choice box (default)"
|
||||
desc = "Think really hard about what you want, and then rip it open!"
|
||||
@@ -163,21 +206,17 @@
|
||||
icon_state = "deliverypackage3"
|
||||
item_state = "deliverypackage3"
|
||||
|
||||
/obj/item/choice_beacon/box/spawn_option(obj/choice,mob/living/M)
|
||||
to_chat(M, "<span class='hear'>The box opens, revealing the [choice]!</span>")
|
||||
/obj/item/choice_beacon/box/spawn_option(atom/choice,mob/living/M)
|
||||
var/choice_text = choice
|
||||
if(ispath(choice_text))
|
||||
choice_text = initial(choice.name)
|
||||
to_chat(M, "<span class='hear'>The box opens, revealing the [choice_text]!</span>")
|
||||
playsound(src.loc, 'sound/items/poster_ripped.ogg', 50, 1)
|
||||
M.temporarilyRemoveItemFromInventory(src, TRUE)
|
||||
M.put_in_hands(new choice)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/choice_beacon/box/plushie
|
||||
name = "choice box (plushie)"
|
||||
desc = "Using the power of quantum entanglement, this box contains every plush, until the moment it is opened!"
|
||||
icon = 'icons/obj/plushes.dmi'
|
||||
icon_state = "box"
|
||||
item_state = "box"
|
||||
|
||||
/obj/item/choice_beacon/box/spawn_option(choice,mob/living/M)
|
||||
/obj/item/choice_beacon/box/plushie/spawn_option(choice,mob/living/M)
|
||||
if(ispath(choice, /obj/item/toy/plush))
|
||||
..() //regular plush, spawn it naturally
|
||||
else
|
||||
@@ -188,6 +227,31 @@
|
||||
M.put_in_hands(new choice)
|
||||
qdel(src)
|
||||
|
||||
/obj/item/choice_beacon/box/carpet //donator carpet beacon
|
||||
name = "choice box (carpet)"
|
||||
desc = "Contains 50 of a selected carpet inside!"
|
||||
var/static/list/carpet_list = list(/obj/item/stack/tile/carpet/black/fifty = "Black Carpet",
|
||||
"Black & Red Carpet" = /obj/item/stack/tile/carpet/blackred/fifty,
|
||||
"Monochrome Carpet" = /obj/item/stack/tile/carpet/monochrome/fifty,
|
||||
"Blue Carpet" = /obj/item/stack/tile/carpet/blue/fifty,
|
||||
"Cyan Carpet" = /obj/item/stack/tile/carpet/cyan/fifty,
|
||||
"Green Carpet" = /obj/item/stack/tile/carpet/green/fifty,
|
||||
"Orange Carpet" = /obj/item/stack/tile/carpet/orange/fifty,
|
||||
"Purple Carpet" = /obj/item/stack/tile/carpet/purple/fifty,
|
||||
"Red Carpet" = /obj/item/stack/tile/carpet/red/fifty,
|
||||
"Royal Black Carpet" = /obj/item/stack/tile/carpet/royalblack/fifty,
|
||||
"Royal Blue Carpet" = /obj/item/stack/tile/carpet/royalblue/fifty)
|
||||
|
||||
/obj/item/choice_beacon/box/carpet/generate_display_names()
|
||||
return carpet_list
|
||||
|
||||
/obj/item/choice_beacon/box/plushie
|
||||
name = "choice box (plushie)"
|
||||
desc = "Using the power of quantum entanglement, this box contains every plush, until the moment it is opened!"
|
||||
icon = 'icons/obj/plushes.dmi'
|
||||
icon_state = "box"
|
||||
item_state = "box"
|
||||
|
||||
/obj/item/choice_beacon/box/plushie/generate_display_names()
|
||||
var/list/plushie_list = list()
|
||||
//plushie set 1: just subtypes of /obj/item/toy/plush
|
||||
|
||||
@@ -29,6 +29,9 @@
|
||||
var/has_lock_sprites = TRUE //whether to load the lock overlays or not
|
||||
var/allows_hostiles = FALSE //does the pet carrier allow hostile entities to be held within it?
|
||||
|
||||
/obj/item/pet_carrier/donator
|
||||
custom_materials = null //you cant just use the loadout item to get free metal!
|
||||
|
||||
/obj/item/pet_carrier/Destroy()
|
||||
if(occupants.len)
|
||||
for(var/V in occupants)
|
||||
|
||||
@@ -281,6 +281,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
/obj/item/clothing/suit/armor/vest/infiltrator,
|
||||
/obj/item/clothing/under/syndicate/bloodred,
|
||||
/obj/item/clothing/gloves/color/latex/nitrile/infiltrator,
|
||||
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator,
|
||||
/obj/item/clothing/mask/infiltrator,
|
||||
/obj/item/clothing/shoes/combat/sneakboots,
|
||||
/obj/item/gun/ballistic/automatic/pistol,
|
||||
@@ -292,7 +293,7 @@ GLOBAL_LIST_EMPTY(rubber_toolbox_icons)
|
||||
new /obj/item/clothing/head/helmet/infiltrator(src)
|
||||
new /obj/item/clothing/suit/armor/vest/infiltrator(src)
|
||||
new /obj/item/clothing/under/syndicate/bloodred(src)
|
||||
new /obj/item/clothing/gloves/color/latex/nitrile/infiltrator(src)
|
||||
new /obj/item/clothing/gloves/tackler/combat/insulated/infiltrator(src)
|
||||
new /obj/item/clothing/mask/infiltrator(src)
|
||||
new /obj/item/clothing/shoes/combat/sneakboots(src)
|
||||
|
||||
|
||||
@@ -291,7 +291,8 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
righthand_file = 'icons/mob/inhands/weapons/swords_righthand.dmi'
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_BACK
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
force = 9
|
||||
force = 7 //how much harm mode damage we do
|
||||
var/stamina_damage_increment = 4 //how much extra damage do we do when in non-harm mode
|
||||
throwforce = 10
|
||||
damtype = STAMINA
|
||||
attack_verb = list("whacked", "smacked", "struck")
|
||||
@@ -342,17 +343,19 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301
|
||||
/obj/item/melee/bokken/Initialize()
|
||||
. = ..()
|
||||
AddElement(/datum/element/sword_point)
|
||||
if(!harm) //if initialised in non-harm mode, setup force accordingly
|
||||
force = force + stamina_damage_increment
|
||||
|
||||
/obj/item/melee/bokken/attack_self(mob/user)
|
||||
harm = !harm
|
||||
if(harm)
|
||||
force -= 2
|
||||
force -= stamina_damage_increment
|
||||
damtype = BRUTE
|
||||
attack_verb = list("bashed", "smashed", "attacked")
|
||||
bare_wound_bonus = 15 // having your leg smacked by a wooden stick is probably not great for it if it's naked
|
||||
wound_bonus = 0
|
||||
else
|
||||
force += 2
|
||||
force += stamina_damage_increment
|
||||
damtype = STAMINA
|
||||
attack_verb = list("whacked", "smacked", "struck")
|
||||
bare_wound_bonus = 0
|
||||
|
||||
@@ -243,10 +243,24 @@ LINEN BINS
|
||||
|
||||
/obj/item/bedsheet/random/Initialize()
|
||||
..()
|
||||
var/type = pick(typesof(/obj/item/bedsheet) - /obj/item/bedsheet/random)
|
||||
var/type = pick(typesof(/obj/item/bedsheet) - list(/obj/item/bedsheet/random, /obj/item/bedsheet/chameleon))
|
||||
new type(loc)
|
||||
return INITIALIZE_HINT_QDEL
|
||||
|
||||
/obj/item/bedsheet/chameleon //donator chameleon bedsheet
|
||||
name = "chameleon bedsheet"
|
||||
desc = "Bedsheet technology has truly gone too far."
|
||||
var/datum/action/item_action/chameleon/change/chameleon_action
|
||||
|
||||
/obj/item/bedsheet/chameleon/New()
|
||||
..()
|
||||
chameleon_action = new(src)
|
||||
chameleon_action.chameleon_type = /obj/item/bedsheet
|
||||
chameleon_action.chameleon_name = "Bedsheet"
|
||||
chameleon_action.chameleon_blacklist = typecacheof(list(/obj/item/bedsheet/chameleon, /obj/item/bedsheet/random), only_root_path = TRUE)
|
||||
chameleon_action.initialize_disguises()
|
||||
|
||||
//bedsheet bin
|
||||
/obj/structure/bedsheetbin
|
||||
name = "linen bin"
|
||||
desc = "It looks rather cosy."
|
||||
|
||||
@@ -86,6 +86,10 @@
|
||||
|
||||
/obj/structure/grille/attack_animal(mob/user)
|
||||
. = ..()
|
||||
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
|
||||
return
|
||||
user.DelayNextAction(flush = TRUE)
|
||||
user.do_attack_animation(src)
|
||||
if(!shock(user, 70) && !QDELETED(src)) //Last hit still shocks but shouldn't deal damage to the grille)
|
||||
take_damage(rand(5,10), BRUTE, "melee", 1)
|
||||
|
||||
@@ -114,12 +118,12 @@
|
||||
/obj/structure/grille/attack_alien(mob/living/user)
|
||||
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
|
||||
return
|
||||
user.DelayNextAction(flush = TRUE)
|
||||
user.do_attack_animation(src)
|
||||
user.visible_message("<span class='warning'>[user] mangles [src].</span>", null, null, COMBAT_MESSAGE_RANGE)
|
||||
if(!shock(user, 70))
|
||||
take_damage(20, BRUTE, "melee", 1)
|
||||
|
||||
|
||||
/obj/structure/grille/CanPass(atom/movable/mover, turf/target)
|
||||
if(istype(mover) && (mover.pass_flags & PASSGRILLE))
|
||||
return TRUE
|
||||
|
||||
@@ -130,6 +130,10 @@
|
||||
/proc/get_sfx(soundin)
|
||||
if(istext(soundin))
|
||||
switch(soundin)
|
||||
if ("explosion_creaking") // from skyrat-ss13/skyrat13/pull/3295
|
||||
soundin = pick('sound/effects/explosioncreak1.ogg', 'sound/effects/explosioncreak2.ogg')
|
||||
if ("hull_creaking") // from skyrat-ss13/skyrat13/pull/3295
|
||||
soundin = pick('sound/effects/creak1.ogg', 'sound/effects/creak2.ogg', 'sound/effects/creak3.ogg')
|
||||
if ("shatter")
|
||||
soundin = pick('sound/effects/glassbr1.ogg','sound/effects/glassbr2.ogg','sound/effects/glassbr3.ogg')
|
||||
if ("explosion")
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
REMOVE_TRAIT(user, TRAIT_PIERCEIMMUNE, "fortitude")
|
||||
REMOVE_TRAIT(user, TRAIT_NODISMEMBER, "fortitude")
|
||||
REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
|
||||
REMOVE_TRAIT(user, TRAIT_STUNIMMUNE, "fortitude")
|
||||
REMOVE_TRAIT(user, TRAIT_NORUNNING, "fortitude")
|
||||
if(!ishuman(owner))
|
||||
return
|
||||
var/mob/living/carbon/human/H = owner
|
||||
|
||||
@@ -246,6 +246,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
/// Which of the 5 persistent scar slots we randomly roll to load for this round, if enabled. Actually rolled in [/datum/preferences/proc/load_character(slot)]
|
||||
var/scars_index = 1
|
||||
|
||||
var/chosen_limb_id //body sprite selected to load for the users limbs, null means default, is sanitized when loaded
|
||||
|
||||
/datum/preferences/New(client/C)
|
||||
parent = C
|
||||
|
||||
@@ -521,6 +523,12 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
|
||||
if(length(pref_species.allowed_limb_ids))
|
||||
if(!chosen_limb_id || !(chosen_limb_id in pref_species.allowed_limb_ids))
|
||||
chosen_limb_id = pref_species.id
|
||||
dat += "<h3>Body sprite</h3>"
|
||||
dat += "<a style='display:block;width:100px' href='?_src_=prefs;preference=bodysprite;task=input'>[chosen_limb_id]</a>"
|
||||
|
||||
if(mutant_category)
|
||||
dat += "</td>"
|
||||
mutant_category = 0
|
||||
@@ -801,7 +809,7 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
if(!subcategories.Find(gear_subcategory))
|
||||
gear_subcategory = subcategories[1]
|
||||
|
||||
var/firstsubcat = FALSE
|
||||
var/firstsubcat = TRUE
|
||||
for(var/subcategory in subcategories)
|
||||
if(firstsubcat)
|
||||
firstsubcat = FALSE
|
||||
@@ -2092,8 +2100,6 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
else
|
||||
features["body_model"] = chosengender
|
||||
gender = chosengender
|
||||
facial_hair_style = random_facial_hair_style(gender)
|
||||
hair_style = random_hair_style(gender)
|
||||
|
||||
if("body_size")
|
||||
var/min = CONFIG_GET(number/body_size_min)
|
||||
@@ -2119,6 +2125,11 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
var/selected_custom_speech_verb = input(user, "Choose your desired speech verb (none means your species speech verb)", "Character Preference") as null|anything in GLOB.speech_verbs
|
||||
if(selected_custom_speech_verb)
|
||||
custom_speech_verb = selected_custom_speech_verb
|
||||
|
||||
if("bodysprite")
|
||||
var/selected_body_sprite = input(user, "Choose your desired body sprite", "Character Preference") as null|anything in pref_species.allowed_limb_ids
|
||||
if(selected_body_sprite)
|
||||
chosen_limb_id = selected_body_sprite //this gets sanitized before loading
|
||||
else
|
||||
switch(href_list["preference"])
|
||||
//CITADEL PREFERENCES EDIT - I can't figure out how to modularize these, so they have to go here. :c -Pooj
|
||||
@@ -2510,6 +2521,8 @@ GLOBAL_LIST_EMPTY(preferences_datums)
|
||||
|
||||
character.dna.features = features.Copy()
|
||||
character.set_species(chosen_species, icon_update = FALSE, pref_load = TRUE)
|
||||
if(chosen_limb_id && (chosen_limb_id in character.dna.species.allowed_limb_ids))
|
||||
character.dna.species.mutant_bodyparts["limbs_id"] = chosen_limb_id
|
||||
character.dna.real_name = character.real_name
|
||||
character.dna.nameless = character.nameless
|
||||
character.dna.custom_species = character.custom_species
|
||||
|
||||
@@ -514,6 +514,7 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
S["scars3"] >> scars_list["3"]
|
||||
S["scars4"] >> scars_list["4"]
|
||||
S["scars5"] >> scars_list["5"]
|
||||
S["chosen_limb_id"] >> chosen_limb_id
|
||||
|
||||
|
||||
//Custom names
|
||||
@@ -844,6 +845,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car
|
||||
|
||||
WRITE_FILE(S["feature_ooc_notes"], features["ooc_notes"])
|
||||
|
||||
WRITE_FILE(S["chosen_limb_id"], chosen_limb_id)
|
||||
|
||||
//Custom names
|
||||
for(var/custom_name_id in GLOB.preferences_custom_names)
|
||||
var/savefile_slot_name = custom_name_id + "_name" //TODO remove this
|
||||
|
||||
@@ -199,12 +199,16 @@
|
||||
|
||||
/obj/item/clothing/gloves/evening
|
||||
name = "evening gloves"
|
||||
desc = "Thin, pretty gloves intended for use in regal feminine attire, but knowing Space China these are just for some maid fetish."
|
||||
desc = "Thin, pretty gloves intended for use in regal feminine attire. A tag on the hem claims they were 'maid' in Space China, these were probably intended for use in some maid fetish."
|
||||
icon_state = "evening"
|
||||
item_state = "evening"
|
||||
strip_delay = 40
|
||||
equip_delay_other = 20
|
||||
transfer_prints = TRUE
|
||||
cold_protection = HANDS
|
||||
min_cold_protection_temperature = GLOVES_MIN_TEMP_PROTECT
|
||||
strip_mod = 0.9
|
||||
custom_price = PRICE_ALMOST_CHEAP
|
||||
|
||||
/obj/item/clothing/gloves/evening/black
|
||||
name = "midnight gloves"
|
||||
desc = "Thin, pretty gloves intended for use in sexy feminine attire. A tag on the hem claims they pair great with black stockings."
|
||||
icon_state = "eveningblack"
|
||||
item_state = "eveningblack"
|
||||
|
||||
@@ -72,6 +72,25 @@
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
|
||||
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator
|
||||
name = "insidious guerrilla gloves"
|
||||
desc = "Specialized combat gloves for carrying people around. Transfers tactical kidnapping and tackling knowledge to the user via the use of nanochips."
|
||||
icon_state = "infiltrator"
|
||||
item_state = "infiltrator"
|
||||
siemens_coefficient = 0
|
||||
permeability_coefficient = 0.05
|
||||
resistance_flags = FIRE_PROOF | ACID_PROOF
|
||||
var/carrytrait = TRAIT_QUICKER_CARRY
|
||||
|
||||
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/equipped(mob/user, slot)
|
||||
. = ..()
|
||||
if(slot == SLOT_GLOVES)
|
||||
ADD_TRAIT(user, carrytrait, GLOVE_TRAIT)
|
||||
|
||||
/obj/item/clothing/gloves/tackler/combat/insulated/infiltrator/dropped(mob/user)
|
||||
. = ..()
|
||||
REMOVE_TRAIT(user, carrytrait, GLOVE_TRAIT)
|
||||
|
||||
/obj/item/clothing/gloves/tackler/rocket
|
||||
name = "rocket gloves"
|
||||
desc = "The ultimate in high risk, high reward, perfect for when you need to stop a criminal from fifty feet away or die trying. Banned in most Spinward gridiron football and rugby leagues."
|
||||
|
||||
@@ -625,7 +625,7 @@
|
||||
desc = "An arctic white winter coat with a small blue caduceus instead of a plastic zipper tab. Snazzy."
|
||||
icon_state = "coatmedical"
|
||||
item_state = "coatmedical"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/medical
|
||||
|
||||
@@ -638,7 +638,7 @@
|
||||
desc = "An arctic white winter coat with a small blue caduceus instead of a plastic zipper tab. The normal liner is replaced with an exceptionally thick, soft layer of fur."
|
||||
icon_state = "coatcmo"
|
||||
item_state = "coatcmo"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 5, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/cmo
|
||||
|
||||
@@ -651,7 +651,7 @@
|
||||
desc = "A lab-grade winter coat made with acid resistant polymers. For the enterprising chemist who was exiled to a frozen wasteland on the go."
|
||||
icon_state = "coatchemistry"
|
||||
item_state = "coatchemistry"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 30, "acid" = 45)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/chemistry
|
||||
|
||||
@@ -664,7 +664,7 @@
|
||||
desc = "A white winter coat with green markings. Warm, but wont fight off the common cold or any other disease. Might make people stand far away from you in the hallway. The zipper tab looks like an oversized bacteriophage."
|
||||
icon_state = "coatviro"
|
||||
item_state = "coatviro"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 30, "rad" = 0, "fire" = 0, "acid" = 0)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/viro
|
||||
|
||||
@@ -677,7 +677,7 @@
|
||||
desc = "A winter coat with blue markings. Warm, but probably won't protect from biological agents. For the cozy doctor on the go."
|
||||
icon_state = "coatparamed"
|
||||
item_state = "coatparamed"
|
||||
allowed = list(/obj/item/analyzer, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
allowed = list(/obj/item/analyzer, /obj/item/sensor_device, /obj/item/stack/medical, /obj/item/dnainjector, /obj/item/reagent_containers/dropper, /obj/item/reagent_containers/syringe, /obj/item/reagent_containers/hypospray, /obj/item/healthanalyzer, /obj/item/flashlight/pen, /obj/item/reagent_containers/glass/bottle, /obj/item/reagent_containers/glass/beaker, /obj/item/reagent_containers/pill, /obj/item/storage/pill_bottle, /obj/item/paper, /obj/item/melee/classic_baton/telescopic, /obj/item/toy, /obj/item/storage/fancy/cigarettes, /obj/item/lighter, /obj/item/tank/internals/emergency_oxygen, /obj/item/tank/internals/plasmaman)
|
||||
armor = list("melee" = 0, "bullet" = 0, "laser" = 0,"energy" = 0, "bomb" = 0, "bio" = 50, "rad" = 0, "fire" = 0, "acid" = 45)
|
||||
hoodtype = /obj/item/clothing/head/hooded/winterhood/paramedic
|
||||
|
||||
|
||||
@@ -97,9 +97,12 @@ All foods are distributed among various categories. Use common sense.
|
||||
return
|
||||
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/attack(mob/living/M, mob/living/user, def_zone)
|
||||
/obj/item/reagent_containers/food/snacks/attack(mob/living/M, mob/living/user, attackchain_flags = NONE, damage_multiplier = 1)
|
||||
if(user.a_intent == INTENT_HARM)
|
||||
return ..()
|
||||
INVOKE_ASYNC(src, .proc/attempt_forcefeed, M, user)
|
||||
|
||||
/obj/item/reagent_containers/food/snacks/proc/attempt_forcefeed(mob/living/M, mob/living/user)
|
||||
if(!eatverb)
|
||||
eatverb = pick("bite","chew","nibble","gnaw","gobble","chomp")
|
||||
if(!reagents.total_volume) //Shouldn't be needed but it checks to see if it has anything left in it.
|
||||
|
||||
@@ -103,6 +103,7 @@
|
||||
throwforce = 5
|
||||
throw_speed = 2
|
||||
throw_range = 3
|
||||
attack_speed = CLICK_CD_MELEE
|
||||
w_class = WEIGHT_CLASS_BULKY
|
||||
flags_1 = CONDUCT_1
|
||||
armour_penetration = 20
|
||||
@@ -125,9 +126,12 @@
|
||||
playsound(src,pick('sound/misc/desceration-01.ogg','sound/misc/desceration-02.ogg','sound/misc/desceration-01.ogg') ,50, 1, -1)
|
||||
return (BRUTELOSS)
|
||||
|
||||
/obj/item/scythe/pre_attack(atom/A, mob/living/user, params)
|
||||
/obj/item/scythe/pre_attack(atom/A, mob/living/user, params, attackchain_flags, damage_multiplier)
|
||||
. = ..()
|
||||
if(. & STOP_ATTACK_PROC_CHAIN)
|
||||
return
|
||||
if(swiping || !istype(A, /obj/structure/spacevine) || get_turf(A) == get_turf(user))
|
||||
return ..()
|
||||
return
|
||||
else
|
||||
var/turf/user_turf = get_turf(user)
|
||||
var/dir_to_target = get_dir(user_turf, get_turf(A))
|
||||
@@ -138,11 +142,12 @@
|
||||
var/turf/T = get_step(user_turf, turn(dir_to_target, i))
|
||||
for(var/obj/structure/spacevine/V in T)
|
||||
if(user.Adjacent(V))
|
||||
melee_attack_chain(user, V)
|
||||
melee_attack_chain(user, V, attackchain_flags = ATTACK_IGNORE_CLICKDELAY)
|
||||
stam_gain += 5 //should be hitcost
|
||||
swiping = FALSE
|
||||
stam_gain += 2 //Initial hitcost
|
||||
user.adjustStaminaLoss(-stam_gain)
|
||||
user.DelayNextAction()
|
||||
|
||||
// *************************************
|
||||
// Nutrient defines for hydroponics
|
||||
@@ -192,4 +197,4 @@
|
||||
/obj/item/reagent_containers/glass/bottle/killer/pestkiller
|
||||
name = "bottle of pest spray"
|
||||
desc = "Contains a pesticide."
|
||||
list_reagents = list(/datum/reagent/toxin/pestkiller = 50)
|
||||
list_reagents = list(/datum/reagent/toxin/pestkiller = 50)
|
||||
|
||||
@@ -2,6 +2,12 @@
|
||||
#define MUSIC_MAXLINES 1000
|
||||
#define MUSIC_MAXLINECHARS 300
|
||||
|
||||
/**
|
||||
* # Song datum
|
||||
*
|
||||
* These are the actual backend behind instruments.
|
||||
* They attach to an atom and provide the editor + playback functionality.
|
||||
*/
|
||||
/datum/song
|
||||
/// Name of the song
|
||||
var/name = "Untitled"
|
||||
@@ -15,6 +21,9 @@
|
||||
/// delay between notes in deciseconds
|
||||
var/tempo = 5
|
||||
|
||||
/// How far we can be heard
|
||||
var/instrument_range = 15
|
||||
|
||||
/// Are we currently playing?
|
||||
var/playing = FALSE
|
||||
|
||||
@@ -53,17 +62,24 @@
|
||||
|
||||
/////////////////// Playing variables ////////////////
|
||||
/**
|
||||
* Only used in synthesized playback - The chords we compiled. Non assoc list of lists:
|
||||
* list(list(key1, key2, key3..., tempo_divisor), list(key1, key2..., tempo_divisor), ...)
|
||||
* tempo_divisor always exists
|
||||
* if key1 (and so if there's no keys) doesn't exist it's a rest
|
||||
* Build by compile_chords()
|
||||
* Must be rebuilt on instrument switch.
|
||||
* Compilation happens when we start playing and is cleared after we finish playing.
|
||||
* Format: list of chord lists, with chordlists having (key1, key2, key3, tempodiv)
|
||||
*/
|
||||
var/list/compiled_chords
|
||||
/// Current section of a long chord we're on, so we don't need to make a billion chords, one for every unit ticklag.
|
||||
var/elapsed_delay
|
||||
/// Amount of delay to wait before playing the next chord
|
||||
var/delay_by
|
||||
/// Current chord we're on.
|
||||
var/current_chord
|
||||
/// Channel as text = current volume percentage but it's 0 to 100 instead of 0 to 1.
|
||||
var/list/channels_playing = list()
|
||||
/// List of channels that aren't being used, as text. This is to prevent unnecessary freeing and reallocations from SSsounds/SSinstruments.
|
||||
var/list/channels_idle = list()
|
||||
/// Person playing us
|
||||
var/mob/user_playing
|
||||
//////////////////////////////////////////////////////
|
||||
|
||||
/// Last world.time we checked for who can hear us
|
||||
@@ -72,8 +88,6 @@
|
||||
var/list/hearing_mobs
|
||||
/// If this is enabled, some things won't be strictly cleared when they usually are (liked compiled_chords on play stop)
|
||||
var/debug_mode = FALSE
|
||||
/// Last time we processed decay
|
||||
var/last_process_decay
|
||||
/// Max sound channels to occupy
|
||||
var/max_sound_channels = CHANNELS_PER_INSTRUMENT
|
||||
/// Current channels, so we can save a length() call.
|
||||
@@ -113,7 +127,7 @@
|
||||
var/cached_exponential_dropoff = 1.045
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/song/New(atom/parent, list/instrument_ids)
|
||||
/datum/song/New(atom/parent, list/instrument_ids, new_range)
|
||||
SSinstruments.on_song_new(src)
|
||||
lines = list()
|
||||
tempo = sanitize_tempo(tempo)
|
||||
@@ -125,6 +139,8 @@
|
||||
hearing_mobs = list()
|
||||
volume = clamp(volume, min_volume, max_volume)
|
||||
update_sustain()
|
||||
if(new_range)
|
||||
instrument_range = new_range
|
||||
|
||||
/datum/song/Destroy()
|
||||
stop_playing()
|
||||
@@ -135,12 +151,15 @@
|
||||
parent = null
|
||||
return ..()
|
||||
|
||||
/**
|
||||
* Checks and stores which mobs can hear us. Terminates sounds for mobs that leave our range.
|
||||
*/
|
||||
/datum/song/proc/do_hearcheck()
|
||||
last_hearcheck = world.time
|
||||
var/list/old = hearing_mobs.Copy()
|
||||
hearing_mobs.len = 0
|
||||
var/turf/source = get_turf(parent)
|
||||
for(var/mob/M in get_hearers_in_view(15, source))
|
||||
for(var/mob/M in get_hearers_in_view(instrument_range, source))
|
||||
if(!(M?.client?.prefs?.toggles & SOUND_INSTRUMENTS))
|
||||
continue
|
||||
hearing_mobs[M] = get_dist(M, source)
|
||||
@@ -148,10 +167,15 @@
|
||||
for(var/i in exited)
|
||||
terminate_sound_mob(i)
|
||||
|
||||
/// I can either be a datum, id, or path (if the instrument has no id).
|
||||
/**
|
||||
* Sets our instrument, caching anything necessary for faster accessing. Accepts an ID, typepath, or instantiated instrument datum.
|
||||
*/
|
||||
/datum/song/proc/set_instrument(datum/instrument/I)
|
||||
terminate_all_sounds()
|
||||
var/old_legacy
|
||||
if(using_instrument)
|
||||
using_instrument.songs_using -= src
|
||||
old_legacy = (using_instrument.instrument_flags & INSTRUMENT_LEGACY)
|
||||
using_instrument = null
|
||||
cached_samples = null
|
||||
cached_legacy_ext = null
|
||||
@@ -162,7 +186,7 @@
|
||||
if(istype(I))
|
||||
using_instrument = I
|
||||
I.songs_using += src
|
||||
var/instrument_legacy = CHECK_BITFIELD(I.instrument_flags, INSTRUMENT_LEGACY)
|
||||
var/instrument_legacy = (I.instrument_flags & INSTRUMENT_LEGACY)
|
||||
if(instrument_legacy)
|
||||
cached_legacy_ext = I.legacy_instrument_ext
|
||||
cached_legacy_dir = I.legacy_instrument_path
|
||||
@@ -170,23 +194,37 @@
|
||||
else
|
||||
cached_samples = I.samples
|
||||
legacy = FALSE
|
||||
if(isnull(old_legacy) || (old_legacy != instrument_legacy))
|
||||
if(playing)
|
||||
compile_chords()
|
||||
|
||||
/// THIS IS A BLOCKING CALL.
|
||||
/**
|
||||
* Attempts to start playing our song.
|
||||
*/
|
||||
/datum/song/proc/start_playing(mob/user)
|
||||
if(playing)
|
||||
return
|
||||
if(!using_instrument?.ready())
|
||||
to_chat(user, "<span class='warning'>An error has occured with [src]. Please reset the instrument.</span>")
|
||||
return
|
||||
compile_chords()
|
||||
if(!length(compiled_chords))
|
||||
to_chat(user, "<span class='warning'>Song is empty.</span>")
|
||||
return
|
||||
playing = TRUE
|
||||
updateDialog()
|
||||
updateDialog(user_playing)
|
||||
//we can not afford to runtime, since we are going to be doing sound channel reservations and if we runtime it means we have a channel allocation leak.
|
||||
//wrap the rest of the stuff to ensure stop_playing() is called.
|
||||
last_process_decay = world.time
|
||||
do_hearcheck()
|
||||
elapsed_delay = 0
|
||||
delay_by = 0
|
||||
current_chord = 1
|
||||
user_playing = user
|
||||
START_PROCESSING(SSinstruments, src)
|
||||
. = do_play_lines(user)
|
||||
stop_playing()
|
||||
|
||||
/**
|
||||
* Stops playing, terminating all sounds if in synthesized mode. Clears hearing_mobs.
|
||||
*/
|
||||
/datum/song/proc/stop_playing()
|
||||
if(!playing)
|
||||
return
|
||||
@@ -196,42 +234,93 @@
|
||||
STOP_PROCESSING(SSinstruments, src)
|
||||
terminate_all_sounds(TRUE)
|
||||
hearing_mobs.len = 0
|
||||
updateDialog()
|
||||
user_playing = null
|
||||
|
||||
/// THIS IS A BLOCKING CALL.
|
||||
/datum/song/proc/do_play_lines(user)
|
||||
if(!playing)
|
||||
/**
|
||||
* Processes our song.
|
||||
*/
|
||||
/datum/song/proc/process_song(wait)
|
||||
if(!length(compiled_chords) || should_stop_playing(user_playing))
|
||||
stop_playing()
|
||||
return
|
||||
do_hearcheck()
|
||||
if(legacy)
|
||||
do_play_lines_legacy(user)
|
||||
else
|
||||
do_play_lines_synthesized(user)
|
||||
var/list/chord = compiled_chords[current_chord]
|
||||
if(++elapsed_delay >= delay_by)
|
||||
play_chord(chord)
|
||||
elapsed_delay = 0
|
||||
delay_by = tempodiv_to_delay(chord[length(chord)])
|
||||
current_chord++
|
||||
if(current_chord > length(compiled_chords))
|
||||
if(repeat)
|
||||
repeat--
|
||||
current_chord = 1
|
||||
return
|
||||
else
|
||||
stop_playing()
|
||||
return
|
||||
|
||||
/**
|
||||
* Converts a tempodiv to ticks to elapse before playing the next chord, taking into account our tempo.
|
||||
*/
|
||||
/datum/song/proc/tempodiv_to_delay(tempodiv)
|
||||
if(!tempodiv)
|
||||
tempodiv = 1 // no division by 0. some song converters tend to use 0 for when it wants to have no div, for whatever reason.
|
||||
return max(1, round((tempo/tempodiv) / world.tick_lag, 1))
|
||||
|
||||
/**
|
||||
* Compiles chords.
|
||||
*/
|
||||
/datum/song/proc/compile_chords()
|
||||
legacy? compile_legacy() : compile_synthesized()
|
||||
|
||||
/**
|
||||
* Plays a chord.
|
||||
*/
|
||||
/datum/song/proc/play_chord(list/chord)
|
||||
// last value is timing information
|
||||
for(var/i in 1 to (length(chord) - 1))
|
||||
legacy? playkey_legacy(chord[i][1], chord[i][2], chord[i][3], user_playing) : playkey_synth(chord[i], user_playing)
|
||||
|
||||
/**
|
||||
* Checks if we should halt playback.
|
||||
*/
|
||||
/datum/song/proc/should_stop_playing(mob/user)
|
||||
return QDELETED(parent) || !using_instrument || !playing
|
||||
|
||||
/**
|
||||
* Sanitizes tempo to a value that makes sense and fits the current world.tick_lag.
|
||||
*/
|
||||
/datum/song/proc/sanitize_tempo(new_tempo)
|
||||
new_tempo = abs(new_tempo)
|
||||
return clamp(round(new_tempo, world.tick_lag), world.tick_lag, 5 SECONDS)
|
||||
|
||||
/**
|
||||
* Gets our beats per minute based on our tempo.
|
||||
*/
|
||||
/datum/song/proc/get_bpm()
|
||||
return 600 / tempo
|
||||
|
||||
/**
|
||||
* Sets our tempo from a beats-per-minute, sanitizing it to a valid number first.
|
||||
*/
|
||||
/datum/song/proc/set_bpm(bpm)
|
||||
tempo = sanitize_tempo(600 / bpm)
|
||||
|
||||
/// Updates the window for our user. Override in subtypes.
|
||||
/datum/song/proc/updateDialog(mob/user = usr)
|
||||
/**
|
||||
* Updates the window for our users. Override down the line.
|
||||
*/
|
||||
/datum/song/proc/updateDialog(mob/user)
|
||||
ui_interact(user)
|
||||
|
||||
/datum/song/process(wait)
|
||||
if(!playing)
|
||||
return PROCESS_KILL
|
||||
var/delay = world.time - last_process_decay
|
||||
process_decay(delay)
|
||||
last_process_decay = world.time
|
||||
// it's expected this ticks at every world.tick_lag. if it lags, do not attempt to catch up.
|
||||
process_song(world.tick_lag)
|
||||
process_decay(world.tick_lag)
|
||||
|
||||
/**
|
||||
* Updates our cached linear/exponential falloff stuff, saving calculations down the line.
|
||||
*/
|
||||
/datum/song/proc/update_sustain()
|
||||
// Exponential is easy
|
||||
cached_exponential_dropoff = sustain_exponential_dropoff
|
||||
@@ -241,21 +330,33 @@
|
||||
var/volume_decrease_per_decisecond = volume_diff / target_duration
|
||||
cached_linear_dropoff = volume_decrease_per_decisecond
|
||||
|
||||
/**
|
||||
* Setter for setting output volume.
|
||||
*/
|
||||
/datum/song/proc/set_volume(volume)
|
||||
src.volume = clamp(volume, max(0, min_volume), min(100, max_volume))
|
||||
update_sustain()
|
||||
updateDialog()
|
||||
|
||||
/**
|
||||
* Setter for setting how low the volume has to get before a note is considered "dead" and dropped
|
||||
*/
|
||||
/datum/song/proc/set_dropoff_volume(volume)
|
||||
sustain_dropoff_volume = clamp(volume, INSTRUMENT_MIN_SUSTAIN_DROPOFF, 100)
|
||||
update_sustain()
|
||||
updateDialog()
|
||||
|
||||
/**
|
||||
* Setter for setting exponential falloff factor.
|
||||
*/
|
||||
/datum/song/proc/set_exponential_drop_rate(drop)
|
||||
sustain_exponential_dropoff = clamp(drop, INSTRUMENT_EXP_FALLOFF_MIN, INSTRUMENT_EXP_FALLOFF_MAX)
|
||||
update_sustain()
|
||||
updateDialog()
|
||||
|
||||
/**
|
||||
* Setter for setting linear falloff duration.
|
||||
*/
|
||||
/datum/song/proc/set_linear_falloff_duration(duration)
|
||||
sustain_linear_duration = clamp(duration, 0.1, INSTRUMENT_MAX_TOTAL_SUSTAIN)
|
||||
update_sustain()
|
||||
@@ -277,10 +378,8 @@
|
||||
// subtype for handheld instruments, like violin
|
||||
/datum/song/handheld
|
||||
|
||||
/datum/song/handheld/updateDialog(mob/user = usr)
|
||||
if(user.machine != src)
|
||||
return
|
||||
parent.ui_interact(user)
|
||||
/datum/song/handheld/updateDialog(mob/user)
|
||||
parent.ui_interact(user || usr)
|
||||
|
||||
/datum/song/handheld/should_stop_playing(mob/user)
|
||||
. = ..()
|
||||
@@ -292,10 +391,8 @@
|
||||
// subtype for stationary structures, like pianos
|
||||
/datum/song/stationary
|
||||
|
||||
/datum/song/stationary/updateDialog(mob/user = usr)
|
||||
if(user.machine != src)
|
||||
return
|
||||
parent.ui_interact(user)
|
||||
/datum/song/stationary/updateDialog(mob/user)
|
||||
parent.ui_interact(user || usr)
|
||||
|
||||
/datum/song/stationary/should_stop_playing(mob/user)
|
||||
. = ..()
|
||||
|
||||
@@ -1,48 +1,52 @@
|
||||
/// Playing legacy instruments - None of the "advanced" like sound reservations and decay are invoked.
|
||||
/datum/song/proc/do_play_lines_legacy(mob/user)
|
||||
while(repeat >= 0)
|
||||
var/cur_oct[7]
|
||||
var/cur_acc[7]
|
||||
for(var/i = 1 to 7)
|
||||
cur_oct[i] = 3
|
||||
cur_acc[i] = "n"
|
||||
/**
|
||||
* Compiles our lines into "chords" with filenames for legacy playback. This makes there have to be a bit of lag at the beginning of the song, but repeats will not have to parse it again, and overall playback won't be impacted by as much lag.
|
||||
*/
|
||||
/datum/song/proc/compile_legacy()
|
||||
if(!length(src.lines))
|
||||
return
|
||||
var/list/lines = src.lines //cache for hyepr speed!
|
||||
compiled_chords = list()
|
||||
var/list/octaves = list(3, 3, 3, 3, 3, 3, 3)
|
||||
var/list/accents = list("n", "n", "n", "n", "n", "n", "n")
|
||||
for(var/line in lines)
|
||||
var/list/chords = splittext(lowertext(line), ",")
|
||||
for(var/chord in chords)
|
||||
var/list/compiled_chord = list()
|
||||
var/tempodiv = 1
|
||||
var/list/notes_tempodiv = splittext(chord, "/")
|
||||
var/len = length(notes_tempodiv)
|
||||
if(len >= 2)
|
||||
tempodiv = text2num(notes_tempodiv[2])
|
||||
if(len) //some dunkass is going to do ,,,, to make 3 rests instead of ,/1 because there's no standardization so let's be prepared for that.
|
||||
var/list/notes = splittext(notes_tempodiv[1], "-")
|
||||
for(var/note in notes)
|
||||
if(length(note) == 0)
|
||||
continue
|
||||
// 1-7, A-G
|
||||
var/key = text2ascii(note) - 96
|
||||
if((key < 1) || (key > 7))
|
||||
continue
|
||||
for(var/i in 2 to length(note))
|
||||
var/oct_acc = copytext(note, i, i + 1)
|
||||
var/num = text2num(oct_acc)
|
||||
if(!num) //it's an accidental
|
||||
accents[key] = oct_acc //if they misspelled it/fucked up that's on them lmao, no safety checks.
|
||||
else //octave
|
||||
octaves[key] = clamp(num, octave_min, octave_max)
|
||||
compiled_chord[++compiled_chord.len] = list(key, accents[key], octaves[key])
|
||||
compiled_chord += tempodiv //this goes last
|
||||
if(length(compiled_chord))
|
||||
compiled_chords[++compiled_chords.len] = compiled_chord
|
||||
|
||||
for(var/line in lines)
|
||||
for(var/beat in splittext(lowertext(line), ","))
|
||||
if(should_stop_playing(user))
|
||||
return
|
||||
var/list/notes = splittext(beat, "/")
|
||||
if(length(notes)) //because some jack-butts are going to do ,,,, to symbolize 3 rests instead of something reasonable like ,/1.
|
||||
for(var/note in splittext(notes[1], "-"))
|
||||
if(length(note) == 0)
|
||||
continue
|
||||
var/cur_note = text2ascii(note) - 96
|
||||
if(cur_note < 1 || cur_note > 7)
|
||||
continue
|
||||
for(var/i=2 to length(note))
|
||||
var/ni = copytext(note,i,i+1)
|
||||
if(!text2num(ni))
|
||||
if(ni == "#" || ni == "b" || ni == "n")
|
||||
cur_acc[cur_note] = ni
|
||||
else if(ni == "s")
|
||||
cur_acc[cur_note] = "#" // so shift is never required
|
||||
else
|
||||
cur_oct[cur_note] = text2num(ni)
|
||||
playnote_legacy(cur_note, cur_acc[cur_note], cur_oct[cur_note])
|
||||
if(notes.len >= 2 && text2num(notes[2]))
|
||||
sleep(sanitize_tempo(tempo / text2num(notes[2])))
|
||||
else
|
||||
sleep(tempo)
|
||||
if(should_stop_playing(user))
|
||||
return
|
||||
repeat--
|
||||
updateDialog()
|
||||
repeat = 0
|
||||
|
||||
// note is a number from 1-7 for A-G
|
||||
// acc is either "b", "n", or "#"
|
||||
// oct is 1-8 (or 9 for C)
|
||||
/datum/song/proc/playnote_legacy(note, acc as text, oct)
|
||||
/**
|
||||
* Proc to play a legacy note. Just plays the sound to hearing mobs (and does hearcheck if necessary), no fancy channel/sustain/management.
|
||||
*
|
||||
* Arguments:
|
||||
* * note is a number from 1-7 for A-G
|
||||
* * acc is either "b", "n", or "#"
|
||||
* * oct is 1-8 (or 9 for C)
|
||||
*/
|
||||
/datum/song/proc/playkey_legacy(note, acc as text, oct, mob/user)
|
||||
// handle accidental -> B<>C of E<>F
|
||||
if(acc == "b" && (note == 3 || note == 6)) // C or F
|
||||
if(note == 3)
|
||||
|
||||
@@ -1,27 +1,7 @@
|
||||
/datum/song/proc/do_play_lines_synthesized(mob/user)
|
||||
compile_lines()
|
||||
while(repeat >= 0)
|
||||
if(should_stop_playing(user))
|
||||
return
|
||||
var/warned = FALSE
|
||||
for(var/_chord in compiled_chords)
|
||||
if(should_stop_playing(user))
|
||||
return
|
||||
var/list/chord = _chord
|
||||
var/tempodiv = chord[chord.len]
|
||||
for(var/i in 1 to chord.len - 1)
|
||||
var/key = chord[i]
|
||||
if(!playkey_synth(key))
|
||||
if(!warned)
|
||||
warned = TRUE
|
||||
to_chat(user, "<span class='boldwarning'>Your instrument has ran out of channels. You might be playing your song too fast or be setting sustain to too high of a value. This warning will be suppressed for the rest of this cycle.</span>")
|
||||
sleep(sanitize_tempo(tempo / (tempodiv || 1)))
|
||||
repeat--
|
||||
updateDialog()
|
||||
repeat = 0
|
||||
|
||||
/// C-Db2-A-A4/2,A-B#4-C/3,/4,A,A-B-C as an example
|
||||
/datum/song/proc/compile_lines()
|
||||
/**
|
||||
* Compiles our lines into "chords" with numbers. This makes there have to be a bit of lag at the beginning of the song, but repeats will not have to parse it again, and overall playback won't be impacted by as much lag.
|
||||
*/
|
||||
/datum/song/proc/compile_synthesized()
|
||||
if(!length(src.lines))
|
||||
return
|
||||
var/list/lines = src.lines //cache for hyepr speed!
|
||||
@@ -57,10 +37,12 @@
|
||||
compiled_chord += tempodiv //this goes last
|
||||
if(length(compiled_chord))
|
||||
compiled_chords[++compiled_chords.len] = compiled_chord
|
||||
CHECK_TICK
|
||||
return compiled_chords
|
||||
|
||||
/datum/song/proc/playkey_synth(key)
|
||||
/**
|
||||
* Plays a specific numerical key from our instrument to anyone who can hear us.
|
||||
* Does a hearing check if enough time has passed.
|
||||
*/
|
||||
/datum/song/proc/playkey_synth(key, mob/user)
|
||||
if(can_noteshift)
|
||||
key = clamp(key + note_shift, key_min, key_max)
|
||||
if((world.time - MUSICIAN_HEARCHECK_MINDELAY) > last_hearcheck)
|
||||
@@ -83,6 +65,9 @@
|
||||
M.playsound_local(get_turf(parent), null, volume, FALSE, K.frequency, INSTRUMENT_DISTANCE_NO_FALLOFF, channel, null, copy, distance_multiplier = INSTRUMENT_DISTANCE_FALLOFF_BUFF)
|
||||
// Could do environment and echo later but not for now
|
||||
|
||||
/**
|
||||
* Stops all sounds we are "responsible" for. Only works in synthesized mode.
|
||||
*/
|
||||
/datum/song/proc/terminate_all_sounds(clear_channels = TRUE)
|
||||
for(var/i in hearing_mobs)
|
||||
terminate_sound_mob(i)
|
||||
@@ -93,10 +78,16 @@
|
||||
using_sound_channels = 0
|
||||
SSsounds.free_datum_channels(src)
|
||||
|
||||
/**
|
||||
* Stops all sounds we are responsible for in a given person. Only works in synthesized mode.
|
||||
*/
|
||||
/datum/song/proc/terminate_sound_mob(mob/M)
|
||||
for(var/channel in channels_playing)
|
||||
M.stop_sound_channel(text2num(channel))
|
||||
|
||||
/**
|
||||
* Pops a channel we have reserved so we don't have to release and re-request them from SSsounds every time we play a note. This is faster.
|
||||
*/
|
||||
/datum/song/proc/pop_channel()
|
||||
if(length(channels_idle)) //just pop one off of here if we have one available
|
||||
. = text2num(channels_idle[1])
|
||||
@@ -108,6 +99,12 @@
|
||||
if(!isnull(.))
|
||||
using_sound_channels++
|
||||
|
||||
/**
|
||||
* Decays our channels and updates their volumes to mobs who can hear us.
|
||||
*
|
||||
* Arguments:
|
||||
* * wait_ds - the deciseconds we should decay by. This is to compensate for any lag, as otherwise songs would get pretty nasty during high time dilation.
|
||||
*/
|
||||
/datum/song/proc/process_decay(wait_ds)
|
||||
var/linear_dropoff = cached_linear_dropoff * wait_ds
|
||||
var/exponential_dropoff = cached_exponential_dropoff ** wait_ds
|
||||
|
||||
@@ -35,18 +35,20 @@
|
||||
|
||||
return destinations
|
||||
|
||||
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent)
|
||||
/obj/item/wormhole_jaunter/proc/activate(mob/user, adjacent, force_entry = FALSE)
|
||||
if(!turf_check(user))
|
||||
return
|
||||
|
||||
var/list/L = get_destinations(user)
|
||||
if(!L.len)
|
||||
to_chat(user, "<span class='notice'>The [src.name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
to_chat(user, "<span class='notice'>The [name] found no beacons in the world to anchor a wormhole to.</span>")
|
||||
return
|
||||
var/chosen_beacon = pick(L)
|
||||
var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), src, 100, null, FALSE, get_turf(chosen_beacon))
|
||||
var/obj/effect/portal/jaunt_tunnel/J = new (get_turf(src), 100, null, FALSE, get_turf(chosen_beacon))
|
||||
if(adjacent)
|
||||
try_move_adjacent(J)
|
||||
if(force_entry)
|
||||
J.teleport(user, force = TRUE)
|
||||
playsound(src,'sound/effects/sparks4.ogg',50,1)
|
||||
qdel(src)
|
||||
|
||||
@@ -73,7 +75,7 @@
|
||||
if(user.get_item_by_slot(SLOT_BELT) == src)
|
||||
to_chat(user, "Your [name] activates, saving you from the chasm!</span>")
|
||||
SSblackbox.record_feedback("tally", "jaunter", 1, "Chasm") // chasm automatic activation
|
||||
activate(user, FALSE)
|
||||
activate(user, FALSE, TRUE)
|
||||
else
|
||||
to_chat(user, "[src] is not attached to your belt, preventing it from saving you from the chasm. RIP.</span>")
|
||||
|
||||
@@ -84,9 +86,10 @@
|
||||
icon_state = "bhole3"
|
||||
desc = "A stable hole in the universe made by a wormhole jaunter. Turbulent doesn't even begin to describe how rough passage through one of these is, but at least it will always get you somewhere near a beacon."
|
||||
mech_sized = TRUE //save your ripley
|
||||
teleport_channel = TELEPORT_CHANNEL_WORMHOLE
|
||||
innate_accuracy_penalty = 6
|
||||
|
||||
/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M)
|
||||
/obj/effect/portal/jaunt_tunnel/teleport(atom/movable/M, force = FALSE)
|
||||
. = ..()
|
||||
if(.)
|
||||
// KERPLUNK
|
||||
|
||||
@@ -14,14 +14,14 @@
|
||||
name = "Standard"
|
||||
icon_state = "standard"
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/down
|
||||
name = "Dorsal Down"
|
||||
icon_state = "down"
|
||||
|
||||
/datum/sprite_accessory/xeno_dorsal/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/******************************************
|
||||
************* Xeno Tails ******************
|
||||
*******************************************/
|
||||
@@ -57,14 +57,14 @@
|
||||
name = "Standard"
|
||||
icon_state = "standard"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/royal
|
||||
name = "royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/hollywood
|
||||
name = "hollywood"
|
||||
icon_state = "hollywood"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/royal
|
||||
name = "royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/xeno_head/warrior
|
||||
name = "warrior"
|
||||
icon_state = "warrior"
|
||||
|
||||
@@ -16,6 +16,12 @@
|
||||
icon_state = "dtiger"
|
||||
gender_specific = 1
|
||||
|
||||
/datum/sprite_accessory/body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/body_markings/ltiger
|
||||
name = "Light Tiger Body"
|
||||
icon_state = "ltiger"
|
||||
@@ -49,11 +55,6 @@
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/redpanda
|
||||
name = "Redpanda"
|
||||
icon_state = "redpanda"
|
||||
@@ -77,14 +78,14 @@
|
||||
icon_state = "bellyslim"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corgi
|
||||
name = "Corgi"
|
||||
icon_state = "corgi"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/cow
|
||||
name = "Bovine"
|
||||
icon_state = "bovine"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corgi
|
||||
name = "Corgi"
|
||||
icon_state = "corgi"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "corvid"
|
||||
@@ -139,15 +140,19 @@
|
||||
name = "Hyena"
|
||||
icon_state = "hyena"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/insect
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/lab
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
@@ -156,14 +161,15 @@
|
||||
name = "Otter"
|
||||
icon_state = "otter"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/panther
|
||||
name = "Panther"
|
||||
icon_state = "panther"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/possum
|
||||
name = "Possum"
|
||||
icon_state = "possum"
|
||||
@@ -172,6 +178,10 @@
|
||||
name = "Raccoon"
|
||||
icon_state = "raccoon"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "scolipede"
|
||||
@@ -181,18 +191,14 @@
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/tajaran
|
||||
name = "Tajaran"
|
||||
icon_state = "tajaran"
|
||||
@@ -232,75 +238,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/punished
|
||||
name = "Burnt Off"
|
||||
icon_state = "punished"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored
|
||||
name = "Colored (Hair)"
|
||||
icon_state = "snow"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored1
|
||||
name = "Colored (Primary)"
|
||||
icon_state = "snow"
|
||||
@@ -314,4 +255,69 @@
|
||||
/datum/sprite_accessory/insect_fluff/colored3
|
||||
name = "Colored (Tertiary)"
|
||||
icon_state = "snow"
|
||||
color_src = MUTCOLORS3
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/colored
|
||||
name = "Colored (Hair)"
|
||||
icon_state = "snow"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/gothic
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/moonfly
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/poison
|
||||
name = "Poison"
|
||||
icon_state = "poison"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/ragged
|
||||
name = "Ragged"
|
||||
icon_state = "ragged"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/reddish
|
||||
name = "Reddish"
|
||||
icon_state = "redish"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/royal
|
||||
name = "Royal"
|
||||
icon_state = "royal"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/snow
|
||||
name = "Snow"
|
||||
icon_state = "snow"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/whitefly
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_fluff/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
@@ -41,7 +41,7 @@
|
||||
extra = TRUE
|
||||
extra_color_src = NONE
|
||||
|
||||
/datum/sprite_accessory/ears/human/bigwolfdark
|
||||
/datum/sprite_accessory/ears/human/bigwolfdark //ignore alphabetical sort here for ease-of-use
|
||||
name = "Dark Big Wolf"
|
||||
icon_state = "bigwolfdark"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
@@ -55,6 +55,12 @@
|
||||
extra = TRUE
|
||||
extra_color_src = NONE
|
||||
|
||||
/datum/sprite_accessory/ears/bunny
|
||||
name = "Bunny"
|
||||
icon_state = "bunny"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
@@ -74,6 +80,12 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
@@ -115,12 +127,6 @@
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/ears/lab
|
||||
name = "Dog, Floppy"
|
||||
icon_state = "lab"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
@@ -133,18 +139,18 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/ears/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
@@ -169,12 +175,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/datum/sprite_accessory/ears/bunny
|
||||
name = "Bunny"
|
||||
icon_state = "bunny"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_ears.dmi'
|
||||
|
||||
/******************************************
|
||||
*************** Furry Ears ****************
|
||||
*******************************************/
|
||||
@@ -216,7 +216,7 @@
|
||||
extra = TRUE
|
||||
extra_color_src = NONE
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/bigwolfdark
|
||||
/datum/sprite_accessory/ears/mam_ears/bigwolfdark //alphabetical sort ignored here for ease-of-use
|
||||
name = "Dark Big Wolf"
|
||||
icon_state = "bigwolfdark"
|
||||
|
||||
@@ -226,6 +226,10 @@
|
||||
extra = TRUE
|
||||
extra_color_src = NONE
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/bunny
|
||||
name = "Bunny"
|
||||
icon_state = "bunny"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/cat
|
||||
name = "Cat"
|
||||
icon_state = "cat"
|
||||
@@ -256,13 +260,11 @@
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/elf
|
||||
name = "Elf"
|
||||
icon_state = "elf"
|
||||
color_src = MUTCOLORS3
|
||||
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/elephant
|
||||
name = "Elephant"
|
||||
icon_state = "elephant"
|
||||
@@ -283,15 +285,15 @@
|
||||
name = "Husky"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/jellyfish
|
||||
name = "Jellyfish"
|
||||
icon_state = "jellyfish"
|
||||
color_src = HAIR
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/kangaroo
|
||||
name = "kangaroo"
|
||||
icon_state = "kangaroo"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/lab
|
||||
name = "Dog, Long"
|
||||
icon_state = "lab"
|
||||
@@ -304,18 +306,14 @@
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
/datum/sprite_accessory/ears/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/rabbit
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
@@ -324,10 +322,10 @@
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/squirrel
|
||||
name = "Squirrel"
|
||||
icon_state = "squirrel"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
/datum/sprite_accessory/ears/mam_ears/bunny
|
||||
name = "Bunny"
|
||||
icon_state = "bunny"
|
||||
|
||||
@@ -11,6 +11,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/frills/aquatic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
/datum/sprite_accessory/frills/simple
|
||||
name = "Simple"
|
||||
icon_state = "simple"
|
||||
@@ -18,7 +22,3 @@
|
||||
/datum/sprite_accessory/frills/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/frills/aquatic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
gender = MALE // barf (unless you're a dorf, dorfs dig chix w/ beards :P)
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
/datum/sprite_accessory/facial_hair/shaved //this is exempt from the alphabetical sort
|
||||
name = "Shaved"
|
||||
icon_state = null
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/facial_hair/threeoclock
|
||||
name = "Beard (3 o\'Clock)"
|
||||
@@ -135,11 +139,6 @@
|
||||
name = "Mutton Chops with Moustache"
|
||||
icon_state = "facial_muttonmus"
|
||||
|
||||
/datum/sprite_accessory/facial_hair/shaved
|
||||
name = "Shaved"
|
||||
icon_state = null
|
||||
gender = NEUTER
|
||||
|
||||
/datum/sprite_accessory/facial_hair/sideburn
|
||||
name = "Sideburns"
|
||||
icon_state = "facial_sideburns"
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
// try to spell
|
||||
// you do not need to define _s or _l sub-states, game automatically does this for you
|
||||
|
||||
/datum/sprite_accessory/hair/bald //this is exempt from the alphabetical sort
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
|
||||
/datum/sprite_accessory/hair/afro
|
||||
name = "Afro"
|
||||
icon_state = "hair_afro"
|
||||
@@ -25,10 +29,6 @@
|
||||
name = "Ahoge"
|
||||
icon_state = "hair_antenna"
|
||||
|
||||
/datum/sprite_accessory/hair/bald
|
||||
name = "Bald"
|
||||
icon_state = "bald"
|
||||
|
||||
/datum/sprite_accessory/hair/balding
|
||||
name = "Balding Hair"
|
||||
icon_state = "hair_e"
|
||||
|
||||
@@ -12,22 +12,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/horns/simple
|
||||
name = "Simple"
|
||||
icon_state = "simple"
|
||||
|
||||
/datum/sprite_accessory/horns/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/horns/curled
|
||||
name = "Curled"
|
||||
icon_state = "curled"
|
||||
|
||||
/datum/sprite_accessory/horns/ram
|
||||
name = "Ram"
|
||||
icon_state = "ram"
|
||||
|
||||
/datum/sprite_accessory/horns/angler
|
||||
name = "Angeler"
|
||||
icon_state = "angler"
|
||||
@@ -40,3 +28,15 @@
|
||||
/datum/sprite_accessory/horns/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
|
||||
/datum/sprite_accessory/horns/ram
|
||||
name = "Ram"
|
||||
icon_state = "ram"
|
||||
|
||||
/datum/sprite_accessory/horns/simple
|
||||
name = "Simple"
|
||||
icon_state = "simple"
|
||||
|
||||
/datum/sprite_accessory/horns/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
@@ -11,96 +11,90 @@
|
||||
name = "Blank"
|
||||
icon_state = "blank"
|
||||
|
||||
/datum/sprite_accessory/screen/pink
|
||||
name = "Pink"
|
||||
icon_state = "pink"
|
||||
|
||||
/datum/sprite_accessory/screen/green
|
||||
name = "Green"
|
||||
icon_state = "green"
|
||||
|
||||
/datum/sprite_accessory/screen/red
|
||||
name = "Red"
|
||||
icon_state = "red"
|
||||
|
||||
/datum/sprite_accessory/screen/blue
|
||||
name = "Blue"
|
||||
icon_state = "blue"
|
||||
|
||||
/datum/sprite_accessory/screen/yellow
|
||||
name = "Yellow"
|
||||
icon_state = "yellow"
|
||||
|
||||
/datum/sprite_accessory/screen/shower
|
||||
name = "Shower"
|
||||
icon_state = "shower"
|
||||
|
||||
/datum/sprite_accessory/screen/nature
|
||||
name = "Nature"
|
||||
icon_state = "nature"
|
||||
|
||||
/datum/sprite_accessory/screen/eight
|
||||
name = "Eight"
|
||||
icon_state = "eight"
|
||||
|
||||
/datum/sprite_accessory/screen/goggles
|
||||
name = "Goggles"
|
||||
icon_state = "goggles"
|
||||
|
||||
/datum/sprite_accessory/screen/heart
|
||||
name = "Heart"
|
||||
icon_state = "heart"
|
||||
|
||||
/datum/sprite_accessory/screen/monoeye
|
||||
name = "Mono eye"
|
||||
icon_state = "monoeye"
|
||||
|
||||
/datum/sprite_accessory/screen/breakout
|
||||
name = "Breakout"
|
||||
icon_state = "breakout"
|
||||
|
||||
/datum/sprite_accessory/screen/purple
|
||||
name = "Purple"
|
||||
icon_state = "purple"
|
||||
|
||||
/datum/sprite_accessory/screen/scroll
|
||||
name = "Scroll"
|
||||
icon_state = "scroll"
|
||||
/datum/sprite_accessory/screen/bsod
|
||||
name = "BSOD"
|
||||
icon_state = "bsod"
|
||||
|
||||
/datum/sprite_accessory/screen/console
|
||||
name = "Console"
|
||||
icon_state = "console"
|
||||
|
||||
/datum/sprite_accessory/screen/rgb
|
||||
name = "RGB"
|
||||
icon_state = "rgb"
|
||||
/datum/sprite_accessory/screen/eight
|
||||
name = "Eight"
|
||||
icon_state = "eight"
|
||||
|
||||
/datum/sprite_accessory/screen/eyes
|
||||
name = "Eyes"
|
||||
icon_state = "eyes"
|
||||
|
||||
/datum/sprite_accessory/screen/ecgwave
|
||||
name = "ECG wave"
|
||||
icon_state = "ecgwave"
|
||||
|
||||
/datum/sprite_accessory/screen/green
|
||||
name = "Green"
|
||||
icon_state = "green"
|
||||
|
||||
/datum/sprite_accessory/screen/goggles
|
||||
name = "Goggles"
|
||||
icon_state = "goggles"
|
||||
|
||||
/datum/sprite_accessory/screen/golglider
|
||||
name = "Gol Glider"
|
||||
icon_state = "golglider"
|
||||
|
||||
/datum/sprite_accessory/screen/heart
|
||||
name = "Heart"
|
||||
icon_state = "heart"
|
||||
|
||||
/datum/sprite_accessory/screen/pink
|
||||
name = "Pink"
|
||||
icon_state = "pink"
|
||||
|
||||
/datum/sprite_accessory/screen/red
|
||||
name = "Red"
|
||||
icon_state = "red"
|
||||
|
||||
/datum/sprite_accessory/screen/monoeye
|
||||
name = "Mono eye"
|
||||
icon_state = "monoeye"
|
||||
|
||||
/datum/sprite_accessory/screen/nature
|
||||
name = "Nature"
|
||||
icon_state = "nature"
|
||||
|
||||
/datum/sprite_accessory/screen/purple
|
||||
name = "Purple"
|
||||
icon_state = "purple"
|
||||
|
||||
/datum/sprite_accessory/screen/rainbow
|
||||
name = "Rainbow"
|
||||
icon_state = "rainbow"
|
||||
|
||||
/datum/sprite_accessory/screen/sunburst
|
||||
name = "Sunburst"
|
||||
icon_state = "sunburst"
|
||||
|
||||
/datum/sprite_accessory/screen/static
|
||||
name = "Static"
|
||||
icon_state = "static"
|
||||
|
||||
//Oracle Station sprites
|
||||
|
||||
/datum/sprite_accessory/screen/bsod
|
||||
name = "BSOD"
|
||||
icon_state = "bsod"
|
||||
|
||||
/datum/sprite_accessory/screen/redtext
|
||||
name = "Red Text"
|
||||
icon_state = "retext"
|
||||
|
||||
/datum/sprite_accessory/screen/rgb
|
||||
name = "RGB"
|
||||
icon_state = "rgb"
|
||||
|
||||
/datum/sprite_accessory/screen/scroll
|
||||
name = "Scroll"
|
||||
icon_state = "scroll"
|
||||
|
||||
/datum/sprite_accessory/screen/shower
|
||||
name = "Shower"
|
||||
icon_state = "shower"
|
||||
|
||||
/datum/sprite_accessory/screen/sinewave
|
||||
name = "Sine wave"
|
||||
icon_state = "sinewave"
|
||||
@@ -109,22 +103,25 @@
|
||||
name = "Square wave"
|
||||
icon_state = "squarwave"
|
||||
|
||||
/datum/sprite_accessory/screen/ecgwave
|
||||
name = "ECG wave"
|
||||
icon_state = "ecgwave"
|
||||
/datum/sprite_accessory/screen/stars
|
||||
name = "Stars"
|
||||
icon_state = "stars"
|
||||
|
||||
/datum/sprite_accessory/screen/eyes
|
||||
name = "Eyes"
|
||||
icon_state = "eyes"
|
||||
/datum/sprite_accessory/screen/static
|
||||
name = "Static"
|
||||
icon_state = "static"
|
||||
|
||||
/datum/sprite_accessory/screen/sunburst
|
||||
name = "Sunburst"
|
||||
icon_state = "sunburst"
|
||||
|
||||
/datum/sprite_accessory/screen/textdrop
|
||||
name = "Text drop"
|
||||
icon_state = "textdrop"
|
||||
|
||||
/datum/sprite_accessory/screen/stars
|
||||
name = "Stars"
|
||||
icon_state = "stars"
|
||||
|
||||
/datum/sprite_accessory/screen/yellow
|
||||
name = "Yellow"
|
||||
icon_state = "yellow"
|
||||
|
||||
/******************************************
|
||||
************** IPC Antennas ***************
|
||||
@@ -145,14 +142,6 @@
|
||||
name = "Angled Antennae"
|
||||
icon_state = "antennae"
|
||||
|
||||
/datum/sprite_accessory/antenna/tvantennae
|
||||
name = "TV Antennae"
|
||||
icon_state = "tvantennae"
|
||||
|
||||
/datum/sprite_accessory/antenna/cyberhead
|
||||
name = "Cyberhead"
|
||||
icon_state = "cyberhead"
|
||||
|
||||
/datum/sprite_accessory/antenna/antlers
|
||||
name = "Antlers"
|
||||
icon_state = "antlers"
|
||||
@@ -160,3 +149,11 @@
|
||||
/datum/sprite_accessory/antenna/crowned
|
||||
name = "Crowned"
|
||||
icon_state = "crowned"
|
||||
|
||||
/datum/sprite_accessory/antenna/cyberhead
|
||||
name = "Cyberhead"
|
||||
icon_state = "cyberhead"
|
||||
|
||||
/datum/sprite_accessory/antenna/tvantennae
|
||||
name = "TV Antennae"
|
||||
icon_state = "tvantennae"
|
||||
|
||||
@@ -49,6 +49,13 @@
|
||||
relevant_layers = null
|
||||
hide_legs = FALSE
|
||||
|
||||
/datum/sprite_accessory/taur/canine
|
||||
name = "Canine"
|
||||
icon_state = "canine"
|
||||
taur_mode = STYLE_PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/taur/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
@@ -95,6 +102,13 @@
|
||||
color_src = MUTCOLORS
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/taur/feline
|
||||
name = "Feline"
|
||||
icon_state = "feline"
|
||||
taur_mode = STYLE_PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/taur/horse
|
||||
name = "Horse"
|
||||
icon_state = "horse"
|
||||
@@ -126,17 +140,3 @@
|
||||
taur_mode = STYLE_SNEK_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
hide_legs = USE_SNEK_CLIP_MASK
|
||||
|
||||
/datum/sprite_accessory/taur/canine
|
||||
name = "Canine"
|
||||
icon_state = "canine"
|
||||
taur_mode = STYLE_PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/taur/feline
|
||||
name = "Feline"
|
||||
icon_state = "feline"
|
||||
taur_mode = STYLE_PAW_TAURIC
|
||||
color_src = MUTCOLORS
|
||||
extra = TRUE
|
||||
|
||||
@@ -7,14 +7,19 @@
|
||||
var/obj/item/bodypart/head/HD = H.get_bodypart(BODY_ZONE_HEAD)
|
||||
return ((H.wear_mask && (H.wear_mask.flags_inv & HIDESNOUT)) || (H.head && (H.head.flags_inv & HIDESNOUT)) || !HD || HD.status == BODYPART_ROBOTIC)
|
||||
|
||||
/datum/sprite_accessory/snouts/sharp
|
||||
name = "Sharp"
|
||||
icon_state = "sharp"
|
||||
/datum/sprite_accessory/snout/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
|
||||
/datum/sprite_accessory/snouts/sharp
|
||||
name = "Sharp"
|
||||
icon_state = "sharp"
|
||||
|
||||
/datum/sprite_accessory/snouts/sharplight
|
||||
name = "Sharp + Light"
|
||||
icon_state = "sharplight"
|
||||
@@ -23,11 +28,6 @@
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
|
||||
/datum/sprite_accessory/snout/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
|
||||
//christ this was a mistake, but it's here just in case someone wants to selectively fix -- Pooj
|
||||
/************* Lizard compatable snoots ***********
|
||||
/datum/sprite_accessory/snouts/bird
|
||||
@@ -192,11 +192,19 @@
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/skulldog
|
||||
name = "Skulldog"
|
||||
icon_state = "skulldog"
|
||||
/datum/sprite_accessory/snouts/mam_snouts/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/rhino
|
||||
name = "Horn"
|
||||
icon_state = "rhino"
|
||||
extra = TRUE
|
||||
extra_color_src = MATRIXED
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/rodent
|
||||
name = "Rodent"
|
||||
icon_state = "rodent"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/lcanid
|
||||
name = "Mammal, Long"
|
||||
@@ -226,32 +234,20 @@
|
||||
name = "Mammal, Thick ALT"
|
||||
icon_state = "wolfalt"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/redpanda
|
||||
name = "WahCoon"
|
||||
icon_state = "wah"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/redpandaalt
|
||||
name = "WahCoon ALT"
|
||||
icon_state = "wahalt"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/rhino
|
||||
name = "Horn"
|
||||
icon_state = "rhino"
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/rodent
|
||||
name = "Rodent"
|
||||
icon_state = "rodent"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/husky
|
||||
name = "Husky"
|
||||
icon_state = "husky"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/otie
|
||||
name = "Otie"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
@@ -268,30 +264,33 @@
|
||||
name = "hShark"
|
||||
icon_state = "hshark"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/toucan
|
||||
name = "Toucan"
|
||||
icon_state = "toucan"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/sharp
|
||||
name = "Sharp"
|
||||
icon_state = "sharp"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/round
|
||||
name = "Round"
|
||||
icon_state = "round"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/sharplight
|
||||
name = "Sharp + Light"
|
||||
icon_state = "sharplight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/roundlight
|
||||
name = "Round + Light"
|
||||
icon_state = "roundlight"
|
||||
color_src = MUTCOLORS
|
||||
/datum/sprite_accessory/snouts/mam_snouts/skulldog
|
||||
name = "Skulldog"
|
||||
icon_state = "skulldog"
|
||||
extra = TRUE
|
||||
extra_color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/toucan
|
||||
name = "Toucan"
|
||||
icon_state = "toucan"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/redpanda
|
||||
name = "WahCoon"
|
||||
icon_state = "wah"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/redpandaalt
|
||||
name = "WahCoon ALT"
|
||||
icon_state = "wahalt"
|
||||
|
||||
/******************************************
|
||||
**************** Snouts *******************
|
||||
@@ -318,6 +317,16 @@
|
||||
extra = TRUE
|
||||
extra_color_src = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/frhino
|
||||
name = "Horn (Top)"
|
||||
icon_state = "frhino"
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fhusky
|
||||
name = "Husky (Top)"
|
||||
icon_state = "fhusky"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/flcanid
|
||||
name = "Mammal, Long (Top)"
|
||||
icon_state = "flcanid"
|
||||
@@ -346,27 +355,23 @@
|
||||
name = "Mammal, Thick ALT (Top)"
|
||||
icon_state = "fwolfalt"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fredpanda
|
||||
name = "WahCoon (Top)"
|
||||
icon_state = "fwah"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/frhino
|
||||
name = "Horn (Top)"
|
||||
icon_state = "frhino"
|
||||
extra = TRUE
|
||||
extra = MUTCOLORS3
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fotie
|
||||
name = "Otie (Top)"
|
||||
icon_state = "fotie"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/frodent
|
||||
name = "Rodent (Top)"
|
||||
icon_state = "frodent"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fhusky
|
||||
name = "Husky (Top)"
|
||||
icon_state = "fhusky"
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fround
|
||||
name = "Round (Top)"
|
||||
icon_state = "fround"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fotie
|
||||
name = "Otie (Top)"
|
||||
icon_state = "fotie"
|
||||
/datum/sprite_accessory/snouts/mam_snouts/froundlight
|
||||
name = "Round + Light (Top)"
|
||||
icon_state = "froundlight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fpede
|
||||
name = "Scolipede (Top)"
|
||||
@@ -380,26 +385,20 @@
|
||||
name = "Shark (Top)"
|
||||
icon_state = "fshark"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/ftoucan
|
||||
name = "Toucan (Top)"
|
||||
icon_state = "ftoucan"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fsharp
|
||||
name = "Sharp (Top)"
|
||||
icon_state = "fsharp"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fround
|
||||
name = "Round (Top)"
|
||||
icon_state = "fround"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fsharplight
|
||||
name = "Sharp + Light (Top)"
|
||||
icon_state = "fsharplight"
|
||||
color_src = MUTCOLORS
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/froundlight
|
||||
name = "Round + Light (Top)"
|
||||
icon_state = "froundlight"
|
||||
color_src = MUTCOLORS
|
||||
/datum/sprite_accessory/snouts/mam_snouts/ftoucan
|
||||
name = "Toucan (Top)"
|
||||
icon_state = "ftoucan"
|
||||
|
||||
/datum/sprite_accessory/snouts/mam_snouts/fredpanda
|
||||
name = "WahCoon (Top)"
|
||||
icon_state = "fwah"
|
||||
|
||||
@@ -20,6 +20,10 @@
|
||||
name = "Knee-high - Bee"
|
||||
icon_state = "bee_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/christmas_knee
|
||||
name = "Knee-High - Christmas"
|
||||
icon_state = "christmas_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/commie_knee
|
||||
name = "Knee-High - Commie"
|
||||
icon_state = "commie_knee"
|
||||
@@ -32,6 +36,14 @@
|
||||
name = "Knee-high - Rainbow"
|
||||
icon_state = "rainbow_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaner_knee
|
||||
name = "Knee-High - Red Candy Cane"
|
||||
icon_state = "candycaner_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaneg_knee //ignore alphabetisation for ease of use in scenarios like this
|
||||
name = "Knee-High - Green Candy Cane"
|
||||
icon_state = "candycaneg_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/striped_knee
|
||||
name = "Knee-high - Striped"
|
||||
icon_state = "striped_knee"
|
||||
@@ -46,18 +58,6 @@
|
||||
name = "Knee-High - UK"
|
||||
icon_state = "uk_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/christmas_knee
|
||||
name = "Knee-High - Christmas"
|
||||
icon_state = "christmas_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaner_knee
|
||||
name = "Knee-High - Red Candy Cane"
|
||||
icon_state = "candycaner_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaneg_knee
|
||||
name = "Knee-High - Green Candy Cane"
|
||||
icon_state = "candycaneg_knee"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/socks_norm
|
||||
name = "Normal"
|
||||
icon_state = "socks_norm"
|
||||
@@ -129,22 +129,34 @@
|
||||
name = "Thigh-high - Bee"
|
||||
icon_state = "bee_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/christmas_thigh
|
||||
name = "Thigh-high - Christmas"
|
||||
icon_state = "christmas_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/commie_thigh
|
||||
name = "Thigh-high - Commie"
|
||||
icon_state = "commie_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/usa_thigh
|
||||
name = "Thigh-high - Freedom"
|
||||
icon_state = "assblastusa_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/fishnet
|
||||
name = "Thigh-high - Fishnet"
|
||||
icon_state = "fishnet"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/usa_thigh
|
||||
name = "Thigh-high - Freedom"
|
||||
icon_state = "assblastusa_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/rainbow_thigh
|
||||
name = "Thigh-high - Rainbow"
|
||||
icon_state = "rainbow_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaner_thigh
|
||||
name = "Thigh-high - Red Candy Cane"
|
||||
icon_state = "candycaner_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaneg_thigh
|
||||
name = "Thigh-high - Green Candy Cane"
|
||||
icon_state = "candycaneg_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/striped_thigh
|
||||
name = "Thigh-high - Striped"
|
||||
icon_state = "striped_thigh"
|
||||
@@ -157,16 +169,4 @@
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/uk_thigh
|
||||
name = "Thigh-high - UK"
|
||||
icon_state = "uk_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/christmas_thigh
|
||||
name = "Thigh-high - Christmas"
|
||||
icon_state = "christmas_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaner_thigh
|
||||
name = "Thigh-high - Red Candy Cane"
|
||||
icon_state = "candycaner_thigh"
|
||||
|
||||
/datum/sprite_accessory/underwear/socks/candycaneg_thigh
|
||||
name = "Thigh-high - Green Candy Cane"
|
||||
icon_state = "candycaneg_thigh"
|
||||
icon_state = "uk_thigh"
|
||||
@@ -21,21 +21,13 @@
|
||||
name = "None"
|
||||
icon_state = "none"
|
||||
|
||||
/datum/sprite_accessory/spines/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
/datum/sprite_accessory/spines/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/spines/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
/datum/sprite_accessory/spines_animated/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
|
||||
/datum/sprite_accessory/spines/long
|
||||
name = "Long"
|
||||
@@ -53,10 +45,18 @@
|
||||
name = "Long + Membrane"
|
||||
icon_state = "longmeme"
|
||||
|
||||
/datum/sprite_accessory/spines/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
/datum/sprite_accessory/spines/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/aqautic
|
||||
name = "Aquatic"
|
||||
icon_state = "aqua"
|
||||
/datum/sprite_accessory/spines_animated/short
|
||||
name = "Short"
|
||||
icon_state = "short"
|
||||
|
||||
/datum/sprite_accessory/spines/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
|
||||
/datum/sprite_accessory/spines_animated/shortmeme
|
||||
name = "Short + Membrane"
|
||||
icon_state = "shortmeme"
|
||||
|
||||
@@ -25,12 +25,6 @@
|
||||
icon_state = "synthliz_tertunder"
|
||||
|
||||
//Synth body markings
|
||||
/datum/sprite_accessory/mam_body_markings/synthliz
|
||||
recommended_species = list("synthliz")
|
||||
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
|
||||
name = "Synthetic Lizard - Plates"
|
||||
icon_state = "synthlizscutes"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/synthliz/synthliz_pecs
|
||||
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
|
||||
name = "Synthetic Lizard - Pecs"
|
||||
@@ -41,6 +35,12 @@
|
||||
name = "Synthetic Lizard - Pecs Light"
|
||||
icon_state = "synthlizpecslight"
|
||||
|
||||
/datum/sprite_accessory/mam_body_markings/synthliz
|
||||
recommended_species = list("synthliz")
|
||||
icon = 'modular_citadel/icons/mob/synthliz_body_markings.dmi'
|
||||
name = "Synthetic Lizard - Plates"
|
||||
icon_state = "synthlizscutes"
|
||||
|
||||
//Synth tails
|
||||
/datum/sprite_accessory/tails/mam_tails/synthliz
|
||||
recommended_species = list("synthliz")
|
||||
@@ -70,17 +70,17 @@
|
||||
name = "Synthetic Lizard - Curled"
|
||||
icon_state = "synth_curled"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synthliz_thick
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_horns
|
||||
icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi'
|
||||
color_src = MUTCOLORS
|
||||
name = "Synthetic Lizard - Thick"
|
||||
icon_state = "synth_thick"
|
||||
name = "Synthetic Lizard - Horns"
|
||||
icon_state = "synth_horns"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_thicklight
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_hornslight
|
||||
icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi'
|
||||
color_src = MATRIXED
|
||||
name = "Synthetic Lizard - Thick Light"
|
||||
icon_state = "synth_thicklight"
|
||||
name = "Synthetic Lizard - Horns Light"
|
||||
icon_state = "synth_hornslight"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_short
|
||||
icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi'
|
||||
@@ -100,17 +100,17 @@
|
||||
name = "Synthetic Lizard - Sharp Light"
|
||||
icon_state = "synth_sharplight"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_horns
|
||||
/datum/sprite_accessory/antenna/synthliz/synthliz_thick
|
||||
icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi'
|
||||
color_src = MUTCOLORS
|
||||
name = "Synthetic Lizard - Horns"
|
||||
icon_state = "synth_horns"
|
||||
name = "Synthetic Lizard - Thick"
|
||||
icon_state = "synth_thick"
|
||||
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_hornslight
|
||||
/datum/sprite_accessory/antenna/synthliz/synth_thicklight
|
||||
icon = 'modular_citadel/icons/mob/synthliz_antennas.dmi'
|
||||
color_src = MATRIXED
|
||||
name = "Synthetic Lizard - Horns Light"
|
||||
icon_state = "synth_hornslight"
|
||||
name = "Synthetic Lizard - Thick Light"
|
||||
icon_state = "synth_thicklight"
|
||||
|
||||
//Synth Taurs (Ported from Virgo)
|
||||
/datum/sprite_accessory/taur/synthliz
|
||||
|
||||
@@ -18,38 +18,7 @@
|
||||
/datum/sprite_accessory/tails_animated/lizard/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
return (((H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR)) || tauric) || H.dna.species.mutant_bodyparts["tail_lizard"])
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
//this goes first regardless of alphabetical order
|
||||
/datum/sprite_accessory/tails/lizard/none
|
||||
name = "None"
|
||||
icon_state = "None"
|
||||
@@ -72,11 +41,13 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/body_markings/guilmon
|
||||
name = "Guilmon"
|
||||
icon_state = "guilmon"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/markings_notmammals.dmi'
|
||||
/datum/sprite_accessory/tails/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/guilmon
|
||||
name = "Guilmon"
|
||||
@@ -90,6 +61,30 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/smooth
|
||||
name = "Smooth"
|
||||
icon_state = "smooth"
|
||||
|
||||
/datum/sprite_accessory/tails/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/lizard/spikes
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/******************************************
|
||||
************** Human Tails ****************
|
||||
*******************************************/
|
||||
@@ -107,18 +102,6 @@
|
||||
/datum/sprite_accessory/tails_animated/human/is_not_visible(var/mob/living/carbon/human/H, var/tauric)
|
||||
return (((H.wear_suit && (H.wear_suit.flags_inv & HIDETAUR)) || tauric)|| H.dna.species.mutant_bodyparts["tail_human"])
|
||||
|
||||
/datum/sprite_accessory/tails/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
@@ -199,6 +182,14 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
|
||||
/datum/sprite_accessory/tails/human/cow
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
@@ -211,13 +202,25 @@
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
/datum/sprite_accessory/tails/human/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/corvid
|
||||
name = "Corvid"
|
||||
icon_state = "crow"
|
||||
/datum/sprite_accessory/tails_animated/human/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/eevee
|
||||
name = "Eevee"
|
||||
@@ -298,7 +301,7 @@
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/insect
|
||||
name = "insect"
|
||||
name = "Insect"
|
||||
icon_state = "insect"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
@@ -315,6 +318,14 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails/human/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
@@ -327,18 +338,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
@@ -351,15 +350,15 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
/datum/sprite_accessory/tails/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
/datum/sprite_accessory/tails_animated/human/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
@@ -375,6 +374,30 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
color_src = MATRIXED
|
||||
|
||||
/datum/sprite_accessory/tails/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
@@ -387,6 +410,18 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/skunk
|
||||
name = "skunk"
|
||||
icon_state = "skunk"
|
||||
@@ -415,30 +450,6 @@
|
||||
name = "Spikes"
|
||||
icon_state = "spikes"
|
||||
|
||||
/datum/sprite_accessory/tails/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/datashark
|
||||
name = "datashark"
|
||||
icon_state = "datashark"
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
@@ -495,22 +506,6 @@
|
||||
color_src = MATRIXED
|
||||
icon = 'modular_citadel/icons/mob/mam_tails.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/human/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
|
||||
/datum/sprite_accessory/tails/human/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/human/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
|
||||
/datum/sprite_accessory/tails/human/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
@@ -554,16 +549,6 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/axolotl
|
||||
name = "Axolotl"
|
||||
icon_state = "axolotl"
|
||||
@@ -638,6 +623,18 @@
|
||||
name = "Cow"
|
||||
icon_state = "cow"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/eevee
|
||||
name = "Eevee"
|
||||
icon_state = "eevee"
|
||||
@@ -728,6 +725,18 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Lab"
|
||||
icon_state = "lab"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/murid
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
@@ -736,14 +745,6 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Murid"
|
||||
icon_state = "murid"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/orca
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
@@ -752,13 +753,13 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Orca"
|
||||
icon_state = "orca"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
/datum/sprite_accessory/tails/mam_tails/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/otie
|
||||
name = "Otusian"
|
||||
icon_state = "otie"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/rabbit
|
||||
name = "Rabbit"
|
||||
@@ -768,6 +769,24 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Rabbit"
|
||||
icon_state = "rabbit"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/ailurus
|
||||
name = "Red Panda"
|
||||
icon_state = "wah"
|
||||
extra = TRUE
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/pede
|
||||
name = "Scolipede"
|
||||
icon_state = "pede"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/sergal
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
@@ -776,6 +795,22 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Sergal"
|
||||
icon_state = "sergal"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/skunk
|
||||
name = "Skunk"
|
||||
icon_state = "skunk"
|
||||
@@ -808,22 +843,6 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/shark
|
||||
name = "Shark"
|
||||
icon_state = "shark"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/shepherd
|
||||
name = "Shepherd"
|
||||
icon_state = "shepherd"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/straighttail
|
||||
name = "Straight Tail"
|
||||
icon_state = "straighttail"
|
||||
@@ -864,30 +883,6 @@ datum/sprite_accessory/tails/mam_tails/insect
|
||||
name = "Tiger"
|
||||
icon_state = "tiger"
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/dtiger
|
||||
name = "Dark Tiger"
|
||||
icon_state = "dtiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails_animated/mam_tails_animated/ltiger
|
||||
name = "Light Tiger"
|
||||
icon_state = "ltiger"
|
||||
color_src = MUTCOLORS
|
||||
icon = 'icons/mob/mutant_bodyparts.dmi'
|
||||
|
||||
/datum/sprite_accessory/tails/mam_tails/wolf
|
||||
name = "Wolf"
|
||||
icon_state = "wolf"
|
||||
|
||||
@@ -12,6 +12,38 @@
|
||||
|
||||
// please make sure they're sorted alphabetically and categorized
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt
|
||||
name = "Cowboy Shirt Black"
|
||||
icon_state = "cowboyshirt"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/red
|
||||
name = "Cowboy Shirt Red"
|
||||
icon_state = "cowboyshirt_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/navy
|
||||
name = "Cowboy Shirt Navy"
|
||||
icon_state = "cowboyshirt_navy"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/white
|
||||
name = "Cowboy Shirt White"
|
||||
icon_state = "cowboyshirt_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/s
|
||||
name = "Cowboy Shirt Shortsleeved Black"
|
||||
icon_state = "cowboyshirt_s"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/red/s
|
||||
name = "Cowboy Shirt Shortsleeved Red"
|
||||
icon_state = "cowboyshirt_reds"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/navy/s
|
||||
name = "Cowboy Shirt Shortsleeved Navy"
|
||||
icon_state = "cowboyshirt_navys"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/white/s
|
||||
name = "Cowboy Shirt Shortsleeved White"
|
||||
icon_state = "cowboyshirt_whites"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/longjon
|
||||
name = "Long John Shirt"
|
||||
icon_state = "ljont"
|
||||
@@ -30,36 +62,6 @@
|
||||
icon_state = "undershirt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingw
|
||||
name = "Shirt - Bowling"
|
||||
icon_state = "bowlingw"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowling
|
||||
name = "Shirt, Bowling - Red"
|
||||
icon_state = "bowling"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingp
|
||||
name = "Shirt, Bowling - Pink"
|
||||
icon_state = "bowlingp"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlinga
|
||||
name = "Shirt, Bowling - Aqua"
|
||||
icon_state = "bowlinga"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bluejersey
|
||||
name = "Shirt, Jersey - Blue"
|
||||
icon_state = "shirt_bluejersey"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/redjersey
|
||||
name = "Shirt, Jersey - Red"
|
||||
icon_state = "shirt_redjersey"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/polo
|
||||
name = "Shirt - Polo"
|
||||
icon_state = "polo"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/alienshirt
|
||||
name = "Shirt - Alien"
|
||||
icon_state = "shirt_alien"
|
||||
@@ -72,6 +74,23 @@
|
||||
name = "Shirt - Bee"
|
||||
icon_state = "bee_shirt"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingw
|
||||
name = "Shirt - Bowling"
|
||||
icon_state = "bowlingw"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlinga
|
||||
name = "Shirt, Bowling - Aqua"
|
||||
icon_state = "bowlinga"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowling
|
||||
name = "Shirt, Bowling - Red"
|
||||
icon_state = "bowling"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bowlingp
|
||||
name = "Shirt, Bowling - Pink"
|
||||
icon_state = "bowlingp"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/clownshirt
|
||||
name = "Shirt - Clown"
|
||||
icon_state = "shirt_clown"
|
||||
@@ -88,6 +107,14 @@
|
||||
name = "Shirt - I Love NT"
|
||||
icon_state = "ilovent"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bluejersey
|
||||
name = "Shirt, Jersey - Blue"
|
||||
icon_state = "shirt_bluejersey"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/redjersey
|
||||
name = "Shirt, Jersey - Red"
|
||||
icon_state = "shirt_redjersey"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/lover
|
||||
name = "Shirt - Lover"
|
||||
icon_state = "lover"
|
||||
@@ -112,6 +139,11 @@
|
||||
name = "Shirt - Pogoman"
|
||||
icon_state = "pogoman"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/polo
|
||||
name = "Shirt - Polo"
|
||||
icon_state = "polo"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/question
|
||||
name = "Shirt - Question"
|
||||
icon_state = "shirt_question"
|
||||
@@ -120,6 +152,23 @@
|
||||
name = "Shirt - Skull"
|
||||
icon_state = "shirt_skull"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/shortsleeve
|
||||
name = "Shirt - Short Sleeved"
|
||||
icon_state = "shortsleeve"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/blueshirtsport
|
||||
name = "Shirt, Sports - Blue"
|
||||
icon_state = "blueshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/greenshirtsport
|
||||
name = "Shirt, Sports - Green"
|
||||
icon_state = "greenshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/redshirtsport
|
||||
name = "Shirt, Sports - Red"
|
||||
icon_state = "redshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/ss13
|
||||
name = "Shirt - SS13"
|
||||
icon_state = "shirt_ss13"
|
||||
@@ -141,27 +190,6 @@
|
||||
name = "Shirt - USA"
|
||||
icon_state = "shirt_assblastusa"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/shortsleeve
|
||||
name = "Shirt - Short Sleeved"
|
||||
icon_state = "shortsleeve"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/blueshirtsport
|
||||
name = "Shirt, Sports - Blue"
|
||||
icon_state = "blueshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/greenshirtsport
|
||||
name = "Shirt, Sports - Green"
|
||||
icon_state = "greenshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/redshirtsport
|
||||
name = "Shirt, Sports - Red"
|
||||
icon_state = "redshirtsport"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tankfire
|
||||
name = "Tank Top - Fire"
|
||||
icon_state = "tank_fire"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tanktop
|
||||
name = "Tank Top"
|
||||
icon_state = "tanktop"
|
||||
@@ -172,6 +200,10 @@
|
||||
icon_state = "tanktop_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tankfire
|
||||
name = "Tank Top - Fire"
|
||||
icon_state = "tank_fire"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/tanktop_midriff
|
||||
name = "Tank Top - Midriff"
|
||||
icon_state = "tank_midriff"
|
||||
@@ -192,6 +224,8 @@
|
||||
name = "Tank top - Sun"
|
||||
icon_state = "tank_sun"
|
||||
|
||||
//feminine accessories from here on
|
||||
|
||||
/datum/sprite_accessory/underwear/top/babydoll
|
||||
name = "Baby-Doll"
|
||||
icon_state = "babydoll"
|
||||
@@ -210,15 +244,25 @@
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_thin
|
||||
name = "Bra - Thin"
|
||||
icon_state = "bra_thin"
|
||||
has_color = TRUE
|
||||
/datum/sprite_accessory/underwear/top/bra_beekini
|
||||
name = "Bra - Bee-kini"
|
||||
icon_state = "bra_bee-kini"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_kinky
|
||||
name = "Bra - Kinky Black"
|
||||
icon_state = "bra_kinky"
|
||||
/datum/sprite_accessory/underwear/top/bra_binder
|
||||
name = "Bra (binder)"
|
||||
icon_state = "bra_binder"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_binder_strapless
|
||||
name = "Bra (binder, strapless)"
|
||||
icon_state = "bra_binder_strapless"
|
||||
has_color = TRUE
|
||||
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_commie
|
||||
name = "Bra - Commie"
|
||||
icon_state = "bra_commie"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_freedom
|
||||
@@ -226,33 +270,17 @@
|
||||
icon_state = "bra_assblastusa"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_commie
|
||||
name = "Bra - Commie"
|
||||
icon_state = "bra_commie"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_beekini
|
||||
name = "Bra - Bee-kini"
|
||||
icon_state = "bra_bee-kini"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_uk
|
||||
name = "Bra - UK"
|
||||
icon_state = "bra_uk"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_neko
|
||||
name = "Bra - Neko"
|
||||
icon_state = "bra_neko"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/halterneck_bra
|
||||
name = "Bra - Halterneck"
|
||||
icon_state = "halterneck_bra"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_kinky
|
||||
name = "Bra - Kinky Black"
|
||||
icon_state = "bra_kinky"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/sports_bra
|
||||
name = "Bra, Sports"
|
||||
icon_state = "sports_bra"
|
||||
@@ -283,9 +311,21 @@
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_sleeves
|
||||
name = "Fishnet - sleeves"
|
||||
icon_state = "fishnet_sleeves"
|
||||
/datum/sprite_accessory/underwear/top/bra_thin
|
||||
name = "Bra - Thin"
|
||||
icon_state = "bra_thin"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_neko
|
||||
name = "Bra - Neko"
|
||||
icon_state = "bra_neko"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_uk
|
||||
name = "Bra - UK"
|
||||
icon_state = "bra_uk"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_gloves
|
||||
@@ -293,6 +333,11 @@
|
||||
icon_state = "fishnet_gloves"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_sleeves
|
||||
name = "Fishnet - sleeves"
|
||||
icon_state = "fishnet_sleeves"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/fishnet_base
|
||||
name = "Fishnet - top"
|
||||
icon_state = "fishnet_body"
|
||||
@@ -315,45 +360,3 @@
|
||||
icon_state = "tubetop"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt
|
||||
name = "Cowboy Shirt Black"
|
||||
icon_state = "cowboyshirt"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/s
|
||||
name = "Cowboy Shirt Shortsleeved Black"
|
||||
icon_state = "cowboyshirt_s"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/white
|
||||
name = "Cowboy Shirt White"
|
||||
icon_state = "cowboyshirt_white"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/white/s
|
||||
name = "Cowboy Shirt Shortsleeved White"
|
||||
icon_state = "cowboyshirt_whites"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/navy
|
||||
name = "Cowboy Shirt Navy"
|
||||
icon_state = "cowboyshirt_navy"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/navy/s
|
||||
name = "Cowboy Shirt Shortsleeved Navy"
|
||||
icon_state = "cowboyshirt_navys"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/red
|
||||
name = "Cowboy Shirt Red"
|
||||
icon_state = "cowboyshirt_red"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/cowboyshirt/red/s
|
||||
name = "Cowboy Shirt Shortsleeved Red"
|
||||
icon_state = "cowboyshirt_reds"
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_binder
|
||||
name = "Bra (binder)"
|
||||
icon_state = "bra_binder"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/top/bra_binder_strapless
|
||||
name = "Bra (binder, strapless)"
|
||||
icon_state = "bra_binder_strapless"
|
||||
has_color = TRUE
|
||||
|
||||
@@ -10,18 +10,6 @@
|
||||
icon_state = null
|
||||
covers_groin = FALSE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/mankini
|
||||
name = "Mankini"
|
||||
icon_state = "mankini"
|
||||
has_color = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_kinky
|
||||
name = "Jockstrap"
|
||||
icon_state = "jockstrap"
|
||||
has_color = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/briefs
|
||||
name = "Briefs"
|
||||
icon_state = "briefs"
|
||||
@@ -77,6 +65,26 @@
|
||||
has_digitigrade = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/male_kinky
|
||||
name = "Jockstrap"
|
||||
icon_state = "jockstrap"
|
||||
has_color = TRUE
|
||||
gender = MALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/longjon
|
||||
name = "Long John Bottoms"
|
||||
icon_state = "ljonb"
|
||||
has_digitigrade = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/mankini
|
||||
name = "Mankini"
|
||||
icon_state = "mankini"
|
||||
has_color = TRUE
|
||||
gender = MALE
|
||||
|
||||
//feminine underwear from here on
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/panties
|
||||
name = "Panties"
|
||||
icon_state = "panties"
|
||||
@@ -89,11 +97,6 @@
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/fishnet_lower
|
||||
name = "Panties - Fishnet"
|
||||
icon_state = "fishnet_lower"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/female_beekini
|
||||
name = "Panties - Bee-kini"
|
||||
icon_state = "panties_bee-kini"
|
||||
@@ -104,6 +107,11 @@
|
||||
icon_state = "panties_commie"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/fishnet_lower
|
||||
name = "Panties - Fishnet"
|
||||
icon_state = "fishnet_lower"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/female_usastripe
|
||||
name = "Panties - Freedom"
|
||||
icon_state = "panties_assblastusa"
|
||||
@@ -114,11 +122,6 @@
|
||||
icon_state = "panties_kinky"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/panties_uk
|
||||
name = "Panties - UK"
|
||||
icon_state = "panties_uk"
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/panties_neko
|
||||
name = "Panties - Neko"
|
||||
icon_state = "panties_neko"
|
||||
@@ -149,17 +152,10 @@
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/longjon
|
||||
name = "Long John Bottoms"
|
||||
icon_state = "ljonb"
|
||||
has_digitigrade = TRUE
|
||||
has_color = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit_red
|
||||
name = "Swimsuit, One Piece - Red"
|
||||
icon_state = "swimming_red"
|
||||
/datum/sprite_accessory/underwear/bottom/panties_uk
|
||||
name = "Panties - UK"
|
||||
icon_state = "panties_uk"
|
||||
gender = FEMALE
|
||||
covers_chest = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit
|
||||
name = "Swimsuit, One Piece - Black"
|
||||
@@ -173,6 +169,12 @@
|
||||
gender = FEMALE
|
||||
covers_chest = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/swimsuit_red
|
||||
name = "Swimsuit, One Piece - Red"
|
||||
icon_state = "swimming_red"
|
||||
gender = FEMALE
|
||||
covers_chest = TRUE
|
||||
|
||||
/datum/sprite_accessory/underwear/bottom/thong
|
||||
name = "Thong"
|
||||
icon_state = "thong"
|
||||
@@ -184,5 +186,3 @@
|
||||
icon_state = "thong_babydoll"
|
||||
has_color = TRUE
|
||||
gender = FEMALE
|
||||
|
||||
|
||||
|
||||
@@ -58,6 +58,10 @@
|
||||
dimension_y = 34
|
||||
relevant_layers = list(BODY_BEHIND_LAYER, BODY_ADJ_LAYER, BODY_FRONT_LAYER)
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
@@ -66,6 +70,10 @@
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
@@ -74,14 +82,6 @@
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/deco_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -150,6 +150,10 @@
|
||||
icon_state = "none"
|
||||
relevant_layers = null
|
||||
|
||||
/datum/sprite_accessory/insect_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/bat
|
||||
name = "Bat"
|
||||
icon_state = "bat"
|
||||
@@ -158,6 +162,10 @@
|
||||
name = "Bee"
|
||||
icon_state = "bee"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/fairy
|
||||
name = "Fairy"
|
||||
icon_state = "fairy"
|
||||
@@ -166,14 +174,6 @@
|
||||
name = "Feathery"
|
||||
icon_state = "feathery"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/atlas
|
||||
name = "Atlas"
|
||||
icon_state = "atlas"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/deathhead
|
||||
name = "Deathshead"
|
||||
icon_state = "deathhead"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/firewatch
|
||||
name = "Firewatch"
|
||||
icon_state = "firewatch"
|
||||
@@ -182,6 +182,10 @@
|
||||
name = "Gothic"
|
||||
icon_state = "gothic"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/lovers
|
||||
name = "Lovers"
|
||||
icon_state = "lovers"
|
||||
@@ -198,6 +202,10 @@
|
||||
name = "Moon Fly"
|
||||
icon_state = "moonfly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/plain
|
||||
name = "Plain"
|
||||
icon_state = "plain"
|
||||
@@ -230,14 +238,6 @@
|
||||
name = "White Fly"
|
||||
icon_state = "whitefly"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/oakworm
|
||||
name = "Oak Worm"
|
||||
icon_state = "oakworm"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/jungle
|
||||
name = "Jungle"
|
||||
icon_state = "jungle"
|
||||
|
||||
/datum/sprite_accessory/insect_wings/witchwing
|
||||
name = "Witch Wing"
|
||||
icon_state = "witchwing"
|
||||
|
||||
@@ -87,7 +87,7 @@
|
||||
if(user != src && (user.a_intent == INTENT_HELP || user.a_intent == INTENT_DISARM))
|
||||
for(var/datum/surgery/S in surgeries)
|
||||
if(S.next_step(user,user.a_intent))
|
||||
return 1
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
if(!all_wounds || !(user.a_intent == INTENT_HELP || user == src))
|
||||
return ..()
|
||||
@@ -95,7 +95,7 @@
|
||||
for(var/i in shuffle(all_wounds))
|
||||
var/datum/wound/W = i
|
||||
if(W.try_treating(I, user))
|
||||
return 1
|
||||
return STOP_ATTACK_PROC_CHAIN
|
||||
|
||||
return ..()
|
||||
|
||||
|
||||
@@ -7,6 +7,11 @@
|
||||
message = "cries."
|
||||
emote_type = EMOTE_AUDIBLE
|
||||
|
||||
/datum/emote/living/carbon/human/cry/run_emote(mob/user, params)
|
||||
. = ..()
|
||||
if(. && isipcperson(user))
|
||||
do_fake_sparks(5,FALSE,user)
|
||||
|
||||
/datum/emote/living/carbon/human/dap
|
||||
key = "dap"
|
||||
key_third_person = "daps"
|
||||
@@ -187,3 +192,71 @@
|
||||
key_third_person = "chimes"
|
||||
message = "chimes."
|
||||
sound = 'sound/machines/chime.ogg'
|
||||
|
||||
//rock paper scissors emote handling
|
||||
/mob/living/carbon/human/proc/beginRockPaperScissors(var/chosen_move)
|
||||
GLOB.rockpaperscissors_players[src] = list(chosen_move, ROCKPAPERSCISSORS_NOT_DECIDED)
|
||||
do_after_advanced(src, ROCKPAPERSCISSORS_TIME_LIMIT, src, DO_AFTER_REQUIRES_USER_ON_TURF|DO_AFTER_NO_COEFFICIENT|DO_AFTER_NO_PROGRESSBAR|DO_AFTER_DISALLOW_MOVING_ABSOLUTE_USER, CALLBACK(src, .proc/rockpaperscissors_tick))
|
||||
var/new_entry = GLOB.rockpaperscissors_players[src]
|
||||
if(new_entry[2] == ROCKPAPERSCISSORS_NOT_DECIDED)
|
||||
to_chat(src, "You put your hand back down.")
|
||||
GLOB.rockpaperscissors_players -= src
|
||||
|
||||
/mob/living/carbon/human/proc/rockpaperscissors_tick() //called every cycle of the progress bar for rock paper scissors while waiting for an opponent
|
||||
var/mob/living/carbon/human/opponent
|
||||
for(var/mob/living/carbon/human/potential_opponent in (GLOB.rockpaperscissors_players - src)) //dont play against yourself
|
||||
if(get_dist(src, potential_opponent) <= ROCKPAPERSCISSORS_RANGE)
|
||||
opponent = potential_opponent
|
||||
break
|
||||
if(opponent)
|
||||
//we found an opponent before they found us
|
||||
var/move_to_number = list("rock" = 0, "paper" = 1, "scissors" = 2)
|
||||
var/our_move = move_to_number[GLOB.rockpaperscissors_players[src][1]]
|
||||
var/their_move = move_to_number[GLOB.rockpaperscissors_players[opponent][1]]
|
||||
var/result_us = ROCKPAPERSCISSORS_WIN
|
||||
var/result_them = ROCKPAPERSCISSORS_LOSE
|
||||
if(our_move == their_move)
|
||||
result_us = ROCKPAPERSCISSORS_TIE
|
||||
result_them = ROCKPAPERSCISSORS_TIE
|
||||
else
|
||||
if(((our_move + 1) % 3) == their_move)
|
||||
result_us = ROCKPAPERSCISSORS_LOSE
|
||||
result_them = ROCKPAPERSCISSORS_WIN
|
||||
//we decided our results so set them in the list
|
||||
GLOB.rockpaperscissors_players[src][2] = result_us
|
||||
GLOB.rockpaperscissors_players[opponent][2] = result_them
|
||||
|
||||
//show what happened
|
||||
src.visible_message("<b>[src]</b> makes [GLOB.rockpaperscissors_players[src][1]] with their hand!")
|
||||
opponent.visible_message("<b>[opponent]</b> makes [GLOB.rockpaperscissors_players[opponent][1]] with their hands!")
|
||||
switch(result_us)
|
||||
if(ROCKPAPERSCISSORS_TIE)
|
||||
src.visible_message("It was a tie!")
|
||||
if(ROCKPAPERSCISSORS_WIN)
|
||||
src.visible_message("<b>[src]</b> wins!")
|
||||
if(ROCKPAPERSCISSORS_LOSE)
|
||||
src.visible_message("<b>[opponent]</b> wins!")
|
||||
|
||||
//make the progress bar end so that each player can handle the result
|
||||
return DO_AFTER_STOP
|
||||
|
||||
//no opponent was found, so keep searching
|
||||
return DO_AFTER_PROCEED
|
||||
|
||||
//the actual emotes
|
||||
/datum/emote/living/carbon/human/rockpaperscissors
|
||||
message = "is attempting to play rock paper scissors!"
|
||||
|
||||
/datum/emote/living/carbon/human/rockpaperscissors/rock
|
||||
key = "rock"
|
||||
|
||||
/datum/emote/living/carbon/human/rockpaperscissors/paper
|
||||
key = "paper"
|
||||
|
||||
/datum/emote/living/carbon/human/rockpaperscissors/scissors
|
||||
key = "scissors"
|
||||
|
||||
/datum/emote/living/carbon/human/rockpaperscissors/run_emote(mob/living/carbon/human/user, params)
|
||||
if(!(user in GLOB.rockpaperscissors_players)) //no using the emote again while already playing!
|
||||
. = ..()
|
||||
user.beginRockPaperScissors(key)
|
||||
|
||||
@@ -114,6 +114,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
/// Our default override for typing indicator state
|
||||
var/typing_indicator_state
|
||||
|
||||
//the ids you can use for your species, if empty, it means default only and not changeable
|
||||
var/list/allowed_limb_ids
|
||||
|
||||
///////////
|
||||
// PROCS //
|
||||
///////////
|
||||
@@ -121,7 +124,9 @@ GLOBAL_LIST_EMPTY(roundstart_race_names)
|
||||
/datum/species/New()
|
||||
|
||||
if(!limbs_id) //if we havent set a limbs id to use, just use our own id
|
||||
limbs_id = id
|
||||
mutant_bodyparts["limbs_id"] = id //done this way to be non-intrusive to the existing system
|
||||
else
|
||||
mutant_bodyparts["limbs_id"] = limbs_id
|
||||
..()
|
||||
|
||||
//update our mutant bodyparts to include unlocked ones
|
||||
|
||||
@@ -13,10 +13,11 @@
|
||||
meat = /obj/item/reagent_containers/food/snacks/meat/slab/human/mutant/insect
|
||||
liked_food = MEAT | FRUIT
|
||||
disliked_food = TOXIC
|
||||
icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
|
||||
exotic_bloodtype = "BUG"
|
||||
exotic_blood_color = BLOOD_COLOR_BUG
|
||||
|
||||
tail_type = "mam_tail"
|
||||
wagging_type = "mam_waggingtail"
|
||||
species_type = "insect"
|
||||
species_type = "insect"
|
||||
|
||||
allowed_limb_ids = list("insect","apid","moth","moth_not_greyscale")
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
name = "Anthromorph"
|
||||
id = "mammal"
|
||||
default_color = "4B4B4B"
|
||||
icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,HAIR,HORNCOLOR,WINGCOLOR,HAS_FLESH,HAS_BONE)
|
||||
inherent_biotypes = MOB_ORGANIC|MOB_HUMANOID|MOB_BEAST
|
||||
mutant_bodyparts = list("mcolor" = "FFFFFF","mcolor2" = "FFFFFF","mcolor3" = "FFFFFF", "mam_snouts" = "Husky", "mam_tail" = "Husky", "mam_ears" = "Husky", "deco_wings" = "None",
|
||||
@@ -17,3 +16,5 @@
|
||||
tail_type = "mam_tail"
|
||||
wagging_type = "mam_waggingtail"
|
||||
species_type = "furry"
|
||||
|
||||
allowed_limb_ids = list("mammal","aquatic","avian")
|
||||
@@ -3,7 +3,6 @@
|
||||
id = "ipc"
|
||||
say_mod = "beeps"
|
||||
default_color = "00FF00"
|
||||
icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
|
||||
blacklisted = 0
|
||||
sexes = 0
|
||||
species_traits = list(MUTCOLORS,NOEYES,NOTRANSSTING,HAS_FLESH,HAS_BONE)
|
||||
|
||||
@@ -21,6 +21,8 @@
|
||||
|
||||
species_type = "plant"
|
||||
|
||||
allowed_limb_ids = list("pod","mush")
|
||||
|
||||
/datum/species/pod/on_species_gain(mob/living/carbon/C, datum/species/old_species)
|
||||
. = ..()
|
||||
C.faction |= "plants"
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
/datum/species/synthliz
|
||||
name = "Synthetic Lizardperson"
|
||||
id = "synthliz"
|
||||
icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
|
||||
say_mod = "beeps"
|
||||
default_color = "00FF00"
|
||||
species_traits = list(MUTCOLORS,NOTRANSSTING,EYECOLOR,LIPS,HAIR,HAS_FLESH,HAS_BONE)
|
||||
|
||||
@@ -61,7 +61,7 @@
|
||||
mutant_organs = S.mutant_organs.Copy()
|
||||
nojumpsuit = S.nojumpsuit
|
||||
no_equip = S.no_equip.Copy()
|
||||
limbs_id = S.limbs_id
|
||||
limbs_id = S.mutant_bodyparts["limbs_id"]
|
||||
use_skintones = S.use_skintones
|
||||
fixed_mut_color = S.fixed_mut_color
|
||||
hair_color = S.hair_color
|
||||
|
||||
@@ -4,7 +4,6 @@
|
||||
id = "xeno"
|
||||
say_mod = "hisses"
|
||||
default_color = "00FF00"
|
||||
icon_limbs = DEFAULT_BODYPART_ICON_CITADEL
|
||||
species_traits = list(MUTCOLORS,EYECOLOR,LIPS,CAN_SCAR)
|
||||
mutant_bodyparts = list("xenotail"="Xenomorph Tail","xenohead"="Standard","xenodorsal"="Standard", "mam_body_markings" = "Xeno","mcolor" = "0F0","mcolor2" = "0F0","mcolor3" = "0F0","taur" = "None", "legs" = "Digitigrade")
|
||||
attack_verb = "slash"
|
||||
|
||||
@@ -660,7 +660,7 @@ use_mob_overlay_icon: if FALSE, it will always use the default_icon_file even if
|
||||
|
||||
//produces a key based on the human's limbs
|
||||
/mob/living/carbon/human/generate_icon_render_key()
|
||||
. = "[dna.species.limbs_id]"
|
||||
. = "[dna.species.mutant_bodyparts["limbs_id"]]"
|
||||
|
||||
if(dna.check_mutation(HULK))
|
||||
. += "-coloured-hulk"
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
|
||||
spill_organs(no_brain, no_organs, no_bodyparts)
|
||||
|
||||
release_vore_contents(silent = TRUE) // return of the bomb safe internals.
|
||||
|
||||
if(!no_bodyparts)
|
||||
spread_bodyparts(no_brain, no_organs)
|
||||
|
||||
@@ -46,7 +44,6 @@
|
||||
buckled.unbuckle_mob(src, force = TRUE)
|
||||
|
||||
dust_animation()
|
||||
release_vore_contents(silent = TRUE) //technically grief protection, I guess? if they're SM'd it doesn't matter seconds after anyway.
|
||||
spawn_dust(just_ash)
|
||||
QDEL_IN(src,5) // since this is sometimes called in the middle of movement, allow half a second for movement to finish, ghosting to happen and animation to play. Looks much nicer and doesn't cause multiple runtimes.
|
||||
|
||||
@@ -103,5 +100,5 @@
|
||||
for(var/s in sharedSoullinks)
|
||||
var/datum/soullink/S = s
|
||||
S.sharerDies(gibbed)
|
||||
|
||||
release_vore_contents(silent = TRUE)
|
||||
return TRUE
|
||||
|
||||
@@ -9,6 +9,11 @@
|
||||
key_third_person = "blushes"
|
||||
message = "blushes."
|
||||
|
||||
/datum/emote/living/blush/run_emote(mob/user, params)
|
||||
. = ..()
|
||||
if(. && isipcperson(user))
|
||||
do_fake_sparks(5,FALSE,user)
|
||||
|
||||
/datum/emote/living/bow
|
||||
key = "bow"
|
||||
key_third_person = "bows"
|
||||
|
||||
@@ -289,50 +289,57 @@
|
||||
return FALSE
|
||||
return ISINRANGE(T1.x, T0.x - interaction_range, T0.x + interaction_range) && ISINRANGE(T1.y, T0.y - interaction_range, T0.y + interaction_range)
|
||||
|
||||
/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weldingtool) && (user.a_intent != INTENT_HARM || user == src))
|
||||
/mob/living/silicon/robot/proc/attempt_welder_repair(obj/item/weldingtool/W, mob/user)
|
||||
if (!getBruteLoss())
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
if (!W.tool_start_check(user, amount=0)) //The welder has 1u of fuel consumed by it's afterattack, so we don't need to worry about taking any away.
|
||||
return
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
if(src == user)
|
||||
to_chat(user, "<span class='notice'>You start fixing yourself...</span>")
|
||||
if(!W.use_tool(src, user, 50))
|
||||
return
|
||||
adjustBruteLoss(-10)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(!do_after(user, 30, target = src))
|
||||
return
|
||||
adjustBruteLoss(-30)
|
||||
updatehealth()
|
||||
add_fingerprint(user)
|
||||
visible_message("<span class='notice'>[user] has fixed some of the dents on [src].</span>")
|
||||
|
||||
/mob/living/silicon/robot/proc/attempt_cable_repair(obj/item/stack/cable_coil/W, mob/user)
|
||||
if (getFireLoss() > 0 || getToxLoss() > 0)
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
if (!getBruteLoss())
|
||||
to_chat(user, "<span class='warning'>[src] is already in good condition!</span>")
|
||||
return
|
||||
if (!W.tool_start_check(user, amount=0)) //The welder has 1u of fuel consumed by it's afterattack, so we don't need to worry about taking any away.
|
||||
return
|
||||
if(src == user)
|
||||
to_chat(user, "<span class='notice'>You start fixing yourself...</span>")
|
||||
if(!W.use_tool(src, user, 50))
|
||||
if(!W.use_tool(src, user, 50, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT))
|
||||
to_chat(user, "<span class='warning'>You need more cable to repair [src]!</span>")
|
||||
return
|
||||
adjustBruteLoss(-10)
|
||||
adjustFireLoss(-10)
|
||||
adjustToxLoss(-10)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(!do_after(user, 30, target = src))
|
||||
if(!W.use_tool(src, user, 30, 1))
|
||||
to_chat(user, "<span class='warning'>You need more cable to repair [src]!</span>")
|
||||
return
|
||||
adjustBruteLoss(-30)
|
||||
updatehealth()
|
||||
add_fingerprint(user)
|
||||
visible_message("<span class='notice'>[user] has fixed some of the dents on [src].</span>")
|
||||
adjustFireLoss(-30)
|
||||
adjustToxLoss(-30)
|
||||
updatehealth()
|
||||
user.visible_message("[user] has fixed some of the burnt wires on [src].", "<span class='notice'>You fix some of the burnt wires on [src].</span>")
|
||||
else
|
||||
to_chat(user, "The wires seem fine, there's no need to fix them.")
|
||||
|
||||
/mob/living/silicon/robot/attackby(obj/item/W, mob/user, params)
|
||||
if(istype(W, /obj/item/weldingtool) && (user.a_intent != INTENT_HARM || user == src))
|
||||
INVOKE_ASYNC(src, .proc/attempt_welder_repair, W, user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/stack/cable_coil) && wiresexposed)
|
||||
user.DelayNextAction(CLICK_CD_MELEE)
|
||||
if (getFireLoss() > 0 || getToxLoss() > 0)
|
||||
if(src == user)
|
||||
to_chat(user, "<span class='notice'>You start fixing yourself...</span>")
|
||||
if(!W.use_tool(src, user, 50, 1, skill_gain_mult = TRIVIAL_USE_TOOL_MULT))
|
||||
to_chat(user, "<span class='warning'>You need more cable to repair [src]!</span>")
|
||||
return
|
||||
adjustFireLoss(-10)
|
||||
adjustToxLoss(-10)
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You start fixing [src]...</span>")
|
||||
if(!W.use_tool(src, user, 30, 1))
|
||||
to_chat(user, "<span class='warning'>You need more cable to repair [src]!</span>")
|
||||
return
|
||||
adjustFireLoss(-30)
|
||||
adjustToxLoss(-30)
|
||||
updatehealth()
|
||||
user.visible_message("[user] has fixed some of the burnt wires on [src].", "<span class='notice'>You fix some of the burnt wires on [src].</span>")
|
||||
else
|
||||
to_chat(user, "The wires seem fine, there's no need to fix them.")
|
||||
INVOKE_ASYNC(src, .proc/attempt_cable_repair, W, user)
|
||||
return
|
||||
|
||||
else if(istype(W, /obj/item/crowbar)) // crowbar means open or close the cover
|
||||
if(opened)
|
||||
|
||||
@@ -661,7 +661,7 @@ Difficulty: Normal
|
||||
continue
|
||||
to_chat(M.occupant, "<span class='userdanger'>Your [M.name] is struck by a [name]!</span>")
|
||||
playsound(M,'sound/weapons/sear.ogg', 50, 1, -4)
|
||||
M.take_damage(damage, BURN, 0, 0)
|
||||
M.take_damage(damage, BURN, 0, 0, null, 50)
|
||||
|
||||
/obj/effect/hierophant
|
||||
name = "hierophant beacon"
|
||||
|
||||
@@ -200,6 +200,8 @@
|
||||
L.Stun(75)
|
||||
L.adjustBruteLoss(rand(15,20)) // Less stun more harm
|
||||
latched = TRUE
|
||||
for(var/obj/mecha/M in loc)
|
||||
M.take_damage(20, BRUTE, null, null, null, 25)
|
||||
if(!latched)
|
||||
retract()
|
||||
else
|
||||
|
||||
@@ -19,8 +19,11 @@ GLOBAL_LIST_INIT(ventcrawl_machinery, typecacheof(list(
|
||||
to_chat(src, "You can't vent crawl while you're restrained!")
|
||||
return
|
||||
if(has_buckled_mobs())
|
||||
to_chat(src, "You can't vent crawl with other creatures on you!")
|
||||
return
|
||||
// attempt once
|
||||
unbuckle_all_mobs()
|
||||
if(has_buckled_mobs())
|
||||
to_chat(src, "You can't vent crawl with other creatures on you!")
|
||||
return
|
||||
if(buckled)
|
||||
to_chat(src, "You can't vent crawl while buckled!")
|
||||
return
|
||||
|
||||
@@ -95,6 +95,10 @@ GLOBAL_LIST_EMPTY(allCasters)
|
||||
. = ..()
|
||||
update_icon()
|
||||
|
||||
/obj/machinery/newscaster/attack_ghost(mob/dead/observer/user)
|
||||
if(istype(user))
|
||||
user.read_news()
|
||||
|
||||
/obj/machinery/newscaster/ui_interact(mob/user)
|
||||
. = ..()
|
||||
if(ishuman(user) || issilicon(user))
|
||||
|
||||
@@ -96,7 +96,7 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/guides/cogstation/job_changes
|
||||
name = "MEMO: Job Changes"
|
||||
info = "To ensure minimal employee downtime, please take note of the following changes to select professions that CogStation specifically requires:<BR>\n<BR>\n- Scientists <I>are</I> to have access to chemistry in order to reach the MedSci router.<BR>\n<BR>\n- Chemists should at the very least be provided with an encryption key for the Science channel, if not basic access to the Research department at large. <BR>\n- Roboticists are to have <B>basic Medical and Morgue access</B>. <BR>\n- Engineers and Atmospheric Technicians <I>are</I> to have Warehouse and Mining access.<BR>\n- The Cook should <I>not</I> have Morgue access <BR>\n- The Clown and Mime <I>are</I> to have Maintenance access. This is necessary due to the location of their offices.<BR>\n<BR>\n<I>Generated by Organic Resources Bot #2053</I>"
|
||||
info = "To ensure minimal employee downtime, please take note of the following changes to select professions that CogStation specifically requires:<BR>\n<BR>\n- Engineers and Atmospheric Technicians <I>are</I> to have Warehouse and Mining access. <BR>\n- The Cook should <I>not</I> have Morgue access. <BR>\n- The Clown and Mime <I>are</I> to have Maintenance access. This is necessary due to the location of their offices.<BR>\n<BR>\n<I>Generated by Organic Resources Bot #2053</I>"
|
||||
|
||||
/obj/item/paper/guides/cogstation/letter_sec
|
||||
name = "To future Security personnel"
|
||||
@@ -104,7 +104,7 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/guides/cogstation/disposals
|
||||
name = "Regarding the disposal system:"
|
||||
info = "As you might have noticed, this station has far more disposal pipes than you may expect from your average Nanotrasen research facility. Part of the reason for this is specialization - mail, trash, even corpses have their own disposal systems. Unfortunately, the convenient color-coding was lost in translocation and we've had to compensate by marking the area around each bin. <BR>\n<BR>\n- <B>WHITE/GRAY STRIPES is for DELIVERIES. <BR>\n- RED STRIPES is for CORPSES. <BR>\n- EVERYTHING ELSE is for TRASH,</B> barring a few exceptions that should be labeled as such. <BR>\n<BR>\nIdeally the station won't sustain any heavy structural damage during your time here but if it does, or someone decides to tamper with/sabotage this system, you'll be forgiven if you can't put it back together perfectly. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>Architectural Analyst"
|
||||
info = "As you might have noticed, this station has far more disposal pipes than you may expect from your average Nanotrasen research facility. Part of the reason for this is specialization - mail, trash, even corpses have their own disposal systems. Unfortunately, the convenient color-coding was lost in translocation and we've had to compensate by marking the area around each bin. <BR>\n<BR>\n- <B>WHITE/GRAY STRIPES are for DELIVERIES. <BR>\n- RED STRIPES are for CORPSES. <BR>\n- EVERYTHING ELSE is for TRASH,</B> barring a few exceptions that should be labeled as such. <BR>\n<BR>\nIdeally the station won't sustain any heavy structural damage during your time here but if it does, or someone decides to tamper with/sabotage this system, you'll be forgiven if you can't put it back together perfectly. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>Architectural Analyst"
|
||||
|
||||
/obj/item/paper/guides/cogstation/janitor
|
||||
name = "a quick tip"
|
||||
@@ -128,7 +128,7 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/guides/cogstation/letter_eng
|
||||
name = "To future Engineering staff:"
|
||||
info = "I'm not gonna sugarcoat this. Compared to other departments, <I>you might have your work cut out for you.</I> CogStation is an entirely different beast than your standard Box, but everyone's still gonna expect you to keep the place running. <BR>\n<BR>\n If there's any good news, <B>it's your time to shine if you know how to run a thermo-electric generator.</B> That's what this station runs on, and that isn't likely to change anytime soon. If it's absolutely critical you <I>might</I> be able to run a singularity or tesla engine east of mining, but it won't have any sort of shielding out there. <BR>\n<BR>\n<B>You still have three solar arrays to work with,</B> two of them being on each end of the starboard side. The port side array will need you to either get access from a head of staff or security, unless you want to spacewalk around the whole station. Don't be afraid to ask the latter - they're there for you, after all. As for other utilities <B>the air system is a bit different than you'd expect</B>, but fortunately you should have the atmos techs this station needed a long time ago. <B>The disposal network is significantly more complicated, yet more capable.</B> I've already elaborated on it, so I'll let you find and read my write-up for that. <B>As for the routing system,</B> it's just begging to get hit by a stray meteor so <B>consider other utilities a higher priority.</B> <BR>\n<BR>\nGood luck. You're gonna need it. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>Architectural Analyst"
|
||||
info = "I'm not gonna sugarcoat this. Compared to other departments, <I>you might have your work cut out for you.</I> CogStation is an entirely different beast than your standard Box, but everyone's still gonna expect you to keep the place running. <BR>\n<BR>\n If there's any good news, <B>it's your time to shine if you know how to run a thermo-electric generator.</B> That's what this station runs on, and that isn't likely to change anytime soon. If it's absolutely critical you <I>might</I> be able to run a singularity or tesla engine east of mining, but it won't have any sort of protection out there. <BR>\n<BR>\n<B>You still have three solar arrays to work with,</B> two of them being on each end of the starboard side. The port side array will need you to either get access from a head of staff or security, unless you want to spacewalk around the whole station. Don't be afraid to ask the latter - they're there for you, after all. As for other utilities <B>the air system is a bit different than you'd expect</B>, but fortunately you should have the atmos techs this station needed a long time ago. <B>The disposal network is significantly more complicated, yet more capable.</B> I've already elaborated on it, so I'll let you find and read my write-up for that. <B>As for the routing system,</B> it's just begging to get hit by a stray meteor so <B>consider other utilities a higher priority.</B> <BR>\n<BR>\nGood luck. You're gonna need it. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>Architectural Analyst"
|
||||
|
||||
/obj/item/paper/guides/cogstation/letter_atmos
|
||||
name = "To future Atmospheric Technicians:"
|
||||
@@ -140,15 +140,15 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/guides/cogstation/letter_hos
|
||||
name = "To the future HoS"
|
||||
info = "I'm gonna be rather disappointed if CentCom doesn't brief you about this station, but if they don't <B>I wrote up another letter for your department that should cover it pretty well.</B> Make sure your officers read it if they aren't up to speed. <BR>\n<BR>\nSomething you in particular should know is that if someone's getting to be too much to handle, the boys and I have constructed a 'discount transfer centre' just behind the router. <B>Use it only as a last resort</B> - the walls may be reinforced but they're still thin, and you'll have big trouble on your hands if the AI or any cyborgs find out about it. <BR>\n<BR><I>-LC</I>"
|
||||
info = "I'm gonna be rather disappointed if Central Command doesn't brief you about this station, but if they don't <B>I wrote up another letter for your department that should cover it pretty well.</B> Make sure your officers read it if they aren't up to speed. <BR>\n<BR>\nSomething you in particular should know is that if someone's getting to be too much to handle, the boys and I have constructed a 'discount transfer centre' just behind the router. <B>Use it only as a last resort</B> - the walls may be reinforced but they're still thin, and you'll have big trouble on your hands if the AI or any cyborgs find out about it. <BR>\n<BR><I>-LC</I>"
|
||||
|
||||
/obj/item/paper/guides/cogstation/letter_supp
|
||||
name = "To future Supply Staff:"
|
||||
info = "Cargo, move freight. Miners, don't die. Your jobs are pretty straightforward, which is likely why they originally fell under Engineering on this station as opposed to their own department. Although we've considerably readjusted this part of the station to accommodate you, there are potential differences you should be aware of.<BR>\n<BR>\nEngineering<I>will</I> have access to some of your department, namely the warehouse and mining dock. Mining operations on this station were originally asteroid-based, hence the catwalk into the great beyond. Although you won't need to worry about being space-worthy due to a newly installed shuttle dock, they might need to get out there. <BR>\n<BR>\nYou'll have all your usual means of shipping out goods, but the disposal network is more complex with a separate line for mail and trash. I've left another note that explains this in detail, but know trash is the janitor's responsibility, not yours. <BR>\n<BR>\nThe biggest difference has to be this station's router system, which allows departments to ship goods between themselves. Even if the belts aren't working properly they'll still have their own request consoles, so you'll want to check for orders regularly. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>\nArchitectural Analyst"
|
||||
info = "Cargo, move freight. Miners, don't die. Your jobs are pretty straightforward, which is likely why they originally fell under Engineering on this station as opposed to their own department. Although we've considerably readjusted this part of the station to accommodate you, there are potential differences you should be aware of.<BR>\n<BR>\nEngineering<I>will</I> have access to some of your department, namely the warehouse and mining dock. Mining operations on this station were originally asteroid-based, hence the catwalk into the great beyond. Although you won't need to worry about being space-worthy due to a newly installed shuttle dock, they might need to get out there. <BR>\n<BR>\nYou'll have all your usual means of shipping out goods, but the disposal network is more complex with a separate line for mail and trash. It also isn't fully space-proofed, meanin it may not be the best choice for livestock, monkey cubes, or clowns. I've left another note that explains this in detail, but know trash is the janitor's responsibility, not yours. <BR>\n<BR>\nThe biggest difference has to be this station's router system, which allows departments to ship goods between themselves. Even if the belts aren't working properly they'll still have their own request consoles, so you'll want to check for orders regularly. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>\nArchitectural Analyst"
|
||||
|
||||
/obj/item/paper/fluff/cogstation/sleepers
|
||||
name = "Re: Sleepers?"
|
||||
info = "Yes, the sleepers are meant to be publicly accessible. Policies in this station's original location encouraged crew to visit the clinic or treat themselves when it came to minor injuries. <BR>\n<BR>\n<B>This is no excuse for you not to do your jobs.</B> You may wish to keep an eye on the sleepers as to ensure they're being used responsibly. Remember, allowing an overdose to happen under your watch isn't much different from administering that overdose yourself. <BR>\n<BR>\n<I>- Dr. Halley</I>"
|
||||
/obj/item/paper/guides/cogstation/letter_med
|
||||
name = "Re: Future Medical Staff"
|
||||
info = "With this station nearing approval for regular use, I've been told to consolidate anything noteworthy about its general medical department into a single document. As you may be able to guess, this is that document. <BR>\n<BR>\n- First, you should know a <B>medical clinic is present in the civilian (starboard bow) wing.</B> If you have personnel to spare, it's recommended you have someone staff it - that way people with minor injuries can report there instead of clogging up the research wing. <BR>\n<BR>\n- Despite recent renovations to bring this station in line with regional policy, you'll still find the robotics lab directly adjacent to your department. <B>I advise you take full advantage of this,</B> whether it's requesting prosthetics in advance or harvesting organs from those who have undergone more...permanent procedures. <BR>\n<BR>\n- Lastly, <B>please make a habit of checking the morgue on a regular basis.</B> Thanks to the Corpse Disposal Network (or CDN for short), you may find the station's deceased delivered directly to you. Some may be employees capable of being revived - more information can be found in the morgue itself. <BR>\n<BR>\n<I>- Dr. Halley</I>"
|
||||
|
||||
/obj/item/paper/fluff/cogstation/cloner
|
||||
name = "Re: Issue with the cloner?"
|
||||
@@ -172,7 +172,7 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/fluff/cogstation/letter_chap
|
||||
name = "A message from the DHDA"
|
||||
info = "Regardless of what the name leads you to believe, CogStation is neither Ratvarian in origin nor designed by members of this so-called 'clock cult'. Despite a potential common enemy and instances of exhibiting peaceful behavior, their beliefs have been labeled 'Heretical' by the Department of Higher-Dimensional Affairs and following them is grounds for immediate termination. <BR>\nAs the station's designated Chaplain, it is advised you correct anyone who claims this station and/or its designers are Ratvarian. While they are most likely misinformed or 'joking around', untruths gain credibility the more they are repeated. <BR>\n<BR>\n<I>Soulstone Obelisk</I> <BR>\n<BR>\nDepartment of Higher-Dimensional Affairs"
|
||||
info = "Regardless of what the name leads you to believe, CogStation is neither Ratvarian in origin nor designed by members of this so-called 'clock cult'. Despite a potential common enemy and instances of exhibiting peaceful behavior, their beliefs have been labeled 'Heretical' by the Department of Higher-Dimensional Affairs and following them is grounds for immediate termination. <BR>\nAs the station's designated Chaplain, it is advised you correct anyone who claims this station and/or its designers are Ratvarian. While they are most likely misinformed or 'joking around', untruths gain credibility the more they are repeated. <BR>\n<BR>\n<I>Soulstone Obelisk</I> <BR>\n<BR>\nDepartment of Higher-Dimensional Affairs"
|
||||
|
||||
/obj/item/paper/fluff/cogstation/cluwne
|
||||
name = "Mysterious Note"
|
||||
@@ -184,7 +184,7 @@ Accidental Reentry:
|
||||
|
||||
/obj/item/paper/fluff/cogstation/eva
|
||||
name = "MEMO: Spacesuits"
|
||||
info = "As a Head of Personnel, you may be familiar with crew members requesting EVA access, particularly when there is an absence of credible threats on the station. While it is your decision to grant or deny access unless overriden by your superior(s), you should be aware of an abundance of spacesuits on this station. While intended for emergencies, these suits are cheaper to replace. You may find it beneficial to direct aspiring 'space explorers' towards finding one of these suits instead, although it is advised you order replacement suits in advance through the cargo department. <BR>\n<BR>\n-Generated by Organic Resources Bot #2053"
|
||||
info = "As a Head of Personnel, you may be familiar with crew members requesting EVA access, particularly when there is an absence of credible threats on the station. While it is your decision to grant or deny access unless overriden by your superior(s), you should be aware of an abundance of spacesuits on this station. While intended for emergencies, these suits are cheaper to replace. You may find it beneficial to direct aspiring 'space explorers' towards finding one of these suits instead, although it is advised you order replacement suits in advance through the cargo department. <BR>\n<BR>\n<I>Generated by Organic Resources Bot #2053</I>"
|
||||
|
||||
/obj/item/paper/fluff/cogstation/chemists
|
||||
name = "Re: Scientists?!"
|
||||
@@ -214,9 +214,9 @@ Accidental Reentry:
|
||||
name = "ROUTER STATUS: LIMITED"
|
||||
info = "Currently, this router cannot receive deliveries from the Airbridge, MedSci, Security, or Service Routers. Cargo and the recycler are the only points currently accepting deliveries from here, although manual input from the routing depot is currently required. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>\n<BR>\nArchitectural Analyst"
|
||||
|
||||
/obj/item/paper/fluff/cogstation/router_cargo
|
||||
name = "ROUTER STATUS: VERY LIMITED"
|
||||
info = "Currently, this router cannot receive deliveries from the Airbridge, MedSci, Security, or Service Routers. It is not yet capable of making deliveries, beyond sending items to the recycler. <BR>\n<BR>\n<I>-C. Donnelly</I> <BR>\n<BR>\nArchitectural Analyst"
|
||||
/obj/item/paper/fluff/cogstation/mulebot
|
||||
name = "MEMO: MULEbots"
|
||||
info = "As you may know, MULEbots have been coded to minimize travel distance for maximum efficiency. In the case of this station, that may include travelling through depressurized areas exposed to space. Please bear this in mind before using them to transport living tissue. <BR>\n<BR>\n<I>Generated by Organic Resources Bot #2053</I>"
|
||||
|
||||
/////////// CentCom
|
||||
|
||||
|
||||
@@ -66,7 +66,7 @@
|
||||
var/energy_transfer = delta_temperature*hot_air_heat_capacity*cold_air_heat_capacity/(hot_air_heat_capacity+cold_air_heat_capacity)
|
||||
|
||||
var/heat = energy_transfer*(1-efficiency)
|
||||
lastgen += energy_transfer*efficiency
|
||||
lastgen += LOGISTIC_FUNCTION(1000000,0.0034,delta_temperature,2000)
|
||||
|
||||
hot_air.set_temperature(hot_air.return_temperature() - energy_transfer/hot_air_heat_capacity)
|
||||
cold_air.set_temperature(cold_air.return_temperature() + heat/cold_air_heat_capacity)
|
||||
|
||||
@@ -149,6 +149,9 @@
|
||||
icon = 'icons/obj/ammo.dmi'
|
||||
icon_state = "shotgunclip"
|
||||
caliber = "shotgun" // slapped in to allow shell mix n match
|
||||
slot_flags = ITEM_SLOT_BELT | ITEM_SLOT_POCKET
|
||||
w_class = WEIGHT_CLASS_NORMAL
|
||||
w_volume = ITEM_VOLUME_STRIPPER_CLIP
|
||||
ammo_type = /obj/item/ammo_casing/shotgun
|
||||
max_ammo = 4
|
||||
var/pixeloffsetx = 4
|
||||
|
||||
@@ -19,6 +19,10 @@
|
||||
var/stream_range = 1 //the range of tiles the sprayer will reach when in stream mode.
|
||||
var/stream_amount = 10 //the amount of reagents transfered when in stream mode.
|
||||
var/spray_delay = 3 //The amount of sleep() delay between each chempuff step.
|
||||
/// Last world.time of spray
|
||||
var/last_spray = 0
|
||||
/// Spray cooldown
|
||||
var/spray_cooldown = CLICK_CD_MELEE
|
||||
var/can_fill_from_container = TRUE
|
||||
amount_per_transfer_from_this = 5
|
||||
volume = 250
|
||||
@@ -27,8 +31,6 @@
|
||||
|
||||
/obj/item/reagent_containers/spray/afterattack(atom/A, mob/user)
|
||||
. = ..()
|
||||
if(!user.CheckActionCooldown(CLICK_CD_MELEE))
|
||||
return
|
||||
if(istype(A, /obj/structure/sink) || istype(A, /obj/structure/janitorialcart) || istype(A, /obj/machinery/hydroponics))
|
||||
return
|
||||
|
||||
@@ -49,7 +51,8 @@
|
||||
to_chat(user, "<span class='warning'>[src] is empty!</span>")
|
||||
return
|
||||
|
||||
spray(A)
|
||||
if(!spray(A))
|
||||
return
|
||||
|
||||
playsound(src.loc, 'sound/effects/spray2.ogg', 50, 1, -6)
|
||||
user.last_action = world.time
|
||||
@@ -64,10 +67,10 @@
|
||||
if(reagents.has_reagent(/datum/reagent/lube))
|
||||
message_admins("[ADMIN_LOOKUPFLW(user)] fired Space lube from \a [src] at [ADMIN_VERBOSEJMP(T)].")
|
||||
log_game("[key_name(user)] fired Space lube from \a [src] at [AREACOORD(T)].")
|
||||
return
|
||||
|
||||
|
||||
/obj/item/reagent_containers/spray/proc/spray(atom/A)
|
||||
if((last_spray + spray_cooldown) > world.time)
|
||||
return
|
||||
var/range = clamp(get_dist(src, A), 1, current_range)
|
||||
var/obj/effect/decal/chempuff/D = new /obj/effect/decal/chempuff(get_turf(src))
|
||||
D.create_reagents(amount_per_transfer_from_this, NONE, NO_REAGENTS_VALUE)
|
||||
@@ -79,10 +82,11 @@
|
||||
reagents.trans_to(D, amount_per_transfer_from_this, 1/range)
|
||||
D.color = mix_color_from_reagents(D.reagents.reagent_list)
|
||||
var/wait_step = max(round(2+ spray_delay * INVERSE(range)), 2)
|
||||
do_spray(A, wait_step, D, range, puff_reagent_left)
|
||||
last_spray = world.time
|
||||
INVOKE_ASYNC(src, .proc/do_spray, A, wait_step, D, range, puff_reagent_left)
|
||||
return TRUE
|
||||
|
||||
/obj/item/reagent_containers/spray/proc/do_spray(atom/A, wait_step, obj/effect/decal/chempuff/D, range, puff_reagent_left)
|
||||
set waitfor = FALSE
|
||||
var/range_left = range
|
||||
for(var/i=0, i<range, i++)
|
||||
range_left--
|
||||
|
||||
@@ -42,6 +42,8 @@
|
||||
return
|
||||
|
||||
. = ..()
|
||||
if(!.)
|
||||
return
|
||||
new /obj/item/grown/bananapeel(target)
|
||||
|
||||
/obj/effect/proc_holder/spell/aimed/banana_peel/update_icon()
|
||||
|
||||
@@ -598,7 +598,7 @@
|
||||
|
||||
var/datum/species/S = H.dna.species
|
||||
base_bp_icon = S?.icon_limbs || DEFAULT_BODYPART_ICON
|
||||
species_id = S.limbs_id
|
||||
species_id = S.mutant_bodyparts["limbs_id"]
|
||||
species_flags_list = H.dna.species.species_traits
|
||||
|
||||
//body marking memes
|
||||
@@ -613,7 +613,6 @@
|
||||
|
||||
if(S.use_skintones)
|
||||
skin_tone = H.skin_tone
|
||||
base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon
|
||||
else
|
||||
skin_tone = ""
|
||||
|
||||
@@ -626,13 +625,9 @@
|
||||
species_color = S.fixed_mut_color
|
||||
else
|
||||
species_color = H.dna.features["mcolor"]
|
||||
base_bp_icon = (base_bp_icon == DEFAULT_BODYPART_ICON) ? DEFAULT_BODYPART_ICON_ORGANIC : base_bp_icon
|
||||
else
|
||||
species_color = ""
|
||||
|
||||
if(base_bp_icon != DEFAULT_BODYPART_ICON)
|
||||
color_src = mut_colors ? MUTCOLORS : ((H.dna.skin_tone_override && S.use_skintones == USE_SKINTONES_GRAYSCALE_CUSTOM) ? CUSTOM_SKINTONE : SKINTONE)
|
||||
|
||||
if(S.mutant_bodyparts["legs"])
|
||||
if(body_zone == BODY_ZONE_L_LEG || body_zone == BODY_ZONE_R_LEG)
|
||||
if(DIGITIGRADE in S.species_traits)
|
||||
@@ -652,11 +647,16 @@
|
||||
body_markings = "plain"
|
||||
aux_marking = "plain"
|
||||
markings_color = list(colorlist)
|
||||
|
||||
else
|
||||
body_markings = null
|
||||
aux_marking = null
|
||||
|
||||
if(species_id in GLOB.greyscale_limb_types) //should they have greyscales?
|
||||
base_bp_icon = DEFAULT_BODYPART_ICON_ORGANIC
|
||||
|
||||
if(base_bp_icon != DEFAULT_BODYPART_ICON)
|
||||
color_src = mut_colors ? MUTCOLORS : ((H.dna.skin_tone_override && S.use_skintones == USE_SKINTONES_GRAYSCALE_CUSTOM) ? CUSTOM_SKINTONE : SKINTONE)
|
||||
|
||||
if(!dropping_limb && H.dna.check_mutation(HULK))
|
||||
mutation_color = "00aa00"
|
||||
else
|
||||
|
||||
@@ -265,6 +265,10 @@
|
||||
var/C = input(owner, "Select Color", "Select color", "#ffffff") as color|null
|
||||
if(!C || QDELETED(src) || QDELETED(user) || QDELETED(owner) || owner != user)
|
||||
return
|
||||
var/list/hsv = ReadHSV(RGBtoHSV(C))
|
||||
if(hsv[2] > 125)
|
||||
to_chat(user, "<span class='warning'>A color that saturated? Surely not!</span>")
|
||||
return
|
||||
var/range = input(user, "Enter range (0 - [max_light_beam_distance])", "Range Select", 0) as null|num
|
||||
if(!isnum(range))
|
||||
return
|
||||
@@ -396,4 +400,4 @@
|
||||
|
||||
#undef BLURRY_VISION_ONE
|
||||
#undef BLURRY_VISION_TWO
|
||||
#undef BLIND_VISION_THREE
|
||||
#undef BLIND_VISION_THREE
|
||||
|
||||
@@ -177,6 +177,7 @@
|
||||
organic host as a home base and source of fuel. Holoparasites come in various types and share damage with their host."
|
||||
item = /obj/item/storage/box/syndie_kit/guardian
|
||||
cost = 15
|
||||
limited_stock = 1 // you can only have one holopara apparently?
|
||||
refundable = TRUE
|
||||
cant_discount = TRUE
|
||||
surplus = 0
|
||||
|
||||
@@ -80,6 +80,7 @@
|
||||
item = /obj/item/cartridge/virus/syndicate
|
||||
cost = 5
|
||||
restricted = TRUE
|
||||
limited_stock = 1
|
||||
|
||||
/datum/uplink_item/explosives/emp
|
||||
name = "EMP Grenades and Implanter Kit"
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
/obj/item/clothing/under/misc/keyholesweater = 2,
|
||||
/obj/item/clothing/under/misc/stripper/mankini = 2,
|
||||
/obj/item/clothing/under/costume/jabroni = 2,
|
||||
/obj/item/clothing/gloves/evening/black = 2,
|
||||
/obj/item/dildo/flared/huge = 3
|
||||
)
|
||||
premium = list(
|
||||
|
||||
@@ -50,6 +50,103 @@
|
||||
-->
|
||||
<div class="commit sansserif">
|
||||
|
||||
<h2 class="date">28 August 2020</h2>
|
||||
<h3 class="author">EmeraldSundisk updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds more paper to the library</li>
|
||||
<li class="rscadd">The law office now has a desk window</li>
|
||||
<li class="tweak">Expands most of CogStation's exterior airlocks. Slightly adjusts surrounding areas to accommodate this.</li>
|
||||
<li class="tweak">Updates some of CogStation's paperwork</li>
|
||||
<li class="tweak">The rat in the morgue turned themselves into a possum. Funniest shit I've ever seen.</li>
|
||||
<li class="bugfix">Adjusts some area designations so cameras should receive power properly</li>
|
||||
<li class="bugfix">Cleans up an errant decal</li>
|
||||
</ul>
|
||||
<h3 class="author">Hatterhat updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Traitor holoparasites can now only be bought once, because apparently you can only have one active holopara.</li>
|
||||
<li class="balance">PDA bombs can now only be bought once per uplink.</li>
|
||||
</ul>
|
||||
<h3 class="author">lolman360 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">atmos = radiation = chemistry.</li>
|
||||
</ul>
|
||||
<h3 class="author">shellspeed1 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Adds slow mode for iv drips</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">an ancient game over a thousand years old has re-emerged among crewmembers - rock paper scissors</li>
|
||||
<li class="tweak">customization features appear in alphabetical order where necessary</li>
|
||||
<li class="tweak">bokken do two more stamina damage now</li>
|
||||
<li class="rscadd">you can now choose a body sprite as an anthromorph or anthromorphic insect, and can choose from aquatic/avian and apid respectively (and obviously back to the defaults too)</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">27 August 2020</h2>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">eyebeam lighting can only have 128 maximum HSV saturation now.</li>
|
||||
<li class="balance">no more shotgun stripper clips in boxes.</li>
|
||||
<li class="balance">goliath tentacles now do 20 damage to mechs at 25% ap</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">changing your character's gender won't randomize its hairstyle and facial hairstyle now</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">26 August 2020</h2>
|
||||
<h3 class="author">ancientpower updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Ghosts can read newscasters by clicking on them.</li>
|
||||
</ul>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="balance">hierophant vortex blasts now have 50% armor penetration vs mecha</li>
|
||||
<li class="balance">ventcrawling now kicks off every attached/buckled mob, even for non humans.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">25 August 2020</h2>
|
||||
<h3 class="author">Hatterhat updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">Insidious combat gloves have been replaced by insidious guerilla gloves. They're generally the same, except now you can tackle with them.</li>
|
||||
</ul>
|
||||
<h3 class="author">Literallynotpickles updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">You can now equip handheld crew monitors on all medical-related winter coats.</li>
|
||||
</ul>
|
||||
<h3 class="author">Putnam3145 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">vore now ejects occupants on death</li>
|
||||
</ul>
|
||||
<h3 class="author">raspy-on-osu updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">Thermoelectric Generator power output</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="tweak">I.P.Cs now short their circuits when expressing emotion, causing sparks to appear around them.</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">24 August 2020</h2>
|
||||
<h3 class="author">MrJWhit updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">Fixes areas on expanded airlocks</li>
|
||||
</ul>
|
||||
<h3 class="author">silicons updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="bugfix">wormhole jaunters work</li>
|
||||
<li class="tweak">wormhole jaunters no longer get interference from bags of holding</li>
|
||||
<li class="bugfix">airlocks now only shock on pulse/wirecutters instead of on tgui panel open.</li>
|
||||
</ul>
|
||||
<h3 class="author">timothyteakettle updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">three new items are in the loadout for all donators</li>
|
||||
</ul>
|
||||
<h3 class="author">zeroisthebiggay updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
<li class="rscadd">contraband black evening gloves in kinkvend</li>
|
||||
</ul>
|
||||
|
||||
<h2 class="date">23 August 2020</h2>
|
||||
<h3 class="author">DeltaFire15 updated:</h3>
|
||||
<ul class="changes bgimages16">
|
||||
|
||||
@@ -27060,3 +27060,70 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
|
||||
- rscadd: suiciding with the temporal katana omae wa mou shinderius you into the
|
||||
shadow realm
|
||||
- soundadd: twilight isnt earrape
|
||||
2020-08-24:
|
||||
MrJWhit:
|
||||
- bugfix: Fixes areas on expanded airlocks
|
||||
silicons:
|
||||
- bugfix: wormhole jaunters work
|
||||
- tweak: wormhole jaunters no longer get interference from bags of holding
|
||||
- bugfix: airlocks now only shock on pulse/wirecutters instead of on tgui panel
|
||||
open.
|
||||
timothyteakettle:
|
||||
- rscadd: three new items are in the loadout for all donators
|
||||
zeroisthebiggay:
|
||||
- rscadd: contraband black evening gloves in kinkvend
|
||||
2020-08-25:
|
||||
Hatterhat:
|
||||
- rscadd: Insidious combat gloves have been replaced by insidious guerilla gloves.
|
||||
They're generally the same, except now you can tackle with them.
|
||||
Literallynotpickles:
|
||||
- tweak: You can now equip handheld crew monitors on all medical-related winter
|
||||
coats.
|
||||
Putnam3145:
|
||||
- tweak: vore now ejects occupants on death
|
||||
raspy-on-osu:
|
||||
- tweak: Thermoelectric Generator power output
|
||||
timothyteakettle:
|
||||
- tweak: I.P.Cs now short their circuits when expressing emotion, causing sparks
|
||||
to appear around them.
|
||||
2020-08-26:
|
||||
ancientpower:
|
||||
- tweak: Ghosts can read newscasters by clicking on them.
|
||||
silicons:
|
||||
- balance: hierophant vortex blasts now have 50% armor penetration vs mecha
|
||||
- balance: ventcrawling now kicks off every attached/buckled mob, even for non humans.
|
||||
2020-08-27:
|
||||
silicons:
|
||||
- tweak: eyebeam lighting can only have 128 maximum HSV saturation now.
|
||||
- balance: no more shotgun stripper clips in boxes.
|
||||
- balance: goliath tentacles now do 20 damage to mechs at 25% ap
|
||||
timothyteakettle:
|
||||
- tweak: changing your character's gender won't randomize its hairstyle and facial
|
||||
hairstyle now
|
||||
2020-08-28:
|
||||
EmeraldSundisk:
|
||||
- rscadd: Adds more paper to the library
|
||||
- rscadd: The law office now has a desk window
|
||||
- tweak: Expands most of CogStation's exterior airlocks. Slightly adjusts surrounding
|
||||
areas to accommodate this.
|
||||
- tweak: Updates some of CogStation's paperwork
|
||||
- tweak: The rat in the morgue turned themselves into a possum. Funniest shit I've
|
||||
ever seen.
|
||||
- bugfix: Adjusts some area designations so cameras should receive power properly
|
||||
- bugfix: Cleans up an errant decal
|
||||
Hatterhat:
|
||||
- tweak: Traitor holoparasites can now only be bought once, because apparently you
|
||||
can only have one active holopara.
|
||||
- balance: PDA bombs can now only be bought once per uplink.
|
||||
lolman360:
|
||||
- rscadd: atmos = radiation = chemistry.
|
||||
shellspeed1:
|
||||
- rscadd: Adds slow mode for iv drips
|
||||
timothyteakettle:
|
||||
- rscadd: an ancient game over a thousand years old has re-emerged among crewmembers
|
||||
- rock paper scissors
|
||||
- tweak: customization features appear in alphabetical order where necessary
|
||||
- tweak: bokken do two more stamina damage now
|
||||
- rscadd: you can now choose a body sprite as an anthromorph or anthromorphic insect,
|
||||
and can choose from aquatic/avian and apid respectively (and obviously back
|
||||
to the defaults too)
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
author: "raspy-on-osu"
|
||||
delete-after: True
|
||||
changes:
|
||||
- rscadd: "new explosion echoes"
|
||||
- tweak: "explosion echo range"
|
||||
- soundadd: "5 new explosion related sounds"
|
||||
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 41 KiB After Width: | Height: | Size: 44 KiB |
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 91 KiB |
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 77 KiB |
|
Before Width: | Height: | Size: 19 KiB After Width: | Height: | Size: 20 KiB |
@@ -7,6 +7,27 @@
|
||||
category = LOADOUT_CATEGORY_DONATOR
|
||||
ckeywhitelist = list("This entry should never appear with this variable set.") //If it does, then that means somebody fucked up the whitelist system pretty hard
|
||||
|
||||
/datum/gear/donator/pet
|
||||
name = "Pet Beacon"
|
||||
slot = SLOT_IN_BACKPACK
|
||||
path = /obj/item/choice_beacon/pet
|
||||
ckeywhitelist = list()
|
||||
donator_group_id = DONATOR_GROUP_TIER_1 // can be accessed by all donators
|
||||
|
||||
/datum/gear/donator/carpet
|
||||
name = "Carpet Beacon"
|
||||
slot = SLOT_IN_BACKPACK
|
||||
path = /obj/item/choice_beacon/box/carpet
|
||||
ckeywhitelist = list()
|
||||
donator_group_id = DONATOR_GROUP_TIER_1
|
||||
|
||||
/datum/gear/donator/chameleon_bedsheet
|
||||
name = "Chameleon Bedsheet"
|
||||
slot = SLOT_NECK
|
||||
path = /obj/item/bedsheet/chameleon
|
||||
ckeywhitelist = list()
|
||||
donator_group_id = DONATOR_GROUP_TIER_1
|
||||
|
||||
/datum/gear/donator/donortestingbikehorn
|
||||
name = "Donor item testing bikehorn"
|
||||
slot = SLOT_IN_BACKPACK
|
||||
|
||||
@@ -9,6 +9,10 @@
|
||||
/datum/gear/gloves/evening
|
||||
name = "Evening gloves"
|
||||
path = /obj/item/clothing/gloves/evening
|
||||
|
||||
/datum/gear/gloves/midnight
|
||||
name = "Midnight gloves"
|
||||
path = /obj/item/clothing/gloves/evening/black
|
||||
|
||||
/datum/gear/gloves/goldring
|
||||
name = "A gold ring"
|
||||
|
||||
|
Before Width: | Height: | Size: 5.1 KiB |
|
Before Width: | Height: | Size: 8.7 KiB |
@@ -131,7 +131,8 @@
|
||||
"@pick(semicolon)*weh",
|
||||
"@pick(semicolon)My balls finally feel full, again.",
|
||||
"@pick(semicolon)Assaltign a sec osficer aren't crime if ur @pick(roles)",
|
||||
";SEC I SPILED MU JICE HELELPH HELPJ JLEP HELP"
|
||||
";SEC I SPILED MU JICE HELELPH HELPJ JLEP HELP",
|
||||
"@pick(semicolon) atmos is chemistyr is radation fast air is FASTER cheemsitry and FASTER RADIATION AND FASTER DEATH!!!"
|
||||
],
|
||||
|
||||
"mutations": [
|
||||
@@ -199,7 +200,7 @@
|
||||
"abdoocters",
|
||||
"revinent"
|
||||
],
|
||||
|
||||
|
||||
"bug": [
|
||||
"",
|
||||
"IS TIS A BUG??",
|
||||
@@ -207,7 +208,7 @@
|
||||
"BUG!!!",
|
||||
"HUE, FEATURE!!"
|
||||
],
|
||||
|
||||
|
||||
"semicolon": [
|
||||
"",
|
||||
";",
|
||||
@@ -271,7 +272,7 @@
|
||||
"arrdee",
|
||||
"sek"
|
||||
],
|
||||
|
||||
|
||||
"cargo": [
|
||||
"GUNS",
|
||||
"HATS",
|
||||
@@ -279,7 +280,7 @@
|
||||
"MEMES",
|
||||
"GLOWY CYSTAL"
|
||||
],
|
||||
|
||||
|
||||
"s_roles": [
|
||||
"ert",
|
||||
"shadowlig",
|
||||
|
||||
@@ -96,6 +96,7 @@
|
||||
#include "code\__DEFINES\reagents_specific_heat.dm"
|
||||
#include "code\__DEFINES\research.dm"
|
||||
#include "code\__DEFINES\robots.dm"
|
||||
#include "code\__DEFINES\rockpaperscissors.dm"
|
||||
#include "code\__DEFINES\role_preferences.dm"
|
||||
#include "code\__DEFINES\rust_g.dm"
|
||||
#include "code\__DEFINES\say.dm"
|
||||
|
||||