Merge branch 'master' of https://github.com/PolarisSS13/Polaris into sink

This commit is contained in:
Leshana
2016-05-30 22:43:05 -04:00
34 changed files with 487 additions and 479 deletions

View File

@@ -0,0 +1 @@
var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()

View File

@@ -2,144 +2,55 @@
name = "None" name = "None"
always_last = TRUE always_last = TRUE
/datum/category_item/underwear/bottom/briefs_white /datum/category_item/underwear/bottom/briefs
name = "Briefs, white" name = "Briefs"
icon_state = "b1" 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 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 /datum/category_item/underwear/bottom/boxers_loveheart
name = "Boxers, Loveheart" name = "Boxers, Loveheart"
icon_state = "b7" icon_state = "boxers_loveheart"
/datum/category_item/underwear/bottom/boxers_black /datum/category_item/underwear/bottom/boxers
name = "Boxers, black" name = "Boxers"
icon_state = "b8" icon_state = "boxers"
has_color = TRUE
/datum/category_item/underwear/bottom/boxers_grey
name = "Boxers, grey"
icon_state = "b9"
/datum/category_item/underwear/bottom/boxers_green_and_blue /datum/category_item/underwear/bottom/boxers_green_and_blue
name = "Boxers, green & blue striped" name = "Boxers, green & blue striped"
icon_state = "b10" icon_state = "boxers_green_and_blue"
/datum/category_item/underwear/bottom/panties_red /datum/category_item/underwear/bottom/panties
name = "Panties, red" name = "Panties"
icon_state = "b11" icon_state = "panties"
has_color = TRUE
/datum/category_item/underwear/bottom/panties_white /datum/category_item/underwear/bottom/panties/is_default(var/gender)
name = "Panties, white"
icon_state = "b12"
/datum/category_item/underwear/bottom/panties_white/is_default(var/gender)
return gender == FEMALE return gender == FEMALE
/datum/category_item/underwear/bottom/panties_yellow /datum/category_item/underwear/bottom/lacy_thong
name = "Panties, yellow" name = "Lacy thong"
icon_state = "b13" icon_state = "lacy_thong"
/datum/category_item/underwear/bottom/panties_blue /datum/category_item/underwear/bottom/lacy_thong_alt
name = "Panties, blue" name = "Lacy thong, alt"
icon_state = "b14" icon_state = "lacy_thong_alt"
has_color = TRUE
/datum/category_item/underwear/bottom/panties_light_black /datum/category_item/underwear/bottom/panties_alt
name = "Panties, light-black" name = "Panties, alt"
icon_state = "b15" 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 /datum/category_item/underwear/bottom/thong
name = "Thong" name = "Thong"
icon_state = "b16" icon_state = "thong"
has_color = TRUE
/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"

View File

@@ -2,57 +2,49 @@
always_last = TRUE always_last = TRUE
name = "None" name = "None"
/datum/category_item/underwear/socks/white_normal /datum/category_item/underwear/socks/normal
name = "Normal, white" name = "Normal"
icon_state = "white_norm" icon_state = "socks_norm"
has_color = TRUE
/datum/category_item/underwear/socks/white_short /datum/category_item/underwear/socks/short
name = "Short, white" name = "Short"
icon_state = "white_short" icon_state = "socks_short"
has_color = TRUE
/datum/category_item/underwear/socks/white_knee /datum/category_item/underwear/socks/thigh
name = "Knee, white" name = "Thigh"
icon_state = "white_knee" icon_state = "socks_thigh"
has_color = TRUE
/datum/category_item/underwear/socks/white_thigh /datum/category_item/underwear/socks/knee
name = "Thigh, white" name = "Knee"
icon_state = "white_thigh" icon_state = "socks_knee"
has_color = TRUE
/datum/category_item/underwear/socks/black_normal /datum/category_item/underwear/socks/striped_knee
name = "Normal, black" name = "Knee, striped"
icon_state = "black_norm" icon_state = "striped_knee"
has_color = TRUE
/datum/category_item/underwear/socks/black_short /datum/category_item/underwear/socks/striped_thigh
name = "Short, black" name = "Thigh, striped"
icon_state = "black_short" icon_state = "striped_thigh"
has_color = TRUE
/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/pantyhose /datum/category_item/underwear/socks/pantyhose
name = "Pantyhose" name = "Pantyhose"
icon_state = "pantyhose" icon_state = "pantyhose"
/datum/category_item/underwear/socks/striped_thigh /datum/category_item/underwear/socks/thin_thigh
name = "Thigh, striped" name = "Thigh, thin"
icon_state = "striped_thigh" icon_state = "thin_thigh"
has_color = TRUE
/datum/category_item/underwear/socks/striped_knee /datum/category_item/underwear/socks/thin_knee
name = "Knee, striped" name = "Knee, thin"
icon_state = "striped_knee" icon_state = "thin_knee"
has_color = TRUE
/datum/category_item/underwear/socks/rainbow_thigh /datum/category_item/underwear/socks/rainbow_thigh
name = "Thigh, rainbow" name = "Thigh, rainbow"
@@ -64,12 +56,4 @@
/datum/category_item/underwear/socks/fishnet /datum/category_item/underwear/socks/fishnet
name = "Fishnet" name = "Fishnet"
icon_state = "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"

View File

