From 2fe167c453a00ce46be965bac24877b92f18e6a7 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 27 Aug 2014 02:33:14 +0400 Subject: [PATCH 1/7] Added curatins. Opaque non-dense structures. --- baystation12.dme | 1 + code/game/objects/structures/curtains.dm | 37 +++++++++++++++++++++++ icons/obj/curtain.dmi | Bin 0 -> 768 bytes 3 files changed, 38 insertions(+) create mode 100644 code/game/objects/structures/curtains.dm create mode 100644 icons/obj/curtain.dmi diff --git a/baystation12.dme b/baystation12.dme index 97d8a7c200..c7f2268041 100644 --- a/baystation12.dme +++ b/baystation12.dme @@ -597,6 +597,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/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/icons/obj/curtain.dmi b/icons/obj/curtain.dmi new file mode 100644 index 0000000000000000000000000000000000000000..69b7de1dc06fde30dda412d91bfab05aa25037ad GIT binary patch literal 768 zcmV+b1ONPqP)V=-0C=2JR&a84_w-Y6@%7{?OD!tS%+FJ>RWQ*r;NmRLOex7wuvIWN;^NFm z%}mcIfpCgT5=&AQY!#G}bMlK*QJp@xj55`5_3}_Y`C)gg48@*ij);x z{ah4Wd_B1U8Ji^4eZE+v0006*Nklc#16n$#F2cQ85_<)a4lt^*{Zk=pR zS#*OAZGj|*NOB8n=_Gs6kb&@$&34qBp%Bml)(HZrgF~81+{O}Vizxi2&oA-u>xuu9 zqJq(AR7O#RJkOyZrNoxL?*Ps%`U8OWoA;<|^VtH!a1fvY#>u2SJv#va2q8d3h~v0o z2M>==B>?ab?{#p$m&d5%bJ4%o{iWNc?FxV6@7(`fJ_pv*H`n#K=pT01?XbHFGWpS| z|D+obetfEoXO7i5THd{ynl*eIQ=kqfuucKhCR(@Mq`+#*AIbRniooYjJ;ZU0cTI@@ zCmaN5JAk&~r2uA~*fpn@0x0zR{YJ&F4u`h_NGUN+CS}tV004&JAQ&f;Qf;a>!CL|L zg@XWX2k;V66z!GUI{^S7%d)+3y4h@7BF}SVSq34*PL@D(93ezS3~y#YQ4}B|ZQFbU zm>7nGU_M)*C<*`o5osInNPxEBr2wwpzJi(so8YAYr)MV^CzH|@pLsI$5?%_hPk18$ zV@$6AjIo{Y1FMz5o0Byr70T^RQ z(-gq!M}}=3Q28%}005+E`l`TsB>?BVvL$v2wFTy!SNz@xu#1P@W-M<6XbYYBY@u_+ z{2{re?-9VcMSqxE)PJ4bxq|uus}Ows@~v@^QHPGUL0w*5=-}qF1um~Hw5`Tz!mDCa yh4AM37G_brxxPg(olb4zx58Tj+I|(j#s3F(fQ{b4Eegs20000 Date: Wed, 27 Aug 2014 03:39:31 +0400 Subject: [PATCH 2/7] Cleaned up holodeck controller a little. Now it uses global list of holdeck programs available instead of hardcoding them into interface. Console can be set to have only some of those programs. --- .../machinery/computer/HolodeckControl.dm | 180 +++++------------- 1 file changed, 50 insertions(+), 130 deletions(-) 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 From eab2ef935bca74ffc4e7ffad0c018b2ba07a4ee8 Mon Sep 17 00:00:00 2001 From: Chinsky Date: Wed, 27 Aug 2014 03:41:11 +0400 Subject: [PATCH 3/7] Fixed copypaste derp resulting in runtime when you are naked sans gloves. --- code/modules/detectivework/forensics.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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]." From 7ceddc39fb2956777b0a63f979e00ee308760b17 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Wed, 27 Aug 2014 10:09:56 +0400 Subject: [PATCH 4/7] Adds a scrying orb for wizards --- baystation12.dme | 2 +- .../wizard/{veilrender.dm => artifact.dm} | 21 +++++++++++++++++++ code/game/gamemodes/wizard/spellbook.dm | 13 ++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) rename code/game/gamemodes/wizard/{veilrender.dm => artifact.dm} (60%) diff --git a/baystation12.dme b/baystation12.dme index 677d4ed90c..3e7c21d7b3 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" 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 From 2fa014d74b3d2adbb92bcd6ea64ffa302401dea6 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 27 Aug 2014 13:44:42 +0200 Subject: [PATCH 5/7] Improves status display examination feedback. Ensures output is properly sanitized. --- code/game/machinery/status_display.dm | 10 ++++++---- code/game/machinery/supply_display.dm | 6 ------ 2 files changed, 6 insertions(+), 10 deletions(-) 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 From 22ad867f054483537ef49959817b7da67f91fbd4 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 27 Aug 2014 14:08:15 +0200 Subject: [PATCH 6/7] A list of features created since the my last changelog addition. --- html/changelog.html | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/html/changelog.html b/html/changelog.html index 0800ac3b89..af7c6affcf 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -113,6 +113,22 @@ should be listed in the changelog upon commit though. Thanks. --> +
+

27 August 2014

+

PsiOmegaDelta updated:

+
    +
  • AI can now make priority announcements.
  • +
  • PDAs display the station time upon examination.
  • +
  • Status displays can now also show the station time.
  • +
  • Security HUDs now have improved handling of alt-titles.
  • +
  • Crew record photos can now be updated through security consoles.
  • +
  • pAI settings can now be configured from the character setup screen.
  • +
  • Pipes can now be placed by clicking the floor, similar to power cables.
  • +
  • Mechas and cargo trains can no longer enter the transfer shuttle, Odysseys with patients excepted.
  • +
+
+ +

5 August 2014

HarpyEagle updated:

From cab21fe64977e9d2ecbbedc0e782aec4fd309524 Mon Sep 17 00:00:00 2001 From: Kelenius Date: Thu, 28 Aug 2014 18:14:11 +0400 Subject: [PATCH 7/7] Scrying orb changelog --- html/changelog.html | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/html/changelog.html b/html/changelog.html index af7c6affcf..bf88b341d6 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -126,6 +126,10 @@ should be listed in the changelog upon commit though. Thanks. -->
  • Pipes can now be placed by clicking the floor, similar to power cables.
  • Mechas and cargo trains can no longer enter the transfer shuttle, Odysseys with patients excepted.
  • +

    Kelenius updated:

    +
      +
    • Wizards now use a new item: scrying orb. It grants x-ray vision upon purchase, and can be used to temporary leave your body as a ghost.
    • +