diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 02b8a8e30b1..10e4e985b37 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -319,10 +319,8 @@ #define SHELTER_DEPLOY_BAD_AREA "bad area" #define SHELTER_DEPLOY_ANCHORED_OBJECTS "anchored objects" -// Client donator levels -#define DONATOR_LEVEL_NONE 0 -#define DONATOR_LEVEL_ONE 1 -#define DONATOR_LEVEL_TWO 2 +// Maximum donation level +#define DONATOR_LEVEL_MAX 4 // The cooldown on OOC messages such as OOC, LOOC, praying and adminhelps #define OOC_COOLDOWN 5 diff --git a/code/controllers/hooks-defs.dm b/code/controllers/hooks-defs.dm index 433e2647d32..59510162e1c 100644 --- a/code/controllers/hooks-defs.dm +++ b/code/controllers/hooks-defs.dm @@ -9,10 +9,3 @@ * Called in gameticker.dm when a round starts. */ /hook/roundstart - -/** - * Captain spawned hook. - * Called in supervisor.dm when a captain spawns - * Parameters: var/mob/living/carbon/human/captain - */ -/hook/captain_spawned \ No newline at end of file diff --git a/code/controllers/subsystem/jobs.dm b/code/controllers/subsystem/jobs.dm index a84aab47c0b..f7021c88b5c 100644 --- a/code/controllers/subsystem/jobs.dm +++ b/code/controllers/subsystem/jobs.dm @@ -1,7 +1,8 @@ SUBSYSTEM_DEF(jobs) name = "Jobs" init_order = INIT_ORDER_JOBS // 12 - flags = SS_NO_FIRE + wait = 3000 // 5 minutes (Deciseconds) + runlevels = RUNLEVEL_GAME //List of all jobs var/list/occupations = list() @@ -21,6 +22,12 @@ SUBSYSTEM_DEF(jobs) LoadJobs("config/jobs.txt") return ..() +// Only fires every 5 minutes +/datum/controller/subsystem/jobs/fire() + if(!config.sql_enabled || !config.use_exp_tracking) + return + update_exp(5,0) + /datum/controller/subsystem/jobs/proc/SetupOccupations(var/list/faction = list("Station")) occupations = list() var/list/all_jobs = subtypesof(/datum/job) diff --git a/code/game/gamemodes/changeling/powers/mutations.dm b/code/game/gamemodes/changeling/powers/mutations.dm index 4b5560fe333..bed4c95ef86 100644 --- a/code/game/gamemodes/changeling/powers/mutations.dm +++ b/code/game/gamemodes/changeling/powers/mutations.dm @@ -132,15 +132,6 @@ throw_range = 0 throw_speed = 0 -/obj/item/melee/arm_blade/New() - ..() - if(ismob(loc)) - loc.visible_message("A grotesque blade forms around [loc.name]\'s arm!", "Our arm twists and mutates, transforming it into a deadly blade.", "You hear organic matter ripping and tearing!") - -/obj/item/melee/arm_blade/dropped(mob/user) - user.visible_message("With a sickening crunch, [user] reforms [user.p_their()] blade into an arm!", "We assimilate the blade back into our body.", "You hear organic matter ripping and tearing!") - . = ..() - /obj/item/melee/arm_blade/afterattack(atom/target, mob/user, proximity) if(!proximity) return diff --git a/code/game/gamemodes/wizard/artefact.dm b/code/game/gamemodes/wizard/artefact.dm index 243f4e3a3fa..a069787c375 100644 --- a/code/game/gamemodes/wizard/artefact.dm +++ b/code/game/gamemodes/wizard/artefact.dm @@ -637,9 +637,9 @@ var/global/list/multiverse = list() if(M.stat != DEAD) to_chat(user, "This artifact can only affect the dead!") return - - if(!M.mind || !M.client) - to_chat(user, "There is no soul connected to this body...") + + if((!M.mind || !M.client) && !M.grab_ghost()) + to_chat(user,"There is no soul connected to this body...") return check_spooky()//clean out/refresh the list @@ -652,6 +652,7 @@ var/global/list/multiverse = list() else M.set_species(/datum/species/skeleton) M.visible_message(" A massive amount of flesh sloughs off [M] and a skeleton rises up!") + M.grab_ghost() // yoinks the ghost if its not in the body M.revive() equip_skeleton(M) spooky_scaries |= M @@ -732,9 +733,8 @@ var/global/list/multiverse = list() H.update_dna() H.update_body() - + H.grab_ghost() H.revive() - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/sandal(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/head/kitty(H), slot_head) H.equip_to_slot_or_del(new /obj/item/clothing/under/schoolgirl(H), slot_w_uniform) diff --git a/code/game/jobs/job/supervisor.dm b/code/game/jobs/job/supervisor.dm index 710835ca873..3208e9d3533 100644 --- a/code/game/jobs/job/supervisor.dm +++ b/code/game/jobs/job/supervisor.dm @@ -24,7 +24,7 @@ var/datum/announcement/minor/captain_announcement = new(do_newscast = 0) /datum/job/captain/announce(mob/living/carbon/human/H) . = ..() captain_announcement.Announce("All hands, Captain [H.real_name] on deck!") - callHook("captain_spawned", list("captain" = H)) + updateDisplaycase(H) /datum/outfit/job/captain name = "Captain" diff --git a/code/game/jobs/job_exp.dm b/code/game/jobs/job_exp.dm index 2a7927d09bf..359981ded4f 100644 --- a/code/game/jobs/job_exp.dm +++ b/code/game/jobs/job_exp.dm @@ -292,12 +292,3 @@ var/global/list/role_playtime_requirements = list( log_game("SQL ERROR during exp_update_client write. Error : \[[err]\]\n") message_admins("SQL ERROR during exp_update_client write. Error : \[[err]\]\n") return - -/hook/roundstart/proc/exptimer() - if(!config.sql_enabled || !config.use_exp_tracking) - return 1 - spawn(0) - while(TRUE) - sleep(5 MINUTES) - update_exp(5,0) - return 1 diff --git a/code/game/machinery/telecomms/ntsl2.dm b/code/game/machinery/telecomms/ntsl2.dm index 604fcdfbe7e..32e9913e129 100644 --- a/code/game/machinery/telecomms/ntsl2.dm +++ b/code/game/machinery/telecomms/ntsl2.dm @@ -9,6 +9,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) * as well as allowing users to save and load configurations. */ /datum/nttc_configuration + var/regex/word_blacklist = new("(EXPLOIT WARNING: [ckey] attempted to upload an NTTC configuration containing JS abusable tags!") + log_admin("EXPLOIT WARNING: [ckey] attempted to upload an NTTC configuration containing JS abusable tags") + return FALSE var/list/var_list = json_decode(text) for(var/variable in var_list) if(variable in to_serialize) // Don't just accept any random vars jesus christ! @@ -236,6 +241,7 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) variable_value = nttc_sanitize(variable_value, sanitize_method) if(variable_value != null) vars[variable] = variable_value + return TRUE // Sanitizing user input. Don't blindly trust the JSON. /datum/nttc_configuration/proc/nttc_sanitize(variable, sanitize_method) @@ -408,6 +414,11 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) var/new_value = input(user, "Provide a new value for the key [new_key]", "New Row") as text|null if(new_value == null) return + if(word_blacklist.Find(new_value)) //uh oh, they tried to be naughty + message_admins("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags!") + log_admin("EXPLOIT WARNING: [user.ckey] attempted to add a NTTC regex row containing JS abusable tags") + to_chat(user, "ERROR: Regex contained bad strings. Upload cancelled.") + return var/list/table = vars[href_list["table"]] table[new_key] = new_value to_chat(user, "Added row [new_key] -> [new_value].") @@ -450,8 +461,8 @@ GLOBAL_DATUM_INIT(nttc_config, /datum/nttc_configuration, new()) if(href_list["load_config"]) var/json = input(user, "Provide configuration JSON below.", "Load Config", nttc_serialize()) as message - nttc_deserialize(json, source) - log_action(user, "has uploaded a NTTC JSON configuration: [ADMIN_SHOWDETAILS("Show", json)]", TRUE) + if(nttc_deserialize(json, source, user.ckey)) + log_action(user, "has uploaded a NTTC JSON configuration: [ADMIN_SHOWDETAILS("Show", json)]", TRUE) user << output(list2params(list(nttc_serialize())), "[window_id].browser:updateConfig") diff --git a/code/game/objects/structures/displaycase.dm b/code/game/objects/structures/displaycase.dm index 543ebd7af91..6b54f61537e 100644 --- a/code/game/objects/structures/displaycase.dm +++ b/code/game/objects/structures/displaycase.dm @@ -2,17 +2,15 @@ #define DISPLAYCASE_FRAME_SCREWDRIVER 1 // List and hook used to set up the captain's print on their display case -var/global/list/captain_display_cases = list() +GLOBAL_LIST_INIT(captain_display_cases, list()) -/hook/captain_spawned/proc/displaycase(mob/living/carbon/human/captain) - if(!captain_display_cases.len) - return 1 +/proc/updateDisplaycase(mob/living/carbon/human/captain) + if(!GLOB.captain_display_cases.len) + return var/fingerprint = captain.get_full_print() - for(var/obj/structure/displaycase/D in captain_display_cases) - if(istype(D)) - D.ue = fingerprint - - return 1 + for(var/item in GLOB.captain_display_cases) + var/obj/structure/displaycase/CASE = item + CASE.ue = fingerprint /obj/structure/displaycase_frame name = "display case frame" @@ -123,6 +121,10 @@ var/global/list/captain_display_cases = list() req_access = list(access_captain) start_showpiece_type = /obj/item/gun/energy/laser/captain +/obj/structure/displaycase/captains_laser/Initialize(mapload) + . = ..() + GLOB.captain_display_cases += src + /obj/structure/displaycase/stechkin name = "officer's display case" desc = "A display case containing a humble stechkin pistol. Never forget your roots." @@ -136,7 +138,7 @@ var/global/list/captain_display_cases = list() return ..() /obj/structure/displaycase/captains_laser/Destroy() - captain_display_cases -= src + GLOB.captain_display_cases -= src return ..() /obj/structure/displaycase/examine(mob/user) diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 9325d3a08b5..5a2807e8379 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -11,7 +11,7 @@ var/global/admin_ooc_colour = "#b82e00" /client/verb/ooc(msg = "" as text) set name = "OOC" set category = "OOC" - + if(!mob) return if(IsGuestKey(key)) @@ -28,10 +28,10 @@ var/global/admin_ooc_colour = "#b82e00" if(prefs.muted & MUTE_OOC) to_chat(src, "You cannot use OOC (muted).") return - + if(!msg) msg = typing_input(src.mob, "", "ooc \"text\"") - + msg = trim(sanitize(copytext(msg, 1, MAX_MESSAGE_LEN))) if(!msg) return @@ -76,7 +76,7 @@ var/global/admin_ooc_colour = "#b82e00" var/icon/byond = icon('icons/member_content.dmi', "blag") display_name = "[bicon(byond)][display_name]" - if(donator_level >= DONATOR_LEVEL_ONE) + if(donator_level > 0) if((prefs.toggles & DONATOR_PUBLIC)) var/icon/donator = icon('icons/ooc_tag_16x.dmi', "donator") display_name = "[bicon(donator)][display_name]" diff --git a/code/modules/client/client defines.dm b/code/modules/client/client defines.dm index 1d26a013986..c15ea50c93e 100644 --- a/code/modules/client/client defines.dm +++ b/code/modules/client/client defines.dm @@ -81,7 +81,7 @@ var/datum/chatOutput/chatOutput // Donator stuff. - var/donator_level = DONATOR_LEVEL_NONE + var/donator_level = 0 // If set to true, this client can interact with atoms such as buttons and doors on top of regular machinery interaction var/advanced_admin_interaction = FALSE diff --git a/code/modules/client/client procs.dm b/code/modules/client/client procs.dm index 4ecb8fea741..ae2698bcfb2 100644 --- a/code/modules/client/client procs.dm +++ b/code/modules/client/client procs.dm @@ -328,8 +328,6 @@ GLOB.admins += src holder.owner = src - donator_check() - //preferences datum - also holds some persistant data for the client (because we may as well keep these datums to a minimum) prefs = preferences_datums[ckey] if(!prefs) @@ -343,12 +341,6 @@ spawn() // Goonchat does some non-instant checks in start() chatOutput.start() - if(custom_event_msg && custom_event_msg != "") - to_chat(src, "

