Merge branch 'master' into protean-rework

This commit is contained in:
BlackMajor
2023-02-23 14:31:09 +13:00
310 changed files with 144992 additions and 152112 deletions
+4 -1
View File
@@ -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"
+3 -2
View File
@@ -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"
+3
View File
@@ -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
+1
View File
@@ -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
+8 -5
View File
@@ -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()
+2 -2
View File
@@ -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
+20
View File
@@ -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
+1 -1
View File
@@ -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)"
+15
View File
@@ -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
+21 -1
View File
@@ -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
+19
View File
@@ -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
+20
View File
@@ -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
+2 -1
View File
@@ -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
*/
*/
+21 -3
View File
@@ -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
+46 -4
View File
@@ -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)]")
+6
View File
@@ -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)
//////////////////////////////
-1
View File
@@ -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
+1 -2
View File
@@ -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))
+1 -2
View File
@@ -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
+1 -4
View File
@@ -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))
-1
View File
@@ -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)
+4 -4
View File
@@ -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.")
+1 -2
View File
@@ -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
+3 -3
View File
@@ -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(
+2 -20
View File
@@ -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)
-1
View File
@@ -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.
-2
View File
@@ -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
-1
View File
@@ -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
-1
View File
@@ -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
+3 -3
View File
@@ -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
+8 -3
View File
@@ -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
+2 -2
View File
@@ -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)
+1 -1
View File
@@ -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"
+32 -10
View File
@@ -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
View File
@@ -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
-1
View File
@@ -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(
+4 -2
View File
@@ -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
+1 -1
View File
@@ -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 -4
View File
@@ -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!
+3 -3
View File
@@ -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)
+1 -1
View File
@@ -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]")
+4 -1
View File
@@ -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
+14
View File
@@ -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!
+15
View File
@@ -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")
+129 -54
View File
@@ -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
+6 -5
View File
@@ -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
+1
View File
@@ -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(
+42 -2
View File
@@ -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" : ""]"
+6 -1
View File
@@ -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"
+26
View File
@@ -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'
+10
View File
@@ -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
+9 -5
View File
@@ -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,
+35 -1
View File
@@ -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
*/
+11 -3
View File
@@ -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"
+44 -4
View File
@@ -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))
+1 -1
View File
@@ -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
+7 -4
View File
@@ -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
+17 -3
View File
@@ -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