diff --git a/SpacemanDMM.toml b/SpacemanDMM.toml index ebc374f630..7f74da7824 100644 --- a/SpacemanDMM.toml +++ b/SpacemanDMM.toml @@ -3,4 +3,7 @@ dreamchecker = true [code_standards] disallow_relative_type_definitions = true -disallow_relative_proc_definitions = true \ No newline at end of file +disallow_relative_proc_definitions = true + +[debugger] +engine = "auxtools" diff --git a/code/__defines/mobs.dm b/code/__defines/mobs.dm index df7a90632c..b8457de50b 100644 --- a/code/__defines/mobs.dm +++ b/code/__defines/mobs.dm @@ -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" diff --git a/code/__defines/mobs_ch.dm b/code/__defines/mobs_ch.dm new file mode 100644 index 0000000000..45114d7cbd --- /dev/null +++ b/code/__defines/mobs_ch.dm @@ -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 diff --git a/code/__defines/subsystems.dm b/code/__defines/subsystems.dm index 0a8b333956..f6d7dc2a38 100644 --- a/code/__defines/subsystems.dm +++ b/code/__defines/subsystems.dm @@ -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 diff --git a/code/controllers/master.dm b/code/controllers/master.dm index fc065bc86a..83c4f6ed3e 100644 --- a/code/controllers/master.dm +++ b/code/controllers/master.dm @@ -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 diff --git a/code/controllers/subsystems/player_tips.dm b/code/controllers/subsystems/player_tips.dm new file mode 100644 index 0000000000..7ac58b52bd --- /dev/null +++ b/code/controllers/subsystems/player_tips.dm @@ -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() diff --git a/code/controllers/subsystems/xenoarch.dm b/code/controllers/subsystems/xenoarch.dm index 111653fc68..45a437b966 100644 --- a/code/controllers/subsystems/xenoarch.dm +++ b/code/controllers/subsystems/xenoarch.dm @@ -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 diff --git a/code/datums/looping_sounds/alarm_sounds.dm b/code/datums/looping_sounds/alarm_sounds.dm new file mode 100644 index 0000000000..4453de6de9 --- /dev/null +++ b/code/datums/looping_sounds/alarm_sounds.dm @@ -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 diff --git a/code/datums/mind_vr.dm b/code/datums/mind_vr.dm index 89b522469c..f6ba695438 100644 --- a/code/datums/mind_vr.dm +++ b/code/datums/mind_vr.dm @@ -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 diff --git a/code/datums/supplypacks/engineering.dm b/code/datums/supplypacks/engineering.dm index 0529f5aedd..2616d0fe6e 100644 --- a/code/datums/supplypacks/engineering.dm +++ b/code/datums/supplypacks/engineering.dm @@ -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)" diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm index 3458c6bab2..7f16ba66b7 100644 --- a/code/datums/underwear/bottom.dm +++ b/code/datums/underwear/bottom.dm @@ -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 \ No newline at end of file diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm index 72803644df..ac29b579d1 100644 --- a/code/datums/underwear/socks.dm +++ b/code/datums/underwear/socks.dm @@ -188,4 +188,24 @@ /datum/category_item/underwear/socks/rippedpantyhose name = "Pantyhose, Ripped" - icon_state = "rippedpantyhose" \ No newline at end of file + 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 \ No newline at end of file diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm index 3811bf4fbd..5af7870f04 100644 --- a/code/datums/underwear/top.dm +++ b/code/datums/underwear/top.dm @@ -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 \ No newline at end of file diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index 11c4f1f6b3..2c32ad8e76 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -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 \ No newline at end of file diff --git a/code/game/jobs/job/job.dm b/code/game/jobs/job/job.dm index b0e678298b..2f1087a271 100644 --- a/code/game/jobs/job/job.dm +++ b/code/game/jobs/job/job.dm @@ -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 - */ \ No newline at end of file + */ diff --git a/code/game/machinery/air_alarm.dm b/code/game/machinery/air_alarm.dm index 874b04b51b..21bba5a1e6 100644 --- a/code/game/machinery/air_alarm.dm +++ b/code/game/machinery/air_alarm.dm @@ -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 \ No newline at end of file +#undef DECLARE_TLV_VALUES diff --git a/code/game/machinery/fire_alarm.dm b/code/game/machinery/fire_alarm.dm index a7e0da37f6..e8e5e7b4de 100644 --- a/code/game/machinery/fire_alarm.dm +++ b/code/game/machinery/fire_alarm.dm @@ -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)]") diff --git a/code/game/machinery/frame.dm b/code/game/machinery/frame.dm index 6c71e63207..c3fa1701fd 100644 --- a/code/game/machinery/frame.dm +++ b/code/game/machinery/frame.dm @@ -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) ////////////////////////////// diff --git a/code/game/mecha/combat/combat.dm b/code/game/mecha/combat/combat.dm index 7661bb3255..88dace7ff9 100644 --- a/code/game/mecha/combat/combat.dm +++ b/code/game/mecha/combat/combat.dm @@ -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 diff --git a/code/game/mecha/combat/durand.dm b/code/game/mecha/combat/durand.dm index 19bd2b9c53..4ea027f154 100644 --- a/code/game/mecha/combat/durand.dm +++ b/code/game/mecha/combat/durand.dm @@ -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)) \ No newline at end of file + cell.charge = rand(0, (cell.charge/2)) diff --git a/code/game/mecha/combat/gorilla.dm b/code/game/mecha/combat/gorilla.dm index 09992b5774..34dbe14a1e 100644 --- a/code/game/mecha/combat/gorilla.dm +++ b/code/game/mecha/combat/gorilla.dm @@ -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 diff --git a/code/game/mecha/combat/gygax.dm b/code/game/mecha/combat/gygax.dm index b2b5fe613f..1fa6933add 100644 --- a/code/game/mecha/combat/gygax.dm +++ b/code/game/mecha/combat/gygax.dm @@ -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)) \ No newline at end of file + cell.charge = rand(0, (cell.charge/2)) diff --git a/code/game/mecha/combat/marauder.dm b/code/game/mecha/combat/marauder.dm index c218493847..8fc089c495 100644 --- a/code/game/mecha/combat/marauder.dm +++ b/code/game/mecha/combat/marauder.dm @@ -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) diff --git a/code/game/mecha/combat/phazon.dm b/code/game/mecha/combat/phazon.dm index 7142711b86..7aa6d8c41e 100644 --- a/code/game/mecha/combat/phazon.dm +++ b/code/game/mecha/combat/phazon.dm @@ -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("The [src.name] absorbs the incoming projectile's force, negating it!") 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("The armor reflects the incoming beam, negating it!") src.visible_message("The [src.name] reflects the incoming beam, negating it!") 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("The armor absorbs the incoming attack's force, negating it!") src.visible_message("The [src.name] absorbs the incoming attack's force, negating it!") src.log_append_to_last("Armor absorbed.") diff --git a/code/game/mecha/combat/scarab_ch.dm b/code/game/mecha/combat/scarab_ch.dm index b42b2de166..362feea638 100644 --- a/code/game/mecha/combat/scarab_ch.dm +++ b/code/game/mecha/combat/scarab_ch.dm @@ -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 \ No newline at end of file + max_weapon_equip = 1 diff --git a/code/game/mecha/components/armor.dm b/code/game/mecha/components/armor.dm index 54fe413d11..561bc555d1 100644 --- a/code/game/mecha/components/armor.dm +++ b/code/game/mecha/components/armor.dm @@ -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( diff --git a/code/game/mecha/mecha.dm b/code/game/mecha/mecha.dm index b39d46b453..12ef6061ce 100644 --- a/code/game/mecha/mecha.dm +++ b/code/game/mecha/mecha.dm @@ -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) diff --git a/code/game/mecha/micro/micro.dm b/code/game/mecha/micro/micro.dm index bea6f6f1dd..2a9d4c3e63 100644 --- a/code/game/mecha/micro/micro.dm +++ b/code/game/mecha/micro/micro.dm @@ -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. diff --git a/code/game/mecha/micro/security.dm b/code/game/mecha/micro/security.dm index d634694510..62be51bb57 100644 --- a/code/game/mecha/micro/security.dm +++ b/code/game/mecha/micro/security.dm @@ -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 diff --git a/code/game/mecha/micro/utility.dm b/code/game/mecha/micro/utility.dm index 4bc1e89321..fcf32f1a2f 100644 --- a/code/game/mecha/micro/utility.dm +++ b/code/game/mecha/micro/utility.dm @@ -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 diff --git a/code/game/mecha/working/ripley.dm b/code/game/mecha/working/ripley.dm index 61b4d90183..8d4ee98fbf 100644 --- a/code/game/mecha/working/ripley.dm +++ b/code/game/mecha/working/ripley.dm @@ -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 diff --git a/code/game/objects/effects/spiders.dm b/code/game/objects/effects/spiders.dm index db61554bd1..53099410dc 100644 --- a/code/game/objects/effects/spiders.dm +++ b/code/game/objects/effects/spiders.dm @@ -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 diff --git a/code/game/objects/items.dm b/code/game/objects/items.dm index dac041f327..79dabc9a2c 100644 --- a/code/game/objects/items.dm +++ b/code/game/objects/items.dm @@ -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, "You can't pick things up!") + return + else if((!istype(usr, /mob/living/carbon)) || (istype(usr, /mob/living/carbon/brain)))//Is humanoid, and is not a brain to_chat(usr, "You can't pick things up!") 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, "You can't pick things up!") return if(src.anchored) //Object isn't anchored to_chat(usr, "You can't pick that up!") 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, "Your hand is full.") return if(!istype(src.loc, /turf)) //Object is on a turf diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index cc902d3b6d..339b57f055 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -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 diff --git a/code/game/objects/items/devices/taperecorder.dm b/code/game/objects/items/devices/taperecorder.dm index 88701319cd..30d032215f 100644 --- a/code/game/objects/items/devices/taperecorder.dm +++ b/code/game/objects/items/devices/taperecorder.dm @@ -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")]" \ No newline at end of file + icon_state = "tape_[pick("white", "blue", "red", "yellow", "purple")]" diff --git a/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm b/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm index 174e1cde97..6228166751 100644 --- a/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm +++ b/code/game/objects/items/weapons/circuitboards/circuitboards_vr.dm @@ -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 diff --git a/code/game/objects/items/weapons/circuitboards/frame.dm b/code/game/objects/items/weapons/circuitboards/frame.dm index db3106e635..1db8b10130 100644 --- a/code/game/objects/items/weapons/circuitboards/frame.dm +++ b/code/game/objects/items/weapons/circuitboards/frame.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) \ No newline at end of file + /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 + ) diff --git a/code/game/objects/items/weapons/clown_items.dm b/code/game/objects/items/weapons/clown_items.dm index c3a94fb100..d7208d5db3 100644 --- a/code/game/objects/items/weapons/clown_items.dm +++ b/code/game/objects/items/weapons/clown_items.dm @@ -54,7 +54,7 @@ wet() else to_chat(user, "You clean \the [target.name].") - target.clean_blood() + target.clean_blood(TRUE) return //attack_as_weapon diff --git a/code/game/objects/structures/crates_lockers/__closets.dm b/code/game/objects/structures/crates_lockers/__closets.dm index 454a070cfe..cf196ddf0a 100644 --- a/code/game/objects/structures/crates_lockers/__closets.dm +++ b/code/game/objects/structures/crates_lockers/__closets.dm @@ -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, "This mob type can't use this verb.") //VOREStation Addition End else to_chat(usr, "This mob type can't use this verb.") diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security.dm b/code/game/objects/structures/crates_lockers/closets/secure/security.dm index c420cd20b2..82a3ac416e 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security.dm @@ -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() diff --git a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm index 330431b781..9c10286b08 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/security_vr.dm @@ -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 diff --git a/code/game/objects/structures/simple_doors.dm b/code/game/objects/structures/simple_doors.dm index 675216fe7a..81a957d473 100644 --- a/code/game/objects/structures/simple_doors.dm +++ b/code/game/objects/structures/simple_doors.dm @@ -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) diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index a5812cc91d..610572a5ec 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -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() diff --git a/code/game/turfs/flooring/flooring_decals_ch.dm b/code/game/turfs/flooring/flooring_decals_ch.dm index 3d648ccb36..1021ae947b 100644 --- a/code/game/turfs/flooring/flooring_decals_ch.dm +++ b/code/game/turfs/flooring/flooring_decals_ch.dm @@ -10,4 +10,4 @@ icon_state = "wood_stairs2" /obj/effect/floor_decal/stairs/dark_stairs - icon_state = "dark_stairs" \ No newline at end of file + icon_state = "dark_stairs" diff --git a/code/game/turfs/flooring/flooring_decals_yw.dm b/code/game/turfs/flooring/flooring_decals_yw.dm index 75983e086f..2c948bb9b3 100644 --- a/code/game/turfs/flooring/flooring_decals_yw.dm +++ b/code/game/turfs/flooring/flooring_decals_yw.dm @@ -18,3 +18,4 @@ /obj/effect/floor_decal/snow/floor/pointy icon_state = "snowfloorpointy" + diff --git a/code/game/turfs/flooring/seasonal.dm b/code/game/turfs/flooring/seasonal.dm index 1e57f6bfa8..e67d6ba9c5 100644 --- a/code/game/turfs/flooring/seasonal.dm +++ b/code/game/turfs/flooring/seasonal.dm @@ -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() diff --git a/code/game/turfs/simulated/outdoors/survival_action_vr.dm b/code/game/turfs/simulated/outdoors/survival_action_vr.dm index c7f90171c7..9f88959493 100644 --- a/code/game/turfs/simulated/outdoors/survival_action_vr.dm +++ b/code/game/turfs/simulated/outdoors/survival_action_vr.dm @@ -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, "You don't see any loose sticks...") \ No newline at end of file + to_chat(user, "You don't see any loose sticks...") diff --git a/code/game/world.dm b/code/game/world.dm index 96b2249363..b204bc94fa 100644 --- a/code/game/world.dm +++ b/code/game/world.dm @@ -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 diff --git a/code/global.dm b/code/global.dm index 2270f276f6..fd8183a714 100644 --- a/code/global.dm +++ b/code/global.dm @@ -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( diff --git a/code/modules/admin/DB ban/functions.dm b/code/modules/admin/DB ban/functions.dm index 19e1bc5093..1f1e3aea4e 100644 --- a/code/modules/admin/DB ban/functions.dm +++ b/code/modules/admin/DB ban/functions.dm @@ -283,7 +283,8 @@ output += "