@@ -5,102 +5,39 @@
/datum/category_item/underwear/top/none/is_default(var/gender) /datum/category_item/underwear/top/none/is_default(var/gender)
return gender != FEMALE return gender != FEMALE
/datum/category_item/underwear/top/bra_red /datum/category_item/underwear/top/bra
name = "Bra, red"
icon_state = "t1"
/datum/category_item/underwear/top/bra_white
is_default = TRUE is_default = TRUE
name = "Bra, white" name = "Bra"
icon_state = "t2" 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 return gender == FEMALE
/datum/category_item/underwear/top/bra_yellow /datum/category_item/underwear/top/sports_bra
name = "Bra, yellow" name = "Sports bra"
icon_state = "t3" icon_state = "sports_bra"
has_color = TRUE
/datum/category_item/underwear/top/bra_blue /datum/category_item/underwear/top/sports_bra_alt
name = "Bra, blue" name = "Sports bra, alt"
icon_state = "t4" icon_state = "sports_bra_alt"
has_color = TRUE
/datum/category_item/underwear/top/bra_black
name = "Bra, black"
icon_state = "t5"
/datum/category_item/underwear/top/lacy_bra /datum/category_item/underwear/top/lacy_bra
name = "Lacy bra" name = "Lacy bra"
icon_state = "t6" icon_state = "lacy_bra"
/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"
/datum/category_item/underwear/top/lacy_bra_alt /datum/category_item/underwear/top/lacy_bra_alt
name = "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 /datum/category_item/underwear/top/lacy_bra_alt_stripe
name = "Lacy bra, violet" name = "Lacy bra, alt, stripe"
icon_state = "t16" icon_state = "lacy_bra_alt_stripe"
/datum/category_item/underwear/top/halterneck_bra_black /datum/category_item/underwear/top/halterneck_bra
name = "Halterneck bra, black" name = "Halterneck bra"
icon_state = "t17" icon_state = "halterneck_bra"
has_color = TRUE
/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"

View File

@@ -3,74 +3,25 @@
name = "None" name = "None"
always_last = TRUE always_last = TRUE
/datum/category_item/underwear/undershirt/tank_top_white /datum/category_item/underwear/undershirt/shirt
name = "Tank top, white" name = "Shirt"
icon_state = "u1" icon_state = "undershirt"
has_color = TRUE
/datum/category_item/underwear/undershirt/tank_top_white_alt /datum/category_item/underwear/undershirt/tank_top
name = "Tank top, white alt" name = "Tank top"
icon_state = "tank_white_s" icon_state = "tanktop"
has_color = TRUE
/datum/category_item/underwear/undershirt/tank_top_black /datum/category_item/underwear/undershirt/tank_top_alt
name = "Tank top, black" name = "Tank top, alt"
icon_state = "u2" icon_state = "tanktop_alt"
has_color = TRUE
/datum/category_item/underwear/undershirt/tank_top_red
name = "Tank top, red"
icon_state = "tank_red_s"
/datum/category_item/underwear/undershirt/tank_top_fire /datum/category_item/underwear/undershirt/tank_top_fire
name = "Tank top, fire" name = "Tank top, fire"
icon_state = "tank_fire_s" 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 /datum/category_item/underwear/undershirt/shirt_heart
name = "Shirt, heart" name = "Shirt, heart"
icon_state = "lover_s" icon_state = "lover_s"
@@ -80,44 +31,18 @@
icon_state = "shirt_nano_s" icon_state = "shirt_nano_s"
/datum/category_item/underwear/undershirt/shirt_love_nt /datum/category_item/underwear/undershirt/shirt_love_nt
name = "Shirt, I&lt;3NT" name = "Shirt, I<3NT"
icon_state = "lover_s" icon_state = "lover_s"
/datum/category_item/underwear/undershirt/shortsleeve_shirt_white /datum/category_item/underwear/undershirt/shortsleeve_shirt
name = "Shortsleeve shirt, white" name = "Shortsleeve shirt"
icon_state = "whiteshortsleeve_s" icon_state = "shortsleeve"
has_color = TRUE
/datum/category_item/underwear/undershirt/shortsleeve_shirt_purple /datum/category_item/underwear/undershirt/polo_shirt
name = "Shortsleeve shirt, purple" name = "Polo shirt"
icon_state = "purpleshortsleeve_s" icon_state = "polo"
has_color = TRUE
/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/sport_shirt_green /datum/category_item/underwear/undershirt/sport_shirt_green
name = "Sport shirt, green" name = "Sport shirt, green"

View File

@@ -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/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 = 'icons/mob/human.dmi' // Which icon to get the underwear from
var/icon_state // And the particular item state 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() /datum/category_item/underwear/dd_SortValue()
if(always_last) if(always_last)
@@ -50,7 +56,11 @@ datum/category_group/underwear/dd_SortValue()
/datum/category_item/underwear/proc/is_default(var/gender) /datum/category_item/underwear/proc/is_default(var/gender)
return is_default 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) if(!icon_state)
return return
I.Blend(new /icon('icons/mob/human.dmi', icon_state), ICON_OVERLAY)
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

View File

