diff --git a/code/_helpers/_global_objects.dm b/code/_helpers/_global_objects.dm new file mode 100644 index 0000000000..4cbbcf3314 --- /dev/null +++ b/code/_helpers/_global_objects.dm @@ -0,0 +1 @@ +var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() \ No newline at end of file diff --git a/code/datums/underwear/bottom.dm b/code/datums/underwear/bottom.dm index 04e2c42622..7f91a18608 100644 --- a/code/datums/underwear/bottom.dm +++ b/code/datums/underwear/bottom.dm @@ -2,144 +2,55 @@ name = "None" always_last = TRUE -/datum/category_item/underwear/bottom/briefs_white - name = "Briefs, white" - icon_state = "b1" +/datum/category_item/underwear/bottom/briefs + name = "Briefs" + icon_state = "briefs" + has_color = TRUE -/datum/category_item/underwear/bottom/briefs_white/is_default(var/gender) +/datum/category_item/underwear/bottom/briefs/is_default(var/gender) return gender != FEMALE -/datum/category_item/underwear/bottom/briefs_grey - name = "Briefs, grey" - icon_state = "b2" - -/datum/category_item/underwear/bottom/briefs_green - name = "Briefs, green" - icon_state = "b3" - -/datum/category_item/underwear/bottom/briefs_blue - name = "Briefs, blue" - icon_state = "b4" - -/datum/category_item/underwear/bottom/briefs_black - name = "Briefs, black" - icon_state = "b5" - -/datum/category_item/underwear/bottom/panties_noback - name = "Panties, noback" - icon_state = "b6" - /datum/category_item/underwear/bottom/boxers_loveheart name = "Boxers, Loveheart" - icon_state = "b7" + icon_state = "boxers_loveheart" -/datum/category_item/underwear/bottom/boxers_black - name = "Boxers, black" - icon_state = "b8" - -/datum/category_item/underwear/bottom/boxers_grey - name = "Boxers, grey" - icon_state = "b9" +/datum/category_item/underwear/bottom/boxers + name = "Boxers" + icon_state = "boxers" + has_color = TRUE /datum/category_item/underwear/bottom/boxers_green_and_blue name = "Boxers, green & blue striped" - icon_state = "b10" + icon_state = "boxers_green_and_blue" -/datum/category_item/underwear/bottom/panties_red - name = "Panties, red" - icon_state = "b11" +/datum/category_item/underwear/bottom/panties + name = "Panties" + icon_state = "panties" + has_color = TRUE -/datum/category_item/underwear/bottom/panties_white - name = "Panties, white" - icon_state = "b12" - -/datum/category_item/underwear/bottom/panties_white/is_default(var/gender) +/datum/category_item/underwear/bottom/panties/is_default(var/gender) return gender == FEMALE -/datum/category_item/underwear/bottom/panties_yellow - name = "Panties, yellow" - icon_state = "b13" +/datum/category_item/underwear/bottom/lacy_thong + name = "Lacy thong" + icon_state = "lacy_thong" -/datum/category_item/underwear/bottom/panties_blue - name = "Panties, blue" - icon_state = "b14" +/datum/category_item/underwear/bottom/lacy_thong_alt + name = "Lacy thong, alt" + icon_state = "lacy_thong_alt" + has_color = TRUE -/datum/category_item/underwear/bottom/panties_light_black - name = "Panties, light-black" - icon_state = "b15" +/datum/category_item/underwear/bottom/panties_alt + name = "Panties, alt" + icon_state = "panties_alt" + has_color = TRUE + +/datum/category_item/underwear/bottom/compression_shorts + name = "Compression shorts" + icon_state = "compression_shorts" + has_color = TRUE /datum/category_item/underwear/bottom/thong name = "Thong" - icon_state = "b16" - -/datum/category_item/underwear/bottom/panties_black - name = "Panties, black" - icon_state = "b17" - -/datum/category_item/underwear/bottom/panties_white_alt - name = "Bra, white alt" - icon_state = "b18" - -/datum/category_item/underwear/bottom/compression_shorts_black - name = "Compression shorts, black" - icon_state = "b19" - -/datum/category_item/underwear/bottom/compression_shorts_white - name = "Compression shorts, white" - icon_state = "b20" - -/datum/category_item/underwear/bottom/compression_shorts_baby_blue - name = "Compression shorts, baby-blue" - icon_state = "b21" - -/datum/category_item/underwear/bottom/panties_green - name = "Panties, green" - icon_state = "b22" - -/datum/category_item/underwear/bottom/compression_shorts_pink - name = "Compression shorts, pink" - icon_state = "b23" - -/datum/category_item/underwear/bottom/thong_violet - name = "Thong, violet" - icon_state = "b24" - -/datum/category_item/underwear/bottom/thong_alt - name = "Thong, alt" - icon_state = "b25" - -/datum/category_item/underwear/bottom/thong_violet_alt - name = "Thong, violet alt" - icon_state = "b26" - -/datum/category_item/underwear/bottom/alt_thong_black - name = "Alt. thong, black" - icon_state = "b27" - -/datum/category_item/underwear/bottom/alt_thong_blue - name = "Alt. thong, blue" - icon_state = "b28" - -/datum/category_item/underwear/bottom/alt_thong_green - name = "Alt. thong, green" - icon_state = "b29" - -/datum/category_item/underwear/bottom/alt_thong_purple - name = "Alt. thong, purple" - icon_state = "b30" - -/datum/category_item/underwear/bottom/alt_thong_red - name = "Alt. thong, red" - icon_state = "b31" - -/datum/category_item/underwear/bottom/alt_thong_teal - name = "Alt. thong, teal" - icon_state = "b32" - -/datum/category_item/underwear/bottom/alt_thong_violet - name = "Alt. thong, violet" - icon_state = "b33" - -/datum/category_item/underwear/bottom/alt_thong_white - name = "Alt. thong, white" - icon_state = "b34" \ No newline at end of file + icon_state = "thong" + has_color = TRUE \ No newline at end of file diff --git a/code/datums/underwear/socks.dm b/code/datums/underwear/socks.dm index ab33162e04..fc1c96ce53 100644 --- a/code/datums/underwear/socks.dm +++ b/code/datums/underwear/socks.dm @@ -2,57 +2,49 @@ always_last = TRUE name = "None" -/datum/category_item/underwear/socks/white_normal - name = "Normal, white" - icon_state = "white_norm" +/datum/category_item/underwear/socks/normal + name = "Normal" + icon_state = "socks_norm" + has_color = TRUE -/datum/category_item/underwear/socks/white_short - name = "Short, white" - icon_state = "white_short" +/datum/category_item/underwear/socks/short + name = "Short" + icon_state = "socks_short" + has_color = TRUE -/datum/category_item/underwear/socks/white_knee - name = "Knee, white" - icon_state = "white_knee" +/datum/category_item/underwear/socks/thigh + name = "Thigh" + icon_state = "socks_thigh" + has_color = TRUE -/datum/category_item/underwear/socks/white_thigh - name = "Thigh, white" - icon_state = "white_thigh" +/datum/category_item/underwear/socks/knee + name = "Knee" + icon_state = "socks_knee" + has_color = TRUE -/datum/category_item/underwear/socks/black_normal - name = "Normal, black" - icon_state = "black_norm" +/datum/category_item/underwear/socks/striped_knee + name = "Knee, striped" + icon_state = "striped_knee" + has_color = TRUE -/datum/category_item/underwear/socks/black_short - name = "Short, black" - icon_state = "black_short" - -/datum/category_item/underwear/socks/black_knee - name = "Knee, black" - icon_state = "black_knee" - -/datum/category_item/underwear/socks/black_thigh - name = "Thigh, black" - icon_state = "black_thigh" - -/datum/category_item/underwear/socks/thin_knee - name = "Knee, thin" - icon_state = "thin_knee" - -/datum/category_item/underwear/socks/thin_thigh - name = "Thigh, thin" - icon_state = "thin_thigh" +/datum/category_item/underwear/socks/striped_thigh + name = "Thigh, striped" + icon_state = "striped_thigh" + has_color = TRUE /datum/category_item/underwear/socks/pantyhose name = "Pantyhose" icon_state = "pantyhose" -/datum/category_item/underwear/socks/striped_thigh - name = "Thigh, striped" - icon_state = "striped_thigh" +/datum/category_item/underwear/socks/thin_thigh + name = "Thigh, thin" + icon_state = "thin_thigh" + has_color = TRUE -/datum/category_item/underwear/socks/striped_knee - name = "Knee, striped" - icon_state = "striped_knee" +/datum/category_item/underwear/socks/thin_knee + name = "Knee, thin" + icon_state = "thin_knee" + has_color = TRUE /datum/category_item/underwear/socks/rainbow_thigh name = "Thigh, rainbow" @@ -64,12 +56,4 @@ /datum/category_item/underwear/socks/fishnet name = "Fishnet" - icon_state = "fishnet" - -/datum/category_item/underwear/socks/thinwhite_thigh - name = "Thigh, thin white" - icon_state = "thinwhite_thigh" - -/datum/category_item/underwear/socks/thinwhite_knee - name = "Knee, thin white" - icon_state = "thinwhite_knee" \ No newline at end of file + icon_state = "fishnet" \ No newline at end of file diff --git a/code/datums/underwear/top.dm b/code/datums/underwear/top.dm index 4e23a70295..8640e77da9 100644 --- a/code/datums/underwear/top.dm +++ b/code/datums/underwear/top.dm @@ -5,102 +5,39 @@ /datum/category_item/underwear/top/none/is_default(var/gender) return gender != FEMALE -/datum/category_item/underwear/top/bra_red - name = "Bra, red" - icon_state = "t1" - -/datum/category_item/underwear/top/bra_white +/datum/category_item/underwear/top/bra is_default = TRUE - name = "Bra, white" - icon_state = "t2" + name = "Bra" + icon_state = "bra" + has_color = TRUE -/datum/category_item/underwear/top/bra_white/is_default(var/gender) +/datum/category_item/underwear/top/bra/is_default(var/gender) return gender == FEMALE -/datum/category_item/underwear/top/bra_yellow - name = "Bra, yellow" - icon_state = "t3" +/datum/category_item/underwear/top/sports_bra + name = "Sports bra" + icon_state = "sports_bra" + has_color = TRUE -/datum/category_item/underwear/top/bra_blue - name = "Bra, blue" - icon_state = "t4" - -/datum/category_item/underwear/top/bra_black - name = "Bra, black" - icon_state = "t5" +/datum/category_item/underwear/top/sports_bra_alt + name = "Sports bra, alt" + icon_state = "sports_bra_alt" + has_color = TRUE /datum/category_item/underwear/top/lacy_bra name = "Lacy bra" - icon_state = "t6" - -/datum/category_item/underwear/top/sports_bra_black - name = "Sports bra, black" - icon_state = "t7" - -/datum/category_item/underwear/top/sports_bra_white - name = "Sports bra, white" - icon_state = "t8" - -/datum/category_item/underwear/top/sports_bra_black_alt - name = "Sports bra, black alt" - icon_state = "t9" - -/datum/category_item/underwear/top/sports_bra_white_alt - name = "Sports bra, white alt" - icon_state = "t10" - -/datum/category_item/underwear/top/bra_baby_blue - name = "Bra, baby blue" - icon_state = "t11" - -/datum/category_item/underwear/top/bra_green - name = "Bra, green" - icon_state = "t12" - -/datum/category_item/underwear/top/bra_pink - name = "Bra, pink" - icon_state = "t13" - -/datum/category_item/underwear/top/bra_violet - name = "Bra, violet" - icon_state = "t14" + icon_state = "lacy_bra" /datum/category_item/underwear/top/lacy_bra_alt name = "Lacy bra, alt" - icon_state = "t15" + icon_state = "lacy_bra_alt" + has_color = TRUE -/datum/category_item/underwear/top/bra_lacy_violet - name = "Lacy bra, violet" - icon_state = "t16" +/datum/category_item/underwear/top/lacy_bra_alt_stripe + name = "Lacy bra, alt, stripe" + icon_state = "lacy_bra_alt_stripe" -/datum/category_item/underwear/top/halterneck_bra_black - name = "Halterneck bra, black" - icon_state = "t17" - -/datum/category_item/underwear/top/halterneck_bra_blue - name = "Halterneck bra, blue" - icon_state = "t18" - -/datum/category_item/underwear/top/halterneck_bra_green - name = "Halterneck bra, green" - icon_state = "t19" - -/datum/category_item/underwear/top/halterneck_bra_purple - name = "Halterneck bra, purple" - icon_state = "t20" - -/datum/category_item/underwear/top/halterneck_bra_red - name = "Halterneck bra, red" - icon_state = "t21" - -/datum/category_item/underwear/top/halterneck_bra_teal - name = "Halterneck bra, teal" - icon_state = "t22" - -/datum/category_item/underwear/top/halterneck_bra_violet - name = "Halterneck bra, violet" - icon_state = "t23" - -/datum/category_item/underwear/top/halterneck_bra_white - name = "Halterneck bra, white" - icon_state = "t24" \ No newline at end of file +/datum/category_item/underwear/top/halterneck_bra + name = "Halterneck bra" + icon_state = "halterneck_bra" + has_color = TRUE \ No newline at end of file diff --git a/code/datums/underwear/undershirts.dm b/code/datums/underwear/undershirts.dm index f1149dabb7..33886f997d 100644 --- a/code/datums/underwear/undershirts.dm +++ b/code/datums/underwear/undershirts.dm @@ -3,74 +3,25 @@ name = "None" always_last = TRUE -/datum/category_item/underwear/undershirt/tank_top_white - name = "Tank top, white" - icon_state = "u1" +/datum/category_item/underwear/undershirt/shirt + name = "Shirt" + icon_state = "undershirt" + has_color = TRUE -/datum/category_item/underwear/undershirt/tank_top_white_alt - name = "Tank top, white alt" - icon_state = "tank_white_s" +/datum/category_item/underwear/undershirt/tank_top + name = "Tank top" + icon_state = "tanktop" + has_color = TRUE -/datum/category_item/underwear/undershirt/tank_top_black - name = "Tank top, black" - icon_state = "u2" - -/datum/category_item/underwear/undershirt/tank_top_red - name = "Tank top, red" - icon_state = "tank_red_s" +/datum/category_item/underwear/undershirt/tank_top_alt + name = "Tank top, alt" + icon_state = "tanktop_alt" + has_color = TRUE /datum/category_item/underwear/undershirt/tank_top_fire name = "Tank top, fire" icon_state = "tank_fire_s" -/datum/category_item/underwear/undershirt/shirt_black - name = "Shirt, black" - icon_state = "u3" - -/datum/category_item/underwear/undershirt/shirt_black_alt - name = "Shirt, black alt" - icon_state = "shirt_black_s" - -/datum/category_item/underwear/undershirt/shirt_white - name = "Shirt, white" - icon_state = "u4" - -/datum/category_item/underwear/undershirt/shirt_white_alt - name = "Shirt, white alt" - icon_state = "shirt_white_s" - -/datum/category_item/underwear/undershirt/shirt_grey - name = "Shirt, grey" - icon_state = "shirt_grey_s" - -/datum/category_item/underwear/undershirt/shirt_blue - name = "Shirt, blue" - icon_state = "blueshirt_s" - -/datum/category_item/underwear/undershirt/shirt_blue_alt - name = "Shirt, blue alt" - icon_state = "shirt_blue_s" - -/datum/category_item/underwear/undershirt/shirt_red - name = "Shirt, red" - icon_state = "redshirt_s" - -/datum/category_item/underwear/undershirt/shirt_red_alt - name = "Shirt, red alt" - icon_state = "shirt_red_s" - -/datum/category_item/underwear/undershirt/shirt_yellow - name = "Shirt, yellow" - icon_state = "yellowshirt_s" - -/datum/category_item/underwear/undershirt/shirt_green - name = "Shirt, green" - icon_state = "greenshirt_s" - -/datum/category_item/underwear/undershirt/shirt_green_alt - name = "Shirt, green alt" - icon_state = "shirt_green_s" - /datum/category_item/underwear/undershirt/shirt_heart name = "Shirt, heart" icon_state = "lover_s" @@ -80,44 +31,18 @@ icon_state = "shirt_nano_s" /datum/category_item/underwear/undershirt/shirt_love_nt - name = "Shirt, I<3NT" + name = "Shirt, I<3NT" icon_state = "lover_s" -/datum/category_item/underwear/undershirt/shortsleeve_shirt_white - name = "Shortsleeve shirt, white" - icon_state = "whiteshortsleeve_s" +/datum/category_item/underwear/undershirt/shortsleeve_shirt + name = "Shortsleeve shirt" + icon_state = "shortsleeve" + has_color = TRUE -/datum/category_item/underwear/undershirt/shortsleeve_shirt_purple - name = "Shortsleeve shirt, purple" - icon_state = "purpleshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_blue - name = "Shortsleeve shirt, blue" - icon_state = "blueshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_green - name = "Shortsleeve shirt, green" - icon_state = "greenshortsleeve_s" - -/datum/category_item/underwear/undershirt/shortsleeve_shirt_black - name = "Shortsleeve shirt, black" - icon_state = "blackshortsleeve_s" - -/datum/category_item/underwear/undershirt/polo_shirt_blue - name = "Polo shirt, blue" - icon_state = "bluepolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_red - name = "Polo shirt, red" - icon_state = "redpolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_white - name = "Polo shirt, white" - icon_state = "whitepolo_s" - -/datum/category_item/underwear/undershirt/polo_shirt_grey_yellow - name = "Polo shirt, grey and yellow" - icon_state = "grayyellowpolo_s" +/datum/category_item/underwear/undershirt/polo_shirt + name = "Polo shirt" + icon_state = "polo" + has_color = TRUE /datum/category_item/underwear/undershirt/sport_shirt_green name = "Sport shirt, green" diff --git a/code/datums/underwear/underwear.dm b/code/datums/underwear/underwear.dm index 8b73dbddbb..d14ddea133 100644 --- a/code/datums/underwear/underwear.dm +++ b/code/datums/underwear/underwear.dm @@ -41,6 +41,12 @@ datum/category_group/underwear/dd_SortValue() var/is_default = FALSE // Should this entry be considered the default for its type? var/icon = 'icons/mob/human.dmi' // Which icon to get the underwear from var/icon_state // And the particular item state + var/list/tweaks = list() // Underwear customizations. + var/has_color = FALSE + +/datum/category_item/underwear/New() + if(has_color) + tweaks += gear_tweak_free_color_choice /datum/category_item/underwear/dd_SortValue() if(always_last) @@ -50,7 +56,11 @@ datum/category_group/underwear/dd_SortValue() /datum/category_item/underwear/proc/is_default(var/gender) return is_default -/datum/category_item/underwear/proc/apply_to_icon(var/icon/I) +/datum/category_item/underwear/proc/generate_image(var/list/metadata) if(!icon_state) return - I.Blend(new /icon('icons/mob/human.dmi', icon_state), ICON_OVERLAY) \ No newline at end of file + + var/image/I = image(icon = 'icons/mob/human.dmi', icon_state = icon_state) + for(var/datum/gear_tweak/gt in tweaks) + gt.tweak_item(I, metadata && metadata["[gt]"] ? metadata["[gt]"] : gt.get_default()) + return I \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm index dd1489248f..6dd22efab9 100644 --- a/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm +++ b/code/game/gamemodes/changeling/powers/bioelectrogenesis.dm @@ -6,10 +6,10 @@ Shocking someone costs ten chemicals per use." enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power." genomecost = 2 - verbpath = /mob/proc/changeling_bioelectrogenesis + verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis //Recharge whatever's in our hand, or shock people. -/mob/proc/changeling_bioelectrogenesis() +/mob/living/carbon/human/proc/changeling_bioelectrogenesis() set category = "Changeling" set name = "Bioelectrogenesis (20 + 10/shock)" set desc = "Recharges anything in your hand, or shocks people." @@ -33,19 +33,28 @@ return 0 else + // Handle glove conductivity. + var/obj/item/clothing/gloves/gloves = src.gloves + var/siemens = 1 + if(gloves) + siemens = gloves.siemens_coefficient + //If we're grabbing someone, electrocute them. if(istype(held_item,/obj/item/weapon/grab)) var/obj/item/weapon/grab/G = held_item if(G.affecting) - G.affecting.electrocute_act(10,src,1.0,BP_TORSO) - var/agony = 80 //Does more than if hit with an electric hand, since grabbing is slower. + G.affecting.electrocute_act(10 * siemens,src,1.0,BP_TORSO) + var/agony = 80 * siemens //Does more than if hit with an electric hand, since grabbing is slower. G.affecting.stun_effect_act(0, agony, BP_TORSO, src) msg_admin_attack("[key_name(src)] shocked [key_name(G.affecting)] with the [src].") - visible_message("Arcs of electricity strike [G.affecting]!", - "Our hand channels raw electricity into [G.affecting].", - "You hear sparks!") + if(siemens) + visible_message("Arcs of electricity strike [G.affecting]!", + "Our hand channels raw electricity into [G.affecting].", + "You hear sparks!") + else + src << "Our gloves block us from shocking \the [G.affecting]." src.mind.changeling.chem_charges -= 10 return 1 @@ -69,17 +78,19 @@ "Our hand channels raw electricity into \the [held_item].", "You hear sparks!") var/i = 10 - while(i) - cell.charge += 100 //This should be a nice compromise between recharging guns and other batteries. - if(cell.charge > cell.maxcharge) - cell.charge = cell.maxcharge - break - var/T = get_turf(src) - new /obj/effect/effect/sparks(T) - held_item.update_icon() - i-- - sleep(1 SECOND) - success = 1 + if(siemens) + while(i) + cell.charge += 100 * siemens //This should be a nice compromise between recharging guns and other batteries. + if(cell.charge > cell.maxcharge) + cell.charge = cell.maxcharge + break + if(siemens) + var/T = get_turf(src) + new /obj/effect/effect/sparks(T) + held_item.update_icon() + i-- + sleep(1 SECOND) + success = 1 if(success == 0) //If we couldn't do anything with the ability, don't deduct the chemicals. src << "We are unable to affect \the [held_item]." else @@ -113,11 +124,18 @@ if(src) qdel(src) -/obj/item/weapon/electric_hand/afterattack(var/atom/target, var/mob/living/user, proximity) +/obj/item/weapon/electric_hand/afterattack(var/atom/target, var/mob/living/carbon/human/user, proximity) if(!target) return if(!proximity) return + + // Handle glove conductivity. + var/obj/item/clothing/gloves/gloves = user.gloves + var/siemens = 1 + if(gloves) + siemens = gloves.siemens_coefficient + //Excuse the copypasta. if(istype(target,/mob/living/carbon)) var/mob/living/carbon/C = target @@ -126,14 +144,17 @@ src << "We require more chemicals to electrocute [C]!" return 0 - C.electrocute_act(electrocute_amount,src,1.0,BP_TORSO) - C.stun_effect_act(0, agony_amount, BP_TORSO, src) + C.electrocute_act(electrocute_amount * siemens,src,1.0,BP_TORSO) + C.stun_effect_act(0, agony_amount * siemens, BP_TORSO, src) msg_admin_attack("[key_name(user)] shocked [key_name(C)] with the [src].") - visible_message("Arcs of electricity strike [C]!", - "Our hand channels raw electricity into [C]", - "You hear sparks!") + if(siemens) + visible_message("Arcs of electricity strike [C]!", + "Our hand channels raw electricity into [C]", + "You hear sparks!") + else + src << "Our gloves block us from shocking \the [C]." //qdel(src) //Since we're no longer a one hit stun, we need to stick around. user.mind.changeling.chem_charges -= shock_cost return 1 @@ -145,11 +166,12 @@ src << "We require more chemicals to electrocute [S]!" return 0 - S.electrocute_act(60,src,1.0) //If only they had surge protectors. - visible_message("Arcs of electricity strike [S]!", - "Our hand channels raw electricity into [S]", - "You hear sparks!") - S << "Warning: Electrical surge detected!" + S.electrocute_act(60 * siemens,src,1.0) //If only they had surge protectors. + if(siemens) + visible_message("Arcs of electricity strike [S]!", + "Our hand channels raw electricity into [S]", + "You hear sparks!") + S << "Warning: Electrical surge detected!" //qdel(src) user.mind.changeling.chem_charges -= 10 return 1 @@ -164,20 +186,22 @@ "Our hand channels raw electricity into \the [target].", "You hear sparks!") var/i = 10 - while(i) - cell.charge += 100 //This should be a nice compromise between recharging guns and other batteries. - if(cell.charge > cell.maxcharge) - cell.charge = cell.maxcharge - break //No point making sparks if the cell's full. -// if(!Adjacent(T)) -// break - var/Turf = get_turf(src) - new /obj/effect/effect/sparks(Turf) - T.update_icon() - i-- - sleep(1 SECOND) - success = 1 - break + if(siemens) + while(i) + cell.charge += 100 * siemens //This should be a nice compromise between recharging guns and other batteries. + if(cell.charge > cell.maxcharge) + cell.charge = cell.maxcharge + break //No point making sparks if the cell's full. + // if(!Adjacent(T)) + // break + if(siemens) + var/Turf = get_turf(src) + new /obj/effect/effect/sparks(Turf) + T.update_icon() + i-- + sleep(1 SECOND) + success = 1 + break if(success == 0) src << "We are unable to affect \the [target]." else diff --git a/code/game/gamemodes/changeling/powers/fake_death.dm b/code/game/gamemodes/changeling/powers/fake_death.dm index 0018eabad6..ac7080301b 100644 --- a/code/game/gamemodes/changeling/powers/fake_death.dm +++ b/code/game/gamemodes/changeling/powers/fake_death.dm @@ -18,14 +18,13 @@ var/mob/living/carbon/C = src if(changeling.max_geneticpoints < 0) //Absorbed by another ling - src << "You have no genomes, not even your own, and cannot regenerate." + src << "We have no genomes, not even our own, and cannot regenerate." return 0 - if(!C.stat && alert("Are we sure we wish to fake our death?",,"Yes","No") == "No")//Confirmation for living changelings if they want to fake their death + if(!C.stat && alert("Are we sure we wish to regenerate? We will appear to be dead while doing so.","Revival","Yes","No") == "No") return C << "We will attempt to regenerate our form." - C.status_flags |= FAKEDEATH //play dead C.update_canmove() C.remove_changeling_powers() @@ -33,13 +32,12 @@ C.suiciding = 0 if(C.stat != DEAD) - C.emote("deathgasp") - C.tod = worldtime2text() + C.adjustOxyLoss(C.maxHealth * 2) spawn(rand(800,2000)) //The ling will now be able to choose when to revive src.verbs += /mob/proc/changeling_revive - src << "We are ready to rise. Use the Revive verb when you are ready." + src << "We are ready to rise. Use the Revive verb when you are ready." feedback_add_details("changeling_powers","FD") return 1 \ No newline at end of file diff --git a/code/game/gamemodes/changeling/powers/revive.dm b/code/game/gamemodes/changeling/powers/revive.dm index 4f53c95b46..79fd2dcf74 100644 --- a/code/game/gamemodes/changeling/powers/revive.dm +++ b/code/game/gamemodes/changeling/powers/revive.dm @@ -25,8 +25,6 @@ C.SetStunned(0) C.SetWeakened(0) C.radiation = 0 - C.halloss = 0 - C.shock_stage = 0 //Pain C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss()) C.reagents.clear_reagents() C.restore_all_organs(ignore_prosthetic_prefs=1) //Covers things like fractures and other things not covered by the above. @@ -36,8 +34,13 @@ H.mutations.Remove(HUSK) H.status_flags -= DISFIGURED H.update_body(1) + for(var/limb in H.organs_by_name) + var/obj/item/organ/external/current_limb = H.organs_by_name[limb] + current_limb.undislocate() + + C.halloss = 0 + C.shock_stage = 0 //Pain C << "We have regenerated." - C.status_flags &= ~FAKEDEATH C.update_canmove() C.mind.changeling.purchased_powers -= C feedback_add_details("changeling_powers","CR") diff --git a/code/game/jobs/job/assistant.dm b/code/game/jobs/job/assistant.dm index ff87fb58e4..5e2b40d952 100644 --- a/code/game/jobs/job/assistant.dm +++ b/code/game/jobs/job/assistant.dm @@ -13,21 +13,16 @@ minimal_access = list() //See /datum/job/assistant/get_access() alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor", "Resident") -/datum/job/assistant/equip(var/mob/living/carbon/human/H) +/datum/job/assistant/equip(var/mob/living/carbon/human/H, var/alt_title) if(!H) return 0 switch(H.backbag) if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) if(3) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel/norm(H), slot_back) if(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back) - if (H.mind.role_alt_title) - switch(H.mind.role_alt_title) - if("Visitor") //I doubt someone visiting the station would want to wear an ugly grey uniform - H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform) - - if("Resident") - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(H), slot_w_uniform) - else - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) + if(has_alt_title(H, alt_title,"Visitor")) //I doubt someone visiting the station would want to wear an ugly grey uniform + H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform) + else if(has_alt_title(H, alt_title,"Resident")) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(H), slot_w_uniform) else H.equip_to_slot_or_del(new /obj/item/clothing/under/color/grey(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index 77aed2300f..71d63afc0a 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -7,7 +7,7 @@ obj/machinery/recharger anchored = 1 use_power = 1 idle_power_usage = 4 - active_power_usage = 15000 //15 kW + active_power_usage = 40000 //40 kW var/obj/item/charging = null var/list/allowed_devices = list(/obj/item/weapon/gun/energy, /obj/item/weapon/melee/baton, /obj/item/device/laptop, /obj/item/weapon/cell) var/icon_state_charged = "recharger2" diff --git a/code/game/machinery/spaceheater.dm b/code/game/machinery/spaceheater.dm index e0047a08bf..36c8c62814 100644 --- a/code/game/machinery/spaceheater.dm +++ b/code/game/machinery/spaceheater.dm @@ -6,9 +6,9 @@ name = "space heater" desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." var/obj/item/weapon/cell/cell - var/cell_type = /obj/item/weapon/cell/apc + var/cell_type = /obj/item/weapon/cell/high var/on = 0 - var/set_temperature = T0C + 50 //K + var/set_temperature = T0C + 20 //K var/heating_power = 40000 diff --git a/code/game/objects/structures/bedsheet_bin.dm b/code/game/objects/structures/bedsheet_bin.dm index ad1797756c..375c6727ea 100644 --- a/code/game/objects/structures/bedsheet_bin.dm +++ b/code/game/objects/structures/bedsheet_bin.dm @@ -101,6 +101,78 @@ LINEN BINS icon_state = "sheetbrown" item_state = "sheetbrown" +/obj/item/weapon/bedsheet/ian + icon_state = "sheetian" + item_state = "bedsheet" + +/obj/item/weapon/bedsheet/double + icon_state = "doublesheet" + item_state = "bedsheet" + +/obj/item/weapon/bedsheet/bluedouble + icon_state = "doublesheetblue" + item_state = "sheetblue" + +/obj/item/weapon/bedsheet/greendouble + icon_state = "doublesheetgreen" + item_state = "sheetgreen" + +/obj/item/weapon/bedsheet/orangedouble + icon_state = "doublesheetorange" + item_state = "sheetorange" + +/obj/item/weapon/bedsheet/purpledouble + icon_state = "doublesheetpurple" + item_state = "sheetpurple" + +/obj/item/weapon/bedsheet/doublerainbow //all the way across the sky. + icon_state = "doublesheetrainbow" + item_state = "sheetrainbow" + +/obj/item/weapon/bedsheet/doublered + icon_state = "doublesheetred" + item_state = "sheetred" + +/obj/item/weapon/bedsheet/doubleyellow + icon_state = "doublesheetyellow" + item_state = "sheetyellow" + +/obj/item/weapon/bedsheet/doublemime + icon_state = "doublesheetmime" + item_state = "sheetmime" + +/obj/item/weapon/bedsheet/doubleclown + icon_state = "doublesheetclown" + item_state = "sheetclown" + +/obj/item/weapon/bedsheet/doublecaptain + icon_state = "doublesheetcaptain" + item_state = "sheetcaptain" + +/obj/item/weapon/bedsheet/doublerd + icon_state = "doublesheetrd" + item_state = "sheetrd" + +/obj/item/weapon/bedsheet/doublehos + icon_state = "doublesheethos" + item_state = "sheethos" + +/obj/item/weapon/bedsheet/doublehop + icon_state = "doublesheethop" + item_state = "sheethop" + +/obj/item/weapon/bedsheet/doublece + icon_state = "doublesheetce" + item_state = "sheetce" + +/obj/item/weapon/bedsheet/doublebrown + icon_state = "doublesheetbrown" + item_state = "sheetbrown" + +/obj/item/weapon/bedsheet/doubleian + icon_state = "doublesheetian" + item_state = "bedsheet" + /obj/structure/bedsheetbin name = "linen bin" diff --git a/code/game/objects/structures/stool_bed_chair_nest/bed.dm b/code/game/objects/structures/stool_bed_chair_nest/bed.dm index 73914e113c..511709200c 100644 --- a/code/game/objects/structures/stool_bed_chair_nest/bed.dm +++ b/code/game/objects/structures/stool_bed_chair_nest/bed.dm @@ -176,6 +176,19 @@ /obj/structure/bed/alien/New(var/newloc) ..(newloc,"resin") +/obj/structure/bed/double + name = "double bed" + icon_state = "doublebed" + base_icon = "doublebed" + +/obj/structure/bed/double/post_buckle_mob(mob/living/M as mob) + if(M == buckled_mob) + M.pixel_y = 13 + M.old_y = 13 + else + M.pixel_y = 0 + M.old_y = 0 + /* * Roller beds */ diff --git a/code/game/objects/structures/under_wardrobe.dm b/code/game/objects/structures/under_wardrobe.dm index 2ded3ef17e..6a06ef26fb 100644 --- a/code/game/objects/structures/under_wardrobe.dm +++ b/code/game/objects/structures/under_wardrobe.dm @@ -17,11 +17,31 @@ for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name] var/item_name = UWI ? UWI.name : "None" - dat += "[UWC.name]: [item_name] (Remove)
" + dat += "[UWC.name]: [item_name]" + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + dat += " [gt.get_contents(get_metadata(H, UWC.name, gt))]" + dat += " (Remove)
" - dat = jointext(dat) + dat = jointext(dat,null) H << browse(dat, "window=wardrobe;size=400x200") +/obj/structure/undies_wardrobe/proc/get_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt) + var/metadata = H.all_underwear_metadata[underwear_category] + if(!metadata) + metadata = list() + H.all_underwear_metadata[underwear_category] = metadata + + var/tweak_data = metadata["[gt]"] + if(!tweak_data) + tweak_data = gt.get_default() + metadata["[gt]"] = tweak_data + return tweak_data + +/obj/structure/undies_wardrobe/proc/set_metadata(var/mob/living/carbon/human/H, var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) + var/list/metadata = H.all_underwear_metadata[underwear_category] + metadata["[gt]"] = new_metadata + /obj/structure/undies_wardrobe/proc/human_who_can_use_underwear(var/mob/living/carbon/human/H) if(!istype(H) || !H.species || !(H.species.appearance_flags & HAS_UNDERWEAR)) return FALSE @@ -50,6 +70,18 @@ if(selected_underwear && CanUseTopic(H, default_state)) H.all_underwear[UWC.name] = selected_underwear . = TRUE + else if(href_list["underwear"] && href_list["tweak"]) + var/underwear = href_list["underwear"] + if(!(underwear in H.all_underwear)) + return + var/datum/gear_tweak/gt = locate(href_list["tweak"]) + if(!gt) + return + var/new_metadata = gt.get_metadata(usr, get_metadata(H, underwear, gt), "Wardrobe Underwear Selection") + if(new_metadata) + set_metadata(H, underwear, gt, new_metadata) + . = TRUE + if(.) - H.update_body(1) + H.update_underwear() interact(H) \ No newline at end of file diff --git a/code/modules/client/preference_setup/general/04_equipment.dm b/code/modules/client/preference_setup/general/04_equipment.dm index b7758a6fa9..c455cef524 100644 --- a/code/modules/client/preference_setup/general/04_equipment.dm +++ b/code/modules/client/preference_setup/general/04_equipment.dm @@ -1,5 +1,6 @@ /datum/preferences var/list/all_underwear + var/list/all_underwear_metadata /datum/category_item/player_setup_item/general/equipment name = "Clothing" @@ -7,11 +8,13 @@ /datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) S["all_underwear"] >> pref.all_underwear + S["all_underwear_metadata"] >> pref.all_underwear_metadata S["backbag"] >> pref.backbag S["pdachoice"] >> pref.pdachoice /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) S["all_underwear"] << pref.all_underwear + S["all_underwear_metadata"] << pref.all_underwear_metadata S["backbag"] << pref.backbag S["pdachoice"] << pref.pdachoice @@ -27,15 +30,21 @@ pref.all_underwear[WRC.name] = WRI.name break + if(!istype(pref.all_underwear_metadata)) + pref.all_underwear_metadata = list() + for(var/underwear_category in pref.all_underwear) var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category] if(!UWC) - pref.all_underwear -= UWC + pref.all_underwear -= underwear_category else var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] if(!UWI) - pref.all_underwear -= UWC + pref.all_underwear -= underwear_category + for(var/underwear_metadata in pref.all_underwear_metadata) + if(!(underwear_metadata in pref.all_underwear)) + pref.all_underwear_metadata -= underwear_metadata pref.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag)) pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) @@ -44,11 +53,34 @@ . += "Equipment:
" for(var/datum/category_group/underwear/UWC in global_underwear.categories) var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None" - . += "[UWC.name]: [item_name]
" + . += "[UWC.name]: [item_name]" + var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name] + if(UWI) + for(var/datum/gear_tweak/gt in UWI.tweaks) + . += " [gt.get_contents(get_metadata(UWC.name, gt))]" + + . += "
" . += "Backpack Type: [backbaglist[pref.backbag]]
" . += "PDA Type: [pdachoicelist[pref.pdachoice]]
" - return jointext(.) + return jointext(.,null) + +/datum/category_item/player_setup_item/general/equipment/proc/get_metadata(var/underwear_category, var/datum/gear_tweak/gt) + var/metadata = pref.all_underwear_metadata[underwear_category] + if(!metadata) + metadata = list() + pref.all_underwear_metadata[underwear_category] = metadata + + var/tweak_data = metadata["[gt]"] + if(!tweak_data) + tweak_data = gt.get_default() + metadata["[gt]"] = tweak_data + return tweak_data + +/datum/category_item/player_setup_item/general/equipment/proc/set_metadata(var/underwear_category, var/datum/gear_tweak/gt, var/new_metadata) + var/list/metadata = pref.all_underwear_metadata[underwear_category] + metadata["[gt]"] = new_metadata + /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user) if(href_list["change_backpack"]) @@ -72,4 +104,16 @@ pref.all_underwear[UWC.name] = selected_underwear.name return TOPIC_REFRESH_UPDATE_PREVIEW + else if(href_list["underwear"] && href_list["tweak"]) + var/underwear = href_list["underwear"] + if(!(underwear in pref.all_underwear)) + return TOPIC_NOACTION + var/datum/gear_tweak/gt = locate(href_list["tweak"]) + if(!gt) + return TOPIC_NOACTION + var/new_metadata = gt.get_metadata(usr, get_metadata(underwear, gt)) + if(new_metadata) + set_metadata(underwear, gt, new_metadata) + return TOPIC_REFRESH_UPDATE_PREVIEW + return ..() \ No newline at end of file diff --git a/code/modules/client/preference_setup/loadout/gear_tweaks.dm b/code/modules/client/preference_setup/loadout/gear_tweaks.dm index 820c95f324..e8b1a56d62 100644 --- a/code/modules/client/preference_setup/loadout/gear_tweaks.dm +++ b/code/modules/client/preference_setup/loadout/gear_tweaks.dm @@ -17,8 +17,6 @@ * Color adjustment */ -var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() - /datum/gear_tweak/color var/list/valid_colors @@ -32,10 +30,10 @@ var/datum/gear_tweak/color/gear_tweak_free_color_choice = new() /datum/gear_tweak/color/get_default() return valid_colors ? valid_colors[1] : COLOR_GRAY -/datum/gear_tweak/color/get_metadata(var/user, var/metadata) +/datum/gear_tweak/color/get_metadata(var/user, var/metadata, var/title = "Character Preference") if(valid_colors) - return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors - return input(user, "Choose an item color.", "Global Preference", metadata) as color|null + return input(user, "Choose a color.", title, metadata) as null|anything in valid_colors + return input(user, "Choose a color.", title, metadata) as color|null /datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) if(valid_colors && !(metadata in valid_colors)) diff --git a/code/modules/client/preference_setup/loadout/loadout_accessories.dm b/code/modules/client/preference_setup/loadout/loadout_accessories.dm index a5c66d2e79..e8a66117cc 100644 --- a/code/modules/client/preference_setup/loadout/loadout_accessories.dm +++ b/code/modules/client/preference_setup/loadout/loadout_accessories.dm @@ -53,10 +53,26 @@ display_name = "tie, blue" path = /obj/item/clothing/accessory/blue +/datum/gear/accessory/tie/blue_clip + display_name = "tie, blue with clip" + path = /obj/item/clothing/accessory/blue_clip + /datum/gear/accessory/tie/red display_name = "tie, red" path = /obj/item/clothing/accessory/red +/datum/gear/accessory/tie/red_long + display_name = "tie, red long" + path = /obj/item/clothing/accessory/red_long + +/datum/gear/accessory/tie/yellow + display_name = "tie, yellow" + path = /obj/item/clothing/accessory/yellow + +/datum/gear/accessory/tie/navy + display_name = "tie, navy blue" + path = /obj/item/clothing/accessory/navy + /datum/gear/accessory/tie/horrible display_name = "tie, socially disgraceful" path = /obj/item/clothing/accessory/horrible diff --git a/code/modules/client/preferences.dm b/code/modules/client/preferences.dm index 915a5db9ea..8064479e6e 100644 --- a/code/modules/client/preferences.dm +++ b/code/modules/client/preferences.dm @@ -350,10 +350,17 @@ datum/preferences I.robotize() character.all_underwear.Cut() + character.all_underwear_metadata.Cut() + for(var/underwear_category_name in all_underwear) - var/underwear_item_name = all_underwear[underwear_category_name] var/datum/category_group/underwear/underwear_category = global_underwear.categories_by_name[underwear_category_name] - character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] + if(underwear_category) + var/underwear_item_name = all_underwear[underwear_category_name] + character.all_underwear[underwear_category_name] = underwear_category.items_by_name[underwear_item_name] + if(all_underwear_metadata[underwear_category_name]) + character.all_underwear_metadata[underwear_category_name] = all_underwear_metadata[underwear_category_name] + else + all_underwear -= underwear_category_name if(backbag > 4 || backbag < 1) backbag = 1 //Same as above @@ -367,6 +374,7 @@ datum/preferences character.force_update_limbs() character.update_mutations(0) character.update_body(0) + character.update_underwear(0) character.update_hair(0) character.update_icons() diff --git a/code/modules/mob/living/carbon/human/human_defines.dm b/code/modules/mob/living/carbon/human/human_defines.dm index 036d2094ea..6b877dcb04 100644 --- a/code/modules/mob/living/carbon/human/human_defines.dm +++ b/code/modules/mob/living/carbon/human/human_defines.dm @@ -36,6 +36,7 @@ var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso) var/list/all_underwear = list() + var/list/all_underwear_metadata = list() var/backbag = 2 //Which backpack type the player has chosen. Nothing, Satchel or Backpack. var/pdachoice = 1 //Which PDA type the player has chosen. Default, Slim, or Old. diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index aee262477c..871a873fe4 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -109,29 +109,30 @@ Please contact me on #coderbus IRC. ~Carn x #define MUTATIONS_LAYER 1 #define DAMAGE_LAYER 2 #define SURGERY_LEVEL 3 //bs12 specific. -#define UNIFORM_LAYER 4 -#define ID_LAYER 5 -#define SHOES_LAYER 6 -#define GLOVES_LAYER 7 -#define BELT_LAYER 8 -#define SUIT_LAYER 9 -#define TAIL_LAYER 10 //bs12 specific. this hack is probably gonna come back to haunt me -#define GLASSES_LAYER 11 -#define BELT_LAYER_ALT 12 -#define SUIT_STORE_LAYER 13 -#define BACK_LAYER 14 -#define HAIR_LAYER 15 //TODO: make part of head layer? -#define EARS_LAYER 16 -#define FACEMASK_LAYER 17 -#define HEAD_LAYER 18 -#define COLLAR_LAYER 19 -#define HANDCUFF_LAYER 20 -#define LEGCUFF_LAYER 21 -#define L_HAND_LAYER 22 -#define R_HAND_LAYER 23 -#define FIRE_LAYER 24 //If you're on fire -#define TARGETED_LAYER 25 //BS12: Layer for the target overlay from weapon targeting system -#define TOTAL_LAYERS 25 +#define UNDERWEAR_LAYER 4 +#define UNIFORM_LAYER 5 +#define ID_LAYER 6 +#define SHOES_LAYER 7 +#define GLOVES_LAYER 8 +#define BELT_LAYER 9 +#define SUIT_LAYER 10 +#define TAIL_LAYER 11 //bs12 specific. this hack is probably gonna come back to haunt me +#define GLASSES_LAYER 12 +#define BELT_LAYER_ALT 13 +#define SUIT_STORE_LAYER 14 +#define BACK_LAYER 15 +#define HAIR_LAYER 16 //TODO: make part of head layer? +#define EARS_LAYER 17 +#define FACEMASK_LAYER 18 +#define HEAD_LAYER 19 +#define COLLAR_LAYER 20 +#define HANDCUFF_LAYER 21 +#define LEGCUFF_LAYER 22 +#define L_HAND_LAYER 23 +#define R_HAND_LAYER 24 +#define FIRE_LAYER 25 //If you're on fire +#define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system +#define TOTAL_LAYERS 26 ////////////////////////////////// /mob/living/carbon/human @@ -148,8 +149,12 @@ Please contact me on #coderbus IRC. ~Carn x if (icon_update) icon = stand_icon - for(var/image/I in overlays_standing) - overlays += I + for(var/entry in overlays_standing) + if(istype(entry, /image)) + overlays += entry + else if(istype(entry, /list)) + for(var/inner_entry in entry) + overlays += inner_entry if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone. var/matrix/M = matrix() @@ -318,18 +323,24 @@ var/global/list/damage_icon_parts = list() //END CACHED ICON GENERATION. stand_icon.Blend(base_icon,ICON_OVERLAY) - //Underwear - if(species.appearance_flags & HAS_UNDERWEAR) - for(var/category in all_underwear) - var/datum/category_item/underwear/UW = all_underwear[category] - UW.apply_to_icon(stand_icon) - if(update_icons) update_icons() //tail update_tail_showing(0) +//UNDERWEAR OVERLAY +/mob/living/carbon/human/proc/update_underwear(var/update_icons=1) + overlays_standing[UNDERWEAR_LAYER] = null + + if(species.appearance_flags & HAS_UNDERWEAR) + overlays_standing[UNDERWEAR_LAYER] = list() + for(var/category in all_underwear) + var/datum/category_item/underwear/UWI = all_underwear[category] + overlays_standing[UNDERWEAR_LAYER] += UWI.generate_image(all_underwear_metadata[category]) + + if(update_icons) update_icons() + //HAIR OVERLAY /mob/living/carbon/human/proc/update_hair(var/update_icons=1) //Reset our hair @@ -429,6 +440,7 @@ var/global/list/damage_icon_parts = list() update_mutations(0) update_body(0) + update_underwear(0) update_hair(0) update_inv_w_uniform(0) update_inv_wear_id(0) diff --git a/code/modules/organs/subtypes/machine.dm b/code/modules/organs/subtypes/machine.dm index 04544035c0..df74367d0d 100644 --- a/code/modules/organs/subtypes/machine.dm +++ b/code/modules/organs/subtypes/machine.dm @@ -25,6 +25,7 @@ organ_tag = "brain" parent_organ = BP_HEAD vital = 1 + var/brain_type = /obj/item/device/mmi var/obj/item/device/mmi/stored_mmi /obj/item/organ/internal/mmi_holder/Destroy() @@ -35,8 +36,10 @@ /obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal) ..(new_owner, internal) - if(!stored_mmi) - stored_mmi = new(src) + var/mob/living/carbon/human/dummy/mannequin/M = new_owner + if(istype(M)) + return + stored_mmi = new brain_type(src) sleep(-1) update_from_mmi() @@ -80,10 +83,8 @@ /obj/item/organ/internal/mmi_holder/posibrain name = "positronic brain interface" - -/obj/item/organ/internal/mmi_holder/posibrain/New() - stored_mmi = new /obj/item/device/mmi/digital/posibrain(src) - ..() + brain_type = /obj/item/device/mmi/digital/posibrain + /obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi() ..() diff --git a/html/changelog.html b/html/changelog.html index 7199a0ef38..e5cdf2a7a2 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -53,6 +53,13 @@ -->
+

30 May 2016

+

EmperorJon updated:

+ +

29 May 2016

Datraen updated: