diff --git a/baystation12.dme b/baystation12.dme index ff370aa446..da6909df27 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -261,10 +261,10 @@ #include "code\game\gamemodes\revolution\revolution.dm" #include "code\game\gamemodes\revolution\rp_revolution.dm" #include "code\game\gamemodes\traitor\traitor.dm" +#include "code\game\gamemodes\wizard\artifact.dm" #include "code\game\gamemodes\wizard\rightandwrong.dm" #include "code\game\gamemodes\wizard\soulstone.dm" #include "code\game\gamemodes\wizard\spellbook.dm" -#include "code\game\gamemodes\wizard\veilrender.dm" #include "code\game\gamemodes\wizard\wizard.dm" #include "code\game\jobs\access.dm" #include "code\game\jobs\job_controller.dm" @@ -599,6 +599,7 @@ #include "code\game\objects\structures\barsign.dm" #include "code\game\objects\structures\bedsheet_bin.dm" #include "code\game\objects\structures\coathanger.dm" +#include "code\game\objects\structures\curtains.dm" #include "code\game\objects\structures\displaycase.dm" #include "code\game\objects\structures\door_assembly.dm" #include "code\game\objects\structures\electricchair.dm" diff --git a/code/game/gamemodes/wizard/veilrender.dm b/code/game/gamemodes/wizard/artifact.dm similarity index 60% rename from code/game/gamemodes/wizard/veilrender.dm rename to code/game/gamemodes/wizard/artifact.dm index 225158465f..2e846c5cc3 100644 --- a/code/game/gamemodes/wizard/veilrender.dm +++ b/code/game/gamemodes/wizard/artifact.dm @@ -1,3 +1,5 @@ +// Veil render // + /obj/item/weapon/veilrender name = "veil render" desc = "A wicked curved blade of alien origin, recovered from the ruins of a vast city." @@ -37,3 +39,22 @@ else user << "\red The unearthly energies that powered the blade are now dormant" +// Scrying orb // + +/obj/item/weapon/scrying + name = "scrying orb" + desc = "An incandescent orb of otherworldly energy, staring into it gives you vision beyond mortal means." + icon = 'icons/obj/projectiles.dmi' + icon_state = "bluespace" + throw_speed = 3 + throw_range = 7 + throwforce = 10 + damtype = BURN + force = 10 + hitsound = 'sound/items/welder2.ogg' + +/obj/item/weapon/scrying/attack_self(mob/user as mob) + user << "You can see... everything!" + visible_message("[usr] stares into [src], their eyes glazing over.") + user.ghostize(1) + return \ No newline at end of file diff --git a/code/game/gamemodes/wizard/spellbook.dm b/code/game/gamemodes/wizard/spellbook.dm index cd70a392de..20f762c0ba 100644 --- a/code/game/gamemodes/wizard/spellbook.dm +++ b/code/game/gamemodes/wizard/spellbook.dm @@ -55,6 +55,8 @@ dat += "
" dat += "Staff of Animation
" dat += "
" + dat += "Scrying Orb
" + dat += "
" if(op) dat += "Re-memorize Spells
" user << browse(dat, "window=radio") @@ -188,6 +190,17 @@ new /obj/item/weapon/gun/energy/staff/animate(get_turf(H)) temp = "An artefact that spits bolts of life-force which causes objects which are hit by it to animate and come to life! This magic doesn't affect machines." max_uses-- + if("scrying") + feedback_add_details("wizard_spell_learned","SO") //please do not change the abbreviation to keep data processing consistent. Add a unique id to any new spells + new /obj/item/weapon/scrying(get_turf(H)) + if (!(XRAY in H.mutations)) + H.mutations.Add(XRAY) + H.sight |= (SEE_MOBS|SEE_OBJS|SEE_TURFS) + H.see_in_dark = 8 + H.see_invisible = SEE_INVISIBLE_LEVEL_TWO + H << "The walls suddenly disappear." + temp = "You have purchased a scrying orb, and gained x-ray vision." + max_uses-- else if(href_list["temp"]) temp = null diff --git a/code/game/machinery/computer/HolodeckControl.dm b/code/game/machinery/computer/HolodeckControl.dm index f4a80c0a41..5887e0bc32 100644 --- a/code/game/machinery/computer/HolodeckControl.dm +++ b/code/game/machinery/computer/HolodeckControl.dm @@ -1,3 +1,20 @@ +var/global/list/holodeck_programs = list( + "emptycourt" = /area/holodeck/source_emptycourt, \ + "boxingcourt" = /area/holodeck/source_boxingcourt, \ + "basketball" = /area/holodeck/source_basketball, \ + "thunderdomecourt" = /area/holodeck/source_thunderdomecourt, \ + "beach" = /area/holodeck/source_beach, \ + "desert" = /area/holodeck/source_desert, \ + "space" = /area/holodeck/source_space, \ + "picnicarea" = /area/holodeck/source_picnicarea, \ + "snowfield" = /area/holodeck/source_snowfield, \ + "theatre" = /area/holodeck/source_theatre, \ + "meetinghall" = /area/holodeck/source_meetinghall, \ + "burntest" = /area/holodeck/source_burntest, \ + "wildlifecarp" = /area/holodeck/source_wildlife, \ + "turnoff" = /area/holodeck/source_plating \ + ) + /obj/machinery/computer/HolodeckControl name = "Holodeck Control Computer" desc = "A computer used to control a nearby holodeck." @@ -8,7 +25,20 @@ var/list/holographic_items = list() var/damaged = 0 var/last_change = 0 - + var/list/supported_programs = list( \ + "Empty Court" = "emptycourt", \ + "Boxing Court"="boxingcourt", \ + "Basketball Court" = "basketball", \ + "Thunderdome Court" = "thunderdomecourt", \ + "Beach" = "beach", \ + "Desert" = "desert", \ + "Space" = "space", \ + "Picnic Area" = "picnicarea", \ + "Snow Field" = "snowfield", \ + "Theatre" = "theatre", \ + "Meeting Hall" = "meetinghall" \ + ) + var/list/restricted_programs = list("Atmospheric Burn Simulation" = "burntest", "ildlife Simulation" = "wildlifecarp") attack_ai(var/mob/user as mob) return src.attack_hand(user) @@ -23,45 +53,31 @@ user.set_machine(src) var/dat - dat += "Holodeck Control System
" dat += "
Current Loaded Programs:
" - - dat += "((Empty Court))
" - dat += "((Boxing Court))
" - dat += "((Basketball Court))
" - dat += "((Thunderdome Court))
" - dat += "((Beach))
" - dat += "((Desert))
" - dat += "((Space))
" - dat += "((Picnic Area))
" - dat += "((Snow Field))
" - dat += "((Theatre))
" - dat += "((Meeting Hall))
" -// dat += "((Shutdown System))
" + for(var/prog in supported_programs) + dat += "(([prog]))
" dat += "Please ensure that only holographic weapons are used in the holodeck if a combat simulation has been loaded.
" - if(emagged) - dat += "(Begin Atmospheric Burn Simulation)
" - dat += "Ensure the holodeck is empty before testing.
" - dat += "
" - dat += "(Begin Wildlife Simulation)
" - dat += "Ensure the holodeck is empty before testing.
" - dat += "
" - if(issilicon(user)) + if(issilicon(user)) + if(emagged) dat += "(Re-Enable Safety Protocols?)
" + else + dat += "(Override Safety Protocols?)
" + + if(emagged) + for(var/prog in restricted_programs) + dat += "(Begin [prog])
" + dat += "Ensure the holodeck is empty before testing.
" + dat += "
" dat += "Safety Protocols are DISABLED
" else - if(issilicon(user)) - dat += "(Override Safety Protocols?)
" - dat += "
" dat += "Safety Protocols are ENABLED
" user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") - return @@ -71,77 +87,12 @@ if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.set_machine(src) - if(href_list["emptycourt"]) - target = locate(/area/holodeck/source_emptycourt) - if(target) - loadProgram(target) - - else if(href_list["boxingcourt"]) - target = locate(/area/holodeck/source_boxingcourt) - if(target) - loadProgram(target) - - else if(href_list["basketball"]) - target = locate(/area/holodeck/source_basketball) - if(target) - loadProgram(target) - - else if(href_list["thunderdomecourt"]) - target = locate(/area/holodeck/source_thunderdomecourt) - if(target) - loadProgram(target) - - else if(href_list["beach"]) - target = locate(/area/holodeck/source_beach) - if(target) - loadProgram(target) - - else if(href_list["desert"]) - target = locate(/area/holodeck/source_desert) - if(target) - loadProgram(target) - - else if(href_list["space"]) - target = locate(/area/holodeck/source_space) - if(target) - loadProgram(target) - - else if(href_list["picnicarea"]) - target = locate(/area/holodeck/source_picnicarea) - if(target) - loadProgram(target) - - else if(href_list["snowfield"]) - target = locate(/area/holodeck/source_snowfield) - if(target) - loadProgram(target) - - else if(href_list["theatre"]) - target = locate(/area/holodeck/source_theatre) - if(target) - loadProgram(target) - - else if(href_list["meetinghall"]) - target = locate(/area/holodeck/source_meetinghall) - if(target) - loadProgram(target) - - else if(href_list["turnoff"]) - target = locate(/area/holodeck/source_plating) - if(target) - loadProgram(target) - - else if(href_list["burntest"]) - if(!emagged) return - target = locate(/area/holodeck/source_burntest) - if(target) - loadProgram(target) - - else if(href_list["wildlifecarp"]) - if(!emagged) return - target = locate(/area/holodeck/source_wildlife) - if(target) - loadProgram(target) + if(href_list["program"]) + var/prog = href_list["program"] + if(prog in holodeck_programs) + target = locate(holodeck_programs[prog]) + if(target) + loadProgram(target) else if(href_list["AIoverride"]) if(!issilicon(usr)) return @@ -158,38 +109,7 @@ return - /obj/machinery/computer/HolodeckControl/attackby(var/obj/item/weapon/D as obj, var/mob/user as mob) -//Warning, uncommenting this can have concequences. For example, deconstructing the computer may cause holographic eswords to never derez - -/* if(istype(D, /obj/item/weapon/screwdriver)) - playsound(src.loc, 'sound/items/Screwdriver.ogg', 50, 1) - if(do_after(user, 20)) - if (src.stat & BROKEN) - user << "\blue The broken glass falls out." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - new /obj/item/weapon/shard( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 3 - A.icon_state = "3" - A.anchored = 1 - del(src) - else - user << "\blue You disconnect the monitor." - var/obj/structure/computerframe/A = new /obj/structure/computerframe( src.loc ) - var/obj/item/weapon/circuitboard/comm_traffic/M = new /obj/item/weapon/circuitboard/comm_traffic( A ) - for (var/obj/C in src) - C.loc = src.loc - A.circuit = M - A.state = 4 - A.icon_state = "4" - A.anchored = 1 - del(src) - -*/ if(istype(D, /obj/item/weapon/card/emag) && !emagged) playsound(src.loc, 'sound/effects/sparks4.ogg', 75, 1) emagged = 1 @@ -447,7 +367,7 @@ if(isrobot(user)) return - + ..() /obj/structure/table/holotable/wood diff --git a/code/game/machinery/status_display.dm b/code/game/machinery/status_display.dm index 7407a55e31..451cb24030 100644 --- a/code/game/machinery/status_display.dm +++ b/code/game/machinery/status_display.dm @@ -118,15 +118,17 @@ update_display(line1, line2) return 1 if(STATUS_DISPLAY_TIME) - update_display("TIME", worldtime2text()) + message1 = "TIME" + message2 = worldtime2text() + update_display(message1, message2) + return 1 return 0 /obj/machinery/status_display/examine() set src in view() . = ..() - switch(mode) - if(STATUS_DISPLAY_TRANSFER_SHUTTLE_TIME,2) - usr << "The display says:
\t[message1]
\t[message2]" + if(mode != STATUS_DISPLAY_BLANK && mode != STATUS_DISPLAY_ALERT) + usr << "The display says:
\t[sanitize(message1)]
\t[sanitize(message2)]" /obj/machinery/status_display/proc/set_message(m1, m2) if(m1) diff --git a/code/game/machinery/supply_display.dm b/code/game/machinery/supply_display.dm index e9a5065907..aacd770d79 100644 --- a/code/game/machinery/supply_display.dm +++ b/code/game/machinery/supply_display.dm @@ -27,12 +27,6 @@ return 1 return 0 -/obj/machinery/status_display/supply_display/examine() - if(mode == STATUS_DISPLAY_CUSTOM) - usr << "The display says:
\t[message1]
\t[message2]" - else - ..() - /obj/machinery/status_display/supply_display/receive_signal/(datum/signal/signal) if(signal.data["command"] == "supply") mode = STATUS_DISPLAY_CUSTOM diff --git a/code/game/objects/structures/curtains.dm b/code/game/objects/structures/curtains.dm new file mode 100644 index 0000000000..6e3fa6e6ae --- /dev/null +++ b/code/game/objects/structures/curtains.dm @@ -0,0 +1,37 @@ +/obj/structure/curtain + icon = 'icons/obj/curtain.dmi' + name = "curtain" + icon_state = "closed" + layer = MOB_LAYER + 0.1 + opacity = 1 + density = 0 + +/obj/structure/curtain/bullet_act(obj/item/projectile/P, def_zone) + if(!P.nodamage) + visible_message("[P] tears [src] down!") + del(src) + else + ..(P, def_zone) + +/obj/structure/curtain/attack_hand(mob/user) + playsound(get_turf(loc), "rustle", 15, 1, -5) + toggle() + ..() + +/obj/structure/curtain/proc/toggle() + opacity = !opacity + if(opacity) + icon_state = "closed" + layer = MOB_LAYER + 0.1 + else + icon_state = "open" + layer = OBJ_LAYER + +/obj/structure/curtain/black + name = "black curtain" + color = "#222222" + +/obj/structure/curtain/medical + name = "plastic curtain" + color = "#B8F5E3" + alpha = 200 \ No newline at end of file diff --git a/code/modules/detectivework/forensics.dm b/code/modules/detectivework/forensics.dm index d04fe83f46..2610a5c24a 100644 --- a/code/modules/detectivework/forensics.dm +++ b/code/modules/detectivework/forensics.dm @@ -31,7 +31,7 @@ atom/proc/add_fibers(mob/living/carbon/human/M) if(prob(15*item_multiplier) && !(fibertext in suit_fibers)) suit_fibers += fibertext - if(M.gloves && (M.w_uniform.body_parts_covered & ~suit_coverage)) + if(M.gloves && (M.gloves.body_parts_covered & ~suit_coverage)) fibertext = "Material from a pair of [M.gloves.name]." if(prob(20*item_multiplier) && !(fibertext in suit_fibers)) suit_fibers += "Material from a pair of [M.gloves.name]." diff --git a/html/changelog.html b/html/changelog.html index 787817c2df..4553e8a61c 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -124,6 +124,24 @@ should be listed in the changelog upon commit though. Thanks. --> +

PsiOmegaDelta updated:

+ +

Kelenius updated:

+ + + +

5 August 2014

HarpyEagle updated:

diff --git a/icons/obj/curtain.dmi b/icons/obj/curtain.dmi new file mode 100644 index 0000000000..69b7de1dc0 Binary files /dev/null and b/icons/obj/curtain.dmi differ