Custom Event

") - to_chat(src, "

A custom event is taking place. OOC Info:

") - to_chat(src, "[html_encode(custom_event_msg)]") - to_chat(src, "
") - if( (world.address == address || !address) && !host ) host = key world.update_status() @@ -376,6 +368,7 @@ to_chat(src, message) clientmessages.Remove(ckey) + donator_check() send_resources() @@ -400,6 +393,12 @@ screen += void + if(custom_event_msg && custom_event_msg != "") + to_chat(src, "

Custom Event

") + to_chat(src, "

A custom event is taking place. OOC Info:

") + to_chat(src, "[html_encode(custom_event_msg)]") + to_chat(src, "
") + if(!winexists(src, "asset_cache_browser")) // The client is using a custom skin, tell them. to_chat(src, "Unable to access asset cache browser, if you are using a custom skin file, please allow DS to download the updated version, if you are not, then make a bug report. This is not a critical issue but can cause issues with resource downloading, as it is impossible to know when extra resources arrived to you.") @@ -431,13 +430,17 @@ if(!dbcon.IsConnected()) return + if(check_rights(R_ADMIN, 0, mob)) // Yes, the mob is required, regardless of other examples in this file, it won't work otherwise + donator_level = DONATOR_LEVEL_MAX + return + //Donator stuff. var/DBQuery/query_donor_select = dbcon.NewQuery("SELECT ckey, tier, active FROM `[format_table_name("donators")]` WHERE ckey = '[ckey]'") query_donor_select.Execute() while(query_donor_select.NextRow()) if(!text2num(query_donor_select.item[3])) // Inactive donator. - donator_level = DONATOR_LEVEL_NONE + donator_level = 0 return donator_level = text2num(query_donor_select.item[2]) break diff --git a/code/modules/client/preference/loadout/loadout.dm b/code/modules/client/preference/loadout/loadout.dm index b42c5d5abf1..63825cc1237 100644 --- a/code/modules/client/preference/loadout/loadout.dm +++ b/code/modules/client/preference/loadout/loadout.dm @@ -4,7 +4,6 @@ var/list/gear_datums = list() /datum/loadout_category var/category = "" var/list/gear = list() - var/donor_only = FALSE /datum/loadout_category/New(cat) category = cat @@ -34,8 +33,6 @@ var/list/gear_datums = list() if(!loadout_categories[use_category]) loadout_categories[use_category] = new /datum/loadout_category(use_category) var/datum/loadout_category/LC = loadout_categories[use_category] - if(initial(G.donor_only)) - LC.donor_only = TRUE gear_datums[use_name] = new geartype LC.gear[use_name] = gear_datums[use_name] @@ -57,7 +54,7 @@ var/list/gear_datums = list() var/list/gear_tweaks = list() //List of datums which will alter the item after it has been spawned. var/subtype_path = /datum/gear //for skipping organizational subtypes (optional) var/subtype_cost_overlap = TRUE //if subtypes can take points at the same time - var/donor_only = FALSE // if it's only available to donors + var/donator_tier = 0 /datum/gear/New() ..() diff --git a/code/modules/client/preference/loadout/loadout_donor.dm b/code/modules/client/preference/loadout/loadout_donor.dm index 9e13662a7d8..5558a988209 100644 --- a/code/modules/client/preference/loadout/loadout_donor.dm +++ b/code/modules/client/preference/loadout/loadout_donor.dm @@ -1,5 +1,5 @@ /datum/gear/donor - donor_only = TRUE + donator_tier = 2 sort_category = "Donor" subtype_path = /datum/gear/donor @@ -77,6 +77,26 @@ display_name = "Guy Fawkes mask" path = /obj/item/clothing/mask/fawkes -/datum/gear/donor/noble_clothes - display_name = "Noble Clothes" - path = /obj/item/clothing/under/noble_clothes +/datum/gear/donor/id_decal_silver + display_name = "Silver ID Decal" + path = /obj/item/id_decal/silver + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_prisoner + display_name = "Prisoner ID Decal" + path = /obj/item/id_decal/prisoner + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_emag + display_name = "Emag ID Decal" + path = /obj/item/id_decal/emag + donator_tier = 3 + cost = 2 + +/datum/gear/donor/id_decal_gold + display_name = "Gold ID Decal" + path = /obj/item/id_decal/gold + donator_tier = 4 + cost = 4 \ No newline at end of file diff --git a/code/modules/client/preference/preferences.dm b/code/modules/client/preference/preferences.dm index 22894aaa691..237da907a43 100644 --- a/code/modules/client/preference/preferences.dm +++ b/code/modules/client/preference/preferences.dm @@ -211,7 +211,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts unlock_content = C.IsByondMember() if(unlock_content) max_save_slots = MAX_SAVE_SLOTS_MEMBER - if(C.donator_level >= DONATOR_LEVEL_ONE) + if(C.donator_level > 0) max_gear_slots += 5 loaded_preferences_successfully = load_preferences(C) // Do not call this with no client/C, it generates a runtime / SQL error @@ -448,7 +448,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts dat += " - Color: [UI_style_color]    
" dat += " - UI Style: [UI_style]
" dat += "Deadchat Anonymity: [ghost_anonsay ? "Anonymous" : "Not Anonymous"]
" - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) dat += "Donator Publicity: [(toggles & DONATOR_PUBLIC) ? "Public" : "Hidden"]
" dat += "Fancy NanoUI: [(nanoui_fancy) ? "Yes" : "No"]
" dat += "FPS: [clientfps]
" @@ -508,10 +508,6 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts var/firstcat = 1 for(var/category in loadout_categories) - var/datum/loadout_category/LC = loadout_categories[category] - if(LC.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // level two donators get the donator loadout, so don't show it to anyone with less than that - continue if(firstcat) firstcat = 0 else @@ -529,7 +525,10 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts for(var/gear_name in LC.gear) var/datum/gear/G = LC.gear[gear_name] var/ticked = (G.display_name in gear) - dat += "[G.display_name]" + if(G.donator_tier > user.client.donator_level) + dat += "[G.display_name]" + else + dat += "[G.display_name]" dat += "[G.cost]" if(G.allowed_roles) dat += "Restrictions: " @@ -1147,10 +1146,9 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts if(TG.display_name in gear) gear -= TG.display_name else - if(TG.donor_only) - if(user.client.donator_level < DONATOR_LEVEL_TWO) // donator items are locked to > tier 2 - //they normally can't even get this far- but just in case of href exploits, we check them here - return + if(TG.donator_tier && user.client.donator_level < TG.donator_tier) + to_chat(user, "That gear is only available at a higher donation tier than you are on.") + return var/total_cost = 0 var/list/type_blacklist = list() for(var/gear_name in gear) @@ -1944,7 +1942,7 @@ var/global/list/special_role_times = list( //minimum age (in days) for accounts toggles ^= MEMBER_PUBLIC if("donor_public") - if(user.client.donator_level >= DONATOR_LEVEL_ONE) + if(user.client.donator_level > 0) toggles ^= DONATOR_PUBLIC if("gender") diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index f16d04e3e86..475b7079444 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -30,6 +30,7 @@ msg += "[name]" var/displayed_species = dna.species.name + var/examine_color = dna.species.flesh_color for(var/obj/item/clothing/C in src) //Disguise checks if(C == src.head || C == src.wear_suit || C == src.wear_mask || C == src.w_uniform || C == src.belt || C == src.back) if(C.species_disguise) @@ -37,11 +38,11 @@ if(skipjumpsuit && skipface || (NO_EXAMINE in dna.species.species_traits)) //either obscured or on the nospecies list msg += "!\n" //omit the species when examining else if(displayed_species == "Slime People") //snowflakey because Slime People are defined as a plural - msg += ", a slime person!\n" + msg += ", a slime person!\n" else if(displayed_species == "Unathi") //DAMN YOU, VOWELS - msg += ", a unathi!\n" + msg += ", a unathi!\n" else - msg += ", \a [lowertext(displayed_species)]!\n" + msg += ", a [lowertext(displayed_species)]!\n" //uniform if(w_uniform && !skipjumpsuit && !(w_uniform.flags & ABSTRACT)) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index a5df3916210..fcedb2ee88c 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -1331,11 +1331,13 @@ var/list/thing_to_check = list(slot_wear_mask, slot_head, slot_shoes, slot_gloves, slot_l_ear, slot_r_ear, slot_glasses, slot_l_hand, slot_r_hand) var/list/kept_items[0] - + var/list/item_flags[0] for(var/thing in thing_to_check) var/obj/item/I = get_item_by_slot(thing) if(I) kept_items[I] = thing + item_flags[I] = I.flags + I.flags = 0 // Temporary set the flags to 0 if(retain_damage) //Create a list of body parts which are damaged by burn or brute and save them to apply after new organs are generated. First we just handle external organs. @@ -1401,8 +1403,9 @@ else dna.species.create_organs(src) - for(var/thing in kept_items) + for(var/obj/item/thing in kept_items) equip_to_slot_if_possible(thing, kept_items[thing], redraw_mob = 0) + thing.flags = item_flags[thing] // Reset the flags to the origional ones //Handle default hair/head accessories for created mobs. var/obj/item/organ/external/head/H = get_organ("head") diff --git a/code/modules/mob/living/carbon/human/species/_species.dm b/code/modules/mob/living/carbon/human/species/_species.dm index d9a501d2251..4c69da6fb22 100644 --- a/code/modules/mob/living/carbon/human/species/_species.dm +++ b/code/modules/mob/living/carbon/human/species/_species.dm @@ -80,7 +80,7 @@ var/dietflags = 0 // Make sure you set this, otherwise it won't be able to digest a lot of foods var/blood_color = "#A10808" //Red. - var/flesh_color = "#FFC896" //Pink. + var/flesh_color = "#d1aa2e" //Gold. var/single_gib_type = /obj/effect/decal/cleanable/blood/gibs var/remains_type = /obj/effect/decal/remains/human //What sort of remains is left behind when the species dusts var/base_color //Used when setting species. diff --git a/code/modules/mob/living/carbon/human/species/grey.dm b/code/modules/mob/living/carbon/human/species/grey.dm index 5bb314c4f43..29ab2a0ee8d 100644 --- a/code/modules/mob/living/carbon/human/species/grey.dm +++ b/code/modules/mob/living/carbon/human/species/grey.dm @@ -27,6 +27,7 @@ dietflags = DIET_HERB has_gender = FALSE reagent_tag = PROCESS_ORG + flesh_color = "#a598ad" blood_color = "#A200FF" /datum/species/grey/handle_dna(mob/living/carbon/human/H, remove) diff --git a/code/modules/mob/living/carbon/human/species/kidan.dm b/code/modules/mob/living/carbon/human/species/kidan.dm index a1d2fb6624d..538b524d4d8 100644 --- a/code/modules/mob/living/carbon/human/species/kidan.dm +++ b/code/modules/mob/living/carbon/human/species/kidan.dm @@ -13,6 +13,7 @@ bodyflags = HAS_HEAD_ACCESSORY | HAS_HEAD_MARKINGS | HAS_BODY_MARKINGS eyes = "kidan_eyes_s" dietflags = DIET_HERB + flesh_color = "#ba7814" blood_color = "#FB9800" reagent_tag = PROCESS_ORG //Default styles for created mobs. diff --git a/code/modules/mob/living/carbon/human/species/plasmaman.dm b/code/modules/mob/living/carbon/human/species/plasmaman.dm index 35d02f82509..bb900cdb5b6 100644 --- a/code/modules/mob/living/carbon/human/species/plasmaman.dm +++ b/code/modules/mob/living/carbon/human/species/plasmaman.dm @@ -41,6 +41,7 @@ ) speciesbox = /obj/item/storage/box/survival_plasmaman + flesh_color = "#8b3fba" /datum/species/plasmaman/say_filter(mob/M, message, datum/language/speaking) if(copytext(message, 1, 2) != "*") diff --git a/code/modules/mob/living/carbon/human/species/slime.dm b/code/modules/mob/living/carbon/human/species/slime.dm index b33ebc1f048..37b38de361c 100644 --- a/code/modules/mob/living/carbon/human/species/slime.dm +++ b/code/modules/mob/living/carbon/human/species/slime.dm @@ -32,6 +32,7 @@ dietflags = DIET_CARN reagent_tag = PROCESS_ORG + flesh_color = "#5fe8b1" blood_color = "#0064C8" exotic_blood = "water" blood_damage_type = TOX diff --git a/code/modules/mob/living/carbon/human/species/tajaran.dm b/code/modules/mob/living/carbon/human/species/tajaran.dm index 2b0c65aa821..6c8c2312e17 100644 --- a/code/modules/mob/living/carbon/human/species/tajaran.dm +++ b/code/modules/mob/living/carbon/human/species/tajaran.dm @@ -31,7 +31,7 @@ taste_sensitivity = TASTE_SENSITIVITY_SHARP reagent_tag = PROCESS_ORG - flesh_color = "#AFA59E" + flesh_color = "#b5a69b" base_color = "#424242" butt_sprite = "tajaran" diff --git a/html/changelogs/AutoChangeLog-pr-11261.yml b/html/changelogs/AutoChangeLog-pr-11261.yml new file mode 100644 index 00000000000..15595372438 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11261.yml @@ -0,0 +1,5 @@ +author: "Couls" +delete-after: True +changes: + - tweak: "necromantic stone now forces the ghost back into the body as a skeleton" + - rscadd: "allow skeletons to give up their bodies and offer control to ghosts" diff --git a/html/changelogs/AutoChangeLog-pr-11315.yml b/html/changelogs/AutoChangeLog-pr-11315.yml new file mode 100644 index 00000000000..e8d1dacb7dd --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11315.yml @@ -0,0 +1,4 @@ +author: "farie82" +delete-after: True +changes: + - bugfix: "Transforming into another species will now retain the items correctly. Example clings will keep their armblades and they won't get stuck with a non existing armblade they can't put back" diff --git a/html/changelogs/AutoChangeLog-pr-11399.yml b/html/changelogs/AutoChangeLog-pr-11399.yml new file mode 100644 index 00000000000..44c51779cbf --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11399.yml @@ -0,0 +1,4 @@ +author: "Kyep" +delete-after: True +changes: + - rscadd: "Added new bonus loadout items for higher-tier patrons. Also gave admins access to patron items, and ensured that during custom events, you see the custom event announcement when you connect." diff --git a/html/changelogs/AutoChangeLog-pr-11427.yml b/html/changelogs/AutoChangeLog-pr-11427.yml new file mode 100644 index 00000000000..32e770e594f --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11427.yml @@ -0,0 +1,4 @@ +author: "Arkatos" +delete-after: True +changes: + - tweak: "Species name now shows in a species theme color on examine" diff --git a/html/changelogs/AutoChangeLog-pr-11446.yml b/html/changelogs/AutoChangeLog-pr-11446.yml new file mode 100644 index 00000000000..ac51997fc92 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11446.yml @@ -0,0 +1,4 @@ +author: "Ionward" +delete-after: True +changes: + - imageadd: "Updated the cautery sprite!" diff --git a/html/changelogs/AutoChangeLog-pr-11455.yml b/html/changelogs/AutoChangeLog-pr-11455.yml new file mode 100644 index 00000000000..a571ffc3c0b --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11455.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - tweak: "Removes an infinite loop in the code" diff --git a/html/changelogs/AutoChangeLog-pr-11467.yml b/html/changelogs/AutoChangeLog-pr-11467.yml new file mode 100644 index 00000000000..ff6e7c5f739 --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11467.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - tweak: "Captains display case now actually has captains thumbprint lock on it" diff --git a/html/changelogs/AutoChangeLog-pr-11475.yml b/html/changelogs/AutoChangeLog-pr-11475.yml new file mode 100644 index 00000000000..9f7c02a26eb --- /dev/null +++ b/html/changelogs/AutoChangeLog-pr-11475.yml @@ -0,0 +1,4 @@ +author: "AffectedArc07" +delete-after: True +changes: + - bugfix: "Fixes a minor NTTC issue" diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index bc36cdaaa8f..e212d9c5882 100644 Binary files a/icons/obj/surgery.dmi and b/icons/obj/surgery.dmi differ