diff --git a/_maps/map_files/Deltastation/DeltaStation2.dmm b/_maps/map_files/Deltastation/DeltaStation2.dmm index f02a4f4a31..cefc0eb1a5 100644 --- a/_maps/map_files/Deltastation/DeltaStation2.dmm +++ b/_maps/map_files/Deltastation/DeltaStation2.dmm @@ -114276,11 +114276,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Maintenance Hatch"; - req_access_txt = "12" - }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/simple/supply/hidden, /obj/effect/turf_decal/stripes/line{ dir = 2 @@ -114288,6 +114283,10 @@ /obj/effect/turf_decal/stripes/line{ dir = 1 }, +/obj/machinery/door/airlock/maintenance_hatch{ + name = "Chapel Maintenance"; + req_access_txt = "27" + }, /turf/open/floor/plasteel, /area/maintenance/port/aft) "dKE" = ( @@ -118987,7 +118986,6 @@ /obj/structure/cable/white{ icon_state = "1-2" }, -/obj/effect/decal/cleanable/dirt, /obj/machinery/atmospherics/pipe/manifold4w/supply/hidden, /obj/effect/turf_decal/delivery, /turf/open/floor/plasteel, @@ -119332,7 +119330,6 @@ /turf/closed/wall, /area/chapel/office) "dTx" = ( -/obj/structure/bodycontainer/morgue, /obj/effect/turf_decal/tile/neutral{ dir = 1 }, @@ -119343,6 +119340,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plasteel/dark, /area/chapel/office) "dTy" = ( @@ -121768,7 +121766,6 @@ /turf/open/floor/plating, /area/maintenance/port/aft) "dYv" = ( -/obj/structure/bodycontainer/morgue, /obj/structure/sign/poster/official/ian{ pixel_y = -32 }, @@ -121782,6 +121779,7 @@ /obj/effect/turf_decal/tile/neutral{ dir = 8 }, +/obj/structure/closet/crate/coffin, /turf/open/floor/plasteel/dark, /area/chapel/office) "dYw" = ( @@ -126476,6 +126474,7 @@ name = "Mass Driver" }, /obj/machinery/mass_driver{ + id = "chapelgun"; name = "Holy Driver" }, /turf/open/floor/plating, @@ -126706,7 +126705,7 @@ /area/science/mixing) "iyd" = ( /turf/open/space, -/area/space/nearstation) +/area/space) "iQh" = ( /obj/structure/bodycontainer/morgue{ dir = 1 @@ -126946,19 +126945,6 @@ }, /turf/open/floor/plasteel, /area/maintenance/port) -"kzR" = ( -/obj/effect/turf_decal/stripes/line{ - dir = 2 - }, -/obj/effect/turf_decal/stripes/line{ - dir = 1 - }, -/obj/machinery/door/airlock/maintenance_hatch{ - name = "Chapel Maintenance"; - req_access_txt = "27" - }, -/turf/open/floor/plasteel, -/area/chapel/office) "kLu" = ( /obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{ dir = 4 @@ -160100,7 +160086,7 @@ dYu dZg jhK jhK -kzR +dZN owr mXJ gJj diff --git a/code/__DEFINES/donator_groupings.dm b/code/__DEFINES/donator_groupings.dm new file mode 100644 index 0000000000..4b210609f2 --- /dev/null +++ b/code/__DEFINES/donator_groupings.dm @@ -0,0 +1,18 @@ +#define DONATOR_GROUP_TIER_1_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_1_donators +#define DONATOR_GROUP_TIER_2_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_2_donators +#define DONATOR_GROUP_TIER_3_CONFIG_PATH /datum/config_entry/keyed_list/donator_group/tier_3_donators + +#define DONATOR_GROUP_TIER_1_CONFIG_SUBPATH keyed_list/donator_group/tier_1_donators +#define DONATOR_GROUP_TIER_2_CONFIG_SUBPATH keyed_list/donator_group/tier_2_donators +#define DONATOR_GROUP_TIER_3_CONFIG_SUBPATH keyed_list/donator_group/tier_3_donators + +#define TIER_1_DONATORS CONFIG_GET(DONATOR_GROUP_TIER_1_CONFIG_SUBPATH) +#define TIER_2_DONATORS CONFIG_GET(DONATOR_GROUP_TIER_2_CONFIG_SUBPATH) +#define TIER_3_DONATORS CONFIG_GET(DONATOR_GROUP_TIER_3_CONFIG_SUBPATH) + +//flags +#define DONATOR_GROUP_TIER_1 "T1" +#define DONATOR_GROUP_TIER_2 "T2" +#define DONATOR_GROUP_TIER_3 "T3" + +#define IS_CKEY_DONATOR_GROUP(ckey, groupid) is_donator_group(ckey, groupid) diff --git a/code/__HELPERS/donator_groupings.dm b/code/__HELPERS/donator_groupings.dm new file mode 100644 index 0000000000..bdff20553a --- /dev/null +++ b/code/__HELPERS/donator_groupings.dm @@ -0,0 +1,25 @@ +/* +Current specifications: + +Donator groups in __DEFINES/donator_groupings.dm, config entries in controllers/configuration/entries/donator.dm + +3 groups, Tier 1/2/3 +Each tier includes the one before it (ascending) +For fast lookups, this is generated using regenerate_donator_grouping_list() + +*/ + +/proc/is_donator_group(ckey, group) + ckey = ckey(ckey) //make sure it's ckey'd. + var/list/L = GLOB.donators_by_group[group] + return L && L.Find(ckey) + +/proc/regenerate_donator_grouping_list() + GLOB.donators_by_group = list() //reinit everything + var/list/donator_list = GLOB.donators_by_group //cache + var/list/tier_1 = TIER_1_DONATORS + donator_list[DONATOR_GROUP_TIER_1] = tier_1.Copy() //The .Copy() is to "decouple"/make a new list, rather than letting the global list impact the config list. + var/list/tier_2 = tier_1 + TIER_2_DONATORS //Using + on lists implies making new lists, so we don't need to manually Copy(). + donator_list[DONATOR_GROUP_TIER_2] = tier_2 + var/list/tier_3 = tier_2 + TIER_3_DONATORS + donator_list[DONATOR_GROUP_TIER_3] = tier_3 diff --git a/code/__HELPERS/unsorted.dm b/code/__HELPERS/unsorted.dm index 7e078184b7..3c8d62ce3a 100644 --- a/code/__HELPERS/unsorted.dm +++ b/code/__HELPERS/unsorted.dm @@ -1487,6 +1487,7 @@ GLOBAL_DATUM_INIT(dview_mob, /mob/dview, new) /obj/item/reagent_containers/food/snacks/grown/nettle, // base type /obj/item/reagent_containers/food/snacks/deepfryholder, /obj/item/reagent_containers/food/snacks/grown/shell, + /obj/item/reagent_containers/food/snacks/clothing, /obj/item/reagent_containers/food/snacks/store/bread ) blocked |= typesof(/obj/item/reagent_containers/food/snacks/customizable) diff --git a/code/_globalvars/lists/misc.dm b/code/_globalvars/lists/misc.dm new file mode 100644 index 0000000000..1dcde53a72 --- /dev/null +++ b/code/_globalvars/lists/misc.dm @@ -0,0 +1 @@ +GLOBAL_LIST_EMPTY(donators_by_group) //group id = donator list of ckeys diff --git a/code/controllers/configuration/config_entry.dm b/code/controllers/configuration/config_entry.dm index 49ff1c8d49..3ac103affc 100644 --- a/code/controllers/configuration/config_entry.dm +++ b/code/controllers/configuration/config_entry.dm @@ -19,6 +19,7 @@ var/abstract_type = /datum/config_entry //do not instantiate if type matches this var/vv_VAS = TRUE //Force validate and set on VV. VAS proccall guard will run regardless. + var/postload_required = FALSE //requires running OnPostload() var/dupes_allowed = FALSE @@ -72,6 +73,9 @@ /datum/config_entry/proc/DeprecationUpdate(value) return +/datum/config_entry/proc/OnPostload() + return + /datum/config_entry/string config_entry_value = "" abstract_type = /datum/config_entry/string @@ -80,7 +84,7 @@ /datum/config_entry/string/vv_edit_var(var_name, var_value) return var_name != "auto_trim" && ..() -/datum/config_entry/string/ValidateAndSet(str_val) +/datum/config_entry/string/ValidateAndSet(str_val, during_load) if(!VASProcCallGuard(str_val)) return FALSE config_entry_value = auto_trim ? trim(str_val) : str_val diff --git a/code/controllers/configuration/configuration.dm b/code/controllers/configuration/configuration.dm index 0232081c1a..ea2919f342 100644 --- a/code/controllers/configuration/configuration.dm +++ b/code/controllers/configuration/configuration.dm @@ -101,6 +101,7 @@ log_config("Loading config file [filename]...") var/list/lines = world.file2list("[directory]/[filename]") var/list/_entries = entries + var/list/postload_required = list() for(var/L in lines) L = trim(L) if(!L) @@ -157,18 +158,24 @@ else warning("[new_ver.type] is deprecated but gave no proper return for DeprecationUpdate()") - var/validated = E.ValidateAndSet(value) + var/validated = E.ValidateAndSet(value, TRUE) if(!validated) log_config("Failed to validate setting \"[value]\" for [entry]") else if(E.modified && !E.dupes_allowed) log_config("Duplicate setting for [entry] ([value], [E.resident_file]) detected! Using latest.") + if(E.postload_required) + postload_required[E] = TRUE E.resident_file = filename if(validated) E.modified = TRUE + for(var/i in postload_required) + var/datum/config_entry/E = i + E.OnPostload() + ++. /datum/controller/configuration/can_vv_get(var_name) diff --git a/code/controllers/configuration/entries/donator.dm b/code/controllers/configuration/entries/donator.dm new file mode 100644 index 0000000000..b74d5f5839 --- /dev/null +++ b/code/controllers/configuration/entries/donator.dm @@ -0,0 +1,22 @@ +/datum/config_entry/keyed_list/donator_group + key_mode = KEY_MODE_TEXT + value_mode = VALUE_MODE_FLAG + abstract_type = /datum/config_entry/keyed_list/donator_group + +//If we're in the middle of a config load, only do the regeneration afterwards to prevent this from wasting a massive amount of CPU for list regenerations. +/datum/config_entry/keyed_list/donator_group/ValidateAndSet(str_val, during_load) + . = ..() + if(. && during_load) + regenerate_donator_grouping_list() + +/datum/config_entry/keyed_list/donator_group/OnPostload() + . = ..() + regenerate_donator_grouping_list() + +//This is kinda weird in that the config entries are defined here but all the handling/calculations are in __HELPERS/donator_groupings.dm + +/datum/config_entry/keyed_list/donator_group/tier_1_donators + +/datum/config_entry/keyed_list/donator_group/tier_2_donators + +/datum/config_entry/keyed_list/donator_group/tier_3_donators diff --git a/code/controllers/subsystem/input.dm b/code/controllers/subsystem/input.dm index 221d04dad5..cc09ca816e 100644 --- a/code/controllers/subsystem/input.dm +++ b/code/controllers/subsystem/input.dm @@ -23,7 +23,7 @@ SUBSYSTEM_DEF(input) // This is for when macro sets are eventualy datumized /datum/controller/subsystem/input/proc/setup_default_macro_sets() var/list/static/default_macro_sets - + if(default_macro_sets) macro_sets = default_macro_sets return @@ -49,6 +49,7 @@ SUBSYSTEM_DEF(input) "old_hotkeys" = list( "Tab" = "\".winset \\\"mainwindow.macro=old_default input.focus=true input.background-color=[COLOR_INPUT_ENABLED]\\\"\"", "O" = "ooc", + "L" = "looc", "T" = "say", "M" = "me", "Back" = "\".winset \\\"input.text=\\\"\\\"\\\"\"", // This makes it so backspace can remove default inputs diff --git a/code/datums/ert.dm b/code/datums/ert.dm index 8fc0a9155b..4976891543 100644 --- a/code/datums/ert.dm +++ b/code/datums/ert.dm @@ -21,8 +21,8 @@ /datum/ert/amber code = "Amber" - leader_role = /datum/antagonist/ert/commander/red - roles = list(/datum/antagonist/ert/security/red, /datum/antagonist/ert/medic/red, /datum/antagonist/ert/engineer/red) + leader_role = /datum/antagonist/ert/commander/amber + roles = list(/datum/antagonist/ert/security/amber, /datum/antagonist/ert/medic/amber, /datum/antagonist/ert/engineer/amber) /datum/ert/red leader_role = /datum/antagonist/ert/commander/red diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index ad4384f9f5..6e3deaa694 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -704,8 +704,8 @@ name = "egyptian staff" desc = "A tutorial in mummification is carved into the staff. You could probably craft the wraps if you had some cloth." icon = 'icons/obj/guns/magic.dmi' - icon_state = "pharoah_sceptre" - item_state = "pharoah_sceptre" + icon_state = "pharaoh_sceptre" + item_state = "pharaoh_sceptre" lefthand_file = 'icons/mob/inhands/weapons/staves_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/staves_righthand.dmi' w_class = WEIGHT_CLASS_NORMAL diff --git a/code/game/objects/items/storage/wallets.dm b/code/game/objects/items/storage/wallets.dm index 41e0dac3dd..cb5790e45f 100644 --- a/code/game/objects/items/storage/wallets.dm +++ b/code/game/objects/items/storage/wallets.dm @@ -61,7 +61,7 @@ /obj/item/storage/wallet/update_icon() var/new_state = "wallet" if(front_id) - new_state = "wallet_[front_id.icon_state]" + new_state = "wallet_id" if(new_state != icon_state) //avoid so many icon state changes. icon_state = new_state diff --git a/code/game/objects/items/weaponry.dm b/code/game/objects/items/weaponry.dm index 560731edfd..f2d9f328a1 100644 --- a/code/game/objects/items/weaponry.dm +++ b/code/game/objects/items/weaponry.dm @@ -229,7 +229,7 @@ for further reading, please see: https://github.com/tgstation/tgstation/pull/301 /obj/item/katana/cursed slot_flags = null -/obj/item/katana/Initialize() +/obj/item/katana/cursed/Initialize() . = ..() ADD_TRAIT(src, TRAIT_NODROP, CURSED_ITEM_TRAIT) diff --git a/code/modules/antagonists/ert/ert.dm b/code/modules/antagonists/ert/ert.dm index 53f8aa2da1..bb24af4f7a 100644 --- a/code/modules/antagonists/ert/ert.dm +++ b/code/modules/antagonists/ert/ert.dm @@ -36,30 +36,42 @@ /datum/antagonist/ert/security // kinda handled by the base template but here for completion -/datum/antagonist/ert/security/red +/datum/antagonist/ert/security/amber outfit = /datum/outfit/ert/security/alert +/datum/antagonist/ert/security/red + outfit = /datum/outfit/ert/security/alert/red + /datum/antagonist/ert/engineer role = "Engineer" outfit = /datum/outfit/ert/engineer -/datum/antagonist/ert/engineer/red +/datum/antagonist/ert/engineer/amber outfit = /datum/outfit/ert/engineer/alert +/datum/antagonist/ert/engineer/red + outfit = /datum/outfit/ert/engineer/alert/red + /datum/antagonist/ert/medic role = "Medical Officer" outfit = /datum/outfit/ert/medic -/datum/antagonist/ert/medic/red +/datum/antagonist/ert/medic/amber outfit = /datum/outfit/ert/medic/alert +/datum/antagonist/ert/medic/red + outfit = /datum/outfit/ert/medic/alert/red + /datum/antagonist/ert/commander role = "Commander" outfit = /datum/outfit/ert/commander -/datum/antagonist/ert/commander/red +/datum/antagonist/ert/commander/amber outfit = /datum/outfit/ert/commander/alert +/datum/antagonist/ert/commander/red + outfit = /datum/outfit/ert/commander/alert/red + /datum/antagonist/ert/deathsquad name = "Deathsquad Trooper" outfit = /datum/outfit/death_commando diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 64a1f48962..d487b873b1 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -919,11 +919,9 @@ GLOBAL_LIST_EMPTY(preferences_datums) dat += "Description" for(var/j in GLOB.loadout_items[gear_tab]) var/datum/gear/gear = GLOB.loadout_items[gear_tab][j] - var/donoritem - if(gear.ckeywhitelist && gear.ckeywhitelist.len) - donoritem = TRUE - if(!(user.ckey in gear.ckeywhitelist)) - continue + var/donoritem = gear.donoritem + if(donoritem && !gear.donator_ckey_check(user.ckey)) + continue var/class_link = "" if(gear.type in chosen_gear) class_link = "style='white-space:normal;' class='linkOn' href='?_src_=prefs;preference=gear;toggle_gear_path=[html_encode(j)];toggle_gear=0'" @@ -2245,7 +2243,7 @@ GLOBAL_LIST_EMPTY(preferences_datums) if(!is_loadout_slot_available(G.category)) to_chat(user, "You cannot take this loadout, as you've already chosen too many of the same category!") return - if(G.ckeywhitelist && G.ckeywhitelist.len && !(user.ckey in G.ckeywhitelist)) + if(G.donoritem && !G.donator_ckey_check(user.ckey)) to_chat(user, "This is an item intended for donator use only. You are not authorized to use this item.") return if(gear_points >= initial(G.cost)) diff --git a/code/modules/clothing/head/misc.dm b/code/modules/clothing/head/misc.dm index 73fde5d50f..041f0ba012 100644 --- a/code/modules/clothing/head/misc.dm +++ b/code/modules/clothing/head/misc.dm @@ -312,8 +312,8 @@ /obj/item/clothing/head/pharaoh name = "pharaoh hat" desc = "Walk like an Egyptian." - icon_state = "pharoah_hat" - icon_state = "pharoah_hat" + icon_state = "pharaoh_hat" + icon_state = "pharaoh_hat" /obj/item/clothing/head/jester/alt name = "jester hat" diff --git a/code/modules/clothing/outfits/ert.dm b/code/modules/clothing/outfits/ert.dm index 86c8f5335f..523ed55aa4 100644 --- a/code/modules/clothing/outfits/ert.dm +++ b/code/modules/clothing/outfits/ert.dm @@ -45,16 +45,23 @@ R.recalculateChannels() /datum/outfit/ert/commander/alert - name = "ERT Commander - High Alert" + name = "ERT Commander - Amber Alert" suit = /obj/item/clothing/suit/space/hardsuit/ert/alert glasses = /obj/item/clothing/glasses/thermal/eyepatch backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ - /obj/item/gun/energy/pulse/pistol/loyalpin=1) + /obj/item/gun/energy/e_gun=1) l_pocket = /obj/item/melee/transforming/energy/sword/saber +/datum/outfit/ert/commander/alert/red + name = "ERT Commander - Red Alert" + backpack_contents = list(/obj/item/storage/box/engineer=1,\ + /obj/item/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/gun/energy/pulse/pistol/loyalpin=1) + /datum/outfit/ert/security name = "ERT Security" @@ -80,15 +87,22 @@ R.recalculateChannels() /datum/outfit/ert/security/alert - name = "ERT Security - High Alert" + name = "ERT Security - Amber Alert" suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/sec backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/storage/box/handcuffs=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ /obj/item/melee/baton/loaded=1,\ - /obj/item/gun/energy/pulse/carbine/loyalpin=1) + /obj/item/gun/energy/e_gun/stun=1) +/datum/outfit/ert/security/alert/red + name = "ERT Security - Red Alert" + backpack_contents = list(/obj/item/storage/box/engineer=1,\ + /obj/item/storage/box/handcuffs=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/melee/baton/loaded=1,\ + /obj/item/gun/energy/pulse/carbine/loyalpin=1) /datum/outfit/ert/medic name = "ERT Medic" @@ -117,9 +131,18 @@ R.recalculateChannels() /datum/outfit/ert/medic/alert - name = "ERT Medic - High Alert" + name = "ERT Medic - Amber Alert" suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/med + backpack_contents = list(/obj/item/storage/box/engineer=1,\ + /obj/item/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/gun/energy/e_gun=1,\ + /obj/item/reagent_containers/hypospray/combat/nanites=1,\ + /obj/item/gun/medbeam=1) + +/datum/outfit/ert/medic/alert/red + name = "ERT Medic - Red Alert" backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ @@ -154,9 +177,17 @@ R.recalculateChannels() /datum/outfit/ert/engineer/alert - name = "ERT Engineer - High Alert" + name = "ERT Engineer - Amber Alert" suit = /obj/item/clothing/suit/space/hardsuit/ert/alert/engi + backpack_contents = list(/obj/item/storage/box/engineer=1,\ + /obj/item/melee/baton/loaded=1,\ + /obj/item/clothing/mask/gas/sechailer/swat=1,\ + /obj/item/gun/energy/e_gun=1,\ + /obj/item/construction/rcd/combat=1) + +/datum/outfit/ert/engineer/alert/red + name = "ERT Engineer - Red Alert" backpack_contents = list(/obj/item/storage/box/engineer=1,\ /obj/item/melee/baton/loaded=1,\ /obj/item/clothing/mask/gas/sechailer/swat=1,\ diff --git a/code/modules/clothing/spacesuits/hardsuit.dm b/code/modules/clothing/spacesuits/hardsuit.dm index 85503c720a..2694497579 100644 --- a/code/modules/clothing/spacesuits/hardsuit.dm +++ b/code/modules/clothing/spacesuits/hardsuit.dm @@ -624,19 +624,19 @@ desc = "The Multi-Augmented Severe Operations Networked Resource Integration Gear is an man-portable tank designed for extreme environmental situations. It is excessively bulky, but rated for all but the most atomic of hazards. The specialized armor is surprisingly weak to conventional weaponry. The exo slot can attach most storge bags on to the suit." icon_state = "hardsuit-ancient" item_state = "anc_hardsuit" - armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 500, "bomb" = 500, "bio" = 500, "rad" = 500, "fire" = 500, "acid" = 500) + armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) slowdown = 6 //Slow allowed = list(/obj/item/flashlight, /obj/item/tank/internals, /obj/item/storage, /obj/item/construction/rcd, /obj/item/pipe_dispenser) helmettype = /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason name = "M.A.S.O.N RIG helmet" desc = "The M.A.S.O.N RIG helmet is complimentary to the rest of the armor. It features a very large, high powered flood lamp and robust flash protection." icon_state = "hardsuit0-ancient" item_state = "anc_helm" - armor = list("melee" = 10, "bullet" = 5, "laser" = 5, "energy" = 500, "bomb" = 500, "bio" = 500, "rad" = 500, "fire" = 500, "acid" = 500) + armor = list("melee" = 20, "bullet" = 15, "laser" = 15, "energy" = 45, "bomb" = 100, "bio" = 100, "rad" = 100, "fire" = 100, "acid" = 100) item_color = "ancient" brightness_on = 16 scan_reagents = TRUE @@ -644,7 +644,7 @@ tint = 1 var/obj/machinery/doppler_array/integrated/bomb_radar max_heat_protection_temperature = FIRE_IMMUNITY_MAX_TEMP_PROTECT - resistance_flags = INDESTRUCTIBLE | LAVA_PROOF | FIRE_PROOF | ACID_PROOF + resistance_flags = LAVA_PROOF | FIRE_PROOF | ACID_PROOF /obj/item/clothing/head/helmet/space/hardsuit/ancient/mason/Initialize() . = ..() diff --git a/code/modules/clothing/suits/miscellaneous.dm b/code/modules/clothing/suits/miscellaneous.dm index dc1b2b6dc3..8a3dbbf274 100644 --- a/code/modules/clothing/suits/miscellaneous.dm +++ b/code/modules/clothing/suits/miscellaneous.dm @@ -468,11 +468,11 @@ flags_inv = HIDEGLOVES|HIDESHOES|HIDEJUMPSUIT allowed = list(/obj/item/clothing/mask/facehugger/toy) -/obj/item/clothing/suit/nemes - name = "pharoah tunic" +/obj/item/clothing/suit/pharaoh + name = "pharaoh tunic" desc = "Lavish space tomb not included." - icon_state = "pharoah" - icon_state = "pharoah" + icon_state = "pharaoh" + icon_state = "pharaoh" body_parts_covered = CHEST|GROIN diff --git a/code/modules/clothing/under/miscellaneous.dm b/code/modules/clothing/under/miscellaneous.dm index 17ddacb32f..616c00b6c1 100644 --- a/code/modules/clothing/under/miscellaneous.dm +++ b/code/modules/clothing/under/miscellaneous.dm @@ -703,14 +703,6 @@ fitted = NO_FEMALE_UNIFORM can_adjust = FALSE resistance_flags = NONE -/obj/item/clothing/under/durathread - name = "durathread jumpsuit" - desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer." - icon_state = "durathread" - item_state = "durathread" - item_color = "durathread" - can_adjust = FALSE - armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5) /obj/item/clothing/under/gear_harness name = "gear harness" @@ -725,5 +717,15 @@ icon_state = "durathread" item_state = "durathread" item_color = "durathread" + can_adjust = TRUE + armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5) + +/obj/item/clothing/under/duraskirt + name = "durathread jumpskirt" + desc = "A jumpsuit made from durathread, its resilient fibres provide some protection to the wearer. Being a short skirt, it naturally doesn't protect the legs." + icon_state = "duraskirt" + item_state = "duraskirt" + item_color = "durathread" can_adjust = FALSE + body_parts_covered = CHEST|GROIN|ARMS armor = list("melee" = 10, "laser" = 10, "fire" = 40, "acid" = 10, "bomb" = 5) \ No newline at end of file diff --git a/code/modules/hydroponics/grown/peach.dm b/code/modules/hydroponics/grown/peach.dm new file mode 100644 index 0000000000..6fbf933bd1 --- /dev/null +++ b/code/modules/hydroponics/grown/peach.dm @@ -0,0 +1,27 @@ +// Peach +/obj/item/seeds/peach + name = "pack of peach seeds" + desc = "These seeds grow into peach trees." + icon_state = "seed-peach" + species = "peach" + plantname = "Peach Tree" + product = /obj/item/reagent_containers/food/snacks/grown/peach + lifespan = 65 + endurance = 40 + yield = 3 + growing_icon = 'icons/obj/hydroponics/growing_fruits.dmi' + icon_grow = "peach-grow" + icon_dead = "peach-dead" + genes = list(/datum/plant_gene/trait/repeated_harvest) + reagents_add = list("vitamin" = 0.04, "nutriment" = 0.1) + +/obj/item/reagent_containers/food/snacks/grown/peach + seed = /obj/item/seeds/peach + name = "peach" + desc = "It's fuzzy!" + icon_state = "peach" + filling_color = "#FF4500" + bitesize = 25 + foodtype = FRUIT + juice_results = list("peachjuice" = 0) + tastes = list("peach" = 1) diff --git a/code/modules/mining/lavaland/necropolis_chests.dm b/code/modules/mining/lavaland/necropolis_chests.dm index 7add723a06..5990c70813 100644 --- a/code/modules/mining/lavaland/necropolis_chests.dm +++ b/code/modules/mining/lavaland/necropolis_chests.dm @@ -787,30 +787,30 @@ /obj/item/melee/ghost_sword/process() ghost_check() -/obj/item/melee/ghost_sword/proc/ghost_check() - var/ghost_counter = 0 - var/turf/T = get_turf(src) - var/list/contents = T.GetAllContents() - var/mob/dead/observer/current_spirits = list() - for(var/thing in contents) - var/atom/A = thing - A.transfer_observers_to(src) - - for(var/i in orbiters?.orbiters) - if(!isobserver(i)) +/obj/item/melee/ghost_sword/proc/recursive_orbit_collect(atom/A, list/L) + for(var/i in A.orbiters?.orbiters) + if(!isobserver(i) || (i in L)) continue + L |= i + recursive_orbit_collect(i, L) + +/obj/item/melee/ghost_sword/proc/ghost_check() + var/list/mob/dead/observer/current_spirits = list() + + recursive_orbit_collect(src, current_spirits) + recursive_orbit_collect(loc, current_spirits) //anything holding us + + for(var/i in spirits - current_spirits) var/mob/dead/observer/G = i - ghost_counter++ - G.invisibility = 0 - current_spirits |= G - - for(var/mob/dead/observer/G in spirits - current_spirits) G.invisibility = GLOB.observer_default_invisibility - + + for(var/i in current_spirits) + var/mob/dead/observer/G = i + G.invisibility = 0 + spirits = current_spirits - - return ghost_counter - + return length(spirits) + /obj/item/melee/ghost_sword/attack(mob/living/target, mob/living/carbon/human/user) force = 0 var/ghost_counter = ghost_check() @@ -1335,4 +1335,4 @@ if(2) new /obj/item/wisp_lantern(src) if(3) - new /obj/item/prisoncube(src) \ No newline at end of file + new /obj/item/prisoncube(src) diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index b53655ca7c..9acecea545 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -702,7 +702,7 @@ clear_fullscreen("critvision") //Oxygen damage overlay - var/windedup = getOxyLoss() + getStaminaLoss() * 0.2 + stamdamageoverlaytemp + var/windedup = getOxyLoss() + getStaminaLoss() * 0.2 if(windedup) var/severity = 0 switch(windedup) diff --git a/code/modules/mob/living/carbon/carbon_defines.dm b/code/modules/mob/living/carbon/carbon_defines.dm index a067be798f..794194b3a1 100644 --- a/code/modules/mob/living/carbon/carbon_defines.dm +++ b/code/modules/mob/living/carbon/carbon_defines.dm @@ -61,6 +61,5 @@ var/next_hallucination = 0 var/cpr_time = 1 //CPR cooldown. var/damageoverlaytemp = 0 - var/stamdamageoverlaytemp = 0 var/drunkenness = 0 //Overall drunkenness - check handle_alcohol() in life.dm for effects diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 7a0a2d8ad8..35b0384145 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -25,11 +25,11 @@ var/age = 30 //Player's age var/underwear = "Nude" //Which underwear the player wants - var/undie_color = "#FFFFFF" + var/undie_color = "FFFFFF" var/undershirt = "Nude" //Which undershirt the player wants - var/shirt_color = "#FFFFFF" + var/shirt_color = "FFFFFF" var/socks = "Nude" //Which socks the player wants - var/socks_color = "#FFFFFF" + var/socks_color = "FFFFFF" var/backbag = DBACKPACK //Which backpack type the player has chosen. var/jumpsuit_style = PREF_SUIT //suit/skirt diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 92d1328f73..0f83e675fc 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -529,7 +529,7 @@ GLOBAL_LIST_EMPTY(roundstart_races) var/digilegs = (DIGITIGRADE in species_traits) ? "_d" : "" var/mutable_appearance/MA = mutable_appearance(S.icon, "[S.icon_state][digilegs]", -BODY_LAYER) if(UNDIE_COLORABLE(S)) - MA.color = "[H.socks_color]" + MA.color = "#[H.socks_color]" standing += MA if(standing.len) @@ -1781,7 +1781,6 @@ GLOBAL_LIST_EMPTY(roundstart_races) if(CLONE) H.adjustCloneLoss(damage * hit_percent * H.physiology.clone_mod) if(STAMINA) - H.stamdamageoverlaytemp = 20 if(BP) if(damage > 0 ? BP.receive_damage(0, 0, damage * hit_percent * H.physiology.stamina_mod) : BP.heal_damage(0, 0, abs(damage * hit_percent * H.physiology.stamina_mod), only_robotic = FALSE, only_organic = FALSE)) H.update_stamina() diff --git a/code/modules/mob/living/carbon/life.dm b/code/modules/mob/living/carbon/life.dm index f0144e022d..36e4e18817 100644 --- a/code/modules/mob/living/carbon/life.dm +++ b/code/modules/mob/living/carbon/life.dm @@ -4,9 +4,8 @@ if(notransform) return - if(damageoverlaytemp || stamdamageoverlaytemp) + if(damageoverlaytemp) damageoverlaytemp = 0 - stamdamageoverlaytemp = 0 update_damage_hud() if(stat != DEAD) //Reagent processing needs to come before breathing, to prevent edge cases. diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index a50af21d47..86f63a729d 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -897,6 +897,11 @@ . = ..() +/mob/living/simple_animal/parrot/Poly/say(message, bubble_type,var/list/spans = list(), sanitize = TRUE, datum/language/language = null, ignore_spam = FALSE, forced = null) + . = ..() + if(. && !client && prob(1) && prob(1)) //Only the one true bird may speak across dimensions. + world.TgsTargetedChatBroadcast("A stray squawk is heard... \"[message]\"", FALSE) + /mob/living/simple_animal/parrot/Poly/Life() if(!stat && SSticker.current_state == GAME_STATE_FINISHED && !memory_saved) Write_Memory(FALSE) diff --git a/code/modules/mob/living/simple_animal/slime/life.dm b/code/modules/mob/living/simple_animal/slime/life.dm index 07985215d8..29b4689317 100644 --- a/code/modules/mob/living/simple_animal/slime/life.dm +++ b/code/modules/mob/living/simple_animal/slime/life.dm @@ -69,7 +69,7 @@ if(Target.Adjacent(src)) Target.attack_slime(src) - return + break if(!Target.lying && prob(80)) if(Target.client && Target.health >= 20) diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index c64702f9ef..f1602f429c 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -457,13 +457,17 @@ set name = ".click" set hidden = TRUE set category = null - return + var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .click macro!" + log_admin(msg) + message_admins(msg) /mob/verb/DisDblClick(argu = null as anything, sec = "" as text, number1 = 0 as num , number2 = 0 as num) set name = ".dblclick" set hidden = TRUE set category = null - return + var/msg = "[key_name_admin(src)]([ADMIN_KICK(src)]) attempted to use the .dblclick macro!" + log_admin(msg) + message_admins(msg) /mob/Topic(href, href_list) if(href_list["mach_close"]) diff --git a/code/modules/projectiles/guns/ballistic/launchers.dm b/code/modules/projectiles/guns/ballistic/launchers.dm index f6356dce99..12006440d2 100644 --- a/code/modules/projectiles/guns/ballistic/launchers.dm +++ b/code/modules/projectiles/guns/ballistic/launchers.dm @@ -127,15 +127,14 @@ /obj/item/gun/ballistic/rocketlauncher/attackby(obj/item/A, mob/user, params) if(magazine && istype(A, /obj/item/ammo_casing)) - if(user.temporarilyRemoveItemFromInventory(A)) - if(!chambered) - to_chat(user, "You load a new [A] into \the [src].") - playsound(src, "gun_insert_full_magazine", 70, 1) - chamber_round() - update_icon() - return TRUE - else - to_chat(user, "You cannot seem to get \the [A] out of your hands!") + if(chambered) + to_chat(user, "[src] already has a [magazine_wording] chambered.") + return + if(magazine.attackby(A, user, silent = TRUE)) + to_chat(user, "You load a new [A] into \the [src].") + playsound(src, "gun_insert_full_magazine", 70, 1) + chamber_round() + update_icon() /obj/item/gun/ballistic/rocketlauncher/update_icon() icon_state = "[initial(icon_state)]-[chambered ? "1" : "0"]" diff --git a/code/modules/projectiles/guns/ballistic/shotgun.dm b/code/modules/projectiles/guns/ballistic/shotgun.dm index 856dfed78b..7d71a9acdd 100644 --- a/code/modules/projectiles/guns/ballistic/shotgun.dm +++ b/code/modules/projectiles/guns/ballistic/shotgun.dm @@ -40,7 +40,7 @@ if(istype(user) && user.getStaminaLoss() >= STAMINA_SOFTCRIT)//CIT CHANGE - makes pumping shotguns impossible in stamina softcrit to_chat(user, "You're too exhausted for that.")//CIT CHANGE - ditto return//CIT CHANGE - ditto - pump(user) + pump(user, TRUE) recentpump = world.time + 10 if(istype(user))//CIT CHANGE - makes pumping shotguns cost a lil bit of stamina. user.adjustStaminaLossBuffered(2) //CIT CHANGE - DITTO. make this scale inversely to the strength stat when stats/skills are added @@ -52,7 +52,9 @@ process_fire(user, user, FALSE) . = 1 -/obj/item/gun/ballistic/shotgun/proc/pump(mob/M) +/obj/item/gun/ballistic/shotgun/proc/pump(mob/M, visible = TRUE) + if(visible) + M.visible_message("[M] racks [src].", "You rack [src].") playsound(M, 'sound/weapons/shotgunpump.ogg', 60, 1) pump_unload(M) pump_reload(M) diff --git a/code/modules/research/techweb/all_nodes.dm b/code/modules/research/techweb/all_nodes.dm index 9c3a1a4f36..99397897c6 100644 --- a/code/modules/research/techweb/all_nodes.dm +++ b/code/modules/research/techweb/all_nodes.dm @@ -447,15 +447,6 @@ "portadrive_basic", "portadrive_advanced", "portadrive_super", "cardslot", "aislot", "miniprinter", "APClink", "bat_control", "bat_normal", "bat_advanced", "bat_super", "bat_micro", "bat_nano", "cpu_normal", "pcpu_normal", "cpu_small", "pcpu_small") -/datum/techweb_node/computer_board_gaming - id = "computer_board_gaming" - display_name = "Arcade Games" - description = "For the slackers on the station." - prereq_ids = list("comptech") - design_ids = list("arcade_battle", "arcade_orion", "slotmachine") // Magic money - research_costs = list(TECHWEB_POINT_TYPE_GENERIC = 1500) - export_price = 2000 - /datum/techweb_node/comp_recordkeeping id = "comp_recordkeeping" display_name = "Computerized Recordkeeping" diff --git a/code/modules/vending/megaseed.dm b/code/modules/vending/megaseed.dm index b1b69a8cd2..d230f40af0 100644 --- a/code/modules/vending/megaseed.dm +++ b/code/modules/vending/megaseed.dm @@ -24,6 +24,7 @@ /obj/item/seeds/lime = 3, /obj/item/seeds/onion = 3, /obj/item/seeds/orange = 3, + /obj/item/seeds/peach = 3, /obj/item/seeds/peanutseed = 3, /obj/item/seeds/pineapple = 3, /obj/item/seeds/potato = 3, diff --git a/code/modules/vending/wardrobes.dm b/code/modules/vending/wardrobes.dm index 08ed655297..015890419d 100644 --- a/code/modules/vending/wardrobes.dm +++ b/code/modules/vending/wardrobes.dm @@ -320,6 +320,9 @@ /obj/item/clothing/suit/nun = 2, /obj/item/clothing/head/nun_hood = 2, /obj/item/clothing/suit/holidaypriest = 2, + /obj/item/clothing/suit/pharaoh = 2, + /obj/item/clothing/head/nemes = 1, + /obj/item/clothing/head/pharaoh = 1, /obj/item/storage/fancy/candle_box = 3) refill_canister = /obj/item/vending_refill/wardrobe/chap_wardrobe diff --git a/config/config.txt b/config/config.txt index 3bc9f873a9..a01f5424da 100644 --- a/config/config.txt +++ b/config/config.txt @@ -4,6 +4,7 @@ $include game_options.txt $include dbconfig.txt $include comms.txt $include antag_rep.txt +$include donator_groupings.txt # You can use the @ character at the beginning of a config option to lock it from being edited in-game # Example usage: diff --git a/config/donator_groupings.txt b/config/donator_groupings.txt new file mode 100644 index 0000000000..b26d1efe22 --- /dev/null +++ b/config/donator_groupings.txt @@ -0,0 +1,8 @@ +#this is a bad system but I'm lazy so it piggybacks off config loader system. +#Specify group followed by ckey for each ckey. + +#TIER_1_DONATORS test_ckey + +#TIER_2_DONATORS test_ckey + +#TIER_3_DONATORS test_ckey diff --git a/html/changelogs/AutoChangeLog-pr-9080.yml b/html/changelogs/AutoChangeLog-pr-9080.yml new file mode 100644 index 0000000000..1ae1e3e2aa --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9080.yml @@ -0,0 +1,4 @@ +author: "Fermis" +delete-after: True +changes: + - rscadd: "Adds 3 new music tracks." diff --git a/html/changelogs/AutoChangeLog-pr-9132.yml b/html/changelogs/AutoChangeLog-pr-9132.yml new file mode 100644 index 0000000000..f9dee17687 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9132.yml @@ -0,0 +1,4 @@ +author: "Toriate" +delete-after: True +changes: + - imageadd: "Updated the sprites of all the regular crates" diff --git a/html/changelogs/AutoChangeLog-pr-9168.yml b/html/changelogs/AutoChangeLog-pr-9168.yml new file mode 100644 index 0000000000..2375f6a28a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9168.yml @@ -0,0 +1,4 @@ +author: "Seris02" +delete-after: True +changes: + - rscadd: "Added looc hotkey" diff --git a/html/changelogs/AutoChangeLog-pr-9172.yml b/html/changelogs/AutoChangeLog-pr-9172.yml new file mode 100644 index 0000000000..751cfa6d26 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9172.yml @@ -0,0 +1,4 @@ +author: "kevinz000" +delete-after: True +changes: + - rscadd: "Racking shotguns is now more threatening." diff --git a/html/changelogs/AutoChangeLog-pr-9175.yml b/html/changelogs/AutoChangeLog-pr-9175.yml new file mode 100644 index 0000000000..d3aa92d42d --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9175.yml @@ -0,0 +1,5 @@ +author: "lolman360" +delete-after: True +changes: + - rscadd: "Added durathread jumpskirt" + - imageadd: "Duraskirt sprites and rolled down jumpsuit sprites." diff --git a/html/changelogs/AutoChangeLog-pr-9178.yml b/html/changelogs/AutoChangeLog-pr-9178.yml new file mode 100644 index 0000000000..2a6de13f5e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9178.yml @@ -0,0 +1,4 @@ +author: "Bhijn" +delete-after: True +changes: + - bugfix: "the `!tgs poly` command now actually works" diff --git a/html/changelogs/AutoChangeLog-pr-9180.yml b/html/changelogs/AutoChangeLog-pr-9180.yml new file mode 100644 index 0000000000..e184ad3205 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9180.yml @@ -0,0 +1,4 @@ +author: "Bhijn" +delete-after: True +changes: + - rscadd: "Poly now has a 0.01% chance per squawk to speak through the TGS relay." diff --git a/html/changelogs/AutoChangeLog-pr-9184.yml b/html/changelogs/AutoChangeLog-pr-9184.yml new file mode 100644 index 0000000000..d0b4d1fa7e --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9184.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - rscdel: "Removes an obnoxious temporary overlay var." diff --git a/html/changelogs/AutoChangeLog-pr-9186.yml b/html/changelogs/AutoChangeLog-pr-9186.yml new file mode 100644 index 0000000000..f0497ee7c2 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9186.yml @@ -0,0 +1,5 @@ +author: "Sishen1542" +delete-after: True +changes: + - rscadd: "added pharaoh gear to chaplain vendor" + - spellcheck: "fixed typos in pharaoh items" diff --git a/html/changelogs/AutoChangeLog-pr-9200.yml b/html/changelogs/AutoChangeLog-pr-9200.yml new file mode 100644 index 0000000000..d1be09ee4a --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9200.yml @@ -0,0 +1,4 @@ +author: "Owai-Seek" +delete-after: True +changes: + - bugfix: "fixed them strawberries" diff --git a/html/changelogs/AutoChangeLog-pr-9204.yml b/html/changelogs/AutoChangeLog-pr-9204.yml new file mode 100644 index 0000000000..3b70354fd9 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9204.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "/cursed from a item path" diff --git a/html/changelogs/AutoChangeLog-pr-9208.yml b/html/changelogs/AutoChangeLog-pr-9208.yml new file mode 100644 index 0000000000..1645164266 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9208.yml @@ -0,0 +1,4 @@ +author: "Ghommie" +delete-after: True +changes: + - bugfix: "colorable socks can be colored again." diff --git a/html/changelogs/AutoChangeLog-pr-9210.yml b/html/changelogs/AutoChangeLog-pr-9210.yml new file mode 100644 index 0000000000..b02811e7a8 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9210.yml @@ -0,0 +1,7 @@ +author: "EmeraldSundisk" +delete-after: True +changes: + - tweak: "CentCom has noticed the lack of coffins in Delta Station's chapel and provided some, but in exchange for reducing the chapel morgue's capacity." + - tweak: "Fixed a maintenance door the chaplain should have been able to open." + - bugfix: "Fixes space areas outside the driver +removal: CentCom Defense Analysts have ordered the maintenance hatch to the Mass Driver room be removed citing \"security concerns\"." diff --git a/html/changelogs/AutoChangeLog-pr-9216.yml b/html/changelogs/AutoChangeLog-pr-9216.yml new file mode 100644 index 0000000000..0be9314dbc --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9216.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "oops not being blacklisted" diff --git a/html/changelogs/AutoChangeLog-pr-9219.yml b/html/changelogs/AutoChangeLog-pr-9219.yml new file mode 100644 index 0000000000..138991e507 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-9219.yml @@ -0,0 +1,4 @@ +author: "Trilbyspaceclone" +delete-after: True +changes: + - bugfix: "ports a fix" diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index 9de3ffae8c..09bfd9e0a2 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/mob/inhands/weapons/staves_lefthand.dmi b/icons/mob/inhands/weapons/staves_lefthand.dmi index ecc92c7d20..8b96b84236 100644 Binary files a/icons/mob/inhands/weapons/staves_lefthand.dmi and b/icons/mob/inhands/weapons/staves_lefthand.dmi differ diff --git a/icons/mob/inhands/weapons/staves_righthand.dmi b/icons/mob/inhands/weapons/staves_righthand.dmi index 92e5b91323..202bab9e21 100644 Binary files a/icons/mob/inhands/weapons/staves_righthand.dmi and b/icons/mob/inhands/weapons/staves_righthand.dmi differ diff --git a/icons/mob/suit.dmi b/icons/mob/suit.dmi index 7ba0ec9604..740ad43d42 100644 Binary files a/icons/mob/suit.dmi and b/icons/mob/suit.dmi differ diff --git a/icons/mob/uniform.dmi b/icons/mob/uniform.dmi index 43d35d5df5..f783331c19 100644 Binary files a/icons/mob/uniform.dmi and b/icons/mob/uniform.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index a8ec22c950..e151808cb1 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ diff --git a/icons/obj/clothing/suits.dmi b/icons/obj/clothing/suits.dmi index 88e68eea2d..dc5fa1399d 100644 Binary files a/icons/obj/clothing/suits.dmi and b/icons/obj/clothing/suits.dmi differ diff --git a/icons/obj/clothing/uniforms.dmi b/icons/obj/clothing/uniforms.dmi index 25c9b0eb06..40844c9a29 100644 Binary files a/icons/obj/clothing/uniforms.dmi and b/icons/obj/clothing/uniforms.dmi differ diff --git a/icons/obj/crates.dmi b/icons/obj/crates.dmi index 4165719a3c..3ab7f4b510 100644 Binary files a/icons/obj/crates.dmi and b/icons/obj/crates.dmi differ diff --git a/icons/obj/guns/magic.dmi b/icons/obj/guns/magic.dmi index 47d05e3470..0a4152af64 100644 Binary files a/icons/obj/guns/magic.dmi and b/icons/obj/guns/magic.dmi differ diff --git a/icons/obj/hydroponics/growing_fruits.dmi b/icons/obj/hydroponics/growing_fruits.dmi index 9b0bc9816b..029d49e196 100644 Binary files a/icons/obj/hydroponics/growing_fruits.dmi and b/icons/obj/hydroponics/growing_fruits.dmi differ diff --git a/modular_citadel/code/controllers/subsystem/job.dm b/modular_citadel/code/controllers/subsystem/job.dm index c433042ae6..46aef6f529 100644 --- a/modular_citadel/code/controllers/subsystem/job.dm +++ b/modular_citadel/code/controllers/subsystem/job.dm @@ -13,7 +13,7 @@ var/permitted = TRUE if(G.restricted_roles && G.restricted_roles.len && !(M.mind.assigned_role in G.restricted_roles)) permitted = FALSE - if(G.ckeywhitelist && G.ckeywhitelist.len && !(the_mob.client.ckey in G.ckeywhitelist)) + if(G.donoritem && !G.donator_ckey_check(the_mob.client.ckey)) permitted = FALSE if(!equipbackpackstuff && G.category == SLOT_IN_BACKPACK)//snowflake check since plopping stuff in the backpack doesnt work for pre-job equip loadout stuffs permitted = FALSE diff --git a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm index 334d6bf423..1653b8d314 100644 --- a/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm +++ b/modular_citadel/code/game/gamemodes/gangs/gang_datums.dm @@ -64,7 +64,7 @@ name = "Cyber" color = "#00f904" //Cyber and waffle shared colors, I made these guys green and made weed darker green. inner_outfits = list(/obj/item/clothing/under/color/lightbrown) - outer_outfits = list(/obj/item/clothing/suit/nemes) + outer_outfits = list(/obj/item/clothing/suit/pharaoh) /datum/team/gang/donk name = "Donk" @@ -136,4 +136,4 @@ name = "Weed" color = "#6cd648" inner_outfits = list(/obj/item/clothing/under/color/darkgreen) - outer_outfits = list(/obj/item/clothing/suit/vapeshirt) \ No newline at end of file + outer_outfits = list(/obj/item/clothing/suit/vapeshirt) diff --git a/modular_citadel/code/modules/admin/chat_commands.dm b/modular_citadel/code/modules/admin/chat_commands.dm index 39f4158646..501e0fa25a 100644 --- a/modular_citadel/code/modules/admin/chat_commands.dm +++ b/modular_citadel/code/modules/admin/chat_commands.dm @@ -27,19 +27,13 @@ var/list/speech_buffer /datum/tgs_chat_command/poly/Run() - GenerateSayList() //Has a check in here, but we're gunna sanity it after - if(!speech_buffer) - return "**BAWWWWWK!** LEAVE THE HEADSET! ***BAWKKKKK!!***" - - -/datum/tgs_chat_command/poly/proc/GenerateSayList() LAZYINITLIST(speech_buffer) //I figure this is just safe to do for everything at this point if(length(speech_buffer)) //Let's not look up the whole json EVERY TIME, just the first time. return "[pick(speech_buffer)]" else var/json_file = file("data/npc_saves/Poly.json") if(!fexists(json_file)) - return + return "**BAWWWWWK!** LEAVE THE HEADSET! ***BAWKKKKK!!***" var/list/json = json_decode(file2text(json_file)) speech_buffer = json["phrases"] - return "[pick(speech_buffer)]" \ No newline at end of file + return "[pick(speech_buffer)]" diff --git a/modular_citadel/code/modules/client/loadout/loadout.dm b/modular_citadel/code/modules/client/loadout/_loadout.dm similarity index 79% rename from modular_citadel/code/modules/client/loadout/loadout.dm rename to modular_citadel/code/modules/client/loadout/_loadout.dm index 2e11519d0b..d48da1b863 100644 --- a/modular_citadel/code/modules/client/loadout/loadout.dm +++ b/modular_citadel/code/modules/client/loadout/_loadout.dm @@ -50,12 +50,32 @@ GLOBAL_LIST_EMPTY(loadout_whitelist_ids) var/path //item-to-spawn path var/cost = 1 //normally, each loadout costs a single point. var/geargroupID //defines the ID that the gear inherits from the config + + //NEW DONATOR SYTSEM STUFF + var/donoritem //autoset on new if null + var/donator_group_id //New donator group ID system. + //END + var/list/restricted_roles + + //Old donator system/snowflake ckey whitelist, used for single ckeys/exceptions var/list/ckeywhitelist + //END + var/restricted_desc /datum/gear/New() - ..() + if(isnull(donoritem)) + if(donator_group_id || ckeywhitelist) + donoritem = TRUE if(!description && path) var/obj/O = path description = initial(O.desc) + +//a comprehensive donator check proc is intentionally not implemented due to the fact that we (((might))) have job-whitelists for donator items in the future and I like to stay on the safe side. + +//ckey only check +/datum/gear/proc/donator_ckey_check(key) + if(ckeywhitelist && ckeywhitelist.Find(key)) + return TRUE + return IS_CKEY_DONATOR_GROUP(key, donator_group_id) diff --git a/modular_citadel/icons/obj/clothing/hats.dmi b/modular_citadel/icons/obj/clothing/hats.dmi new file mode 100644 index 0000000000..ba9b4b5f8e Binary files /dev/null and b/modular_citadel/icons/obj/clothing/hats.dmi differ diff --git a/sound/music/flyinghigh.ogg b/sound/music/flyinghigh.ogg new file mode 100644 index 0000000000..4f1aa1458a Binary files /dev/null and b/sound/music/flyinghigh.ogg differ diff --git a/sound/music/samsara.ogg b/sound/music/samsara.ogg new file mode 100644 index 0000000000..4842aab3e5 Binary files /dev/null and b/sound/music/samsara.ogg differ diff --git a/sound/music/theend.ogg b/sound/music/theend.ogg new file mode 100644 index 0000000000..52255eee2a Binary files /dev/null and b/sound/music/theend.ogg differ diff --git a/strings/round_start_sounds.txt b/strings/round_start_sounds.txt index a8409188fc..c67bf6b4a6 100644 --- a/strings/round_start_sounds.txt +++ b/strings/round_start_sounds.txt @@ -22,3 +22,6 @@ sound/music/goodbyemoonmen.ogg sound/music/flytothemoon_otomatone.ogg sound/music/milkyway.ogg sound/music/rocketridersprayer.ogg +sound/music/theend.ogg +sound/music/flyinghigh.ogg +sound/music/samsara.ogg diff --git a/tgstation.dme b/tgstation.dme index bc1c1a134b..0af5cc0675 100755 --- a/tgstation.dme +++ b/tgstation.dme @@ -41,6 +41,7 @@ #include "code\__DEFINES\cult.dm" #include "code\__DEFINES\diseases.dm" #include "code\__DEFINES\DNA.dm" +#include "code\__DEFINES\donator_groupings.dm" #include "code\__DEFINES\events.dm" #include "code\__DEFINES\exports.dm" #include "code\__DEFINES\flags.dm" @@ -115,6 +116,7 @@ #include "code\__HELPERS\AStar.dm" #include "code\__HELPERS\cmp.dm" #include "code\__HELPERS\dates.dm" +#include "code\__HELPERS\donator_groupings.dm" #include "code\__HELPERS\files.dm" #include "code\__HELPERS\game.dm" #include "code\__HELPERS\global_lists.dm" @@ -159,6 +161,7 @@ #include "code\_globalvars\lists\maintenance_loot.dm" #include "code\_globalvars\lists\mapping.dm" #include "code\_globalvars\lists\medals.dm" +#include "code\_globalvars\lists\misc.dm" #include "code\_globalvars\lists\mobs.dm" #include "code\_globalvars\lists\names.dm" #include "code\_globalvars\lists\objects.dm" @@ -218,6 +221,7 @@ #include "code\controllers\configuration\configuration.dm" #include "code\controllers\configuration\entries\comms.dm" #include "code\controllers\configuration\entries\dbconfig.dm" +#include "code\controllers\configuration\entries\donator.dm" #include "code\controllers\configuration\entries\game_options.dm" #include "code\controllers\configuration\entries\general.dm" #include "code\controllers\subsystem\acid.dm" @@ -1729,6 +1733,7 @@ #include "code\modules\hydroponics\grown\mushrooms.dm" #include "code\modules\hydroponics\grown\nettle.dm" #include "code\modules\hydroponics\grown\onion.dm" +#include "code\modules\hydroponics\grown\peach.dm" #include "code\modules\hydroponics\grown\peanuts.dm" #include "code\modules\hydroponics\grown\pineapple.dm" #include "code\modules\hydroponics\grown\potato.dm" @@ -2939,6 +2944,7 @@ #include "modular_citadel\code\modules\client\preferences_savefile.dm" #include "modular_citadel\code\modules\client\preferences_toggles.dm" #include "modular_citadel\code\modules\client\loadout\__donator.dm" +#include "modular_citadel\code\modules\client\loadout\_loadout.dm" #include "modular_citadel\code\modules\client\loadout\_medical.dm" #include "modular_citadel\code\modules\client\loadout\_security.dm" #include "modular_citadel\code\modules\client\loadout\_service.dm" @@ -2947,7 +2953,6 @@ #include "modular_citadel\code\modules\client\loadout\gloves.dm" #include "modular_citadel\code\modules\client\loadout\hands.dm" #include "modular_citadel\code\modules\client\loadout\head.dm" -#include "modular_citadel\code\modules\client\loadout\loadout.dm" #include "modular_citadel\code\modules\client\loadout\mask.dm" #include "modular_citadel\code\modules\client\loadout\neck.dm" #include "modular_citadel\code\modules\client\loadout\shoes.dm"