@@ -6,10 +6,10 @@
Shocking someone costs ten chemicals per use." Shocking someone costs ten chemicals per use."
enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power." enhancedtext = "Shocking biologicals without grabbing only requires five chemicals, and has more disabling power."
genomecost = 2 genomecost = 2
verbpath = /mob/proc/changeling_bioelectrogenesis verbpath = /mob/living/carbon/human/proc/changeling_bioelectrogenesis
//Recharge whatever's in our hand, or shock people. //Recharge whatever's in our hand, or shock people.
/mob/proc/changeling_bioelectrogenesis() /mob/living/carbon/human/proc/changeling_bioelectrogenesis()
set category = "Changeling" set category = "Changeling"
set name = "Bioelectrogenesis (20 + 10/shock)" set name = "Bioelectrogenesis (20 + 10/shock)"
set desc = "Recharges anything in your hand, or shocks people." set desc = "Recharges anything in your hand, or shocks people."
@@ -33,19 +33,28 @@
return 0 return 0
else 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 we're grabbing someone, electrocute them.
if(istype(held_item,/obj/item/weapon/grab)) if(istype(held_item,/obj/item/weapon/grab))
var/obj/item/weapon/grab/G = held_item var/obj/item/weapon/grab/G = held_item
if(G.affecting) if(G.affecting)
G.affecting.electrocute_act(10,src,1.0,BP_TORSO) G.affecting.electrocute_act(10 * siemens,src,1.0,BP_TORSO)
var/agony = 80 //Does more than if hit with an electric hand, since grabbing is slower. 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) G.affecting.stun_effect_act(0, agony, BP_TORSO, src)
msg_admin_attack("[key_name(src)] shocked [key_name(G.affecting)] with the [src].") msg_admin_attack("[key_name(src)] shocked [key_name(G.affecting)] with the [src].")
visible_message("<span class='warning'>Arcs of electricity strike [G.affecting]!</span>", if(siemens)
"<span class='warning'>Our hand channels raw electricity into [G.affecting].</span>", visible_message("<span class='warning'>Arcs of electricity strike [G.affecting]!</span>",
"<span class='italics'>You hear sparks!</span>") "<span class='warning'>Our hand channels raw electricity into [G.affecting].</span>",
"<span class='italics'>You hear sparks!</span>")
else
src << "<span class='warning'>Our gloves block us from shocking \the [G.affecting].</span>"
src.mind.changeling.chem_charges -= 10 src.mind.changeling.chem_charges -= 10
return 1 return 1
@@ -69,17 +78,19 @@
"<span class='warning'>Our hand channels raw electricity into \the [held_item].</span>", "<span class='warning'>Our hand channels raw electricity into \the [held_item].</span>",
"<span class='italics'>You hear sparks!</span>") "<span class='italics'>You hear sparks!</span>")
var/i = 10 var/i = 10
while(i) if(siemens)
cell.charge += 100 //This should be a nice compromise between recharging guns and other batteries. while(i)
if(cell.charge > cell.maxcharge) cell.charge += 100 * siemens //This should be a nice compromise between recharging guns and other batteries.
cell.charge = cell.maxcharge if(cell.charge > cell.maxcharge)
break cell.charge = cell.maxcharge
var/T = get_turf(src) break
new /obj/effect/effect/sparks(T) if(siemens)
held_item.update_icon() var/T = get_turf(src)
i-- new /obj/effect/effect/sparks(T)
sleep(1 SECOND) held_item.update_icon()
success = 1 i--
sleep(1 SECOND)
success = 1
if(success == 0) //If we couldn't do anything with the ability, don't deduct the chemicals. if(success == 0) //If we couldn't do anything with the ability, don't deduct the chemicals.
src << "<span class='warning'>We are unable to affect \the [held_item].</span>" src << "<span class='warning'>We are unable to affect \the [held_item].</span>"
else else
@@ -113,11 +124,18 @@
if(src) if(src)
qdel(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) if(!target)
return return
if(!proximity) if(!proximity)
return return
// Handle glove conductivity.
var/obj/item/clothing/gloves/gloves = user.gloves
var/siemens = 1
if(gloves)
siemens = gloves.siemens_coefficient
//Excuse the copypasta. //Excuse the copypasta.
if(istype(target,/mob/living/carbon)) if(istype(target,/mob/living/carbon))
var/mob/living/carbon/C = target var/mob/living/carbon/C = target
@@ -126,14 +144,17 @@
src << "<span class='warning'>We require more chemicals to electrocute [C]!</span>" src << "<span class='warning'>We require more chemicals to electrocute [C]!</span>"
return 0 return 0
C.electrocute_act(electrocute_amount,src,1.0,BP_TORSO) C.electrocute_act(electrocute_amount * siemens,src,1.0,BP_TORSO)
C.stun_effect_act(0, agony_amount, BP_TORSO, src) C.stun_effect_act(0, agony_amount * siemens, BP_TORSO, src)
msg_admin_attack("[key_name(user)] shocked [key_name(C)] with the [src].") msg_admin_attack("[key_name(user)] shocked [key_name(C)] with the [src].")
visible_message("<span class='warning'>Arcs of electricity strike [C]!</span>", if(siemens)
"<span class='warning'>Our hand channels raw electricity into [C]</span>", visible_message("<span class='warning'>Arcs of electricity strike [C]!</span>",
"<span class='italics'>You hear sparks!</span>") "<span class='warning'>Our hand channels raw electricity into [C]</span>",
"<span class='italics'>You hear sparks!</span>")
else
src << "<span class='warning'>Our gloves block us from shocking \the [C].</span>"
//qdel(src) //Since we're no longer a one hit stun, we need to stick around. //qdel(src) //Since we're no longer a one hit stun, we need to stick around.
user.mind.changeling.chem_charges -= shock_cost user.mind.changeling.chem_charges -= shock_cost
return 1 return 1
@@ -145,11 +166,12 @@
src << "<span class='warning'>We require more chemicals to electrocute [S]!</span>" src << "<span class='warning'>We require more chemicals to electrocute [S]!</span>"
return 0 return 0
S.electrocute_act(60,src,1.0) //If only they had surge protectors. S.electrocute_act(60 * siemens,src,1.0) //If only they had surge protectors.
visible_message("<span class='warning'>Arcs of electricity strike [S]!</span>", if(siemens)
"<span class='warning'>Our hand channels raw electricity into [S]</span>", visible_message("<span class='warning'>Arcs of electricity strike [S]!</span>",
"<span class='italics'>You hear sparks!</span>") "<span class='warning'>Our hand channels raw electricity into [S]</span>",
S << "<span class='danger'>Warning: Electrical surge detected!</span>" "<span class='italics'>You hear sparks!</span>")
S << "<span class='danger'>Warning: Electrical surge detected!</span>"
//qdel(src) //qdel(src)
user.mind.changeling.chem_charges -= 10 user.mind.changeling.chem_charges -= 10
return 1 return 1
@@ -164,20 +186,22 @@
"<span class='warning'>Our hand channels raw electricity into \the [target].</span>", "<span class='warning'>Our hand channels raw electricity into \the [target].</span>",
"<span class='italics'>You hear sparks!</span>") "<span class='italics'>You hear sparks!</span>")
var/i = 10 var/i = 10
while(i) if(siemens)
cell.charge += 100 //This should be a nice compromise between recharging guns and other batteries. while(i)
if(cell.charge > cell.maxcharge) cell.charge += 100 * siemens //This should be a nice compromise between recharging guns and other batteries.
cell.charge = cell.maxcharge if(cell.charge > cell.maxcharge)
break //No point making sparks if the cell's full. cell.charge = cell.maxcharge
// if(!Adjacent(T)) break //No point making sparks if the cell's full.
// break // if(!Adjacent(T))
var/Turf = get_turf(src) // break
new /obj/effect/effect/sparks(Turf) if(siemens)
T.update_icon() var/Turf = get_turf(src)
i-- new /obj/effect/effect/sparks(Turf)
sleep(1 SECOND) T.update_icon()
success = 1 i--
break sleep(1 SECOND)
success = 1
break
if(success == 0) if(success == 0)
src << "<span class='warning'>We are unable to affect \the [target].</span>" src << "<span class='warning'>We are unable to affect \the [target].</span>"
else else

