Merge remote-tracking branch 'upstream/master' into smoothlattice

This commit is contained in:
xxalpha
2015-09-22 19:40:01 +01:00
230 changed files with 5954 additions and 6070 deletions
+150 -25
View File
@@ -1,22 +1,23 @@
/obj/structure/displaycase
name = "display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox1"
desc = "A display case for prized possessions. Hooked up with an anti-theft system."
icon_state = "glassbox0"
desc = "A display case for prized possessions."
density = 1
anchored = 1
unacidable = 1//Dissolving the case would also delete the gun.
var/health = 30
var/occupied = 1
var/destroyed = 0
var/obj/item/showpiece = null
var/alert = 0
var/open = 0
var/obj/item/weapon/electronics/airlock/electronics
/obj/structure/displaycase/ex_act(severity, target)
switch(severity)
if (1)
new /obj/item/weapon/shard( src.loc )
if (occupied)
new /obj/item/weapon/gun/energy/laser/captain( src.loc )
occupied = 0
dump()
qdel(src)
if (2)
if (prob(50))
@@ -27,6 +28,13 @@
src.health -= 5
src.healthcheck()
/obj/structure/displaycase/examine(mob/user)
..()
if(showpiece)
user << "<span class='notice'>There's [showpiece] inside.</span>"
if(alert)
user << "<span class='notice'>Hooked up with an anti-theft system.</span>"
/obj/structure/displaycase/bullet_act(obj/item/projectile/Proj)
if((Proj.damage_type == BRUTE || Proj.damage_type == BURN))
@@ -35,16 +43,17 @@
src.healthcheck()
return
/obj/structure/displaycase/proc/dump()
if (showpiece)
showpiece.loc = src.loc
showpiece = null
/obj/structure/displaycase/blob_act()
if (prob(75))
new /obj/item/weapon/shard( src.loc )
if (occupied)
new /obj/item/weapon/gun/energy/laser/captain( src.loc )
occupied = 0
dump()
qdel(src)
/obj/structure/displaycase/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
@@ -55,27 +64,76 @@
update_icon()
//Activate Anti-theft
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, "sound/effects/alert.ogg", 50, 1)
if(alert)
var/area/alarmed = get_area(src)
alarmed.burglaralert(src)
playsound(src, "sound/effects/alert.ogg", 50, 1)
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
return
/obj/structure/displaycase/update_icon()
if(src.destroyed)
src.icon_state = "glassboxb[src.occupied]"
/obj/structure/displaycase/proc/is_directional(atom/A)
try
getFlatIcon(A,defdir=4)
catch
return 0
return 1
/obj/structure/displaycase/proc/get_flat_icon_directional(atom/A)
//Get flatIcon even if dir is mismatched for directionless icons
//SLOW
var/icon/I
if(is_directional(A))
I = getFlatIcon(A)
else
src.icon_state = "glassbox[src.occupied]"
var/old_dir = A.dir
A.dir = 2
I = getFlatIcon(A)
A.dir = old_dir
return I
/obj/structure/displaycase/update_icon()
var/icon/I
if(open)
I = icon('icons/obj/stationobjs.dmi',"glassbox_open")
else
I = icon('icons/obj/stationobjs.dmi',"glassbox0")
if(destroyed)
I = icon('icons/obj/stationobjs.dmi',"glassboxb0")
if(showpiece)
var/icon/S = get_flat_icon_directional(showpiece)
S.Scale(17,17)
I.Blend(S,ICON_UNDERLAY,8,8)
src.icon = I
return
/obj/structure/displaycase/attackby(obj/item/weapon/W, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
src.health -= W.force
src.healthcheck()
..()
if(istype(W, /obj/item/weapon/card) && electronics && !destroyed && allowed(user))
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
open = !open
update_icon()
return
if(!alert && istype(W,/obj/item/weapon/crowbar))
if(destroyed && !showpiece)
user << "<span class='notice'>You remove the destroyed case</span>"
qdel(src)
return
user << "<span class='notice'>You start to [open ? "close":"open"] the [src]</span>"
if(do_after(user, 20, target = src))
user << "<span class='notice'>You [open ? "close":"open"] the [src]</span>"
open = !open
update_icon()
else if(open)
if(user.unEquip(W))
W.loc = src
showpiece = W
user << "<span class='notice'>You put [W] on display</span>"
update_icon()
else
user.changeNext_move(CLICK_CD_MELEE)
src.health -= W.force
src.healthcheck()
..()
return
/obj/structure/displaycase/attack_paw(mob/user)
@@ -83,10 +141,9 @@
/obj/structure/displaycase/attack_hand(mob/user)
user.changeNext_move(CLICK_CD_MELEE)
if (src.destroyed && src.occupied)
new /obj/item/weapon/gun/energy/laser/captain( src.loc )
if (showpiece && (destroyed || open))
dump()
user << "<span class='notice'>You deactivate the hover field built into the case.</span>"
src.occupied = 0
src.add_fingerprint(user)
update_icon()
return
@@ -98,3 +155,71 @@
return
/obj/structure/displaycase_chassis
anchored = 1
density = 0
name = "display case chassis"
desc = "wooden base of display case"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "glassbox_chassis"
var/obj/item/weapon/electronics/airlock/electronics
/obj/structure/displaycase_chassis/attackby(obj/item/I, mob/user, params)
if(istype(I, /obj/item/weapon/wrench))
user << "<span class='notice'>You start disassembling [src]...</span>"
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(do_after(user, 30, target = src))
playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1)
new /obj/item/stack/sheet/mineral/wood(get_turf(src))
qdel(src)
return
if(istype(I, /obj/item/weapon/electronics/airlock))
user << "<span class='notice'>You start installing the electronics into [src]...</span>"
playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1)
if(user.unEquip(I) && do_after(user, 30, target = src))
I.loc = src
electronics = I
user << "<span class='notice'>You install the airlock electronics.</span>"
return
if(istype(I, /obj/item/stack/sheet/glass))
var/obj/item/stack/sheet/glass/G = I
if(G.get_amount() < 10)
user << "<span class='warning'>You need ten glass sheets to do this!</span>"
return
user << "<span class='notice'>You start adding [G] to [src]...</span>"
if(do_after(user, 20, target = src))
G.use(10)
var/obj/structure/displaycase/display = new(src.loc)
if(electronics)
electronics.loc = display
display.electronics = electronics
if(electronics.use_one_access)
display.req_one_access = electronics.conf_access
else
display.req_access = electronics.conf_access
qdel(src)
return
return
/obj/structure/displaycase/captain
alert = 1
/obj/structure/displaycase/captain/New()
..()
showpiece = new /obj/item/weapon/gun/energy/laser/captain (src)
update_icon()
/obj/structure/displaycase/labcage
name = "lab cage"
desc = "A glass lab container for storing interesting creatures."
/obj/structure/displaycase/labcage/New()
..()
var/obj/item/clothing/mask/facehugger/A = new /obj/item/clothing/mask/facehugger(src)
A.sterile = 1
A.name = "Lamarr"
showpiece = A
update_icon()
@@ -1,91 +0,0 @@
/obj/structure/lamarr
name = "lab cage"
icon = 'icons/obj/stationobjs.dmi'
icon_state = "labcage1"
desc = "A glass lab container for storing interesting creatures."
density = 1
anchored = 1
unacidable = 1//Dissolving the case would also delete Lamarr
var/health = 30
var/occupied = 1
var/destroyed = 0
/obj/structure/lamarr/ex_act(severity, target)
switch(severity)
if (1)
new /obj/item/weapon/shard( src.loc )
Break()
qdel(src)
if (2)
if (prob(50))
src.health -= 15
src.healthcheck()
if (3)
if (prob(50))
src.health -= 5
src.healthcheck()
/obj/structure/lamarr/bullet_act(obj/item/projectile/Proj)
health -= Proj.damage
..()
src.healthcheck()
return
/obj/structure/lamarr/blob_act()
if (prob(75))
new /obj/item/weapon/shard( src.loc )
Break()
qdel(src)
/obj/structure/lamarr/proc/healthcheck()
if (src.health <= 0)
if (!( src.destroyed ))
src.density = 0
src.destroyed = 1
new /obj/item/weapon/shard( src.loc )
playsound(src, "shatter", 70, 1)
Break()
else
playsound(src.loc, 'sound/effects/Glasshit.ogg', 75, 1)
return
/obj/structure/lamarr/update_icon()
if(src.destroyed)
src.icon_state = "labcageb[src.occupied]"
else
src.icon_state = "labcage[src.occupied]"
return
/obj/structure/lamarr/attackby(obj/item/weapon/W, mob/user, params)
user.changeNext_move(CLICK_CD_MELEE)
src.health -= W.force
src.healthcheck()
..()
return
/obj/structure/lamarr/attack_paw(mob/user)
return src.attack_hand(user)
/obj/structure/lamarr/attack_hand(mob/user)
user.changeNext_move(CLICK_CD_MELEE)
if (src.destroyed)
return
else
user.visible_message("<span class='warning'>[user] kicks the lab cage.</span>", \
"<span class='danger'>You kick the lab cage.</span>")
src.health -= 2
healthcheck()
return
/obj/structure/lamarr/proc/Break()
if(occupied)
var/obj/item/clothing/mask/facehugger/A = new /obj/item/clothing/mask/facehugger( src.loc )
A.sterile = 1
A.name = "Lamarr"
occupied = 0
update_icon()
return
+19 -6
View File
@@ -148,16 +148,17 @@
var/racechoice = input(H, "What are we again?", "Race change") as null|anything in choosable_races
newrace = species_list[racechoice]
if(!newrace || !H.dna)
if(!newrace)
return
hardset_dna(H, null, null, null, null, newrace)
H.set_species(newrace, icon_update=0)
if(H.dna.species.use_skintones)
var/new_s_tone = input(user, "Choose your skin tone:", "Race change") as null|anything in skin_tones
if(new_s_tone)
H.skin_tone = new_s_tone
H.dna.update_ui_block(DNA_SKIN_TONE_BLOCK)
if(MUTCOLORS in H.dna.species.specflags)
var/new_mutantcolor = input(user, "Choose your skin color:", "Race change") as color|null
@@ -170,7 +171,10 @@
else
H << "<span class='notice'>Invalid color. Your color is not bright enough.</span>"
H.regenerate_icons()
H.update_body()
H.update_hair()
H.update_mutcolor()
H.update_mutations_overlay() // no hulk lizard
if("gender")
if(!(H.gender in list("male", "female"))) //blame the patriarchy
@@ -180,12 +184,19 @@
if(alert(H, "Become a Witch?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "female"
H << "<span class='notice'>Man, you feel like a woman!</span>"
H.regenerate_icons()
else
return
else
if(alert(H, "Become a Warlock?", "Confirmation", "Yes", "No") == "Yes")
H.gender = "male"
H << "<span class='notice'>Whoa man, you feel like a man!</span>"
H.regenerate_icons()
else
return
H.dna.update_ui_block(DNA_GENDER_BLOCK)
H.update_body()
H.update_mutations_overlay() //(hulk male/female)
if("hair")
var/hairchoice = alert(H, "Hair style or hair color?", "Change Hair", "Style", "Color")
@@ -196,15 +207,17 @@
var/new_hair_color = input(H, "Choose your hair color", "Hair Color") as null|color
if(new_hair_color)
H.hair_color = sanitize_hexcolor(new_hair_color)
H.dna.update_ui_block(DNA_HAIR_COLOR_BLOCK)
if(H.gender == "male")
var/new_face_color = input(H, "Choose your facial hair color", "Hair Color") as null|color
if(new_face_color)
H.facial_hair_color = sanitize_hexcolor(new_face_color)
H.dna.update_ui_block(DNA_FACIAL_HAIR_COLOR_BLOCK)
H.update_hair()
if("eyes")
var/new_eye_color = input(H, "Choose your eye color", "Eye Color") as null|color
if(new_eye_color)
H.eye_color = sanitize_hexcolor(new_eye_color)
H.dna.update_ui_block(DNA_EYE_COLOR_BLOCK)
H.update_body()