mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2026-08-30 16:48:12 +01:00
Merge branch 'master' into protean-rework
This commit is contained in:
+4
-1
@@ -3,4 +3,7 @@ dreamchecker = true
|
||||
|
||||
[code_standards]
|
||||
disallow_relative_type_definitions = true
|
||||
disallow_relative_proc_definitions = true
|
||||
disallow_relative_proc_definitions = true
|
||||
|
||||
[debugger]
|
||||
engine = "auxtools"
|
||||
|
||||
@@ -136,8 +136,9 @@
|
||||
#define CLASS_MIDDLE "Average"
|
||||
#define CLASS_LOWMID "Underpaid"
|
||||
#define CLASS_LOWER "Poor"
|
||||
#define CLASS_BROKE "Broke" //VOREStation Add
|
||||
|
||||
#define ECONOMIC_CLASS list(CLASS_UPPER,CLASS_UPMID,CLASS_MIDDLE,CLASS_LOWMID,CLASS_LOWER)
|
||||
#define ECONOMIC_CLASS list(CLASS_UPPER,CLASS_UPMID,CLASS_MIDDLE,CLASS_LOWMID,CLASS_LOWER,CLASS_BROKE)
|
||||
|
||||
|
||||
// Defines mob sizes, used by lockers and to determine what is considered a small sized mob, etc.
|
||||
@@ -249,7 +250,7 @@
|
||||
#define BP_HEAD "head"
|
||||
#define BP_TORSO "torso"
|
||||
#define BP_GROIN "groin"
|
||||
#define BP_ALL list(BP_GROIN, BP_TORSO, BP_HEAD, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG)
|
||||
#define BP_ALL list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT) //keep so that parent comes before child
|
||||
|
||||
#define SYNTH_BLOOD_COLOUR "#030303"
|
||||
#define SYNTH_FLESH_COLOUR "#575757"
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
#define MARKING_NONDIGI_ONLY (1 << 0)
|
||||
#define MARKING_DIGITIGRADE_ONLY (1 << 1)
|
||||
#define MARKING_ALL_LEGS MARKING_NONDIGI_ONLY|MARKING_DIGITIGRADE_ONLY
|
||||
@@ -94,6 +94,7 @@ var/global/list/runlevel_flags = list(RUNLEVEL_LOBBY, RUNLEVEL_SETUP, RUNLEVEL_G
|
||||
|
||||
// Subsystem fire priority, from lowest to highest priority
|
||||
// If the subsystem isn't listed here it's either DEFAULT or PROCESS (if it's a processing subsystem child)
|
||||
#define FIRE_PRIORITY_PLAYERTIPS 5
|
||||
#define FIRE_PRIORITY_SHUTTLES 5
|
||||
#define FIRE_PRIORITY_SUPPLY 5
|
||||
#define FIRE_PRIORITY_NIGHTSHIFT 5
|
||||
|
||||
@@ -260,7 +260,7 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
SS.state = SS_IDLE
|
||||
if (SS.flags & SS_TICKER)
|
||||
tickersubsystems += SS
|
||||
timer += world.tick_lag * rand(1, 5)
|
||||
timer += world.tick_lag * rand(0,1)
|
||||
SS.next_fire = timer
|
||||
continue
|
||||
|
||||
@@ -335,13 +335,16 @@ GLOBAL_REAL(Master, /datum/controller/master) = new
|
||||
var/checking_runlevel = current_runlevel
|
||||
if(cached_runlevel != checking_runlevel)
|
||||
//resechedule subsystems
|
||||
var/list/old_subsystems = current_runlevel_subsystems
|
||||
cached_runlevel = checking_runlevel
|
||||
current_runlevel_subsystems = runlevel_sorted_subsystems[cached_runlevel]
|
||||
var/stagger = world.time
|
||||
|
||||
//now we'll go through all the subsystems we want to offset and give them a next_fire
|
||||
for(var/datum/controller/subsystem/SS as anything in current_runlevel_subsystems)
|
||||
if(SS.next_fire <= world.time)
|
||||
stagger += world.tick_lag * rand(1, 5)
|
||||
SS.next_fire = stagger
|
||||
//we only want to offset it if it's new and also behind
|
||||
if(SS.next_fire > world.time || (SS in old_subsystems))
|
||||
continue
|
||||
SS.next_fire = world.time + world.tick_lag * rand(0, DS2TICKS(min(SS.wait, 2 SECONDS)))
|
||||
|
||||
subsystems_to_check = current_runlevel_subsystems
|
||||
else
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/*
|
||||
Player tips procs and lists are defined under /code/modules/player_tips_vr
|
||||
*/
|
||||
SUBSYSTEM_DEF(player_tips)
|
||||
name = "Periodic Player Tips"
|
||||
priority = FIRE_PRIORITY_PLAYERTIPS
|
||||
runlevels = RUNLEVEL_GAME
|
||||
|
||||
wait = 3000 //We check if it's time to send a tip every 5 minutes (300 seconds)
|
||||
var/static/datum/player_tips/player_tips = new
|
||||
|
||||
|
||||
|
||||
|
||||
/datum/controller/subsystem/player_tips/fire()
|
||||
player_tips.send_tips()
|
||||
@@ -31,13 +31,13 @@ SUBSYSTEM_DEF(xenoarch)
|
||||
|
||||
/datum/controller/subsystem/xenoarch/proc/SetupXenoarch()
|
||||
for(var/turf/simulated/mineral/M in world)
|
||||
if(!M.density || (M.z in using_map.xenoarch_exempt_levels))
|
||||
if(!M.density)
|
||||
continue
|
||||
|
||||
if(isnull(M.geologic_data))
|
||||
M.geologic_data = new /datum/geosample(M)
|
||||
|
||||
if(!prob(XENOARCH_SPAWN_CHANCE))
|
||||
if((M.z in using_map.xenoarch_exempt_levels) || !prob(XENOARCH_SPAWN_CHANCE))
|
||||
continue
|
||||
|
||||
var/farEnough = 1
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm
|
||||
volume_chan = VOLUME_CHANNEL_ALARMS
|
||||
pref_check = /datum/client_preference/looping_alarms
|
||||
|
||||
/datum/looping_sound/alarm/fire_alarm // Commented out start/end as I don't feel they're very fitting
|
||||
// start_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_start.ogg'
|
||||
// start_length = 40
|
||||
mid_sounds = list('sound/effects/alarms/fire_alarm/fire_alarm_mid.ogg' = 1)
|
||||
mid_length = 6 SECONDS // Exact loop, these things should be constantly running while there's a fire actively going
|
||||
// end_sound = 'sound/effects/alarms/fire_alarm/fire_alarm_stop.ogg'
|
||||
volume = 30
|
||||
extra_range = 60 // Alarms should be clearly heard from far away
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/decompression_alarm
|
||||
mid_sounds = list('sound/effects/alarms/decon_alarm.ogg'=1)
|
||||
mid_length = 4 SECONDS // Delay by 1 second so as to not spam it
|
||||
volume = 100
|
||||
extra_range = 20
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/engineering_alarm
|
||||
mid_sounds = list('sound/effects/alarms/engineering_alarm.ogg'=1)
|
||||
mid_length = 30
|
||||
volume = 20
|
||||
extra_range = 30
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/threat_level_high
|
||||
mid_sounds = list('sound/effects/alarms/threat_level_high.ogg'=1)
|
||||
mid_length = 4 SECONDS
|
||||
volume = 60
|
||||
extra_range = 40
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/threat_level_extreme
|
||||
mid_sounds = list('sound/effects/alarms/threat_level_extreme.ogg'=1)
|
||||
mid_length = 4 SECONDS
|
||||
volume = 60
|
||||
extra_range = 40
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/sm_critical_alarm
|
||||
mid_sounds = list('sound/effects/alarms/crit_alarm.ogg'=1)
|
||||
mid_length = 3 SECONDS
|
||||
volume = 90
|
||||
extra_range = 40
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
/datum/looping_sound/alarm/sm_causality_alarm
|
||||
mid_sounds = list('sound/effects/alarms/causality_alarm.ogg'=1)
|
||||
mid_length = 9 SECONDS
|
||||
volume = 80
|
||||
extra_range = 60
|
||||
@@ -1,2 +1,22 @@
|
||||
/datum/mind
|
||||
var/vore_death = FALSE // Was our last gasp a gurgle?
|
||||
var/show_in_directory
|
||||
var/directory_tag
|
||||
var/directory_erptag
|
||||
var/directory_ad
|
||||
//CHOMPEdit additions
|
||||
var/vantag_preference = VANTAG_NONE
|
||||
var/directory_gendertag
|
||||
var/directory_sexualitytag
|
||||
|
||||
/mob/living/mind_initialize()
|
||||
. = ..()
|
||||
if (client?.prefs)
|
||||
mind.show_in_directory = client.prefs.show_in_directory
|
||||
mind.directory_tag = client.prefs.directory_tag
|
||||
mind.directory_erptag = client.prefs.directory_erptag
|
||||
mind.directory_ad = client.prefs.directory_ad
|
||||
//CHOMPEdit additions
|
||||
mind.vantag_preference = client.prefs.vantag_preference
|
||||
mind.directory_gendertag = client.prefs.directory_gendertag
|
||||
mind.directory_sexualitytag = client.prefs.directory_sexualitytag
|
||||
|
||||
@@ -220,7 +220,7 @@
|
||||
|
||||
/datum/supply_pack/eng/smbig
|
||||
name = "Supermatter Core"
|
||||
contains = list(/obj/machinery/power/supermatter)
|
||||
contains = list(/obj/machinery/power/supermatter/station) // CHOMPEdit: Station SM for Cargo Orders
|
||||
cost = 150
|
||||
containertype = /obj/structure/closet/crate/secure/phoron
|
||||
containername = "Supermatter crate (CAUTION)"
|
||||
|
||||
@@ -72,4 +72,19 @@
|
||||
/datum/category_item/underwear/bottom/thinpanties
|
||||
name = "Panties, Thin"
|
||||
icon_state = "thinpanties"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/bottom/neko
|
||||
name = "Panties, Neko"
|
||||
icon_state = "panties_neko"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/bottom/swimbottom
|
||||
name = "Swimming Bottoms"
|
||||
icon_state = "swimbottom"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/bottom/onepiece
|
||||
name = "Swimming One Piece"
|
||||
icon_state = "onepiece"
|
||||
has_color = TRUE
|
||||
@@ -188,4 +188,24 @@
|
||||
|
||||
/datum/category_item/underwear/socks/rippedpantyhose
|
||||
name = "Pantyhose, Ripped"
|
||||
icon_state = "rippedpantyhose"
|
||||
icon_state = "rippedpantyhose"
|
||||
|
||||
/datum/category_item/underwear/socks/stirrup
|
||||
name = "Normal, stirrup"
|
||||
icon_state = "socks_norm-stir"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/socks/stirrup_knee
|
||||
name = "Knee, stirrup"
|
||||
icon_state = "socks_knee-stir"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/socks/stirrup_thigh
|
||||
name = "Thigh, stirrup"
|
||||
icon_state = "socks_thigh-stir"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/socks/stirrup_thigh_black
|
||||
name = "Black Stirrup Stockings"
|
||||
icon_state = "leggings-stir-black"
|
||||
has_color = TRUE
|
||||
@@ -77,3 +77,22 @@
|
||||
icon_state = "onesleeve"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/top/neko
|
||||
name = "Neko bra"
|
||||
icon_state = "bra_neko"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/top/tape
|
||||
name = "Tape"
|
||||
icon_state = "pasties_alt"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/top/sarashi
|
||||
name = "Sarashi"
|
||||
icon_state = "bandages"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/top/swimtop
|
||||
name = "Swimming Top"
|
||||
icon_state = "swimtop"
|
||||
has_color = TRUE
|
||||
@@ -206,4 +206,24 @@
|
||||
/datum/category_item/underwear/undershirt/dress_shirt
|
||||
name = "Dress shirt, masculine"
|
||||
icon_state = "undershirt_dress"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/midriff
|
||||
name = "Tanktop, midriff"
|
||||
icon_state = "tank_midriff"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/midriffshort
|
||||
name = "Tanktop, midriff, short"
|
||||
icon_state = "tank_midriff_short"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/shibari
|
||||
name = "Shibari Binding"
|
||||
icon_state = "shibari"
|
||||
has_color = TRUE
|
||||
|
||||
/datum/category_item/underwear/undershirt/leotard
|
||||
name = "Leotard"
|
||||
icon_state = "leotard"
|
||||
has_color = TRUE
|
||||
@@ -70,6 +70,7 @@
|
||||
if(CLASS_MIDDLE) income = 1
|
||||
if(CLASS_LOWMID) income = 0.75
|
||||
if(CLASS_LOWER) income = 0.50
|
||||
if(CLASS_BROKE) income = 0 //VOREStation Add - Rent's not cheap
|
||||
|
||||
//give them an account in the station database
|
||||
var/money_amount = (rand(15,40) + rand(15,40)) * income * economic_modifier * ECO_MODIFIER //VOREStation Edit - Smoothed peaks, ECO_MODIFIER rather than per-species ones.
|
||||
@@ -186,4 +187,4 @@
|
||||
return TRUE
|
||||
if(brain_type in banned_job_species)
|
||||
return TRUE
|
||||
*/
|
||||
*/
|
||||
|
||||
@@ -84,6 +84,9 @@
|
||||
|
||||
var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles
|
||||
|
||||
var/datum/looping_sound/alarm/decompression_alarm/soundloop // CHOMPEdit: Looping Alarms
|
||||
var/atmoswarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
|
||||
/obj/machinery/alarm/nobreach
|
||||
breach_detection = 0
|
||||
|
||||
@@ -128,6 +131,7 @@
|
||||
if(alarm_area && alarm_area.master_air_alarm == src)
|
||||
alarm_area.master_air_alarm = null
|
||||
elect_master(exclude_self = TRUE)
|
||||
QDEL_NULL(soundloop) // CHOMPEdit: Looping Alarms
|
||||
return ..()
|
||||
|
||||
/obj/machinery/alarm/proc/offset_airalarm()
|
||||
@@ -165,6 +169,7 @@
|
||||
set_frequency(frequency)
|
||||
if(!master_is_operating())
|
||||
elect_master()
|
||||
soundloop = new(list(src), FALSE) // CHOMPEdit: Looping Alarms
|
||||
|
||||
/obj/machinery/alarm/process()
|
||||
if((stat & (NOPOWER|BROKEN)) || shorted)
|
||||
@@ -194,6 +199,13 @@
|
||||
mode = AALARM_MODE_FILL
|
||||
apply_mode()
|
||||
|
||||
if(alarm_area?.atmosalm || danger_level > 0) // CHOMPEdit: Looping Alarms (Trigger Decompression alarm here, on detection of any breach in the area)
|
||||
soundloop.start() // CHOMPEdit: Looping Alarms
|
||||
atmoswarn = TRUE // CHOMPEdit: Looping Alarms
|
||||
else if(danger_level == 0 && alarm_area?.atmosalm == 0) // CHOMPEdit: Looping Alarms (Cancel Decompression alarm here)
|
||||
soundloop.stop() // CHOMPEdit: Looping Alarms
|
||||
atmoswarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
|
||||
//atmos computer remote controll stuff
|
||||
switch(rcon_setting)
|
||||
if(RCON_NO)
|
||||
@@ -831,6 +843,12 @@
|
||||
..()
|
||||
spawn(rand(0,15))
|
||||
update_icon()
|
||||
// CHOMPEdit Start: Looping Alarms
|
||||
if(stat & (NOPOWER | BROKEN))
|
||||
soundloop.stop()
|
||||
else if(atmoswarn)
|
||||
soundloop.start()
|
||||
// CHOMPEdit End
|
||||
|
||||
// VOREStation Edit Start
|
||||
/obj/machinery/alarm/freezer
|
||||
@@ -845,14 +863,14 @@
|
||||
/obj/machinery/alarm/sifwilderness
|
||||
breach_detection = 0
|
||||
report_danger_level = 0
|
||||
|
||||
|
||||
/obj/machinery/alarm/sifwilderness/first_run()
|
||||
. = ..()
|
||||
|
||||
|
||||
TLV["oxygen"] = list(16, 17, 135, 140)
|
||||
TLV["pressure"] = list(0,ONE_ATMOSPHERE*0.10,ONE_ATMOSPHERE*1.50,ONE_ATMOSPHERE*1.60)
|
||||
TLV["temperature"] = list(T0C - 40, T0C - 31, T0C + 40, T0C + 120)
|
||||
// CHOMPEdit END
|
||||
#undef LOAD_TLV_VALUES
|
||||
#undef TEST_TLV_VALUES
|
||||
#undef DECLARE_TLV_VALUES
|
||||
#undef DECLARE_TLV_VALUES
|
||||
|
||||
@@ -26,6 +26,16 @@ FIRE ALARM
|
||||
circuit = /obj/item/weapon/circuitboard/firealarm
|
||||
var/alarms_hidden = FALSE //If the alarms from this machine are visible on consoles
|
||||
|
||||
var/datum/looping_sound/alarm/fire_alarm/soundloop // CHOMPEdit: Soundloops
|
||||
var/datum/looping_sound/alarm/engineering_alarm/engalarm // CHOMPEdit: Soundloops
|
||||
var/datum/looping_sound/alarm/sm_critical_alarm/critalarm // CHOMPEdit: Soundloops
|
||||
var/datum/looping_sound/alarm/sm_causality_alarm/causality // CHOMPEdit: Soundloops
|
||||
|
||||
var/firewarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
var/engwarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
var/critwarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
var/causalitywarn = FALSE // CHOMPEdit: Looping Alarms
|
||||
|
||||
/obj/machinery/firealarm/alarms_hidden
|
||||
alarms_hidden = TRUE
|
||||
|
||||
@@ -51,6 +61,18 @@ FIRE ALARM
|
||||
if(z in using_map.contact_levels)
|
||||
set_security_level(security_level ? get_security_level() : "green")
|
||||
|
||||
soundloop = new(list(src), FALSE) // CHOMPEdit: Create soundloop
|
||||
engalarm = new(list(src), FALSE) // CHOMPEdit: Create soundloop
|
||||
critalarm = new(list(src), FALSE) // CHOMPEdit: Create soundloop
|
||||
causality = new(list(src), FALSE) // CHOMPEdit: Create soundloop
|
||||
|
||||
/obj/machinery/firealarm/Destroy()
|
||||
QDEL_NULL(soundloop) // CHOMPEdit: Just clearing the loop here
|
||||
QDEL_NULL(engalarm) // CHOMPEdit: Clearing the loop here too
|
||||
QDEL_NULL(critalarm) // CHOMPEdit: Clearing the loop here too
|
||||
QDEL_NULL(causality) // CHOMPEdit: Clearing the loop here too
|
||||
return ..()
|
||||
|
||||
/obj/machinery/firealarm/proc/offset_alarm()
|
||||
pixel_x = (dir & 3) ? 0 : (dir == 4 ? 26 : -26)
|
||||
pixel_y = (dir & 3) ? (dir == 1 ? -26 : 26) : 0
|
||||
@@ -88,14 +110,14 @@ FIRE ALARM
|
||||
if("blue") set_light(l_range = 2, l_power = 0.25, l_color = "#1024A9")
|
||||
if("red") set_light(l_range = 4, l_power = 0.9, l_color = "#ff0000")
|
||||
if("delta") set_light(l_range = 4, l_power = 0.9, l_color = "#FF6633")
|
||||
|
||||
|
||||
. += mutable_appearance(icon, fire_state)
|
||||
. += emissive_appearance(icon, fire_state)
|
||||
|
||||
|
||||
if(seclevel)
|
||||
. += mutable_appearance(icon, "overlay_[seclevel]")
|
||||
. += emissive_appearance(icon, "overlay_[seclevel]")
|
||||
|
||||
|
||||
add_overlay(.)
|
||||
|
||||
/obj/machinery/firealarm/fire_act(datum/gas_mixture/air, temperature, volume)
|
||||
@@ -159,6 +181,22 @@ FIRE ALARM
|
||||
..()
|
||||
spawn(rand(0,15))
|
||||
update_icon()
|
||||
// CHOMPEdit Start: Looping Red/Violet/Orange Alarms
|
||||
if(stat & (NOPOWER | BROKEN)) // Are we broken or out of power?
|
||||
soundloop.stop() // Stop the loop once we're out of power
|
||||
engalarm.stop() // Stop these bc we're out of power
|
||||
critalarm.stop() // Stop these, out of power
|
||||
causality.stop() // etc etc
|
||||
else
|
||||
if(firewarn)
|
||||
soundloop.start()
|
||||
if(engwarn)
|
||||
engalarm.start()
|
||||
if(critwarn)
|
||||
critalarm.start()
|
||||
if(causalitywarn)
|
||||
causality.start()
|
||||
// CHOMPEdit End
|
||||
|
||||
/obj/machinery/firealarm/attack_hand(mob/user as mob)
|
||||
if(user.stat || stat & (NOPOWER | BROKEN))
|
||||
@@ -177,6 +215,8 @@ FIRE ALARM
|
||||
var/area/area = get_area(src)
|
||||
for(var/obj/machinery/firealarm/FA in area)
|
||||
fire_alarm.clearAlarm(src.loc, FA)
|
||||
FA.soundloop.stop() // CHOMPEdit: Soundloop
|
||||
FA.firewarn = FALSE // CHOMPEdit: Soundloop Fix
|
||||
update_icon()
|
||||
if(user)
|
||||
log_game("[user] reset a fire alarm at [COORD(src)]")
|
||||
@@ -187,8 +227,10 @@ FIRE ALARM
|
||||
var/area/area = get_area(src)
|
||||
for(var/obj/machinery/firealarm/FA in area)
|
||||
fire_alarm.triggerAlarm(loc, FA, duration, hidden = alarms_hidden)
|
||||
FA.soundloop.start() // CHOMPEdit: Soundloop
|
||||
FA.firewarn = TRUE // CHOMPEdit: Soundloop Fix
|
||||
update_icon()
|
||||
playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS)
|
||||
// playsound(src, 'sound/machines/airalarm.ogg', 25, 0, 4, volume_channel = VOLUME_CHANNEL_ALARMS) // CHOMPEdit: Disable as per soundloop
|
||||
if(user)
|
||||
log_game("[user] triggered a fire alarm at [COORD(src)]")
|
||||
|
||||
|
||||
@@ -202,6 +202,12 @@
|
||||
frame_class = FRAME_CLASS_MACHINE
|
||||
frame_size = 3
|
||||
|
||||
/datum/frame/frame_types/injector_maker
|
||||
name = "Ready-to-Use Medicine 3000"
|
||||
frame_class = FRAME_CLASS_MACHINE
|
||||
circuit = /obj/machinery/atmospheric_field_generator
|
||||
frame_size = 3
|
||||
|
||||
//////////////////////////////
|
||||
// Frame Object (Structure)
|
||||
//////////////////////////////
|
||||
|
||||
@@ -7,7 +7,6 @@
|
||||
maint_access = 0
|
||||
//add_req_access = 0
|
||||
//operation_req_access = list(access_hos)
|
||||
damage_absorption = list("brute"=0.7,"fire"=1,"bullet"=0.7,"laser"=0.85,"energy"=1,"bomb"=0.8)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
|
||||
max_hull_equip = 2
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
health = 300
|
||||
maxhealth = 300 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 20
|
||||
damage_absorption = list("brute"=0.5,"fire"=1.1,"bullet"=0.65,"laser"=0.85,"energy"=0.9,"bomb"=0.8)
|
||||
max_temperature = 30000
|
||||
infra_luminosity = 8
|
||||
force = 40
|
||||
@@ -85,4 +84,4 @@
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 250 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
|
||||
@@ -11,8 +11,7 @@
|
||||
maxhealth = 5000
|
||||
opacity = 0 // Because there's big tall legs to look through. Also it looks fucky if this is set to 1.
|
||||
deflect_chance = 50
|
||||
damage_absorption = list("brute"=0.1,"fire"=0.7,"bullet"=0.1,"laser"=0.6,"energy"=0.7,"bomb"=0.7) //values show how much damage will pass through, not how much will be absorbed.
|
||||
max_temperature = 35000
|
||||
max_temperature = 35000 //Just a bit better than the Durand.
|
||||
infra_luminosity = 3
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gorilla
|
||||
add_req_access = 0
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
health = 250
|
||||
maxhealth = 250 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 15
|
||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 25000
|
||||
infra_luminosity = 6
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gygax
|
||||
@@ -55,7 +54,6 @@
|
||||
health = 400
|
||||
maxhealth = 400
|
||||
deflect_chance = 25
|
||||
damage_absorption = list("brute"=0.6,"fire"=0.8,"bullet"=0.6,"laser"=0.5,"energy"=0.65,"bomb"=0.8)
|
||||
max_temperature = 45000
|
||||
overload_coeff = 1
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gygax/dark
|
||||
@@ -92,7 +90,6 @@
|
||||
maxhealth = 150
|
||||
deflect_chance = 20
|
||||
step_in = 2
|
||||
damage_absorption = list("brute"=0.9,"fire"=1,"bullet"=0.9,"laser"=0.8,"energy"=0.9,"bomb"=1)
|
||||
max_temperature = 20000
|
||||
overload_coeff = 1
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/gygax/serenity
|
||||
@@ -148,4 +145,4 @@
|
||||
..()
|
||||
health = 25
|
||||
maxhealth = 250 //Just slightly worse.
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
cell.charge = rand(0, (cell.charge/2))
|
||||
|
||||
@@ -8,7 +8,6 @@
|
||||
health = 350
|
||||
maxhealth = 350 //Don't forget to update the /old variant if you change this number.
|
||||
deflect_chance = 25
|
||||
damage_absorption = list("brute"=0.5,"fire"=0.7,"bullet"=0.45,"laser"=0.6,"energy"=0.7,"bomb"=0.7)
|
||||
max_temperature = 60000
|
||||
infra_luminosity = 3
|
||||
operation_req_access = list(access_cent_specops)
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
health = 250 //God this is low //Chompedit, increased it a bit.
|
||||
maxhealth = 250 //Don't forget to update the /old variant if you change this number. //Chompedit, increased health.
|
||||
deflect_chance = 30
|
||||
damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
|
||||
max_temperature = 25000
|
||||
infra_luminosity = 3
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/phazon
|
||||
@@ -39,6 +38,7 @@
|
||||
cloak_possible = FALSE //Chompedit Cloaking is too much for something like this, and is moderately useless anyway.
|
||||
phasing_possible = TRUE
|
||||
switch_dmg_type_possible = TRUE
|
||||
var/list/inherent_damage_absorption = list("brute"=0.7,"fire"=0.7,"bullet"=0.7,"laser"=0.7,"energy"=0.7,"bomb"=0.7)
|
||||
|
||||
/obj/mecha/combat/phazon/equipped/Initialize()
|
||||
. = ..()
|
||||
@@ -93,7 +93,7 @@
|
||||
health = 350
|
||||
maxhealth = 350
|
||||
deflect_chance = 30
|
||||
damage_absorption = list("brute"=0.6,"fire"=0.7,"bullet"=0.7,"laser"=0.9,"energy"=0.7,"bomb"=0.5)
|
||||
inherent_damage_absorption = list("brute"=0.6,"fire"=0.7,"bullet"=0.7,"laser"=0.9,"energy"=0.7,"bomb"=0.5)
|
||||
max_temperature = 10000
|
||||
infra_luminosity = 3
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/janus
|
||||
@@ -126,7 +126,7 @@
|
||||
src.visible_message("<span class='alien'>The [src.name] absorbs the incoming projectile's force, negating it!</span>")
|
||||
src.log_append_to_last("Armor negated.")
|
||||
return
|
||||
else if((Proj.damage && !Proj.nodamage) && istype(Proj, /obj/item/projectile/beam) && prob(max(1, (50 - round((Proj.damage / 2) * damage_absorption["laser"])) * (1 - (Proj.armor_penetration / 100))))) // Base 50% chance to deflect a beam,lowered by half the beam's damage scaled to laser absorption, then multiplied by the remaining percent of non-penetrated armor, with a minimum chance of 1%.
|
||||
else if((Proj.damage && !Proj.nodamage) && istype(Proj, /obj/item/projectile/beam) && prob(max(1, (50 - round((Proj.damage / 2) * inherent_damage_absorption["laser"])) * (1 - (Proj.armor_penetration / 100))))) // Base 50% chance to deflect a beam,lowered by half the beam's damage scaled to laser absorption, then multiplied by the remaining percent of non-penetrated armor, with a minimum chance of 1%.
|
||||
src.occupant_message("<span class='alien'>The armor reflects the incoming beam, negating it!</span>")
|
||||
src.visible_message("<span class='alien'>The [src.name] reflects the incoming beam, negating it!</span>")
|
||||
src.log_append_to_last("Armor reflected.")
|
||||
@@ -135,7 +135,7 @@
|
||||
..()
|
||||
|
||||
/obj/mecha/combat/phazon/janus/dynattackby(obj/item/weapon/W as obj, mob/user as mob)
|
||||
if(prob(max(1, (50 - round((W.force / 2) * damage_absorption["brute"])) * (1 - (W.armor_penetration / 100)))))
|
||||
if(prob(max(1, (50 - round((W.force / 2) * inherent_damage_absorption["brute"])) * (1 - (W.armor_penetration / 100)))))
|
||||
src.occupant_message("<span class='alien'>The armor absorbs the incoming attack's force, negating it!</span>")
|
||||
src.visible_message("<span class='alien'>The [src.name] absorbs the incoming attack's force, negating it!</span>")
|
||||
src.log_append_to_last("Armor absorbed.")
|
||||
|
||||
@@ -10,11 +10,10 @@
|
||||
health = 250
|
||||
maxhealth = 250
|
||||
deflect_chance = 10
|
||||
damage_absorption = list("brute"=0.8,"fire"=1,"bullet"=0.8,"laser"=0.8,"energy"=1,"bomb"=1)
|
||||
max_temperature = 20000
|
||||
infra_luminosity = 6
|
||||
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/scarab
|
||||
|
||||
max_hull_equip = 1
|
||||
max_weapon_equip = 1
|
||||
max_weapon_equip = 1
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
required_type = list(/obj/mecha/combat)
|
||||
|
||||
damage_minimum = 15
|
||||
minimum_penetration = 25
|
||||
minimum_penetration = 20 //chompedit making this less OP, was 25, is now 20
|
||||
|
||||
damage_absorption = list(
|
||||
"brute"=0.5,
|
||||
@@ -216,9 +216,9 @@
|
||||
/obj/item/mecha_parts/component/armor/alien
|
||||
name = "strange mecha plating"
|
||||
step_delay = 2
|
||||
//Chompedit start This armour is dogshit and needs this to improve it.
|
||||
//Chompedit start Trying to make this armor decent, without making it OP.
|
||||
damage_minimum = 12
|
||||
minimum_penetration = 15
|
||||
minimum_penetration = 10
|
||||
//Chompedit end
|
||||
|
||||
damage_absorption = list(
|
||||
|
||||
@@ -44,17 +44,6 @@
|
||||
var/health = 300 //Health is health
|
||||
var/maxhealth = 300 //Maxhealth is maxhealth.
|
||||
var/deflect_chance = 10 //Chance to deflect the incoming projectiles, hits, or lesser the effect of ex_act.
|
||||
//the values in this list show how much damage will pass through, not how much will be absorbed.
|
||||
var/list/damage_absorption = list(
|
||||
"brute"=0.8,
|
||||
"fire"=1.2,
|
||||
"bullet"=0.9,
|
||||
"laser"=1,
|
||||
"energy"=1,
|
||||
"bomb"=1,
|
||||
"bio"=1,
|
||||
"rad"=1
|
||||
)
|
||||
|
||||
var/damage_minimum = 10 //Incoming damage lower than this won't actually deal damage. Scrapes shouldn't be a real thing.
|
||||
var/minimum_penetration = 15 //Incoming damage won't be fully applied if you don't have at least 20. Almost all AP clears this.
|
||||
@@ -1043,15 +1032,8 @@
|
||||
|
||||
/obj/mecha/proc/get_damage_absorption()
|
||||
var/obj/item/mecha_parts/component/armor/AC = internal_components[MECH_ARMOR]
|
||||
|
||||
if(!istype(AC))
|
||||
return
|
||||
|
||||
else
|
||||
if(AC.get_efficiency() > 0.25)
|
||||
return AC.damage_absorption
|
||||
|
||||
return
|
||||
if(istype(AC) && AC.get_efficiency() > 0.25)
|
||||
return AC.damage_absorption
|
||||
|
||||
/obj/mecha/proc/absorbDamage(damage,damage_type)
|
||||
return call((proc_res["dynabsorbdamage"]||src), "dynabsorbdamage")(damage,damage_type)
|
||||
|
||||
@@ -27,7 +27,6 @@
|
||||
max_micro_weapon_equip = 1
|
||||
//add_req_access = 0
|
||||
//operation_req_access = list(access_hos)
|
||||
damage_absorption = list("brute"=1,"fire"=1,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1)
|
||||
var/am = "d3c2fbcadca903a41161ccc9df9cf948"
|
||||
damage_minimum = 0 //Incoming damage lower than this won't actually deal damage. Scrapes shouldn't be a real thing.
|
||||
minimum_penetration = 0 //Incoming damage won't be fully applied if you don't have at least 20. Almost all AP clears this.
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
health = 150
|
||||
step_energy_drain = 4 // less efficient than base micromech, but still a micromech.
|
||||
deflect_chance = 10
|
||||
damage_absorption = list("brute"=0.75,"fire"=1,"bullet"=0.8,"laser"=0.7,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 15000
|
||||
infra_luminosity = 6
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/polecat
|
||||
@@ -46,7 +45,6 @@
|
||||
dir_in = 2 //Facing south.
|
||||
health = 100
|
||||
deflect_chance = 5
|
||||
damage_absorption = list("brute"=1,"fire"=1,"bullet"=0.9,"laser"=0.8,"energy"=0.85,"bomb"=1)
|
||||
max_temperature = 5000
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/sec/weasel
|
||||
internal_damage_threshold = 20
|
||||
|
||||
@@ -9,7 +9,6 @@
|
||||
dir_in = 2 //Facing south.
|
||||
health = 100
|
||||
deflect_chance = 10
|
||||
damage_absorption = list("brute"=0.9,"fire"=1,"bullet"=1,"laser"=1,"energy"=1,"bomb"=1)
|
||||
max_temperature = 15000
|
||||
infra_luminosity = 6
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/micro/utility/gopher
|
||||
|
||||
@@ -59,7 +59,6 @@
|
||||
max_temperature = 65000
|
||||
health = 250
|
||||
lights_power = 8
|
||||
damage_absorption = list("fire"=0.5,"bullet"=0.8,"bomb"=0.5)
|
||||
wreckage = /obj/effect/decal/mecha_wreckage/ripley/firefighter
|
||||
max_hull_equip = 2
|
||||
max_weapon_equip = 0
|
||||
|
||||
@@ -132,15 +132,15 @@
|
||||
qdel(src)
|
||||
|
||||
/obj/effect/spider/eggcluster/small
|
||||
spiders_min = 1
|
||||
spiders_max = 3
|
||||
spiders_min = 2 //CHOMP Edit
|
||||
spiders_max = 6 //CHOMP Edit
|
||||
|
||||
/obj/effect/spider/eggcluster/small/frost
|
||||
spider_type = /obj/effect/spider/spiderling/frost
|
||||
|
||||
/obj/effect/spider/eggcluster/royal
|
||||
spiders_min = 2
|
||||
spiders_max = 5
|
||||
spiders_max = 6 //CHOMP Edit
|
||||
spider_type = /obj/effect/spider/spiderling/varied
|
||||
|
||||
/obj/effect/spider/spiderling
|
||||
|
||||
@@ -509,17 +509,22 @@ var/list/global/slot_flags_enumeration = list(
|
||||
return
|
||||
if(!usr.canmove || usr.stat || usr.restrained() || !Adjacent(usr))
|
||||
return
|
||||
if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
|
||||
if(isanimal(usr)) //VOREStation Edit Start - Allows simple mobs with hands to use the pickup verb
|
||||
var/mob/living/simple_mob/s = usr
|
||||
if(!s.has_hands)
|
||||
to_chat(usr, "<span class='warning'>You can't pick things up!</span>")
|
||||
return
|
||||
else if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain
|
||||
to_chat(usr, "<span class='warning'>You can't pick things up!</span>")
|
||||
return
|
||||
var/mob/living/carbon/C = usr
|
||||
var/mob/living/L = usr
|
||||
if( usr.stat || usr.restrained() )//Is not asleep/dead and is not restrained
|
||||
to_chat(usr, "<span class='warning'>You can't pick things up!</span>")
|
||||
return
|
||||
if(src.anchored) //Object isn't anchored
|
||||
to_chat(usr, "<span class='warning'>You can't pick that up!</span>")
|
||||
return
|
||||
if(C.get_active_hand()) //Hand is not full
|
||||
if(L.get_active_hand()) //Hand is not full //VOREStation Edit End
|
||||
to_chat(usr, "<span class='warning'>Your hand is full.</span>")
|
||||
return
|
||||
if(!istype(src.loc, /turf)) //Object is on a turf
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
name = "power sink"
|
||||
desc = "A nulling power sink which drains energy from electrical systems."
|
||||
icon_state = "powersink0"
|
||||
icon = 'icons/obj/device.dmi'
|
||||
w_class = ITEMSIZE_LARGE
|
||||
throwforce = 5
|
||||
throw_speed = 1
|
||||
|
||||
@@ -88,8 +88,18 @@
|
||||
|
||||
/obj/item/device/taperecorder/hear_talk(mob/M, list/message_pieces, verb)
|
||||
var/msg = multilingual_to_message(message_pieces, requires_machine_understands = TRUE, with_capitalization = TRUE)
|
||||
//START OF CHOMPEDIT
|
||||
var/voice = "Unknown"
|
||||
if (M.type == /mob/living/carbon/human)
|
||||
{
|
||||
var/mob/living/carbon/human/H = M
|
||||
voice = H.voice
|
||||
}
|
||||
else
|
||||
voice = M.name
|
||||
//END OF CHOMPEDIT
|
||||
if(mytape && recording)
|
||||
mytape.record_speech("[M.name] [verb], \"[msg]\"")
|
||||
mytape.record_speech("[voice] [verb], \"[msg]\"") //CHOMP Edit
|
||||
|
||||
|
||||
/obj/item/device/taperecorder/see_emote(mob/M as mob, text, var/emote_type)
|
||||
@@ -432,4 +442,4 @@
|
||||
|
||||
//Random colour tapes
|
||||
/obj/item/device/tape/random/New()
|
||||
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
|
||||
icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]"
|
||||
|
||||
@@ -2,6 +2,17 @@
|
||||
#error T_BOARD macro is not defined but we need it!
|
||||
#endif
|
||||
|
||||
/obj/item/weapon/circuitboard/get_examine_desc()
|
||||
. = ..()
|
||||
if(LAZYLEN(req_components))
|
||||
var/list/nice_list = list()
|
||||
for(var/B in req_components)
|
||||
var/atom/A = B
|
||||
if(!ispath(A))
|
||||
continue
|
||||
nice_list += list("[req_components[A]] [initial(A.name)]")
|
||||
. += "Required components: [english_list(nice_list)]."
|
||||
|
||||
// VOREStation specific circuit boards!
|
||||
|
||||
// Board for the parts lathe in partslathe.dm
|
||||
|
||||
@@ -270,4 +270,17 @@
|
||||
/obj/item/weapon/stock_parts/micro_laser/high = 2, //field emitters
|
||||
/obj/item/weapon/stock_parts/scanning_module = 1, //atmosphere sensor
|
||||
/obj/item/weapon/stock_parts/capacitor/adv = 1, //for the JUICE
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
/obj/item/stack/cable_coil = 10)
|
||||
|
||||
|
||||
/obj/item/weapon/circuitboard/injector_maker
|
||||
name = T_BOARD("Ready-to-Use Medicine 3000")
|
||||
build_path = /obj/machinery/injector_maker
|
||||
board_type = new /datum/frame/frame_types/injector_maker
|
||||
origin_tech = list(TECH_BIO = 3, TECH_ENGINEERING = 2, TECH_MATERIAL = 2)
|
||||
req_components = list(
|
||||
/obj/item/weapon/stock_parts/matter_bin = 2,
|
||||
/obj/item/weapon/stock_parts/manipulator = 1,
|
||||
/obj/item/weapon/stock_parts/micro_laser = 1,
|
||||
/obj/item/weapon/stock_parts/console_screen = 1
|
||||
)
|
||||
|
||||
@@ -54,7 +54,7 @@
|
||||
wet()
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You clean \the [target.name].</span>")
|
||||
target.clean_blood()
|
||||
target.clean_blood(TRUE)
|
||||
return
|
||||
|
||||
//attack_as_weapon
|
||||
|
||||
@@ -397,6 +397,13 @@
|
||||
if(ishuman(usr) || isrobot(usr))
|
||||
add_fingerprint(usr)
|
||||
toggle(usr)
|
||||
else if(isanimal(usr)) //VOREStation Addition Start
|
||||
var/mob/living/simple_mob/s = usr
|
||||
if(s.has_hands)
|
||||
add_fingerprint(usr)
|
||||
toggle(usr)
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>") //VOREStation Addition End
|
||||
else
|
||||
to_chat(usr, "<span class='warning'>This mob type can't use this verb.</span>")
|
||||
|
||||
|
||||
@@ -155,6 +155,7 @@
|
||||
/obj/item/weapon/gun/projectile/revolvershotgun,
|
||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||
/obj/item/ammo_magazine/m12gdrumjack/beanbag,
|
||||
/obj/item/device/ticket_printer, //CHOMPStation addition
|
||||
/obj/item/device/retail_scanner/security //CHOMPStation addition
|
||||
)
|
||||
|
||||
@@ -198,7 +199,8 @@
|
||||
/obj/item/device/flashlight/maglight,
|
||||
/obj/item/device/holowarrant, //CHOMPStation addition
|
||||
/obj/item/device/retail_scanner/security, //CHOMPStation addition
|
||||
/obj/item/clothing/glasses/hud/security //CHOMPStation addition
|
||||
/obj/item/clothing/glasses/hud/security, //CHOMPStation addition
|
||||
/obj/item/device/ticket_printer //CHOMPStation addition
|
||||
)
|
||||
|
||||
/obj/structure/closet/secure_closet/security/Initialize()
|
||||
|
||||
@@ -20,8 +20,10 @@
|
||||
/obj/item/weapon/storage/belt/security,
|
||||
/obj/item/clothing/accessory/holster/waist,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
|
||||
// /obj/item/clothing/suit/storage/hooded/wintercoat/security, //CHOMP Remove
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security/hos,
|
||||
/obj/item/clothing/shoes/boots/winter/security,
|
||||
//CHOMP Add ^
|
||||
/obj/item/clothing/mask/gas/half)
|
||||
|
||||
/obj/structure/closet/secure_closet/hos2
|
||||
@@ -46,9 +48,10 @@
|
||||
/obj/item/weapon/gun/energy/x01,
|
||||
/obj/item/weapon/cell/device/weapon,
|
||||
/obj/item/weapon/melee/telebaton,
|
||||
/obj/item/clothing/head/beret/sec/corporate/hos,
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/security,
|
||||
/obj/item/clothing/shoes/boots/winter/security,
|
||||
// /obj/item/clothing/head/beret/sec/corporate/hos, //CHOMP Remove
|
||||
// /obj/item/clothing/suit/storage/hooded/wintercoat/security, //CHOMP Remove
|
||||
// /obj/item/clothing/shoes/boots/winter/security, //CHOMP Remove
|
||||
/obj/item/device/ticket_printer, //CHOMP Add
|
||||
/obj/item/device/flashlight/maglight)
|
||||
|
||||
//Custom NT Security Lockers, Only found at central command
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
var/oreAmount = 7
|
||||
var/knock_sound = 'sound/machines/door/knock_glass.ogg'
|
||||
var/knock_hammer_sound = 'sound/weapons/sonic_jackhammer.ogg'
|
||||
|
||||
|
||||
/obj/structure/simple_door/fire_act(datum/gas_mixture/air, exposed_temperature, exposed_volume)
|
||||
TemperatureAct(exposed_temperature)
|
||||
|
||||
@@ -173,7 +173,7 @@
|
||||
return
|
||||
|
||||
/obj/structure/simple_door/bullet_act(var/obj/item/projectile/Proj)
|
||||
hardness -= Proj.force/10
|
||||
take_damage(Proj.damage/10)
|
||||
CheckHardness()
|
||||
|
||||
/obj/structure/simple_door/take_damage(var/damage)
|
||||
|
||||
@@ -194,7 +194,7 @@
|
||||
wash(M)
|
||||
process_heat(M)
|
||||
for (var/atom/movable/G in src.loc)
|
||||
G.clean_blood()
|
||||
G.clean_blood(TRUE)
|
||||
else
|
||||
soundloop.stop()
|
||||
|
||||
|
||||
@@ -10,4 +10,4 @@
|
||||
icon_state = "wood_stairs2"
|
||||
|
||||
/obj/effect/floor_decal/stairs/dark_stairs
|
||||
icon_state = "dark_stairs"
|
||||
icon_state = "dark_stairs"
|
||||
|
||||
@@ -18,3 +18,4 @@
|
||||
|
||||
/obj/effect/floor_decal/snow/floor/pointy
|
||||
icon_state = "snowfloorpointy"
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ var/world_time_season
|
||||
var/tree_types = list()
|
||||
var/snow_chance = 10
|
||||
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/Initialize()
|
||||
/turf/simulated/floor/outdoors/grass/seasonal/Initialize() //There are A LOT of chompedits here, I guess.
|
||||
|
||||
switch(world_time_season)
|
||||
if("spring")
|
||||
@@ -41,10 +41,10 @@ var/world_time_season
|
||||
/obj/structure/flora/tree/jungle
|
||||
)
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10, //CHOMP Edit
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1, //CHOMP Edit
|
||||
/mob/living/simple_mob/vore/redpanda = 40,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2, //CHOMP Edit
|
||||
/mob/living/simple_mob/vore/sheep = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
@@ -52,7 +52,12 @@ var/world_time_season
|
||||
/mob/living/simple_mob/vore/leopardmander = 2,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly = 1,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20,
|
||||
/mob/living/simple_mob/vore/bee = 20,
|
||||
/mob/living/simple_mob/vore/horse/big = 5,
|
||||
/mob/living/simple_mob/animal/wolf = 5,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf = 1,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf/dog = 1
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
@@ -77,8 +82,8 @@ var/world_time_season
|
||||
animal_types = list(
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 40,
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2,
|
||||
/mob/living/simple_mob/vore/redpanda = 40, //CHOMP Edit
|
||||
/mob/living/simple_mob/vore/redpanda/fae = 2, //CHOMP Edit
|
||||
/mob/living/simple_mob/vore/sheep = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/black = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
@@ -86,7 +91,13 @@ var/world_time_season
|
||||
/mob/living/simple_mob/vore/leopardmander = 2,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/bigdragon/friendly = 1,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20,
|
||||
/mob/living/simple_mob/vore/bee = 5,
|
||||
/mob/living/simple_mob/vore/horse/big = 5,
|
||||
/mob/living/simple_mob/vore/pakkun = 2,
|
||||
/mob/living/simple_mob/vore/fennix = 1,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf/dog = 1,
|
||||
/mob/living/simple_mob/animal/passive/bird/parrot = 1
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
@@ -108,7 +119,11 @@ var/world_time_season
|
||||
/mob/living/simple_mob/vore/rabbit/white = 20,
|
||||
/mob/living/simple_mob/vore/rabbit/brown = 20,
|
||||
/mob/living/simple_mob/vore/horse/big = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20
|
||||
/mob/living/simple_mob/vore/alienanimals/dustjumper = 20,
|
||||
/mob/living/simple_mob/vore/horse/big = 1,
|
||||
/mob/living/simple_mob/animal/wolf = 1,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf = 1,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf/dog = 1
|
||||
)
|
||||
grass_types = list(
|
||||
/obj/structure/flora/ausbushes/sparsegrass,
|
||||
@@ -129,7 +144,14 @@ var/world_time_season
|
||||
/mob/living/simple_mob/vore/rabbit/white = 40,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi = 10,
|
||||
/mob/living/simple_mob/vore/alienanimals/teppi/mutant = 1,
|
||||
/mob/living/simple_mob/vore/redpanda = 10
|
||||
/mob/living/simple_mob/vore/redpanda = 10,
|
||||
/mob/living/simple_mob/animal/wolf = 10,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf = 1,
|
||||
/mob/living/simple_mob/animal/wolf/direwolf/dog = 1,
|
||||
/mob/living/simple_mob/otie/friendly = 2,
|
||||
/mob/living/simple_mob/otie/friendly/chubby = 1,
|
||||
/mob/living/simple_mob/otie/red/friendly = 1,
|
||||
/mob/living/simple_mob/otie/red/chubby = 1
|
||||
)
|
||||
if(prob(snow_chance))
|
||||
chill()
|
||||
|
||||
@@ -1,9 +1,12 @@
|
||||
var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9")
|
||||
|
||||
/turf/simulated/floor/outdoors/newdirt/attack_hand(mob/user)
|
||||
if(user.pulling)
|
||||
return ..()
|
||||
var/static/list/has_rocks = list("dirt5", "dirt6", "dirt7", "dirt8", "dirt9")
|
||||
if(!Adjacent(user))
|
||||
return ..()
|
||||
if(user.a_intent != I_HELP)
|
||||
return ..()
|
||||
if(icon_state in has_rocks)
|
||||
user.visible_message("[user] loosens rocks from \the [src]...", "You loosen rocks from \the [src]...")
|
||||
if(do_after(user, 5 SECONDS, exclusive = TASK_USER_EXCLUSIVE))
|
||||
@@ -76,4 +79,4 @@
|
||||
S.pixel_y = rand(-6,6)
|
||||
sticks = FALSE
|
||||
else
|
||||
to_chat(user, "<span class='notice'>You don't see any loose sticks...</span>")
|
||||
to_chat(user, "<span class='notice'>You don't see any loose sticks...</span>")
|
||||
|
||||
+26
-1
@@ -41,6 +41,13 @@
|
||||
src.update_status()
|
||||
setup_season() //VOREStation Addition
|
||||
|
||||
// CHOMPStation Addition: Spaceman DMM Debugging
|
||||
var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
|
||||
if (debug_server)
|
||||
call(debug_server, "auxtools_init")()
|
||||
enable_debugging()
|
||||
// CHOMPStation Add End
|
||||
|
||||
. = ..()
|
||||
|
||||
#if UNIT_TEST
|
||||
@@ -597,7 +604,7 @@ var/failed_old_db_connections = 0
|
||||
if(num_tries==5)
|
||||
log_admin("ERROR TRYING TO CLEAR erro_attacklog")
|
||||
qdel(query_truncate2)
|
||||
else
|
||||
else
|
||||
to_world_log("Feedback database connection failed.")
|
||||
//CHOMPEdit End
|
||||
return 1
|
||||
@@ -775,3 +782,21 @@ var/global/game_id = null
|
||||
game_id = "[c[(t % l) + 1]][game_id]"
|
||||
t = round(t / l)
|
||||
return 1
|
||||
|
||||
// CHOMPStation Add: Spaceman DMM Debugger
|
||||
/proc/auxtools_stack_trace(msg)
|
||||
CRASH(msg)
|
||||
|
||||
/proc/auxtools_expr_stub()
|
||||
CRASH("auxtools not loaded")
|
||||
|
||||
/proc/enable_debugging(mode, port)
|
||||
CRASH("auxtools not loaded")
|
||||
|
||||
/world/Del()
|
||||
var/debug_server = world.GetConfig("env", "AUXTOOLS_DEBUG_DLL")
|
||||
if (debug_server)
|
||||
call(debug_server, "auxtools_shutdown")()
|
||||
. = ..()
|
||||
|
||||
// CHOMPStation Add End: Spaceman DMM Debugger
|
||||
|
||||
@@ -145,7 +145,6 @@ var/list/robot_module_types = list(
|
||||
"Miner", "Janitor", "Service", "Clerical", "Security",
|
||||
"Research", "Medihound", "K9", "Janihound", "Sci-borg", "Pupdozer",
|
||||
"Service-Hound", "BoozeHound", "KMine", "TraumaHound"
|
||||
, "UnityHound", "Honk-Hound" // CHOMPEdit -- Adds the UnityHound drone to the list.
|
||||
)
|
||||
// List of modules added during code red
|
||||
var/list/emergency_module_types = list(
|
||||
|
||||
@@ -283,7 +283,8 @@
|
||||
|
||||
output += "<td width='65%' align='center' bgcolor='#f9f9f9'>"
|
||||
|
||||
output += "<form method='GET' action='?src=\ref[src]'><b>Add custom ban:</b> (ONLY use this if you can't ban through any other method)"
|
||||
output += "<form method='GET' action='?src=\ref[src]'>[HrefTokenFormField()]"
|
||||
output += "<b>Add custom ban:</b> (ONLY use this if you can't ban through any other method)"
|
||||
output += "<input type='hidden' name='src' value='\ref[src]'>"
|
||||
output += "<table width='100%'><tr>"
|
||||
output += "<td width='50%' align='right'><b>Ban type:</b><select name='dbbanaddtype'>"
|
||||
@@ -318,7 +319,8 @@
|
||||
output += "</tr>"
|
||||
output += "</table>"
|
||||
|
||||
output += "<form method='GET' action='?src=\ref[src]'><table width='60%'><tr><td colspan='2' align='left'><b>Search:</b>"
|
||||
output += "<form method='GET' action='?src=\ref[src]'>[HrefTokenFormField()]"
|
||||
output += "<table width='60%'><tr><td colspan='2' align='left'><b>Search:</b>"
|
||||
output += "<input type='hidden' name='src' value='\ref[src]'></td></tr>"
|
||||
output += "<tr><td width='50%' align='right'><b>Ckey:</b> <input type='text' name='dbsearchckey' value='[playerckey]'></td>"
|
||||
output += "<td width='50%' align='right'><b>Admin ckey:</b> <input type='text' name='dbsearchadmin' value='[adminckey]'></td></tr>"
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
/proc/fix_player_notes_listing()
|
||||
var/list/has_notes = list()
|
||||
// flist() dir names include the /
|
||||
for(var/subdir in flist("data/player_saves/"))
|
||||
for(var/ckey in flist("data/player_saves/[subdir]"))
|
||||
if(fexists("data/player_saves/[subdir][ckey]info.sav"))
|
||||
has_notes += copytext(ckey, 1, -1) // Trim the tailing /
|
||||
|
||||
//Updating list of keys with notes on them
|
||||
var/savefile/note_list = new("data/player_notes.sav")
|
||||
var/list/note_keys
|
||||
note_list >> note_keys
|
||||
if(!note_keys) note_keys = list()
|
||||
note_keys |= has_notes
|
||||
note_list << note_keys
|
||||
del(note_list) // savefile, so NOT qdel
|
||||
@@ -1535,7 +1535,7 @@
|
||||
|
||||
for (var/page = 1, page <= B.pages.len, page++)
|
||||
var/obj/pageobj = B.pages[page]
|
||||
data += "<A href='?src=\ref[src];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
|
||||
data += "<A href='?src=\ref[src];[HrefToken()];AdminFaxViewPage=[page];paper_bundle=\ref[B]'>Page [page] - [pageobj.name]</A><BR>"
|
||||
|
||||
usr << browse(data, "window=[B.name]")
|
||||
else
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
set category = "Special Verbs"
|
||||
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
|
||||
set hidden = 1
|
||||
if(!check_rights(R_ADMIN)) //VOREStation Edit //CHOMPEdit meh, our stuff was conflicting so just removed the stealth thingamabobber
|
||||
if(!check_rights(R_ADMIN)) //VOREStation Edit
|
||||
return
|
||||
|
||||
msg = sanitize(msg)
|
||||
@@ -11,11 +11,9 @@
|
||||
|
||||
log_adminsay(msg,src)
|
||||
|
||||
//VOREStation Edit Start - Adds R_STEALTH //CHOMPEdit meh, our stuff was conflicting so just removed the stealth thingamabobber
|
||||
for(var/client/C in GLOB.admins)
|
||||
if(check_rights(R_ADMIN))
|
||||
to_chat(C, "<span class='admin_channel'>" + create_text_tag("admin", "ADMIN:", C) + " <span class='name'>[key_name(usr, 1)]</span>([admin_jump_link(mob, src)]): <span class='message'>[msg]</span></span>")
|
||||
//VOREStation Edit End
|
||||
|
||||
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -37,7 +35,7 @@
|
||||
if(check_rights(R_ADMIN, 0))
|
||||
sender_name = "<span class='admin'>[sender_name]</span>"
|
||||
for(var/client/C in GLOB.admins)
|
||||
if(check_rights(R_ADMIN|R_MOD|R_SERVER|R_STEALTH)) //VOREStation Edit
|
||||
if(check_rights(R_ADMIN|R_MOD|R_SERVER)) //VOREStation Edit
|
||||
to_chat(C, "<span class='mod_channel'>" + create_text_tag("mod", "MOD:", C) + " <span class='name'>[sender_name]</span>([admin_jump_link(mob, C.holder)]): <span class='message'>[msg]</span></span>")
|
||||
|
||||
feedback_add_details("admin_verb","MS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
@@ -70,10 +70,10 @@
|
||||
// Step 4, give us our selected target.
|
||||
/datum/ai_holder/proc/give_target(new_target, urgent = FALSE)
|
||||
ai_log("give_target() : Given '[new_target]', urgent=[urgent].", AI_LOG_TRACE)
|
||||
|
||||
|
||||
if(target)
|
||||
remove_target()
|
||||
|
||||
|
||||
target = new_target
|
||||
|
||||
if(target != null)
|
||||
@@ -282,7 +282,7 @@
|
||||
|
||||
// Checks to see if an atom attacked us lately
|
||||
/datum/ai_holder/proc/check_attacker(var/atom/movable/A)
|
||||
return (A in attackers)
|
||||
return (A.name in attackers)
|
||||
|
||||
// We were attacked by this thing recently
|
||||
/datum/ai_holder/proc/add_attacker(var/atom/movable/A)
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
icon = 'icons/obj/props/telecube.dmi'
|
||||
icon_state = "cube"
|
||||
w_class = ITEMSIZE_SMALL
|
||||
origin_tech = list(TECH_MATERIAL = 7, TECH_POWER = 6, TECH_BLUESPACE = 7, TECH_ANOMALY = 2, TECH_PRECURSOR = 2)
|
||||
origin_tech = list(TECH_MATERIAL = 7, TECH_POWER = 6, TECH_BLUESPACE = 7, TECH_ARCANE = 2, TECH_PRECURSOR = 2)
|
||||
|
||||
catalogue_data = list(/datum/category_item/catalogue/anomalous/precursor_a/telecube)
|
||||
|
||||
|
||||
@@ -371,8 +371,18 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
//YWadd END
|
||||
|
||||
// Destroy/cyborgize organs and limbs.
|
||||
character.synthetic = null //Clear the existing var.
|
||||
for(var/name in list(BP_HEAD, BP_L_HAND, BP_R_HAND, BP_L_ARM, BP_R_ARM, BP_L_FOOT, BP_R_FOOT, BP_L_LEG, BP_R_LEG, BP_GROIN, BP_TORSO))
|
||||
//VOREStation Edit
|
||||
character.synthetic = pref.species == "Protean" ? all_robolimbs["protean"] : null //Clear the existing var. (unless protean, then switch it to the normal protean limb)
|
||||
var/list/organs_to_edit = list()
|
||||
for (var/name in list(BP_TORSO, BP_HEAD, BP_GROIN, BP_L_ARM, BP_R_ARM, BP_L_HAND, BP_R_HAND, BP_L_LEG, BP_R_LEG, BP_L_FOOT, BP_R_FOOT))
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if (O)
|
||||
var/x = organs_to_edit.Find(O.parent_organ)
|
||||
if (x == 0)
|
||||
organs_to_edit += name
|
||||
else
|
||||
organs_to_edit.Insert(x+(O.robotic == ORGAN_NANOFORM ? 1 : 0), name)
|
||||
for(var/name in organs_to_edit) //VOREStation edit end
|
||||
var/status = pref.organ_data[name]
|
||||
var/obj/item/organ/external/O = character.organs_by_name[name]
|
||||
if(O)
|
||||
@@ -886,9 +896,10 @@ var/global/list/valid_bloodtypes = list("A+", "A-", "B+", "B-", "AB+", "AB-", "O
|
||||
/* VOREStation Removal - No markings whitelist, let people mix/match
|
||||
for(var/M in usable_markings)
|
||||
var/datum/sprite_accessory/S = usable_markings[M]
|
||||
var/datum/species/spec = GLOB.all_species[pref.species]
|
||||
if(!S.species_allowed.len)
|
||||
continue
|
||||
else if(!(pref.species in S.species_allowed))
|
||||
else if(!(pref.species in S.species_allowed) && !(pref.custom_base in S.species_allowed) && !(spec.base_species in S.species_allowed))
|
||||
usable_markings -= M
|
||||
*/ //VOREStation Removal End
|
||||
var/new_marking = tgui_input_list(user, "Choose a body marking:", "Character Preference", usable_markings)
|
||||
|
||||
@@ -157,6 +157,12 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Audible"
|
||||
disabled_description = "Silent"
|
||||
|
||||
/datum/client_preference/looping_alarms // CHOMPStation Add: Looping Alarms
|
||||
description ="Looping Alarm Sounds"
|
||||
key = "SOUND_ALARMLOOP"
|
||||
enabled_description = "Audible"
|
||||
disabled_description = "Silent"
|
||||
|
||||
/datum/client_preference/old_door_sounds
|
||||
description ="Old Door Sounds"
|
||||
key = "SOUND_OLDDOORS"
|
||||
@@ -370,6 +376,12 @@ var/list/_client_preferences_by_type
|
||||
enabled_description = "Hear"
|
||||
disabled_description = "Silent"
|
||||
|
||||
/datum/client_preference/player_tips
|
||||
description = "Receive Tips Periodically"
|
||||
key = "RECEIVE_TIPS"
|
||||
enabled_description = "Enabled"
|
||||
disabled_description = "Disabled"
|
||||
|
||||
/********************
|
||||
* Staff Preferences *
|
||||
********************/
|
||||
|
||||
@@ -139,3 +139,20 @@ Talon pin
|
||||
/datum/gear/accessory/altevian_badge
|
||||
display_name = "altevian badge"
|
||||
path = /obj/item/clothing/accessory/altevian_badge
|
||||
|
||||
/datum/gear/accessory/maid_neck
|
||||
display_name = "maid neck cover"
|
||||
path = /obj/item/clothing/accessory/maid_neck
|
||||
|
||||
/datum/gear/accessory/maid_corset
|
||||
display_name = "maid corset"
|
||||
path = /obj/item/clothing/accessory/maidcorset
|
||||
|
||||
//Antediluvian accessories
|
||||
/datum/gear/accessory/antediluvian
|
||||
display_name = "antediluvian bracers"
|
||||
path = /obj/item/clothing/accessory/antediluvian
|
||||
|
||||
/datum/gear/accessory/antediluvian/loin
|
||||
display_name = "antediluvian loincloth"
|
||||
path = /obj/item/clothing/accessory/antediluvian/loincloth
|
||||
@@ -25,4 +25,8 @@
|
||||
|
||||
/datum/gear/gloves/siren
|
||||
display_name = "gloves, Siren"
|
||||
path = /obj/item/clothing/gloves/fluff/siren
|
||||
path = /obj/item/clothing/gloves/fluff/siren
|
||||
|
||||
/datum/gear/gloves/maid_arms
|
||||
display_name = "maid arm covers"
|
||||
path = /obj/item/clothing/accessory/maid_arms
|
||||
|
||||
@@ -25,3 +25,7 @@
|
||||
/datum/gear/head/tigerpeltpink
|
||||
display_name = "pink tiger pelt"
|
||||
path = /obj/item/clothing/head/pelt/tigerpeltpink
|
||||
|
||||
/datum/gear/head/marisa
|
||||
display_name = "Witch hat"
|
||||
path = /obj/item/clothing/head/wizard/marisa
|
||||
@@ -11,14 +11,21 @@
|
||||
display_name = "basic headband"
|
||||
path = /obj/item/clothing/head/fluff/headbando
|
||||
|
||||
/datum/gear/head/maid
|
||||
display_name = "maid headband"
|
||||
path = /obj/item/clothing/head/headband/maid
|
||||
|
||||
/datum/gear/head/headbando/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/maid
|
||||
display_name = "maid headband selection"
|
||||
path = /obj/item/clothing/head/headband/maid
|
||||
|
||||
/datum/gear/head/maid/New()
|
||||
..()
|
||||
var/list/headbands_list = list()
|
||||
for(var/obj/item/clothing/head/bands as anything in typesof(/obj/item/clothing/head/headband/maid))
|
||||
headbands_list[initial(bands.name)] = bands
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortAssoc(headbands_list))
|
||||
|
||||
//Detective alternative
|
||||
/datum/gear/head/detective_alt
|
||||
display_name = "cyberscope headgear, detective"
|
||||
@@ -57,6 +64,30 @@
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/wedding
|
||||
display_name = "wedding veil"
|
||||
path = /obj/item/clothing/head/wedding
|
||||
|
||||
/datum/gear/head/wedding/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/halo/alt
|
||||
display_name = "halo, alt"
|
||||
path = /obj/item/clothing/head/halo/alt
|
||||
|
||||
/datum/gear/head/buckethat
|
||||
display_name = "hat, bucket"
|
||||
path = /obj/item/clothing/head/buckethat
|
||||
|
||||
/datum/gear/head/buckethat/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/head/nonla
|
||||
display_name = "hat, non la"
|
||||
path = /obj/item/clothing/head/nonla
|
||||
|
||||
/*
|
||||
Talon hats
|
||||
*/
|
||||
|
||||
@@ -61,6 +61,12 @@
|
||||
display_name = "neck gaiter selection"
|
||||
path = /obj/item/clothing/accessory/gaiter
|
||||
cost = 1
|
||||
|
||||
//CHOMPAdd - Put this mask in loadout
|
||||
/datum/gear/mask/death
|
||||
display_name = "white mask"
|
||||
path = /obj/item/clothing/mask/gas/cyborg
|
||||
cost = 1
|
||||
|
||||
/datum/gear/mask/gaiter/New()
|
||||
..()
|
||||
@@ -68,4 +74,11 @@
|
||||
for(var/gaiter in typesof(/obj/item/clothing/accessory/gaiter))
|
||||
var/obj/item/clothing/accessory/gaiter_type = gaiter
|
||||
gaiters[initial(gaiter_type.name)] = gaiter_type
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
|
||||
gear_tweaks += new/datum/gear_tweak/path(sortTim(gaiters, /proc/cmp_text_asc))
|
||||
|
||||
/datum/gear/mask/lace
|
||||
display_name = "lace veil"
|
||||
path = /obj/item/clothing/mask/lacemask
|
||||
|
||||
/datum/gear/mask/lace/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
@@ -20,3 +20,19 @@
|
||||
/datum/gear/shoes/toeless
|
||||
display_name = "toe-less jackboots"
|
||||
path = /obj/item/clothing/shoes/boots/jackboots/toeless
|
||||
|
||||
/datum/gear/shoes/singer_blue
|
||||
display_name = "blue performer's boots"
|
||||
path = /obj/item/clothing/shoes/boots/singer
|
||||
|
||||
/datum/gear/shoes/singer_yellow
|
||||
display_name = "yellow performer's boots"
|
||||
path = /obj/item/clothing/shoes/boots/singer/yellow
|
||||
|
||||
/datum/gear/shoes/antediluvian
|
||||
display_name = "legwraps, antediluvian"
|
||||
path = /obj/item/clothing/shoes/antediluvian
|
||||
|
||||
/datum/gear/shoes/flats/alt
|
||||
display_name = "flats, alt"
|
||||
path = /obj/item/clothing/shoes/flats/white/color/alt
|
||||
@@ -152,3 +152,164 @@ Talon winter coat
|
||||
|
||||
/datum/gear/suit/cyberpunk_recolorable/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/shrine_maiden
|
||||
display_name = "shrine maiden costume"
|
||||
path = /obj/item/clothing/suit/shrine_maiden
|
||||
|
||||
//Antediluvian cloak
|
||||
/datum/gear/suit/cloak_ante
|
||||
display_name = "cloak, antediluvian"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/antediluvian
|
||||
cost = 1
|
||||
|
||||
//Chaplain cloaks
|
||||
/datum/gear/suit/cloak_chaplain
|
||||
display_name = "cloak, chaplain"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/chapel
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/cloak_chaplain/alt
|
||||
display_name = "cloak, chaplain, alt"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/chapel/alt
|
||||
cost = 1
|
||||
|
||||
//Half cloak
|
||||
/datum/gear/suit/cloak_half
|
||||
display_name = "cloak, half, colorable"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/half
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/cloak_half/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
//Shoulder cloak
|
||||
/datum/gear/suit/cloak_shoulder
|
||||
display_name = "cloak, shoulder"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shoulder
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/cloak_shoulder/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/cloak_shoulder_right
|
||||
display_name = "cloak, shoulder right"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shoulder/right
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/cloak_shoulder_right/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
//Mantles, mostly for heads of staff
|
||||
/datum/gear/suit/roles/mantle
|
||||
display_name = "mantle, colorable"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/mantle
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/roles/mantle/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/roles/mantles
|
||||
display_name = "mantle selection"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo
|
||||
cost = 1
|
||||
|
||||
/datum/gear/suit/roles/mantles/New()
|
||||
..()
|
||||
var/list/mantles = list(
|
||||
"orange mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo,
|
||||
"black mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/security,
|
||||
"white mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/engineering,
|
||||
"purple mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/research,
|
||||
"cyan mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/medical,
|
||||
"blue mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/hop,
|
||||
"gold mantle"=/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cap
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(mantles)
|
||||
|
||||
//Boat cloaks
|
||||
/datum/gear/suit/roles/boatcloak
|
||||
display_name = "boat cloak, colorable"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat
|
||||
|
||||
/datum/gear/suit/roles/boatcloak/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/roles/capboatcloak
|
||||
display_name = "boat cloak, site manager"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/cap
|
||||
allowed_roles = list("Site Manager")
|
||||
|
||||
/datum/gear/suit/roles/hopboatcloak
|
||||
display_name = "boat cloak, head of personnel"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/suit/roles/boatcloaks
|
||||
display_name = "boat cloak selection"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/boat/security
|
||||
|
||||
/datum/gear/suit/roles/boatcloaks/New()
|
||||
..()
|
||||
var/list/boatcloaks = list(
|
||||
"security boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/security,
|
||||
"engineering boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/engineering,
|
||||
"atmospherics boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/atmos,
|
||||
"medical boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/medical,
|
||||
"service boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/service,
|
||||
"cargo boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/cargo,
|
||||
"mining boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/mining,
|
||||
"research boat cloak"=/obj/item/clothing/accessory/poncho/roles/cloak/boat/science
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(boatcloaks)
|
||||
|
||||
//Shrouds
|
||||
/datum/gear/suit/roles/shroud
|
||||
display_name = "shroud, colorable"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud
|
||||
|
||||
/datum/gear/suit/roles/shroud/New()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/datum/gear/suit/roles/capshroud
|
||||
display_name = "shroud, site manager"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap
|
||||
allowed_roles = list("Site Manager")
|
||||
|
||||
/datum/gear/suit/roles/hopshroud
|
||||
display_name = "shroud, head of personnel"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop
|
||||
allowed_roles = list("Head of Personnel")
|
||||
|
||||
/datum/gear/suit/roles/shrouds
|
||||
display_name = "shroud selection"
|
||||
path = /obj/item/clothing/accessory/poncho/roles/cloak/shroud/security
|
||||
|
||||
/datum/gear/suit/roles/shrouds/New()
|
||||
..()
|
||||
var/list/shrouds = list(
|
||||
"security shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/security,
|
||||
"engineering shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/engineering,
|
||||
"atmospherics shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/atmos,
|
||||
"medical shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/medical,
|
||||
"service shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/service,
|
||||
"cargo shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cargo,
|
||||
"mining shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/mining,
|
||||
"research shroud"=/obj/item/clothing/accessory/poncho/roles/cloak/shroud/science
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(shrouds)
|
||||
|
||||
//Actually colorable hoodies
|
||||
/datum/gear/suit/roles/choodies
|
||||
display_name = "hoodie selection, colorable"
|
||||
path = /obj/item/clothing/suit/storage/hooded/toggle/colorable
|
||||
|
||||
/datum/gear/suit/roles/choodies/New()
|
||||
..()
|
||||
var/list/choodies = list(
|
||||
"normal hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable,
|
||||
"sleeveless hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable/sleeveless,
|
||||
"cropped hoodie"=/obj/item/clothing/suit/storage/hooded/toggle/colorable/cropped
|
||||
)
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
gear_tweaks += new/datum/gear_tweak/path(choodies)
|
||||
@@ -222,6 +222,14 @@ Qipao
|
||||
display_name = "qipao, white"
|
||||
path = /obj/item/clothing/under/qipao/white
|
||||
|
||||
/datum/gear/uniform/qipao_colorable_alt
|
||||
display_name = "qipao, colorable alt"
|
||||
path = /obj/item/clothing/under/qipao/white/colorable
|
||||
|
||||
/datum/gear/uniform/qipao_colorable_alt/New()
|
||||
..()
|
||||
gear_tweaks += gear_tweak_free_color_choice
|
||||
|
||||
/*
|
||||
Bluespace jumpsuit
|
||||
*/
|
||||
@@ -305,7 +313,7 @@ Talon jumpsuit
|
||||
|
||||
|
||||
//Feminine Colored Jumpsuits.
|
||||
/datum/gear/suit/f_jumpsuit_alt
|
||||
/datum/gear/uniform/f_jumpsuit_alt
|
||||
display_name = "Colored Feminine Jumpsuit"
|
||||
path = /obj/item/clothing/under/color/fjumpsuit
|
||||
|
||||
@@ -322,3 +330,43 @@ Talon jumpsuit
|
||||
display_name = "undersuit, security, modernized (Security)"
|
||||
allowed_roles = list("Head of Security", "Warden", "Detective", "Security Officer")
|
||||
path = /obj/item/clothing/under/rank/security/modern
|
||||
|
||||
/datum/gear/uniform/singer_blue
|
||||
display_name = "blue singer dress"
|
||||
path = /obj/item/clothing/under/dress/singer
|
||||
|
||||
/datum/gear/uniform/singer_yellow
|
||||
display_name = "yellow singer dress"
|
||||
path = /obj/item/clothing/under/dress/singer/yellow
|
||||
|
||||
//Antediluvian corsets from CitRP
|
||||
/datum/gear/uniform/antediluvian
|
||||
display_name = "corset, antediluvian"
|
||||
path = /obj/item/clothing/under/dress/antediluvian
|
||||
|
||||
/datum/gear/uniform/antediluvianalt
|
||||
display_name = "corset, antediluvian alt"
|
||||
path = /obj/item/clothing/under/dress/antediluvian/sheerless
|
||||
|
||||
//Colorable skirts
|
||||
/datum/gear/uniform/coloredskirts
|
||||
display_name = "skirt selection, colorable"
|
||||
path = /obj/item/clothing/under/skirt/colorable
|
||||
|
||||
/datum/gear/uniform/coloredskirts/New()
|
||||
..()
|
||||
var/list/skirts = list(
|
||||
"casual skirt"=/obj/item/clothing/under/skirt/colorable,
|
||||
"puffy skirt"=/obj/item/clothing/under/skirt/colorable/puffy,
|
||||
"skater skirt"=/obj/item/clothing/under/skirt/colorable/skater,
|
||||
"pleated skirt"=/obj/item/clothing/under/skirt/colorable/pleated,
|
||||
"pencil skirt"=/obj/item/clothing/under/skirt/colorable/pencil,
|
||||
"plaid skirt"=/obj/item/clothing/under/skirt/colorable/plaid,
|
||||
"tube skirt"=/obj/item/clothing/under/skirt/colorable/tube,
|
||||
"long skirt"=/obj/item/clothing/under/skirt/colorable/long,
|
||||
"high skirt"=/obj/item/clothing/under/skirt/colorable/high,
|
||||
"swept skirt"=/obj/item/clothing/under/skirt/colorable/swept,
|
||||
"jumper skirt"=/obj/item/clothing/under/skirt/colorable/jumper,
|
||||
"jumper dress"=/obj/item/clothing/under/skirt/colorable/jumperdress
|
||||
)
|
||||
gear_tweaks += list(new/datum/gear_tweak/path(skirts), gear_tweak_free_color_choice)
|
||||
@@ -145,6 +145,11 @@
|
||||
)
|
||||
gear_tweaks += new/datum/gear_tweak/path(wheelchairs)
|
||||
|
||||
/datum/gear/utility/lantern
|
||||
display_name = "lantern"
|
||||
path = /obj/item/device/flashlight/lantern
|
||||
cost = 2
|
||||
|
||||
/****************
|
||||
modular computers
|
||||
****************/
|
||||
|
||||
@@ -680,7 +680,7 @@
|
||||
|
||||
/datum/gear/shoes/teshwrap
|
||||
display_name = "Teshari legwraps"
|
||||
path = /obj/item/clothing/shoes/footwraps/teshari
|
||||
path = /obj/item/clothing/shoes/footwraps //CHOMPEDIT: Tesh can wear regular footwraps, but im paranoid about corrupting saves so we just repath this for now
|
||||
sort_category = "Xenowear"
|
||||
whitelisted = SPECIES_TESHARI
|
||||
cost = 1
|
||||
|
||||
@@ -42,6 +42,67 @@
|
||||
choices = (choices | new_species)
|
||||
return choices
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/proc/get_html_for_trait(var/datum/trait/trait, var/list/trait_prefs = null)
|
||||
. = ""
|
||||
if (!LAZYLEN(trait.has_preferences))
|
||||
return
|
||||
. = "<br><ul>"
|
||||
var/altered = FALSE
|
||||
if (!LAZYLEN(trait_prefs))
|
||||
trait_prefs = trait.get_default_prefs()
|
||||
altered = TRUE
|
||||
for (var/identifier in trait.has_preferences)
|
||||
var/pref_list = trait.has_preferences[identifier] //faster
|
||||
if (LAZYLEN(pref_list) >= 2)
|
||||
if (!(identifier in trait_prefs))
|
||||
trait_prefs[identifier] = trait.default_value_for_pref(identifier) //won't be called at all often
|
||||
altered = TRUE
|
||||
. += "<li>- [pref_list[2]]:"
|
||||
var/link = " <a href='?src=\ref[src];clicked_trait_pref=[trait.type];pref=[identifier]'>"
|
||||
switch (pref_list[1])
|
||||
if (1) //TRAIT_PREF_TYPE_BOOLEAN
|
||||
. += link + (trait_prefs[identifier] ? "Enabled" : "Disabled")
|
||||
if (2) //TRAIT_PREF_TYPE_COLOR
|
||||
. += " " + color_square(hex = trait_prefs[identifier]) + link + "Change"
|
||||
. += "</a></li>"
|
||||
. += "</ul>"
|
||||
if (altered)
|
||||
switch(trait.category)
|
||||
if (1) //TRAIT_TYPE_POSITIVE
|
||||
pref.pos_traits[trait.type] = trait_prefs
|
||||
if (0) //TRAIT_TYPE_NEUTRAL
|
||||
pref.neu_traits[trait.type] = trait_prefs
|
||||
if (-1)//TRAIT_TYPE_NEGATIVE
|
||||
pref.neg_traits[trait.type] = trait_prefs
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/proc/get_pref_choice_from_trait(var/mob/user, var/datum/trait/trait, var/preference)
|
||||
if (!trait || !preference)
|
||||
return
|
||||
var/list/trait_prefs
|
||||
var/datum/trait/instance = all_traits[trait]
|
||||
var/list/traitlist
|
||||
switch(instance.category)
|
||||
if (1)
|
||||
traitlist = pref.pos_traits
|
||||
if (0)
|
||||
traitlist = pref.neu_traits
|
||||
if (-1)
|
||||
traitlist = pref.neg_traits
|
||||
if (!LAZYLEN(instance.has_preferences) || !(preference in instance.has_preferences) || !traitlist)
|
||||
return
|
||||
if (!LAZYLEN(traitlist[trait]))
|
||||
traitlist[trait] = instance.get_default_prefs()
|
||||
trait_prefs = traitlist[trait]
|
||||
if (!(preference in trait_prefs))
|
||||
trait_prefs[preference] = instance.default_value_for_pref(preference) //won't be called at all often
|
||||
switch(instance.has_preferences[preference][1])
|
||||
if (1) //TRAIT_PREF_TYPE_BOOLEAN
|
||||
trait_prefs[preference] = !trait_prefs[preference]
|
||||
if (2) //TRAIT_PREF_TYPE_COLOR
|
||||
var/new_color = input(user, "Choose the color for this trait preference:", "Trait Preference", trait_prefs[preference]) as color|null
|
||||
if (new_color)
|
||||
trait_prefs[preference] = new_color
|
||||
|
||||
// Definition of the stuff for Ears
|
||||
/datum/category_item/player_setup_item/vore/traits
|
||||
name = "Traits"
|
||||
@@ -156,6 +217,16 @@
|
||||
pref.custom_ask = lowertext(trim(pref.custom_ask))
|
||||
pref.custom_exclaim = lowertext(trim(pref.custom_exclaim))
|
||||
|
||||
if (islist(pref.custom_heat)) //don't bother checking these for actual singular message length, they should already have been checked and it'd take too long every time it's sanitized
|
||||
if (length(pref.custom_heat) > 10)
|
||||
pref.custom_heat.Cut(11)
|
||||
else
|
||||
pref.custom_heat = list()
|
||||
if (islist(pref.custom_cold))
|
||||
if (length(pref.custom_cold) > 10)
|
||||
pref.custom_cold.Cut(11)
|
||||
else
|
||||
pref.custom_cold = list()
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/copy_to_mob(var/mob/living/carbon/human/character)
|
||||
character.custom_species = pref.custom_species
|
||||
@@ -191,8 +262,6 @@
|
||||
var/english_traits = english_list(new_S.traits, and_text = ";", comma_text = ";")
|
||||
log_game("TRAITS [pref.client_ckey]/([character]) with: [english_traits]") //Terrible 'fake' key_name()... but they aren't in the same entity yet
|
||||
|
||||
|
||||
|
||||
/datum/category_item/player_setup_item/vore/traits/content(var/mob/user)
|
||||
. += "<b>Custom Species Name:</b> "
|
||||
. += "<a href='?src=\ref[src];custom_species=1'>[pref.custom_species ? pref.custom_species : "-Input Name-"]</a><br>"
|
||||
@@ -221,21 +290,21 @@
|
||||
. += "<ul>"
|
||||
for(var/T in pref.pos_traits)
|
||||
var/datum/trait/trait = positive_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_pos_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.pos_traits[T])]</li>"
|
||||
. += "</ul>"
|
||||
|
||||
. += "<a href='?src=\ref[src];add_trait=[NEUTRAL_MODE]'>Neutral Trait(s) (No Limit) +</a><br>" // CHOMPEdit: More obvious/clear to players.
|
||||
. += "<ul>"
|
||||
for(var/T in pref.neu_traits)
|
||||
var/datum/trait/trait = neutral_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neu_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.neu_traits[T])]</li>"
|
||||
. += "</ul>"
|
||||
|
||||
. += "<a href='?src=\ref[src];add_trait=[NEGATIVE_MODE]'>Negative Trait(s) (No Limit) +</a><br>" // CHOMPEdit: More obvious/clear to players.
|
||||
. += "<ul>"
|
||||
for(var/T in pref.neg_traits)
|
||||
var/datum/trait/trait = negative_traits[T]
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a></li>"
|
||||
. += "<li>- <a href='?src=\ref[src];clicked_neg_trait=[T]'>[trait.name] ([trait.cost])</a> [get_html_for_trait(trait, pref.neg_traits[T])]</li>"
|
||||
. += "</ul>"
|
||||
|
||||
. += "<b>Blood Color: </b>" //People that want to use a certain species to have that species traits (xenochimera/promethean/spider) should be able to set their own blood color.
|
||||
@@ -325,6 +394,11 @@
|
||||
instance.remove_pref(pref)
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["clicked_trait_pref"])
|
||||
var/datum/trait/trait = text2path(href_list["clicked_trait_pref"])
|
||||
get_pref_choice_from_trait(user, trait, href_list["pref"])
|
||||
return TOPIC_REFRESH
|
||||
|
||||
else if(href_list["custom_say"])
|
||||
var/say_choice = sanitize(tgui_input_text(usr, "This word or phrase will appear instead of 'says': [pref.real_name] says, \"Hi.\"", "Custom Say", pref.custom_say, 12), 12)
|
||||
if(say_choice)
|
||||
@@ -368,7 +442,7 @@
|
||||
|
||||
else if(href_list["custom_cold"])
|
||||
tgui_alert(user, "You are setting custom cold messages. These will overwrite your species' defaults. To return to defaults, click reset.")
|
||||
var/old_message = pref.custom_heat.Join("\n\n")
|
||||
var/old_message = pref.custom_cold.Join("\n\n") //CHOMP Edit
|
||||
var/new_message = sanitize(tgui_input_text(usr,"Use double enter between messages to enter a new one. Must be at least 3 characters long, 160 characters max and up to 10 messages are allowed.","Cold Discomfort messages",old_message, multiline= TRUE, prevent_enter = TRUE), MAX_MESSAGE_LEN,0,0,0)
|
||||
if(length(new_message) > 0)
|
||||
var/list/raw_list = splittext(new_message,"\n\n")
|
||||
@@ -383,7 +457,6 @@
|
||||
pref.custom_cold = raw_list
|
||||
return TOPIC_REFRESH
|
||||
|
||||
|
||||
else if(href_list["reset_say"])
|
||||
var/say_choice = tgui_alert(usr, "Reset your Custom Say Verb?","Reset Verb",list("Yes","No"))
|
||||
if(say_choice == "Yes")
|
||||
@@ -504,7 +577,6 @@
|
||||
|
||||
if(pref.gross_meatbag && !(instance.can_take & ORGANICS))
|
||||
tgui_alert_async(usr, "The trait you've selected can only be taken by synthetic characters!", "Error")
|
||||
pref.gross_meatbag = 0 //Just to be sure
|
||||
return TOPIC_REFRESH
|
||||
|
||||
if(pref.species in instance.banned_species)
|
||||
@@ -540,7 +612,7 @@
|
||||
return TOPIC_REFRESH
|
||||
|
||||
instance.apply_pref(pref)
|
||||
mylist += path
|
||||
mylist[path] = instance.get_default_prefs()
|
||||
return TOPIC_REFRESH
|
||||
|
||||
return ..()
|
||||
|
||||
@@ -26,6 +26,9 @@
|
||||
pref.nif_path = null //Kill!
|
||||
WARNING("Loaded a NIF but it was an invalid path, [pref.real_name]")
|
||||
|
||||
if (ispath(pref.nif_path, /obj/item/device/nif/protean) && pref.species != SPECIES_PROTEAN) //no free nifs
|
||||
pref.nif_path = null
|
||||
|
||||
if(ispath(pref.nif_path) && isnull(pref.nif_durability)) //How'd you lose this?
|
||||
pref.nif_durability = initial(pref.nif_path.durability) //Well, have a new one, my bad.
|
||||
WARNING("Loaded a NIF but with no durability, [pref.real_name]")
|
||||
|
||||
@@ -413,6 +413,7 @@ var/list/preferences_datums = list()
|
||||
var/name
|
||||
var/nickname //vorestation edit - This set appends nicknames to the save slot
|
||||
var/list/charlist = list()
|
||||
var/default //VOREStation edit
|
||||
for(var/i=1, i<= config.character_slots, i++)
|
||||
S.cd = "/character[i]"
|
||||
S["real_name"] >> name
|
||||
@@ -423,10 +424,12 @@ var/list/preferences_datums = list()
|
||||
name = "►[i] - [name]"
|
||||
else
|
||||
name = "[i] - [name]"
|
||||
if (i == default_slot) //VOREStation edit
|
||||
default = "[name][nickname ? " ([nickname])" : ""]"
|
||||
charlist["[name][nickname ? " ([nickname])" : ""]"] = i
|
||||
|
||||
selecting_slots = TRUE
|
||||
var/choice = tgui_input_list(user, "Select a character to load:", "Load Slot", charlist)
|
||||
var/choice = tgui_input_list(user, "Select a character to load:", "Load Slot", charlist, default)
|
||||
selecting_slots = FALSE
|
||||
if(!choice)
|
||||
return
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
/client/verb/toggle_looping_alarms()
|
||||
set name = "Looping Alarms"
|
||||
set category = "Preferences"
|
||||
set desc = "Toggles alarm sound loops."
|
||||
|
||||
var/pref_path = /datum/client_preference/looping_alarms
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
to_chat(src, "You will [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] hear alarm sounds looping.")
|
||||
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb","TAlarmLoops") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
@@ -124,3 +124,18 @@
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb", "TSoundMentorhelps")
|
||||
|
||||
/client/verb/toggle_player_tips()
|
||||
set name = "Toggle Receiving Player Tips"
|
||||
set category = "Preferences"
|
||||
set desc = "When toggled on, you receive tips periodically on roleplay and gameplay."
|
||||
|
||||
var/pref_path = /datum/client_preference/player_tips
|
||||
|
||||
toggle_preference(pref_path)
|
||||
|
||||
to_chat(src, "You are [ (is_preference_enabled(pref_path)) ? "now" : "no longer"] periodically receiving advice on gameplay and roleplay.")
|
||||
|
||||
SScharacter_setup.queue_preferences_save(prefs)
|
||||
|
||||
feedback_add_details("admin_verb", "TReceivePlayerTips")
|
||||
|
||||
@@ -30,12 +30,20 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
/datum/character_directory/tgui_data(mob/user, datum/tgui/ui, datum/tgui_state/state)
|
||||
var/list/data = ..()
|
||||
|
||||
data["personalVisibility"] = user?.client?.prefs?.show_in_directory
|
||||
data["personalTag"] = user?.client?.prefs?.directory_tag || "Unset"
|
||||
data["personalGenderTag"] = user?.client?.prefs?.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
data["personalSexualityTag"] = user?.client?.prefs?.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
data["personalErpTag"] = user?.client?.prefs?.directory_erptag || "Unset"
|
||||
data["personalEventTag"] = vantag_choices_list[user?.client?.prefs?.vantag_preference] //CHOMPEdit
|
||||
if (user?.mind)
|
||||
data["personalVisibility"] = user.mind.show_in_directory
|
||||
data["personalTag"] = user.mind.directory_tag || "Unset"
|
||||
data["personalErpTag"] = user.mind.directory_erptag || "Unset"
|
||||
data["personalEventTag"] = vantag_choices_list[user.mind.vantag_preference] //CHOMPEdit
|
||||
data["personalGenderTag"] = user.mind.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
data["personalSexualityTag"] = user.mind.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
else if (user?.client?.prefs)
|
||||
data["personalVisibility"] = user.client.prefs.show_in_directory
|
||||
data["personalTag"] = user.client.prefs.directory_tag || "Unset"
|
||||
data["personalErpTag"] = user.client.prefs.directory_erptag || "Unset"
|
||||
data["personalEventTag"] = vantag_choices_list[user.client.prefs.vantag_preference] //CHOMPEdit
|
||||
data["personalGenderTag"] = user.client.prefs.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
data["personalSexualityTag"] = user.client.prefs.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
|
||||
return data
|
||||
|
||||
@@ -45,7 +53,7 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/list/directory_mobs = list()
|
||||
for(var/client/C in GLOB.clients)
|
||||
// Allow opt-out.
|
||||
if(!C?.prefs?.show_in_directory)
|
||||
if(C?.mob?.mind ? !C.mob.mind.show_in_directory : !C?.prefs?.show_in_directory)
|
||||
continue
|
||||
|
||||
// These are the three vars we're trying to find
|
||||
@@ -54,12 +62,26 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/species = null
|
||||
var/ooc_notes = null
|
||||
var/flavor_text = null
|
||||
var/tag = C.prefs.directory_tag || "Unset"
|
||||
var/gendertag = C.prefs.directory_gendertag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
var/sexualitytag = C.prefs.directory_sexualitytag || "Unset" // CHOMPStation Edit: Character Directory Update
|
||||
var/erptag = C.prefs.directory_erptag || "Unset"
|
||||
var/eventtag = vantag_choices_list[C.prefs.vantag_preference] //CHOMPEdit
|
||||
var/character_ad = C.prefs.directory_ad
|
||||
var/gendertag = null // CHOMPStation Edit: Character Directory Update
|
||||
var/sexualitytag = null // CHOMPStation Edit: Character Directory Update
|
||||
var/eventtag = vantag_choices_list[VANTAG_NONE] //CHOMPEdit
|
||||
var/tag
|
||||
var/erptag
|
||||
var/character_ad
|
||||
if (C.mob?.mind) //could use ternary for all three but this is more efficient
|
||||
tag = C.mob.mind.directory_tag || "Unset"
|
||||
erptag = C.mob.mind.directory_erptag || "Unset"
|
||||
character_ad = C.mob.mind.directory_ad
|
||||
gendertag = C.mob.mind.directory_gendertag || "Unset"
|
||||
sexualitytag = C.mob.mind.directory_sexualitytag || "Unset"
|
||||
eventtag = vantag_choices_list[C.mob.mind.vantag_preference]
|
||||
else
|
||||
tag = C.prefs.directory_tag || "Unset"
|
||||
erptag = C.prefs.directory_erptag || "Unset"
|
||||
character_ad = C.prefs.directory_ad
|
||||
gendertag = C.prefs.directory_gendertag || "Unset"
|
||||
sexualitytag = C.prefs.directory_sexualitytag || "Unset"
|
||||
eventtag = vantag_choices_list[C.prefs.vantag_preference]
|
||||
|
||||
//CHOMPEdit Start
|
||||
if(ishuman(C.mob))
|
||||
@@ -134,42 +156,63 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
if(.)
|
||||
return
|
||||
|
||||
if(action == "refresh")
|
||||
// This is primarily to stop malicious users from trying to lag the server by spamming this verb
|
||||
if(!usr.checkMoveCooldown())
|
||||
to_chat(usr, "<span class='warning'>Don't spam character directory refresh.</span>")
|
||||
return
|
||||
usr.setMoveCooldown(10)
|
||||
update_tgui_static_data(usr, ui)
|
||||
return TRUE
|
||||
else
|
||||
return check_for_mind_or_prefs(usr, action, params["overwrite_prefs"])
|
||||
|
||||
/datum/character_directory/proc/check_for_mind_or_prefs(mob/user, action, overwrite_prefs)
|
||||
if (!user.client)
|
||||
return
|
||||
var/can_set_prefs = overwrite_prefs && !!user.client.prefs
|
||||
var/can_set_mind = !!user.mind
|
||||
if (!can_set_prefs && !can_set_mind)
|
||||
if (!overwrite_prefs && !!user.client.prefs)
|
||||
to_chat(user, "<span class='warning'>You cannot change these settings if you don't have a mind to save them to. Enable overwriting prefs and switch to a slot you're fine with overwriting.</span>")
|
||||
return
|
||||
switch(action)
|
||||
if("refresh")
|
||||
// This is primarily to stop malicious users from trying to lag the server by spamming this verb
|
||||
if(!usr.checkMoveCooldown())
|
||||
to_chat(usr, "<span class='warning'>Don't spam character directory refresh.</span>")
|
||||
return
|
||||
usr.setMoveCooldown(10)
|
||||
update_tgui_static_data(usr, ui)
|
||||
return TRUE
|
||||
if("setTag")
|
||||
if ("setTag")
|
||||
var/list/new_tag = tgui_input_list(usr, "Pick a new Vore tag for the character directory", "Character Tag", GLOB.char_directory_tags)
|
||||
if(!new_tag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_tag = new_tag
|
||||
return TRUE
|
||||
// CHOMPStation Edit Start: Directory Update
|
||||
if("setGenderTag")
|
||||
var/list/new_gendertag = tgui_input_list(usr, "Pick a new Gender tag for the character directory. This is YOUR gender, not what you prefer.", "Character Gender Tag", GLOB.char_directory_gendertags)
|
||||
if(!new_gendertag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_gendertag = new_gendertag
|
||||
return TRUE
|
||||
if("setSexualityTag")
|
||||
var/list/new_sexualitytag = tgui_input_list(usr, "Pick a new Sexuality/Orientation tag for the character directory", "Character Sexuality/Orientation Tag", GLOB.char_directory_sexualitytags)
|
||||
if(!new_sexualitytag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_sexualitytag = new_sexualitytag
|
||||
return TRUE
|
||||
return set_for_mind_or_prefs(user, action, new_tag, can_set_prefs, can_set_mind)
|
||||
// CHOMPStation Edit End: Directory Update
|
||||
if("setErpTag")
|
||||
var/list/new_erptag = tgui_input_list(usr, "Pick a new ERP tag for the character directory", "Character ERP Tag", GLOB.char_directory_erptags)
|
||||
if(!new_erptag)
|
||||
return
|
||||
usr?.client?.prefs?.directory_erptag = new_erptag
|
||||
return TRUE
|
||||
//CHOMPEdit start
|
||||
return set_for_mind_or_prefs(user, action, new_erptag, can_set_prefs, can_set_mind)
|
||||
if ("setVisible")
|
||||
var/visible = TRUE
|
||||
if (can_set_mind)
|
||||
visible = user.mind.show_in_directory
|
||||
else if (can_set_prefs)
|
||||
visible = user.client.prefs.show_in_directory
|
||||
to_chat(usr, "<span class='notice'>You are now [!visible ? "shown" : "not shown"] in the directory.</span>")
|
||||
return set_for_mind_or_prefs(user, action, !visible, can_set_prefs, can_set_mind)
|
||||
if ("editAd")
|
||||
var/current_ad = (can_set_mind ? usr.mind.directory_ad : null) || (can_set_prefs ? usr.client.prefs.directory_ad : null)
|
||||
var/new_ad = sanitize(tgui_input_text(usr, "Change your character ad", "Character Ad", current_ad, multiline = TRUE, prevent_enter = TRUE), extra = 0)
|
||||
if(isnull(new_ad))
|
||||
return
|
||||
return set_for_mind_or_prefs(user, action, new_ad, can_set_prefs, can_set_mind)
|
||||
// CHOMPStation Edit Start: Directory Update
|
||||
if("setGenderTag")
|
||||
var/list/new_gendertag = tgui_input_list(usr, "Pick a new Gender tag for the character directory. This is YOUR gender, not what you prefer.", "Character Gender Tag", GLOB.char_directory_gendertags)
|
||||
if(!new_gendertag)
|
||||
return
|
||||
return set_for_mind_or_prefs(user, action, new_gendertag, can_set_prefs, can_set_mind)
|
||||
if("setSexualityTag")
|
||||
var/list/new_sexualitytag = tgui_input_list(usr, "Pick a new Sexuality/Orientation tag for the character directory", "Character Sexuality/Orientation Tag", GLOB.char_directory_sexualitytags)
|
||||
if(!new_sexualitytag)
|
||||
return
|
||||
return set_for_mind_or_prefs(user, action, new_sexualitytag, can_set_prefs, can_set_mind)
|
||||
if("setEventTag")
|
||||
var/list/names_list = list()
|
||||
for(var/C in vantag_choices_list)
|
||||
@@ -177,20 +220,52 @@ GLOBAL_DATUM(character_directory, /datum/character_directory)
|
||||
var/list/new_eventtag = input(usr, "Pick your preference for event involvement", "Event Preference Tag", usr?.client?.prefs?.vantag_preference) as null|anything in names_list
|
||||
if(!new_eventtag)
|
||||
return
|
||||
usr?.client?.prefs?.vantag_preference = names_list[new_eventtag]
|
||||
return TRUE
|
||||
return set_for_mind_or_prefs(user, action, names_list[new_eventtag], can_set_prefs, can_set_mind)
|
||||
//CHOMPEdit end
|
||||
if("setVisible")
|
||||
usr?.client?.prefs?.show_in_directory = !usr?.client?.prefs?.show_in_directory
|
||||
to_chat(usr, "<span class='notice'>You are now [usr.client.prefs.show_in_directory ? "shown" : "not shown"] in the directory.</span>")
|
||||
return TRUE
|
||||
if("editAd")
|
||||
if(!usr?.client?.prefs)
|
||||
return
|
||||
|
||||
var/current_ad = usr.client.prefs.directory_ad
|
||||
var/new_ad = sanitize(tgui_input_text(usr, "Change your character ad", "Character Ad", current_ad, multiline = TRUE, prevent_enter = TRUE), extra = 0)
|
||||
if(isnull(new_ad))
|
||||
return
|
||||
usr.client.prefs.directory_ad = new_ad
|
||||
/datum/character_directory/proc/set_for_mind_or_prefs(mob/user, action, new_value, can_set_prefs, can_set_mind)
|
||||
can_set_prefs &&= !!user.client.prefs
|
||||
can_set_mind &&= !!user.mind
|
||||
if (!can_set_prefs && !can_set_mind)
|
||||
to_chat(user, "<span class='warning'>You seem to have lost either your mind, or your current preferences, while changing the values.[action == "editAd" ? " Here is your ad that you wrote. [new_value]" : null]</span>")
|
||||
return
|
||||
switch(action)
|
||||
if ("setTag")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.directory_tag = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.directory_tag = new_value
|
||||
return TRUE
|
||||
if ("setErpTag")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.directory_erptag = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.directory_erptag = new_value
|
||||
return TRUE
|
||||
if ("setVisible")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.show_in_directory = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.show_in_directory = new_value
|
||||
return TRUE
|
||||
if ("editAd")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.directory_ad = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.directory_ad = new_value
|
||||
return TRUE
|
||||
if ("setEventTag")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.vantag_preference = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.vantag_preference = new_value
|
||||
if ("setGenderTag")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.directory_gendertag = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.directory_gendertag = new_value
|
||||
if ("setSexualityTag")
|
||||
if (can_set_prefs)
|
||||
user.client.prefs.directory_sexualitytag = new_value
|
||||
if (can_set_mind)
|
||||
user.mind.directory_sexualitytag = new_value
|
||||
@@ -214,7 +214,8 @@
|
||||
throwforce = 2
|
||||
slot_flags = SLOT_EARS
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi')
|
||||
SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/hands/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/ears/attack_hand(mob/user as mob)
|
||||
if (!user) return
|
||||
@@ -473,7 +474,7 @@
|
||||
|
||||
/obj/item/clothing/head/proc/update_flashlight(var/mob/user = null)
|
||||
set_light_on(!light_on)
|
||||
|
||||
|
||||
if(light_system == STATIC_LIGHT)
|
||||
update_light()
|
||||
|
||||
@@ -828,7 +829,7 @@
|
||||
var/rolled_down = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
var/rolled_down_icon_override = TRUE
|
||||
var/rolled_sleeves = -1 //0 = unrolled, 1 = rolled, -1 = cannot be toggled
|
||||
var/rolled_sleeves_icon_override = TRUE
|
||||
var/rolled_sleeves_icon_override = TRUE
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/inventory/uniform/mob_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/uniform/mob_vox.dmi'
|
||||
@@ -1058,10 +1059,10 @@
|
||||
/obj/item/clothing/under/rank/New()
|
||||
sensor_mode = pick(0,1,2,3)
|
||||
..()
|
||||
|
||||
|
||||
//Vorestation edit - eject mobs from clothing before deletion
|
||||
/obj/item/clothing/Destroy()
|
||||
for(var/mob/living/M in contents)
|
||||
M.forceMove(get_turf(src))
|
||||
return ..()
|
||||
//Vorestation edit end
|
||||
//Vorestation edit end
|
||||
|
||||
@@ -100,6 +100,7 @@
|
||||
/obj/item/clothing/ears
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/inventory/ears/mob_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/ears/mob_vox.dmi',
|
||||
SPECIES_WEREBEAST = 'icons/inventory/ears/mob_vr_werebeast.dmi')
|
||||
|
||||
/obj/item/clothing/relaymove(var/mob/living/user,var/direction)
|
||||
|
||||
@@ -122,6 +122,7 @@
|
||||
item_state = "tajblind"
|
||||
prescription = 1
|
||||
body_parts_covered = EYES
|
||||
sprite_sheets = list(SPECIES_VOX = 'icons/inventory/eyes/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/glasses/hud/health/tajblind
|
||||
name = "lightweight veil"
|
||||
@@ -131,6 +132,7 @@
|
||||
icon_state = "tajblind_med"
|
||||
item_state = "tajblind_med"
|
||||
body_parts_covered = EYES
|
||||
sprite_sheets = list(SPECIES_VOX = 'icons/inventory/eyes/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/glasses/sunglasses/sechud/tajblind
|
||||
name = "sleek veil"
|
||||
@@ -141,6 +143,7 @@
|
||||
item_state = "tajblind_sec"
|
||||
prescription = 1
|
||||
body_parts_covered = EYES
|
||||
sprite_sheets = list(SPECIES_VOX = 'icons/inventory/eyes/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/glasses/meson/prescription/tajblind
|
||||
name = "industrial veil"
|
||||
@@ -151,6 +154,7 @@
|
||||
item_state = "tajblind_meson"
|
||||
off_state = "tajblind"
|
||||
body_parts_covered = EYES
|
||||
sprite_sheets = list(SPECIES_VOX = 'icons/inventory/eyes/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/glasses/material/prescription/tajblind
|
||||
name = "mining veil"
|
||||
@@ -161,6 +165,7 @@
|
||||
item_state = "tajblind_meson"
|
||||
off_state = "tajblind"
|
||||
body_parts_covered = EYES
|
||||
sprite_sheets = list(SPECIES_VOX = 'icons/inventory/eyes/mob_vox.dmi')
|
||||
|
||||
/obj/item/clothing/glasses
|
||||
sprite_sheets = list(
|
||||
|
||||
@@ -32,9 +32,28 @@
|
||||
/obj/item/clothing/head/hood/winter/talon
|
||||
name = "Talon winter hood"
|
||||
desc = "A cozy winter hood attached to a heavy winter jacket."
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "winterhood_talon"
|
||||
|
||||
// Centcom Winter Hood
|
||||
/obj/item/clothing/head/hood/winter/centcom
|
||||
name = "centcom winter hood"
|
||||
desc = "A cozy winter hood attached to a heavy winter jacket."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "winterhood_centcom"
|
||||
armor = list(melee = 40, bullet = 45, laser = 45, energy = 35, bomb = 40, bio = 25, rad = 25, fire = 35, acid = 50)
|
||||
|
||||
// SAR Winter Hood
|
||||
/obj/item/clothing/head/hood/winter/medical/sar
|
||||
name = "search and rescue winter hood"
|
||||
desc = "A cozy winter hood attached to a heavy winter jacket."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "winterhood_sar"
|
||||
armor = list(melee = 15, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 5)
|
||||
|
||||
//Food costumes
|
||||
// Hotdog suit hood
|
||||
/obj/item/clothing/head/hood_vr/hotdog_hood
|
||||
@@ -52,4 +71,25 @@
|
||||
icon = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "turnip_hood"
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
flags_inv = HIDEEARS|BLOCKHAIR
|
||||
|
||||
/obj/item/clothing/head/hood/winter
|
||||
sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/head/mob_vr_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/head/mob_vox.dmi')
|
||||
|
||||
//Better hoodies hood
|
||||
/obj/item/clothing/head/hood/toggleable
|
||||
name = "super special hood"
|
||||
desc = "This hood is so special that you weren't even supposed to lay eyes on it! Tell a developer!"
|
||||
var/open = FALSE
|
||||
|
||||
/obj/item/clothing/head/hood/toggleable/colorable
|
||||
name = "hoodie hood"
|
||||
desc = "It's the hood part of a hoodie. What kind of hoodie would it be without one? A poser, obviously."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "choodie"
|
||||
|
||||
/obj/item/clothing/head/hood/toggleable/colorable/update_icon()
|
||||
. = ..()
|
||||
icon_state = "[initial(icon_state)][open ? "_open" : ""]"
|
||||
@@ -14,7 +14,12 @@
|
||||
name = "halo"
|
||||
desc = "a small metal ring, floating above it's wearer."
|
||||
icon_state = "halo"
|
||||
|
||||
|
||||
/obj/item/clothing/head/headband/maid/modern
|
||||
name = "modern maid headband"
|
||||
desc = "Just like from my Japanese cartoons!"
|
||||
icon_state = "maid_headband"
|
||||
|
||||
/obj/item/clothing/head/pin
|
||||
icon_state = "pin"
|
||||
addblends = "pin_a"
|
||||
|
||||
@@ -92,8 +92,34 @@
|
||||
name = "pizza delivery visor"
|
||||
desc = "A fancy visor showing alignment to pizza delivery service. Extremely risky career choice."
|
||||
icon_state = "pizzadelivery"
|
||||
|
||||
/obj/item/clothing/head/wedding
|
||||
name = "wedding veil"
|
||||
desc = "A lace veil worn over the face, typically by a bride during their wedding."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "weddingveil"
|
||||
|
||||
/obj/item/clothing/head/halo/alt
|
||||
name = "metal halo"
|
||||
desc = "A halo made of a light metal. This one doesn't float, but it's still a circle on your head!"
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "halo_alt"
|
||||
|
||||
/obj/item/clothing/head/buckethat
|
||||
name = "bucket hat"
|
||||
desc = "Turns out these are actually called 'gatsby caps' but telling people you wear a bucket is slightly more interesting, so that's what it's called."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "buckethat"
|
||||
|
||||
/obj/item/clothing/head/nonla
|
||||
name = "non la"
|
||||
desc = "A conical hat typically woven from leaves, good for keeping the sun AND rain off your head, in case it happens to be sunny while raining."
|
||||
icon = 'icons/inventory/head/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/head/mob_vr.dmi'
|
||||
icon_state = "nonla"
|
||||
|
||||
//////////TALON HATS//////////
|
||||
|
||||
|
||||
@@ -1,4 +1,11 @@
|
||||
/obj/item/clothing/mask/emotions
|
||||
sprite_sheets = list(
|
||||
SPECIES_TESHARI = 'icons/inventory/face/mob_vr_teshari.dmi'
|
||||
)
|
||||
)
|
||||
|
||||
/obj/item/clothing/mask/lacemask
|
||||
name = "lace mask"
|
||||
desc = "A sheer lace mask that rests above the nose and trails down below the chin."
|
||||
icon = 'icons/inventory/face/item_vr.dmi'
|
||||
icon_state = "lace_mask"
|
||||
icon_override = 'icons/inventory/face/mob_vr.dmi'
|
||||
@@ -241,3 +241,13 @@
|
||||
icon_state = "jackboots"
|
||||
armor = list(melee = 80, bullet = 60, laser = 50,energy = 25, bomb = 50, bio = 10, rad = 0)
|
||||
siemens_coefficient = 0.6
|
||||
|
||||
/obj/item/clothing/shoes/boots/singer
|
||||
name = "blue performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "bsing"
|
||||
|
||||
/obj/item/clothing/shoes/boots/singer/yellow
|
||||
name = "yellow performer's boots"
|
||||
desc = "These boots were made for dancing."
|
||||
icon_state = "ysing"
|
||||
|
||||
@@ -39,14 +39,14 @@
|
||||
playsound(src, 'sound/effects/stealthoff.ogg', 50, 1, 1)
|
||||
user.visible_message("<span class='warning'>[user] dashes forward into the air!</span>")
|
||||
user.throw_at(target, jumpdistance, jumpspeed)
|
||||
recharging_time = world.time + recharging_rate
|
||||
recharging_time = world.time + recharging_rate
|
||||
|
||||
/obj/item/clothing/shoes/magboots/adv
|
||||
name = "advanced magboots"
|
||||
desc = "Advanced magnetic boots for a trained user. They have a lower magnetic force, allowing the user to move more quickly."
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/mob_vr.dmi'
|
||||
|
||||
|
||||
icon_state = "advmag0"
|
||||
item_flags = PHORONGUARD
|
||||
item_state_slots = list(slot_r_hand_str = "magboots", slot_l_hand_str = "magboots")
|
||||
@@ -69,13 +69,13 @@
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/item_vr.dmi'
|
||||
armor = list(melee = 80, bullet = 50, laser = 10, energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/knight/black
|
||||
name = "knight boots"
|
||||
desc = "A pair of olde knight boots."
|
||||
icon_state = "knight_boots2"
|
||||
item_state = "knight_boots2"
|
||||
|
||||
|
||||
// Costume Versions Here
|
||||
/obj/item/clothing/shoes/knight_costume
|
||||
name = "knight boots"
|
||||
@@ -84,9 +84,25 @@
|
||||
item_state = "knight_boots1"
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/item_vr.dmi'
|
||||
|
||||
|
||||
/obj/item/clothing/shoes/knight_costume/black
|
||||
name = "knight boots"
|
||||
desc = "A pair of olde knight boots."
|
||||
icon_state = "knight_boots2"
|
||||
item_state = "knight_boots2"
|
||||
item_state = "knight_boots2"
|
||||
|
||||
//Antediluvian legwraps
|
||||
/obj/item/clothing/shoes/antediluvian
|
||||
name = "antediluvian legwraps"
|
||||
desc = "A pair of wraps with gold inlay that cut off around the ankle."
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/mob_vr.dmi'
|
||||
icon_state = "antediluvian"
|
||||
item_state = "antediluvian"
|
||||
|
||||
//Alternative flats
|
||||
/obj/item/clothing/shoes/flats/white/color/alt
|
||||
icon = 'icons/inventory/feet/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/feet/mob_vr.dmi'
|
||||
icon_state = "flatsalt"
|
||||
item_state = "flatsalt"
|
||||
@@ -10,7 +10,7 @@
|
||||
center_of_mass = null
|
||||
flags = PHORONGUARD
|
||||
item_flags = THICKMATERIAL | AIRTIGHT | ALLOW_SURVIVALFOOD
|
||||
permeability_coefficient = 0.01
|
||||
permeability_coefficient = 0 //Chompedit was 0.01, zeroed to test protecting those who are vulnerable to water.
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 100, rad = 50)
|
||||
flags_inv = HIDEMASK|HIDEEARS|HIDEEYES|HIDEFACE|BLOCKHAIR
|
||||
body_parts_covered = HEAD|FACE|EYES
|
||||
@@ -72,7 +72,7 @@
|
||||
icon_state = "space"
|
||||
w_class = ITEMSIZE_HUGE // So you can't fit this in your bag and be prepared at all times.
|
||||
gas_transfer_coefficient = 0.01
|
||||
permeability_coefficient = 0.02
|
||||
permeability_coefficient = 0 //Chompedit was 0.01, zeroed to test protecting those who are vulnerable to water.
|
||||
flags = PHORONGUARD
|
||||
item_flags = THICKMATERIAL
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
@@ -32,8 +32,8 @@
|
||||
..()
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/proc/RemoveHood()
|
||||
icon_state = toggleicon
|
||||
hood_up = FALSE
|
||||
update_icon()
|
||||
hood.canremove = TRUE // This shouldn't matter anyways but just incase.
|
||||
if(ishuman(hood.loc))
|
||||
var/mob/living/carbon/H = hood.loc
|
||||
@@ -55,16 +55,20 @@
|
||||
to_chat(H, "<span class='warning'>You're already wearing something on your head!</span>")
|
||||
return
|
||||
else
|
||||
if(color != hood.color)
|
||||
hood.color = color
|
||||
H.equip_to_slot_if_possible(hood,slot_head,0,0,1)
|
||||
hood_up = TRUE
|
||||
hood.canremove = FALSE
|
||||
icon_state = "[toggleicon]_t"
|
||||
update_icon()
|
||||
H.update_inv_wear_suit()
|
||||
if(color != hood.color)
|
||||
hood.color = color
|
||||
else
|
||||
RemoveHood()
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/update_icon()
|
||||
. = ..()
|
||||
icon_state = "[toggleicon][hood_up ? "_t" : ""]"
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/costume
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|ARMS
|
||||
flags_inv = HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
@@ -207,7 +211,7 @@
|
||||
desc = "A heavy winter jacket. A white star of life is emblazoned on the back, with the words search and rescue written underneath."
|
||||
icon_state = "coatsar"
|
||||
armor = list(melee = 15, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 50, rad = 5)
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/medical
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/medical/sar //VOREStation edit: sar winter hood
|
||||
allowed = list (/obj/item/weapon/gun, /obj/item/weapon/pen, /obj/item/weapon/paper, /obj/item/device/flashlight, /obj/item/weapon/tank/emergency/oxygen, /obj/item/weapon/storage/fancy/cigarettes,
|
||||
/obj/item/weapon/storage/box/matches, /obj/item/weapon/reagent_containers/food/drinks/flask, /obj/item/device/suit_cooling_unit, /obj/item/device/analyzer, /obj/item/stack/medical,
|
||||
/obj/item/weapon/dnainjector, /obj/item/weapon/reagent_containers/dropper, /obj/item/weapon/reagent_containers/syringe, /obj/item/weapon/reagent_containers/hypospray,
|
||||
|
||||
@@ -74,7 +74,7 @@
|
||||
name = "Talon winter coat"
|
||||
desc = "A cozy winter coat, covered in thick fur and baring the colors of ITV Talon."
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/suit/mob_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "taloncoat"
|
||||
armor = list(melee = 0, bullet = 0, laser = 0,energy = 0, bomb = 0, bio = 0, rad = 0)
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/talon
|
||||
@@ -145,3 +145,37 @@
|
||||
name = "yellow-trimmed hoodie"
|
||||
desc = "A warm jacket, now featuring a hood and an eye-catching yellow trim!"
|
||||
icon_state = "hoodie_yellowtrim"
|
||||
|
||||
// CC Winter Coat
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat/centcom
|
||||
name = "centcom winter coat"
|
||||
desc = "A cozy winter coat, covered in green fur and the colors of CentCom. Armored for extra protection."
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "coatcentcom"
|
||||
armor = list(melee = 40, bullet = 45, laser = 45, energy = 35, bomb = 40, bio = 25, rad = 25, fire = 35, acid = 50) //there is no cc armor here to base it off so, here's the values from the original cc coat
|
||||
hoodtype = /obj/item/clothing/head/hood/winter/centcom
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/wintercoat
|
||||
sprite_sheets = list( SPECIES_TESHARI = 'icons/inventory/suit/mob_vr_teshari.dmi',
|
||||
SPECIES_VOX = 'icons/inventory/suit/mob_vox.dmi')
|
||||
|
||||
//Hoodies worth their weight in gold (as in you can unbutton them and toggle the hood independently)
|
||||
/obj/item/clothing/suit/storage/hooded/toggle/colorable
|
||||
name = "hoodie"
|
||||
desc = "A rather plain hoodie. If you can't find it in your closet, chances are your significant other is borrowing it."
|
||||
icon = 'icons/inventory/suit/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/suit/mob_vr.dmi'
|
||||
icon_state = "choodie"
|
||||
hoodtype = /obj/item/clothing/head/hood/toggleable/colorable
|
||||
open = FALSE
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/toggle/colorable/sleeveless
|
||||
name = "sleeveless hoodie"
|
||||
desc = "Either your arms were too hot or the sleeves vaporized when you gave someone a 'gunshow' with your muscles. Either way, the sleeves are missing."
|
||||
icon_state = "choodie_sleeveless"
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/toggle/colorable/cropped
|
||||
name = "cropped hoodie"
|
||||
desc = "It's not that this is a size too small, you just like showing off your tum. I guess."
|
||||
icon_state = "choodie_crop"
|
||||
@@ -277,6 +277,12 @@
|
||||
flags_inv = HIDESHOES|HIDEJUMPSUIT|HIDETIE|HIDEHOLSTER
|
||||
item_state_slots = list(slot_r_hand_str = "red_labcoat", slot_l_hand_str = "red_labcoat")
|
||||
|
||||
/obj/item/clothing/suit/shrine_maiden
|
||||
name = "shrine maiden costume"
|
||||
desc = "Makes you want to exterminate some troublesome youkai."
|
||||
icon_state = "shrine_maiden"
|
||||
body_parts_covered = LOWER_TORSO|UPPER_TORSO|LEGS|ARMS
|
||||
|
||||
/*
|
||||
* Misc
|
||||
*/
|
||||
|
||||
@@ -68,19 +68,27 @@
|
||||
|
||||
if(open == 1) //Will check whether icon state is currently set to the "open" or "closed" state and switch it around with a message to the user
|
||||
open = 0
|
||||
icon_state = initial(icon_state)
|
||||
update_icon()
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
to_chat(usr, "You button up the coat.")
|
||||
else if(open == 0)
|
||||
open = 1
|
||||
icon_state = "[icon_state]_open"
|
||||
update_icon()
|
||||
flags_inv = HIDEHOLSTER
|
||||
to_chat(usr, "You unbutton the coat.")
|
||||
else //in case some goofy admin switches icon states around without switching the icon_open or icon_closed
|
||||
to_chat(usr, "You attempt to button-up the velcro on your [src], before promptly realising how silly you are.")
|
||||
return
|
||||
update_clothing_icon() //so our overlays update
|
||||
if(istype(hood,/obj/item/clothing/head/hood/toggleable)) //checks if a hood (which you should use) is attached
|
||||
var/obj/item/clothing/head/hood/toggleable/T = hood
|
||||
T.open = open //copy the jacket's open state to the hood
|
||||
T.update_icon(usr) //usr as an arg to fix a weird runtime
|
||||
T.update_clothing_icon()
|
||||
update_clothing_icon() //so our overlays update
|
||||
|
||||
/obj/item/clothing/suit/storage/hooded/toggle/update_icon()
|
||||
. = ..()
|
||||
icon_state = "[toggleicon][open ? "_open" : ""][hood_up ? "_t" : ""]"
|
||||
|
||||
//New Vest 4 pocket storage and badge toggles, until suit accessories are a thing.
|
||||
/obj/item/clothing/suit/storage/vest/heavy/New()
|
||||
|
||||
@@ -171,6 +171,24 @@
|
||||
name = "white bow tie"
|
||||
icon_state = "whitebowtie"
|
||||
|
||||
/obj/item/clothing/accessory/maid_neck
|
||||
name = "maid neck cover"
|
||||
desc = "A neckpiece for a maid costume, it smells faintly of disappointment."
|
||||
icon_state = "maid_neck"
|
||||
|
||||
/obj/item/clothing/accessory/maidcorset
|
||||
name = "maid corset"
|
||||
desc = "The final touch that holds it all together."
|
||||
icon_state = "maidcorset"
|
||||
|
||||
/obj/item/clothing/accessory/maid_arms
|
||||
name = "maid arm covers"
|
||||
desc = "Cylindrical looking tubes that go over your arms, weird."
|
||||
slot_flags = SLOT_OCLOTHING | SLOT_GLOVES | SLOT_TIE
|
||||
body_parts_covered = ARMS
|
||||
description_info = "Wearable as gloves, or attachable to uniforms. May visually conflict with actual gloves when attached to uniforms. Caveat emptor."
|
||||
icon_state = "maid_arms"
|
||||
|
||||
/obj/item/clothing/accessory/stethoscope
|
||||
name = "stethoscope"
|
||||
desc = "An outdated medical apparatus for listening to the sounds of the human body. It also makes you look like you know what you're doing."
|
||||
@@ -603,4 +621,4 @@
|
||||
|
||||
/obj/item/clothing/accessory/pride/vore
|
||||
name = "vore pride pin"
|
||||
icon_state = "pride_vore"
|
||||
icon_state = "pride_vore"
|
||||
|
||||
@@ -436,3 +436,253 @@
|
||||
icon_state = "casinoslave_owned"
|
||||
item_state = "casinoslave_owned"
|
||||
overlay_state = "casinoslave_owned"
|
||||
|
||||
//The gold trim from one of the qipaos, separated to an accessory to preserve the color
|
||||
/obj/item/clothing/accessory/qipaogold
|
||||
name = "gold trim"
|
||||
desc = "Gold trim belonging to a qipao. Why would you remove this?"
|
||||
icon = 'icons/inventory/accessory/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/accessory/mob_vr.dmi'
|
||||
icon_state = "qipaogold"
|
||||
item_state = "qipaogold"
|
||||
overlay_state = "qipaogold"
|
||||
|
||||
//Antediluvian accessory set
|
||||
/obj/item/clothing/accessory/antediluvian
|
||||
name = "antediluvian bracers"
|
||||
desc = "A pair of metal bracers with gold inlay. They're thin and light."
|
||||
icon = 'icons/inventory/accessory/item_vr.dmi'
|
||||
icon_override = 'icons/inventory/accessory/mob_vr.dmi'
|
||||
icon_state = "antediluvian"
|
||||
item_state = "antediluvian"
|
||||
overlay_state = "antediluvian"
|
||||
body_parts_covered = ARMS
|
||||
|
||||
/obj/item/clothing/accessory/antediluvian/loincloth
|
||||
name = "antediluvian loincloth"
|
||||
desc = "A lengthy loincloth that drapes over the loins, obviously. It's quite long."
|
||||
icon_state = "antediluvian_loin"
|
||||
item_state = "antediluvian_loin"
|
||||
overlay_state = "antediluvian_loin"
|
||||
body_parts_covered = LOWER_TORSO
|
||||
|
||||
//The cloaks below belong to this _vr file but their sprites are contained in non-_vr icon files due to
|
||||
//the way the poncho/cloak equipped() proc works. Sorry for the inconvenience
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/antediluvian
|
||||
name = "antediluvian cloak"
|
||||
desc = "A regal looking cloak of white with specks of gold woven into the fabric."
|
||||
icon_state = "antediluvian_cloak"
|
||||
item_state = "antediluvian_cloak"
|
||||
|
||||
//Other clothes that I'm too lazy to port to Polaris
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/chapel
|
||||
name = "bishop's cloak"
|
||||
desc = "An elaborate white and gold cloak."
|
||||
icon_state = "bishopcloak"
|
||||
item_state = "bishopcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/chapel/alt
|
||||
name = "antibishop's cloak"
|
||||
desc = "An elaborate black and gold cloak. It looks just a little bit evil."
|
||||
icon_state = "blackbishopcloak"
|
||||
item_state = "blackbishopcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/half
|
||||
name = "rough half cloak"
|
||||
desc = "The latest fashion innovations by the Nanotrasen Uniform & Fashion Department have provided the brilliant invention of slicing a regular cloak in half! All the ponce, half the cost!"
|
||||
icon_state = "roughcloak"
|
||||
item_state = "roughcloak"
|
||||
action_button_name = "Adjust Cloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/half/update_clothing_icon()
|
||||
. = ..()
|
||||
if(ismob(src.loc))
|
||||
var/mob/M = src.loc
|
||||
M.update_inv_wear_suit()
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/half/attack_self(mob/user as mob)
|
||||
if(src.icon_state == initial(icon_state))
|
||||
src.icon_state = "[icon_state]_open"
|
||||
src.item_state = "[item_state]_open"
|
||||
flags_inv = HIDETIE|HIDEHOLSTER
|
||||
to_chat(user, "You flip the cloak over your shoulder.")
|
||||
else
|
||||
src.icon_state = initial(icon_state)
|
||||
src.item_state = initial(item_state)
|
||||
flags_inv = HIDEHOLSTER
|
||||
to_chat(user, "You pull the cloak over your shoulder.")
|
||||
update_clothing_icon()
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shoulder
|
||||
name = "shoulder cloak"
|
||||
desc = "A small cape that primarily covers the left shoulder. Might help you stand out more, not necessarily for the right reasons."
|
||||
icon_state = "cape_left"
|
||||
item_state = "cape_left"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shoulder/right
|
||||
desc = "A small cape that primarily covers the right shoulder. It might look a tad cooler if it was longer."
|
||||
icon_state = "cape_right"
|
||||
item_state = "cape_right"
|
||||
|
||||
//Mantles
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle
|
||||
name = "shoulder mantle"
|
||||
desc = "Not a cloak and not really a cape either, but a silky fabric that rests on the neck and shoulders alone."
|
||||
icon_state = "mantle"
|
||||
item_state = "mantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cargo
|
||||
name = "cargo mantle"
|
||||
desc = "A shoulder mantle bearing the colors of the Supply department, with a gold lapel emblazoned upon the front."
|
||||
icon_state = "qmmantle"
|
||||
item_state = "qmmantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/security
|
||||
name = "security mantle"
|
||||
desc = "A shoulder mantle bearing the colors of the Security department, featuring rugged molding around the collar."
|
||||
icon_state = "hosmantle"
|
||||
item_state = "hosmantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/engineering
|
||||
name = "engineering mantle"
|
||||
desc = "A shoulder mantle bearing the colors of the Engineering department, accenting the pristine white fabric."
|
||||
icon_state = "cemantle"
|
||||
item_state = "cemantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/research
|
||||
name = "research mantle"
|
||||
desc = "A shoulder mantle bearing the colors of the Research department, the material slick and hydrophobic."
|
||||
icon_state = "rdmantle"
|
||||
item_state = "rdmantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/medical
|
||||
name = "medical mantle"
|
||||
desc = "A shoulder mantle bearing the general colors of the Medical department, dyed a sterile nitrile cyan."
|
||||
icon_state = "cmomantle"
|
||||
item_state = "cmomantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/hop
|
||||
name = "head of personnel mantle"
|
||||
desc = "A shoulder mantle bearing the colors of the Head of Personnel's uniform, featuring the typical royal blue contrasted by authoritative red."
|
||||
icon_state = "hopmantle"
|
||||
item_state = "hopmantle"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/mantle/cap
|
||||
name = "site manager mantle"
|
||||
desc = "A shoulder mantle bearing the colors usually found on a Site Manager, a commanding blue with regal gold inlay."
|
||||
icon_state = "capmantle"
|
||||
item_state = "capmantle"
|
||||
|
||||
//Boat cloaks
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat
|
||||
name = "boat cloak"
|
||||
desc = "A cloak that might've been worn on boats once or twice. It's just a flappy cape otherwise."
|
||||
icon_state = "boatcloak"
|
||||
item_state = "boatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/cap
|
||||
name = "site manager boat cloak"
|
||||
icon_state = "capboatcloak"
|
||||
item_state = "capboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/hop
|
||||
name = "head of personnel boat cloak"
|
||||
icon_state = "hopboatcloak"
|
||||
item_state = "hopboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/security
|
||||
name = "security boat cloak"
|
||||
icon_state = "secboatcloak"
|
||||
item_state = "secboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/engineering
|
||||
name = "engineering boat cloak"
|
||||
icon_state = "engboatcloak"
|
||||
item_state = "engboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/atmos
|
||||
name = "atmospherics boat cloak"
|
||||
icon_state = "atmosboatcloak"
|
||||
item_state = "atmosboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/medical
|
||||
name = "medical boat cloak"
|
||||
icon_state = "medboatcloak"
|
||||
item_state = "medboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/service
|
||||
name = "service boat cloak"
|
||||
icon_state = "botboatcloak"
|
||||
item_state = "botboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/cargo
|
||||
name = "cargo boat cloak"
|
||||
icon_state = "supboatcloak"
|
||||
item_state = "supboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/mining
|
||||
name = "mining boat cloak"
|
||||
icon_state = "minboatcloak"
|
||||
item_state = "minboatcloak"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/boat/science
|
||||
name = "research boat cloak"
|
||||
icon_state = "sciboatcloak"
|
||||
item_state = "sciboatcloak"
|
||||
|
||||
//Shrouds
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud
|
||||
name = "shroud cape"
|
||||
desc = "A sharp looking cape that covers more of one side than the other. Just a bit edgy."
|
||||
icon_state = "shroud"
|
||||
item_state = "shroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cap
|
||||
name = "site manager shroud"
|
||||
icon_state = "capshroud"
|
||||
item_state = "capshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/hop
|
||||
name = "head of personnel shroud"
|
||||
icon_state = "hopshroud"
|
||||
item_state = "hopshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/security
|
||||
name = "security shroud"
|
||||
icon_state = "secshroud"
|
||||
item_state = "secshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/engineering
|
||||
name = "engineering shroud"
|
||||
icon_state = "engshroud"
|
||||
item_state = "engshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/atmos
|
||||
name = "atmospherics shroud"
|
||||
icon_state = "atmosshroud"
|
||||
item_state = "atmosshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/medical
|
||||
name = "medical shroud"
|
||||
icon_state = "medshroud"
|
||||
item_state = "medshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/service
|
||||
name = "service shroud"
|
||||
icon_state = "botshroud"
|
||||
item_state = "botshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/cargo
|
||||
name = "cargo shroud"
|
||||
icon_state = "supshroud"
|
||||
item_state = "supshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/mining
|
||||
name = "mining shroud"
|
||||
icon_state = "minshroud"
|
||||
item_state = "minshroud"
|
||||
|
||||
/obj/item/clothing/accessory/poncho/roles/cloak/shroud/science
|
||||
name = "research shroud"
|
||||
icon_state = "scishroud"
|
||||
item_state = "scishroud"
|
||||
|
||||
@@ -360,6 +360,11 @@
|
||||
desc = "You must be a bit risque teasing all of them in a maid uniform!"
|
||||
icon_state = "sexymaid"
|
||||
|
||||
/obj/item/clothing/under/dress/maid/under_maid
|
||||
name = "modern maid costume"
|
||||
desc = "You're going to use this for housekeeping, right?"
|
||||
icon_state = "under_maid"
|
||||
|
||||
/obj/item/clothing/under/dress/dress_fire
|
||||
name = "flame dress"
|
||||
desc = "A small black dress with blue flames print on it."
|
||||
@@ -587,6 +592,16 @@
|
||||
desc = "A waistline this high is just made for ripping bodices, swashing buckles, or - just occasionally - sucking blood."
|
||||
icon_state = "gayvampire"
|
||||
|
||||
/obj/item/clothing/under/dress/singer
|
||||
name = "blue singer dress"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon_state = "bsing"
|
||||
|
||||
/obj/item/clothing/under/dress/singer/yellow
|
||||
name = "yellow singer dress"
|
||||
desc = "Just looking at this makes you want to sing."
|
||||
icon_state = "ysing"
|
||||
|
||||
/*
|
||||
* Wedding Stuff
|
||||
*/
|
||||
|
||||
@@ -8,3 +8,12 @@
|
||||
|
||||
/obj/item/clothing/under/sexybunny_white/sexybunny_black
|
||||
icon_state = "sexybunny_black"
|
||||
|
||||
/obj/item/clothing/under/cohesion
|
||||
permeability_coefficient = 0 //Should have this anyway
|
||||
|
||||
/obj/item/clothing/under/cohesion/striped/testpartial //testing better coverage.
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
/obj/item/clothing/under/cohesion/striped/testfull //testing both, but with full coverage.
|
||||
body_parts_covered = HEAD|UPPER_TORSO|LOWER_TORSO|LEGS|FEET|ARMS|HANDS
|
||||
|
||||
@@ -205,6 +205,10 @@
|
||||
icon_state = "qipao_white"
|
||||
item_state = "qipao_white"
|
||||
|
||||
/obj/item/clothing/under/qipao/white/colorable
|
||||
name = "qipao"
|
||||
starting_accessories = list(/obj/item/clothing/accessory/qipaogold)
|
||||
|
||||
/obj/item/clothing/under/qipao/red
|
||||
name = "red qipao"
|
||||
icon_state = "qipao_red"
|
||||
@@ -488,3 +492,98 @@
|
||||
item_state = "qipao2"
|
||||
worn_state = "qipao2"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/dress/antediluvian
|
||||
name = "antediluvian corset"
|
||||
desc = "A regal black and gold tight corset with silky sleeves. A sheer bodystocking accompanies it."
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "antediluvian"
|
||||
item_state = "antediluvian"
|
||||
worn_state = "antediluvian"
|
||||
body_parts_covered = UPPER_TORSO|LOWER_TORSO
|
||||
|
||||
/obj/item/clothing/under/dress/antediluvian/sheerless
|
||||
desc = "A regal black and gold tight corset with silky sleeves. This one is just the corset and sleeves, sans lace stockings and gloves."
|
||||
worn_state = "antediluvian_c"
|
||||
|
||||
//Colorable skirts
|
||||
/obj/item/clothing/under/skirt/colorable
|
||||
name = "skirt"
|
||||
desc = "A rather plain looking skirt."
|
||||
icon = 'icons/inventory/uniform/item_vr.dmi'
|
||||
default_worn_icon = 'icons/inventory/uniform/mob_vr.dmi'
|
||||
icon_state = "skirt_casual"
|
||||
item_state = "skirt_casual"
|
||||
worn_state = "skirt_casual"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/puffy
|
||||
icon_state = "skirt_puffy"
|
||||
item_state = "skirt_puffy"
|
||||
worn_state = "skirt_puffy"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/skater
|
||||
desc = "A skirt with loose frills."
|
||||
icon_state = "skirt_skater"
|
||||
item_state = "skirt_skater"
|
||||
worn_state = "skirt_skater"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/pleated
|
||||
desc = "A short skirt featuring pleat trailing up from the hem."
|
||||
icon_state = "skirt_pleated"
|
||||
item_state = "skirt_pleated"
|
||||
worn_state = "skirt_pleated"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/pencil
|
||||
name = "pencil skirt"
|
||||
desc = "A short skirt that's almost as thin as a pencil. Almost."
|
||||
icon_state = "skirt_pencil"
|
||||
item_state = "skirt_pencil"
|
||||
worn_state = "skirt_pencil"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/plaid
|
||||
name = "plaid skirt"
|
||||
desc = "A skirt featuring a plaid pattern."
|
||||
icon_state = "skirt_plaid"
|
||||
item_state = "skirt_plaid"
|
||||
worn_state = "skirt_plaid"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/tube
|
||||
desc = "A long thin skirt that trails beyond the knees."
|
||||
icon_state = "skirt_tube"
|
||||
item_state = "skirt_tube"
|
||||
worn_state = "skirt_tube"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/long
|
||||
name = "long skirt"
|
||||
icon_state = "skirt_long"
|
||||
item_state = "skirt_long"
|
||||
worn_state = "skirt_long"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/high
|
||||
name = "high skirt"
|
||||
desc = "A skirt that rests at the waist instead of the hips."
|
||||
icon_state = "skirt_high"
|
||||
item_state = "skirt_high"
|
||||
worn_state = "skirt_high"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/swept
|
||||
name = "swept skirt"
|
||||
desc = "A skirt with an angled hem; shorter on one side, longer on the other, like a sweep."
|
||||
icon_state = "skirt_swept"
|
||||
item_state = "skirt_swept"
|
||||
worn_state = "skirt_swept"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/jumper
|
||||
name = "jumper skirt"
|
||||
desc = "A skirt that's held up by suspenders."
|
||||
icon_state = "skirt_jumper"
|
||||
item_state = "skirt_jumper"
|
||||
worn_state = "skirt_jumper"
|
||||
|
||||
/obj/item/clothing/under/skirt/colorable/jumperdress
|
||||
name = "jumper dress"
|
||||
desc = "A dress held up by suspenders. Not quite a skirt anymore."
|
||||
icon_state = "skirt_jumperdress"
|
||||
item_state = "skirt_jumperdress"
|
||||
worn_state = "skirt_jumperdress"
|
||||
@@ -1527,7 +1527,17 @@
|
||||
/obj/item/clothing/shoes/knight_costume = 3,
|
||||
/obj/item/clothing/shoes/knight_costume/black = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/hotdog = 3,
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 3)
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 3,
|
||||
/obj/item/clothing/under/dress/singer = 3,
|
||||
/obj/item/clothing/shoes/boots/singer = 3,
|
||||
/obj/item/clothing/under/dress/singer/yellow = 3,
|
||||
/obj/item/clothing/shoes/boots/singer/yellow = 3,
|
||||
/obj/item/clothing/under/dress/maid/under_maid = 3,
|
||||
/obj/item/clothing/accessory/maid_neck = 3,
|
||||
/obj/item/clothing/accessory/maid_arms = 3,
|
||||
/obj/item/clothing/head/headband/maid/modern = 3,
|
||||
/obj/item/clothing/accessory/maidcorset = 3,
|
||||
/obj/item/clothing/suit/shrine_maiden = 3)
|
||||
prices = list(/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
|
||||
/obj/item/clothing/suit/storage/hooded/costume/carp = 200,
|
||||
/obj/item/clothing/suit/chickensuit = 200,
|
||||
@@ -1594,7 +1604,17 @@
|
||||
/obj/item/clothing/shoes/knight_costume = 200,
|
||||
/obj/item/clothing/shoes/knight_costume/black = 200,
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/hotdog = 200,
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 200)
|
||||
/obj/item/clothing/suit/storage/hooded/foodcostume/turnip = 200,
|
||||
/obj/item/clothing/under/dress/singer = 200,
|
||||
/obj/item/clothing/shoes/boots/singer = 50,
|
||||
/obj/item/clothing/under/dress/singer/yellow = 200,
|
||||
/obj/item/clothing/shoes/boots/singer/yellow = 50,
|
||||
/obj/item/clothing/under/dress/maid/under_maid = 200,
|
||||
/obj/item/clothing/accessory/maid_neck = 25,
|
||||
/obj/item/clothing/accessory/maid_arms = 25,
|
||||
/obj/item/clothing/head/headband/maid/modern = 25,
|
||||
/obj/item/clothing/accessory/maidcorset = 25,
|
||||
/obj/item/clothing/suit/shrine_maiden = 200)
|
||||
premium = list(/obj/item/clothing/suit/imperium_monk = 3,
|
||||
/obj/item/clothing/suit/barding/agatha = 2,
|
||||
/obj/item/clothing/suit/barding/alt_agatha = 2,
|
||||
@@ -1753,7 +1773,17 @@
|
||||
/obj/item/clothing/gloves/combat/knight_costume = 3,
|
||||
/obj/item/clothing/gloves/combat/knight_costume/brown = 3,
|
||||
/obj/item/clothing/shoes/knight_costume = 3,
|
||||
/obj/item/clothing/shoes/knight_costume/black = 3)
|
||||
/obj/item/clothing/shoes/knight_costume/black = 3,
|
||||
/obj/item/clothing/under/dress/singer = 3,
|
||||
/obj/item/clothing/shoes/boots/singer = 3,
|
||||
/obj/item/clothing/under/dress/singer/yellow = 3,
|
||||
/obj/item/clothing/shoes/boots/singer/yellow = 3,
|
||||
/obj/item/clothing/under/dress/maid/under_maid = 3,
|
||||
/obj/item/clothing/accessory/maid_neck = 3,
|
||||
/obj/item/clothing/accessory/maid_arms = 3,
|
||||
/obj/item/clothing/head/headband/maid/modern = 3,
|
||||
/obj/item/clothing/accessory/maidcorset = 3,
|
||||
/obj/item/clothing/suit/shrine_maiden = 3)
|
||||
|
||||
// Event Loadout Vending Machines Start
|
||||
|
||||
@@ -2541,7 +2571,17 @@
|
||||
/obj/item/clothing/suit/barding/mason = 2,
|
||||
/obj/item/clothing/suit/drake_cloak = 2,
|
||||
/obj/item/clothing/head/syndicatefake = 1,
|
||||
/obj/item/clothing/suit/syndicatefake = 1
|
||||
/obj/item/clothing/suit/syndicatefake = 1,
|
||||
/obj/item/clothing/under/dress/singer = 3,
|
||||
/obj/item/clothing/shoes/boots/singer = 3,
|
||||
/obj/item/clothing/under/dress/singer/yellow = 3,
|
||||
/obj/item/clothing/shoes/boots/singer/yellow = 3,
|
||||
/obj/item/clothing/under/dress/maid/under_maid = 3,
|
||||
/obj/item/clothing/accessory/maid_neck = 3,
|
||||
/obj/item/clothing/accessory/maid_arms = 3,
|
||||
/obj/item/clothing/head/headband/maid/modern = 3,
|
||||
/obj/item/clothing/accessory/maidcorset = 3,
|
||||
/obj/item/clothing/suit/shrine_maiden = 3
|
||||
)
|
||||
|
||||
// Event Loadout Vending Machines End
|
||||
|
||||
@@ -190,6 +190,21 @@
|
||||
emote_sound = 'sound/effects/warble.ogg' // Copyright CC BY 3.0 alienistcog (freesound.org) for the sound.
|
||||
emote_message_3p = "warbles."
|
||||
|
||||
/decl/emote/audible/croon
|
||||
key = "croon"
|
||||
emote_message_3p = "croons..."
|
||||
emote_sound = list('sound/voice/croon1.ogg', 'sound/voice/croon2.ogg')
|
||||
|
||||
/decl/emote/audible/lwarble
|
||||
key = "lwarble"
|
||||
emote_message_3p = "lets out a low, throaty warble!"
|
||||
emote_sound = 'sound/voice/lwarble.ogg'
|
||||
|
||||
/decl/emote/audible/croak_skrell
|
||||
key = "scroak"
|
||||
emote_message_3p = "croaks!"
|
||||
emote_sound = 'sound/voice/croak_skrell.ogg'
|
||||
|
||||
/decl/emote/audible/vox_shriek
|
||||
key = "shriek"
|
||||
emote_message_3p = "SHRIEKS!"
|
||||
|
||||
@@ -123,7 +123,7 @@
|
||||
/decl/emote/audible/croak
|
||||
key = "croak"
|
||||
emote_message_3p = "rumbles their throat, puffs their cheeks and croaks."
|
||||
emote_sound = 'sound/voice/Croak.ogg'
|
||||
emote_sound = 'sound/voice/croak_frog.ogg'
|
||||
/decl/emote/audible/gao
|
||||
key = "gao"
|
||||
emote_message_3p = "lets out a gao."
|
||||
@@ -198,6 +198,10 @@
|
||||
emote_sound = pick(smolsound)
|
||||
else
|
||||
emote_sound = pick(bigsound)
|
||||
else if(istype(user, /mob/living/silicon/pai))
|
||||
var/mob/living/silicon/pai/me = user
|
||||
if(me.chassis == "teppi")
|
||||
emote_sound = pick(bigsound)
|
||||
else if(user.size_multiplier >= 1.5)
|
||||
emote_sound = pick(bigsound)
|
||||
else
|
||||
|
||||
@@ -1,12 +1,13 @@
|
||||
/decl/emote/audible/scream/get_emote_sound(var/atom/user)
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.get_gender() == FEMALE)
|
||||
return list(
|
||||
"sound" = H.species.female_scream_sound,
|
||||
"vol" = emote_volume
|
||||
)
|
||||
else
|
||||
return list(
|
||||
"sound" = H.species.male_scream_sound,
|
||||
"vol" = emote_volume
|
||||
)
|
||||
if(ishuman(user))
|
||||
var/mob/living/carbon/human/H = user
|
||||
if(H.get_gender() == FEMALE)
|
||||
return list(
|
||||
"sound" = H.species.female_scream_sound,
|
||||
"vol" = emote_volume
|
||||
)
|
||||
else
|
||||
return list(
|
||||
"sound" = H.species.male_scream_sound,
|
||||
"vol" = emote_volume
|
||||
)
|
||||
@@ -13,7 +13,14 @@
|
||||
var/obj/item/organ/external/L = H.get_organ(limb)
|
||||
if(istype(L) && L.is_usable() && !L.splinted)
|
||||
return TRUE
|
||||
return FALSE
|
||||
else if(isanimal(user)) //VOREStation Addition Start
|
||||
var/mob/living/simple_mob/S = user
|
||||
if(S.has_hands)
|
||||
return TRUE
|
||||
else if(ispAI(user))
|
||||
return TRUE
|
||||
else //VOREStation Addition End
|
||||
return FALSE
|
||||
|
||||
/decl/emote/audible/snap/do_emote(var/atom/user, var/extra_params)
|
||||
if(!can_snap(user))
|
||||
|
||||
@@ -116,7 +116,7 @@
|
||||
|
||||
/decl/emote/visible/faint/do_extra(var/mob/user)
|
||||
. = ..()
|
||||
if(istype(user) && !user.sleeping)
|
||||
if(iscarbon(user) && !user.sleeping)
|
||||
user.Sleeping(10)
|
||||
|
||||
/decl/emote/visible/frown
|
||||
|
||||
@@ -46,6 +46,7 @@
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Shipping Error", /datum/event/shipping_error , 30, list(ASSIGNMENT_ANY = 2), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Trivial News", /datum/event/trivial_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lore News", /datum/event/lore_news, 400),
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
|
||||
// Spawns mice, lizards, or dud spiderlings
|
||||
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_JANITOR = 100), 1),
|
||||
// Rot only weakens walls, not destroy them
|
||||
@@ -94,6 +95,7 @@
|
||||
// Radiation, but only in space.
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Solar Storm", /datum/event/solar_storm, 20, list(ASSIGNMENT_ENGINEER = 40, ASSIGNMENT_SECURITY = 20), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Spider Infestation", /datum/event/spider_infestation, -20, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_HOS = 20, ASSIGNMENT_WARDEN = 20), 0, min_jobs = list(ASSIGNMENT_SECURITY = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Virology Breach", /datum/event/prison_break/virology, 0, list(ASSIGNMENT_MEDICAL = 100), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Xenobiology Breach", /datum/event/prison_break/xenobiology, 0, list(ASSIGNMENT_SCIENCE = 100), 1, min_jobs = list(ASSIGNMENT_SCIENTIST = 1), min_jobs = list(ASSIGNMENT_SCIENTIST = 1, ASSIGNMENT_SECURITY =1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MODERATE, "Jellyfish School", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
|
||||
@@ -116,12 +118,14 @@
|
||||
available_events = list(
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Nothing", /datum/event/nothing, 900),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Atmos Leak", /datum/event/atmos_leak, 5, list(ASSIGNMENT_ENGINEER = 35), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, -100, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ENGINEER = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Blob", /datum/event/blob, -100, list(ASSIGNMENT_SECURITY = 40, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ENGINEER = 5), 1, min_jobs = list(ASSIGNMENT_SECURITY = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Carp Migration", /datum/event/carp_migration, -110, list(ASSIGNMENT_SECURITY = 50, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10), 1, min_jobs = list(ASSIGNMENT_SECURITY = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Jellyfish Migration", /datum/event/jellyfish_migration, 5, list(ASSIGNMENT_ANY = 1, ASSIGNMENT_SECURITY = 5, ASSIGNMENT_MEDICAL = 3), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, -110, list(ASSIGNMENT_ENGINEER = 50), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 3)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Metroid Infestation", /datum/event/metroid_infestation, -105, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_SCIENCE = 20, ASSIGNMENT_HOS = 15, ASSIGNMENT_WARDEN = 15), 1 , min_jobs = list(ASSIGNMENT_SECURITY = 3, ASSIGNMENT_SCIENCE = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Wave", /datum/event/meteor_wave, -90, list(ASSIGNMENT_ENGINEER = 50, ASSIGNMENT_MEDICAL = 10, ASSIGNMENT_ANY = 1), 1, min_jobs = list(ASSIGNMENT_ENGINEER = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Metroid Infestation", /datum/event/metroid_infestation, -100, list(ASSIGNMENT_SECURITY = 30, ASSIGNMENT_SCIENCE = 20, ASSIGNMENT_HOS = 15, ASSIGNMENT_WARDEN = 15, ASSIGNMENT_ANY = 2), 1 , min_jobs = list(ASSIGNMENT_SECURITY = 2, ASSIGNMENT_SCIENCE = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Space Vines", /datum/event/spacevine, 20, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Spider Infestation", /datum/event/spider_infestation, -60, list(ASSIGNMENT_SECURITY = 20, ASSIGNMENT_HOS = 10, ASSIGNMENT_WARDEN = 10, ASSIGNMENT_ANY = 3), 0),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Viral Infection", /datum/event/viral_infection, -50, list(ASSIGNMENT_MEDICAL = 25), 1, min_jobs = list(ASSIGNMENT_MEDICAL = 2)),
|
||||
)
|
||||
add_disabled_events(list(
|
||||
@@ -129,7 +133,6 @@
|
||||
//Needs Xenobio containment breach fixed
|
||||
//new /datum/event_meta(EVENT_LEVEL_MAJOR, "Xenobiology Breach", /datum/event/prison_break/xenobiology, -10, list(ASSIGNMENT_SCIENCE = 30, ASSIGNMENT_ENGINEER = 20), 1),
|
||||
//new /datum/event_meta(EVENT_LEVEL_MAJOR, "Meteor Strike", /datum/event/meteor_strike, 10, list(ASSIGNMENT_ENGINEER = 15), 1),
|
||||
new /datum/event_meta(EVENT_LEVEL_MAJOR, "Supply Demand", /datum/event/supply_demand, 0, list(ASSIGNMENT_ANY = 5, ASSIGNMENT_SCIENCE = 15, ASSIGNMENT_GARDENER = 10, ASSIGNMENT_ENGINEER = 10, ASSIGNMENT_MEDICAL = 15), 1, min_jobs = list(ASSIGNMENT_CARGO = 1)),
|
||||
))
|
||||
|
||||
#undef ASSIGNMENT_ANY
|
||||
|
||||
@@ -4,11 +4,17 @@
|
||||
var/spawncount = 1
|
||||
var/list/vents = list()
|
||||
var/give_positions = 0
|
||||
var/active_metroid_event = TRUE
|
||||
|
||||
/datum/event/metroid_infestation/setup()
|
||||
if(prob(50)) //50% chance of the event to even occur if procced
|
||||
active_metroid_event = FALSE
|
||||
kill()
|
||||
return
|
||||
active_metroid_event = TRUE
|
||||
announceWhen = rand(announceWhen, announceWhen + 60)
|
||||
|
||||
spawncount = rand(1 * severity, 2 * severity)
|
||||
spawncount = rand(2 * severity, 4 * severity)
|
||||
|
||||
for(var/obj/machinery/atmospherics/unary/vent_pump/temp_vent in machines)
|
||||
//CHOMPEdit: Added a couple areas to the exclusion. Also made this actually work.
|
||||
@@ -25,7 +31,15 @@
|
||||
/datum/event/metroid_infestation/start()
|
||||
while((spawncount >= 1) && vents.len)
|
||||
var/obj/vent = pick(vents)
|
||||
new /mob/living/simple_mob/metroid/juvenile/baby(get_turf(vent))
|
||||
var/spawn_metroids = pickweight(list(
|
||||
/mob/living/simple_mob/metroid/juvenile/baby = 60,
|
||||
/mob/living/simple_mob/metroid/juvenile/super = 30,
|
||||
/mob/living/simple_mob/metroid/juvenile/alpha = 10,
|
||||
/mob/living/simple_mob/metroid/juvenile/gamma = 3,
|
||||
/mob/living/simple_mob/metroid/juvenile/zeta = 2,
|
||||
/mob/living/simple_mob/metroid/juvenile/omega = 1,
|
||||
))
|
||||
new spawn_metroids(get_turf(vent))
|
||||
vents -= vent
|
||||
spawncount--
|
||||
vents.Cut()
|
||||
@@ -42,6 +56,6 @@
|
||||
qdel(M) //Must have been nullspaced
|
||||
continue
|
||||
area_names |= metroid_area.name
|
||||
if(area_names.len)
|
||||
if(area_names.len && active_metroid_event == TRUE)
|
||||
var/english_list = english_list(area_names)
|
||||
command_announcement.Announce("Sensors have narrowed down remaining lifeforms to the followng areas: [english_list]", "Lifesign Alert")
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user