View File

@@ -18,14 +18,13 @@
var/mob/living/carbon/C = src var/mob/living/carbon/C = src
if(changeling.max_geneticpoints < 0) //Absorbed by another ling if(changeling.max_geneticpoints < 0) //Absorbed by another ling
src << "<span class='danger'>You have no genomes, not even your own, and cannot regenerate.</span>" src << "<span class='danger'>We have no genomes, not even our own, and cannot regenerate.</span>"
return 0 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 return
C << "<span class='notice'>We will attempt to regenerate our form.</span>" C << "<span class='notice'>We will attempt to regenerate our form.</span>"
C.status_flags |= FAKEDEATH //play dead
C.update_canmove() C.update_canmove()
C.remove_changeling_powers() C.remove_changeling_powers()
@@ -33,13 +32,12 @@
C.suiciding = 0 C.suiciding = 0
if(C.stat != DEAD) if(C.stat != DEAD)
C.emote("deathgasp") C.adjustOxyLoss(C.maxHealth * 2)
C.tod = worldtime2text()
spawn(rand(800,2000)) spawn(rand(800,2000))
//The ling will now be able to choose when to revive //The ling will now be able to choose when to revive
src.verbs += /mob/proc/changeling_revive src.verbs += /mob/proc/changeling_revive
src << "<span class='notice'>We are ready to rise. Use the Revive verb when you are ready.</span>" src << "<span class='notice'><font size='5'>We are ready to rise. Use the <b>Revive</b> verb when you are ready.</font></span>"
feedback_add_details("changeling_powers","FD") feedback_add_details("changeling_powers","FD")
return 1 return 1

View File

@@ -25,8 +25,6 @@
C.SetStunned(0) C.SetStunned(0)
C.SetWeakened(0) C.SetWeakened(0)
C.radiation = 0 C.radiation = 0
C.halloss = 0
C.shock_stage = 0 //Pain
C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss()) C.heal_overall_damage(C.getBruteLoss(), C.getFireLoss())
C.reagents.clear_reagents() C.reagents.clear_reagents()
C.restore_all_organs(ignore_prosthetic_prefs=1) //Covers things like fractures and other things not covered by the above. 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.mutations.Remove(HUSK)
H.status_flags -= DISFIGURED H.status_flags -= DISFIGURED
H.update_body(1) 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 << "<span class='notice'>We have regenerated.</span>" C << "<span class='notice'>We have regenerated.</span>"
C.status_flags &= ~FAKEDEATH
C.update_canmove() C.update_canmove()
C.mind.changeling.purchased_powers -= C C.mind.changeling.purchased_powers -= C
feedback_add_details("changeling_powers","CR") feedback_add_details("changeling_powers","CR")

