From 5f28c7cfadb43436f24ccbc8b09ecfb51c1f2b5a Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Thu, 22 Oct 2015 13:56:05 +0200 Subject: [PATCH 1/4] Police tape rewrite --- code/game/objects/items/weapons/policetape.dm | 211 +++++++++++++----- icons/policetape.dmi | Bin 2510 -> 3566 bytes 2 files changed, 159 insertions(+), 52 deletions(-) diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index 50be738ecce..cdb87b4d84f 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -18,6 +18,7 @@ var/list/tape_roll_applications = list() anchored = 1 var/lifted = 0 var/crumpled = 0 + var/tape_dir = 0 var/icon_base /obj/item/tape/New() @@ -32,7 +33,7 @@ var/list/tape_roll_applications = list() /obj/item/taperoll/police name = "police tape" desc = "A roll of police tape used to block off crime scenes from the public." - icon_state = "police_start" + icon_state = "police" tape_type = /obj/item/tape/police icon_base = "police" @@ -45,7 +46,7 @@ var/list/tape_roll_applications = list() /obj/item/taperoll/engineering name = "engineering tape" desc = "A roll of engineering tape used to block off working areas from the public." - icon_state = "engineering_start" + icon_state = "engineering" tape_type = /obj/item/tape/engineering icon_base = "engineering" @@ -55,58 +56,146 @@ var/list/tape_roll_applications = list() req_one_access = list(access_engine,access_atmospherics) icon_base = "engineering" +/obj/item/taperoll/atmos + name = "atmospherics tape" + desc = "A roll of atmospherics tape used to block off working areas from the public." + icon_state = "atmos" + tape_type = /obj/item/tape/atmos + icon_base = "atmos" + +/obj/item/tape/atmos + name = "atmospherics tape" + desc = "A length of atmospherics tape. Better not cross it." + req_one_access = list(access_engine,access_atmospherics) + icon_base = "atmos" + +/obj/item/taperoll/update_icon() + overlays.Cut() + if(ismob(loc)) + if(!start) + overlays += "start" + else + overlays += "stop" + +/obj/item/taperoll/dropped(mob/user) + ..() + update_icon() + +/obj/item/taperoll/pickup(mob/user) + ..() + update_icon() + /obj/item/taperoll/attack_self(mob/user as mob) - if(icon_state == "[icon_base]_start") + if(!start) start = get_turf(src) usr << "You place the first end of \the [src]." - icon_state = "[icon_base]_stop" + update_icon() else - icon_state = "[icon_base]_start" end = get_turf(src) if(start.y != end.y && start.x != end.x || start.z != end.z) + start = null + update_icon() usr << "\The [src] can only be laid horizontally or vertically." return + if(start == end) + // spread tape in all directions, provided there is a wall/window + var/turf/T + var/possible_dirs = 0 + for(var/dir in cardinal) + T = get_step(start, dir) + if(T && T.density) + possible_dirs += dir + else + for(var/obj/structure/window/W in T) + if(W.is_fulltile() || W.dir == reverse_dir[dir]) + possible_dirs += dir + if(!possible_dirs) + start = null + update_icon() + usr << "You can't place \the [src] here." + return + if(possible_dirs & (NORTH|SOUTH)) + var/obj/item/tape/TP = new tape_type(start) + for(var/dir in list(NORTH, SOUTH)) + if (possible_dirs & dir) + TP.tape_dir += dir + TP.icon_state = "[TP.icon_base]_[TP.tape_dir]" + if(possible_dirs & (EAST|WEST)) + var/obj/item/tape/TP = new tape_type(start) + for(var/dir in list(EAST, WEST)) + if (possible_dirs & dir) + TP.tape_dir += dir + TP.icon_state = "[TP.icon_base]_[TP.tape_dir]" + start = null + update_icon() + usr << "You finish placing \the [src]." + return + var/turf/cur = start - var/dir - if (start.x == end.x) - var/d = end.y-start.y - if(d) d = d/abs(d) - end = get_turf(locate(end.x,end.y+d,end.z)) - dir = "v" - else - var/d = end.x-start.x - if(d) d = d/abs(d) - end = get_turf(locate(end.x+d,end.y,end.z)) - dir = "h" + var/orientation = get_dir(start, end) + var/dir = 0 + switch(orientation) + if(NORTH, SOUTH) dir = NORTH|SOUTH // North-South taping + if(EAST, WEST) dir = EAST|WEST // East-West taping var/can_place = 1 - while (cur!=end && can_place) + while (can_place) if(cur.density == 1) can_place = 0 else if (istype(cur, /turf/space)) can_place = 0 else for(var/obj/O in cur) - if(!istype(O, /obj/item/tape) && O.density) + if(O.density) can_place = 0 break + if(cur == end) + break cur = get_step_towards(cur,end) if (!can_place) + start = null + update_icon() usr << "You can't run \the [src] through that!" return cur = start - var/tapetest = 0 - while (cur!=end) - for(var/obj/item/tape/Ptest in cur) - if(Ptest.icon_state == "[Ptest.icon_base]_[dir]") + var/tapetest + var/tape_dir + while (1) + tapetest = 0 + tape_dir = dir + if(cur == start) + var/turf/T = get_step(start, reverse_dir[orientation]) + if(T && !T.density) + tape_dir = orientation + for(var/obj/structure/window/W in T) + if(W.is_fulltile() || W.dir == orientation) + tape_dir = dir + else if(cur == end) + var/turf/T = get_step(end, orientation) + if(T && !T.density) + tape_dir = reverse_dir[orientation] + for(var/obj/structure/window/W in T) + if(W.is_fulltile() || W.dir == reverse_dir[orientation]) + tape_dir = dir + for(var/obj/item/tape/T in cur) + if((T.tape_dir == tape_dir) && (T.icon_base == icon_base)) tapetest = 1 - if(tapetest != 1) - var/obj/item/tape/P = new tape_type(cur) - P.icon_state = "[P.icon_base]_[dir]" + break + if(!tapetest) + var/obj/item/tape/T = new tape_type(cur) + T.icon_state = "[T.icon_base]_[tape_dir]" + T.tape_dir = tape_dir + if(tape_dir & SOUTH) + T.layer += 0.1 // Must always show above other tapes + if(cur == end) + break cur = get_step_towards(cur,end) + start = null + update_icon() usr << "You finish placing \the [src]." + return /obj/item/taperoll/afterattack(var/atom/A, mob/user as mob, proximity) if(!proximity) @@ -149,6 +238,8 @@ var/list/tape_roll_applications = list() add_fingerprint(M) if (!allowed(M)) //only select few learn art of not crumpling the tape M << "You are not supposed to go past [src]..." + if(M.a_intent == I_HELP) + return 0 crumple() return ..(mover) @@ -158,13 +249,45 @@ var/list/tape_roll_applications = list() /obj/item/tape/attack_hand(mob/user as mob) if (user.a_intent == I_HELP && src.allowed(user)) user.show_viewers("\The [user] lifts \the [src], allowing passage.") - crumple() - lifted = 1 - spawn(200) - lifted = 0 + for(var/obj/item/tape/T in gettapeline()) + T.lift(100) //~10 seconds else breaktape(null, user) +/obj/item/tape/proc/lift(time) + lifted = 1 + layer = 8 + spawn(time) + lifted = 0 + layer = initial(layer) + +// Returns a list of all tape objects connected to src, including itself. +/obj/item/tape/proc/gettapeline() + var/list/dirs = list() + if(tape_dir & NORTH) + dirs += NORTH + if(tape_dir & SOUTH) + dirs += SOUTH + if(tape_dir & WEST) + dirs += WEST + if(tape_dir & EAST) + dirs += EAST + + var/list/obj/item/tape/tapeline = list() + for (var/obj/item/tape/T in get_turf(src)) + tapeline += T + for(var/dir in dirs) + var/turf/cur = get_step(src, dir) + var/not_found = 0 + while (!not_found) + not_found = 1 + for (var/obj/item/tape/T in cur) + tapeline += T + not_found = 0 + cur = get_step(cur, dir) + return tapeline + + /obj/item/tape/proc/breaktape(obj/item/weapon/W as obj, mob/user as mob) @@ -173,27 +296,11 @@ var/list/tape_roll_applications = list() return user.show_viewers("\The [user] breaks \the [src]!") - var/dir[2] - var/icon_dir = src.icon_state - if(icon_dir == "[src.icon_base]_h") - dir[1] = EAST - dir[2] = WEST - if(icon_dir == "[src.icon_base]_v") - dir[1] = NORTH - dir[2] = SOUTH - - for(var/i=1;i<3;i++) - var/N = 0 - var/turf/cur = get_step(src,dir[i]) - while(N != 1) - N = 1 - for (var/obj/item/tape/P in cur) - if(P.icon_state == icon_dir) - N = 0 - qdel(P) - cur = get_step(cur,dir[i]) - - qdel(src) - return - + for (var/obj/item/tape/T in gettapeline()) + if(T == src) + continue + if(T.tape_dir & get_dir(T, src)) + qdel(T) + qdel(src) //TODO: Dropping a trash item holding fibers/fingerprints of all broken tape parts + return \ No newline at end of file diff --git a/icons/policetape.dmi b/icons/policetape.dmi index 841878f73fc671312f5f9cfef852b08a298f5ded..c28822a7ca088982337d3960f78189c1332ab87f 100644 GIT binary patch literal 3566 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 literal 2510 zcmV;<2{HDGP)005u}0{{R3yb+fl0000mP)t-sz`($5 z&I`^93r|k~zrO(C;Q&E6BUe`o!omyU;tK!(0P3j||I9O8UGpz5d%(cJ6A%+i00001 zbW%=J06^y0W&i*H(0Wu@bVOxyV{&P5bZKvH004NLm6S~i!ypia*Ln&`_N9N@Zc0MQ zqPaqlWEuw=4JzsNE478Bg*w^I$oEFyQ_RJ=yi~O)t`(oaIy73G#BsCb?17zEp*ie1 zQ-Hnlv2k8{2xT^!JGRh--ujHQ4y_BzJI-!a4iM{K*o;)RGsdoAo0du|DmalR(l?(7 zDCizFfJNOC^Ia+kA#9@FB#Pr59SMUk`d{iJH5k4Sp6@tva@^`Aw0b8 zLBETL@wr4Y$H80t-PXUp!Ya1B4kBYepN|CrQ$o=X(msg7%N&J9^Y{HHYZ1U30lFm7 zM87WwC!2?025rsXgQIu$a9{AC_mAMA_ecP77K(mfl?3q&)oh|M=Sjx+A1h$L0em1~ zzXE=cz>;=xk%)d8&J0D0WLy$&@sq@fKdZ0Pe@|e=QBd@Uq79TJBWddXu_p8!nq?yP@9;AQj-SN!dbsn*nQ zI?;cFDKly3FJ1{0T4tt={`?2H!GxLi>c>31k%&QXQOdbb4m0&lsZw)xn5l10=B)c` z!_0;u@BMBL{vXYL+zjmS9j*TPM=tOv0<_HeHT#bMD6QKMBBtk;^&cw(TIT$+{$pK0 z%K?`4A7enb3MeWP=KQk$V|~Efq`cUw0M^6dFVHfA)(%6?Z_F@c?|#Kak~`n6xW>WR zD7?Vkn9-jhY*Hk_=dV6ki4f@qlO=Q)D2$+dz6Cm`u|#Nq&S{(_Y#2coK*+!l!*qQ; z4v>K%h5{mUfzW|qyAtt2UIqj{j36F{=vBan5yZp56EaDT{X1x&$7cPL(WjA$1i%J6 zj-v&EQ$he6jPn~1SR~{C5BBfEJLCZe1niPTB)|ayJ1G$vz{kUG`*&9A-{JXM1Q)Q ztvCuIp~;VecMR0b0J9;?3^45hecokn#H0SBv8I4(fAPQ?xh-G?gJomkl)p7#*<_)! zh3Bj9Ul_seuSd|j2sU1ml+UOeuSxzoU|$I6&TlJmUzmf1=j#{v>jQPE*|BfDaxXMD zW2p{UwTo^0VWH#=%t^r4=68aOOt^4zRBd_f}{Bt!0HiP_Wz-b zc=d6och(;RR*xX|HT~WuFJl}W&94D!Tc6U7WbfHMMiYa;e=|A)hj z{XhI`p6S_Wd!HMqm0?Dj5yyaW7RG=}7A}0VhnwjT_+mgMf^M7^su%_tAhe`yvj1;F zLPOdvMUvIGPXW~kO2dpNwBjg;geDzh>K93Vpk@Y`4dL|xW&zZTM84Hc$tR8o_5FW} z6-BVh{y)VI0Oo&Np|u^DEW|s+?=>B;|1w~&0`}jP_~NSWHoLZ}yV0(-K5n#Yt&bb+ zTI=IR`|lTt`UYAOf7|rd#Fvdp;=lD<^h^>LwK}RBlf=`y!u$iq6v^~@WeD#MuUnJE zfUp)8WcEvxTevo6labyyL`G)pFGLIT=Ekq;Oe!9LX;WlYD&xPPVx+FYr-Z2HTG5g-YGA0 z_24c2JD^!wJN`l1zw1&!kai|YFLP~aPxbF$7>ohIoU9&F9<&Ppk;ESA-@$ZdN^%g3 z7Apg*xn>wi-_8bQNoclz$3)OKv_M{jB$-2ER Date: Thu, 22 Oct 2015 13:59:44 +0200 Subject: [PATCH 2/4] Atmos personal locker spawn with atmos tape roll Conflicts: code/game/objects/structures/crates_lockers/closets/secure/engineering.dm --- .../structures/crates_lockers/closets/secure/engineering.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm index a3e3ad86181..bd2b216888b 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/engineering.dm @@ -160,6 +160,6 @@ new /obj/item/clothing/suit/storage/hazardvest(src) new /obj/item/clothing/mask/gas(src) new /obj/item/weapon/cartridge/atmos(src) - new /obj/item/taperoll/engineering(src) + new /obj/item/taperoll/atmos(src) new /obj/item/clothing/suit/storage/hooded/wintercoat/engineering/atmos(src) return From eb82b706f0f06c6c00209bb6ff4bdd001eea082d Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Thu, 22 Oct 2015 14:04:46 +0200 Subject: [PATCH 3/4] Updates Changelog --- html/changelogs/Hubblenaut-tape.yml | 41 +++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 html/changelogs/Hubblenaut-tape.yml diff --git a/html/changelogs/Hubblenaut-tape.yml b/html/changelogs/Hubblenaut-tape.yml new file mode 100644 index 00000000000..fa97c1a036c --- /dev/null +++ b/html/changelogs/Hubblenaut-tape.yml @@ -0,0 +1,41 @@ +################################ +# Example Changelog File +# +# Note: This file, and files beginning with ".", and files that don't end in ".yml" will not be read. If you change this file, you will look really dumb. +# +# Your changelog will be merged with a master changelog. (New stuff added only, and only on the date entry for the day it was merged.) +# When it is, any changes listed below will disappear. +# +# Valid Prefixes: +# bugfix +# wip (For works in progress) +# tweak +# soundadd +# sounddel +# rscadd (general adding of nice things) +# rscdel (general deleting of nice things) +# imageadd +# imagedel +# maptweak +# spellcheck (typo fixes) +# experiment +################################# + +# Your name. +author: Hubblenaut + +# Optional: Remove this file after generating master changelog. Useful for PR changelogs that won't get used again. +delete-after: True + +# Any changes you've made. See valid prefix list above. +# INDENT WITH TWO SPACES. NOT TABS. SPACES. +# SCREW THIS UP AND IT WON'T WORK. +# Also, all entries are changed into a single [] after a master changelog generation. Just remove the brackets when you add new entries. +# Please surround your changes in double quotes ("), as certain characters otherwise screws up compiling. The quotes will not show up in the changelog. +changes: + - rscadd: "Adds tape for atmospherics." + - tweak: "Tape graphics and algorithm changes. Looks a lot more appealing now." + - tweak: "Starting and ending tape on the same turf will connect it to all surrounding walls/windows." + - tweak: "Lifting a part of the tape will lift an entire tape section." + - tweak: "Mobs on help intent do stop for tape." + - bugfix: "Crumpled tape does not affect tape breaking behavior anymore." From 4c0548b534f8a33c05312ee04fe8ef6780c68e5b Mon Sep 17 00:00:00 2001 From: Hubblenaut Date: Thu, 10 Dec 2015 20:46:22 +0100 Subject: [PATCH 4/4] Adds directional client support for police tapes --- code/game/objects/items/weapons/policetape.dm | 21 ++++++++++++++---- icons/policetape.dmi | Bin 3566 -> 4486 bytes 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/objects/items/weapons/policetape.dm b/code/game/objects/items/weapons/policetape.dm index cdb87b4d84f..9d820f68925 100644 --- a/code/game/objects/items/weapons/policetape.dm +++ b/code/game/objects/items/weapons/policetape.dm @@ -21,6 +21,19 @@ var/list/tape_roll_applications = list() var/tape_dir = 0 var/icon_base +/obj/item/tape/update_icon() + //Possible directional bitflags: 0 (AIRLOCK), 1 (NORTH), 2 (SOUTH), 4 (EAST), 8 (WEST), 3 (VERTICAL), 12 (HORIZONTAL) + switch (tape_dir) + if(0) // AIRLOCK + icon_state = "[icon_base]_door_[crumpled]" + if(3) // VERTICAL + icon_state = "[icon_base]_v_[crumpled]" + if(12) // HORIZONTAL + icon_state = "[icon_base]_h_[crumpled]" + else // END POINT (1|2|4|8) + icon_state = "[icon_base]_dir_[crumpled]" + dir = tape_dir + /obj/item/tape/New() ..() if(!hazard_overlays) @@ -120,13 +133,13 @@ var/list/tape_roll_applications = list() for(var/dir in list(NORTH, SOUTH)) if (possible_dirs & dir) TP.tape_dir += dir - TP.icon_state = "[TP.icon_base]_[TP.tape_dir]" + TP.update_icon() if(possible_dirs & (EAST|WEST)) var/obj/item/tape/TP = new tape_type(start) for(var/dir in list(EAST, WEST)) if (possible_dirs & dir) TP.tape_dir += dir - TP.icon_state = "[TP.icon_base]_[TP.tape_dir]" + TP.update_icon() start = null update_icon() usr << "You finish placing \the [src]." @@ -185,8 +198,8 @@ var/list/tape_roll_applications = list() break if(!tapetest) var/obj/item/tape/T = new tape_type(cur) - T.icon_state = "[T.icon_base]_[tape_dir]" T.tape_dir = tape_dir + T.update_icon() if(tape_dir & SOUTH) T.layer += 0.1 // Must always show above other tapes if(cur == end) @@ -229,7 +242,7 @@ var/list/tape_roll_applications = list() /obj/item/tape/proc/crumple() if(!crumpled) crumpled = 1 - icon_state = "[icon_state]_c" + update_icon() name = "crumpled [name]" /obj/item/tape/CanPass(atom/movable/mover, turf/target, height=0, air_group=0) diff --git a/icons/policetape.dmi b/icons/policetape.dmi index c28822a7ca088982337d3960f78189c1332ab87f..03efe3aef22c20773d7cd2464f26c05de1f1176c 100644 GIT binary patch delta 4438 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