From d72cbcaf2f459a969852671caff5599b2bd616f5 Mon Sep 17 00:00:00 2001 From: phil235 Date: Fri, 17 Jul 2015 01:15:21 +0200 Subject: [PATCH] - fixes handcuff overlay on monkey not showing. - Fixes the lack of handcuff icon on the hand screen object for alien humanoids.. - fix legcuff overlay not showing on monkey. - fixes fire overlay for monkey, aliens and cyborg, no longer looks human shaped. - Made the regenerate_icons's subprocs at the carbon level more OOP. --- code/game/gamemodes/cult/runes.dm | 4 +- .../objects/items/weapons/cigs_lighters.dm | 8 +- code/game/objects/items/weapons/handcuffs.dm | 2 +- code/game/objects/structures/watercloset.dm | 22 +- code/modules/clothing/clothing.dm | 10 +- code/modules/clothing/head/helmet.dm | 8 +- code/modules/clothing/head/soft_caps.dm | 2 +- code/modules/clothing/shoes/magboots.dm | 2 +- code/modules/mob/inventory.dm | 4 +- .../carbon/alien/humanoid/update_icons.dm | 75 +----- .../living/carbon/alien/larva/update_icons.dm | 5 +- code/modules/mob/living/carbon/carbon.dm | 16 +- .../mob/living/carbon/human/human_defense.dm | 14 +- .../mob/living/carbon/human/inventory.dm | 30 +-- .../mob/living/carbon/human/species.dm | 20 +- .../mob/living/carbon/human/update_icons.dm | 238 ++++-------------- code/modules/mob/living/carbon/inventory.dm | 12 +- .../mob/living/carbon/monkey/update_icons.dm | 189 +++----------- .../modules/mob/living/carbon/update_icons.dm | 153 ++++++++++- code/modules/mob/living/silicon/robot/life.dm | 4 +- .../modules/mob/living/silicon/robot/robot.dm | 8 +- .../simple_animal/friendly/drone/inventory.dm | 4 +- code/modules/mob/mob.dm | 4 +- code/modules/projectiles/gun.dm | 4 +- .../Chemistry-Reagents/Other-Reagents.dm | 10 +- icons/mob/OnFire.dmi | Bin 3571 -> 4592 bytes 26 files changed, 348 insertions(+), 500 deletions(-) diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index 56b4044c7f2..6fe3cb03d0b 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -750,11 +750,11 @@ var/list/sacrificed = list() if (cultist.handcuffed) cultist.handcuffed.loc = cultist.loc cultist.handcuffed = null - cultist.update_inv_handcuffed(0) + cultist.update_inv_handcuffed() if (cultist.legcuffed) cultist.legcuffed.loc = cultist.loc cultist.legcuffed = null - cultist.update_inv_legcuffed(0) + cultist.update_inv_legcuffed() if (istype(cultist.wear_mask, /obj/item/clothing/mask/muzzle)) cultist.unEquip(cultist.wear_mask) if(istype(cultist.loc, /obj/structure/closet)&&cultist.loc:welded) diff --git a/code/game/objects/items/weapons/cigs_lighters.dm b/code/game/objects/items/weapons/cigs_lighters.dm index 8af07589f9c..07c8af45854 100644 --- a/code/game/objects/items/weapons/cigs_lighters.dm +++ b/code/game/objects/items/weapons/cigs_lighters.dm @@ -195,9 +195,9 @@ CIGARETTE PACKETS ARE IN FANCY.DM //can't think of any other way to update the overlays :< if(ismob(loc)) var/mob/M = loc - M.update_inv_wear_mask(0) - M.update_inv_l_hand(0) - M.update_inv_r_hand(0) + M.update_inv_wear_mask() + M.update_inv_l_hand() + M.update_inv_r_hand() /obj/item/clothing/mask/cigarette/proc/handle_reagents() @@ -365,7 +365,7 @@ CIGARETTE PACKETS ARE IN FANCY.DM lit = 0 icon_state = icon_off item_state = icon_off - M.update_inv_wear_mask(0) + M.update_inv_wear_mask() packeditem = 0 name = "empty [initial(name)]" SSobj.processing.Remove(src) diff --git a/code/game/objects/items/weapons/handcuffs.dm b/code/game/objects/items/weapons/handcuffs.dm index f8a00e2fd38..6aad3fe9b6c 100644 --- a/code/game/objects/items/weapons/handcuffs.dm +++ b/code/game/objects/items/weapons/handcuffs.dm @@ -193,7 +193,7 @@ if(!C.legcuffed) //beartrap can't cuff your leg if there's already a beartrap or legcuffs. C.legcuffed = src src.loc = C - C.update_inv_legcuffed(0) + C.update_inv_legcuffed() feedback_add_details("handcuffs","B") //Yes, I know they're legcuffs. Don't change this, no need for an extra variable. The "B" is used to tell them apart. else if(isanimal(L)) var/mob/living/simple_animal/SA = L diff --git a/code/game/objects/structures/watercloset.dm b/code/game/objects/structures/watercloset.dm index 327159e3ad7..b2a013c798c 100644 --- a/code/game/objects/structures/watercloset.dm +++ b/code/game/objects/structures/watercloset.dm @@ -246,7 +246,7 @@ M.l_hand.clean_blood() if(M.back) if(M.back.clean_blood()) - M.update_inv_back(0) + M.update_inv_back() if(ishuman(M)) var/mob/living/carbon/human/H = M var/washgloves = 1 @@ -272,39 +272,39 @@ if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head() if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(H.gloves && washgloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves() if(H.shoes && washshoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes() if(H.wear_mask) if(washmask) if(H.wear_mask.clean_blood()) - H.update_inv_wear_mask(0) + H.update_inv_wear_mask() else H.lip_style = null H.update_body() if(H.glasses && washglasses) if(H.glasses.clean_blood()) - H.update_inv_glasses(0) + H.update_inv_glasses() if(H.ears && washears) if(H.ears.clean_blood()) - H.update_inv_ears(0) + H.update_inv_ears() if(H.belt) if(H.belt.clean_blood()) - H.update_inv_belt(0) + H.update_inv_belt() else if(M.wear_mask) //if the mob is not human, it cleans the mask without asking for bitflags if(M.wear_mask.clean_blood()) - M.update_inv_wear_mask(0) + M.update_inv_wear_mask() else O.clean_blood() diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index c4833791343..3cea4f7c7ec 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -259,7 +259,7 @@ BLIND // can't see anything if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() return 1 @@ -390,7 +390,7 @@ atom/proc/generate_female_clothing(index,t_color,icon,type) if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() /obj/item/clothing/proc/weldingvisortoggle() //Malk: proc to toggle welding visors on helmets, masks, goggles, etc. if(can_use(usr)) @@ -414,11 +414,11 @@ atom/proc/generate_female_clothing(index,t_color,icon,type) tint = 0 if(istype(src, /obj/item/clothing/head)) //makes the mob-overlays update - usr.update_inv_head(0) + usr.update_inv_head() if(istype(src, /obj/item/clothing/glasses)) - usr.update_inv_glasses(0) + usr.update_inv_glasses() if(istype(src, /obj/item/clothing/mask)) - usr.update_inv_wear_mask(0) + usr.update_inv_wear_mask() /obj/item/clothing/proc/can_use(mob/user) if(user && ismob(user)) diff --git a/code/modules/clothing/head/helmet.dm b/code/modules/clothing/head/helmet.dm index 6233a560ac9..df493bedf75 100644 --- a/code/modules/clothing/head/helmet.dm +++ b/code/modules/clothing/head/helmet.dm @@ -58,14 +58,14 @@ flags_inv |= (visor_flags_inv) icon_state = initial(icon_state) usr << "[toggle_message] \the [src]." - usr.update_inv_head(0) + usr.update_inv_head() else up = !up flags &= ~(visor_flags) flags_inv &= ~(visor_flags_inv) icon_state = "[initial(icon_state)]up" usr << "[alt_toggle_message] \the [src]" - usr.update_inv_head(0) + usr.update_inv_head() while(up) playsound(src.loc, "[activation_sound]", 100, 0, 4) sleep(15) @@ -172,7 +172,7 @@ if(istype(loc, /mob/living/carbon/human)) var/mob/living/carbon/human/H = loc - H.update_inv_head(0) + H.update_inv_head() return @@ -206,7 +206,7 @@ update_helmlight(user) S.update_brightness(user) update_icon() - usr.update_inv_head(0) + usr.update_inv_head() verbs -= /obj/item/clothing/head/helmet/proc/toggle_helmlight return diff --git a/code/modules/clothing/head/soft_caps.dm b/code/modules/clothing/head/soft_caps.dm index 8c7fa5b2204..0f6e39d72cf 100644 --- a/code/modules/clothing/head/soft_caps.dm +++ b/code/modules/clothing/head/soft_caps.dm @@ -38,7 +38,7 @@ else icon_state = "[item_color]soft" user << "You flip the hat back in normal position." - usr.update_inv_head(0) //so our mob-overlays update + usr.update_inv_head() //so our mob-overlays update /obj/item/clothing/head/soft/examine(mob/user) ..() diff --git a/code/modules/clothing/shoes/magboots.dm b/code/modules/clothing/shoes/magboots.dm index 843f69e25c5..7759f4bd7e6 100644 --- a/code/modules/clothing/shoes/magboots.dm +++ b/code/modules/clothing/shoes/magboots.dm @@ -29,7 +29,7 @@ magpulse = !magpulse icon_state = "[magboot_state][magpulse]" user << "You [magpulse ? "enable" : "disable"] the mag-pulse traction system." - user.update_inv_shoes(0) //so our mob-overlays update + user.update_inv_shoes() //so our mob-overlays update user.update_gravity(user.mob_has_gravity()) /obj/item/clothing/shoes/magboots/negates_gravity() diff --git a/code/modules/mob/inventory.dm b/code/modules/mob/inventory.dm index 4e0a620168d..8c8ab32c83b 100644 --- a/code/modules/mob/inventory.dm +++ b/code/modules/mob/inventory.dm @@ -30,7 +30,7 @@ W.equipped(src,slot_l_hand) if(client) client.screen |= W if(pulling == W) stop_pulling() - update_inv_l_hand(0) + update_inv_l_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) return 1 @@ -49,7 +49,7 @@ W.equipped(src,slot_r_hand) if(client) client.screen |= W if(pulling == W) stop_pulling() - update_inv_r_hand(0) + update_inv_r_hand() W.pixel_x = initial(W.pixel_x) W.pixel_y = initial(W.pixel_y) return 1 diff --git a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm index 85a63338919..65d84763147 100644 --- a/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/humanoid/update_icons.dm @@ -1,12 +1,3 @@ -//Xeno Overlays Indexes////////// -#define X_L_HAND_LAYER 1 -#define X_R_HAND_LAYER 2 -#define X_FIRE_LAYER 3 -#define X_TOTAL_LAYERS 3 -///////////////////////////////// - -/mob/living/carbon/alien/humanoid - var/list/overlays_standing[X_TOTAL_LAYERS] /mob/living/carbon/alien/humanoid/update_icons() update_hud() //TODO: remove the need for this to be here @@ -50,15 +41,10 @@ pixel_y = get_standard_pixel_y_offset(lying) /mob/living/carbon/alien/humanoid/regenerate_icons() - ..() - if (notransform) return - - update_inv_r_hand(0) - update_inv_l_hand(0) - update_hud() -// update_icons() //Handled in update_transform(), leaving this here as a reminder - update_fire() - update_transform() + if(!..()) + update_hud() + // update_icons() //Handled in update_transform(), leaving this here as a reminder + update_transform() /mob/living/carbon/alien/humanoid/update_transform() //The old method of updating lying/standing was update_icons(). Aliens still expect that. if(lying > 0) @@ -67,47 +53,12 @@ update_icons() - -/mob/living/carbon/alien/humanoid/update_hud() - if(client) - client.screen |= contents - - -/mob/living/carbon/alien/humanoid/update_inv_r_hand(update_icons = 1) - if(r_hand) - var/t_state = r_hand.item_state - if(!t_state) - t_state = r_hand.icon_state - r_hand.screen_loc = ui_rhand - overlays_standing[X_R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state" = t_state) - else - overlays_standing[X_R_HAND_LAYER] = null - if(update_icons) - update_icons() - -/mob/living/carbon/alien/humanoid/update_inv_l_hand(update_icons = 1) - if(l_hand) - var/t_state = l_hand.item_state - if(!t_state) - t_state = l_hand.icon_state - l_hand.screen_loc = ui_lhand - overlays_standing[X_L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state" = t_state) - else - overlays_standing[X_L_HAND_LAYER] = null - if(update_icons) - update_icons() - -/mob/living/carbon/alien/humanoid/update_fire() - overlays -= overlays_standing[X_FIRE_LAYER] - if(on_fire) - overlays_standing[X_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -X_FIRE_LAYER) - overlays += overlays_standing[X_FIRE_LAYER] - return - else - overlays_standing[X_FIRE_LAYER] = null - -//Xeno Overlays Indexes////////// -#undef X_L_HAND_LAYER -#undef X_R_HAND_LAYER -#undef X_FIRE_LAYER -#undef X_TOTAL_LAYERS +#undef FACEMASK_LAYER +#undef HEAD_LAYER +#undef BACK_LAYER +#undef LEGCUFF_LAYER +#undef HANDCUFF_LAYER +#undef L_HAND_LAYER +#undef R_HAND_LAYER +#undef FIRE_LAYER +#undef TOTAL_LAYERS \ No newline at end of file diff --git a/code/modules/mob/living/carbon/alien/larva/update_icons.dm b/code/modules/mob/living/carbon/alien/larva/update_icons.dm index 104811c4fc1..dba2774866a 100644 --- a/code/modules/mob/living/carbon/alien/larva/update_icons.dm +++ b/code/modules/mob/living/carbon/alien/larva/update_icons.dm @@ -22,4 +22,7 @@ icon_state = "larva[state]" /mob/living/carbon/alien/larva/update_transform() //All this is handled in update_icons() - return update_icons() \ No newline at end of file + return update_icons() + +/mob/living/carbon/larva/update_inv_handcuffed() + return \ No newline at end of file diff --git a/code/modules/mob/living/carbon/carbon.dm b/code/modules/mob/living/carbon/carbon.dm index 83f2425156a..26c4530afd2 100644 --- a/code/modules/mob/living/carbon/carbon.dm +++ b/code/modules/mob/living/carbon/carbon.dm @@ -205,13 +205,13 @@ var/mob/living/carbon/human/H = src if(H.gloves) if(H.gloves.clean_blood()) - H.update_inv_gloves(0) + H.update_inv_gloves() else ..() // Clear the Blood_DNA list if(H.bloody_hands) H.bloody_hands = 0 H.bloody_hands_mob = null - H.update_inv_gloves(0) + H.update_inv_gloves() update_icons() //apply the now updated overlays to the mob @@ -455,13 +455,13 @@ var/const/GALOSHES_DONT_HELP = 8 handcuffed = null if(buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() return if(legcuffed) legcuffed.loc = loc legcuffed.dropped() legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() else src << "You fail to remove [I]!" @@ -478,11 +478,11 @@ var/const/GALOSHES_DONT_HELP = 8 if(handcuffed) handcuffed = null - update_inv_handcuffed(0) + update_inv_handcuffed() return else legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() else src << "You fail to break [I]!" @@ -492,7 +492,7 @@ var/const/GALOSHES_DONT_HELP = 8 handcuffed = null if (buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() if (client) client.screen -= W if (W) @@ -503,7 +503,7 @@ var/const/GALOSHES_DONT_HELP = 8 if (legcuffed) var/obj/item/weapon/W = legcuffed legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() if (client) client.screen -= W if (W) diff --git a/code/modules/mob/living/carbon/human/human_defense.dm b/code/modules/mob/living/carbon/human/human_defense.dm index 72a5d682d0c..5bac621bd86 100644 --- a/code/modules/mob/living/carbon/human/human_defense.dm +++ b/code/modules/mob/living/carbon/human/human_defense.dm @@ -170,10 +170,10 @@ emp_act if(get_dist(H, src) <= 1) //people with TK won't get smeared with blood if(H.wear_suit) H.wear_suit.add_blood(src) - H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_wear_suit() //updates mob overlays to show the new blood (no refresh) else if(H.w_uniform) H.w_uniform.add_blood(src) - H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_w_uniform() //updates mob overlays to show the new blood (no refresh) if (H.gloves) var/obj/item/clothing/gloves/G = H.gloves G.add_blood(H) @@ -194,13 +194,13 @@ emp_act if(bloody) //Apply blood if(wear_mask) wear_mask.add_blood(src) - update_inv_wear_mask(0) + update_inv_wear_mask() if(head) head.add_blood(src) - update_inv_head(0) + update_inv_head() if(glasses && prob(33)) glasses.add_blood(src) - update_inv_glasses(0) + update_inv_glasses() if("chest") //Easier to score a stun but lasts less time if(stat == CONSCIOUS && I.force && prob(I.force + 10)) @@ -211,10 +211,10 @@ emp_act if(bloody) if(wear_suit) wear_suit.add_blood(src) - update_inv_wear_suit(0) + update_inv_wear_suit() if(w_uniform) w_uniform.add_blood(src) - update_inv_w_uniform(0) + update_inv_w_uniform() if(Iforce > 10 || Iforce >= 5 && prob(33)) forcesay(hit_appends) //forcesay checks stat already diff --git a/code/modules/mob/living/carbon/human/inventory.dm b/code/modules/mob/living/carbon/human/inventory.dm index a86275539aa..30f90b8c51a 100644 --- a/code/modules/mob/living/carbon/human/inventory.dm +++ b/code/modules/mob/living/carbon/human/inventory.dm @@ -167,9 +167,9 @@ return if(H.equip_to_appropriate_slot(I)) if(hand) - update_inv_l_hand(0) + update_inv_l_hand() else - update_inv_r_hand(0) + update_inv_r_hand() else if(s_active && s_active.can_be_inserted(I,1)) //if storage active insert there s_active.handle_item_insertion(I) else if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //see if we have box in other hand @@ -250,7 +250,7 @@ wear_suit = null if(I.flags_inv & HIDEJUMPSUIT) update_inv_w_uniform() - update_inv_wear_suit(0) + update_inv_wear_suit() else if(I == w_uniform) if(r_store) unEquip(r_store, 1) //Again, makes sense for pockets to drop. @@ -262,45 +262,45 @@ unEquip(belt) w_uniform = null update_suit_sensors() - update_inv_w_uniform(0) + update_inv_w_uniform() else if(I == gloves) gloves = null - update_inv_gloves(0) + update_inv_gloves() else if(I == glasses) glasses = null - update_inv_glasses(0) + update_inv_glasses() else if(I == ears) ears = null - update_inv_ears(0) + update_inv_ears() else if(I == shoes) shoes = null - update_inv_shoes(0) + update_inv_shoes() else if(I == belt) belt = null - update_inv_belt(0) + update_inv_belt() else if(I == wear_mask) wear_mask = null if(I.flags & BLOCKHAIR) - update_hair(0) //rebuild hair + update_hair() //rebuild hair if(internal) if(internals) internals.icon_state = "internal0" internal = null sec_hud_set_ID() - update_inv_wear_mask(0) + update_inv_wear_mask() else if(I == wear_id) wear_id = null sec_hud_set_ID() - update_inv_wear_id(0) + update_inv_wear_id() else if(I == r_store) r_store = null - update_inv_pockets(0) + update_inv_pockets() else if(I == l_store) l_store = null - update_inv_pockets(0) + update_inv_pockets() else if(I == s_store) s_store = null - update_inv_s_store(0) + update_inv_s_store() //This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible() //set redraw_mob to 0 if you don't wish the hud to be updated - if you're doing it manually in your own proc. diff --git a/code/modules/mob/living/carbon/human/species.dm b/code/modules/mob/living/carbon/human/species.dm index 887f52a85d4..4d4876bb4db 100644 --- a/code/modules/mob/living/carbon/human/species.dm +++ b/code/modules/mob/living/carbon/human/species.dm @@ -578,17 +578,17 @@ if(H.overeatduration < 100) H << "You feel fit again!" H.disabilities &= ~FAT - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() H.update_inv_wear_suit() else if(H.overeatduration > 500) H << "You suddenly feel blubbery!" H.disabilities |= FAT - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() H.update_inv_wear_suit() // nutrition decrease and satiety - if (H.nutrition > 0 && H.stat != 2) + if (H.nutrition > 0 && H.stat != DEAD) var/hunger_rate = HUNGER_FACTOR if(H.satiety > 0) H.satiety-- @@ -1016,10 +1016,10 @@ if(get_dist(H, H) <= 1) //people with TK won't get smeared with blood if(H.wear_suit) H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_wear_suit() //updates mob overlays to show the new blood (no refresh) else if(H.w_uniform) H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) //updates mob overlays to show the new blood (no refresh) + H.update_inv_w_uniform() //updates mob overlays to show the new blood (no refresh) if (H.gloves) var/obj/item/clothing/gloves/G = H.gloves G.add_blood(H) @@ -1042,13 +1042,13 @@ if(bloody) //Apply blood if(H.wear_mask) H.wear_mask.add_blood(H) - H.update_inv_wear_mask(0) + H.update_inv_wear_mask() if(H.head) H.head.add_blood(H) - H.update_inv_head(0) + H.update_inv_head() if(H.glasses && prob(33)) H.glasses.add_blood(H) - H.update_inv_glasses(0) + H.update_inv_glasses() if("chest") //Easier to score a stun but lasts less time if(H.stat == CONSCIOUS && I.force && prob(I.force + 10)) @@ -1059,10 +1059,10 @@ if(bloody) if(H.wear_suit) H.wear_suit.add_blood(H) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() if(H.w_uniform) H.w_uniform.add_blood(H) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(Iforce > 10 || Iforce >= 5 && prob(33)) H.forcesay(hit_appends) //forcesay checks stat already. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index aa276babfbd..8866d7fccf9 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -47,8 +47,7 @@ If you have any questions/constructive-comments/bugs-to-report Please contact me on #coderbus IRC. ~Carnie x //Carn can sometimes be hard to reach now. However IRC is still your best bet for getting help. */ - -//Human Overlays Indexes///////// +// Human Overlays Indexes ///////////////// #define SPECIES_LAYER 26 // mutantrace colors... these are on a seperate layer in order to prvent #define BODY_BEHIND_LAYER 25 #define BODY_LAYER 24 //underwear, undershirts, socks, eyes, lips(makeup) @@ -65,21 +64,11 @@ Please contact me on #coderbus IRC. ~Carnie x #define GLASSES_LAYER 13 #define BELT_LAYER 12 //Possible make this an overlay of somethign required to wear a belt? #define SUIT_STORE_LAYER 11 -#define BACK_LAYER 10 -#define HAIR_LAYER 9 //TODO: make part of head layer? -#define FACEMASK_LAYER 8 -#define HEAD_LAYER 7 -#define HANDCUFF_LAYER 6 -#define LEGCUFF_LAYER 5 -#define L_HAND_LAYER 4 -#define R_HAND_LAYER 3 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands -#define BODY_FRONT_LAYER 2 -#define FIRE_LAYER 1 //If you're on fire -#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; -////////////////////////////////// +#define HAIR_LAYER 10 //TODO: make part of head layer? +#define BODY_FRONT_LAYER 9 -/mob/living/carbon/human - var/list/overlays_standing[TOTAL_LAYERS] +//KEEP THE TOTAL_LAYER DEFINE UPDATED ! +////////////////////////////////////////// /mob/living/carbon/human/proc/update_base_icon_state() //var/race = dna ? dna.mutantrace : null @@ -94,17 +83,6 @@ Please contact me on #coderbus IRC. ~Carnie x icon_state = "[base_icon_state]_s" -/mob/living/carbon/human/proc/apply_overlay(cache_index) - var/image/I = overlays_standing[cache_index] - - if(I) - overlays += I - -/mob/living/carbon/human/proc/remove_overlay(cache_index) - if(overlays_standing[cache_index]) - overlays -= overlays_standing[cache_index] - overlays_standing[cache_index] = null - //UPDATES OVERLAYS FROM OVERLAYS_STANDING //TODO: Remove all instances where this proc is called. It used to be the fastest way to swap between standing/lying. /mob/living/carbon/human/update_icons() @@ -174,12 +152,7 @@ Please contact me on #coderbus IRC. ~Carnie x dna.species.handle_body(src) /mob/living/carbon/human/update_fire() - - remove_overlay(FIRE_LAYER) - if(on_fire) - overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"=-FIRE_LAYER) - - apply_overlay(FIRE_LAYER) + ..("Standing") /mob/living/carbon/human/proc/update_augments() @@ -212,33 +185,28 @@ Please contact me on #coderbus IRC. ~Carnie x /* --------------------------------------- */ //For legacy support. /mob/living/carbon/human/regenerate_icons() - ..() - if(notransform) return - 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_r_hand() - update_inv_l_hand() - update_inv_handcuffed() - update_inv_legcuffed() - update_inv_pockets() - update_fire() - update_transform() - //Hud Stuff - update_hud() - // Mutantrace colors - update_mutcolor() + + if(!..()) + 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_transform() + //Hud Stuff + update_hud() + // Mutantrace colors + update_mutcolor() /* --------------------------------------- */ //vvvvvv UPDATE_INV PROCS vvvvvv @@ -414,27 +382,12 @@ Please contact me on #coderbus IRC. ~Carnie x /mob/living/carbon/human/update_inv_head() - remove_overlay(HEAD_LAYER) - - if(head) + var/obj/item/H = ..() + if(H) if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... - head.screen_loc = ui_head //TODO //...draw the item in the inventory screen - client.screen += head //Either way, add the item to the HUD - - var/image/standing - if(head.alternate_worn_icon) - standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) - if(!standing) - standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) - standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually - standing.alpha = head.alpha - - overlays_standing[HEAD_LAYER] = standing - - if(head.blood_DNA) - standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") - + H.screen_loc = ui_head //TODO //...draw the item in the inventory screen + client.screen += H //Either way, add the item to the HUD apply_overlay(HEAD_LAYER) @@ -491,6 +444,7 @@ Please contact me on #coderbus IRC. ~Carnie x apply_overlay(SUIT_LAYER) + /mob/living/carbon/human/update_inv_pockets() if(l_store) l_store.screen_loc = ui_storage1 //TODO @@ -503,125 +457,41 @@ Please contact me on #coderbus IRC. ~Carnie x /mob/living/carbon/human/update_inv_wear_mask() - remove_overlay(FACEMASK_LAYER) - - if(istype(wear_mask, /obj/item/clothing/mask)) + var/obj/item/clothing/mask/M = ..() + if(M) if(client && hud_used && hud_used.hud_shown) if(hud_used.inventory_shown) //if the inventory is open ... - wear_mask.screen_loc = ui_mask //TODO //...draw the item in the inventory screen - client.screen += wear_mask //Either way, add the item to the HUD - - var/image/standing - if(wear_mask.alternate_worn_icon) - standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) - if(!standing) - standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) - - overlays_standing[FACEMASK_LAYER] = standing - - if(wear_mask.blood_DNA && !istype(wear_mask, /obj/item/clothing/mask/cigarette)) - standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") - + M.screen_loc = ui_mask //TODO //...draw the item in the inventory screen + client.screen += M //Either way, add the item to the HUD update_mutant_bodyparts() - apply_overlay(FACEMASK_LAYER) + /mob/living/carbon/human/update_inv_back() - remove_overlay(BACK_LAYER) - - if(back) - back.screen_loc = ui_back + var/obj/item/B = ..() + if(B) + B.screen_loc = ui_back if(client && hud_used && hud_used.hud_shown) - client.screen += back - - var/image/standing - if(back.alternate_worn_icon) - standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) - if(!standing) - standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) - - overlays_standing[BACK_LAYER] = standing - + client.screen += B apply_overlay(BACK_LAYER) - - -/mob/living/carbon/human/update_hud() //TODO: do away with this if possible - if(client) - client.screen |= contents - if(hud_used) - hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar - - /mob/living/carbon/human/update_inv_handcuffed() - remove_overlay(HANDCUFF_LAYER) - - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() //TODO: should be handled elsewhere - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[3] - var/obj/screen/inventory/L = hud_used.adding[4] - R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") - L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") - - overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) - else - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[3] - var/obj/screen/inventory/L = hud_used.adding[4] - R.overlays = null - L.overlays = null - - apply_overlay(HANDCUFF_LAYER) - + if(..()) + overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + apply_overlay(HANDCUFF_LAYER) /mob/living/carbon/human/update_inv_legcuffed() remove_overlay(LEGCUFF_LAYER) - if(legcuffed) - overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) - + overlays_standing[LEGCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) apply_overlay(LEGCUFF_LAYER) +/mob/living/carbon/human/update_hud() //TODO: do away with this if possible + if(..()) + if(hud_used) + hud_used.hidden_inventory_update() //Updates the screenloc of the items on the 'other' inventory bar -/mob/living/carbon/human/update_inv_r_hand() - remove_overlay(R_HAND_LAYER) - if (handcuffed) - drop_r_hand() - return - if(r_hand) - r_hand.screen_loc = ui_rhand //TODO - if(client) - client.screen += r_hand - - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - - overlays_standing[R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]", "layer"=-R_HAND_LAYER) - - apply_overlay(R_HAND_LAYER) - - - -/mob/living/carbon/human/update_inv_l_hand() - remove_overlay(L_HAND_LAYER) - if (handcuffed) - drop_l_hand() - return - if(l_hand) - l_hand.screen_loc = ui_lhand //TODO - if(client) - client.screen += l_hand - - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - - overlays_standing[L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]", "layer"=-L_HAND_LAYER) - - apply_overlay(L_HAND_LAYER) /mob/living/carbon/human/proc/wear_female_version(t_color, icon, layer, type) var/index = "[t_color]_s" @@ -652,15 +522,7 @@ Please contact me on #coderbus IRC. ~Carnie x #undef EARS_LAYER #undef SUIT_LAYER #undef GLASSES_LAYER -#undef FACEMASK_LAYER #undef BELT_LAYER #undef SUIT_STORE_LAYER -#undef BACK_LAYER #undef HAIR_LAYER -#undef HEAD_LAYER -#undef HANDCUFF_LAYER -#undef LEGCUFF_LAYER -#undef L_HAND_LAYER -#undef R_HAND_LAYER -#undef FIRE_LAYER #undef TOTAL_LAYERS diff --git a/code/modules/mob/living/carbon/inventory.dm b/code/modules/mob/living/carbon/inventory.dm index 876f23fc37a..44ba92c73f2 100644 --- a/code/modules/mob/living/carbon/inventory.dm +++ b/code/modules/mob/living/carbon/inventory.dm @@ -25,22 +25,22 @@ if(I == head) head = null if(I.flags & BLOCKHAIR) - update_hair(0) - update_inv_head(0) + update_hair() + update_inv_head() else if(I == back) back = null - update_inv_back(0) + update_inv_back() else if(I == wear_mask) if(istype(src, /mob/living/carbon/human)) //If we don't do this hair won't be properly rebuilt. return wear_mask = null - update_inv_wear_mask(0) + update_inv_wear_mask() else if(I == handcuffed) handcuffed = null if(buckled && buckled.buckle_requires_restraints) buckled.unbuckle_mob() - update_inv_handcuffed(0) + update_inv_handcuffed() else if(I == legcuffed) legcuffed = null - update_inv_legcuffed(0) + update_inv_legcuffed() diff --git a/code/modules/mob/living/carbon/monkey/update_icons.dm b/code/modules/mob/living/carbon/monkey/update_icons.dm index 3e47c990d9d..03e2f721a9c 100644 --- a/code/modules/mob/living/carbon/monkey/update_icons.dm +++ b/code/modules/mob/living/carbon/monkey/update_icons.dm @@ -1,31 +1,13 @@ -//Monkey Overlays Indexes//////// -#define M_FIRE_LAYER 7 -#define M_MASK_LAYER 6 -#define M_HEAD_LAYER 5 -#define M_BACK_LAYER 4 -#define M_HANDCUFF_LAYER 3 -#define M_L_HAND_LAYER 2 -#define M_R_HAND_LAYER 1 -#define M_TOTAL_LAYERS 7 -///////////////////////////////// - -/mob/living/carbon/monkey - var/list/overlays_standing[M_TOTAL_LAYERS] /mob/living/carbon/monkey/regenerate_icons() - ..() - update_inv_wear_mask(0) - update_inv_head(0) - update_inv_back(0) - update_inv_r_hand(0) - update_inv_l_hand(0) - update_inv_handcuffed(0) - update_fire() - update_icons() - update_transform() - //Hud Stuff - update_hud() - return + if(!..()) + update_inv_wear_mask() + update_inv_head() + update_inv_back() + update_icons() + update_transform() + //Hud Stuff + update_hud() /mob/living/carbon/monkey/update_icons() update_hud() @@ -35,138 +17,43 @@ overlays += I //////// -/mob/living/carbon/monkey/update_inv_wear_mask(update_icons=1) - if(wear_mask && istype(wear_mask, /obj/item/clothing/mask) ) - wear_mask.screen_loc = ui_monkey_mask +/mob/living/carbon/monkey/update_inv_wear_mask() + var/obj/item/clothing/mask/M = ..() + if(M) + M.screen_loc = ui_monkey_mask if(client && hud_used) - client.screen += wear_mask - overlays -= overlays_standing[M_MASK_LAYER] - var/image/standing = image("icon" = 'icons/mob/mask.dmi', "icon_state" = "[wear_mask.icon_state]", "layer" = -M_MASK_LAYER) - if(!istype(wear_mask, /obj/item/clothing/mask/cigarette) && wear_mask.blood_DNA ) - standing.overlays += image("icon" = 'icons/effects/blood.dmi', "icon_state" = "maskblood") - overlays_standing[M_MASK_LAYER] = standing - overlays += overlays_standing[M_MASK_LAYER] - else - overlays -= overlays_standing[M_MASK_LAYER] - overlays_standing[M_MASK_LAYER] = null - if(update_icons) update_icons() + client.screen += M + apply_overlay(FACEMASK_LAYER) -/mob/living/carbon/monkey/update_inv_head(update_icons=1) - if(head) - head.screen_loc = ui_monkey_head +/mob/living/carbon/monkey/update_inv_head() + var/obj/item/H = ..() + if(H) + H.screen_loc = ui_monkey_head if(client && hud_used) - client.screen += head - overlays -= overlays_standing[M_HEAD_LAYER] - var/image/standing = image("icon" = 'icons/mob/head.dmi', "icon_state" = "[head.icon_state]", "layer" = -M_HEAD_LAYER) - overlays_standing[M_HEAD_LAYER] = standing - overlays += overlays_standing[M_HEAD_LAYER] - else - overlays -= overlays_standing[M_HEAD_LAYER] - overlays_standing[M_HEAD_LAYER] = null - if(update_icons) update_icons() + client.screen += H + apply_overlay(HEAD_LAYER) - -/mob/living/carbon/monkey/update_inv_r_hand(update_icons=1) - if (handcuffed) - drop_r_hand() - return - if(r_hand) - r_hand.screen_loc = ui_rhand +/mob/living/carbon/monkey/update_inv_back() + var/obj/item/B = ..() + if(B) + B.screen_loc = ui_monkey_back if(client && hud_used) - client.screen += r_hand - var/t_state = r_hand.item_state - if(!t_state) t_state = r_hand.icon_state - overlays -= overlays_standing[M_R_HAND_LAYER] - var/image/standing = image("icon" = r_hand.righthand_file, "icon_state" = t_state, "layer" = -M_R_HAND_LAYER) - standing.pixel_y = 2 - overlays_standing[M_R_HAND_LAYER] = standing - overlays += overlays_standing[M_R_HAND_LAYER] - else - overlays -= overlays_standing[M_R_HAND_LAYER] - overlays_standing[M_R_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_l_hand(update_icons=1) - if (handcuffed) - drop_l_hand() - return - if(l_hand) - l_hand.screen_loc = ui_lhand - if(client && hud_used) - client.screen += l_hand - var/t_state = l_hand.item_state - if(!t_state) t_state = l_hand.icon_state - overlays -= overlays_standing[M_L_HAND_LAYER] - var/image/standing = image("icon" = l_hand.lefthand_file, "icon_state" = t_state, "layer" = -M_L_HAND_LAYER) - standing.pixel_y = 2 - overlays_standing[M_L_HAND_LAYER] = standing - overlays += overlays_standing[M_L_HAND_LAYER] - else - overlays -= overlays_standing[M_L_HAND_LAYER] - overlays_standing[M_L_HAND_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_back(update_icons=1) - if(back) - back.screen_loc = ui_monkey_back - if(client && hud_used) - client.screen += back - overlays -= overlays_standing[M_BACK_LAYER] - overlays_standing[M_BACK_LAYER] = image("icon" = 'icons/mob/back.dmi', "icon_state" = "[back.icon_state]", "layer" = -M_BACK_LAYER) - overlays += overlays_standing[M_BACK_LAYER] - else - overlays -= overlays_standing[M_BACK_LAYER] - overlays_standing[M_BACK_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_inv_handcuffed(update_icons=1) - if(handcuffed) - drop_r_hand() - drop_l_hand() - stop_pulling() - if(hud_used) //hud handcuff icons - var/obj/screen/inventory/R = hud_used.adding[4] - var/obj/screen/inventory/L = hud_used.adding[5] - R.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "markus") - L.overlays += image("icon" = 'icons/mob/screen_gen.dmi', "icon_state" = "gabrielle") - overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_standing[M_HANDCUFF_LAYER] = image("icon" = 'icons/mob/monkey.dmi', "icon_state" = "handcuff1", "layer" = -M_HANDCUFF_LAYER) - overlays += overlays_standing[M_HANDCUFF_LAYER] - else - if(hud_used) - var/obj/screen/inventory/R = hud_used.adding[4] - var/obj/screen/inventory/L = hud_used.adding[5] - R.overlays = null - L.overlays = null - overlays -= overlays_standing[M_HANDCUFF_LAYER] - overlays_standing[M_HANDCUFF_LAYER] = null - if(update_icons) update_icons() - - -/mob/living/carbon/monkey/update_hud() - if(client) - client.screen |= contents + client.screen += B + apply_overlay(BACK_LAYER) /mob/living/carbon/monkey/update_fire() - overlays -= overlays_standing[M_FIRE_LAYER] - if(on_fire) - overlays_standing[M_FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing", "layer"= -M_FIRE_LAYER) - overlays += overlays_standing[M_FIRE_LAYER] - return - else - overlays_standing[M_FIRE_LAYER] = null + ..("Monkey_burning") +/mob/living/carbon/monkey/update_inv_handcuffed() + if(..()) + overlays_standing[HANDCUFF_LAYER] = image("icon"='icons/mob/mob.dmi', "icon_state"="handcuff1", "layer"=-HANDCUFF_LAYER) + apply_overlay(HANDCUFF_LAYER) -//Monkey Overlays Indexes//////// -#undef M_FIRE_LAYER -#undef M_MASK_LAYER -#undef M_BACK_LAYER -#undef M_HANDCUFF_LAYER -#undef M_L_HAND_LAYER -#undef M_R_HAND_LAYER -#undef M_TOTAL_LAYERS - +/mob/living/carbon/monkey/update_inv_legcuffed() + remove_overlay(LEGCUFF_LAYER) + if(legcuffed) + var/image/standing = image("icon"='icons/mob/mob.dmi', "icon_state"="legcuff1", "layer"=-LEGCUFF_LAYER) + standing.pixel_y = 8 + overlays_standing[LEGCUFF_LAYER] = standing + apply_overlay(LEGCUFF_LAYER) \ No newline at end of file diff --git a/code/modules/mob/living/carbon/update_icons.dm b/code/modules/mob/living/carbon/update_icons.dm index 2b2c3470a04..95724c27f01 100644 --- a/code/modules/mob/living/carbon/update_icons.dm +++ b/code/modules/mob/living/carbon/update_icons.dm @@ -1,6 +1,18 @@ -//LOOK G-MA, I'VE JOINED CARBON PROCS THAT ARE IDENTICAL IN ALL CASES INTO ONE PROC, I'M BETTER THAN LIFE() -//I thought about mob/living but silicons and simple_animals don't want this just yet. -//Right now just handles lying down, but could handle other cases later. + + +//Carbon Overlays Indexes///////// +#define FACEMASK_LAYER 8 +#define HEAD_LAYER 7 +#define BACK_LAYER 6 +#define LEGCUFF_LAYER 5 +#define HANDCUFF_LAYER 4 +#define L_HAND_LAYER 3 +#define R_HAND_LAYER 2 //Having the two hands seperate seems rather silly, merge them together? It'll allow for code to be reused on mobs with arbitarily many hands +#define FIRE_LAYER 1 //If you're on fire +#define TOTAL_LAYERS 26 //KEEP THIS UP-TO-DATE OR SHIT WILL BREAK ;_; +////////////////////////////////// + + //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() @@ -27,4 +39,137 @@ 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(). \ No newline at end of file + 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 + var/list/overlays_standing[TOTAL_LAYERS] + +/mob/living/carbon/proc/apply_overlay(cache_index) + var/image/I = overlays_standing[cache_index] + if(I) + overlays += I + +/mob/living/carbon/proc/remove_overlay(cache_index) + if(overlays_standing[cache_index]) + overlays -= overlays_standing[cache_index] + overlays_standing[cache_index] = null + +/mob/living/carbon/update_inv_r_hand() + remove_overlay(R_HAND_LAYER) + if (handcuffed) + drop_r_hand() + return + if(r_hand) + r_hand.screen_loc = ui_rhand + if(client && hud_used) + client.screen += r_hand + var/t_state = r_hand.item_state + if(!t_state) + t_state = r_hand.icon_state + overlays_standing[R_HAND_LAYER] = image("icon" = r_hand.righthand_file, "icon_state"="[t_state]", "layer"=-R_HAND_LAYER) + + apply_overlay(R_HAND_LAYER) + +/mob/living/carbon/update_inv_l_hand() + remove_overlay(L_HAND_LAYER) + if (handcuffed) + drop_l_hand() + return + if(l_hand) + l_hand.screen_loc = ui_lhand + if(client && hud_used) + client.screen += l_hand + var/t_state = l_hand.item_state + if(!t_state) + t_state = l_hand.icon_state + overlays_standing[L_HAND_LAYER] = image("icon" = l_hand.lefthand_file, "icon_state"="[t_state]", "layer"=-L_HAND_LAYER) + + apply_overlay(L_HAND_LAYER) + +/mob/living/carbon/update_fire(var/fire_icon = "Generic_mob_burning") + remove_overlay(FIRE_LAYER) + if(on_fire) + overlays_standing[FIRE_LAYER] = image("icon"='icons/mob/OnFire.dmi', "icon_state"= fire_icon, "layer"=-FIRE_LAYER) + + apply_overlay(FIRE_LAYER) + +/mob/living/carbon/update_hud() + if(client) + client.screen |= contents + return 1 + +/mob/living/carbon/regenerate_icons() + if(notransform) + return 1 + update_inv_r_hand() + update_inv_l_hand() + update_inv_handcuffed() + update_inv_legcuffed() + update_fire() + +/mob/living/carbon/update_inv_wear_mask() + remove_overlay(FACEMASK_LAYER) + if(istype(wear_mask, /obj/item/clothing/mask)) + var/image/standing + if(wear_mask.alternate_worn_icon) + standing = image("icon"=wear_mask.alternate_worn_icon, "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/mask.dmi', "icon_state"="[wear_mask.icon_state]", "layer"=-FACEMASK_LAYER) + + overlays_standing[FACEMASK_LAYER] = standing + + if(wear_mask.blood_DNA && (wear_mask.body_parts_covered & HEAD)) + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="maskblood") + return wear_mask + +/mob/living/carbon/human/update_inv_back() + remove_overlay(BACK_LAYER) + if(back) + var/image/standing + if(back.alternate_worn_icon) + standing = image("icon"=back.alternate_worn_icon, "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + if(!standing) + standing = image("icon"='icons/mob/back.dmi', "icon_state"="[back.icon_state]", "layer"=-BACK_LAYER) + + overlays_standing[BACK_LAYER] = standing + return back + + +/mob/living/carbon/human/update_inv_head() + remove_overlay(HEAD_LAYER) + if(head) + var/image/standing + if(head.alternate_worn_icon) + standing = image("icon"=head.alternate_worn_icon, "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + if(!standing) + standing = image("icon"='icons/mob/head.dmi', "icon_state"="[head.icon_state]", "layer"=-HEAD_LAYER) + standing.color = head.color // For now, this is here solely for kitty ears, but everything should do this eventually + standing.alpha = head.alpha + + overlays_standing[HEAD_LAYER] = standing + + if(head.blood_DNA) + standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="helmetblood") + return head + +/mob/living/carbon/update_inv_handcuffed() + remove_overlay(HANDCUFF_LAYER) + if(handcuffed) + drop_r_hand() + drop_l_hand() + stop_pulling() //TODO: should be handled elsewhere + if(hud_used) //hud handcuff icons + var/obj/screen/inventory/R = hud_used.r_hand_hud_object + var/obj/screen/inventory/L = hud_used.l_hand_hud_object + R.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="markus") + L.overlays += image("icon"='icons/mob/screen_gen.dmi', "icon_state"="gabrielle") + return 1 + else + if(hud_used) + var/obj/screen/inventory/R = hud_used.r_hand_hud_object + var/obj/screen/inventory/L = hud_used.l_hand_hud_object + R.overlays = null + L.overlays = null + + diff --git a/code/modules/mob/living/silicon/robot/life.dm b/code/modules/mob/living/silicon/robot/life.dm index 7ce41a2de6a..d97d6a420c7 100644 --- a/code/modules/mob/living/silicon/robot/life.dm +++ b/code/modules/mob/living/silicon/robot/life.dm @@ -189,9 +189,9 @@ return /mob/living/silicon/robot/update_fire() - overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + overlays -= image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") if(on_fire) - overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Standing") + overlays += image("icon"='icons/mob/OnFire.dmi', "icon_state"="Generic_mob_burning") /mob/living/silicon/robot/fire_act() if(!on_fire) //Silicons don't gain stacks from hotspots, but hotspots can ignite them diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 11ebe6edb27..064886ef119 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -866,16 +866,16 @@ if(cleaned_human.lying) if(cleaned_human.head) cleaned_human.head.clean_blood() - cleaned_human.update_inv_head(0) + cleaned_human.update_inv_head() if(cleaned_human.wear_suit) cleaned_human.wear_suit.clean_blood() - cleaned_human.update_inv_wear_suit(0) + cleaned_human.update_inv_wear_suit() else if(cleaned_human.w_uniform) cleaned_human.w_uniform.clean_blood() - cleaned_human.update_inv_w_uniform(0) + cleaned_human.update_inv_w_uniform() if(cleaned_human.shoes) cleaned_human.shoes.clean_blood() - cleaned_human.update_inv_shoes(0) + cleaned_human.update_inv_shoes() cleaned_human.clean_blood() cleaned_human << "[src] cleans your face!" return diff --git a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm index faf63c739c4..a739daac976 100644 --- a/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm +++ b/code/modules/mob/living/simple_animal/friendly/drone/inventory.dm @@ -125,9 +125,9 @@ return if(equip_to_appropriate_slot(I)) if(hand) - update_inv_l_hand(0) + update_inv_l_hand() else - update_inv_r_hand(0) + update_inv_r_hand() else if(s_active && s_active.can_be_inserted(I,1)) //if storage active insert there s_active.handle_item_insertion(I) else if(istype(S, /obj/item/weapon/storage) && S.can_be_inserted(I,1)) //see if we have box in other hand diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 6e9e8ccd996..b99fc0f9c89 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -421,12 +421,12 @@ var/list/slot_equipment_priority = list( \ var/obj/item/W = l_hand if (W) W.attack_self(src) - update_inv_l_hand(0) + update_inv_l_hand() else var/obj/item/W = r_hand if (W) W.attack_self(src) - update_inv_r_hand(0) + update_inv_r_hand() return /* diff --git a/code/modules/projectiles/gun.dm b/code/modules/projectiles/gun.dm index e692bd7bb97..ae930ef4602 100644 --- a/code/modules/projectiles/gun.dm +++ b/code/modules/projectiles/gun.dm @@ -224,9 +224,9 @@ semicd = 0 if(user.hand) - user.update_inv_l_hand(0) + user.update_inv_l_hand() else - user.update_inv_r_hand(0) + user.update_inv_r_hand() feedback_add_details("gun_fired","[src.name]") /obj/item/weapon/gun/attack(mob/M as mob, mob/user) diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index 923dfa759b9..2ebceebbd64 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -576,21 +576,21 @@ C.l_hand.clean_blood() if(C.wear_mask) if(C.wear_mask.clean_blood()) - C.update_inv_wear_mask(0) + C.update_inv_wear_mask() if(ishuman(M)) var/mob/living/carbon/human/H = C if(H.head) if(H.head.clean_blood()) - H.update_inv_head(0) + H.update_inv_head() if(H.wear_suit) if(H.wear_suit.clean_blood()) - H.update_inv_wear_suit(0) + H.update_inv_wear_suit() else if(H.w_uniform) if(H.w_uniform.clean_blood()) - H.update_inv_w_uniform(0) + H.update_inv_w_uniform() if(H.shoes) if(H.shoes.clean_blood()) - H.update_inv_shoes(0) + H.update_inv_shoes() M.clean_blood() /datum/reagent/cryptobiolin diff --git a/icons/mob/OnFire.dmi b/icons/mob/OnFire.dmi index 44ead91e362701e42a57957d13424cc730ccd4e2..7768bf0269fe18274101506276df32a411960210 100644 GIT binary patch delta 4501 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 delta 3472 zcmV;B4R7-BBl8QbCT+}D`)Xf}+iiH5e>P_Mcjhn4>~Xq&Phr{q ztb2c5x-r}1kJeu&Y+kstnxTJPh{4P7Rd{}BW1ojjEauAH=S~dELqGq4KV$HtxzK2>h7NU)r4S{p@WCCNOD@z$o(W z?bEmhy4S|RI(%Pffd%uI?mLd)+O+0rJa_1XA}}z?uQ0zC!sUVIKbwEcV?W?gUbg}L zcf7dL=gT^Nr}@If5A}I@>SpwP(wTS7|7sIGzI|xG#QV)%=KC2qch9%!%C5E=updce}W;cfZfqP0u$!hXGe*CfDJ+HlwrobpgGDVaa|6{e1RD z4>OjQSDvS9P6n_yy3Bu0{gL+cvJRgwI^c{0PUdT&jUw&dO$MCJ|7u_DtNlmXDgJ-& z=hxO>+w*0z#NZ6OF=x(D!`lJK-8h8F(*QNuUE{eY@zCRcj(E4q(%J~Dbv}dRMY-r@ zHJXIL^A7(rJb#oeb@_u~xF|rio3G*QI>Y}8JwJ8$AIP?$=cRvR@6O`8fz9Q4{{H3d z0fer>L67gzZyfwRU4LQpJtIKR>zL&HAQ`?)pw*4}?sG!ZXN}LZGf?=ym+`gBA0}s@ zam6YAUq9CG=l}1w&%*Q1w$H-*vjNLAK{>&iddkBHZWX>CbNP98|7x2Q6ByrrAF=Ya z^PVFIY71xhU)z6?Y?eHYneJzx`S5CI%D{xBx7(sQ8c+2TCAV$KGyKo59!K|iRcYE} zz^C#5+5E5e)xO&QMWe8Fn>w?T0@bp%=O5$ePvd{{)(yyp|H&Pj3H~4EEM31vML2s+ zuVec4Ho^ZLC}8}Lho@(qKm31ONdlk6|6^r*Yb^x*ZD!a? z%Ir4?sdKoLHw;uoZ1Q`GS9E0$pLf~id|FaqH7es7Iu;%P9G4&I** zIK%&^@LqqqDjs|g|6jGU!Sm$);LqXzYwtK}d*Lhd3I1QzYU6+>hWG36`48M5yz>0t z(){U*Pqu7T*V@$4vv2p$nl1IOIsUq=2gHG+53TP*4w_)d-c#R|qE?KhbX$D8*=U?M z`>yeSbVX5&DG^0$qwBYLLcqwL%Uwh+*;G>I&k=tN6Uz=;${*1KIa1qJNVaq$DXu4w z%18JY0@?2e>3k@{At_4207bw!_W=T42tC5qNrov>tk2?0pBpyaR06lb+52{_!^E>>!p{ss|IRf&d}}cMyPx zBAFiSJZnRFyZ)a%)E)$4RSaiJ1Ob?qKZJh}V|3XaU6&$6stHVzyhZ@~hlI*qtVzsR zUNtFutZ&I|q~oZ$s!muf-ZMa;9`4>=2CHm~f z8=s+=YSu9~Dii};F%ZyF(v<_mGN^xQ3t4b_a32)Hype!L-V`Ct^da-{)eZI2Bl?bH1~Ki-zYbb!?J&)^=?(pb_+_NkL$Yw};T=xv=j6mxLp1E(yYMb23=v>+%~G@Q>qxTfkcTHq>T!3*qR z5ee`)&Hzaz<^y@%7YG@-1o8(O0D`8t7StUS)iL&qPN(*8#^g&8E{cCs^94jT4jeE+ z%qca0FSxC6_71HK>?(p&63pN@A0&}ENWY07CIPY~9*69r^hr@6an}+MNz&4hB8koj z*e;Ym)NVQS3JlmHNx)73&_8C|)Wpkjskvu(VRby>jd!#%L&mWHP71n^Kqt>d1i`U;Md-}5e; zpd*xTI14oj_YF%phSf=ivVRsU+Fox*1fcH$_z%1fH3rP_sUh-+1uR(}SU7MD4$OyG z+g{74odEx`kraIivSx$lpcY`64gUj(>JS_VJtt^BR)}|*0m^@(7ho0l5mrP7+hcfM zU$k0*fCP4*)tT+ofsrsA8)}wpg~bN%WA*Wp4CADVo)Z^4oJP;E z(V|d^OP=}`%z3Z2SoHTDOIHoU?!#fYY60{!`=SJx*5Rbkz@-4o&|Q&4 z?X0Bgsnk~RKFvS?@9qzvNjyKQ^1ty?88ywDS*ia!f__ok^%ming6}dK)78eU1VlC@ zqrt0Kggs6{N^D)CEf*AKmx_3)K2H|U!2v~rBz=FD=j`_dGW@^JAGQkwLVor7fH^4R z6^U|QUi_UZ?{iLOtLx)Z0;BnjWgtyOKo@Q+{!cCDmZVdxDE9}Bz^2-erm6eoa+fqPB?rbvQ zrXU**=avseu0wLX;)+1%o6k_p*p!ZOPf%86XD}{J)23fSMTenIhp~EkI0H zi8MN`ZYdd{2%YkWdL*SG8Oc91g8%`%ph$m2gWF8C0KxGU|F`@B5@8`De+XKO@PaKh zZnr?K5BatVnb?eE42?j&O-N11L2gtyq{^KO`znCr$fhfL-28Px0F`{9p=Ze_yl*4m zn}VJnR4uz+2lM44Pz>b*aHU|{9hs}#s(Ep+N0M0MK1(2p#7VDe6_N+2vScdNJs*Dy zrkXzFR=erk4reBgJc5F^Ep{{BE$uVYt!DTQ`y zL-{7Q)LaERc*FQ#E?tP>>~uuj?&N*zM}2<_p*z0O2u`vlUZK0Paec|nMe$DeV@~3` za^iwhj#=Y>oeyAB1H5Mf;@t$Ol)ZoFE!~ZpS_|n2bRs>;AK>n4wdgLkSOI?X-u4v& z?A}sOpuesbrQ-U3>ES(+S5kxn^Cf}&C!Shr{31$eL5 zmj&5SG(ju(1*DbG+r(u}e1~UkK^EsJ#T&(dFP06>>)Ho&0(iacAjkzOx!*L3!`dmp yM7qLh$Rqx5-f+J!=