View File

@@ -13,21 +13,16 @@
minimal_access = list() //See /datum/job/assistant/get_access() minimal_access = list() //See /datum/job/assistant/get_access()
alt_titles = list("Technical Assistant","Medical Intern","Research Assistant","Visitor", "Resident") 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 if(!H) return 0
switch(H.backbag) switch(H.backbag)
if(2) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack(H), slot_back) 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(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(4) H.equip_to_slot_or_del(new /obj/item/weapon/storage/backpack/satchel(H), slot_back)
if (H.mind.role_alt_title) if(has_alt_title(H, alt_title,"Visitor")) //I doubt someone visiting the station would want to wear an ugly grey uniform
switch(H.mind.role_alt_title) H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform)
if("Visitor") //I doubt someone visiting the station would want to wear an ugly grey uniform else if(has_alt_title(H, alt_title,"Resident"))
H.equip_to_slot_or_del(new /obj/item/clothing/under/assistantformal(H), slot_w_uniform) H.equip_to_slot_or_del(new /obj/item/clothing/under/color/white(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)
else 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/under/color/grey(H), slot_w_uniform)
H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes) H.equip_to_slot_or_del(new /obj/item/clothing/shoes/black(H), slot_shoes)

View File

@@ -7,7 +7,7 @@ obj/machinery/recharger
anchored = 1 anchored = 1
use_power = 1 use_power = 1
idle_power_usage = 4 idle_power_usage = 4
active_power_usage = 15000 //15 kW active_power_usage = 40000 //40 kW
var/obj/item/charging = null 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/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" var/icon_state_charged = "recharger2"

View File

@@ -6,9 +6,9 @@
name = "space heater" name = "space heater"
desc = "Made by Space Amish using traditional space techniques, this heater is guaranteed not to set the station on fire." 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/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/on = 0
var/set_temperature = T0C + 50 //K var/set_temperature = T0C + 20 //K
var/heating_power = 40000 var/heating_power = 40000

View File

@@ -101,6 +101,78 @@ LINEN BINS
icon_state = "sheetbrown" icon_state = "sheetbrown"
item_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 /obj/structure/bedsheetbin
name = "linen bin" name = "linen bin"

View File

@@ -176,6 +176,19 @@
/obj/structure/bed/alien/New(var/newloc) /obj/structure/bed/alien/New(var/newloc)
..(newloc,"resin") ..(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 * Roller beds
*/ */

View File

@@ -17,11 +17,31 @@
for(var/datum/category_group/underwear/UWC in global_underwear.categories) for(var/datum/category_group/underwear/UWC in global_underwear.categories)
var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name] var/datum/category_item/underwear/UWI = H.all_underwear[UWC.name]
var/item_name = UWI ? UWI.name : "None" var/item_name = UWI ? UWI.name : "None"
dat += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'>[item_name]</a> <a href='?src=\ref[src];remove_underwear=[UWC.name]'>(Remove)</a><br>" dat += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'>[item_name]</a>"
if(UWI)
for(var/datum/gear_tweak/gt in UWI.tweaks)
dat += " <a href='?src=\ref[src];underwear=[UWC.name];tweak=\ref[gt]'>[gt.get_contents(get_metadata(H, UWC.name, gt))]</a>"
dat += " <a href='?src=\ref[src];remove_underwear=[UWC.name]'>(Remove)</a><br>"
dat = jointext(dat) dat = jointext(dat,null)
H << browse(dat, "window=wardrobe;size=400x200") 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) /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)) if(!istype(H) || !H.species || !(H.species.appearance_flags & HAS_UNDERWEAR))
return FALSE return FALSE
@@ -50,6 +70,18 @@
if(selected_underwear && CanUseTopic(H, default_state)) if(selected_underwear && CanUseTopic(H, default_state))
H.all_underwear[UWC.name] = selected_underwear H.all_underwear[UWC.name] = selected_underwear
. = TRUE . = 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(.) if(.)
H.update_body(1) H.update_underwear()
interact(H) interact(H)

View File

