diff --git a/code/game/atoms.dm b/code/game/atoms.dm index f2a0746d5d..f041c43bba 100644 --- a/code/game/atoms.dm +++ b/code/game/atoms.dm @@ -436,7 +436,7 @@ var/blood_id = get_blood_id() if(!(blood_id in GLOB.blood_reagent_types)) return - return list("color" = list(BLOOD_COLOR_HUMAN), "ANIMAL DNA" = "Y-") + return list("color" = BLOOD_COLOR_HUMAN, "ANIMAL DNA" = "Y-") /mob/living/carbon/get_blood_dna_list() var/blood_id = get_blood_id() @@ -444,15 +444,15 @@ return var/list/blood_dna = list() if(dna) - blood_dna["color"] = list(dna.species.exotic_blood_color) //so when combined, the list grows with the number of colors + blood_dna["color"] = dna.species.exotic_blood_color //so when combined, the list grows with the number of colors blood_dna[dna.unique_enzymes] = dna.blood_type else - blood_dna["color"] = list(BLOOD_COLOR_HUMAN) + blood_dna["color"] = BLOOD_COLOR_HUMAN blood_dna["UNKNOWN DNA"] = "X*" return blood_dna /mob/living/carbon/alien/get_blood_dna_list() - return list("color" = list(BLOOD_COLOR_XENO), "UNKNOWN DNA" = "X*") + return list("color" = BLOOD_COLOR_XENO, "UNKNOWN DNA" = "X*") //to add a mob's dna info into an object's blood_DNA list. /atom/proc/transfer_mob_blood_dna(mob/living/L) @@ -461,25 +461,35 @@ if(!new_blood_dna) return FALSE LAZYINITLIST(blood_DNA) //if our list of DNA doesn't exist yet, initialise it. - LAZYINITLIST(blood_DNA["color"]) var/old_length = blood_DNA.len blood_DNA |= new_blood_dna - blood_DNA["color"] += new_blood_dna["color"] + var/changed = FALSE + if(!blood_DNA["color"]) + blood_DNA["color"] = new_blood_dna["color"] + changed = TRUE + else + var/old = blood_DNA["color"] + blood_DNA["color"] = BlendRGB(blood_DNA["color"], new_blood_dna["color"]) + changed = old != blood_DNA["color"] if(blood_DNA.len == old_length) return FALSE - return TRUE + return changed //to add blood dna info to the object's blood_DNA list /atom/proc/transfer_blood_dna(list/blood_dna, list/datum/disease/diseases) LAZYINITLIST(blood_DNA) - LAZYINITLIST(blood_dna["color"]) var/old_length = blood_DNA.len blood_DNA |= blood_dna if(blood_DNA.len > old_length) - blood_DNA["color"] += blood_dna["color"] - return TRUE + . = TRUE //some new blood DNA was added + if(!blood_dna["color"]) + return + if(!blood_DNA["color"]) + blood_DNA["color"] = blood_dna["color"] + else + blood_DNA["color"] = BlendRGB(blood_DNA["color"], blood_dna["color"]) //to add blood from a mob onto something, and transfer their dna info /atom/proc/add_mob_blood(mob/living/M) @@ -548,27 +558,7 @@ return TRUE /atom/proc/blood_DNA_to_color() - var/list/colors = list()//first we make a list of all bloodtypes present - for(var/blood_color in blood_DNA["color"]) - if(colors[blood_color]) - colors[blood_color]++ - else - colors[blood_color] = 1 - - var/final_rgb = BLOOD_COLOR_HUMAN //a default so we don't have white blood graphics if something messed up - if(colors.len) - var/sum = 0 //this is all shitcode, but it works; trust me - final_rgb = colors[1] - sum = colors[colors[1]] - if(colors.len > 1) - var/i = 2 - while(i <= colors.len) - var/tmp = colors[colors[i]] - final_rgb = BlendRGB(final_rgb, colors[i], tmp/(tmp+sum)) - sum += tmp - i++ - - return final_rgb + return (blood_DNA && blood_DNA["color"]) || BLOOD_COLOR_HUMAN /atom/proc/clean_blood() . = blood_DNA? TRUE : FALSE diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 240b275084..2efc7f8cd3 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -2737,13 +2737,14 @@ GLOBAL_LIST_EMPTY(preferences_datums) character.dna.update_body_size(old_size) //speech stuff - var/new_tongue = GLOB.roundstart_tongues[custom_tongue] - if(new_tongue) - var/obj/item/organ/tongue/T = character.getorganslot(ORGAN_SLOT_TONGUE) - if(T) - qdel(T) - var/obj/item/organ/tongue/new_custom_tongue = new new_tongue - new_custom_tongue.Insert(character) + if(custom_tongue != "default") + var/new_tongue = GLOB.roundstart_tongues[custom_tongue] + if(new_tongue) + var/obj/item/organ/tongue/T = character.getorganslot(ORGAN_SLOT_TONGUE) + if(T) + qdel(T) + var/obj/item/organ/tongue/new_custom_tongue = new new_tongue + new_custom_tongue.Insert(character) if(custom_speech_verb != "default") character.dna.species.say_mod = custom_speech_verb diff --git a/code/modules/client/preferences_savefile.dm b/code/modules/client/preferences_savefile.dm index efcba9bd3e..3a8e7582cb 100644 --- a/code/modules/client/preferences_savefile.dm +++ b/code/modules/client/preferences_savefile.dm @@ -325,7 +325,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car modless_key_bindings = sanitize_islist(modless_key_bindings, list()) verify_keybindings_valid() // one of these days this will runtime and you'll be glad that i put it in a different proc so no one gets their saves wiped - sanitize_speech_and_tongue() return 1 @@ -347,12 +346,6 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car if(!GLOB.keybindings_by_name[bindname]) modless_key_bindings -= key -/datum/preferences/proc/sanitize_speech_and_tongue() - if(!(custom_speech_verb in GLOB.speech_verbs)) - custom_speech_verb = GLOB.speech_verbs[1] - if(!(custom_tongue in GLOB.roundstart_tongues)) - custom_tongue = GLOB.roundstart_tongues[1] - /datum/preferences/proc/save_preferences() if(!path) return 0 @@ -702,6 +695,8 @@ SAVEFILE UPDATING/VERSIONING - 'Simplified', or rather, more coder-friendly ~Car features["balls_visibility"] = sanitize_inlist(features["balls_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) features["vag_visibility"] = sanitize_inlist(features["vag_visibility"], safe_visibilities, GEN_VISIBLE_NO_UNDIES) + custom_speech_verb = sanitize_inlist(custom_speech_verb, GLOB.speech_verbs, "default") + custom_tongue = sanitize_inlist(custom_tongue, GLOB.roundstart_tongues, "default") features["flavor_text"] = copytext(features["flavor_text"], 1, MAX_FLAVOR_LEN) features["silicon_flavor_text"] = copytext(features["silicon_flavor_text"], 1, MAX_FLAVOR_LEN) diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 21199ca4c0..f7da4a2636 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -154,8 +154,12 @@ dat += " " - dat += "Exosuit:[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "Empty"]" + dat += "Exosuit:[(wear_suit && !(wear_suit.item_flags & ABSTRACT)) ? wear_suit : "Empty"]" if(wear_suit) + if(istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) + var/hardsuit_head = head && istype(head, /obj/item/clothing/head/helmet/space/hardsuit) + dat += " [hardsuit_head ? "Retract Helmet" : "Extend Helmet"]" + dat += "" dat += " ↳Suit Storage:[(s_store && !(s_store.item_flags & ABSTRACT)) ? s_store : "Empty"]" if(has_breathable_mask && istype(s_store, /obj/item/tank)) dat += " [internal ? "Disable Internals" : "Set Internals"]" @@ -224,13 +228,26 @@ return SEND_SIGNAL(src, COMSIG_CARBON_EMBED_RIP, I, L) return - + if(href_list["toggle_helmet"]) + var/hardsuit_head = head && istype(head, /obj/item/clothing/head/helmet/space/hardsuit) + visible_message("[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ + "[usr] tries to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.", \ + target = usr, target_message = "You try to [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") + if(!do_mob(usr, src, POCKET_STRIP_DELAY)) + return + visible_message("[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ + "[usr] [hardsuit_head ? "retract" : "extend"] [src]'s helmet", \ + target = usr, target_message = "You [hardsuit_head ? "retract" : "extend"] [src]'s helmet.") + if(!istype(wear_suit, /obj/item/clothing/suit/space/hardsuit)) + return + var/obj/item/clothing/suit/space/hardsuit/hardsuit = wear_suit //This should be an hardsuit given all our checks + hardsuit.ToggleHelmet() + return if(href_list["item"]) var/slot = text2num(href_list["item"]) if(slot in check_obscured_slots()) to_chat(usr, "You can't reach that! Something is covering it.") - return - + return if(href_list["pockets"]) var/strip_mod = 1 var/strip_silence = FALSE diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index ec19cec055..0579c23120 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -85,8 +85,11 @@ FP.entered_dirs |= dir FP.bloodiness = S.bloody_shoes[S.blood_state] if(S.last_bloodtype) - FP.blood_DNA += list(S.last_blood_DNA = S.last_bloodtype) - FP.blood_DNA["color"] += S.last_blood_color + FP.blood_DNA[S.last_blood_DNA] = S.last_bloodtype + if(!FP.blood_DNA["color"]) + FP.blood_DNA["color"] = S.last_blood_color + else + FP.blood_DNA["color"] = BlendRGB(FP.blood_DNA["color"], S.last_blood_color) FP.update_icon() update_inv_shoes() //End bloody footprints diff --git a/code/modules/reagents/chemistry/machinery/chem_master.dm b/code/modules/reagents/chemistry/machinery/chem_master.dm index f197a41cce..dcee2ae3c5 100644 --- a/code/modules/reagents/chemistry/machinery/chem_master.dm +++ b/code/modules/reagents/chemistry/machinery/chem_master.dm @@ -32,7 +32,7 @@ for (var/x in 1 to PILL_STYLE_COUNT) var/list/SL = list() SL["id"] = x - SL["htmltag"] = assets.icon_class_name("pill[x]") + SL["className"] = assets.icon_class_name("pill[x]") pillStyles += list(SL) . = ..() diff --git a/code/modules/reagents/chemistry/reagents/other_reagents.dm b/code/modules/reagents/chemistry/reagents/other_reagents.dm index 93842a16c2..f3cba53727 100644 --- a/code/modules/reagents/chemistry/reagents/other_reagents.dm +++ b/code/modules/reagents/chemistry/reagents/other_reagents.dm @@ -71,7 +71,9 @@ if(data["blood_DNA"]) B.blood_DNA[data["blood_DNA"]] = data["blood_type"] if(!B.blood_DNA["color"]) - B.blood_DNA["color"] = list(data["bloodcolor"]) + B.blood_DNA["color"] = data["bloodcolor"] + else + B.blood_DNA["color"] = BlendRGB(B.blood_DNA["color"], data["bloodcolor"]) if(B.reagents) B.reagents.add_reagent(type, reac_volume) B.update_icon() diff --git a/code/modules/research/rdconsole.dm b/code/modules/research/rdconsole.dm index 97555b7248..a7b266fc0e 100644 --- a/code/modules/research/rdconsole.dm +++ b/code/modules/research/rdconsole.dm @@ -219,6 +219,8 @@ Nothing else in the console has ID requirements. /obj/machinery/computer/rdconsole/proc/ui_header() var/list/l = list() + var/datum/asset/spritesheet/sheet = get_asset_datum(/datum/asset/spritesheet/research_designs) + l += "[sheet.css_tag()][RDSCREEN_NOBREAK]" l += "
[stored_research.organization] Research and Development Network" l += "Available points:
[techweb_point_display_rdconsole(stored_research.research_points, stored_research.last_bitcoins)]" l += "Security protocols: [obj_flags & EMAGGED ? "Disabled" : "Enabled"]" diff --git a/html/changelog.html b/html/changelog.html index 66f8141f28..cbda6271e6 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -50,6 +50,44 @@ -->
+

03 July 2020

+

Arturlang updated:

+ +

Ghommie updated:

+ +

LetterN updated:

+ +

Onule updated:

+ +

Sonic121x updated:

+ +

bunny232 updated:

+ +

timothyteakettle updated:

+ +

02 July 2020

Ghommie updated: