From 682eb7b9b6ed22e16164bddf7f38e4849a781eea Mon Sep 17 00:00:00 2001 From: Dip Date: Sat, 17 Oct 2020 22:25:29 -0300 Subject: [PATCH] gotta make sure this works yo --- code/__DEFINES/is_helpers.dm | 1 - .../mob/living/carbon/human/examine.dm | 2 - .../modules/mob/living/carbon/update_icons.dm | 1020 ++++++----------- .../simple_animal/hostile/retaliate/clown.dm | 8 +- icons/obj/surgery.dmi | Bin 37998 -> 38294 bytes .../modules/reagents/reagents/cit_reagents.dm | 4 +- 6 files changed, 329 insertions(+), 706 deletions(-) diff --git a/code/__DEFINES/is_helpers.dm b/code/__DEFINES/is_helpers.dm index 5f047e79..7d4dc1ca 100644 --- a/code/__DEFINES/is_helpers.dm +++ b/code/__DEFINES/is_helpers.dm @@ -73,7 +73,6 @@ GLOBAL_LIST_INIT(turfs_without_ground, typecacheof(list( #define isluminescent(A) (is_species(A, /datum/species/jelly/luminescent)) #define iszombie(A) (is_species(A, /datum/species/zombie)) #define ismoth(A) (is_species(A, /datum/species/moth)) -#define isinsect(A) (is_species(A, /datum/species/insect)) #define ishumanbasic(A) (is_species(A, /datum/species/human)) #define iscatperson(A) (ishumanbasic(A) && istype(A.dna.species, /datum/species/human/felinid) ) #define isvampire(A) (is_species(A,/datum/species/vampire)) diff --git a/code/modules/mob/living/carbon/human/examine.dm b/code/modules/mob/living/carbon/human/examine.dm index 624dc971..415218c4 100644 --- a/code/modules/mob/living/carbon/human/examine.dm +++ b/code/modules/mob/living/carbon/human/examine.dm @@ -145,8 +145,6 @@ . += "It appears that [t_his] brain is missing..." var/temp = getBruteLoss() //no need to calculate each of these twice - - msg += "" //Everything below gets this span var/list/msg = list() diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 9c691e1b..3541840a 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -1,733 +1,357 @@ - /////////////////////// - //UPDATE_ICONS SYSTEM// - /////////////////////// -/* Keep these comments up-to-date if you -insist- on hurting my code-baby ;_; -This system allows you to update individual mob-overlays, without regenerating them all each time. -When we generate overlays we generate the standing version and then rotate the mob as necessary.. -As of the time of writing there are 20 layers within this list. Please try to keep this from increasing. //22 and counting, good job guys - var/overlays_standing[20] //For the standing stance -Most of the time we only wish to update one overlay: - e.g. - we dropped the fireaxe out of our left hand and need to remove its icon from our mob - e.g.2 - our hair colour has changed, so we need to update our hair icons on our mob -In these cases, instead of updating every overlay using the old behaviour (regenerate_icons), we instead call -the appropriate update_X proc. - e.g. - update_l_hand() - e.g.2 - update_hair() -Note: Recent changes by aranclanos+carn: - update_icons() no longer needs to be called. - the system is easier to use. update_icons() should not be called unless you absolutely -know- you need it. - IN ALL OTHER CASES it's better to just call the specific update_X procs. -Note: The defines for layer numbers is now kept exclusvely in __DEFINES/misc.dm instead of being defined there, - then redefined and undefiend everywhere else. If you need to change the layering of sprites (or add a new layer) - that's where you should start. -All of this means that this code is more maintainable, faster and still fairly easy to use. -There are several things that need to be remembered: -> Whenever we do something that should cause an overlay to update (which doesn't use standard procs - ( i.e. you do something like l_hand = /obj/item/something new(src), rather than using the helper procs) - You will need to call the relevant update_inv_* proc - All of these are named after the variable they update from. They are defined at the mob/ level like - update_clothing was, so you won't cause undefined proc runtimes with usr.update_inv_wear_id() if the usr is a - slime etc. Instead, it'll just return without doing any work. So no harm in calling it for slimes and such. -> There are also these special cases: - update_damage_overlays() //handles damage overlays for brute/burn damage - update_body() //Handles updating your mob's body layer and mutant bodyparts - as well as sprite-accessories that didn't really fit elsewhere (underwear, undershirts, socks, lips, eyes) - //NOTE: update_mutantrace() is now merged into this! - update_hair() //Handles updating your hair overlay (used to be update_face, but mouth and - eyes were merged into update_body()) -*/ +//IMPORTANT: Multiple animate() calls do not stack well, so try to do them all at once if you can. +/mob/living/carbon/update_transform() + var/matrix/ntransform = matrix(transform) //aka transform.Copy() + var/final_pixel_y = pixel_y + var/final_dir = dir + var/changed = 0 -//HAIR OVERLAY -/mob/living/carbon/human/update_hair() - dna.species.handle_hair(src) + if(lying != lying_prev && rotate_on_lying) + changed++ + ntransform.TurnTo(lying_prev,lying) + if(lying == 0) //Lying to standing + final_pixel_y = get_standard_pixel_y_offset() + if(size_multiplier >= 1) //if its bigger than normal + ntransform.Translate(0,16 * (size_multiplier-1)) + else + if(lying_prev == 90) + ntransform.Translate(16 * (size_multiplier-1),16 * (size_multiplier-1)) -//used when putting/removing clothes that hide certain mutant body parts to just update those and not update the whole body. -/mob/living/carbon/human/proc/update_mutant_bodyparts() - dna.species.handle_mutant_bodyparts(src) + if(lying_prev == 270) + ntransform.Translate(-16 * (size_multiplier-1),16 * (size_multiplier-1)) + + else //if(lying != 0) + if(lying_prev == 0) //Standing to lying + pixel_y = get_standard_pixel_y_offset() + final_pixel_y = get_standard_pixel_y_offset(lying) + if(lying == 90) //Check the angle of the sprite to offset it accordingly. + ntransform.Translate(-16 * (size_multiplier-1),0) + if(size_multiplier < 1) //if its smaller than normal + ntransform.Translate(0,16 * (size_multiplier-1)) //we additionally offset the sprite downwards + + if(lying == 270) //check the angle of the sprite to offset it accordingly + ntransform.Translate(16 * (size_multiplier-1),0) + if(size_multiplier < 1) //if its smaller than normal + ntransform.Translate(0,16 * (size_multiplier-1)) //we additionally offset the sprite downwards + + if(dir & (EAST|WEST)) //Facing east or west + final_dir = pick(NORTH, SOUTH) //So you fall on your side rather than your face or ass + + if(resize != RESIZE_DEFAULT_SIZE) + changed++ + ntransform.Scale(resize) + resize = RESIZE_DEFAULT_SIZE + + //Apply size multiplier, thank NeverExisted for this + if(size_multiplier != previous_size) + changed++ + //now we offset the sprite + //Scaling affects offset. There's probably a smarter and easier way to do this, but this way it works for sure (?) + //Just to be clear. All this bullshit is needed because someone wanted to store the old transform matrix instead of using a new one each iteration + //Winfre is currently doing a great job at coating my nuts in slobber while i code this + if(!lying) //when standing. People of all sizes are affected equally + ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite + ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly. + ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset + else //when lying. Macros dont get an offset, Micros do. We must also check the cases when a micro becomes a macro and viceversa + if(previous_size <= 1 && size_multiplier <= 1) //micro stays a micro. We modify the side-offset + ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite + ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly + ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset + + if(previous_size <= 1 && size_multiplier > 1) //micro becomes a macro. We remove the side-offset + ntransform.Translate(0,-16 * (previous_size-1)) //reset the sprite + ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly + + if(previous_size > 1 && size_multiplier <= 1) //macro becomes a micro. We add an offset + ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly. + ntransform.Translate(0,16 * (size_multiplier-1)) //apply the new offset + + if(previous_size > 1 && size_multiplier > 1) //macro stays a macro. We just scale the sprite with no offset changes + ntransform.Scale(size_multiplier/previous_size) //scale the sprite accordingly -/mob/living/carbon/human/update_body() - remove_overlay(BODY_LAYER) - dna.species.handle_body(src) - ..() + if(changed) + animate(src, transform = ntransform, time = 2, pixel_y = final_pixel_y, dir = final_dir, easing = EASE_IN|EASE_OUT) + floating = 0 // If we were without gravity, the bouncing animation got stopped, so we make sure we restart it in next life(). -/mob/living/carbon/human/update_fire() - ..((fire_stacks > 3) ? "Standing" : "Generic_mob_burning") +/mob/living/carbon + var/list/overlays_standing[TOTAL_LAYERS] + +/mob/living/carbon/proc/apply_overlay(cache_index) + if((. = overlays_standing[cache_index])) + add_overlay(.) + +/mob/living/carbon/proc/remove_overlay(cache_index) + var/I = overlays_standing[cache_index] + if(I) + cut_overlay(I) + overlays_standing[cache_index] = null + +/mob/living/carbon/regenerate_icons() + if(notransform) + return 1 + update_inv_hands() + update_inv_handcuffed() + update_inv_legcuffed() + update_fire() -/* --------------------------------------- */ -//For legacy support. -/mob/living/carbon/human/regenerate_icons() - - if(!..()) - icon_render_key = null //invalidate bodyparts cache - update_body() - update_hair() - update_inv_w_uniform() - update_inv_wear_id() - update_inv_gloves() - update_inv_glasses() - update_inv_ears() - update_inv_shoes() - update_inv_s_store() - update_inv_wear_mask() - update_inv_head() - update_inv_belt() - update_inv_back() - update_inv_wear_suit() - update_inv_pockets() - update_inv_neck() - update_transform() - //mutations - update_mutations_overlay() - //damage overlays - update_damage_overlays() - -/* --------------------------------------- */ -//vvvvvv UPDATE_INV PROCS vvvvvv - -/mob/living/carbon/human/update_inv_w_uniform() - remove_overlay(UNIFORM_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_W_UNIFORM] - inv.update_icon() - - if(istype(w_uniform, /obj/item/clothing/under)) - var/obj/item/clothing/under/U = w_uniform - U.screen_loc = ui_iclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += w_uniform - update_observer_view(w_uniform,1) - - if(wear_suit && (wear_suit.flags_inv & HIDEJUMPSUIT)) - return - - - var/t_color = U.item_color - if(!t_color) - t_color = U.icon_state - if(U.suit_style == NORMAL_SUIT_STYLE) - if(U.adjusted == ALT_STYLE) - t_color = "[t_color]_d" - - var/alt_worn = U.alternate_worn_icon - - if(!U.force_alternate_icon && U.mutantrace_variation && U.suit_style == DIGITIGRADE_SUIT_STYLE) - alt_worn = 'modular_citadel/icons/mob/uniform_digi.dmi' - - var/mutable_appearance/uniform_overlay - - if(dna && dna.species.sexes) - var/G = (gender == FEMALE) ? "f" : "m" - if(G == "f" && U.fitted != NO_FEMALE_UNIFORM) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = (alt_worn ? alt_worn : 'icons/mob/uniform.dmi'), isinhands = FALSE, femaleuniform = U.fitted) - - if(!uniform_overlay) - uniform_overlay = U.build_worn_icon(state = "[t_color]", default_layer = UNIFORM_LAYER, default_icon_file = (alt_worn ? alt_worn : 'icons/mob/uniform.dmi'), isinhands = FALSE) - - - if(OFFSET_UNIFORM in dna.species.offset_features) - uniform_overlay.pixel_x += dna.species.offset_features[OFFSET_UNIFORM][1] - uniform_overlay.pixel_y += dna.species.offset_features[OFFSET_UNIFORM][2] - overlays_standing[UNIFORM_LAYER] = uniform_overlay - - apply_overlay(UNIFORM_LAYER) - update_mutant_bodyparts() - - -/mob/living/carbon/human/update_inv_wear_id() - remove_overlay(ID_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_ID] - inv.update_icon() - - var/mutable_appearance/id_overlay = overlays_standing[ID_LAYER] - - if(wear_id) - wear_id.screen_loc = ui_id - if(client && hud_used && hud_used.hud_shown) - client.screen += wear_id - update_observer_view(wear_id) - - //TODO: add an icon file for ID slot stuff, so it's less snowflakey - id_overlay = wear_id.build_worn_icon(state = wear_id.item_state, default_layer = ID_LAYER, default_icon_file = ((wear_id.alternate_worn_icon) ? wear_id.alternate_worn_icon : 'icons/mob/mob.dmi')) - if(OFFSET_ID in dna.species.offset_features) - id_overlay.pixel_x += dna.species.offset_features[OFFSET_ID][1] - id_overlay.pixel_y += dna.species.offset_features[OFFSET_ID][2] - overlays_standing[ID_LAYER] = id_overlay - apply_overlay(ID_LAYER) - - -/mob/living/carbon/human/update_inv_gloves() - remove_overlay(GLOVES_LAYER) - - if(client && hud_used && hud_used.inv_slots[SLOT_GLOVES]) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLOVES] - inv.update_icon() - - if(!gloves && bloody_hands) - var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyhands", -GLOVES_LAYER, color = blood_DNA_to_color()) - if(get_num_arms() < 2) - if(has_left_hand()) - bloody_overlay.icon_state = "bloodyhands_left" - else if(has_right_hand()) - bloody_overlay.icon_state = "bloodyhands_right" - - overlays_standing[GLOVES_LAYER] = bloody_overlay - - var/mutable_appearance/gloves_overlay = overlays_standing[GLOVES_LAYER] - if(gloves) - gloves.screen_loc = ui_gloves - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += gloves - update_observer_view(gloves,1) - var/t_state = gloves.item_state - if(!t_state) - t_state = gloves.icon_state - overlays_standing[GLOVES_LAYER] = gloves.build_worn_icon(state = t_state, default_layer = GLOVES_LAYER, default_icon_file = ((gloves.alternate_worn_icon) ? gloves.alternate_worn_icon : 'icons/mob/hands.dmi')) - gloves_overlay = overlays_standing[GLOVES_LAYER] - if(OFFSET_GLOVES in dna.species.offset_features) - gloves_overlay.pixel_x += dna.species.offset_features[OFFSET_GLOVES][1] - gloves_overlay.pixel_y += dna.species.offset_features[OFFSET_GLOVES][2] - overlays_standing[GLOVES_LAYER] = gloves_overlay - apply_overlay(GLOVES_LAYER) - - -/mob/living/carbon/human/update_inv_glasses() - remove_overlay(GLASSES_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated +/mob/living/carbon/update_inv_hands() + remove_overlay(HANDS_LAYER) + if (handcuffed) + drop_all_held_items() return - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_GLASSES] - inv.update_icon() + var/list/hands = list() + for(var/obj/item/I in held_items) + if(client && hud_used && hud_used.hud_version != HUD_STYLE_NOHUD) + I.screen_loc = ui_hand_position(get_held_index_of_item(I)) + client.screen += I + if(observers && observers.len) + for(var/M in observers) + var/mob/dead/observe = M + if(observe.client && observe.client.eye == src) + observe.client.screen += I + else + observers -= observe + if(!observers.len) + observers = null + break - if(glasses) - glasses.screen_loc = ui_glasses //...draw the item in the inventory screen - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open ... - client.screen += glasses //Either way, add the item to the HUD - update_observer_view(glasses,1) - if(!(head && (head.flags_inv & HIDEEYES)) && !(wear_mask && (wear_mask.flags_inv & HIDEEYES))) - overlays_standing[GLASSES_LAYER] = glasses.build_worn_icon(state = glasses.icon_state, default_layer = GLASSES_LAYER, default_icon_file = ((glasses.alternate_worn_icon) ? glasses.alternate_worn_icon : 'icons/mob/eyes.dmi')) - var/mutable_appearance/glasses_overlay = overlays_standing[GLASSES_LAYER] - if(glasses_overlay) - if(OFFSET_GLASSES in dna.species.offset_features) - glasses_overlay.pixel_x += dna.species.offset_features[OFFSET_GLASSES][1] - glasses_overlay.pixel_y += dna.species.offset_features[OFFSET_GLASSES][2] - overlays_standing[GLASSES_LAYER] = glasses_overlay - apply_overlay(GLASSES_LAYER) - - -/mob/living/carbon/human/update_inv_ears() - remove_overlay(EARS_LAYER) - - if(!get_bodypart(BODY_ZONE_HEAD)) //decapitated - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_EARS] - inv.update_icon() - - if(ears) - ears.screen_loc = ui_ears //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += ears //add it to the client's screen - update_observer_view(ears,1) - - overlays_standing[EARS_LAYER] = ears.build_worn_icon(state = ears.icon_state, default_layer = EARS_LAYER, default_icon_file = ((ears.alternate_worn_icon) ? ears.alternate_worn_icon : 'icons/mob/ears.dmi')) - var/mutable_appearance/ears_overlay = overlays_standing[EARS_LAYER] - if(OFFSET_EARS in dna.species.offset_features) - ears_overlay.pixel_x += dna.species.offset_features[OFFSET_EARS][1] - ears_overlay.pixel_y += dna.species.offset_features[OFFSET_EARS][2] - overlays_standing[EARS_LAYER] = ears_overlay - apply_overlay(EARS_LAYER) - - -/mob/living/carbon/human/update_inv_shoes() - remove_overlay(SHOES_LAYER) - - if(get_num_legs() <2) - return - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_SHOES] - inv.update_icon() -/* - if(!shoes && bloody_feet) - var/mutable_appearance/bloody_overlay = mutable_appearance('icons/effects/blood.dmi', "bloodyfeet", -SHOES_LAYER, color = blood_DNA_to_color()) - if(dna.features["taur"] != "None") - if(dna.features["taur"] in GLOB.noodle_taurs) - bloody_overlay = mutable_appearance('modular_citadel/icons/mob/64x32_effects.dmi', "snekbloodyfeet", -SHOES_LAYER, color = blood_DNA_to_color()) - if(get_num_legs() < 2) - if(has_left_leg()) - bloody_overlay.icon_state = "snekbloodyfeet_left" - else if(has_right_leg()) - bloody_overlay.icon_state = "snekbloodyfeet_right" - else if(dna.features["taur"] in GLOB.paw_taurs) - bloody_overlay = mutable_appearance('modular_citadel/icons/mob/64x32_effects.dmi', "pawbloodyfeet", -SHOES_LAYER, color = blood_DNA_to_color()) - if(get_num_legs() < 2) - if(has_left_leg()) - bloody_overlay.icon_state = "pawbloodyfeet_left" - else if(has_right_leg()) - bloody_overlay.icon_state = "pawbloodyfeet_right" - else - if(get_num_legs() < 2) - if(has_left_leg()) - bloody_overlay.icon_state = "bloodyfeet_left" - else if(has_right_leg()) - bloody_overlay.icon_state = "bloodyfeet_right" - overlays_standing[GLOVES_LAYER] = bloody_overlay*/ - - if(shoes) - var/obj/item/clothing/shoes/S = shoes - shoes.screen_loc = ui_shoes //move the item to the appropriate screen loc - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) //if the inventory is open - client.screen += shoes //add it to client's screen - update_observer_view(shoes,1) - if(S.mutantrace_variation) - if(S.adjusted == ALT_STYLE) - S.alternate_worn_icon = 'modular_citadel/icons/mob/digishoes.dmi' - else - S.alternate_worn_icon = null - var/t_state = shoes.item_state - if (!t_state) - t_state = shoes.icon_state - overlays_standing[SHOES_LAYER] = shoes.build_worn_icon(state = t_state, default_layer = SHOES_LAYER, default_icon_file = ((shoes.alternate_worn_icon) ? shoes.alternate_worn_icon : 'icons/mob/feet.dmi')) - var/mutable_appearance/shoes_overlay = overlays_standing[SHOES_LAYER] - if(OFFSET_SHOES in dna.species.offset_features) - shoes_overlay.pixel_x += dna.species.offset_features[OFFSET_SHOES][1] - shoes_overlay.pixel_y += dna.species.offset_features[OFFSET_SHOES][2] - overlays_standing[SHOES_LAYER] = shoes_overlay - apply_overlay(SHOES_LAYER) - -/mob/living/carbon/human/update_inv_s_store() - remove_overlay(SUIT_STORE_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_S_STORE] - inv.update_icon() - - if(s_store) - s_store.screen_loc = ui_sstore1 - if(client && hud_used && hud_used.hud_shown) - client.screen += s_store - update_observer_view(s_store) - var/t_state = s_store.item_state + var/t_state = I.item_state if(!t_state) - t_state = s_store.icon_state - overlays_standing[SUIT_STORE_LAYER] = mutable_appearance(((s_store.alternate_worn_icon) ? s_store.alternate_worn_icon : 'icons/mob/belt_mirror.dmi'), t_state, -SUIT_STORE_LAYER) - var/mutable_appearance/s_store_overlay = overlays_standing[SUIT_LAYER] - if(OFFSET_S_STORE in dna.species.offset_features) - s_store_overlay.pixel_x += dna.species.offset_features[OFFSET_S_STORE][1] - s_store_overlay.pixel_y += dna.species.offset_features[OFFSET_S_STORE][2] - overlays_standing[SUIT_STORE_LAYER] = s_store_overlay - apply_overlay(SUIT_STORE_LAYER) + t_state = I.icon_state + + var/icon_file = I.lefthand_file + if(get_held_index_of_item(I) % 2 == 0) + icon_file = I.righthand_file + + hands += I.build_worn_icon(state = t_state, default_layer = HANDS_LAYER, default_icon_file = icon_file, isinhands = TRUE) + + overlays_standing[HANDS_LAYER] = hands + apply_overlay(HANDS_LAYER) -/mob/living/carbon/human/update_inv_head() - ..() - update_mutant_bodyparts() - if(head) - remove_overlay(HEAD_LAYER) - var/obj/item/clothing/head/H = head - if(H.mutantrace_variation) - if(H.muzzle_var == ALT_STYLE) - H.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_helmet.dmi' - else - H.alternate_worn_icon = null +/mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning") + remove_overlay(FIRE_LAYER) + if(on_fire) + var/mutable_appearance/new_fire_overlay = mutable_appearance('icons/mob/OnFire.dmi', fire_icon, -FIRE_LAYER) + new_fire_overlay.appearance_flags = RESET_COLOR + overlays_standing[FIRE_LAYER] = new_fire_overlay - overlays_standing[HEAD_LAYER] = H.build_worn_icon(state = H.icon_state, default_layer = HEAD_LAYER, default_icon_file = ((head.alternate_worn_icon) ? H.alternate_worn_icon : 'icons/mob/head.dmi')) - var/mutable_appearance/head_overlay = overlays_standing[HEAD_LAYER] - - if(OFFSET_HEAD in dna.species.offset_features) - head_overlay.pixel_x += dna.species.offset_features[OFFSET_HEAD][1] - head_overlay.pixel_y += dna.species.offset_features[OFFSET_HEAD][2] - overlays_standing[HEAD_LAYER] = head_overlay - apply_overlay(HEAD_LAYER) - -/mob/living/carbon/human/update_inv_belt() - remove_overlay(BELT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BELT] - inv.update_icon() - - if(belt) - belt.screen_loc = ui_belt - if(client && hud_used && hud_used.hud_shown) - client.screen += belt - update_observer_view(belt) - - var/t_state = belt.item_state - if(!t_state) - t_state = belt.icon_state - - overlays_standing[BELT_LAYER] = belt.build_worn_icon(state = t_state, default_layer = BELT_LAYER, default_icon_file = ((belt.alternate_worn_icon) ? belt.alternate_worn_icon : 'icons/mob/belt.dmi')) - var/mutable_appearance/belt_overlay = overlays_standing[BELT_LAYER] - if(OFFSET_BELT in dna.species.offset_features) - belt_overlay.pixel_x += dna.species.offset_features[OFFSET_BELT][1] - belt_overlay.pixel_y += dna.species.offset_features[OFFSET_BELT][2] - overlays_standing[BELT_LAYER] = belt_overlay - apply_overlay(BELT_LAYER) - - -/mob/living/carbon/human/update_inv_wear_suit() - remove_overlay(SUIT_LAYER) - - if(client && hud_used) - var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_SUIT] - inv.update_icon() - - if(wear_suit) - var/obj/item/clothing/suit/S = wear_suit - var/no_taur_thanks = FALSE - if(!istype(S)) - no_taur_thanks = TRUE - wear_suit.screen_loc = ui_oclothing - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += wear_suit - update_observer_view(wear_suit,1) - - if(!S.force_alternate_icon) - if(!no_taur_thanks && S.mutantrace_variation) //Just make sure we've got this checked too - if(S.taurmode == NOT_TAURIC && S.adjusted == ALT_STYLE) //are we not a taur, but we have Digitigrade legs? Run this check first, then. - S.alternate_worn_icon = 'modular_citadel/icons/mob/suit_digi.dmi' - else - S.alternate_worn_icon = null - - if(S.tauric == TRUE) //Are we a suit with tauric mode possible? - if(S.taurmode == SNEK_TAURIC) - S.alternate_worn_icon = 'modular_citadel/icons/mob/taur_naga.dmi' - if(S.taurmode == PAW_TAURIC) - S.alternate_worn_icon = 'modular_citadel/icons/mob/taur_canine.dmi' - if(S.taurmode == NOT_TAURIC && S.adjusted == ALT_STYLE) - S.alternate_worn_icon = 'modular_citadel/icons/mob/suit_digi.dmi' - else if(S.taurmode == NOT_TAURIC && S.adjusted == NORMAL_STYLE) - S.alternate_worn_icon = null - - overlays_standing[SUIT_LAYER] = S.build_worn_icon(state = wear_suit.icon_state, default_layer = SUIT_LAYER, default_icon_file = ((wear_suit.alternate_worn_icon) ? S.alternate_worn_icon : 'icons/mob/suit.dmi')) - var/mutable_appearance/suit_overlay = overlays_standing[SUIT_LAYER] - if(OFFSET_SUIT in dna.species.offset_features) - suit_overlay.pixel_x += dna.species.offset_features[OFFSET_SUIT][1] - suit_overlay.pixel_y += dna.species.offset_features[OFFSET_SUIT][2] - if(!no_taur_thanks && S.center) - suit_overlay = center_image(suit_overlay, S.dimension_x, S.dimension_y) - overlays_standing[SUIT_LAYER] = suit_overlay - update_hair() - update_mutant_bodyparts() - - apply_overlay(SUIT_LAYER) - - -/mob/living/carbon/human/update_inv_pockets() - if(client && hud_used) - var/obj/screen/inventory/inv - - inv = hud_used.inv_slots[SLOT_L_STORE] - inv.update_icon() - - inv = hud_used.inv_slots[SLOT_R_STORE] - inv.update_icon() - - if(l_store) - l_store.screen_loc = ui_storage1 - if(hud_used.hud_shown) - client.screen += l_store - update_observer_view(l_store) - - if(r_store) - r_store.screen_loc = ui_storage2 - if(hud_used.hud_shown) - client.screen += r_store - update_observer_view(r_store) - - -/mob/living/carbon/human/update_inv_wear_mask() - ..() - if(wear_mask) - var/obj/item/clothing/mask/M = wear_mask - remove_overlay(FACEMASK_LAYER) - if(M.mutantrace_variation) - if(M.muzzle_var == ALT_STYLE) - M.alternate_worn_icon = 'modular_citadel/icons/mob/muzzled_mask.dmi' - else - M.alternate_worn_icon = null - - overlays_standing[FACEMASK_LAYER] = M.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = ((wear_mask.alternate_worn_icon) ? M.alternate_worn_icon : 'icons/mob/mask.dmi')) - var/mutable_appearance/mask_overlay = overlays_standing[FACEMASK_LAYER] - - if(OFFSET_FACEMASK in dna.species.offset_features) - mask_overlay.pixel_x += dna.species.offset_features[OFFSET_FACEMASK][1] - mask_overlay.pixel_y += dna.species.offset_features[OFFSET_FACEMASK][2] - overlays_standing[FACEMASK_LAYER] = mask_overlay - apply_overlay(FACEMASK_LAYER) - update_mutant_bodyparts() //e.g. upgate needed because mask now hides lizard snout - -/mob/living/carbon/human/update_inv_back() - ..() - var/mutable_appearance/back_overlay = overlays_standing[BACK_LAYER] - if(back_overlay) - remove_overlay(BACK_LAYER) - if(OFFSET_BACK in dna.species.offset_features) - back_overlay.pixel_x += dna.species.offset_features[OFFSET_BACK][1] - back_overlay.pixel_y += dna.species.offset_features[OFFSET_BACK][2] - overlays_standing[BACK_LAYER] = back_overlay - apply_overlay(BACK_LAYER) - -/proc/wear_female_version(t_color, icon, layer, type) - var/index = t_color - var/icon/female_clothing_icon = GLOB.female_clothing_icons[index] - if(!female_clothing_icon) //Create standing/laying icons if they don't exist - generate_female_clothing(index,t_color,icon,type) - return mutable_appearance(GLOB.female_clothing_icons[t_color], layer = -layer) - -/mob/living/carbon/human/proc/get_overlays_copy(list/unwantedLayers) - var/list/out = new - for(var/i in 1 to TOTAL_LAYERS) - if(overlays_standing[i]) - if(i in unwantedLayers) - continue - out += overlays_standing[i] - return out - -//human HUD updates for items in our inventory - -//update whether our head item appears on our hud. -/mob/living/carbon/human/update_hud_head(obj/item/I) - I.screen_loc = ui_head - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our mask item appears on our hud. -/mob/living/carbon/human/update_hud_wear_mask(obj/item/I) - I.screen_loc = ui_mask - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our neck item appears on our hud. -/mob/living/carbon/human/update_hud_neck(obj/item/I) - I.screen_loc = ui_neck - if(client && hud_used && hud_used.hud_shown) - if(hud_used.inventory_shown) - client.screen += I - update_observer_view(I,1) - -//update whether our back item appears on our hud. -/mob/living/carbon/human/update_hud_back(obj/item/I) - I.screen_loc = ui_back - if(client && hud_used && hud_used.hud_shown) - client.screen += I - update_observer_view(I) + apply_overlay(FIRE_LAYER) +/mob/living/carbon/update_damage_overlays() + remove_overlay(DAMAGE_LAYER) + var/dam_colors = "#E62525" + if(ishuman(src)) + var/mob/living/carbon/human/H = src + dam_colors = bloodtype_to_color(H.dna.blood_type) -/* -Does everything in relation to building the /mutable_appearance used in the mob's overlays list -covers: - inhands and any other form of worn item - centering large appearances - layering appearances on custom layers - building appearances from custom icon files -By Remie Richards (yes I'm taking credit because this just removed 90% of the copypaste in update_icons()) -state: A string to use as the state, this is FAR too complex to solve in this proc thanks to shitty old code -so it's specified as an argument instead. -default_layer: The layer to draw this on if no other layer is specified -default_icon_file: The icon file to draw states from if no other icon file is specified -isinhands: If true then alternate_worn_icon is skipped so that default_icon_file is used, -in this situation default_icon_file is expected to match either the lefthand_ or righthand_ file var -femalueuniform: A value matching a uniform item's fitted var, if this is anything but NO_FEMALE_UNIFORM, we -generate/load female uniform sprites matching all previously decided variables -*/ -/obj/item/proc/build_worn_icon(var/state = "", var/default_layer = 0, var/default_icon_file = null, var/isinhands = FALSE, var/femaleuniform = NO_FEMALE_UNIFORM) - - //Find a valid icon file from variables+arguments - var/file2use - if(!isinhands && alternate_worn_icon) - file2use = alternate_worn_icon - if(!file2use) - file2use = default_icon_file - - //Find a valid layer from variables+arguments - var/layer2use - if(alternate_worn_layer) - layer2use = alternate_worn_layer - if(!layer2use) - layer2use = default_layer - - var/mutable_appearance/standing - if(femaleuniform) - standing = wear_female_version(state,file2use,layer2use,femaleuniform) - if(!standing) - standing = mutable_appearance(file2use, state, -layer2use) - - //Get the overlays for this item when it's being worn - //eg: ammo counters, primed grenade flashes, etc. - var/list/worn_overlays = worn_overlays(isinhands, file2use) - if(worn_overlays && worn_overlays.len) - standing.overlays.Add(worn_overlays) - - standing = center_image(standing, isinhands ? inhand_x_dimension : worn_x_dimension, isinhands ? inhand_y_dimension : worn_y_dimension) - - //Handle held offsets - var/mob/M = loc - if(istype(M)) - var/list/L = get_held_offsets() - if(L) - standing.pixel_x += L["x"] //+= because of center()ing - standing.pixel_y += L["y"] - - standing.alpha = alpha - standing.color = color - - return standing - - -/obj/item/proc/get_held_offsets() - var/list/L - if(ismob(loc)) - var/mob/M = loc - L = M.get_item_offsets_for_index(M.get_held_index_of_item(src)) - return L - - -//Can't think of a better way to do this, sadly -/mob/proc/get_item_offsets_for_index(i) - switch(i) - if(3) //odd = left hands - return list("x" = 0, "y" = 16) - if(4) //even = right hands - return list("x" = 0, "y" = 16) - else //No offsets or Unwritten number of hands - return list("x" = 0, "y" = 0) - - - -//produces a key based on the human's limbs -/mob/living/carbon/human/generate_icon_render_key() - . = "[dna.species.limbs_id]" - - if(dna.check_mutation(HULK)) - . += "-coloured-hulk" - else if(dna.species.use_skintones) - . += "-coloured-[skin_tone]" - else if(dna.species.fixed_mut_color) - . += "-coloured-[dna.species.fixed_mut_color]" - else if(dna.features["mcolor"]) - . += "-coloured-[dna.features["mcolor"]]-[dna.features["mcolor2"]]-[dna.features["mcolor3"]]" - else - . += "-not_coloured" - - . += "-[gender]" - - - var/is_taur = FALSE - var/mob/living/carbon/human/H = src - if(("taur" in H.dna.species.mutant_bodyparts) && (H.dna.features["taur"] != "None")) - is_taur = TRUE - + var/mutable_appearance/damage_overlay = mutable_appearance('icons/mob/dam_mob.dmi', "blank", -DAMAGE_LAYER, color = dam_colors) + overlays_standing[DAMAGE_LAYER] = damage_overlay for(var/X in bodyparts) var/obj/item/bodypart/BP = X + if(BP.dmg_overlay_type) + if(BP.brutestate) + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_[BP.brutestate]0") //we're adding icon_states of the base image as overlays + if(BP.burnstate) + damage_overlay.add_overlay("[BP.dmg_overlay_type]_[BP.body_zone]_0[BP.burnstate]") - if(istype(BP, /obj/item/bodypart/r_leg) || istype(BP, /obj/item/bodypart/l_leg)) - if(is_taur) - continue + apply_overlay(DAMAGE_LAYER) +/mob/living/carbon/update_inv_wear_mask() + remove_overlay(FACEMASK_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated + return + + if(client && hud_used && hud_used.inv_slots[SLOT_WEAR_MASK]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_WEAR_MASK] + inv.update_icon() + + if(wear_mask) + if(!(head && (head.flags_inv & HIDEMASK))) + overlays_standing[FACEMASK_LAYER] = wear_mask.build_worn_icon(state = wear_mask.icon_state, default_layer = FACEMASK_LAYER, default_icon_file = 'icons/mob/mask.dmi') + update_hud_wear_mask(wear_mask) + + apply_overlay(FACEMASK_LAYER) + +/mob/living/carbon/update_inv_neck() + remove_overlay(NECK_LAYER) + + if(client && hud_used && hud_used.inv_slots[SLOT_NECK]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_NECK] + inv.update_icon() + + if(wear_neck) + if(!(head && (head.flags_inv & HIDENECK))) + overlays_standing[NECK_LAYER] = wear_neck.build_worn_icon(state = wear_neck.icon_state, default_layer = NECK_LAYER, default_icon_file = 'icons/mob/neck.dmi') + update_hud_neck(wear_neck) + + apply_overlay(NECK_LAYER) + +/mob/living/carbon/update_inv_back() + remove_overlay(BACK_LAYER) + + if(client && hud_used && hud_used.inv_slots[SLOT_BACK]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_BACK] + inv.update_icon() + + if(back) + overlays_standing[BACK_LAYER] = back.build_worn_icon(state = back.icon_state, default_layer = BACK_LAYER, default_icon_file = 'icons/mob/back.dmi') + update_hud_back(back) + + apply_overlay(BACK_LAYER) + +/mob/living/carbon/update_inv_head() + remove_overlay(HEAD_LAYER) + + if(!get_bodypart(BODY_ZONE_HEAD)) //Decapitated + return + + if(client && hud_used && hud_used.inv_slots[SLOT_BACK]) + var/obj/screen/inventory/inv = hud_used.inv_slots[SLOT_HEAD] + inv.update_icon() + + if(head) + overlays_standing[HEAD_LAYER] = head.build_worn_icon(state = head.icon_state, default_layer = HEAD_LAYER, default_icon_file = 'icons/mob/head.dmi') + update_hud_head(head) + + apply_overlay(HEAD_LAYER) + + +/mob/living/carbon/update_inv_handcuffed() + remove_overlay(HANDCUFF_LAYER) + if(handcuffed) + var/mutable_appearance/cuffs = mutable_appearance('icons/mob/restraints.dmi', handcuffed.item_state, -HANDCUFF_LAYER) + cuffs.color = handcuffed.color + + overlays_standing[HANDCUFF_LAYER] = cuffs + apply_overlay(HANDCUFF_LAYER) + +/mob/living/carbon/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + clear_alert("legcuffed") + if(legcuffed) + var/mutable_appearance/legcuffs = mutable_appearance('icons/mob/restraints.dmi', legcuffed.item_state, -LEGCUFF_LAYER) + legcuffs.color = legcuffed.color + + overlays_standing[HANDCUFF_LAYER] = legcuffs + apply_overlay(LEGCUFF_LAYER) + throw_alert("legcuffed", /obj/screen/alert/restrained/legcuffed, new_master = legcuffed) + +//mob HUD updates for items in our inventory + +//update whether handcuffs appears on our hud. +/mob/living/carbon/proc/update_hud_handcuffed() + if(hud_used) + for(var/hand in hud_used.hand_slots) + var/obj/screen/inventory/hand/H = hud_used.hand_slots[hand] + if(H) + H.update_icon() + +//update whether our head item appears on our hud. +/mob/living/carbon/proc/update_hud_head(obj/item/I) + return + +//update whether our mask item appears on our hud. +/mob/living/carbon/proc/update_hud_wear_mask(obj/item/I) + return + +//update whether our neck item appears on our hud. +/mob/living/carbon/proc/update_hud_neck(obj/item/I) + return + +//update whether our back item appears on our hud. +/mob/living/carbon/proc/update_hud_back(obj/item/I) + return + + + +//Overlays for the worn overlay so you can overlay while you overlay +//eg: ammo counters, primed grenade flashing, etc. +//"icon_file" is used automatically for inhands etc. to make sure it gets the right inhand file +/obj/item/proc/worn_overlays(isinhands = FALSE, icon_file) + . = list() + + +/mob/living/carbon/update_body() + update_body_parts() + +/mob/living/carbon/proc/update_body_parts() + //CHECK FOR UPDATE + var/oldkey = icon_render_key + icon_render_key = generate_icon_render_key() + if(oldkey == icon_render_key) + return + + remove_overlay(BODYPARTS_LAYER) + + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + BP.update_limb() + + //LOAD ICONS + if(limb_icon_cache[icon_render_key]) + load_limb_from_cache() + return + + //GENERATE NEW LIMBS + var/list/new_limbs = list() + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X + new_limbs += BP.get_limb_icon() + if(new_limbs.len) + overlays_standing[BODYPARTS_LAYER] = new_limbs + limb_icon_cache[icon_render_key] = new_limbs + + apply_overlay(BODYPARTS_LAYER) + update_damage_overlays() + + + +///////////////////// +// Limb Icon Cache // +///////////////////// +/* + Called from update_body_parts() these procs handle the limb icon cache. + the limb icon cache adds an icon_render_key to a human mob, it represents: + - skin_tone (if applicable) + - gender + - limbs (stores as the limb name and whether it is removed/fine, organic/robotic) + These procs only store limbs as to increase the number of matching icon_render_keys + This cache exists because drawing 6/7 icons for humans constantly is quite a waste + See RemieRichards on irc.rizon.net #coderbus +*/ + +//produces a key based on the mob's limbs + +/mob/living/carbon/proc/generate_icon_render_key() + for(var/X in bodyparts) + var/obj/item/bodypart/BP = X . += "-[BP.body_zone]" + if(BP.use_digitigrade) + . += "-digitigrade[BP.use_digitigrade]" + if(BP.animal_origin) + . += "-[BP.animal_origin]" if(BP.status == BODYPART_ORGANIC) . += "-organic" else . += "-robotic" - if(BP.use_digitigrade) - . += "-digitigrade[BP.use_digitigrade]" - if(BP.dmg_overlay_type) - . += "-[BP.dmg_overlay_type]" - if(BP.body_markings) - . += "-[BP.body_markings]" - else - . += "-no_marking" if(HAS_TRAIT(src, TRAIT_HUSK)) . += "-husk" -/mob/living/carbon/human/load_limb_from_cache() - ..() - update_hair() -/mob/living/carbon/human/proc/update_observer_view(obj/item/I, inventory) - if(observers && observers.len) - for(var/M in observers) - var/mob/dead/observe = M - if(observe.client && observe.client.eye == src) - if(observe.hud_used) - if(inventory && !observe.hud_used.inventory_shown) - continue - observe.client.screen += I - else - observers -= observe - if(!observers.len) - observers = null - break - -// Only renders the head of the human -/mob/living/carbon/human/proc/update_body_parts_head_only() - if (!dna) - return - - if (!dna.species) - return - - var/obj/item/bodypart/HD = get_bodypart("head") - - if (!istype(HD)) - return - - HD.update_limb() - - add_overlay(HD.get_limb_icon()) +//change the mob's icon to the one matching its key +/mob/living/carbon/proc/load_limb_from_cache() + if(limb_icon_cache[icon_render_key]) + remove_overlay(BODYPARTS_LAYER) + overlays_standing[BODYPARTS_LAYER] = limb_icon_cache[icon_render_key] + apply_overlay(BODYPARTS_LAYER) update_damage_overlays() - - if(HD && !(HAS_TRAIT(src, TRAIT_HUSK))) - // lipstick - if(lip_style && (LIPS in dna.species.species_traits)) - var/mutable_appearance/lip_overlay = mutable_appearance('icons/mob/human_face.dmi', "lips_[lip_style]", -BODY_LAYER) - lip_overlay.color = lip_color - if(OFFSET_LIPS in dna.species.offset_features) - lip_overlay.pixel_x += dna.species.offset_features[OFFSET_LIPS][1] - lip_overlay.pixel_y += dna.species.offset_features[OFFSET_LIPS][2] - add_overlay(lip_overlay) - - // eyes - if(!(NOEYES in dna.species.species_traits)) - var/has_eyes = getorganslot(ORGAN_SLOT_EYES) - var/mutable_appearance/eye_overlay - if(!has_eyes) - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes_missing", -BODY_LAYER) - else - eye_overlay = mutable_appearance('icons/mob/human_face.dmi', "eyes", -BODY_LAYER) - if((EYECOLOR in dna.species.species_traits) && has_eyes) - eye_overlay.color = "#" + eye_color - if(OFFSET_EYES in dna.species.offset_features) - eye_overlay.pixel_x += dna.species.offset_features[OFFSET_EYES][1] - eye_overlay.pixel_y += dna.species.offset_features[OFFSET_EYES][2] - add_overlay(eye_overlay) - - dna.species.handle_hair(src) - - update_inv_head() - update_inv_wear_mask() diff --git a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm index 33cca488..f94938b8 100644 --- a/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm +++ b/code/modules/mob/living/simple_animal/hostile/retaliate/clown.dm @@ -215,7 +215,7 @@ melee_damage_upper = 10 attacktext = "ferociously mauls" environment_smash = ENVIRONMENT_SMASH_NONE - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xenobodypartless, /obj/effect/particle_effect/foam, /obj/item/soap) + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/particle_effect/foam, /obj/item/soap) attack_reagent = /datum/reagent/peaceborg_confuse /mob/living/simple_animal/hostile/retaliate/clown/clownhulk/destroyer @@ -259,7 +259,7 @@ melee_damage_lower = 10 melee_damage_upper = 20 attacktext = "awkwardly flails at" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xenobodypartless, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/humanbodypartless, /obj/effect/gibspawner/human) + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) /mob/living/simple_animal/hostile/retaliate/clown/mutant/blob name = "Something that was once a clown" @@ -272,5 +272,5 @@ mob_size = MOB_SIZE_LARGE speed = 20 attacktext = "bounces off of" - loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xenobodypartless, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/humanbodypartless, /obj/effect/gibspawner/human) - attack_reagent = /datum/reagent/toxin/mindbreaker \ No newline at end of file + loot = list(/obj/item/clothing/mask/gas/clown_hat, /obj/effect/gibspawner/xeno/bodypartless, /obj/effect/particle_effect/foam, /obj/item/soap, /obj/effect/gibspawner/generic, /obj/effect/gibspawner/human/bodypartless, /obj/effect/gibspawner/human) + attack_reagent = /datum/reagent/toxin/mindbreaker diff --git a/icons/obj/surgery.dmi b/icons/obj/surgery.dmi index 76ac0c714614412e4ed85bc9108a7c3bcf9ad9db..d26e7a0006664d58960b2fb9000a9f4dbeae3e67 100644 GIT binary patch literal 38294 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 O@EF}U)2qGb{QO^H&q+`K diff --git a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm index 9dfc3054..164fa944 100644 --- a/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm +++ b/modular_citadel/code/modules/reagents/reagents/cit_reagents.dm @@ -120,7 +120,9 @@ add_blood_DNA(list("Non-human DNA" = "A+")) /obj/effect/decal/cleanable/milk/replace_decal(obj/effect/decal/cleanable/milk/S) - S.add_blood_DNA(return_blood_DNA()) + if(S.blood_DNA) + blood_DNA |= S.blood_DNA + return ..() //aphrodisiac & anaphrodisiac