@@ -1,5 +1,6 @@
/datum/preferences /datum/preferences
var/list/all_underwear var/list/all_underwear
var/list/all_underwear_metadata
/datum/category_item/player_setup_item/general/equipment /datum/category_item/player_setup_item/general/equipment
name = "Clothing" name = "Clothing"
@@ -7,11 +8,13 @@
/datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S) /datum/category_item/player_setup_item/general/equipment/load_character(var/savefile/S)
S["all_underwear"] >> pref.all_underwear S["all_underwear"] >> pref.all_underwear
S["all_underwear_metadata"] >> pref.all_underwear_metadata
S["backbag"] >> pref.backbag S["backbag"] >> pref.backbag
S["pdachoice"] >> pref.pdachoice S["pdachoice"] >> pref.pdachoice
/datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S) /datum/category_item/player_setup_item/general/equipment/save_character(var/savefile/S)
S["all_underwear"] << pref.all_underwear S["all_underwear"] << pref.all_underwear
S["all_underwear_metadata"] << pref.all_underwear_metadata
S["backbag"] << pref.backbag S["backbag"] << pref.backbag
S["pdachoice"] << pref.pdachoice S["pdachoice"] << pref.pdachoice
@@ -27,15 +30,21 @@
pref.all_underwear[WRC.name] = WRI.name pref.all_underwear[WRC.name] = WRI.name
break break
if(!istype(pref.all_underwear_metadata))
pref.all_underwear_metadata = list()
for(var/underwear_category in pref.all_underwear) for(var/underwear_category in pref.all_underwear)
var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category] var/datum/category_group/underwear/UWC = global_underwear.categories_by_name[underwear_category]
if(!UWC) if(!UWC)
pref.all_underwear -= UWC pref.all_underwear -= underwear_category
else else
var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]] var/datum/category_item/underwear/UWI = UWC.items_by_name[pref.all_underwear[underwear_category]]
if(!UWI) 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.backbag = sanitize_integer(pref.backbag, 1, backbaglist.len, initial(pref.backbag))
pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice)) pref.pdachoice = sanitize_integer(pref.pdachoice, 1, pdachoicelist.len, initial(pref.pdachoice))
@@ -44,11 +53,34 @@
. += "<b>Equipment:</b><br>" . += "<b>Equipment:</b><br>"
for(var/datum/category_group/underwear/UWC in global_underwear.categories) 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" var/item_name = pref.all_underwear[UWC.name] ? pref.all_underwear[UWC.name] : "None"
. += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'><b>[item_name]</b></a><br>" . += "[UWC.name]: <a href='?src=\ref[src];change_underwear=[UWC.name]'><b>[item_name]</b></a>"
var/datum/category_item/underwear/UWI = UWC.items_by_name[item_name]
if(UWI)
for(var/datum/gear_tweak/gt in UWI.tweaks)
. += " <a href='?src=\ref[src];underwear=[UWC.name];tweak=\ref[gt]'>[gt.get_contents(get_metadata(UWC.name, gt))]</a>"
. += "<br>"
. += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>" . += "Backpack Type: <a href='?src=\ref[src];change_backpack=1'><b>[backbaglist[pref.backbag]]</b></a><br>"
. += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>" . += "PDA Type: <a href='?src=\ref[src];change_pda=1'><b>[pdachoicelist[pref.pdachoice]]</b></a><br>"
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) /datum/category_item/player_setup_item/general/equipment/OnTopic(var/href,var/list/href_list, var/mob/user)
if(href_list["change_backpack"]) if(href_list["change_backpack"])
@@ -72,4 +104,16 @@
pref.all_underwear[UWC.name] = selected_underwear.name pref.all_underwear[UWC.name] = selected_underwear.name
return TOPIC_REFRESH_UPDATE_PREVIEW 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 ..() return ..()

View File

@@ -17,8 +17,6 @@
* Color adjustment * Color adjustment
*/ */
var/datum/gear_tweak/color/gear_tweak_free_color_choice = new()
/datum/gear_tweak/color /datum/gear_tweak/color
var/list/valid_colors 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() /datum/gear_tweak/color/get_default()
return valid_colors ? valid_colors[1] : COLOR_GRAY 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) if(valid_colors)
return input(user, "Choose an item color.", "Character Preference", metadata) as null|anything in valid_colors return input(user, "Choose a color.", title, 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 color|null
/datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata) /datum/gear_tweak/color/tweak_item(var/obj/item/I, var/metadata)
if(valid_colors && !(metadata in valid_colors)) if(valid_colors && !(metadata in valid_colors))

View File

@@ -53,10 +53,26 @@
display_name = "tie, blue" display_name = "tie, blue"
path = /obj/item/clothing/accessory/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 /datum/gear/accessory/tie/red
display_name = "tie, red" display_name = "tie, red"
path = /obj/item/clothing/accessory/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 /datum/gear/accessory/tie/horrible
display_name = "tie, socially disgraceful" display_name = "tie, socially disgraceful"
path = /obj/item/clothing/accessory/horrible path = /obj/item/clothing/accessory/horrible

View File

@@ -350,10 +350,17 @@ datum/preferences
I.robotize() I.robotize()
character.all_underwear.Cut() character.all_underwear.Cut()
character.all_underwear_metadata.Cut()
for(var/underwear_category_name in all_underwear) 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] 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) if(backbag > 4 || backbag < 1)
backbag = 1 //Same as above backbag = 1 //Same as above
@@ -367,6 +374,7 @@ datum/preferences
character.force_update_limbs() character.force_update_limbs()
character.update_mutations(0) character.update_mutations(0)
character.update_body(0) character.update_body(0)
character.update_underwear(0)
character.update_hair(0) character.update_hair(0)
character.update_icons() character.update_icons()

View File

@@ -36,6 +36,7 @@
var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso) var/datum/robolimb/synthetic //If they are a synthetic (aka synthetic torso)
var/list/all_underwear = list() 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/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. var/pdachoice = 1 //Which PDA type the player has chosen. Default, Slim, or Old.

View File

@@ -109,29 +109,30 @@ Please contact me on #coderbus IRC. ~Carn x
#define MUTATIONS_LAYER 1 #define MUTATIONS_LAYER 1
#define DAMAGE_LAYER 2 #define DAMAGE_LAYER 2
#define SURGERY_LEVEL 3 //bs12 specific. #define SURGERY_LEVEL 3 //bs12 specific.
#define UNIFORM_LAYER 4 #define UNDERWEAR_LAYER 4
#define ID_LAYER 5 #define UNIFORM_LAYER 5
#define SHOES_LAYER 6 #define ID_LAYER 6
#define GLOVES_LAYER 7 #define SHOES_LAYER 7
#define BELT_LAYER 8 #define GLOVES_LAYER 8
#define SUIT_LAYER 9 #define BELT_LAYER 9
#define TAIL_LAYER 10 //bs12 specific. this hack is probably gonna come back to haunt me #define SUIT_LAYER 10
#define GLASSES_LAYER 11 #define TAIL_LAYER 11 //bs12 specific. this hack is probably gonna come back to haunt me
#define BELT_LAYER_ALT 12 #define GLASSES_LAYER 12
#define SUIT_STORE_LAYER 13 #define BELT_LAYER_ALT 13
#define BACK_LAYER 14 #define SUIT_STORE_LAYER 14
#define HAIR_LAYER 15 //TODO: make part of head layer? #define BACK_LAYER 15
#define EARS_LAYER 16 #define HAIR_LAYER 16 //TODO: make part of head layer?
#define FACEMASK_LAYER 17 #define EARS_LAYER 17
#define HEAD_LAYER 18 #define FACEMASK_LAYER 18
#define COLLAR_LAYER 19 #define HEAD_LAYER 19
#define HANDCUFF_LAYER 20 #define COLLAR_LAYER 20
#define LEGCUFF_LAYER 21 #define HANDCUFF_LAYER 21
#define L_HAND_LAYER 22 #define LEGCUFF_LAYER 22
#define R_HAND_LAYER 23 #define L_HAND_LAYER 23
#define FIRE_LAYER 24 //If you're on fire #define R_HAND_LAYER 24
#define TARGETED_LAYER 25 //BS12: Layer for the target overlay from weapon targeting system #define FIRE_LAYER 25 //If you're on fire
#define TOTAL_LAYERS 25 #define TARGETED_LAYER 26 //BS12: Layer for the target overlay from weapon targeting system
#define TOTAL_LAYERS 26
////////////////////////////////// //////////////////////////////////
/mob/living/carbon/human /mob/living/carbon/human
@@ -148,8 +149,12 @@ Please contact me on #coderbus IRC. ~Carn x
if (icon_update) if (icon_update)
icon = stand_icon icon = stand_icon
for(var/image/I in overlays_standing) for(var/entry in overlays_standing)
overlays += I 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. if(lying && !species.prone_icon) //Only rotate them if we're not drawing a specific icon for being prone.
var/matrix/M = matrix() var/matrix/M = matrix()
@@ -318,18 +323,24 @@ var/global/list/damage_icon_parts = list()
//END CACHED ICON GENERATION. //END CACHED ICON GENERATION.
stand_icon.Blend(base_icon,ICON_OVERLAY) 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) if(update_icons)
update_icons() update_icons()
//tail //tail
update_tail_showing(0) 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 //HAIR OVERLAY
/mob/living/carbon/human/proc/update_hair(var/update_icons=1) /mob/living/carbon/human/proc/update_hair(var/update_icons=1)
//Reset our hair //Reset our hair
@@ -429,6 +440,7 @@ var/global/list/damage_icon_parts = list()
update_mutations(0) update_mutations(0)
update_body(0) update_body(0)
update_underwear(0)
update_hair(0) update_hair(0)
update_inv_w_uniform(0) update_inv_w_uniform(0)
update_inv_wear_id(0) update_inv_wear_id(0)

View File

@@ -25,6 +25,7 @@
organ_tag = "brain" organ_tag = "brain"
parent_organ = BP_HEAD parent_organ = BP_HEAD
vital = 1 vital = 1
var/brain_type = /obj/item/device/mmi
var/obj/item/device/mmi/stored_mmi var/obj/item/device/mmi/stored_mmi
/obj/item/organ/internal/mmi_holder/Destroy() /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) /obj/item/organ/internal/mmi_holder/New(var/mob/living/carbon/human/new_owner, var/internal)
..(new_owner, internal) ..(new_owner, internal)
if(!stored_mmi) var/mob/living/carbon/human/dummy/mannequin/M = new_owner
stored_mmi = new(src) if(istype(M))
return
stored_mmi = new brain_type(src)
sleep(-1) sleep(-1)
update_from_mmi() update_from_mmi()
@@ -80,10 +83,8 @@
/obj/item/organ/internal/mmi_holder/posibrain /obj/item/organ/internal/mmi_holder/posibrain
name = "positronic brain interface" name = "positronic brain interface"
brain_type = /obj/item/device/mmi/digital/posibrain
/obj/item/organ/internal/mmi_holder/posibrain/New()
stored_mmi = new /obj/item/device/mmi/digital/posibrain(src)
..()
/obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi() /obj/item/organ/internal/mmi_holder/posibrain/update_from_mmi()
..() ..()

View File

@@ -53,6 +53,13 @@
--> -->
<div class="commit sansserif"> <div class="commit sansserif">
<h2 class="date">30 May 2016</h2>
<h3 class="author">EmperorJon updated:</h3>
<ul class="changes bgimages16">
<li class="rscadd">Ports Baystation's setup screen changes, thanks to PsiOmegaDelta.</li>
<li class="rscadd">Includes character preview with toggleable equipment, visible loadout items, ghost character sprites, and custom colour underwear. Your underwear will have reset, so you'll need to set it back.</li>
</ul>
<h2 class="date">29 May 2016</h2> <h2 class="date">29 May 2016</h2>
<h3 class="author">Datraen updated:</h3> <h3 class="author">Datraen updated:</h3>
<ul class="changes bgimages16"> <ul class="changes bgimages16">

View File

@@ -2337,3 +2337,9 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py.
Zuhayr: Zuhayr:
- tweak: 'Backend change: allowed accessories to be placed on any clothing item - tweak: 'Backend change: allowed accessories to be placed on any clothing item
with the appropriate variables set.' with the appropriate variables set.'
2016-05-30:
EmperorJon:
- rscadd: Ports Baystation's setup screen changes, thanks to PsiOmegaDelta.
- rscadd: Includes character preview with toggleable equipment, visible loadout
items, ghost character sprites, and custom colour underwear. Your underwear
will have reset, so you'll need to set it back.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 46 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 119 KiB

After

Width:  |  Height:  |  Size: 119 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 120 KiB

After

Width:  |  Height:  |  Size: 120 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 47 KiB

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 68 KiB

After

Width:  |  Height:  |  Size: 76 KiB

View File

@@ -92,7 +92,7 @@ NanoBaseHelpers = function ()
return string.charAt(0).toUpperCase() + string.slice(1); return string.charAt(0).toUpperCase() + string.slice(1);
}, },
// Display a bar. Used to show health, capacity, etc. Use difClass if the entire display bar class should be different // Display a bar. Used to show health, capacity, etc. Use difClass if the entire display bar class should be different
displayBar: function(value, rangeMin, rangeMax, styleClass, showText, difClass) { displayBar: function(value, rangeMin, rangeMax, styleClass, showText, difClass, direction) {
if (rangeMin < rangeMax) if (rangeMin < rangeMax)
{ {
@@ -129,12 +129,21 @@ NanoBaseHelpers = function ()
if (typeof difClass == 'undefined' || !difClass) if (typeof difClass == 'undefined' || !difClass)
{ {
return '<div class="displayBar ' + styleClass + '"><div class="displayBarFill ' + styleClass + '" style="width: ' + percentage + '%;"></div><div class="displayBarText ' + styleClass + '">' + showText + '</div></div>'; difClass = ''
} }
if(typeof direction == 'undefined' || !direction)
{
direction = 'width'
}
else
{
direction = 'height'
}
var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100); var percentage = Math.round((value - rangeMin) / (rangeMax - rangeMin) * 100);
return '<div class="' + difClass + ' ' + styleClass + '"><div class="' + difClass + 'Fill ' + styleClass + '" style="height: ' + percentage + '%;"></div><div class="' + difClass + 'Text ' + styleClass + '">' + showText + '</div></div>'; return '<div class="displayBar' + difClass + ' ' + styleClass + '"><div class="displayBar' + difClass + 'Fill ' + styleClass + '" style="' + direction + ': ' + percentage + '%;"></div><div class="displayBar' + difClass + 'Text ' + styleClass + '">' + showText + '</div></div>';
}, },
// Display DNA Blocks (for the DNA Modifier UI) // Display DNA Blocks (for the DNA Modifier UI)
displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) { displayDNABlocks: function(dnaString, selectedBlock, selectedSubblock, blockSize, paramKey) {

View File

@@ -9,10 +9,10 @@ Used In File(s): \code\modules\xenobio2\machines\injector_computer.dm
<div class="itemContent" style="text-align: center; width: 100px"> <div class="itemContent" style="text-align: center; width: 100px">
{{if data.beaker}} {{if data.beaker}}
{{:data.reagentAmount}}u / {{:data.reagentMax}}u {{:data.reagentAmount}}u / {{:data.reagentMax}}u
{{:helper.displayBar(data.reagentAmount, data.reagentMax, data.reagentMin, 'good', null, 'displayBarBeaker')}} {{:helper.displayBar(data.reagentAmount, data.reagentMax, data.reagentMin, 'good', null, 'Beaker', 1)}}
{{else}} {{else}}
<span class='bad'><b>ERR</b></span> <span class='bad'><b>ERR</b></span>
{{:helper.displayBar(data.reagentAmount, data.reagentMax, data.reagentMin, 'good', null, 'displayBarBeaker')}} {{:helper.displayBar(data.reagentAmount, data.reagentMax, data.reagentMin, 'good', null, 'Beaker', 1)}}
{{/if}} {{/if}}
</div> </div>
<div style="padding-left: 110px;"> <div style="padding-left: 110px;">

View File

@@ -45,6 +45,7 @@
#include "code\_compatibility\509\JSON Writer.dm" #include "code\_compatibility\509\JSON Writer.dm"
#include "code\_compatibility\509\text.dm" #include "code\_compatibility\509\text.dm"
#include "code\_compatibility\509\type2type.dm" #include "code\_compatibility\509\type2type.dm"
#include "code\_helpers\_global_objects.dm"
#include "code\_helpers\atmospherics.dm" #include "code\_helpers\atmospherics.dm"
#include "code\_helpers\datum_pool.dm" #include "code\_helpers\datum_pool.dm"
#include "code\_helpers\files.dm" #include "code\_helpers\files.dm"