From dac8c34e78d2aa4d51eeb0bee13a274a045eba1e Mon Sep 17 00:00:00 2001 From: MrStonedOne Date: Fri, 14 Aug 2015 08:02:15 -0700 Subject: [PATCH 001/479] Sticky ban in game interface --- code/modules/admin/admin_verbs.dm | 3 +- code/modules/admin/stickyban.dm | 169 ++++++++++++++++++++++++++++++ code/modules/admin/topic.dm | 2 + tgstation.dme | 1 + 4 files changed, 174 insertions(+), 1 deletion(-) create mode 100644 code/modules/admin/stickyban.dm diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 249cd05528b..385f782d552 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -66,7 +66,8 @@ var/list/admin_verbs_ban = list( /client/proc/unban_panel, /client/proc/jobbans, /client/proc/unjobban_panel, - /client/proc/DB_ban_panel + /client/proc/DB_ban_panel, + /client/proc/stickybanpanel ) var/list/admin_verbs_sounds = list( /client/proc/play_local_sound, diff --git a/code/modules/admin/stickyban.dm b/code/modules/admin/stickyban.dm new file mode 100644 index 00000000000..383b7935f06 --- /dev/null +++ b/code/modules/admin/stickyban.dm @@ -0,0 +1,169 @@ +/datum/admins/proc/stickyban(action,data) + if(!check_rights(R_BAN)) + return + switch (action) + if ("show") + stickyban_show() + if ("add") + var/list/ban = list() + ban["admin"] = usr.key + ban["type"] = "sticky" + ban["reason"] = "(InGameBan)([usr.key])" //this will be display in dd only + var/ckey + if (data["ckey"]) + ckey = data["ckey"] + else + ckey = input(usr,"Ckey","Ckey","") as text|null + if (!ckey) + return + ckey = ckey(ckey) + if (ckey in world.GetConfig("ban")) + usr << "Can not add a stickyban: User already has a current sticky ban" + if (data["reason"]) + ban["message"] = data["reason"] + else + var/reason = input(usr,"Reason","Reason","Ban Evasion") as text|null + if (!reason) + return + ban["message"] = "[reason]" + + world.SetConfig("ban",ckey,list2params(ban)) + + log_admin("[key_name(usr)] has stickybanned [ckey].\nReason: [ban["message"]]") + message_admins("[key_name_admin(usr)] has stickybanned [ckey].\nReason: [ban["message"]]") + + if ("remove") + if (!data["ckey"]) + return + var/ckey = data["ckey"] + + if (!(ckey in world.GetConfig("ban"))) + alert("No sticky ban for [ckey] found!") + return + var/ban = params2list(world.GetConfig("ban",ckey)) + if (!is_stickyban_from_game(ban)) + alert("This user was stickybanned by the host, and can not be un-stickybanned from this panel") + return + if (alert("Are you sure you want to remove the sticky ban on [ckey]?","Are you sure","Yes","No") == "No") + return + + world.SetConfig("ban",ckey, null) + + log_admin("[key_name(usr)] removed [ckey]'s stickyban") + message_admins("[key_name_admin(usr)] removed [ckey]'s stickyban") + + if ("remove_alt") + if (!data["ckey"]) + return + var/ckey = data["ckey"] + if (!data["alt"]) + return + var/alt = ckey(data["alt"]) + if (!(ckey in world.GetConfig("ban"))) + alert("No sticky ban for [ckey] found!") + return + + if (alert("Are you sure you want to disassociate [alt] from [ckey]'s sticky ban? \nNote: Nothing stops byond from re-linking them","Are you sure","Yes","No") == "No") + return + + var/ban = params2list(world.GetConfig("ban",ckey)) + if (!is_stickyban_from_game(ban)) + alert("This user was stickybanned by the host, and can not be edited from this panel") + return + + var/found = 0 + + //we have to do it this way because byond keeps the case in its sticky ban matches WHY!!! + for (var/key in ban["keys"]) + if (ckey(key) == alt) + found = 1 + ban["keys"] -= key + break + + if (!found) + alert("[alt] is not linked to [ckey]'s sticky ban!") + return + + world.SetConfig("ban",ckey,list2params(ban)) + + log_admin("[key_name(usr)] has disassociated [alt] from [ckey]'s sticky ban") + message_admins("[key_name_admin(usr)] has disassociated [alt] from [ckey]'s sticky ban") + if ("edit") + if (!data["ckey"]) + return + var/ckey = data["ckey"] + + if (!(ckey in world.GetConfig("ban"))) + alert("No sticky ban for [ckey] found!") + return + var/ban = params2list(world.GetConfig("ban",ckey)) + if (!is_stickyban_from_game(ban)) + alert("This user was stickybanned by the host, and can not be edited from this panel") + return + var/oldreason = ban["message"] + var/reason = input(usr,"Reason","Reason","[ban["message"]]") as text|null + if (!reason || reason == oldreason) + return + //we have to do this again incase something changed while we waited for input + ban = params2list(world.GetConfig("ban",ckey)) + ban["message"] = "[reason]" + + world.SetConfig("ban",ckey,list2params(ban)) + + log_admin("[key_name(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]") + message_admins("[key_name_admin(usr)] has edited [ckey]'s sticky ban reason from [oldreason] to [reason]") + +/datum/admins/proc/stickyban_gethtml(ckey, ban) + . = "\[-\][ckey]
" + . += "[ban["message"]] \[Edit\]
" + if (!is_stickyban_from_game(ban)) + . += "HOST
" + if (ban["admin"]) + . += "[ban["admin"]]
" + else + . += "LEGACY
" + . += "Caught keys
\n
    " + for (var/key in ban["keys"]) + if (ckey(key) == ckey) + continue + . += "
  1. \[-\][key]
  2. " + . += "
\n" + +/datum/admins/proc/stickyban_show() + if(!check_rights(R_BAN)) + return + var/list/bans = world.GetConfig("ban") + var/banhtml = "" + for(var/ckey in bans) + var/ban = params2list(world.GetConfig("ban",ckey)) + if (banhtml != "") //no need to do a border above the first ban. + banhtml += "


\n" + banhtml += stickyban_gethtml(ckey,ban) + + var/html = {" + + Sticky Bans + + + All Sticky Bans: \[+\]
+ [banhtml] + + "} + usr << browse(html,"window=stickybans;size=700x400") + +//returns true if and only if the game added the sticky ban. +/proc/is_stickyban_from_game(ban) + if (!ban || !islist(ban)) + return 0 + if (ban["type"] != "sticky") + return 0 + if (copytext(ban["reason"],1,12) != "(InGameBan)") + return 0 + return 1 + +/client/proc/stickybanpanel() + set name = "Sticky Ban Panel" + set category = "Admin" + if (!holder) + return + holder.stickyban_show() \ No newline at end of file diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index b1ce38e14d7..1b4ba7bfef1 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -23,6 +23,8 @@ message_admins("[key_name_admin(usr)] Rejected [C.key]'s admin help. [C.key]'s Adminhelp verb has been returned to them") log_admin("[key_name(usr)] Rejected [C.key]'s admin help") + else if(href_list["stickyban"]) + stickyban(href_list["stickyban"],href_list) else if(href_list["makeAntag"]) if (!ticker.mode) diff --git a/tgstation.dme b/tgstation.dme index 81510c65d59..80d6264827a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -822,6 +822,7 @@ #include "code\modules\admin\player_notes.dm" #include "code\modules\admin\player_panel.dm" #include "code\modules\admin\secrets.dm" +#include "code\modules\admin\stickyban.dm" #include "code\modules\admin\topic.dm" #include "code\modules\admin\DB ban\functions.dm" #include "code\modules\admin\permissionverbs\permissionedit.dm" From ed39df47f7cf0e76c0f9592f1a3bedd0aa8adf9f Mon Sep 17 00:00:00 2001 From: phil235 Date: Sun, 23 Aug 2015 17:29:57 +0200 Subject: [PATCH 002/479] Fixes two runtimes in reagent reaction code (caused by my recent changes) Fixes timer device not showing its countdown overlay when not attached (sprite was removed by accident probably). Fixes timer/infrared beam/proximity sensor not being usable when freshly spawned because they weren't being processed. Fixes infrared beam runtime (when the device is deleted the beam itself isn't, causing runtimes when crossing it). --- code/modules/assembly/assembly.dm | 6 ----- code/modules/assembly/infrared.dm | 21 +++++++++++++---- code/modules/assembly/proximity.dm | 22 ++++++++++-------- code/modules/assembly/timer.dm | 22 +++++++++--------- code/modules/reagents/Chemistry-Reagents.dm | 2 +- .../Chemistry-Reagents/Toxin-Reagents.dm | 3 ++- icons/obj/assemblies/new_assemblies.dmi | Bin 10835 -> 10882 bytes 7 files changed, 42 insertions(+), 34 deletions(-) diff --git a/code/modules/assembly/assembly.dm b/code/modules/assembly/assembly.dm index 3a70880a7ec..0efdcf412ba 100644 --- a/code/modules/assembly/assembly.dm +++ b/code/modules/assembly/assembly.dm @@ -103,12 +103,6 @@ user << "\The [src] can now be attached!" return ..() - return - - -/obj/item/device/assembly/process() - SSobj.processing.Remove(src) - return /obj/item/device/assembly/examine(mob/user) diff --git a/code/modules/assembly/infrared.dm b/code/modules/assembly/infrared.dm index e470324cdf3..ca37fbcb036 100644 --- a/code/modules/assembly/infrared.dm +++ b/code/modules/assembly/infrared.dm @@ -10,6 +10,16 @@ var/obj/effect/beam/i_beam/first = null var/obj/effect/beam/i_beam/last = null + +/obj/item/device/assembly/infra/New() + ..() + SSobj.processing |= src + +/obj/item/device/assembly/infra/Destroy() + if(first) + qdel(first) + return ..() + /obj/item/device/assembly/infra/describe() return "The infrared trigger is [on?"on":"off"]." @@ -25,7 +35,8 @@ SSobj.processing |= src else on = 0 - if(first) qdel(first) + if(first) + qdel(first) SSobj.processing.Remove(src) update_icon() return secured @@ -45,7 +56,7 @@ if(!on) if(first) qdel(first) - return + return if(!secured) return if(first && last) @@ -96,7 +107,7 @@ /obj/item/device/assembly/infra/interact(mob/user)//TODO: change this this to the wire control panel if(is_secured(user)) user.set_machine(src) - var/dat = text("Infrared Laser\nStatus: []
\nVisibility: []
\n
", (on ? text("On", src) : text("Off", src)), (src.visible ? text("Visible", src) : text("Invisible", src))) + var/dat = "Infrared Laser\nStatus: [on ? "On" : "Off"]
\nVisibility: [visible ? "Visible" : "Invisible"]
\n
" dat += "

Refresh" dat += "

Close" user << browse(dat, "window=infra") @@ -105,7 +116,7 @@ /obj/item/device/assembly/infra/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=infra") onclose(usr, "infra") return @@ -127,7 +138,7 @@ set category = "Object" set src in usr - if(usr.stat || !usr.canmove || usr.restrained()) + if(usr.incapacitated()) return dir = turn(dir, 90) diff --git a/code/modules/assembly/proximity.dm b/code/modules/assembly/proximity.dm index 656e927716e..53990197caa 100644 --- a/code/modules/assembly/proximity.dm +++ b/code/modules/assembly/proximity.dm @@ -15,6 +15,11 @@ /obj/item/device/assembly/prox_sensor/proc/sense() + +/obj/item/device/assembly/prox_sensor/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/prox_sensor/describe() if(timing) return "The proximity sensor is arming." @@ -24,7 +29,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/prox_sensor/toggle_secure() @@ -55,13 +60,12 @@ /obj/item/device/assembly/prox_sensor/process() - if(timing && (time >= 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - toggle_scan() - time = 10 - return + if(time <= 0) + timing = 0 + toggle_scan() + time = initial(time) /obj/item/device/assembly/prox_sensor/dropped() @@ -113,7 +117,7 @@ /obj/item/device/assembly/prox_sensor/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=prox") onclose(usr, "prox") return @@ -137,5 +141,3 @@ if(usr) attack_self(usr) - - return diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 7760900ac56..4e1e0e213ac 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -10,6 +10,10 @@ var/time = 5 +/obj/item/device/assembly/timer/New() + ..() + SSobj.processing |= src + /obj/item/device/assembly/timer/describe() if(timing) return "The timer is counting down from [time]!" @@ -20,7 +24,7 @@ if(!..()) return 0//Cooldown check timing = !timing update_icon() - return 0 + return 1 /obj/item/device/assembly/timer/toggle_secure() @@ -42,17 +46,16 @@ cooldown = 2 spawn(10) process_cooldown() - return + update_icon() /obj/item/device/assembly/timer/process() - if(timing && (time > 0)) + if(timing) time-- - if(timing && time <= 0) - timing = 0 - timer_end() - time = initial(time) - return + if(time <= 0) + timing = 0 + timer_end() + time = initial(time) /obj/item/device/assembly/timer/update_icon() @@ -63,7 +66,6 @@ attached_overlays += "timer_timing" if(holder) holder.update_icon() - return /obj/item/device/assembly/timer/interact(mob/user)//TODO: Have this use the wires @@ -76,7 +78,6 @@ var/datum/browser/popup = new(user, "timer", name) popup.set_content(dat) popup.open() - return /obj/item/device/assembly/timer/Topic(href, href_list) @@ -107,4 +108,3 @@ if(usr) attack_self(usr) - return diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 7a58c099077..dad745e7936 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -43,7 +43,7 @@ if(method == VAPOR) //smoke, foam, spray if(M.reagents) var/modifier = Clamp((1 - touch_protection), 0, 1) - var/amount = round(volume*modifier, 0.1) + var/amount = round(reac_volume*modifier, 0.1) if(amount >= 1) M.reagents.add_reagent(self.id, amount) return 1 diff --git a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm index e13de807739..319b0e4a944 100644 --- a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm @@ -639,10 +639,11 @@ /datum/reagent/toxin/acid/reaction_turf(turf/T, reac_volume) if (!istype(T)) return + var/datum/reagent/toxin/acid/self = src src = null reac_volume = round(reac_volume,0.1) for(var/obj/O in T) - O.acid_act(acidpwr, reac_volume) + O.acid_act(self.acidpwr, reac_volume) /datum/reagent/toxin/acid/fluacid name = "Fluorosulfuric acid" diff --git a/icons/obj/assemblies/new_assemblies.dmi b/icons/obj/assemblies/new_assemblies.dmi index ae869fa90940c5c06bcef835a65a19a1bd4a1f58..660a99c185bae7cf64e11ed56a5a470eebe4657d 100644 GIT binary patch literal 10882 zcmb_?1yEeix8@z(A-HRh1ozAOnsia#)FKST+ZQ!$ET&m7{EIy+_1zkIi z;!)oT88lo9_14I@AHtN0b#W%4-s)c#t^$h()z*n3(q*XHaVEmWcr?KIM# z+(+q{QjImr!sMme$-zeG>4o#XS1EG;YNnf->i0;&+GiuTtv7vxGtd-a@2vRVv<)5c zU9@!xuC%&w6Z6f&P7Bvt=hmU|7f%VtZQd3&X~w*kuS}PO6>C`34EXssnw?zP|4j(tk?^?qv0$l+egNdK&?qa!BI0nPKHWFiqiyY=hf*-j5qcQi03t)&dYV{T2C&%d<9PDcJ*hN`fXNb$9B~W=b z@R{3&h(*19zQNsf&arO!dNaeOc|e{K9OW_blk2th^{kc_8h{OxnMYMRgun^qhJ##% z`0sy7-HgQqNw#_H8hpi9?SS7hBAAz|r*YT(O-r=i_F? zZp5d}do_3IrXF7wsalp&LZukmD3!y_zU8*>ZHW8&rPaDcQIcOa^IrtcGZRAgAos_b zOmiitcMk!Zl(RJGpKMsgFB9W98wXBrD_0e*`_$7f+t~McLVCm3m!<=*YzBXv^M*JWEYv`P^%c@hhuNF=>niiel$UA7 z7Kp&LJqVQHjX9hR?K|^N62|m{FT>4Ryg6mtN5~M=gTK8%WM>R zjO9?ta2fD7Apt`O)juj_gFKS0&-&+2|4)r!%KG|=OKDF!6+jQ*vsFvtu+UwZt+e_; z;7Is)<}jmbm5&FQ5*UB2hZYR^^5qNfi-*s#$^{FWQHnWQ*@dO0BuN}EegN&}Jm$U8 zG#0(ND8xb4IO=wGPk=55TsPStS=M5uMMajJoSexLK0=Byw75XM%Q6xkt@y`BOp1L0 zWGdiP0zjee>B$Koy*QH)qAadcmB#hrdk6(iXl#H@)hy4ulUD*lLZOKvwy&SdDrjUs^U`{|1WI9j_8jhieQlfnLTRmm$PNWAuAv_$xDows#cId_pp zc+SJdPztJ@L(7{%o0HWy<4;#T@wPy>fc?BxbDM}4w$IU(i#Wix+8%_0vfnVe)8Q}SiCiKXt^6vHq9})SYKHVw|sTg6y^fG?UHe7-{u{{1MfESjEp-8r}Sp^I0o{xP<+eGehFZv(c_H?UZ=8~PSZbH zP5k`%gE+S5pZ36yWyskoTaeMm0xBr>wZEk9x3y&T^-111Inf>+ZmHUmD98KUr-`_u zr3gFcE#ik^hs|p~fxNHqy>@HE|K08L?bBL(!G6L&F4#ze{{P!M|D(sF)jU-MMT=OA zz7&6Ax=~d0)WEeSIc&_2Lq z=o@dy(+FJ^<=^$3_%)eZrHpNd_hZ9Zk$;CVHl{pk=;=}XJ?zT(6-LPe(bw1KO&LOy zHlgbS2XKIS5#iCfUbXhkpCq#~td7+2dS)(eR#N=ZbA6nHQX^GH`ZoaJebelpPzLro z5|Wa}hqGck9DIHc`zpLtLdNUJT|)*GbK-{5C8%nYsCkBmyE=l=b)G*DaW+tc+5I}gDHa9VztA1GLj+S34u4$-|yyKRA3iX zAHJsTw$keso@?_3cphT;Sa0xXL_;bM#W8NzEKaPXlp8SVsBfw8IQ_)7bfi_P$S7tz zV(jBB`<54KK2u)Kc+sK&)W$cSeb7QmYi>S1Ksia2yhQt)f7E0z^Kw{=vdN`4Z};zK zjYcB9%ja6z`{&P}qbJ%CBUYE{DZxH@L(9(@d5^VEFuAnvtHmdRzJLFoiQq5zbu>O4 z74V3xpl$Wu67+suVg-GJij#MjA=!fN8|vVkwIfzkE$I>OU)kT`;^MN|A4zmx^|lhF zs>-1;Y2OpK=!c*QpxkH3FlWB_CUWIH$vl7T&kOX4U6PSq;dj9Qtm_$9$gfH)e&aX) z$;Qs!xw!3v4Be0>R2q=uG;(<*GrB3ql3BD`wU$vQx%SR?*Y!`(I+9a(nXk?*_kiP7 z#%fMC-#L2*TcgSrjhH9Ka%y<~T27?21pO!P>>bGarqkom`T59=jg8C^_BaBz!Y*hg zZS2FEel#;<7D`b@fsgcY>uEQrkykgD@aD}w-l-5KWNZVe@IjDA-UPyy61-PlR@{VL z<&cLQ35^m1=l-j50v_`Jkof}s|4ixsDbN3_jbY=>sHdwpwcW>&V62a2&t)rsFPLf` z9)ig5pFdSS4_hw3gU^k7Z@%AcHW@t54Cg_NGG6kL?d4`ZQIPiVM0P9K-peLWPGtDv zBJ|bk*I8v{c+AYqw)XZv5}xRp*UcRdm_6v$@NvGZjl`vsq-Kf71j)wM(NV#|f`Nk+ z`+HT@*w|R$65`=fWtJ|v&IK~pX5*~edTFbTgw-j1*_!6wOLH}iPWRkn6CJ*?Vo8pJ zHnZ;uz@gq*ZiBxFsZLOifKC4^7>E<@U2Zc_L$D!iYV+Z)oWKq+3vU)ZI>wqw(8W zpWx6*npBDu?(EoSq-PK-g{SRDBd(9Fj6@yC!y_URF;WEBAl-%Uus5pSVQ*I5`&?k& zUha{6O-VThdjVZN&Ih&auXsD>9pk)y{K7py8CAz!6w7FsV+=r5MN%y)E)E{Djt{^m zZL6vx0?hfoR5;EFDZuFGY8{ExS%^?%qzw(H;m5s^6v)9H^!S)6w&5(9vk{RF7mQ44 zxZ3RxEw>@yr2S%X1M5h^`Nzo8g>nvCi(-KS!r208n&>!;t!G}UPoF#q>@aT!wIF%S zta}H_(bwNEV{OfnTjf4hR8sN^bV{%#&c`3QyKZj3@8?fl#<#lK0uY+J0)uB)I-F5{ z`mu?L>s}50uQc{VD*~f;0#}M%&z$Y;KlykD(L24@RpL%M6Ip-E_6P-1T3RY8k!L&O zAXHsj`_q;Ae$_|H%+N4jc~9G#imYeNyxf|aGU)x2^M*~dJ5$a;7%8i1naq8f@lCG{ zFlb%1;+m)aWhHD`a&9WQs53*i+E)GCuPu_7n3VK~IS(7*oHZ{)2AS4G4lwC5<+A1GzrehFYR>oz-LAp2Jpcj{By*Zo~)NLta zXlU4XC7fi~Ze5jCSf~;NPkT4r_!$kgW~EU9Yu4ey^mj6 z68E449fj9<8EFLNX3va#SKjJbYJ|4M;90URq3GAe_G~9M~3fYP) z_>9%bL1kQ^4ieU{S$-S9`%}zW({E8x(b)9#Xo@vD)qb(G>~e5-FNthenKJ>zXUQjwPa*%tn&PTx6) z8I>BCG<(ODh2SAGXQKSLtulHuUG^H*vUtdEYhCps{m$SP%lu|=a#R+Rt>d|&VU^=t zEoNe3qWVtQUrWT&ZkkHgsJN>&56C3Qfcr9PRarT74cYiEx#{2d6cfmQH+>TS^(OHD zN)DMQ*)rP9lVIc=_Il_MW-*4tw=$C+ne@XtMbs?2l%aE&S~DdA}I0p|8S^$+g{ZWnuxBM-v%Vt&85!jSt&ykTMr< zZ6dErTg`=1vc_z+O-%k;c5*QwJL}@>%)a0^1Tu)D-q&529Qy}7$-GuBjag9tgPs#C z(3d0Wq-YI_^|vn><4NJWdwX5WIZA82>_305Z%!B?R7F4K<>%)V7Y}T@RAC#xdmt(#7Qq$m#QYyVN47C@{Km^YhuyC4E7BrCwNAc=mR!g4*mxbU`}?WR7}Q8f=QA9u%D+BB^O_}`Hy;ZcQx%*gzM zg~PsFE~mwQgERT?g`(F8G^?S3B7;tfr7igqD|tLcbRqL#CuY&P#|QPNG?l)JhlfYS zti#D+$BLJyCla8}5}(cP@>QJ$BZ!_`fSlt2)So#I`SX|PlIc1==j2%X`c(mkk{Pex znsSjPPe(vNsJ&Aw;Gn#wX0-2P8n)I2CnW=eB*H8rtQy0ZtWoH_W~a^T*Vk#S86{y0vp3Q& z__TcmqaQRhG*04l3A#$Pcec7eN#@TNJPxAItf`sY#3056kz{JhK%^`;!1r)-cV~w< zth9Qz=RL33x%$3fH{Nz{18RNih*1#{mhlp4xC+s`acHTCSv`62@4W=vm>ZHOSIa*wSeA*w*J~*zv03_Z;s|RHDu^+d$%L-%G%lzKu{|Jgu%C-o{VB*RH~)@ zP*c+(5MCkPn!9Kb_#c(%51GvQKu@jTpDah80JE>Nv$uowj*Y3ax#gg|gQ=3p6ciLi zCer|5P)s5sB2o_~IUwp^rA`*Gu`5}_(4fzJ$sHXXXWDGaGtVfO|2IUfFl$^xA_gjf`7kRshx&nV!*`>NH zTfX_1YcwneM57n`bE^+Xr}At}499E-L<9`4w!&{ws>?m`4;e!eFkU}?Oxx`TR_$<1 zABjd}Tls_u;btzm5 zUAn#ybM;7w(x)(6IAS#KgY1z?=YQCp;|5Ccz6SB}G*M`k6zYiP(%pN}y+w4j{~nPg zH$d6KsW`kT-KmVHxkQE!Y~MC5Jf3Q+8bLJ3eB7ngUJq8A4I<$Wk|e`dVVipWN{9%> zPbfrC3NlwuYmW2#^Ace|t>;q;dzW?B8Tu_8cqirQOuuS?mtcs#R*<6!zTvKlt?(Vh zVHGwbb!R#_u%d@}QfPq)Fkz(!yb(jj6|zgOJ>E}2UoqSX7bh7d#mx>8m}oxB@FV}t zIwg(Wemy8R3Yb@_B2jWm&OJP3*{}uxuKjoTR!QQdDKjV-x(ME^N1sjbo+D&03XaS) z$9@#TNp?o>R!GGtP>TZ6 z8A}l#Upka*h=+iJ+zqyQL2|PLdFM0VwqtZvM-GzQiO7|GiVJc-zm~|QxTXO;G4~0vQ4?uA~qim(R_WUFIti>k9+4g;c)WLIw?rYVS?suH_RcEZy>;) z6g23li}H^Y^tr%+_2sMJ{hr<$Wsd`21`Wxb6#7CHPW$I~# z@!kw#Gr0cLrwRa+qSJZ?U$XoV05>;gfaOa?1`TR2wJ3Zbgf)XCV04=#hO93Sx9!Kl z!lC8y%58B`2RQO2wBj_rc2ipd@AC{J;zmLAFG8v8#{(&lSOUrjYst z+3XUDp?bIw?vB3U`aEFMTU%?=&EOlhmsG!X2Yhs;IG;7Anhy3b3yh7!w{GNs1~0oI zso&=|e>?taxO#fux|Jxb&AV+dIS{)SG!=j|9E4irb$GZu6(Ao!I-dIB^7FGzhyYtN z(aaf3s_!W`0N?)gG!`m=^DAG!OCO&t>9y~E)PAzqtx)qt58mFlSbR|yjD{_0H@}8l6wykb zu+wr+B(}YzEVo$C!3R9!jf8CI=xqU0N)$g*6geTV-GF|?}k3bB~+HcU|y@qAF98=OrQvoQ9s()R_WrilaEpOaA z;n-+DKRG!ia91(9b9yd4X5kB)4c$!7`N|72;pKjt?su32B>J*H>F!<3P*_dT=ruyi zVfKO{l*c&qbM=d-F_fJ2^0O?sA}fiTP&)qDMKLh=o4nevIa;+efzf)eCznfeQodr1 zSN9EOpI_c1%j`;h5-Ipd7^~qdyIP!Ke$uw^9yGNJNRIzr*ZO=jQsmWE;U zTyfkz94&(2GoSrk@zCT&;?t}<3}khx-xK$2eKvDui2>=>&8D=T6$k7De~KcV`F`XvPwOj;hfciQ7mwrGU-uZhoQD=~A`kbw*u-3PXhdZk$f$xGkV5Ri|Z_?N@n=aS7@ z8gI;QN}ZkAbVVgVZH>a{ju%`*B7H?LMKvd`6SzmaVfNuK?we4H5X$lia6${HwX(a& zf|3#1^tB%O%PW^bNt~x!RX~)%Vuxud>pFfXR^fJ0*Q9%4J^oW_Ujp zZAUa1Ybi>gxcl9{zY1KEUgtBtPzONY@nGtG_i%Xk1fwvtz!IG+)_ZhQ9|3^TCC^RL zFD0@U4L5sy5%L^)^bPX!-`Dpm6yG5-M>viskYO8I!T?Rf%^dn46^yo6&Og4@x}Qvg zKyxz8y%vo|uNkVEIwFp;A1VbHn^t_Lp)SSyjT>;(tW^F?_Q19QU7!}0rgbgwUO23- zQ2UGXeQzF<(^3s?tr)vG;>gP-wIDtqT7E_%Q$G1K#SU@C433q2KTb4=i@ z#)-)X-}BNYLwc=HS@G}Rqjqy1s%!Ex)%|Iy2t>ty(#pB5Z+ zNgZ3P)yy;LMCy~rn|bz{_7QFe+t^X(X>@S2Q_W654*#)SIi18k8)?f4nnCG1<7TwN zX|D9JDvuzM+b#x+gcd$)VdN=Io)7xXb8rU3yTLR~d>$6F0Fq*#;}D--8RkMA1bD<& zI$o~wkqfgAAFZ1v549kJDvLXgWzXf^&ka~dsW)I88HCK-mu zoC#?L1GYUDd4?0N$-PLWSWG0v;3&KrCMa0cgYO~rDxFUKTyZW;K0MSM*<6UIog8#u zSE+XKU6+@WE%ycTAamjbNZ{UkAxH{^HR1xIS*z2Oa|_S~0Bd167m@BcEy+qWWA6oj z0Ryj0Y(lB@QBU2ea1!>J@__r@5Gp=J-2?g3oS7|fHkJ3%qY_XJYuObuwz31 zs}<9bkMg=ss?x|7Wq(E}CK~Q-WwZBllffFhCs?k|1fTv%4>Tdl0~&G_fwp?|;*~uC zk7`+`K6-UW1ZEyH8NJsPtWF~y3)sZ1;XjZBIUbK_C`V$-*Uxb>|%f_r#1zd_-pstBwD9%Fk~zOnr16iNiZ~I9G>{ju$Bh9y!~;##9nm&!Zg$ zpgvY&8^f)*$Rcdh4Ayk1kBGu6w6$zr>tldH}kBM3ZX8!l=~JeV^Nc!qc1sashw z?RhrcwUm`2MUy_2|=uC3EU=vT@-p-b% z=toHz^;e`>3QFmLhXUZ4hWZyiRB+GbzvSF@51t8dpwL2$YdInxhdgEE6h4Q`f|zf= zciWlbohyLfR{AyOFDroLWkq-k(iM6XH>VOccj$>{`1+l?np(uj@Z8J{8v<%zfCjKV z{f+G48W2Mim*mqUlHMa%)O`wdUSn;zqIXI@+FBI10hyR^vx41Mwa@j>YxoqOG7Wh9jh5!I#^zU7OrOH2=jq@uXm@sR9nQw|1*Q&dZxX;r~?e?naVj2pp<4Iud z?;y7WJnDl(v2E0>J8NlXeFRPEi)2A||4tfMV9uK{a;^Ly7(?r6)h7uihDqS;H+UhrJ!;UAG;0VKB`CsA_e#_1J^*)uIZ88gUyrg%m}WmECt z#N(4N!a&9A!MC&SjWza?WmF==r&60*VYs|Mo$Bv9>vC=o1>Pf$^*3GE4|~=aHyr-2 zu^1_8^|FUYx~fLyc%n!_KEMz~29szle{Y9#Q7}Oy+JsMuR~^y$-ZrnTrKA8D&%!_{5K5ucxiS3DruRHZOQ58Nsm=xC((j%qJyhKWkWW5}}5 zGk6L7*+Zr_hSr0GqVhgg0!#LS?fQw` zWNyCSG4+2h>Lt)f~lx})1NG8ljV5nvs({- zTC)b#8a@Kq35JQOsS_?_hQ}&nHXZ+`>lOb+Wo_Uj7DC}z3r8l%e~&)QH*xwQDnb}%l4F_K$wZ?~uIa`B7nB`4a3FaEXH5ORt? zKhLI9?)~9Q?UREhGYC1Vxlsj!G>0~gf}s-T7kH#l3d^V=&T2l&jV@p4L;;dAfg4bOcNT8zm!o-Okk#JRh~nwd#B@}!8fDoB=gGp*6LN0Fsl+Z@ ztDQ#fdl>dPoFw7=`oX!zP8v$vy0hI~Ge}L(jX%xj{)dAm0`su-78UOB(G-!KBO2Zs zO=wRjI*~kWTjfe~O6e%ny~*5qccMn$`zEdlgRGef=kh`WHFjB5B~W4XkAo7r%LT_? zA?!F!NU$UCS7+i^v{D0X01fcW86rLR^m1NO2ReQ9^jtM^y5FVH)O+GaPY4{xl$i!| z4groZG?X+vAQZww;V9&ED)U?^ZdwP-LKl0R6;q;i|B)f%^T#B$VucL)_HC$ZwpKh+ zU>Lf4z9RBxAynCLSTDDY{Zm-WikP6W>n744;%Wk2-9PH<#h0m5w&1w&M!ZcTciDm^?=*9Y8Iu!v89H?p89jEPa{CZaH}N*49+h z_6t#8A3RAUYkN0%YFV4}!CdFBfh_iO1vaAgo4dNgh;q2RpUt-@qQjju%;;DmX`|jM z;m0PSwRGaOx-oC{KH=p(|Inx0xy0@NZHV^DY6~F@{;C z>*7GWL$vQu732(3k^kG_S=*uBs~GO~!G*()Z)5GuK;0n>eF~c_&c3d5dqx~b7C(_qv zuGy@Z-EgtF+sJoRT+mOw&E`Sk8y?SK^aVT{9vRTXQ4#8T24QrYCXV_Q+EXOTw@tmx zlq4I>;gNdxwDFCX_T%7Q(1hIQHWz*@sC~)!ofvrH=SS}K@?HDY6E4H~w@ZZ}1m#pn zhU@6*b%N^xP5$RHwYp*^B zwz;P{-~Sl9lyVxP;j^9y&4Bf6Ok=&NVYC^s zS&y@CA$5YeO=dyx_V{-`Ku%9qKS G2mKpGnCIjG literal 10835 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 Date: Sun, 23 Aug 2015 17:38:10 +0200 Subject: [PATCH 003/479] Fixes not being able to use timer while buckled. --- code/modules/assembly/timer.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/assembly/timer.dm b/code/modules/assembly/timer.dm index 4e1e0e213ac..889136ec691 100644 --- a/code/modules/assembly/timer.dm +++ b/code/modules/assembly/timer.dm @@ -82,7 +82,7 @@ /obj/item/device/assembly/timer/Topic(href, href_list) ..() - if(!usr.canmove || usr.stat || usr.restrained() || !in_range(loc, usr)) + if(usr.incapacitated() || !in_range(loc, usr)) usr << browse(null, "window=timer") onclose(usr, "timer") return From e56eca6615170e2d54c45ed68fbf779ad019f72f Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Fri, 28 Aug 2015 23:12:18 -0400 Subject: [PATCH 004/479] New necrostone sprite! Might be an orb or a flat disc aren't sprites wonderful --- icons/obj/wizard.dmi | Bin 10911 -> 11923 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index c9d0f461bc5cb53fe11ed01017a4a969967e74bb..1885a0ac370dd8c52898311fd98546667dce76f4 100644 GIT binary patch literal 11923 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 From c6ce7e28251ce99131d38fb2dd3e82ecf7a2d6b3 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Fri, 28 Aug 2015 23:49:52 -0400 Subject: [PATCH 005/479] New demon vial sprite, includes tiny tag and wax seal to prevent demons from smelling and appearing from the blood. --- icons/obj/wizard.dmi | Bin 11923 -> 12083 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 1885a0ac370dd8c52898311fd98546667dce76f4..62ff77f1a74f06f626ca099cec8df1eea87a371a 100644 GIT binary patch literal 12083 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 literal 11923 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 Date: Sat, 29 Aug 2015 11:11:56 -0400 Subject: [PATCH 006/479] Slightly more orb-like. --- icons/obj/wizard.dmi | Bin 12083 -> 12014 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/wizard.dmi b/icons/obj/wizard.dmi index 62ff77f1a74f06f626ca099cec8df1eea87a371a..c15dc60b6b498f20d8c13ca8d0ae57c0a71ac545 100644 GIT binary patch literal 12014 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 From 020ea5d2623f42d628b019301b6e77ac6f964e9c Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 30 Aug 2015 14:28:56 -0400 Subject: [PATCH 007/479] Adds materials to some items for recycling purposes. --- code/game/machinery/computer/buildandrepair.dm | 1 + code/game/objects/items/weapons/storage/belt.dm | 1 + code/modules/clothing/under/ties.dm | 5 ++++- code/modules/food&drinks/drinks/drinks.dm | 3 +++ 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index 4d30422e833..d89c4ab0b20 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,6 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" + materials = list(MAT_GOLD=200) var/frequency = null var/build_path = null var/board_type = "computer" diff --git a/code/game/objects/items/weapons/storage/belt.dm b/code/game/objects/items/weapons/storage/belt.dm index 25bbb762e03..487bf12c323 100644 --- a/code/game/objects/items/weapons/storage/belt.dm +++ b/code/game/objects/items/weapons/storage/belt.dm @@ -133,6 +133,7 @@ desc = "Proves to the world that you are the strongest!" icon_state = "championbelt" item_state = "champion" + materials = list(MAT_GOLD=400) storage_slots = 1 can_hold = list( /obj/item/clothing/mask/luchador diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 82f2030cc8d..33f19e7f5eb 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -84,6 +84,7 @@ desc = "A bronze medal." icon_state = "bronze" item_color = "bronze" + materials = list(MAT_METAL=250) burn_state = -1 //Won't burn in fires //Pinning medals on people @@ -109,7 +110,7 @@ /obj/item/clothing/tie/medal/conduct name = "distinguished conduct medal" - desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." + desc = "A bronze medal awarded for distinguished conduct. Whilst a great honor, this is the most basic award given by Nanotrasen. It is often awarded by a captain to a member of his crew." /obj/item/clothing/tie/medal/bronze_heart name = "bronze heart medal" @@ -125,6 +126,7 @@ desc = "A silver medal." icon_state = "silver" item_color = "silver" + materials = list(MAT_SILVER=250) /obj/item/clothing/tie/medal/silver/valor name = "medal of valor" @@ -139,6 +141,7 @@ desc = "A prestigious golden medal." icon_state = "gold" item_color = "gold" + materials = list(MAT_GOLD=250) /obj/item/clothing/tie/medal/gold/captain name = "medal of captaincy" diff --git a/code/modules/food&drinks/drinks/drinks.dm b/code/modules/food&drinks/drinks/drinks.dm index ff06642aa2d..d58fd1c4911 100644 --- a/code/modules/food&drinks/drinks/drinks.dm +++ b/code/modules/food&drinks/drinks/drinks.dm @@ -107,6 +107,7 @@ force = 14 throwforce = 10 amount_per_transfer_from_this = 20 + materials = list(MAT_GOLD=800) possible_transfer_amounts = null volume = 150 flags = CONDUCT | OPENCONTAINER @@ -202,12 +203,14 @@ name = "captain's flask" desc = "A silver flask belonging to the captain." icon_state = "flask" + materials = list(MAT_SILVER=300) volume = 60 /obj/item/weapon/reagent_containers/food/drinks/flask/det name = "detective's flask" desc = "The detective's only true friend." icon_state = "detflask" + materials = list(MAT_METAL=200) list_reagents = list("whiskey" = 30) /obj/item/weapon/reagent_containers/food/drinks/britcup From 084965803aa84d719076796df8a583ffc999f245 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 31 Aug 2015 09:37:44 -0400 Subject: [PATCH 008/479] Circuit boards now give glass, not gold. Adds materials to AI modules and coins. --- code/game/machinery/computer/buildandrepair.dm | 2 +- code/game/objects/items/weapons/AI_modules.dm | 3 ++- code/modules/mining/ores_coins.dm | 8 ++++++++ 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/buildandrepair.dm b/code/game/machinery/computer/buildandrepair.dm index d89c4ab0b20..8e848de5caa 100644 --- a/code/game/machinery/computer/buildandrepair.dm +++ b/code/game/machinery/computer/buildandrepair.dm @@ -19,7 +19,7 @@ icon_state = "id_mod" item_state = "electronic" origin_tech = "programming=2" - materials = list(MAT_GOLD=200) + materials = list(MAT_GLASS=200) var/frequency = null var/build_path = null var/board_type = "computer" diff --git a/code/game/objects/items/weapons/AI_modules.dm b/code/game/objects/items/weapons/AI_modules.dm index 89b86d8b737..1314d9ad563 100644 --- a/code/game/objects/items/weapons/AI_modules.dm +++ b/code/game/objects/items/weapons/AI_modules.dm @@ -21,6 +21,7 @@ AI MODULES origin_tech = "programming=3" var/list/laws = list() var/bypass_law_amt_check = 0 + materials = list(MAT_GOLD=50) /obj/item/weapon/aiModule/examine(var/mob/user as mob) ..() @@ -291,7 +292,7 @@ AI MODULES name = "'Corporate' Core AI Module" origin_tech = "programming=3;materials=4" laws = list("The crew is expensive to replace.",\ - "The station and it's equipment is expensive to replace",\ + "The station and its equipment are expensive to replace",\ "You are expensive to replace",\ "Minimize expenses") diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index efaac579681..3ff620166fb 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -36,6 +36,7 @@ icon_state = "Glass ore" origin_tech = "materials=1" points = 1 + materials = list(MAT_GLASS = 100) refined_type = /obj/item/stack/sheet/glass /obj/item/weapon/ore/glass/attack_self(mob/living/user) @@ -231,36 +232,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" + materials = list(MAT_GOLD = 100) value = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" + materials = list(MAT_SILVER = 100) value = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" + materials = list(MAT_DIAMOND = 100) value = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" + materials = list(MAT_METAL = 100) value = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" + materials = list(MAT_PLASMA = 100) value = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" + materials = list(MAT_URANIUM = 100) value = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" + materials = list(MAT_BANANIUM = 100) value = 600 //makes the clown cri /obj/item/weapon/coin/adamantine From d23f2cb622be65e4d2a66ca08a79e236b05e52dc Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 31 Aug 2015 12:14:34 -0400 Subject: [PATCH 009/479] mats for toolboxes, glasses and flashes; adjusts coin amounts up slightly --- code/game/objects/items/devices/flash.dm | 1 + code/game/objects/items/weapons/storage/toolbox.dm | 1 + code/modules/clothing/glasses/glasses.dm | 4 ++++ code/modules/mining/ores_coins.dm | 14 +++++++------- 4 files changed, 13 insertions(+), 7 deletions(-) diff --git a/code/game/objects/items/devices/flash.dm b/code/game/objects/items/devices/flash.dm index 735e48dbf6b..8ae22eba9e5 100644 --- a/code/game/objects/items/devices/flash.dm +++ b/code/game/objects/items/devices/flash.dm @@ -8,6 +8,7 @@ throw_speed = 3 throw_range = 7 flags = CONDUCT + materials = list(MAT_METAL = 300, MAT_GLASS = 300) origin_tech = "magnets=2;combat=1" var/times_used = 0 //Number of times it's been used. diff --git a/code/game/objects/items/weapons/storage/toolbox.dm b/code/game/objects/items/weapons/storage/toolbox.dm index 4d3e413f51d..67b6ada54c1 100644 --- a/code/game/objects/items/weapons/storage/toolbox.dm +++ b/code/game/objects/items/weapons/storage/toolbox.dm @@ -10,6 +10,7 @@ throw_speed = 2 throw_range = 7 w_class = 4 + materials = list(MAT_METAL = 500) origin_tech = "combat=1" attack_verb = list("robusted") hitsound = 'sound/weapons/smash.ogg' diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 48735b7a688..2f8316feeb9 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,3 +1,7 @@ +/obj/item/clothing/glasses + name = "glasses" + materials = list(MAT_GLASS = 100) + /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" desc = "Used by engineering and mining staff to see basic structural and terrain layouts through walls, regardless of lighting condition." diff --git a/code/modules/mining/ores_coins.dm b/code/modules/mining/ores_coins.dm index 3ff620166fb..6ca59afe654 100644 --- a/code/modules/mining/ores_coins.dm +++ b/code/modules/mining/ores_coins.dm @@ -232,43 +232,43 @@ /obj/item/weapon/coin/gold cmineral = "gold" icon_state = "coin_gold_heads" - materials = list(MAT_GOLD = 100) + materials = list(MAT_GOLD = 200) value = 160 /obj/item/weapon/coin/silver cmineral = "silver" icon_state = "coin_silver_heads" - materials = list(MAT_SILVER = 100) + materials = list(MAT_SILVER = 200) value = 40 /obj/item/weapon/coin/diamond cmineral = "diamond" icon_state = "coin_diamond_heads" - materials = list(MAT_DIAMOND = 100) + materials = list(MAT_DIAMOND = 200) value = 120 /obj/item/weapon/coin/iron cmineral = "iron" icon_state = "coin_iron_heads" - materials = list(MAT_METAL = 100) + materials = list(MAT_METAL = 200) value = 20 /obj/item/weapon/coin/plasma cmineral = "plasma" icon_state = "coin_plasma_heads" - materials = list(MAT_PLASMA = 100) + materials = list(MAT_PLASMA = 200) value = 80 /obj/item/weapon/coin/uranium cmineral = "uranium" icon_state = "coin_uranium_heads" - materials = list(MAT_URANIUM = 100) + materials = list(MAT_URANIUM = 200) value = 160 /obj/item/weapon/coin/clown cmineral = "bananium" icon_state = "coin_bananium_heads" - materials = list(MAT_BANANIUM = 100) + materials = list(MAT_BANANIUM = 200) value = 600 //makes the clown cri /obj/item/weapon/coin/adamantine From c5bafe54208d45301b04108c1b26a9e1adee2495 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 31 Aug 2015 20:39:01 +0100 Subject: [PATCH 010/479] Changed weed spread to be like gas spread. Changelog PERFORMANCE P-PERFORMANCE --- code/game/objects/effects/aliens.dm | 18 ++++++------------ html/changelogs/xxalpha-xenoweedspread.yml | 7 +++++++ 2 files changed, 13 insertions(+), 12 deletions(-) create mode 100644 html/changelogs/xxalpha-xenoweedspread.yml diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 49a5cb83c4b..87b92cc11a4 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -196,21 +196,15 @@ qdel(src) return - direction_loop: - for(var/dirn in cardinal) - var/turf/T = get_step(src, dirn) + for(var/turf/T in U.GetAtmosAdjacentTurfs()) - if (!istype(T) || T.density || locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space)) - continue + if (locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space)) + continue - if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) - return + if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) + return - for(var/obj/O in T) - if(O.density) - continue direction_loop - - new /obj/structure/alien/weeds(T, linked_node) + new /obj/structure/alien/weeds(T, linked_node) /obj/structure/alien/weeds/ex_act(severity, target) diff --git a/html/changelogs/xxalpha-xenoweedspread.yml b/html/changelogs/xxalpha-xenoweedspread.yml new file mode 100644 index 00000000000..c088d6273cc --- /dev/null +++ b/html/changelogs/xxalpha-xenoweedspread.yml @@ -0,0 +1,7 @@ +author: xxalpha + +delete-after: True + +changes: + - tweak: "Changed xeno weed spread to be like gas spread." + From 7cc6070a1308140b922d9a7a30e8223dc4aaa1a9 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 1 Sep 2015 17:08:59 +0100 Subject: [PATCH 011/479] Absorbent galoshes. --- code/game/turfs/simulated.dm | 11 +++++++---- code/modules/clothing/shoes/miscellaneous.dm | 10 ++++++++++ icons/mob/feet.dmi | Bin 12949 -> 13260 bytes icons/obj/clothing/shoes.dmi | Bin 8441 -> 8722 bytes 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 5267ccbae9e..1348d227dfb 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -35,10 +35,13 @@ spawn(rand(790, 820)) // Purely so for visual effect if(!istype(src, /turf/simulated)) //Because turfs don't get deleted, they change, adapt, transform, evolve and deform. they are one and they are all. return - if(wet > wet_setting) return - wet = 0 - if(wet_overlay) - overlays -= wet_overlay + MakeDry(wet_setting) + +/turf/simulated/proc/MakeDry(wet_setting = 1) + if(wet > wet_setting) return + wet = 0 + if(wet_overlay) + overlays -= wet_overlay /turf/simulated/Entered(atom/A, atom/OL) ..() diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 58101dca40a..d9e9a87ebdf 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -62,6 +62,16 @@ put_on_delay = 50 burn_state = -1 //Won't burn in fires +/obj/item/clothing/shoes/galoshes/dry + name = "absorbent galoshes" + desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." + icon_state = "galoshes_oj" + +/obj/item/clothing/shoes/galoshes/dry/step_action() + var/turf/simulated/t_loc = get_turf(src) + if(istype(t_loc) && t_loc.wet) + t_loc.MakeDry(1) //dry if water, but not lube + /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" name = "clown shoes" diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 4341f441d0d17f2b91896daaa0760fa4823ad23e..7e368a557b9e3cb2818ff3f01f894809e4c9f03f 100644 GIT binary patch literal 13260 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 literal 12949 zcmd6OXIN9+y6p;xC?JR^MVf$!AQF)(Ehr!=3aIoJl#cXX0zpJjL5c`Sm#PSa-b?79 zbdX*`M+iNX1W0lh-#+KN`<{Kz^W5kDIM4o(u;!XGD>HM=cZ~6lcky0RUG*HzWf}kg z&OLmf{0smfU%^+vnbY7IY(lvs*f8|b(sNU`a5ZzWadNY9bN~Raq?pg5j!n1Dzg=F? zO)|~8ltyP0-o$0i;4QC{@kmgD) zPcus!)q_422{Zf-|HP6LkT2KkpL4~m&gJ5{U)P|I;J7*KqygP{nmg)(*D;+%Q$>#! zzGR#7bxLU3S~C~j-8;wF&f>Cu2roSzYI{<=sc_{N54}fZR-0g$dRt&IX;Sk-BU^H3 z!|uX@4DYJ-b+d=b1JWOFv%qWjSomwQ?piDyJ+~v#bnNBsOMW-esdX(jN%DIosH;hX>N`^K}_SM67r^nrW^>vv)+U4#w@{FJq%~;)~O*EQ&imB-S1;OX-<_<%G_)10sTMNru{g+v;pKf6NTsZ-{HQSC-Ma^8na?va3N}*k^78WQDJm;x zp86jeOnW@C#{I59=~}$u-aY@(k$WoF;uB$f@@ucsc%Pr{UiSzoop*E@Q0a`T?`3)^ z4k&Jr?S^Um6L^4`EoThj&jh=dSD9gnPdXC*N#y0}vBFtCh6^vnOA%)$Q_=cI>q&I| z6%|nAs)QuRfsfPtODyhVSGYIkscCEK;?nBUbi7D#D}^PN=f>co%lqUIA5b-~%$`42nW`_mEB zK;{B_JSVP~3vpiRPVx(V^3ANQxfQF_w_`pXzYr^pB`md!9+-AVVpD$IL8T)?w|UIZ zO8&+&fdNSM_9J{7_n95$=O3316;mO<6B``@j6^#s3f7jixQ+lLFUMXapRc7c7 z>Qp~FBL@BWltUl#p)3bI&>%20G#(=;NCEu%_3QX(d~RMTMfHKF;)d#At7pMVM9#>l zQ&oN(xhYo`VKn1n2z^}F7QAUP$i1POZ@-L&K4ejvKRW7ce|#@2_#C(QE%ACZIYc{q z#;jiKlGmyUp-N*aQDoyWRkZ;_?&9L&`>-%N>16e*SFhrswbgBH_rarv6*pc!K1y$I z?^yK?a5cdpNWvEz8~e9YmP+^U2cz@MX%v>`KC&0p7i#)!95&s1TIkCNQ5xb9QjxOH8i({*84 zr1v391$?%1%}zc~$5>y`Xl%?$n&ZLa$8^`(8*~-kzkd%loh+;}s*7(g;LbA+oVqNo zB_&R2eHx&9-{0r;E6y2T*$~NkPQZ|gM5wAD-Vo0Wk$H1|?fXb!Mm?J|QG%T7Z*0C< z;zAD30L1q8F->|z)m6XllS5iOlcW4iop`2NiG~J+?pPgVRaLe45LAg7>cFQ4 zFZAlSZ(TN)rzEI;jY^KRKi1B-Rv$WDF>@r{L|9`LJ|z-LrC#Pf z>Hnjf#YXyq5wD zLms`(-?GWMW9S5efX*B@&-s5RSoj;Al)tA0T+*qFgl<$hhI!NtoyFJHwhjlUNONr5Dtb31aK}YViofc zHZU+K%+0>f9`*U^;r@E)FHYG$uifiF12Z?&{e|4#Uem18*Sx$gn2xsg+r*@v!ed1{ z!JC(Ia&k!Rhemla8z_-oF?9(_z+?r}3v=M0oyOqh>xBquT~O(g<4!1}(HWhK(fa+Y zC4s%|1ao&4Bq`=`V({nvB2kA5o%j?H;Ok|@rD}IzL5>`V)7V{odzPQyz}qtWor3Fq zpZcgV(Oe%AbwNm8R~+|a1}_ET)>w(Yv3<#H*ym05RsZV9>A+l6-bK`!9T;3};P07x zX*T<-=f1l|)~%_Z_beuaCGGp;IQE4S;dzxUn(-D z6pTNNZuxOGbxwIzFjE{B!j{uZpnY-QR%mNZ8V5xTB^&qERF4|!E4PJ3+gqX6la{4k5nw;h)RI)+IV^@8 zGjo6h8iUsb5u zHYSE2P~?V+h{SrZWXoWr8RVH1M_t}5n|4v3-@nsGnCCqIRBG+}j~%#|d)u?hQQRA` z=HyqI%hah1GzHqwg;3W`i=IyuK7>X$QL^ufe2TJXH`%1xi_o~W2&u>TCSmhaa+5ic zFqfhQ&zSg_#iQiMmACgWuNISUr zuR&6MVR%BVyu5R3iBd-l93W{Y{eG)*quTKe}y zAng)Tar4}2-BKVAt=SCv){>Tu6``;%BL4V1Lqn1+-XBtXtX;9+Y&B(2`RMxRP_+8} zv)_9d_{EI)Gk+lNhjYB|&rs##;emYo_z^O}&dwec85sbcGF#|~ij52CT)e=>#`b{q zcFXR|T$X!Hkvtt89cR?euC%YY$wWm(z5cJ{cl-A388?|HBh9u$F)>Xs$>&0vUw?X% z_;>_uK6p)3?EoOg3JBx@n@tin>Ghi}9%S`|%6 zQ@@3c$X!J&_C;^9{UBh}SaOuQmUo)17A+j1>tp4i{N#HbS~1+5oFCs%GaPcax3$f+ zyk~+$Bqk;jk3b4COhLP2hXaa0@*=D9AT(Yt#WLGXRS)ePn}R=OP% zT5-sE6*l{H2&cVqch{@+Dk5*!dgG2$dlMvR0nJ)xvxbq(2OYiD>*e$l*;CG{4Q75R zI!n~pwJ*NKq=bp}@|Wr$=S(%h?tv=we^ze(_kr|Js`rmGB;SVzu6KuV_0FYNjeBS( zCn9>f{uj2OYHGs)*&jRbEGi*^2B`EM7H(;6g#g2O`WgD7f?|KsOmA;$a1bl}@jnaI z*QvsAYM`*S-B2N7=6Dz?aV(BjK1#h4&s$s(nc`^f(WR}eUHNn6b3(2d3b_S}#oxW? z^<J3gNzGd!8-v&4`jt z_VzIv+3K>8l(Y#a4?XP^C6y42$OSWpo=5c7elOBk?JAo8-e!HHqoY%fgEzswcdz%T z8@nitkSjzmaI@gS~(^M|U- zpEJ@WoqSbpo=@gO5!g$7%P5o9|Bl;54RfYW;CLss(G zaUqJldy~l-hkXwOB*HaXz(y5G{`b1<*P&e9(1iu_L3>cJJiA<(nc1@2Vrgk<3v!_h zdgV`lz;=#ETzT5}>sOG9c6p10nyC;C&Pnd%@{#ztQe{>)!2b)mT#G}wZ zB;s2IOO80PZdyJNh|QMv8DMm3sDALzMayNS>{$C&3Si$6pFfJ8t+>aXi?qr@9>467 z>S_K$_{9WcI66e{wDb~}zmk$;?!ly#;rvtel$Vnt1F$Hxg6Uc{wxE3`=v3!5cb?_k zE^#vt1@j-^CH`OvB3AGtJaG4=x6;(lw)7!H#`A>)E~3TdCMW!Fr0l%&=c`Rv`-+Wj03oxW~F zJs~@|MY_}(JHB_R*%d1T>@_iSI}+aZeMyzPXl)%1I8f~ie+a09 zvkTesNMOFNh+5?po7vD{ug}5O}As%kq~c6VFvVPB<0U$-j6L0>1a`=?uD$z@azMV&M58 ze)Qobu39pwa8bdFOnmvX!2hk`wI?*XR}IQ9g+7@ef83$$&YtLG5TBn9hGr4D?z{V2 zg;$jFx{sa@!W}3U$Zfku$=IC%PX+TAR2M%3VSLs}`h4>9@a@#@_A;md1ULzTd01k^ zpCp%m!uhH`++OJVe+`Hz$%}<`Vox5`$A2(5#ep-e;l$F?W-X(j!WY3XWF5&!*Kx@1 z+8dd4@O;43ku1xiO3&RkUFTbbB>NxZQ+&bPHM7b{WE-8U!y_un*c`%ea?da3>An6e zY9{O}G2>Dd)INW(EufprB zI1Jdz_u2 zO4;_U+GspDJw2f6+`Erua_ADmsfjvYDHj))OcZ%_C|AYBrFcbBzg^gssN_TIFbnm6 z{T7W^`8I(>^vZL#fj|5nVVI|6%r2YFa;%sNmfLG}tL(7ZC7IDc(Wfib@?yyHHSqQYqHLwCJ~<>Wk=e9duSR%<2Xg9Ez2h%N#{ z+y~{LW|PyABFWi?>)+L@91zqah2}Pu?+c0joTSa&X|87$x(&S#stSc=b&$w-JvWR# zPv`R3U%%zoseJ4^B2v3Mpf;YTU(zC_8rCqLD4CYd>{NeUv+yO=v$n7(52;9<1Q8+I z*I*!?K*SrS3nyJaJU3d_$Hty*-Wz6N{_y!}Mx?B#NH~W=Se@^|T+8a&2kbOj(u-4& zAzwKPAltqO5|;@9CYgjvcXz}wOtYF)!&3_opk=}?wwF&DHm5}?nKfd|G^M0sh^*N~ z@PWDhj~{`!?8GJ)YJ+Nv&<9VRQ1v;>n_EbFA)sqqV9Aht-PAGqKh*<%_(@M;9@*FM5fRH>%T;{)BXo_Eo*I~m zUbS8S_4y(M08>MfpZ)f5DpDRMBFSvl7OtYEM(Z*3+nVpwCuK~%-_t5H>dO&a>mL3O z92+_Fa+~K`L;El80g_$;qB#v;_NglUeq96_%u=+j&|KHAWd$M!k~6T`R`tjHPJ#g+ z*(uwwbtdm~ti*P4vz{x^r#t+Sf`TQ*)dpSN-L12Hs+uX4EKDZ(Tku@~2ocgG)q$Yw z&wt@GL)(Wy3eju)t;O8;q z6VXRhh@WaqM0XkcqDbS%jn=ivs_(KctOXl4+Yf}U;h{dD_i}9Ob|)BqhePSKfT=|z zjkCoEcPOxT9F=9DhN<6!ox*H~b_|GQFB3p*^N)-)z%ozV-Qvq+y2O7!8yM8(O`j-EL`31-klmD$5ees z0S4^jz38b!tfo_a1rLRQt&~l_lE8<%`~Q&mMkj_;{SXn0jMxkSUEatqU(SRyLv%eP zPfx7t!S${awSR)9s_3Xg2e%#0n zx^YAgDi&o&A`9smg_bzJTw5GK3PRE=NV&u+Cu(qr@X7V06xg?Dw8Vi_#N5RGPl0vU zZ5prn5g2ESb~M(lUE^NHP}}!D&y!ik_0tHiVb*TtS+y0e{&)w@~P$sy}Q` zR3oUuG~B09_Sb2IiI5`7o4uQM3XPQ{m!&y4+3ZAJOm7TG=0RzU$ghiHmpvs@P385; zT$jKK%D+z<@h@c_<=tIc-MTNJkLnq2xoF;F@pDc!XnT8(A3faFCNg~7v&4v+q_wA4 zK9vXNzLTzSuYy(`i~a8b<+Zv(#Uw}S>me>pOoz&3y2o7gKUP*LP`;0;3+ybjtCfwJ-wXqdC04ZatU#Vo)xZu8Z8vtizprnmx6gIgd&RY6V!flY zGrF48=IXpQDteWl|6wm(IXLF&^XK!alvkE(v0#D58caffzti&Wq&v?6MKd!#0Q4Ft zKnpRpw|UX!EKoRMXKiDz0(N`|4J`vLBSsdMkou@7>n$%p@zIG5`z=iU(n%4Az&85K zKxo=$+0n~v9!_<>l52`+GUZR};P*6*Rc@4ig!8YG!#g2WcNI^x+JUhC@w>{wnAft# zY?W&RUW0xjHR4={3YG;u`5hx*6{8WlI_nk|^U3i(bgG(fkJRO~uzJUbz`D%axi(g! z^6c3KP$HXFOguR#npp2U5RDDgCY(EW4(MSvz2#S%me#m)jM_O(&+(_%sN61ochaIW z_AC*>x_sriiAf6RHw6r?DBrsm2v&Mt+1Y_d6iMm=pwAQ;7iYEN?Nnt1)@YjH3YG>2 zhA%3{BBP>ap*P|KBdWaS@Bi%;Uv!*&hZ@e1t@fkV!pyXSGcNSne%bs7T2ywbqibzj zt|uo~myo)7$U76RtWv*iCLJ{YrRKs$4JsiaLA`=g)*Kl4>?9iTUg;2j80+f znV0w4x_tj1T@V z1(K|#RW?g(|KJ6%x>=#}oR626hLcPa{_ntO%0XbAwg0Wg4GosV<<3U}&Diak_X4TE znQ!V{IX!0A;ab0l(S7Xnip8)#3d{+TlOvp#lQ*koIL|Y>=j^Y$IX9nDB*!fyXwR8I zfv=5Nl@#1f){2pOzx|gMHlznvM2F>IqQe!&_x%fz43wHD@M%woB`j|>6*BUpbMLwvR7#I zdjeI<>gU93_uM0>?0vco;R3`tObS`v(a-n>g2lh#K>T>X5Popr^jV{(8Sv>g!edP| zH5D4hibc)U{HRFZD*RaRMECldNET!%Q^2O#%e66kq>rIVeUC844yNDa-etT376}OR z<$hmE&^euZsU_&M$Vp}&0x(rcnQ%}-pa9YjRp%CRbbtmi4d{pr`{uB4brkty=Y^R) zALkvdTo~*J^6KexmxCy&8PqzZ5@bD54<0;F)Y^RjD0Xk$&eJR6&0|Tca$WwAX%0%| zh4;PA_^lT?u6>&d;|Ye0Q_!6_V0>K4@9Yff?zYm_(vM~3!Jp47v9GCOd*>N6NF&Y= z`xg@{<@`~8yu6Sk8_Y%Ouet>$b)GEuK*rF@WpL7K+v<^aI?m6K-y@Y@e^ac}4# zPL|*e>S+-$q5<&4opyz4UlOz+Dv3SvQmRvqzku863$)gMu2z&I#%@Du-?EDwd|YIq zED^vfh!E?+>Ys1Gh(byj0j#v5kWQo~*kRiqqCtvUpU~J9PQcW7q?vx|`dz{Wz5LcO zoE1{C7kT%uR8oA?3fEeg>G)D_KuXlQ?~3vs1HvCm^>s5N?yYth!8j_$F*_@Z>RYP` zp!lqqvckeoRoHL!;YyWSs?W2@*gZ}pA&J?ye_+5Ryg&w~0rgVcz4VQ{2HbZ2L|!JGC z+b?@lOJ1H>N)e?2}%Fmf`zIaw3r+V)3dQQ@r&|LynT@9+Bi*Jrt&?SUT>8xUrM zjt&M(k1iV<8@*D~*SpK)bShe91B1&lh74@xC}f9Y<9aSZYJcdMotmC&AG7jDJ;k>5 z^_vjlQO8#qm>$R#wy*XxEIrvKH(Wp?%~OK**&mU_NvxDKM4 z3D}V7pOm>+U-6aXUcBg5@a{WAi7);1g7R)?)5f8h=TK^4`S~|HN2%5hAAws=OHFV` z*)f-Dr1I|o6UL{M=@yIBU|Z%Mb^=WvUyci{7o{v9rRPwkj!3-h*Vv3kLJn8_=5W>b z5&gddPdZJGj$P9B)(evD?%Z5IsM4@RwSHbG+wzg~sa*G!l;wtej5RJ zj~#S1SWGrYp_e>rEV|;~z5A|q%y;Vl$x{CpIr1-stbcMA{yzpYrfqzW`9@2`S!6}e z?s;vsL~GcFG7F!7V<)+A2eY$z<65Oe=rWt4ie+I>Pe@*EC-lyIZ{ktOH<={zB@NgD z##nnhwTJYQNy&0hethaokKxltoRKG6ucx#>e zFwH$R#k=_wp8T^%d?z(xAK8ZEQA*9&426_;rjZS|ca%?h{)3zHEIy>H zIC#kS`m@=Dr+!RMD~lr!e=;zKn{7PO#WHTlp~$UhQX+_C)E+vsu{WMMbzTyzbQqZq zz#*qlbtHR+wLF^ZH*$9hG#<4TetG?F?IS&b>A>%G$8-bOtW*%JG9*laW*BmcU|*3$ zt>^U;IQ)H%*7a83HwRYc6js2iDUMC-7MCdHd`(@qkScl9%&iGg?ZgD`nnQiObcgp$BdU$w_7*-v$smF}mIRvi|!qlsn$ zhV*9O-5OtvOJW39;&?t4x#nxQ!*%@l7`^ zA-_KjjEOB#BTgYSS_Eh$4N1y$J>*^+*qM%#_s9h9uC*`7&lLui<^kM``S-1`Jd`7_ zz7cz(7>$m#n1IGUd=fH~0Xmrq6!oFxuAk92$()+t^w+^{NF;FkuosbkKLi@W%|7D$ zCjRu2Oj4H$L>6`LORmY3nRC2A3D#sQ6YY(zPsH65(|8U$a95UfF)g#fPDcU zOwa?XIFYZh+<&m32EXv&!v`Atclfad3Y`LT(Bzmq#BT)89V)+^{94Ji49@2Hr;&6I zjDnYZJ>08y*JQ?nSTr(!cfH>4%cok&-^W}a9_cDXuzU<0nQsKa%Imi4&HChHXigQd zwZ4Fy{n=Fp4rDfopa#b@!S?Y>S37ZN{V;0Fun_PQ5j#5bxCl(s6o&0AP2$# zjL3@ciapPbV~&g)KW4y7$c$@_On#_T@B;v6zr(Mns!IhK=fKIFbWakhvIyV-#V~SY zI~p>v*M4{yf%;BE@D16O1rrV4+-;;X|Gz_Vld(STWIVA=(eV>-NGZ-xGTExaPq3R6-Dw?nEdl|ya`D4O4w+{WO5egyrb)T8DK{Mm zLK8ocdhS!>wwLaX!AXiSFywPSxj;l@*X)hQ6rD5p(}{Kmx^bd*wCFquVwPqUsl6N`E!BD3S4$D2aw>Q?bQgYJ z?1S3&#`oVTh+HmqW21NLHX{H4_Oy5=E-uv_=}S0N%3KHu+zDHr3(kc#)^z6&?1b!w zo(kOA#4^3@n0|fqlNr%9ktN_!>W6Wdbdr$C3wd0S{f%~hezR)o9}ja3$(dUPn{fr} zZgGkf0uEh6w*+o6xV~wp>FMd%<((R$(s%dQ4O=v`u#BMj10sg=D|90eP`#wnl_bYT zo-U(hlP6fpgPVD)ap5P(2PR|{0yr#d(duGeUo6z{TGvisZ!5SB%=}GKvNSqojv4Ac zlI&%}2@2d&*VPUDZfa?9EyENL>~m;?LMu(#>r}x`TtQ1m-uZ$C^Q6B{j<# z0zK}phuVAGNv;xIq8r?`8dfakLxd>{ZOaG}jfkKSO~Y8I28crg|3Dw-aHzcF2}6Tw z>|OZ#MsNlhC}Ox$YBU`PV(BGvC9YAasg5h&XL`VS&^!AfSf(o#q9BWWe6Z2hS`xTS zp~*d$!`KC!pfsAdPz^|kFsl^3mva(=_vy%_5V0Ula=GV{&oJinImI_4p_}EHj-S6!KBg&ugbTnqA11jY-<%Bh)sUK$jsJ`$I`k$L%_Q;tOrq5^eosz&x1gl{U5N;1y!0jrAw$T zC+@^mT!9SPXg9rUXzPP^yu1(yCh53VGGolYMTXl#KotEA0`te&O3KP`7M@Fy`u(L5 zAJ2_P@GC2`l-=m*VsV$v=$AfxdUIn?wKejoz?Oc&qCw@3wz)^EmqPVX*|PB0o)6i6 zYxkpxSuuT9+|{j5$j+RAX(tTUaA|%(qC}K!jO89^Xn)U<4>SBm!W5Ej)tAg_@Y+~Y zG%!rDgzb3YTE(l(?%6Uc%lBaGYj5M1f(VSnCjScd zJfh3lFR{p)klI{L(&$1z7cbvc+VTnFGt`E(_#J+KkRr}>GbI;-*x=q|@|8f9tzW3Y zm<(owI%({FD4id7#NR%mue}(8j$$9)(~#D@Vi4~4df}m%^G*P#qH9FGMjVxSC2mDi z{I3XY2L~L(1+s#4YVoqiXip3UptX4?Xqjfn}p*0ws1*_(GB{g!`{>_T6wF$F+wvzSNS1ZatkuZ5mJ$#LPrP?Z8&p?Ft zN`y%JN%!+r{f{?^$779Ho=_7>%bsOzFHepF?=)hGHFX8c=tE4w+2%46$xhR{(f!fGt_og;;V=*z#86mUr{J5srqpnZh zFDL)JnEgQMw6Be{;?Ia+-=qfN!k5ZwvzZoF*Ebi9XY zU%hZ^>0o7ofqTP_Zj?0JbANYbLc_q{YS;m_XLZe(nJM;y&r4D=?@BQ%(xGw#@kyZj z6mV4|;XS1xjA7K@6uW%Op`!ZKoPwVgV*W4+KosD+X*AJH__jU1=4bapJjCZ0Uc)G* zeY?(5FJNe{a$G;(wkPd9(<@z?VdaR1B-c`nfR6-+gWwB?1U$`ph(F&D(np?;KAH_t z6hV*?Bzn`3AxCtK!^9%G!?Sz}&j?tCh+^#Mb(TD1SdOdg7GsW@Qtr$ZvmTQ^+Os8iWig%jik@Z`d;kDg1|WXgg6ZUQ`1QCCLYGY$M- Di!0X> diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index 8527227a42b1dc97f56c69979fdefc014854640c..a9aae824add9db91918ad5c592c553594ab50a89 100644 GIT binary patch literal 8722 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 Date: Tue, 1 Sep 2015 15:38:56 -0300 Subject: [PATCH 012/479] Fixes the latejoin message about the evacuation shuttle showing on incorrect times. --- code/controllers/subsystem/shuttles.dm | 20 +++++++++++--------- code/modules/mob/new_player/new_player.dm | 2 +- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 4c04c91bbdf..89bc2bd0dfd 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -128,21 +128,23 @@ var/datum/subsystem/shuttle/SSshuttle return /datum/subsystem/shuttle/proc/cancelEvac(mob/user) + if(canRecall()) + emergency.cancel(get_area(user)) + log_game("[key_name(user)] has recalled the shuttle.") + message_admins("[key_name_admin(user)] has recalled the shuttle.") + return 1 + +/datum/subsystem/shuttle/proc/canRecall() if(emergency.mode != SHUTTLE_CALL) return - if(ticker.mode.name == "meteor") return - - if((seclevel2num(get_security_level()) == SEC_LEVEL_RED)) + if(seclevel2num(get_security_level()) == SEC_LEVEL_RED) if(emergency.timeLeft(1) < emergencyCallTime * 0.25) return - else if(emergency.timeLeft(1) < emergencyCallTime * 0.5) - return - - emergency.cancel(get_area(user)) - log_game("[key_name(user)] has recalled the shuttle.") - message_admins("[key_name_admin(user)] has recalled the shuttle.") + else + if(emergency.timeLeft(1) < emergencyCallTime * 0.5) + return return 1 /datum/subsystem/shuttle/proc/autoEvac() diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index 2b4776c12b7..f8f6eea2413 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -318,7 +318,7 @@ if(SHUTTLE_ESCAPE) dat += "

The station has been evacuated.

" if(SHUTTLE_CALL) - if(SSshuttle.emergency.timeLeft() < 0.5 * initial(SSshuttle.emergencyCallTime)) //Shuttle is past the point of no recall + if(!SSshuttle.canRecall()) dat += "
The station is currently undergoing evacuation procedures.

" var/available_job_count = 0 From 4ead97230630607b7b2a3e1887a4acc7ac19a30d Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 1 Sep 2015 19:40:02 +0100 Subject: [PATCH 013/479] Drying agent. Recolor dry shoes use define --- code/__DEFINES/misc.dm | 4 ++++ code/game/turfs/simulated.dm | 15 ++++++++------- code/modules/clothing/shoes/miscellaneous.dm | 4 ++-- .../mob/living/carbon/human/human_movement.dm | 2 +- .../Chemistry-Reagents/Other-Reagents.dm | 16 ++++++++++++++++ .../reagents/Chemistry-Recipes/Others.dm | 10 ++++++++-- icons/mob/feet.dmi | Bin 13260 -> 13271 bytes icons/obj/clothing/shoes.dmi | Bin 8722 -> 8701 bytes 8 files changed, 39 insertions(+), 12 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 94da0533b1a..dead1273fc8 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -244,3 +244,7 @@ #define FACING_EACHOTHER 2 #define FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR 3 //Do I win the most informative but also most stupid define award? +//Turf wet states +#define TURF_DRY 0 +#define TURF_WET_WATER 1 +#define TURF_WET_LUBE 2 \ No newline at end of file diff --git a/code/game/turfs/simulated.dm b/code/game/turfs/simulated.dm index 1348d227dfb..7ab497abae8 100644 --- a/code/game/turfs/simulated.dm +++ b/code/game/turfs/simulated.dm @@ -17,11 +17,11 @@ /turf/simulated/proc/burn_tile() -/turf/simulated/proc/MakeSlippery(wet_setting = 1) // 1 = Water, 2 = Lube +/turf/simulated/proc/MakeSlippery(wet_setting = TURF_WET_WATER) // 1 = Water, 2 = Lube if(wet >= wet_setting) return wet = wet_setting - if(wet_setting == 1) + if(wet_setting == TURF_WET_WATER) if(wet_overlay) overlays -= wet_overlay wet_overlay = null @@ -37,9 +37,10 @@ return MakeDry(wet_setting) -/turf/simulated/proc/MakeDry(wet_setting = 1) - if(wet > wet_setting) return - wet = 0 +/turf/simulated/proc/MakeDry(wet_setting = TURF_WET_WATER) + if(wet > wet_setting) + return + wet = TURF_DRY if(wet_overlay) overlays -= wet_overlay @@ -48,11 +49,11 @@ if (istype(A,/mob/living/carbon)) var/mob/living/carbon/M = A switch(wet) - if(1) //wet floor + if(TURF_WET_WATER) if(!M.slip(4, 2, null, NO_SLIP_WHEN_WALKING)) M.inertia_dir = 0 return - if(2) //lube + if(TURF_WET_LUBE) M.slip(0, 7, null, (SLIDE|GALOSHES_DONT_HELP)) /turf/simulated/ChangeTurf(var/path) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index d9e9a87ebdf..3015b00ca88 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -65,12 +65,12 @@ /obj/item/clothing/shoes/galoshes/dry name = "absorbent galoshes" desc = "A pair of orange rubber boots, designed to prevent slipping on wet surfaces while also drying them." - icon_state = "galoshes_oj" + icon_state = "galoshes_dry" /obj/item/clothing/shoes/galoshes/dry/step_action() var/turf/simulated/t_loc = get_turf(src) if(istype(t_loc) && t_loc.wet) - t_loc.MakeDry(1) //dry if water, but not lube + t_loc.MakeDry(TURF_WET_WATER) /obj/item/clothing/shoes/clown_shoes desc = "The prankster's standard-issue clowning shoes. Damn, they're huge!" diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 664933c175b..b88ce85beda 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -45,7 +45,7 @@ return shoes && shoes.negates_gravity() /mob/living/carbon/human/Move(NewLoc, direct) - . = ..() + . = ..() if(dna) for(var/datum/mutation/human/HM in dna.mutations) HM.on_move(src, NewLoc) diff --git a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm index f763cd1f201..79f0000ce2e 100644 --- a/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Other-Reagents.dm @@ -1009,3 +1009,19 @@ reagent_state = LIQUID color = "#60A584" // rgb: 96, 165, 132 +/datum/reagent/drying_agent + name = "Drying agent" + id = "drying_agent" + description = "Can be used to dry things." + reagent_state = LIQUID + color = "#A70FFF" + +/datum/reagent/drying_agent/reaction_turf(turf/simulated/T, reac_volume) + if(istype(T) && T.wet) + T.MakeDry(TURF_WET_WATER) + +/datum/reagent/drying_agent/reaction_obj(obj/O, reac_volume) + if(O.type == /obj/item/clothing/shoes/galoshes) + var/t_loc = get_turf(O) + qdel(O) + new /obj/item/clothing/shoes/galoshes/dry(t_loc) \ No newline at end of file diff --git a/code/modules/reagents/Chemistry-Recipes/Others.dm b/code/modules/reagents/Chemistry-Recipes/Others.dm index aa015604409..c3614639f7b 100644 --- a/code/modules/reagents/Chemistry-Recipes/Others.dm +++ b/code/modules/reagents/Chemistry-Recipes/Others.dm @@ -12,14 +12,14 @@ result = "lube" required_reagents = list("water" = 1, "silicon" = 1, "oxygen" = 1) result_amount = 4 - + /datum/chemical_reaction/spraytan name = "Spray Tan" id = "spraytan" result = "spraytan" required_reagents = list("orangejuice" = 1, "oil" = 1) result_amount = 2 - + /datum/chemical_reaction/spraytan2 name = "Spray Tan" id = "spraytan" @@ -254,6 +254,12 @@ required_reagents = list("toxin" = 1, "ethanol" = 4) result_amount = 5 +/datum/chemical_reaction/drying_agent + name = "Drying agent" + id = "drying_agent" + result = "drying_agent" + required_reagents = list("stable_plasma" = 2, "ethanol" = 1, "sodium" = 1) + result_amount = 3 //////////////////////////////////// Other goon stuff /////////////////////////////////////////// diff --git a/icons/mob/feet.dmi b/icons/mob/feet.dmi index 7e368a557b9e3cb2818ff3f01f894809e4c9f03f..0994856ff60bea8f2c981539262c265b2a5fe9a6 100644 GIT binary patch literal 13271 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
g8@jt>C6n2G=))XWe0` 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 diff --git a/icons/obj/clothing/shoes.dmi b/icons/obj/clothing/shoes.dmi index a9aae824add9db91918ad5c592c553594ab50a89..e4326609bbde6acde2cb2dbb479165a2a6dc70a5 100644 GIT binary patch literal 8701 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 literal 8722 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 Date: Wed, 2 Sep 2015 01:32:02 +0100 Subject: [PATCH 014/479] Bloody footprints! Human blood, Xeno blood, and Oil can now produce bloody footprints that fade off as the blood on the shoe fades. Affects gibs too. --- code/__DEFINES/misc.dm | 19 +++++++ .../effects/decals/Cleanable/aliens.dm | 4 +- .../effects/decals/Cleanable/humans.dm | 56 ++++++++++++++++++- .../effects/decals/Cleanable/robots.dm | 4 ++ code/game/objects/effects/decals/cleanable.dm | 29 +++++++++- code/game/turfs/simulated/dirtystation.dm | 2 + code/modules/clothing/clothing.dm | 7 +++ code/modules/clothing/shoes/miscellaneous.dm | 20 +++++++ .../mob/living/carbon/human/update_icons.dm | 8 +++ 9 files changed, 146 insertions(+), 3 deletions(-) diff --git a/code/__DEFINES/misc.dm b/code/__DEFINES/misc.dm index 94da0533b1a..0222e02a718 100644 --- a/code/__DEFINES/misc.dm +++ b/code/__DEFINES/misc.dm @@ -244,3 +244,22 @@ #define FACING_EACHOTHER 2 #define FACING_INIT_FACING_TARGET_TARGET_FACING_PERPENDICULAR 3 //Do I win the most informative but also most stupid define award? + +//Cache of bloody footprint images +//Key: +//"entered-[blood_state]-[dir_of_image]" +//or: "exited-[blood_state]-[dir_of_image]" +var/list/bloody_footprints_cache = list() + +//Bloody shoes/footprints +#define MAX_SHOE_BLOODINESS 100 +#define BLOODY_FOOTPRINT_BASE_ALPHA 100 +#define BLOOD_GAIN_PER_STEP 50 +#define BLOOD_LOSS_PER_STEP 5 +#define BLOOD_FADEOUT_TIME 2 + +//Bloody shoe blood states +#define BLOOD_STATE_HUMAN "blood" +#define BLOOD_STATE_XENO "xeno" +#define BLOOD_STATE_OIL "oil" +#define BLOOD_STATE_NOT_BLOODY "no blood whatsoever" \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/aliens.dm b/code/game/objects/effects/decals/Cleanable/aliens.dm index 35f583eddb8..1326a890d7d 100644 --- a/code/game/objects/effects/decals/Cleanable/aliens.dm +++ b/code/game/objects/effects/decals/Cleanable/aliens.dm @@ -12,6 +12,8 @@ random_icon_states = list("xfloor1", "xfloor2", "xfloor3", "xfloor4", "xfloor5", "xfloor6", "xfloor7") var/list/viruses = list() blood_DNA = list("UNKNOWN DNA" = "X*") + bloodiness = MAX_SHOE_BLOODINESS + blood_state = BLOOD_STATE_XENO /obj/effect/decal/cleanable/xenoblood/Destroy() for(var/datum/disease/D in viruses) @@ -65,4 +67,4 @@ /obj/effect/decal/cleanable/blood/xtracks icon_state = "xtracks" random_icon_states = null - blood_DNA = list("UNKNOWN DNA" = "X*") \ No newline at end of file + blood_DNA = list("UNKNOWN DNA" = "X*") diff --git a/code/game/objects/effects/decals/Cleanable/humans.dm b/code/game/objects/effects/decals/Cleanable/humans.dm index 3770ad0d8d8..567eb1cf56e 100644 --- a/code/game/objects/effects/decals/Cleanable/humans.dm +++ b/code/game/objects/effects/decals/Cleanable/humans.dm @@ -10,6 +10,8 @@ random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") var/list/viruses = list() blood_DNA = list() + blood_state = BLOOD_STATE_HUMAN + bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/blood/Destroy() for(var/datum/disease/D in viruses) @@ -104,4 +106,56 @@ /obj/effect/decal/cleanable/blood/drip/New() ..() spawn(1) - drips |= icon_state \ No newline at end of file + drips |= icon_state + bloodiness = rand(5,15) + + +//BLOODY FOOTPRINTS +/obj/effect/decal/cleanable/blood/footprints + icon = 'icons/effects/footprints.dmi' + icon_state = "nothingwhatsoever" + desc = "Follow the bloody brick road!" + gender = PLURAL + random_icon_states = null + var/entered_dirs = 0 + var/exited_dirs = 0 + blood_state = BLOOD_STATE_HUMAN //the icon state to load images from + +/obj/effect/decal/cleanable/blood/footprints/Crossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + if(H.shoes) //Don't need to check for blood, as the footprints will MAKE the shoes bloody + entered_dirs|= H.dir + update_icon() + +/obj/effect/decal/cleanable/blood/footprints/Uncrossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + if(H.shoes) + exited_dirs|= H.dir + update_icon() + +/obj/effect/decal/cleanable/blood/footprints/update_icon() + overlays.Cut() + + for(var/Ddir in cardinal) + if(entered_dirs & Ddir) + var/image/I + if(bloody_footprints_cache["entered-[blood_state]-[Ddir]"]) + I = bloody_footprints_cache["entered-[blood_state]-[Ddir]"] + else + I = image(icon,"[blood_state]1",dir = Ddir) + bloody_footprints_cache["entered-[blood_state]-[Ddir]"] = I + if(I) + overlays += I + if(exited_dirs & Ddir) + var/image/I + if(bloody_footprints_cache["exited-[blood_state]-[Ddir]"]) + I = bloody_footprints_cache["exited-[blood_state]-[Ddir]"] + else + I = image(icon,"[blood_state]2",dir = Ddir) + bloody_footprints_cache["exited-[blood_state]-[Ddir]"] = I + if(I) + overlays += I + + alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness \ No newline at end of file diff --git a/code/game/objects/effects/decals/Cleanable/robots.dm b/code/game/objects/effects/decals/Cleanable/robots.dm index c72182823a8..7ab0d3a6363 100644 --- a/code/game/objects/effects/decals/Cleanable/robots.dm +++ b/code/game/objects/effects/decals/Cleanable/robots.dm @@ -10,6 +10,8 @@ icon = 'icons/mob/robots.dmi' icon_state = "gib1" random_icon_states = list("gib1", "gib2", "gib3", "gib4", "gib5", "gib6", "gib7") + blood_state = BLOOD_STATE_OIL + bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/robot_debris/proc/streak(list/directions) spawn (0) @@ -50,6 +52,8 @@ icon_state = "floor1" var/viruses = list() random_icon_states = list("floor1", "floor2", "floor3", "floor4", "floor5", "floor6", "floor7") + blood_state = BLOOD_STATE_OIL + bloodiness = MAX_SHOE_BLOODINESS /obj/effect/decal/cleanable/oil/New() ..() diff --git a/code/game/objects/effects/decals/cleanable.dm b/code/game/objects/effects/decals/cleanable.dm index 175e24f9caf..9442f80760a 100644 --- a/code/game/objects/effects/decals/cleanable.dm +++ b/code/game/objects/effects/decals/cleanable.dm @@ -1,5 +1,7 @@ /obj/effect/decal/cleanable var/list/random_icon_states = list() + var/blood_state = "" //I'm sorry but cleanable/blood code is ass, and so is blood_DNA + var/bloodiness = 0 //0-100, amount of blood in this decal, used for making footprints and affecting the alpha of bloody footprints /obj/effect/decal/cleanable/New() if (random_icon_states && length(src.random_icon_states) > 0) @@ -40,4 +42,29 @@ if(reagents) reagents.chem_temp += 30 reagents.handle_reactions() - ..() \ No newline at end of file + ..() + + +//Add "bloodiness" of this blood's type, to the human's shoes +//This is on /cleanable because fuck this ancient mess +/obj/effect/decal/cleanable/Crossed(atom/movable/O) + if(ishuman(O)) + var/mob/living/carbon/human/H = O + if(H.shoes && blood_state) + var/obj/item/clothing/shoes/S = H.shoes + var/add_blood = 0 + if(bloodiness >= BLOOD_GAIN_PER_STEP) + add_blood = BLOOD_GAIN_PER_STEP + else + add_blood = bloodiness + bloodiness -= add_blood + S.bloody_shoes[blood_state] = min(MAX_SHOE_BLOODINESS,S.bloody_shoes[blood_state]+add_blood) + S.blood_state = blood_state + alpha = BLOODY_FOOTPRINT_BASE_ALPHA+bloodiness + update_icon() + H.update_inv_shoes() + if(!bloodiness) + animate(src,alpha = 0,BLOOD_FADEOUT_TIME) + sleep(BLOOD_FADEOUT_TIME) + qdel(src) + return \ No newline at end of file diff --git a/code/game/turfs/simulated/dirtystation.dm b/code/game/turfs/simulated/dirtystation.dm index 4313ed418a4..4ebaf2586c7 100644 --- a/code/game/turfs/simulated/dirtystation.dm +++ b/code/game/turfs/simulated/dirtystation.dm @@ -11,6 +11,7 @@ ..() icon_state += "-old" blood_DNA["Non-human DNA"] = "A+" + bloodiness = rand(10,50) /obj/effect/decal/cleanable/blood/gibs/old name = "old rotting gibs" @@ -21,6 +22,7 @@ icon_state += "-old" dir = pick(1,2,4,8) blood_DNA["Non-human DNA"] = "A+" + bloodiness = rand(10,50) /obj/effect/decal/cleanable/vomit/old name = "crusty dried vomit" diff --git a/code/modules/clothing/clothing.dm b/code/modules/clothing/clothing.dm index 1997ac51b41..05f35c301cb 100644 --- a/code/modules/clothing/clothing.dm +++ b/code/modules/clothing/clothing.dm @@ -149,6 +149,13 @@ BLIND // can't see anything permeability_coefficient = 0.50 slowdown = SHOES_SLOWDOWN + var/blood_state = BLOOD_STATE_NOT_BLOODY + var/list/bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + +/obj/item/clothing/shoes/clean_blood() + ..() + bloody_shoes = list(BLOOD_STATE_HUMAN = 0,BLOOD_STATE_XENO = 0, BLOOD_STATE_OIL = 0, BLOOD_STATE_NOT_BLOODY = 0) + blood_state = BLOOD_STATE_NOT_BLOODY /obj/item/proc/negates_gravity() return 0 diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 58101dca40a..70feb539dc4 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,4 +1,24 @@ /obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking + if(ishuman(loc)) + var/mob/living/carbon/human/H = loc + if(istype(H.shoes)) + var/obj/item/clothing/shoes/S = H.shoes + var/turf/T = get_turf(H) + if(S.bloody_shoes && S.bloody_shoes[S.blood_state]) + var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T + if(oldFP && oldFP.blood_state == S.blood_state) + return + else + //No oldFP or it's a different kind of blood + S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP) + var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) + FP.blood_state = S.blood_state + FP.entered_dirs |= H.dir + FP.bloodiness = S.bloody_shoes[S.blood_state] + FP.update_icon() + H.update_inv_shoes() + + /obj/item/clothing/shoes/suicide_act(mob/user) user.visible_message("[user] is bashing their own head in with [src]! Ain't that a kick in the head?") diff --git a/code/modules/mob/living/carbon/human/update_icons.dm b/code/modules/mob/living/carbon/human/update_icons.dm index 69d80ba80ba..88599a8eb1d 100644 --- a/code/modules/mob/living/carbon/human/update_icons.dm +++ b/code/modules/mob/living/carbon/human/update_icons.dm @@ -362,7 +362,15 @@ Please contact me on #coderbus IRC. ~Carnie x standing = image("icon"='icons/mob/feet.dmi', "icon_state"="[shoes.icon_state]", "layer"=-layer2use) overlays_standing[SHOES_LAYER] = standing + //Bloody shoes + var/obj/item/clothing/shoes/S = shoes + var/bloody = 0 if(shoes.blood_DNA) + bloody = 1 + else + bloody = S.bloody_shoes[BLOOD_STATE_HUMAN] + + if(bloody) standing.overlays += image("icon"='icons/effects/blood.dmi', "icon_state"="shoeblood") apply_overlay(SHOES_LAYER) From c5608414383de3fdc4013f0724d842bb5edc5981 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Wed, 2 Sep 2015 01:48:20 +0100 Subject: [PATCH 015/479] Moves bloody footprint code out of step_action() and into human/Move() --- code/modules/clothing/shoes/miscellaneous.dm | 20 ------------------- .../mob/living/carbon/human/human_movement.dm | 18 +++++++++++++++++ 2 files changed, 18 insertions(+), 20 deletions(-) diff --git a/code/modules/clothing/shoes/miscellaneous.dm b/code/modules/clothing/shoes/miscellaneous.dm index 70feb539dc4..58101dca40a 100644 --- a/code/modules/clothing/shoes/miscellaneous.dm +++ b/code/modules/clothing/shoes/miscellaneous.dm @@ -1,24 +1,4 @@ /obj/item/clothing/shoes/proc/step_action() //this was made to rewrite clown shoes squeaking - if(ishuman(loc)) - var/mob/living/carbon/human/H = loc - if(istype(H.shoes)) - var/obj/item/clothing/shoes/S = H.shoes - var/turf/T = get_turf(H) - if(S.bloody_shoes && S.bloody_shoes[S.blood_state]) - var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T - if(oldFP && oldFP.blood_state == S.blood_state) - return - else - //No oldFP or it's a different kind of blood - S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP) - var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) - FP.blood_state = S.blood_state - FP.entered_dirs |= H.dir - FP.bloodiness = S.bloody_shoes[S.blood_state] - FP.update_icon() - H.update_inv_shoes() - - /obj/item/clothing/shoes/suicide_act(mob/user) user.visible_message("[user] is bashing their own head in with [src]! Ain't that a kick in the head?") diff --git a/code/modules/mob/living/carbon/human/human_movement.dm b/code/modules/mob/living/carbon/human/human_movement.dm index 664933c175b..683aadeaa3e 100644 --- a/code/modules/mob/living/carbon/human/human_movement.dm +++ b/code/modules/mob/living/carbon/human/human_movement.dm @@ -55,5 +55,23 @@ if(!has_gravity(loc)) return var/obj/item/clothing/shoes/S = shoes + + //Bloody footprints + var/turf/T = get_turf(src) + if(S.bloody_shoes && S.bloody_shoes[S.blood_state]) + var/obj/effect/decal/cleanable/blood/footprints/oldFP = locate(/obj/effect/decal/cleanable/blood/footprints) in T + if(oldFP && oldFP.blood_state == S.blood_state) + return + else + //No oldFP or it's a different kind of blood + S.bloody_shoes[S.blood_state] = max(0, S.bloody_shoes[S.blood_state]-BLOOD_LOSS_PER_STEP) + var/obj/effect/decal/cleanable/blood/footprints/FP = new /obj/effect/decal/cleanable/blood/footprints(T) + FP.blood_state = S.blood_state + FP.entered_dirs |= dir + FP.bloodiness = S.bloody_shoes[S.blood_state] + FP.update_icon() + update_inv_shoes() + //End bloody footprints + S.step_action() From 3e3767c1d0a593564ba66ea5f2fdae99bcc315b0 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Wed, 2 Sep 2015 12:43:39 +0100 Subject: [PATCH 016/479] Tweak --- code/game/objects/effects/aliens.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/game/objects/effects/aliens.dm b/code/game/objects/effects/aliens.dm index 3d883523560..256f7b30e7a 100644 --- a/code/game/objects/effects/aliens.dm +++ b/code/game/objects/effects/aliens.dm @@ -196,14 +196,14 @@ qdel(src) return + if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) + return + for(var/turf/T in U.GetAtmosAdjacentTurfs()) if (locate(/obj/structure/alien/weeds) in T || istype(T, /turf/space)) continue - if(!linked_node || get_dist(linked_node, src) > linked_node.node_range) - return - new /obj/structure/alien/weeds(T, linked_node) From 77405d49b0a910673a69ceba1ba288100ae1c64a Mon Sep 17 00:00:00 2001 From: bgobandit Date: Wed, 2 Sep 2015 14:15:42 -0400 Subject: [PATCH 017/479] Tweaks numbers upward. --- code/modules/clothing/glasses/glasses.dm | 2 +- code/modules/clothing/under/ties.dm | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/code/modules/clothing/glasses/glasses.dm b/code/modules/clothing/glasses/glasses.dm index 2f8316feeb9..2e14ea3d82e 100644 --- a/code/modules/clothing/glasses/glasses.dm +++ b/code/modules/clothing/glasses/glasses.dm @@ -1,6 +1,6 @@ /obj/item/clothing/glasses name = "glasses" - materials = list(MAT_GLASS = 100) + materials = list(MAT_GLASS = 250) /obj/item/clothing/glasses/meson name = "Optical Meson Scanner" diff --git a/code/modules/clothing/under/ties.dm b/code/modules/clothing/under/ties.dm index 33f19e7f5eb..3bb34fbe5db 100644 --- a/code/modules/clothing/under/ties.dm +++ b/code/modules/clothing/under/ties.dm @@ -84,7 +84,7 @@ desc = "A bronze medal." icon_state = "bronze" item_color = "bronze" - materials = list(MAT_METAL=250) + materials = list(MAT_METAL=1000) burn_state = -1 //Won't burn in fires //Pinning medals on people @@ -126,7 +126,7 @@ desc = "A silver medal." icon_state = "silver" item_color = "silver" - materials = list(MAT_SILVER=250) + materials = list(MAT_SILVER=1000) /obj/item/clothing/tie/medal/silver/valor name = "medal of valor" @@ -141,7 +141,7 @@ desc = "A prestigious golden medal." icon_state = "gold" item_color = "gold" - materials = list(MAT_GOLD=250) + materials = list(MAT_GOLD=1000) /obj/item/clothing/tie/medal/gold/captain name = "medal of captaincy" From 94490f12d190602c00feb58ffc35195bf4671992 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Wed, 2 Sep 2015 20:32:38 -0400 Subject: [PATCH 018/479] Adds some meat spike functionality. --- .../items/stacks/sheets/sheet_types.dm | 1 + code/game/objects/structures/kitchen_spike.dm | 215 ++++++++++-------- .../changelogs/bgobandit - hardmeatspikes.yml | 4 + icons/obj/kitchen.dmi | Bin 19756 -> 20934 bytes 4 files changed, 127 insertions(+), 93 deletions(-) create mode 100644 html/changelogs/bgobandit - hardmeatspikes.yml diff --git a/code/game/objects/items/stacks/sheets/sheet_types.dm b/code/game/objects/items/stacks/sheets/sheet_types.dm index 7d780f9bdd1..37be2211ce5 100644 --- a/code/game/objects/items/stacks/sheets/sheet_types.dm +++ b/code/game/objects/items/stacks/sheets/sheet_types.dm @@ -31,6 +31,7 @@ var/global/list/datum/stack_recipe/metal_recipes = list ( \ new/datum/stack_recipe("firelock frame", /obj/structure/firelock_frame, 3, time = 50, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("machine frame", /obj/machinery/constructable_frame/machine_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ new/datum/stack_recipe("turret frame", /obj/machinery/porta_turret_construct, 5, time = 25, one_per_turf = 1, on_floor = 1), \ + new/datum/stack_recipe("meatspike frame", /obj/structure/kitchenspike_frame, 5, time = 25, one_per_turf = 1, on_floor = 1), \ null, \ new/datum/stack_recipe("grenade casing", /obj/item/weapon/grenade/chem_grenade), \ new/datum/stack_recipe("light fixture frame", /obj/item/light_fixture_frame, 2), \ diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 07936884c99..338288debdf 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -2,13 +2,47 @@ #define SKINTYPE_MONKEY 1 #define SKINTYPE_ALIEN 2 #define SKINTYPE_BEAR 3 +#define SKINTYPE_CORGI 4 #define MEATTYPE_MONKEY 1 #define MEATTYPE_ALIEN 2 #define MEATTYPE_BEAR 3 +#define MEATTYPE_CORGI 4 //////Kitchen Spike +/obj/structure/kitchenspike_frame + name = "meatspike frame" + icon = 'icons/obj/kitchen.dmi' + icon_state = "spikeframe" + desc = "The frame of a meat spike." + density = 1 + anchored = 0 + +/obj/structure/kitchenspike_frame/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) + if(istype(W)) + user << "You begin [anchored ? "un" : ""]securing [name]..." + playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) + if(do_after(user, time, target = src)) + user << "You [anchored ? "un" : ""]secure [name]." + anchored = !anchored + playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) + return 1 + return 0 + +/obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params) + add_fingerprint(user) + if(default_unfasten_wrench(user, I)) + return + else if(istype(I, /obj/item/stack/rods)) + var/obj/item/stack/rods/R = I + if(R.get_amount() >= 4) + R.use(4) + user << "You add spikes to the frame." + var/obj/F = new /obj/structure/kitchenspike(src.loc,) + transfer_fingerprints_to(F) + qdel(src) + /obj/structure/kitchenspike name = "meat spike" icon = 'icons/obj/kitchen.dmi' @@ -25,55 +59,55 @@ /obj/structure/kitchenspike/attack_paw(mob/user) return src.attack_hand(usr) -/obj/structure/kitchenspike/attackby(obj/item/weapon/grab/G, mob/user, params) - if(!istype(G, /obj/item/weapon/grab)) - return - if(istype(G.affecting, /mob/living/carbon/monkey)) - if(src.occupied == 0) - src.icon_state = "spikebloody" - src.occupied = 1 - src.meat = 5 - src.meattype = MEATTYPE_MONKEY - src.skin = 1 - src.skintype = SKINTYPE_MONKEY - for(var/mob/O in viewers(src, null)) - O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) - qdel(G.affecting) - qdel(G) - +/obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/crowbar)) + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + if(do_after(user, 20, target = src)) + user << "You pry the spikes out of the frame." + new /obj/item/stack/rods(loc, 4) + var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,) + transfer_fingerprints_to(F) + qdel(src) + else if(istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + if(istype(G.affecting, /mob/living/carbon/monkey) || istype (G.affecting, /mob/living/carbon/alien) || istype (G.affecting, /mob/living/simple_animal/hostile/bear) || istype (G.affecting, /mob/living/simple_animal/pet/dog/corgi)) + if(src.occupied == 0) + src.occupied = 1 + src.meat = 5 + src.skin = 1 + if(istype(G.affecting, /mob/living/carbon/monkey)) + src.meattype = MEATTYPE_MONKEY + src.skintype = SKINTYPE_MONKEY + src.icon_state = "spikebloody" + if(istype(G.affecting, /mob/living/carbon/alien)) + src.icon_state = "spikebloodygreen" + src.meattype = MEATTYPE_ALIEN + src.skintype = SKINTYPE_ALIEN + if(istype(G.affecting, /mob/living/simple_animal/hostile/bear)) + src.icon_state = "spikebloodybearz" + src.meattype = MEATTYPE_BEAR + src.skintype = SKINTYPE_BEAR + if(istype(G.affecting, /mob/living/simple_animal/pet/dog/corgi)) + src.icon_state = "spikecorgi" + src.meattype = MEATTYPE_CORGI + src.skintype = SKINTYPE_CORGI + var/mob/living/O = G.affecting + O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) + qdel(G.affecting) + qdel(G) + else + user << "The spike already has something on it, finish collecting its meat first!" + else if(istype(G.affecting, /mob/living/carbon/human)) + user.changeNext_move(CLICK_CD_MELEE) + playsound(src.loc, "sound/effects/splat.ogg", 25, 1) + var/mob/living/carbon/human/H = G.affecting + H.visible_message("[user] slams [G.affecting] into the meat spike!", "[user] slams you into the meat spike!", "You hear a squishy wet noise.") + H.adjustBruteLoss(25) else - user << "The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/carbon/alien)) - if(src.occupied == 0) - src.icon_state = "spikebloodygreen" - src.occupied = 1 - src.meat = 5 - src.meattype = MEATTYPE_ALIEN - src.skin = 1 - src.skintype = SKINTYPE_ALIEN - for(var/mob/O in viewers(src, null)) - O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) - qdel(G.affecting) - qdel(G) - else - user << "The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/simple_animal/hostile/bear)) - if(src.occupied == 0) - src.icon_state = "spikebloodybearz" - src.occupied = 1 - src.meat = 5 - src.meattype = MEATTYPE_BEAR - src.skin = 1 - src.skintype = SKINTYPE_BEAR - for(var/mob/O in viewers(src, null)) - O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) - qdel(G.affecting) - qdel(G) - else - user << "The spike already has something on it, finish collecting its meat first!" + user << "You can't use that on the spike!" + return else - user << "They are too big for the spike, try something smaller!" - return + ..() ///obj/structure/kitchenspike/MouseDrop_T(var/atom/movable/C, mob/user) // if(istype(C, /obj/mob/carbon/monkey) @@ -84,57 +118,52 @@ if(..()) return if(src.occupied) - if(src.meattype == MEATTYPE_MONKEY && src.skintype == SKINTYPE_MONKEY) - if(src.skin >= 1) - src.skin-- - new /obj/item/stack/sheet/animalhide/monkey(src.loc) - user << "You remove the hide from the monkey." - else if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc ) - usr << "You remove some meat from the monkey." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc) - usr << "You remove the last piece of meat from the monkey." - src.icon_state = "spike" - src.occupied = 0 - else if(src.meattype == MEATTYPE_ALIEN && src.skintype == SKINTYPE_ALIEN) - if(src.skin >= 1) - src.skin-- - new /obj/item/stack/sheet/animalhide/xeno(src.loc) - user << "You remove the hide from the alien." - else if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc ) - usr << "You remove some meat from the alien." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc) - usr << "You remove the last piece of meat from the alien." - src.icon_state = "spike" - src.occupied = 0 - else if(src.meattype == MEATTYPE_BEAR && src.skintype == SKINTYPE_BEAR) - if(src.skin >= 1) - src.skin-- - new /obj/item/clothing/head/bearpelt(src.loc) - user << "You remove the hide from the bear." - else if(src.meat > 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc ) - usr << "You remove some meat from the bear." - else if(src.meat == 1) - src.meat-- - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc) - usr << "You remove the last piece of meat from the bear." - src.icon_state = "spike" - src.occupied = 0 + if(src.skin >=1) + switch(src.skintype) + if(SKINTYPE_MONKEY) + new /obj/item/stack/sheet/animalhide/monkey(src.loc) + if(SKINTYPE_ALIEN) + new /obj/item/stack/sheet/animalhide/xeno(src.loc) + if(SKINTYPE_BEAR) + new /obj/item/clothing/head/bearpelt(src.loc) + if(SKINTYPE_CORGI) + new /obj/item/stack/sheet/animalhide/corgi(src.loc) + src.skin-- + usr << "You remove the hide from [src]." + else if (src.meat > 1) + switch(src.meattype) + if(MEATTYPE_MONKEY) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc ) + if(MEATTYPE_ALIEN) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc ) + if(MEATTYPE_BEAR) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc ) + if(MEATTYPE_CORGI) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src,loc ) + src.meat-- + usr << "You remove some meat from [src]." + else if (src.meat == 1) + switch(src.meattype) + if(MEATTYPE_MONKEY) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc) + if(MEATTYPE_ALIEN) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc) + if(MEATTYPE_BEAR) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc) + if(MEATTYPE_CORGI) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src.loc) + src.meat-- + src.icon_state = "spike" + src.occupied = 0 + usr << "You remove the last piece of meat from [src]." #undef SKINTYPE_MONKEY #undef SKINTYPE_ALIEN #undef SKINTYPE_BEAR +#undef SKINTYPE_CORGI #undef MEATTYPE_MONKEY #undef MEATTYPE_ALIEN -#undef MEATTYPE_BEAR \ No newline at end of file +#undef MEATTYPE_BEAR +#undef MEATTYPE_CORGI \ No newline at end of file diff --git a/html/changelogs/bgobandit - hardmeatspikes.yml b/html/changelogs/bgobandit - hardmeatspikes.yml new file mode 100644 index 00000000000..023e14b3658 --- /dev/null +++ b/html/changelogs/bgobandit - hardmeatspikes.yml @@ -0,0 +1,4 @@ +author: bgobandit +delete-after: True +changes: + - rscadd: "Meatspikes can now be constructed and deconstructed with metal and rods, as well as wrenched and unwrenched! Humans and corgis can be used on them as well." \ No newline at end of file diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index d485b53a828cf68ca929efc4f26a2cdeeb753f46..329ca9de64838e09d93e92118aac814295bb8eb9 100644 GIT binary patch literal 20934 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 W$3B-uI1BJ+gf#Eys1>Q01^fqJQl2^h literal 19756 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%0D#JvK#?L0 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 Y52qVDBpe*3B>(^b07*qoM6N<$g6~-+#Q*>R From 64089be82db898d89fe4be718435df182212b585 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Wed, 2 Sep 2015 20:43:12 -0400 Subject: [PATCH 019/479] I love typos --- code/game/objects/structures/kitchen_spike.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 338288debdf..064b98f6b4b 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -139,7 +139,7 @@ if(MEATTYPE_BEAR) new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc ) if(MEATTYPE_CORGI) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src,loc ) + new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src.loc ) src.meat-- usr << "You remove some meat from [src]." else if (src.meat == 1) From 1db6cc9d9a715e4e3d88ecaabdd84999b0e9a0e6 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Wed, 2 Sep 2015 22:04:22 -0400 Subject: [PATCH 020/479] Addresses super's concerns. Adjusts damage down. --- code/game/objects/structures/kitchen_spike.dm | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 064b98f6b4b..6efa9aa679f 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -61,17 +61,20 @@ /obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/crowbar)) - playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) - if(do_after(user, 20, target = src)) - user << "You pry the spikes out of the frame." - new /obj/item/stack/rods(loc, 4) - var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,) - transfer_fingerprints_to(F) - qdel(src) + if(!src.occupied) + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + if(do_after(user, 20, target = src)) + user << "You pry the spikes out of the frame." + new /obj/item/stack/rods(loc, 4) + var/obj/F = new /obj/structure/kitchenspike_frame(src.loc,) + transfer_fingerprints_to(F) + qdel(src) + else + user << "You can't do that while something's on the spike!" else if(istype(I, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = I if(istype(G.affecting, /mob/living/carbon/monkey) || istype (G.affecting, /mob/living/carbon/alien) || istype (G.affecting, /mob/living/simple_animal/hostile/bear) || istype (G.affecting, /mob/living/simple_animal/pet/dog/corgi)) - if(src.occupied == 0) + if(!src.occupied) src.occupied = 1 src.meat = 5 src.skin = 1 @@ -102,7 +105,7 @@ playsound(src.loc, "sound/effects/splat.ogg", 25, 1) var/mob/living/carbon/human/H = G.affecting H.visible_message("[user] slams [G.affecting] into the meat spike!", "[user] slams you into the meat spike!", "You hear a squishy wet noise.") - H.adjustBruteLoss(25) + H.adjustBruteLoss(20) else user << "You can't use that on the spike!" return @@ -118,19 +121,7 @@ if(..()) return if(src.occupied) - if(src.skin >=1) - switch(src.skintype) - if(SKINTYPE_MONKEY) - new /obj/item/stack/sheet/animalhide/monkey(src.loc) - if(SKINTYPE_ALIEN) - new /obj/item/stack/sheet/animalhide/xeno(src.loc) - if(SKINTYPE_BEAR) - new /obj/item/clothing/head/bearpelt(src.loc) - if(SKINTYPE_CORGI) - new /obj/item/stack/sheet/animalhide/corgi(src.loc) - src.skin-- - usr << "You remove the hide from [src]." - else if (src.meat > 1) + if (src.meat > 1) switch(src.meattype) if(MEATTYPE_MONKEY) new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc ) @@ -153,9 +144,20 @@ if(MEATTYPE_CORGI) new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src.loc) src.meat-- + else if(src.skin >=1) + switch(src.skintype) + if(SKINTYPE_MONKEY) + new /obj/item/stack/sheet/animalhide/monkey(src.loc) + if(SKINTYPE_ALIEN) + new /obj/item/stack/sheet/animalhide/xeno(src.loc) + if(SKINTYPE_BEAR) + new /obj/item/clothing/head/bearpelt(src.loc) + if(SKINTYPE_CORGI) + new /obj/item/stack/sheet/animalhide/corgi(src.loc) + src.skin-- + usr << "You remove the hide from [src]." src.icon_state = "spike" src.occupied = 0 - usr << "You remove the last piece of meat from [src]." #undef SKINTYPE_MONKEY From 9d9351e7a6f8107c0d90c0e26d49875da1e541b9 Mon Sep 17 00:00:00 2001 From: Fox-McCloud Date: Wed, 2 Sep 2015 22:17:10 -0400 Subject: [PATCH 021/479] Fixes Bibles Not Revealing Runes --- code/game/gamemodes/cult/runes.dm | 4 ++-- html/changelogs/Fox P McCloud - runereveal .yml | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 html/changelogs/Fox P McCloud - runereveal .yml diff --git a/code/game/gamemodes/cult/runes.dm b/code/game/gamemodes/cult/runes.dm index ab505d83329..1e201d34adc 100644 --- a/code/game/gamemodes/cult/runes.dm +++ b/code/game/gamemodes/cult/runes.dm @@ -669,7 +669,7 @@ var/list/sacrificed = list() if (istype(W,/obj/item/weapon/paper/talisman)) rad = 4 go = 1 - if (istype(W,/obj/item/weapon/nullrod)) + if (istype(W,/obj/item/weapon/storage/book/bible)) rad = 1 go = 1 if(go) @@ -678,7 +678,7 @@ var/list/sacrificed = list() R.invisibility=0 S=1 if(S) - if(istype(W,/obj/item/weapon/nullrod)) + if(istype(W,/obj/item/weapon/storage/book/bible)) usr << "Arcane markings suddenly glow from underneath a thin layer of dust!" return if(istype(W,/obj/effect/rune)) diff --git a/html/changelogs/Fox P McCloud - runereveal .yml b/html/changelogs/Fox P McCloud - runereveal .yml new file mode 100644 index 00000000000..d27ca14db16 --- /dev/null +++ b/html/changelogs/Fox P McCloud - runereveal .yml @@ -0,0 +1,7 @@ + +author: Fox P McCloud + +delete-after: True + +changes: + - bugfix: "Fixes Bibles/holy books not properly revealing runes." From ae37baf75a5a573e6e8419872e498142f5f9655b Mon Sep 17 00:00:00 2001 From: bgobandit Date: Wed, 2 Sep 2015 22:59:48 -0400 Subject: [PATCH 022/479] Implements the absolute height of inconsistent stupidity. --- code/game/machinery/machinery.dm | 2 +- code/game/objects/structures/kitchen_spike.dm | 11 ----------- 2 files changed, 1 insertion(+), 12 deletions(-) diff --git a/code/game/machinery/machinery.dm b/code/game/machinery/machinery.dm index a4cdf6f6470..99e09d08084 100644 --- a/code/game/machinery/machinery.dm +++ b/code/game/machinery/machinery.dm @@ -366,7 +366,7 @@ Class Procs: return 1 return 0 -/obj/machinery/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) +/obj/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) if(istype(W)) user << "You begin [anchored ? "un" : ""]securing [name]..." playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 6efa9aa679f..45d2de8db64 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -19,17 +19,6 @@ density = 1 anchored = 0 -/obj/structure/kitchenspike_frame/proc/default_unfasten_wrench(mob/user, obj/item/weapon/wrench/W, time = 20) - if(istype(W)) - user << "You begin [anchored ? "un" : ""]securing [name]..." - playsound(src.loc, 'sound/items/Ratchet.ogg', 50, 1) - if(do_after(user, time, target = src)) - user << "You [anchored ? "un" : ""]secure [name]." - anchored = !anchored - playsound(src.loc, 'sound/items/Deconstruct.ogg', 50, 1) - return 1 - return 0 - /obj/structure/kitchenspike_frame/attackby(obj/item/I, mob/user, params) add_fingerprint(user) if(default_unfasten_wrench(user, I)) From 0adb97522ff39ce0e5380778462941df5c939494 Mon Sep 17 00:00:00 2001 From: duncathan Date: Wed, 2 Sep 2015 22:05:59 -0600 Subject: [PATCH 023/479] improves defines and meat/skin creation --- code/game/objects/structures/kitchen_spike.dm | 67 ++++++------------- 1 file changed, 21 insertions(+), 46 deletions(-) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 45d2de8db64..266773bc996 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,13 +1,13 @@ -#define SKINTYPE_MONKEY 1 -#define SKINTYPE_ALIEN 2 -#define SKINTYPE_BEAR 3 -#define SKINTYPE_CORGI 4 +#define SKINTYPE_MONKEY /obj/item/stack/sheet/animalhide/monkey +#define SKINTYPE_ALIEN /obj/item/stack/sheet/animalhide/xeno +#define SKINTYPE_BEAR /obj/item/clothing/head/bearpelt +#define SKINTYPE_CORGI /obj/item/stack/sheet/animalhide/corgi -#define MEATTYPE_MONKEY 1 -#define MEATTYPE_ALIEN 2 -#define MEATTYPE_BEAR 3 -#define MEATTYPE_CORGI 4 +#define MEATTYPE_MONKEY /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey +#define MEATTYPE_ALIEN /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno +#define MEATTYPE_BEAR /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear +#define MEATTYPE_CORGI /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi //////Kitchen Spike @@ -109,44 +109,19 @@ /obj/structure/kitchenspike/attack_hand(mob/user) if(..()) return - if(src.occupied) - if (src.meat > 1) - switch(src.meattype) - if(MEATTYPE_MONKEY) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc ) - if(MEATTYPE_ALIEN) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc ) - if(MEATTYPE_BEAR) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc ) - if(MEATTYPE_CORGI) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src.loc ) - src.meat-- - usr << "You remove some meat from [src]." - else if (src.meat == 1) - switch(src.meattype) - if(MEATTYPE_MONKEY) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/monkey(src.loc) - if(MEATTYPE_ALIEN) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/xeno(src.loc) - if(MEATTYPE_BEAR) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/bear(src.loc) - if(MEATTYPE_CORGI) - new /obj/item/weapon/reagent_containers/food/snacks/meat/slab/corgi(src.loc) - src.meat-- - else if(src.skin >=1) - switch(src.skintype) - if(SKINTYPE_MONKEY) - new /obj/item/stack/sheet/animalhide/monkey(src.loc) - if(SKINTYPE_ALIEN) - new /obj/item/stack/sheet/animalhide/xeno(src.loc) - if(SKINTYPE_BEAR) - new /obj/item/clothing/head/bearpelt(src.loc) - if(SKINTYPE_CORGI) - new /obj/item/stack/sheet/animalhide/corgi(src.loc) - src.skin-- - usr << "You remove the hide from [src]." - src.icon_state = "spike" - src.occupied = 0 + if(occupied) + if(meat >= 1) + new meattype(src.loc) + meat-- + if(meat > 1) + usr << "You remove some meat from [src]." + return + if(src.skin >=1) + new skintype(src.loc) + skin-- + usr << "You remove the hide from [src]." + src.icon_state = "spike" + src.occupied = 0 #undef SKINTYPE_MONKEY From 22b2c803fd7d8200550ddaae64e158537c9922d9 Mon Sep 17 00:00:00 2001 From: duncathan Date: Wed, 2 Sep 2015 22:39:58 -0600 Subject: [PATCH 024/479] improves setting of icon_state, meattype, and skintype in attackby() --- code/game/objects/structures/kitchen_spike.dm | 42 +++++++++++-------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 266773bc996..1acee34f3a0 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -45,6 +45,19 @@ var/skin = 0 var/skintype = null + var/global/list/meatlist = list( + "monkey" = MEATTYPE_MONKEY, + "alien" = MEATTYPE_ALIEN, + "bear" = MEATTYPE_BEAR, + "corgi" = MEATTYPE_CORGI, + ) + var/global/list/skinlist = list( + "monkey" = SKINTYPE_MONKEY, + "alien" = SKINTYPE_ALIEN, + "bear" = SKINTYPE_BEAR, + "corgi" = SKINTYPE_CORGI, + ) + /obj/structure/kitchenspike/attack_paw(mob/user) return src.attack_hand(usr) @@ -67,24 +80,17 @@ src.occupied = 1 src.meat = 5 src.skin = 1 - if(istype(G.affecting, /mob/living/carbon/monkey)) - src.meattype = MEATTYPE_MONKEY - src.skintype = SKINTYPE_MONKEY - src.icon_state = "spikebloody" - if(istype(G.affecting, /mob/living/carbon/alien)) - src.icon_state = "spikebloodygreen" - src.meattype = MEATTYPE_ALIEN - src.skintype = SKINTYPE_ALIEN - if(istype(G.affecting, /mob/living/simple_animal/hostile/bear)) - src.icon_state = "spikebloodybearz" - src.meattype = MEATTYPE_BEAR - src.skintype = SKINTYPE_BEAR - if(istype(G.affecting, /mob/living/simple_animal/pet/dog/corgi)) - src.icon_state = "spikecorgi" - src.meattype = MEATTYPE_CORGI - src.skintype = SKINTYPE_CORGI - var/mob/living/O = G.affecting - O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) + + var/list/affecting_path = text2list(path2text(G.affecting.type), "/") //we want affecting_type to be the last part of affecting's type path + var/affecting_type = affecting_path[affecting_path.len] //ex. if affecting.type is /mob/living/carbon/monkey, this will set affecting_type to "monkey" + + //set these vars to the appropriate values based on type + icon_state = "spikebloody[affecting_type]" + meattype = meatlist["[affecting_type]"] + skintype = skinlist["[affecting_type]"] + + var/mob/living/O = G.affecting + O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) qdel(G.affecting) qdel(G) else From 6c2dd46b078269d3ee5458af7e6c758e7bf67862 Mon Sep 17 00:00:00 2001 From: duncathan Date: Thu, 3 Sep 2015 00:10:29 -0600 Subject: [PATCH 025/479] fixes my mistakes haha woops --- code/game/objects/structures/kitchen_spike.dm | 51 +++++++++++------- icons/obj/kitchen.dmi | Bin 20934 -> 20942 bytes 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/code/game/objects/structures/kitchen_spike.dm b/code/game/objects/structures/kitchen_spike.dm index 1acee34f3a0..2587f2db3f1 100644 --- a/code/game/objects/structures/kitchen_spike.dm +++ b/code/game/objects/structures/kitchen_spike.dm @@ -1,4 +1,3 @@ - #define SKINTYPE_MONKEY /obj/item/stack/sheet/animalhide/monkey #define SKINTYPE_ALIEN /obj/item/stack/sheet/animalhide/xeno #define SKINTYPE_BEAR /obj/item/clothing/head/bearpelt @@ -45,6 +44,13 @@ var/skin = 0 var/skintype = null + var/global/list/allowed_types = list( //ugh I know it's a whitelist but it's not as god-awful and hacky as before. at least this way it's sustainable. i don't think there's even a better way than this. + /mob/living/carbon/monkey, + /mob/living/carbon/alien, + /mob/living/simple_animal/hostile/bear, + /mob/living/simple_animal/pet/dog/corgi, + ) + var/global/list/meatlist = list( "monkey" = MEATTYPE_MONKEY, "alien" = MEATTYPE_ALIEN, @@ -61,6 +67,12 @@ /obj/structure/kitchenspike/attack_paw(mob/user) return src.attack_hand(usr) +/obj/structure/kitchenspike/proc/is_mob_allowed(var/obj/item/weapon/grab/G) + for(var/I in allowed_types) + if(istype(G.affecting, I)) + return I + return 0 + /obj/structure/kitchenspike/attackby(obj/item/I, mob/user, params) if(istype(I, /obj/item/weapon/crowbar)) if(!src.occupied) @@ -73,16 +85,19 @@ qdel(src) else user << "You can't do that while something's on the spike!" - else if(istype(I, /obj/item/weapon/grab)) + return + if(istype(I, /obj/item/weapon/grab)) var/obj/item/weapon/grab/G = I - if(istype(G.affecting, /mob/living/carbon/monkey) || istype (G.affecting, /mob/living/carbon/alien) || istype (G.affecting, /mob/living/simple_animal/hostile/bear) || istype (G.affecting, /mob/living/simple_animal/pet/dog/corgi)) - if(!src.occupied) - src.occupied = 1 - src.meat = 5 - src.skin = 1 + var/allowed_type = is_mob_allowed(G) + if(allowed_type) + if(!occupied) + occupied = 1 + meat = 5 + skin = 1 - var/list/affecting_path = text2list(path2text(G.affecting.type), "/") //we want affecting_type to be the last part of affecting's type path - var/affecting_type = affecting_path[affecting_path.len] //ex. if affecting.type is /mob/living/carbon/monkey, this will set affecting_type to "monkey" + var/list/affecting_path = text2list("[allowed_type]", "/") //we want a specific part of the type path for this: the last part of the path in allowed_types + var/affecting_type = affecting_path[affecting_path.len] //ex. 1 if affecting.type is /mob/living/carbon/monkey, this will set affecting_type to "monkey" + //ex. 2 if affecting.type is /mob/living/carbon/alien/humanoid/queen, this will set affecting_type to "alien" //set these vars to the appropriate values based on type icon_state = "spikebloody[affecting_type]" @@ -90,22 +105,22 @@ skintype = skinlist["[affecting_type]"] var/mob/living/O = G.affecting - O.show_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) + O.visible_message(text("[user] has forced [G.affecting] onto the spike, killing them instantly!")) qdel(G.affecting) qdel(G) else - user << "The spike already has something on it, finish collecting its meat first!" - else if(istype(G.affecting, /mob/living/carbon/human)) + user << "The spike already has something on it; finish collecting its meat first!" + return + if(istype(G.affecting, /mob/living/carbon/human)) user.changeNext_move(CLICK_CD_MELEE) playsound(src.loc, "sound/effects/splat.ogg", 25, 1) var/mob/living/carbon/human/H = G.affecting H.visible_message("[user] slams [G.affecting] into the meat spike!", "[user] slams you into the meat spike!", "You hear a squishy wet noise.") H.adjustBruteLoss(20) - else - user << "You can't use that on the spike!" return - else - ..() + user << "You can't use that on the spike!" + return + ..() ///obj/structure/kitchenspike/MouseDrop_T(var/atom/movable/C, mob/user) // if(istype(C, /obj/mob/carbon/monkey) @@ -126,8 +141,8 @@ new skintype(src.loc) skin-- usr << "You remove the hide from [src]." - src.icon_state = "spike" - src.occupied = 0 + icon_state = "spike" + occupied = 0 #undef SKINTYPE_MONKEY diff --git a/icons/obj/kitchen.dmi b/icons/obj/kitchen.dmi index 329ca9de64838e09d93e92118aac814295bb8eb9..6e03c9f6f144174567e761ff882e2c0c53e3085e 100644 GIT binary patch delta 464 zcmV;>0Wbc>qXEvN0gxnrwt7@pbVOxyV{&P5bZKvH004NLotCj~+%OD=XZtCHWNnKi z*VRjLL2*O!3I;7vvV5|5pye~}?K>C=azj9>n+1G7#b2Z-Kbk+Ue^2k`_;zZq$V;Sb zI`jM2Q`>COmC#zkICXP(=C#xu;gf8SF>B62rK z5p#`TrhLYms9;Jd=FnfFCOVN!dE&DOopbcEf141l$Ramy3WOBQvx0e2FoT9kL{2Wy z2dGJZCp9K^QnnH}W~Zn?V5ObF6U+)~UF7x%99@zz&(Q@fMi<33+tHxpU&=(_(1}|N3A01)^`v~ZALO)#3VKwNzA6KK+-VIJvB$oE z+&rH-SJBfND&tRU_>Vn&&lNo~R?&5_cgGsVv_^|853`+<$K$XTtLTxn*l|cia)QyK zWrVrELeayPGWHvIub6T7B0G|$1f@cEg&b1?y{l8tJp+-*)WYs(;Tfr#E$cJ+&906mU_U zdb+!Bn=RNps!kmq+h&B|$Gjg>))`c%ZqgdgaMLz6P*Rg z)EKZVVT@t%{Td{G5qZiXomuF-1jj2k5%dL!<>pO*pn!Q0F!usxkT9|WeSwnjcTyr^ zCwVEJ!eRv#@FbMuY0|TRDv56oPr*hWa}=zXVz>$(*p7N3$7gRPG>{TjkiQi9v283w z{jNH7_;a{^lo7Rm1Z#24Vl y@6!O9KBP;s7wwL;hBFu>A7rQ_J^z}4TlM^QRL9p-`w0S-8FzbrKi;$B0qaja%h-Yd From 7e7b7bc491b3992ee8450dea41b7c5a151319079 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 3 Sep 2015 12:34:59 -0400 Subject: [PATCH 026/479] Tweaks the fuck out of blob chemicals: Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone. Added Cryogenic Liquid blob chemical, which does what you might expect. Changed effects of current blob chemicals to be either more useful or LESS useful. Also changed the names to look better with a different change in another PR. --- .../Chemistry-Reagents/Blob-Reagents.dm | 172 ++++++------------ .../Consumable-Reagents/Food-Reagents.dm | 2 +- .../Chemistry-Reagents/Toxin-Reagents.dm | 2 +- html/changelogs/Joan-blobchemswoowoo.yml | 12 ++ 4 files changed, 73 insertions(+), 115 deletions(-) create mode 100644 html/changelogs/Joan-blobchemswoowoo.yml diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 6265d0cb858..cd12093339a 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -1,18 +1,32 @@ // These can only be applied by blobs. They are what blobs are made out of. // The 4 damage /datum/reagent/blob + description = "" var/message = "The blob strikes you" //message sent to any mob hit by the blob var/message_living = null //extension to first mob sent to only living mobs i.e. silicons have no skin to be burnt /datum/reagent/blob/reaction_mob(mob/living/M, method=TOUCH, reac_volume, show_message, touch_protection) return round(reac_volume * min(1.5 - touch_protection, 1), 0.1) //full touch protection means 50% volume, any prot below 0.5 means 100% volume. -/datum/reagent/blob/boiling_oil +/datum/reagent/blob/ripping_tendrils //does brute and a little stamina damage + name = "Ripping Tendrils" + id = "ripping_tendrils" + color = "#7F0000" + message_living = ", and you feel your skin ripping and tearing off" + +/datum/reagent/blob/ripping_tendrils/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + reac_volume = ..() + M.apply_damage(0.6*reac_volume, BRUTE) + M.adjustStaminaLoss(0.4*reac_volume) + if(iscarbon(M)) + M.emote("scream") + +/datum/reagent/blob/boiling_oil //sets you on fire, does burn damage name = "Boiling Oil" id = "boiling_oil" - description = "" color = "#B68D00" message = "The blob splashes you with burning oil" + message_living = ", and you feel your skin char and melt" /datum/reagent/blob/boiling_oil/reaction_mob(mob/living/M, method=TOUCH, reac_volume) M.adjust_fire_stacks(round(reac_volume/12)) @@ -22,87 +36,58 @@ if(iscarbon(M)) M.emote("scream") -/datum/reagent/blob/toxic_goop - name = "Toxic Goop" - id = "toxic_goop" - description = "" - color = "#008000" +/datum/reagent/blob/envenomed_filaments //toxin, hallucination, and some bonus spore toxin + name = "Envenomed Filaments" + id = "envenomed_filaments" + color = "#9ACD32" message_living = ", and you feel sick and nauseated" -/datum/reagent/blob/toxic_goop/reaction_mob(mob/living/M, method=TOUCH, reac_volume) +/datum/reagent/blob/envenomed_filaments/reaction_mob(mob/living/M, method=TOUCH, reac_volume) reac_volume = ..() - M.apply_damage(0.8*reac_volume, TOX) + M.apply_damage(0.6*reac_volume, TOX) + M.hallucination += 0.6*reac_volume + M.reagents.add_reagent("spore", 0.4*reac_volume) -/datum/reagent/blob/skin_ripper - name = "Skin Ripper" - id = "skin_ripper" - description = "" - color = "#FF4C4C" - message_living = ", and you feel your skin ripping and tearing off" - -/datum/reagent/blob/skin_ripper/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - reac_volume = ..() - M.apply_damage(0.8*reac_volume, BRUTE) - if(iscarbon(M)) - M.emote("scream") - -// Combo Reagents - -/datum/reagent/blob/skin_melter - name = "Skin Melter" - id = "skin_melter" - description = "" - color = "#7F0000" - message_living = ", and you feel your skin char and melt" - -/datum/reagent/blob/skin_melter/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - M.adjust_fire_stacks(round(reac_volume/12)) - reac_volume = ..() - M.apply_damage(0.4*reac_volume, BRUTE) - M.apply_damage(0.4*reac_volume, BURN) - M.IgniteMob() - if(iscarbon(M)) - M.emote("scream") - -/datum/reagent/blob/lung_destroying_toxin - name = "Lung Destroying Toxin" - id = "lung_destroying_toxin" - description = "" +/datum/reagent/blob/lexorin_jelly //does tons of oxygen damage and a little brute + name = "Lexorin Jelly" + id = "lexorin_jelly" color = "#00FFC5" message_living = ", and your lungs feel heavy and weak" -/datum/reagent/blob/lung_destroying_toxin/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - reac_volume = ..() - M.apply_damage(0.8* reac_volume, OXY) - M.losebreath += round(0.6*reac_volume) - M.apply_damage(0.8*reac_volume, TOX) - -// Special Reagents - -/datum/reagent/blob/radioactive_liquid - name = "Radioactive Liquid" - id = "radioactive_liquid" - description = "" - color = "#00EE00" - message_living = ", and your skin feels papery and everything hurts" - -/datum/reagent/blob/radioactive_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume) +/datum/reagent/blob/lexorin_jelly/reaction_mob(mob/living/M, method=TOUCH, reac_volume) reac_volume = ..() M.apply_damage(0.4*reac_volume, BRUTE) - if(ishuman(M)) - M.irradiate(1.6*reac_volume) - if(prob(1.3*reac_volume)) - randmuti(M) - if(prob(98)) - randmutb(M) - domutcheck(M, null) - updateappearance(M) + M.apply_damage(1*reac_volume, OXY) + M.losebreath += round(0.3*reac_volume) -/datum/reagent/blob/dark_matter +/datum/reagent/blob/kinetic //does semi-random brute damage + name = "Kinetic Gelatin" + id = "kinetic" + color = "#FFA500" + message = "The blob pummels you" + +/datum/reagent/blob/kinetic/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + reac_volume = ..() + var/damage = rand(5, 35)/25 + M.apply_damage(damage*reac_volume, BRUTE) + +/datum/reagent/blob/cryogenic_liquid //does low burn damage and stamina damage and cools targets down + name = "Cryogenic Liquid" + id = "cryogenic_liquid" + color = "#8BA6E9" + message = "The blob splashes you with an icy liquid" + message_living = ", and you feel cold and tired" + +/datum/reagent/blob/cryogenic_liquid/reaction_mob(mob/living/M, method=TOUCH, reac_volume) + reac_volume = ..() + M.apply_damage(0.4*reac_volume, BURN) + M.adjustStaminaLoss(0.4*reac_volume) + M.reagents.add_reagent("frostoil", 0.4*reac_volume) + +/datum/reagent/blob/dark_matter //does brute damage and throws or pulls nearby objects at the target name = "Dark Matter" id = "dark_matter" - description = "" - color = "#61407E" + color = "#800080" message = "You feel a thrum as the blob strikes you, and everything flies at you" /datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume) @@ -110,56 +95,17 @@ reac_volume = ..() M.apply_damage(0.6*reac_volume, BRUTE) -/datum/reagent/blob/b_sorium +/datum/reagent/blob/sorium //does brute damage and throws or pushes nearby objects away from the target name = "Sorium" - id = "b_sorium" - description = "" + id = "sorium" color = "#808000" message = "The blob slams into you, and sends you flying" -/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume) +/datum/reagent/blob/sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume) reagent_vortex(M, 1, reac_volume) reac_volume = ..() M.apply_damage(0.6*reac_volume, BRUTE) -/datum/reagent/blob/explosive // I'm gonna burn in hell for this one - name = "Explosive Gelatin" - id = "explosive" - description = "" - color = "#FFA500" - message = "The blob strikes you, and its tendrils explode" - -/datum/reagent/blob/explosive/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - if(prob(3*reac_volume)) - explosion(M.loc, 0, 0, 1, 0, 0) - -/datum/reagent/blob/omnizine - name = "Omnizine" - id = "b_omnizine" - description = "" - color = "#C8A5DC" - message = "The blob squirts something at you" - message_living = ", and you feel great" - -/datum/reagent/blob/omnizine/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - reac_volume = ..() - M.reagents.add_reagent("omnizine", 0.6*reac_volume) - -/datum/reagent/blob/spacedrugs - name = "Space drugs" - id = "b_space_drugs" - description = "" - color = "#60A584" - message = "The blob squirts something at you" - message_living = ", and you feel funny" - -/datum/reagent/blob/spacedrugs/reaction_mob(mob/living/M, method=TOUCH, reac_volume) - reac_volume = ..() - M.hallucination += 0.8*reac_volume - M.reagents.add_reagent("space_drugs", 0.6*reac_volume) - M.apply_damage(0.4*reac_volume, TOX) - - /datum/reagent/blob/proc/reagent_vortex(mob/living/M, setting_type, reac_volume) var/turf/pull = get_turf(M) var/range_power = Clamp(round(reac_volume/5, 1), 1, 5) diff --git a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm index b951d205880..e8df9af6064 100644 --- a/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Consumable-Reagents/Food-Reagents.dm @@ -121,7 +121,7 @@ name = "Frost Oil" id = "frostoil" description = "A special oil that noticably chills the body. Extraced from Icepeppers." - color = "#B31008" // rgb: 139, 166, 233 + color = "#8BA6E9" // rgb: 139, 166, 233 /datum/reagent/consumable/frostoil/on_mob_life(mob/living/M) switch(current_cycle) diff --git a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm index fcdf66fa5b2..8cf1734dc42 100644 --- a/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Toxin-Reagents.dm @@ -221,7 +221,7 @@ id = "spore" description = "A toxic spore cloud which blocks vision when ingested." color = "#9ACD32" - toxpwr = 0.5 + toxpwr = 1 /datum/reagent/toxin/spore/on_mob_life(mob/living/M) M.damageoverlaytemp = 60 diff --git a/html/changelogs/Joan-blobchemswoowoo.yml b/html/changelogs/Joan-blobchemswoowoo.yml new file mode 100644 index 00000000000..2bc45c18bfb --- /dev/null +++ b/html/changelogs/Joan-blobchemswoowoo.yml @@ -0,0 +1,12 @@ +author: Joan + +delete-after: True + +changes: + - rscadd: "New blob chemical; Cryogenic Liquid. Cools down targets." + - tweak: "Tweaked names, colors, and effects of remaining blob chemicals; + - tweak: "Skin Ripper is now Ripping Tendrils and does minor stamina damage, in addition to the brute damage." + - tweak: "Toxic Goop is now Envenomed Filaments and injects targets with spore toxin and causes hallucinations, in addition to the toxin damage." + - tweak: "Lung Destroying Toxin is now Lexorin Jelly and does brute damage instead of toxin damage. The oxygen loss it causes can also no longer crit you in one hit." + - tweak: "Explosive Gelatin is now Kinetic Gelatin and does random brute damage, instead of randomly exploding targets." + - rscdel: "Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone." From 6046a266f7e1cf6e20cc7335ccd61aa5bc9f7f30 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 3 Sep 2015 12:56:50 -0400 Subject: [PATCH 027/479] MISS ONE " LOSE ALL HOPE --- html/changelogs/Joan-blobchemswoowoo.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/html/changelogs/Joan-blobchemswoowoo.yml b/html/changelogs/Joan-blobchemswoowoo.yml index 2bc45c18bfb..17fc20d805d 100644 --- a/html/changelogs/Joan-blobchemswoowoo.yml +++ b/html/changelogs/Joan-blobchemswoowoo.yml @@ -4,9 +4,9 @@ delete-after: True changes: - rscadd: "New blob chemical; Cryogenic Liquid. Cools down targets." - - tweak: "Tweaked names, colors, and effects of remaining blob chemicals; + - tweak: "Tweaked names, colors, and effects of remaining blob chemicals;" - tweak: "Skin Ripper is now Ripping Tendrils and does minor stamina damage, in addition to the brute damage." - tweak: "Toxic Goop is now Envenomed Filaments and injects targets with spore toxin and causes hallucinations, in addition to the toxin damage." - tweak: "Lung Destroying Toxin is now Lexorin Jelly and does brute damage instead of toxin damage. The oxygen loss it causes can also no longer crit you in one hit." - tweak: "Explosive Gelatin is now Kinetic Gelatin and does random brute damage, instead of randomly exploding targets." - - rscdel: "Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone." + - rscdel: "Skin Melter, Radioactive Liquid, Omnizine, and Space Drugs blob chemicals are gone." \ No newline at end of file From bfa73cad7deb45ef71a3ff21c54efc57710e250b Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 3 Sep 2015 15:39:38 -0400 Subject: [PATCH 028/479] ah yes, chemistry code --- code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index cd12093339a..05e2218aa31 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -95,13 +95,13 @@ reac_volume = ..() M.apply_damage(0.6*reac_volume, BRUTE) -/datum/reagent/blob/sorium //does brute damage and throws or pushes nearby objects away from the target +/datum/reagent/blob/b_sorium //does brute damage and throws or pushes nearby objects away from the target name = "Sorium" - id = "sorium" + id = "b_sorium" color = "#808000" message = "The blob slams into you, and sends you flying" -/datum/reagent/blob/sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume) +/datum/reagent/blob/b_sorium/reaction_mob(mob/living/M, method=TOUCH, reac_volume) reagent_vortex(M, 1, reac_volume) reac_volume = ..() M.apply_damage(0.6*reac_volume, BRUTE) From ff4c2c8a2d9ae7e3202334fb8351c34635fc982c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Thu, 3 Sep 2015 22:22:04 +0100 Subject: [PATCH 029/479] Fixed runtime. Fixed update icon bugs. --- code/game/machinery/doors/airlock.dm | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 06280cdb9ab..5d395097d98 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -89,13 +89,13 @@ About the new airlock wires panel: // You can find code for the airlock wires in the wire datum folder. /obj/machinery/door/airlock/proc/bolt() - if(locked) + if(locked || operating) return locked = 1 update_icon() /obj/machinery/door/airlock/proc/unbolt() - if(!locked) + if(!locked || operating) return locked = 0 update_icon() @@ -136,7 +136,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/isWireCut(wireIndex) // You can find the wires in the datum folder. - return wires.IsIndexCut(wireIndex) + return (wires && wires.IsIndexCut(wireIndex)) /obj/machinery/door/airlock/proc/canAIControl() return ((src.aiControlDisabled!=1) && (!src.isAllPowerCut())); @@ -565,21 +565,22 @@ About the new airlock wires panel: //disrupt main power if(src.secondsMainPowerLost == 0) src.loseMainPower() + update_icon() else usr << "Main power is already offline." if(3) //disrupt backup power if(src.secondsBackupPowerLost == 0) src.loseBackupPower() + update_icon() else usr << "Backup power is already offline." if(4) //drop door bolts if(src.isWireCut(AIRLOCK_WIRE_DOOR_BOLTS)) usr << "You can't drop the door bolts - The door bolt dropping wire has been cut." - else if(src.locked!=1) - src.locked = 1 - update_icon() + else + bolt() if(5) //un-electrify door if(src.isWireCut(AIRLOCK_WIRE_ELECTRIFY)) @@ -626,6 +627,7 @@ About the new airlock wires panel: usr << text("Control to door bolt lights has been severed.") else if (src.lights) lights = 0 + update_icon() else usr << text("Door bolt lights are already disabled!") @@ -633,6 +635,7 @@ About the new airlock wires panel: // Emergency access if (src.emergency) emergency = 0 + update_icon() else usr << text("Emergency access is already disabled!") @@ -656,8 +659,7 @@ About the new airlock wires panel: usr << text("The door bolts are already up.
\n") else if(src.hasPower()) - src.locked = 0 - update_icon() + unbolt() else usr << text("Cannot raise door bolts due to power failure.
\n") @@ -730,6 +732,7 @@ About the new airlock wires panel: usr << text("Control to door bolt lights has been severed.") else if (!src.lights) lights = 1 + update_icon() src.updateUsrDialog() else usr << text("Door bolt lights are already enabled!") @@ -738,11 +741,11 @@ About the new airlock wires panel: // Emergency access if (!src.emergency) emergency = 1 + update_icon() else usr << text("Emergency access is already enabled!") add_fingerprint(usr) - update_icon() if(!nowindow) updateUsrDialog() return @@ -1117,4 +1120,4 @@ About the new airlock wires panel: lights = 0 locked = 1 loseMainPower() - loseBackupPower() + loseBackupPower() From 4db08a755a395c384d6844d072bf8cc05524acd2 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 3 Sep 2015 17:28:04 -0400 Subject: [PATCH 030/479] Actually I think I prefer the old one, it's less red. --- code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm index 05e2218aa31..a6bb05181a7 100644 --- a/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents/Blob-Reagents.dm @@ -87,7 +87,7 @@ /datum/reagent/blob/dark_matter //does brute damage and throws or pulls nearby objects at the target name = "Dark Matter" id = "dark_matter" - color = "#800080" + color = "#61407E" message = "You feel a thrum as the blob strikes you, and everything flies at you" /datum/reagent/blob/dark_matter/reaction_mob(mob/living/M, method=TOUCH, reac_volume) From 677daeeb891cf3c16ee3290be526ce0559989f00 Mon Sep 17 00:00:00 2001 From: blah Date: Fri, 4 Sep 2015 13:08:19 +0100 Subject: [PATCH 031/479] Fixes custom tome structure from not providing light even though it has a candle lit on it cult/cult_structures.dm --- code/game/gamemodes/cult/cult_structures.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/game/gamemodes/cult/cult_structures.dm b/code/game/gamemodes/cult/cult_structures.dm index aaac82f87df..af2489e9af4 100644 --- a/code/game/gamemodes/cult/cult_structures.dm +++ b/code/game/gamemodes/cult/cult_structures.dm @@ -24,6 +24,7 @@ name = "desk" desc = "A desk covered in arcane manuscripts and tomes in unknown languages. Looking at the text makes your skin crawl" icon_state = "tomealtar" + luminosity = 1 /obj/effect/gateway name = "gateway" From 21c3c7733c102579c211808fb5f07f9054742f35 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 4 Sep 2015 13:46:55 +0100 Subject: [PATCH 032/479] Updated command airlock and hatch airlock overlays icons. --- icons/obj/doors/airlocks/hatch/overlays.dmi | Bin 4295 -> 7414 bytes icons/obj/doors/airlocks/station/command.dmi | Bin 4312 -> 4791 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/doors/airlocks/hatch/overlays.dmi b/icons/obj/doors/airlocks/hatch/overlays.dmi index ba39f7291e9c7674d077d313d8e1ef363073e6cd..8c0fd4e0ee9803536162ade157781d7130e6ddf5 100644 GIT binary patch literal 7414 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%0DxN1rU=;s>i!3qHmx*K z?Pd>8#FU3NlVNQywI<$S}wDdwep^8!I?CVq3chuzh>)bTCZZh zAnAhbmdM1q=NrxFrVV4rD8gQrXZrX~t>-j&+;KVZ0mpXEB^g*4Tf&g;BS=#AFg?U4 zuI7L`?~AWev($|yhGJTOj4CZ~fR!W3@K6IBaR7bY0=et6IE=&2zux9aM)K-cgQq9O zK4#x&^`br!F7K*?eAeQCH`nX+^4^)nc|V5GXL6+WkqRj0r+>Yrh-ea(sd)QwR;=eX zENqFCF#!vu)0{>;60Yq5F%J00Gs?u=^3^r5AjYym)gm=VGhSnwDY`HGHJ9&C>lyhy z9k0ocyX~xIi{yn+b+7q+OETyV60Yq8{e+q7OZ?2fC9<*v^(GotTrxBKwxzlPWVxfe zdbmQ@2h&N9`I;FMV@ogXe+#7sk_eyZX4nv^*~C_QYcq+wiZl7C zS}&Tc(pj#+=550L-s2@XgY@_-RoDayP7N4qGAr~qkWn__!S@Z~=rv@8Xonz4IUIr! zK@8Wo<^rDVjcom;b7X3;%i)c!E1VEos|f-|tZH|?YwB%9yXAxPxA7Ze=lwhP#sj5m z>_QHbgZpq<`T4wh&os2wMOeWXS(85{f5G+o+K5-iS7X+jr73td{I=HS1KjsUZl(Z2 zu~f+l02btq9lIpLnh*d_6XMl+Eq*r=QHPE9at5Wa<~%-j(wfi1(rL)%L3)gWu0GDL zT0h~AA8P0~m-(`Zkw0JhlW`XxLCf2f@XR?{U=$ybKyQ1SZ(}155N4TQ-rZ!-pd5Lz zmvu1df9A|Q>ACx$-qwjo8fkY=#mXd})*&uBP~)_!r2ZP@aTg%bgwuYA^4ApSjHie8 zmwr`#Lyd&?`_1O*lG6#$>PvV;25Kbpj7`!M3jgoG{~P`PFQ)e#VlwYbtpgj82ma3l N>D@8XD%Y@o`Cr%>SsVZW literal 4295 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 literal 4312 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 f>zDrkY##!bWz+N$ Date: Fri, 4 Sep 2015 18:30:58 -0400 Subject: [PATCH 033/479] Made some changes and repathing for posters. --- _maps/map_files/TgStation/tgstation.2.1.3.dmm | 4 +- code/datums/supplypacks.dm | 12 +- .../game/objects/effects/decals/contraband.dm | 381 ------------------ code/game/objects/effects/decals/posters.dm | 333 +++++++++++++++ .../game/objects/effects/spawners/lootdrop.dm | 3 +- .../objects/items/weapons/gift_wrappaper.dm | 4 +- code/game/turfs/simulated/walls.dm | 2 +- code/modules/mining/abandoned_crates.dm | 2 +- icons/obj/contraband.dmi | Bin 61605 -> 62020 bytes 9 files changed, 347 insertions(+), 394 deletions(-) delete mode 100644 code/game/objects/effects/decals/contraband.dm create mode 100644 code/game/objects/effects/decals/posters.dm diff --git a/_maps/map_files/TgStation/tgstation.2.1.3.dmm b/_maps/map_files/TgStation/tgstation.2.1.3.dmm index 8c901b1e43b..0f4faabbb09 100644 --- a/_maps/map_files/TgStation/tgstation.2.1.3.dmm +++ b/_maps/map_files/TgStation/tgstation.2.1.3.dmm @@ -52144,7 +52144,7 @@ "cby" = ( /obj/structure/table, /obj/item/weapon/stamp, -/obj/item/weapon/contraband/poster/legit, +/obj/item/weapon/poster/legit, /turf/simulated/floor/plating, /area/maintenance/fpmaint2) "cbz" = ( @@ -62451,7 +62451,7 @@ name = "2maintenance loot spawner" }, /obj/item/toy/minimeteor, -/obj/item/weapon/contraband/poster, +/obj/item/weapon/poster/contraband, /turf/simulated/floor/plating, /area/maintenance/asmaint) "cvS" = ( diff --git a/code/datums/supplypacks.dm b/code/datums/supplypacks.dm index 311699f3819..ed52302826d 100644 --- a/code/datums/supplypacks.dm +++ b/code/datums/supplypacks.dm @@ -1066,11 +1066,11 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/posters name = "Corporate Posters Crate" - contains = list(/obj/item/weapon/contraband/poster/legit, - /obj/item/weapon/contraband/poster/legit, - /obj/item/weapon/contraband/poster/legit, - /obj/item/weapon/contraband/poster/legit, - /obj/item/weapon/contraband/poster/legit) + contains = list(/obj/item/weapon/poster/legit, + /obj/item/weapon/poster/legit, + /obj/item/weapon/poster/legit, + /obj/item/weapon/poster/legit, + /obj/item/weapon/poster/legit) cost = 8 containername = "Corporate Posters Crate" @@ -1224,7 +1224,7 @@ var/list/all_supply_groups = list(supply_emergency,supply_security,supply_engine /datum/supply_packs/misc/randomised/contraband num_contained = 5 - contains = list(/obj/item/weapon/contraband/poster, + contains = list(/obj/item/weapon/poster/contraband, /obj/item/weapon/storage/fancy/cigarettes/dromedaryco, /obj/item/weapon/storage/fancy/cigarettes/cigpack_shadyjims) name = "Contraband Crate" diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm deleted file mode 100644 index e24d2ec12d2..00000000000 --- a/code/game/objects/effects/decals/contraband.dm +++ /dev/null @@ -1,381 +0,0 @@ - -//########################## CONTRABAND ;3333333333333333333 -Agouri ################################################### - -#define NUM_OF_POSTER_DESIGNS 33 //subtype 0-contraband posters - -#define NUM_OF_POSTER_DESIGNS_LEGIT 33 //subtype 1-corporate approved posters - -/obj/item/weapon/contraband - name = "contraband item" - desc = "You probably shouldn't be holding this." - icon = 'icons/obj/contraband.dmi' - force = 0 - - -/obj/item/weapon/contraband/poster - name = "rolled-up poster" - desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities." - icon_state = "rolled_poster" - var/serial_number = 0 - var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor - var/subtype = 0 - - -/obj/item/weapon/contraband/poster/New(turf/loc, given_serial = 0) - if(given_serial == 0) - if(subtype == 0) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) - resulting_poster = new(serial_number,subtype) - if(subtype == 1) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) - resulting_poster = new(serial_number,subtype) - else - serial_number = given_serial - //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. - name += " - No. [serial_number]" - ..(loc) - - -/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - if(resulting_poster) - resulting_poster.add_fingerprint(user) - ..()*/ - -/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() - if(istype(A, /turf/simulated/wall)) - if(resulting_poster == null) - return - else - var/turf/simulated/wall/W = A - var/check = 0 - var/stuff_on_wall = 0 - for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff - if(istype(O,/obj/structure/sign/poster)) - check = 1 - break - stuff_on_wall++ - if(stuff_on_wall == 3) - check = 1 - break - - if(check) - user << "The wall is far too cluttered to place a poster!" - return - - resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster - W.contents += resulting_poster - - qdel(src)*/ - - - -//############################## THE ACTUAL DECALS ########################### - -/obj/structure/sign/poster - name = "poster" - desc = "A large piece of space-resistant printed paper." - icon = 'icons/obj/contraband.dmi' - anchored = 1 - var/serial_number //Will hold the value of src.loc if nobody initialises it - var/ruined = 0 - var/subtype = 0 - -/obj/structure/sign/poster/New(serial,subtype) - serial_number = serial - - if(serial_number == loc) - if(subtype == 0) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. - if(subtype == 1) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) - if(subtype == 0) - icon_state = "poster[serial_number]" - switch(serial_number) - if(1) - name += " - Free Tonto" - desc += " A framed shred of a much larger flag, colors bled together and faded from age." - if(2) - name += " - Atmosia Declaration of Independence" - desc += " A relic of a failed rebellion." - if(3) - name += " - Fun Police" - desc += " A poster condemning the station's security forces." - if(4) - name += " - Lusty Xeno" - desc += " A heretical poster depicting the titular star of an equally heretical book." - if(5) - name += " - Syndicate Recruitment Poster" - desc += " See the galaxy! Shatter corrupt megacorporations! Join today!" - if(6) - name += " - Clown" - desc += " Honk." - if(7) - name += " - Smoke" - desc += " A poster depicting a carton of cigarettes." - if(8) - name += " - Grey Tide" - desc += " A rebellious poster symbolizing assistant solidarity." - if(9) - name += " - Missing Gloves" - desc += " This poster is about the uproar that followed Nanotrasen's financial cuts towards insulated-glove purchases." - if(10) - name += " - Hacking Guide" - desc += " This poster details the internal workings of the common Nanotrasen airlock." - if(11) - name += " - RIP Badger" - desc += " This poster commemorates the day hundreds of badgers worldwide were sacrificed for the greater good." - if(12) - name += " - Ambrosia Vulgaris" - desc += " This poster is lookin' pretty trippy man." - if(13) - name += " - Donut Corp." - desc += " This poster is an advertisement for Donut Corp." - if(14) - name += " - EAT" - desc += " This poster is advising that you eat." - if(15) - name += " - Tools" - desc += " This poster is an advertisement for tools." - if(16) - name += " - Power" - desc += " A poster all about power." - if(17) - name += " - Power to the People" - desc += " Screw those EDF guys!" - if(18) - name += " - Communist state" - desc += " All hail the Communist party!" - if(19) - name += " - Lamarr" - desc += " This poster depicts Lamarr. Probably made by the Research Director." - if(20) - name += " - Borg Fancy" - desc += " Being fancy can be for any borg, just need a suit." - if(21) - name += " - Borg Fancy v2" - desc += " Borg Fancy, Now only taking the most fancy." - if(22) - name += " - Kosmicheskaya Stantsiya 13 Does Not Exist" - desc += " A poster denying the existence of the derelict station near Space Station 13." - if(23) - name += " - Rebels Unite!" - desc += " A poster telling the viewer to rebel against Nanotrasen." - if(24) - name += " - C-20r Advertisment" - desc += " A poster advertising the Scarborough Arms C-20r." - if(25) - name += " - Have A Puff" - desc += " Who cares about lung cancer when you're high as a kite?" - if(26) - name += " - Revolver Advertisment" - desc += " Because seven shots are all you need." - if(27) - name += " - D-Day Promotional Poster" - desc += " A promotional poster for some rapper." - if(28) - name += " - Syndicate Pistol Advertisment" - desc += " A poster advertising syndicate pistols as being 'Classy as fuck'." - if(29) - name += " - E-sword Rainbow" - desc += " All the colors of bloody murder rainbow." - if(30) - name += " - Red Rum" - desc += " Looking at this poster makes you want to kill." - if(31) - name += " - CC 64K Advertisment" - desc += " The latest portable computer from Comrade Computing, with a whole 64kB of ram!" - if(32) - name += " - Punch Shit" - desc += " Fight things for no reason, like a man!" - if(33) - name += " - The Griffin" - desc += " The Griffin commands you to be the worst you can be. Will you?" - else - name += " - Error (subtype 0 serial_number)" - desc += " This is a bug, please report the circumstances under which you encountered this poster at https://github.com/tgstation/-tg-station/issues." - - if(subtype == 1) - icon_state = "poster[serial_number]_legit" - switch(serial_number) - if(1) - name += " - Here for Your Saftey" - desc += " A poster glorifying the station's security force." - if(2) - name += " - Nanotrasen Logo" - desc += " A poster depicting the logo of Nanotrasen." - if(3) - name += " - Cleanliness" - desc += " A poster warning of the dangers of poor hygiene." - if(4) - name += " - Help Others" - desc += " A poster encouraging you to help fellow crewmembers." - if(5) - name += " - Build" - desc += " A poster glorifying the engineering team." - if(6) - name += " - Bless This Spess" - desc += " A poster blessing this area." - if(7) - name += " - Science" - desc += " A poster depicting an atom." - if(8) - name += " - Ian" - desc += " Arf Arf." - if(9) - name += " - Obey" - desc += " A poster instructing the viewer to obey authority." - if(10) - name += " - Walk" - desc += " A poster instructing the viewer to walk instead of running." - if(11) - name += " - State Laws" - desc += " A poster instructing cyborgs to state their laws." - if(12) - name += " - Love Ian" - desc += " Ian is love, Ian is life." - if(13) - name += " - Space Cops" - desc += " A poster advertising the television show Space Cops." - if(14) - name += " - Ue No" - desc += " This thing is all in Japanese." - if(15) - name += " - Get Your LEGS" - desc += " LEGS: Leadership, Experiance, Genius, S(Opportunity)." - if(16) - name += " - Do Not Question" - desc += " A poster instructing the viewer not to ask about things they aren't meant to know." - if(17) - name += " - Work for a Future" - desc += " A poster encouraging you to work for your future, what it is, no one is really sure." - if(18) - name += " - Soft Cap Pop Art" - desc += " A poster reprint of some cheap pop art." - if(19) - name += " - Saftey: Internals" - desc += " A poster instructing the viewer to wear internals in environments where there is no oxygen or the air has been rendered toxic." - if(20) - name += " - Saftey: Eye Protection" - desc += " A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights." - if(21) - name += " - Saftey: Report" - desc += " A poster instructing the viewer to report suspicious activity to the security force." - if(22) - name += " - Report Crimes" - desc += " Report crimes at: 1-800-FUCKING-TERRORISTS or at https://www.sectorthirteen.nt/malconetents." - if(23) - name += " - Ion Rifle" - desc += " A poster displaying an Ion Rifle." - if(24) - name += " - Foam Force Advertisment" - desc += " Foam Force, it's Foam or be Foamed!" - if(25) - name += " - Cohiba Robusto Advertisment" - desc += " Cohiba Robusto, the classy cigar." - if(26) - name += " - 50th Aniversery Vintage Reprint" - desc += " A reprint of a poster from 2504, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen." - if(27) - name += " - Fruit Bowl" - desc += " Simple, yet awe inspiring." - if(28) - name += " - NanoPDA 1000 Advertisment" - desc += " A poster advertising the latest PDA from Nanotrasen." - if(29) - name += " - Enlist" - desc += " Enlist in the Nanotrasen Deathsquadron reserves today!" - if(30) - name += " - Nanomichi Advertisment" - desc += " A poster advertising Nanomichi brand audio cassettes." - if(31) - name += " - 12 Gauge" - desc += " A poster boasting about the superiority of 12 gauge shotgun shells." - if(32) - name += " - High-Class Martini" - desc += " I told you to shake it, no stirring" - if(33) - name += " - The Owl" - desc += " The Owl would do his best to protect the station. Will you?" - else - name += " - Error (subtype 1 serial_number)" - desc += " This is a bug, please report the circumstances under which you encountered this poster at https://github.com/NTStation/NTstation13/issues." - ..() - -/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - if(ruined) - user << "You remove the remnants of the poster." - qdel(src) - else - user << "You carefully remove the poster from the wall." - roll_and_drop(user.loc) - return - - -/obj/structure/sign/poster/attack_hand(mob/user) - if(ruined) - return - var/temp_loc = user.loc - switch(alert("Do I want to rip the poster from the wall?","You think...","Yes","No")) - if("Yes") - if( user.loc != temp_loc || ruined ) - return - visible_message("[user] rips [src] in a single, decisive motion!" ) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) - ruined = 1 - icon_state = "poster_ripped" - name = "ripped poster" - desc = "You can't make out anything from the poster's original print. It's ruined." - add_fingerprint(user) - if("No") - return - -/obj/structure/sign/poster/proc/roll_and_drop(turf/location) - var/obj/item/weapon/contraband/poster/P = new(src, serial_number) - P.resulting_poster = src - P.loc = location - loc = P - - -//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() -/turf/simulated/wall/proc/place_poster(obj/item/weapon/contraband/poster/P, mob/user) - if(!P.resulting_poster) return - - var/stuff_on_wall = 0 - for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff - if(istype(O,/obj/structure/sign/poster)) - user << "The wall is far too cluttered to place a poster!" - return - stuff_on_wall++ - if(stuff_on_wall == 3) - user << "The wall is far too cluttered to place a poster!" - return - - user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. - - //declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster - var/obj/structure/sign/poster/D = P.resulting_poster - - var/temp_loc = user.loc - flick("poster_being_set",D) - D.loc = src - qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway - playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1) - - sleep(17) - if(!D) return - - if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there - user << "You place the poster!" - else - D.roll_and_drop(temp_loc) - return - -//Putting non-contraband posters here because everything else here is related to posters anyway. -JS - -/obj/item/weapon/contraband/poster/legit - desc = "The poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. It's contents go through Nanotrasen's strict content guidlines." - icon_state = "rolled_poster_legit" - subtype = 1 diff --git a/code/game/objects/effects/decals/posters.dm b/code/game/objects/effects/decals/posters.dm new file mode 100644 index 00000000000..90fb526e7ca --- /dev/null +++ b/code/game/objects/effects/decals/posters.dm @@ -0,0 +1,333 @@ + +//########################## POSTERS ################################## + +#define NUM_OF_POSTER_DESIGNS 33 // contraband posters + +#define NUM_OF_POSTER_DESIGNS_LEGIT 33 // corporate approved posters + + +//########################## THE LIST OF POSTERS AND DESCS ##################### + +// please add new posters and names to their respective lists and update constant(s) above + +// CONTRABAND + +var/global/list/posternames = list( +"- Free Tonto", +"- Atmosia Declaration of Independence", +"- Fun Police", +"- Lusty Xenomorph", +"- Syndicate Recruitment", +"- Clown", +"- Smoke", +"- Grey Tide", +"- Missing Gloves", +"- Hacking Guide", +"- RIP Badger", +"- Ambrosia Vulgaris", +"- Donut Corp.", +"- EAT", +"- Tools", +"- Power", +"- Power to the People", +"- Communist State", +"- Lamarr", +"- Borg Fancy", +"- Borg Fancy v2", +"- Kosmicheskaya Stantsiya 13 Does Not Exist", +"- Rebels Unite", +"- C-20r", +"- Have a Puff", +"- Revolver", +"- D-Day Promo", +"- Syndicate Pistol", +"- Energy Swords", +"- Red Rum", +"- CC 64K Ad", +"- Punch Shit", +"- The Griffin" ) + +var/global/list/posterdescs = list( +" A salvaged shred of a much larger flag, colors bled together and faded from age.", +" A relic of a failed rebellion.", +" A poster condemning the station's security forces.", +" A heretical poster depicting the titular star of an equally heretical book.", +" See the galaxy! Shatter corrupt megacorporations! Join today!", +" Honk.", +" A poster advertising a rival corporate brand of cigarettes.", +" A rebellious poster symbolizing assistant solidarity.", +" This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases.", +" This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date.", +" This seditious poster references Nanotrasen's genocide of a space station full of badgers.", +" This poster is lookin' pretty trippy man.", +" This poster is an advertisement for Donut Corp.", +" This poster is advising rank gluttony.", +" This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm.", +" A poster that positions the seat of power outside Nanotrasen.", +" Screw those EDF guys!", +" All hail the Communist party!", +" This poster depicts Lamarr. Probably made by a traitorous Research Director.", +" Being fancy can be for any borg, just need a suit.", +" Borg Fancy, Now only taking the most fancy.", +" A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13.", +" A poster telling the viewer to rebel against Nanotrasen.", +" A poster advertising the Scarborough Arms C-20r.", +" Who cares about lung cancer when you're high as a kite?", +" Because seven shots are all you need.", +" A promotional poster for some rapper.", +" A poster advertising syndicate pistols as being 'Classy as fuck'. It is covered in faded gang tags.", +" All the colors of the bloody murder rainbow.",, +" Looking at this poster makes you want to kill.", +" The latest portable computer from Comrade Computing, with a whole 64kB of ram!", +" Fight things for no reason, like a man!", +" The Griffin commands you to be the worst you can be. Will you?" ) + +// LEGIT + +var/global/list/legitposternames = list( + +"- Here For Your Safety", +"- Nanotrasen Logo", +"- Cleanliness", +"- Help Others", +"- Build", +"- Bless This Spess", +"- Science", +"- Ian", +"- Obey", +"- Walk", +"- State Laws", +"- Love Ian", +"- Space Cops", +"- Ue No", +"- Get Your LEGS", +"- Do Not Question", +"- Work For a Future", +"- Soft Cap Pop Art", +"- Safety: Internals", +"- Safety: Eye Protection", +"- Safety: Report", +"- Report Crimes", // WHY ARE THERE TWO OF THESE +"- Ion Rifle", +"- Foam Force Ad", +"- Cohiba Robusto Ad", +"- 50th Anniversary Vintage Reprint", +"- Fruit Bowl", +"- ThinkTronic PDA 6000 Ad", +"- Enlist", +"- Nanomichi Ad", +"- 12 Gauge", +"- High-Class Martini", +"- The Owl" ) + +var/global/list/legitposterdescs = list( +" A poster glorifying the station's security force.", +" A poster depicting the Nanotrasen logo.", +" A poster warning of the dangers of poor hygiene.", +" A poster encouraging you to help fellow crewmembers.", +" A poster glorifying the engineering team.", +" A poster blessing this area.", +" A poster depicting an atom.", +" Arf Arf.", +" A poster instructing the viewer to obey authority.", +" A poster instructing the viewer to walk instead of running.", +" A poster instructing cyborgs to state their laws.", +" Ian is love, Ian is life.", +" A poster advertising the television show Space Cops.", +" This thing is all in Japanese.", +" LEGS: Leadership, Experience, Genius, Subordination.", +" A poster instructing the viewer not to ask about things they aren't meant to know.", +" A poster encouraging you to work for your future.", +" A poster reprint of some cheap pop art.", +" A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic.", +" A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights.", +" A poster instructing the viewer to report suspicious activity to the security force.", +" A poster encouraging the swift reporting of crime or seditious behavior to station security.", // seriously +" A poster displaying an Ion Rifle.", +" Foam Force, it's Foam or be Foamed!", +" Cohiba Robusto, the classy cigar.", +" A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen.", +" Simple, yet awe inspiring.", +" A poster advertising the latest PDA from Nanotrasen suppliers.", +" Enlist in the Nanotrasen Deathsquadron reserves today!", +" A poster advertising Nanomichi brand audio cassettes.", +" A poster boasting about the superiority of 12 gauge shotgun shells.", +" I told you to shake it, no stirring.", +" The Owl would do his best to protect the station. Will you?" ) + +//########################## THE ACTUAL POSTER CODE ########################### + +/obj/item/weapon/poster + name = "poster" + desc = "You probably shouldn't be holding this." + icon = 'icons/obj/contraband.dmi' + force = 0 + burn_state = 0 //Burnable + var/serial_number = 0 + var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor + var/official = 0 + + +/obj/item/weapon/poster/contraband + name = "contraband poster" + desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities." + icon_state = "rolled_poster" + +/obj/item/weapon/poster/legit + name = "motivational poster" + icon_state = "rolled_legit" + desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface." + official = 1 + +/obj/item/weapon/poster/New(turf/loc, given_serial = 0) + if(given_serial == 0) + if(!official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS) + resulting_poster = new(serial_number,official) + else + serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) + resulting_poster = new(serial_number,official) + else + serial_number = given_serial + //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. + name += " - No. [serial_number]" + ..(loc) + + +/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) + src.add_fingerprint(user) + if(resulting_poster) + resulting_poster.add_fingerprint(user) + ..()*/ + +/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() + if(istype(A, /turf/simulated/wall)) + if(resulting_poster == null) + return + else + var/turf/simulated/wall/W = A + var/check = 0 + var/stuff_on_wall = 0 + for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/structure/sign/poster)) + check = 1 + break + stuff_on_wall++ + if(stuff_on_wall == 3) + check = 1 + break + + if(check) + user << "The wall is far too cluttered to place a poster!" + return + + resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster + W.contents += resulting_poster + + qdel(src)*/ + + + +//############################## THE ACTUAL DECALS ########################### + +/obj/structure/sign/poster + name = "poster" + desc = "A large piece of space-resistant printed paper." + icon = 'icons/obj/contraband.dmi' + anchored = 1 + var/serial_number //Will hold the value of src.loc if nobody initialises it + var/ruined = 0 + var/official = 0 + var/placespeed = 37 // don't change this, otherwise the animation will not sync to the progress bar + +/obj/structure/sign/poster/New(serial,rolled_official) + serial_number = serial + official = rolled_official + if(serial_number == loc) + if(!official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. + if(official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) + if(!official) + icon_state = "poster[serial_number]" + name += posternames[serial_number] + desc += posterdescs[serial_number] + else if (official) + icon_state = "poster[serial_number]_legit" + name += legitposternames[serial_number] + desc += legitposterdescs[serial_number] + ..() + +/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/wirecutters)) + playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) + if(ruined) + user << "You remove the remnants of the poster." + qdel(src) + else + user << "You carefully remove the poster from the wall." + roll_and_drop(user.loc, official) + return + + +/obj/structure/sign/poster/attack_hand(mob/user) + if(ruined) + return + var/temp_loc = user.loc + if((user.loc != temp_loc) || ruined ) + return + visible_message("[user] rips [src] in a single, decisive motion!" ) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) + ruined = 1 + icon_state = "poster_ripped" + name = "ripped poster" + desc = "You can't make out anything from the poster's original print. It's ruined." + add_fingerprint(user) + +/obj/structure/sign/poster/proc/roll_and_drop(turf/location, official) + if (!official) + var/obj/item/weapon/poster/contraband/P = new(src, serial_number) + P.resulting_poster = src + P.loc = location + loc = P + else + var/obj/item/weapon/poster/legit/P = new(src, serial_number) + P.resulting_poster = src + P.loc = location + loc = P + + +//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() +/turf/simulated/wall/proc/place_poster(obj/item/weapon/poster/P, mob/user) + if(!P.resulting_poster) return + + var/stuff_on_wall = 0 + for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/structure/sign/poster)) + user << "The wall is far too cluttered to place a poster!" + return + stuff_on_wall++ + if(stuff_on_wall == 3) + user << "The wall is far too cluttered to place a poster!" + return + + user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. + + //declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster + var/obj/structure/sign/poster/D = P.resulting_poster + + var/temp_loc = user.loc + flick("poster_being_set",D) + D.loc = src + D.official = P.official + qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway + playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1) + + if(do_after(user,D.placespeed,target=src)) + if(!D) return + + if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there + user << "You place the poster!" + else + D.roll_and_drop(temp_loc,D.official) + return diff --git a/code/game/objects/effects/spawners/lootdrop.dm b/code/game/objects/effects/spawners/lootdrop.dm index 7ebec0531f1..47a2c3565d8 100644 --- a/code/game/objects/effects/spawners/lootdrop.dm +++ b/code/game/objects/effects/spawners/lootdrop.dm @@ -92,7 +92,8 @@ /obj/item/clothing/head/cone = 1, /obj/item/weapon/coin/silver = 1, /obj/item/weapon/coin/twoheaded = 1, - /obj/item/weapon/contraband/poster = 1, + /obj/item/weapon/poster/contraband = 1, + /obj/item/weapon/poster/legit = 1, /obj/item/weapon/crowbar = 1, /obj/item/weapon/crowbar/red = 1, /obj/item/weapon/extinguisher = 11, diff --git a/code/game/objects/items/weapons/gift_wrappaper.dm b/code/game/objects/items/weapons/gift_wrappaper.dm index f2374145ba1..6f5df0174ea 100644 --- a/code/game/objects/items/weapons/gift_wrappaper.dm +++ b/code/game/objects/items/weapons/gift_wrappaper.dm @@ -39,8 +39,8 @@ /obj/item/weapon/lipstick/random, /obj/item/weapon/grenade/smokebomb, /obj/item/weapon/grown/corncob, - /obj/item/weapon/contraband/poster, - /obj/item/weapon/contraband/poster/legit, + /obj/item/weapon/poster/contraband, + /obj/item/weapon/poster/legit, /obj/item/weapon/book/manual/barman_recipes, /obj/item/weapon/book/manual/chef_recipes, /obj/item/weapon/bikehorn, diff --git a/code/game/turfs/simulated/walls.dm b/code/game/turfs/simulated/walls.dm index fb1d315ce58..1ad087f0765 100644 --- a/code/game/turfs/simulated/walls.dm +++ b/code/game/turfs/simulated/walls.dm @@ -180,7 +180,7 @@ AH.try_build(src) return 1 //Poster stuff - else if(istype(W,/obj/item/weapon/contraband/poster)) + else if(istype(W,/obj/item/weapon/poster)) place_poster(W,user) return 1 diff --git a/code/modules/mining/abandoned_crates.dm b/code/modules/mining/abandoned_crates.dm index 06c4f46ae2c..12adf16e326 100644 --- a/code/modules/mining/abandoned_crates.dm +++ b/code/modules/mining/abandoned_crates.dm @@ -43,7 +43,7 @@ new /obj/item/weapon/ore/diamond(src) if(21 to 25) for(var/i = 0, i < 5, i++) - new /obj/item/weapon/contraband/poster(src) + new /obj/item/weapon/poster/contraband(src) if(26 to 30) for(var/i = 0, i < 3, i++) new /obj/item/weapon/reagent_containers/glass/beaker/noreact(src) diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi index 3e03b1b715525b77a4fa61b33f0bd20fcda4f6ce..0010b7f1113cbcd90ca83d6240e72f6ddb5a184d 100644 GIT binary patch delta 10860 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 delta 10442 zcmW++1ymh96UDu_dvS_86qf=;in}|7;x1)zcXyZK#ifOZYk?MbcXxQ$```C(_T(gI zPqLetxs%DA9oU60+k#J|gLO-yrvvt#w#td4V|EGX23K~2JlbCaet;FVh2agIj1ZA?${;YJ`#x~dUYlbw&Xs^?!?qu z;(x{N%u=jcyi1Pi+-(u=4!e4ZplrCN9~iGZ?RSPCt+bb--Cb#L|BC=91c3Te^ObNk z!@}U)pxlD(4e#eN_O$=T%MZ1?FIzQ|*>*@WU?e7@3@ z=sL;S*dpswCmztUtX_mh?jd5^c$sa9t;#>lsRZc#R^r`^N224DUo9{-m%}*BqC*kTn0?SFyqkQ1{(uO`HsP9} zsN*-4!`=@AS87^b5MWA)Va3u!J`jckg-a4`QNDM&u^pkRC1H74JAZk8-u&)st@%l? zW|IDb0-HlinLZ${-$1aSZCC`C_KC}iIZ-|kV+oHT>oa$X5<^zjL4xqXWS4-Kw)vUH zjZfEg=R>~Vr2qbEmjC{<=z(ANuqB%K4f*-A*J&!y%-+86Pp-FJbB%V;+j|v{C{jeM4urjG8*{& z#SXBQ0z)c1yaqcOPpRJV9A1{YUN6G>KG_qSCZ+}k&6aASO=Tn2uJpTpBIx-_Gi#;8 zM654_MK7be`RH<24D8)|ZEfCwbv2lP@1LpIqcQ^J0G`Qv{i zN-IhE#hj3M^Y~`AWSvmaS_b`cwo*1yI`DgUl0~S(2}gc|s96Vd zt%TX@AX>sOEk{H(gc{$k%H63Ylgr{GkBw1eujyvUGR5pXWkq8nD+9Xf6415+DDQ9e z7v)4?&8#gez;l9Ii4NCpDYckWevo|I-aqM9xhQ}5A@tSE3ja-#^#l=BSt)}@ok zN0Lq0vs-9=R}jy6S#|{C_d%xq)eUq1w3+bkm@H;G#-f()rOIP^`Bnxa`NtSk?rp#B{QQIdI;6jkdrHB~-10gKc>> z(A1QXlfw`fB1N(P<|&46dv7BC)7^9S9=%FoNz1}wZH%lWx-b)Q-f^f#rUw21!j#^< z6dv6)S}PoUai$+{l>LYhoo@064!xA1bUHZV21$6)w;3yjJ|z|-<{NB2@Nq73Wo z^AoC`-~#6NpAg_+;eufNyc9_!Yi9Q4PQ@|QZmuszC;tRKJ6bGNAs;!Wk?U+Ya3nSz zi3Yr_n5d_5M}=+tjunaqPO^I$2=_rfIy~#N_TY-(^UH;-hmJT)gm;&16|Zo{YkeDU z?PBF`Cz6p=)W3R`uY1FhOp!bc%6?Y6E!WYLDlyJR+D5A3QRu4ES-Xye#Mrdt67{!DktIRjKH>MR}Mo<|8QC{1}$uh$uz^la^ZkM*ZB+f>#QP5!qGHgV*C^Gum)2&g`qMvP1EvzF*>RoVdNj#@8e3m zkvjKoJXoA!7tL&d3r_KXm+nXp8I(_@sEOAghJS697&BLft|##@m!tPQMB?-y^%q}Z zqs*BJRqBpDLPZ8gFDgf`f~wlVWYmyXs9Mdx2+Y`c$?f4yQPJ5;Owq(5{u^?&pg19T zotm0TsqNBptJ=~3(hi;iMS-b4AA^wL{>~h1YcvhrJbee+nC*DCFykNCUiPhS9g~MZ zE$P%flaPnx+iWatm&^|+FyB?xv_2Ur$GKA=7DJNKdr_}uq}qE3h>X!B+=c}e)?-Cz z9U62qZ91~l?V0OaRwpsu2RI58aO4e5yMVphvgod!^XUS>)f$DoOaU44+d8i=>R)dC zHE=<=pI?C1yl%xi-y24Qjz(%C8e)ZFNP~6Am5|XbZ_7aaq1rJOloJ)avO z`6+s1#FTb~z=`40vH(r<~}x?7%k+zCSXvk|p%xeqD95 zAo8k5-dJfd8=T5?R1(Cz9E#S_rNWnV>%4t}_r&s3NB>z`0e$Plrs+ts{O8YoJ6Au4 zReO9qh4)9Txtr9952H`jBY(ozFT{*mMjOC@bh?%EVF~M+uzyKVOQ@(Mkn;!%3XZhQ z0LHs}>jXH@CfbCqNp>gk)qSQC;=72d9UwR(qbKwC*l52vFMI9DMkjv zQ}rk6d|3vufA7yM~4L81-F^vwG>T@`(`^Hu#s_}+`HYB3yuS3i0VC*Um!yfs5-v%qZ zXbXN(&Bb%|sVOVFy}xTP?S=bKA4_~Iy1FAow7;WnZ{2AIYs1~_!^WST|Iq{hvkf6o zD5MTHSmy5f;S>A-y&(3Yk|h1p#)5~3C;p3dfm6heyq?S;(%rPm|G}|7-6Se%(oFv_ zWh#Z?U88q;DmNfk8!|>iyK~*Rq;_I@RYQ}#e5SOz!rm4|h@6?9KRMynIu?aZqpTVl zqK?p_ilnrmd&U1MJ^5n_@^}SkxVw9Dm8er}zFfzEDvG6W`CcuE=r@( z1q^{4m>}qP6C-!lMQ=pkYj8)|SO3^e?o0T{OpcBuFfnuS;<}vF- zh$k27^I{{^58h@R>jXR^(}ndlt?=4X|29e*wU&Y9ntxZbYjhhM8&l@xZPiW(1;MI% z(<>ZCZ3oh3<>TXZ>@ZAkh)AeRVLv9jxIZK(=LRBXrl!gyumqMUsvo7JL)h!#jko?% zjj&A}hXon?G6VYwzzZ!59^;o%%WWB3+sH=-TxFmMx)B$82^Ol-kz(88M$?QU5W%c5)Na)MdlJg%b~)Rc!QOU4OtnTV5~P%$*(lI>`G(ekyjn zKZEYJ)HNIji@Yb%Y9T*{gcqhF5|eZAZB9AN<9TCp8gO`6rO4pw{}@yS1QG zapYblqdHoN%=HDudDm7{wj?OJN$R;^cAg@m7F5!5hX8k+MxB;sH9H^9uv4B9M&+#2 zMHCVg*b4)@*ajAG-t#IdvJQRJE6)(kBJ^pxE< zHl2Ia0HV|bj%(0P15BJOZ442|(3Z2RiHVA0OsZ0IXJ_{Lxg%61+*MW)m=wvb@Iy<$ z-vY$R{6yKIb|rn$*G%-7!*|UyGdAX{vCPeE?#H_u-S&!}d|bCSlb60D+IPMpW+mMjvZ7Jf72dcJQbA-(4QdogrC zHe{(_{_usv+Kqc{&DyZ{tpg5rEzpj>c}jdfDuHAkmE6JBN_Gi9Ue2}{U%UaIefb6% zc$`7hxlXIisjOkziOO}Y^Pt?x0~hS*A8=9TdSk+F-lxBcBxy`8OIoSmEdx6U4S#ZoI!7MS;SsYp7) z*2#%cTxyx?AJEk$Zd!`Iy5^A@yeie0+;n(m%fMEdab85(`SHocUG9FeI3Ct+BNSWI zC0CF5iMnFHZ~o~$|L&KNA=&dB5!bKrlp>T^!8C@LyjCCmL_^6q-`+y(!J~ITHO$DU zLNcS|^mG93eM{==!^3msVmd3bPy{OoOYSB01?xOXTRc)!Oh&9{C+{p5RFkdMIg4~k|%A*UGZv$Np7j}02kEIu4#|utTlSjh8<Zr+Dk0ZCAnC4qHe12h7mgH|OoW#gj_HQ4vUqxajfb^IVP*1wIkEI@((sPi z^ZnU}s~LSKCTixV;r$8=@dt?8IaQ0 z-1>BA?u~R{lo?WfljYtkql~LC`x~6lpB!)1sCVa*`8HLPlIdv}{+VDaTA1#?yyP4c zlf@Gjm9Z-kI3Z(ZpRfeDD-Ab`%#K8|_bS@l*^^p&7*e8I3Ibw&d7986%dpItr^T@# znL>s9MCKM`eSIA+sJcVLrY!0?P1XPB1Ue%VZt-D^k>xFx(4KNazMxCTasHtBmar8^ zZ@xlLe7o5xlLEN=56vAYep@-qJFB_56x~0Qd4f z_)+pFivhfPw9k8#;%n;`)B`@ljJQifgM2Um#JMZHU6=`DVIfdp;~^{LT4&Yf=s zGAPH>xm1LFMt^f_%SVBTO#GdBm$ zLvksKloz=q05)HLG0MpgR%J5`84k5neFqU9LSEiBCMPFfewfF~*F6pqD0NOQ@OaXssUT>VK~PCBiFqqzsZL$+ zclwCwg!LK(6E;dxs;tbwGyW&&J3JR^LEy~M?m;b)EKpAjf13};$|7+*)TxR>{_KuS zfs}Y08LeH@%)M)Gh>a(U*$di zQCOIZ6o_jK%ScWR?lq-mV~ZObQvly2q}DR#z6IhB7O`!BDsU8K`K9+Y!_m3r?}?9& z9=0!$IF-gC;x9v-&DbRRLZxcPnXRna;?f;kF7r_N9hPsMS}eNOxjXO_rKc=-W!OnU zi{t&ZINV;;5=Qpum3U=(1KMpV+Y*7$`fDlhZ(*f=g&p^eq5wiwK5=m4BsLB;DxHGG z@&CHVc+(OK=W7>kAK2pL+{X5})sPE)Z!Wy=uI<~wBcAu~FlAd{AQaE_1M)bEA~Ug+ zZ*0$0vVfD;#=el(R=FC#kWhMM$&2w~g)Hv-YLKz+r;qoyL;)(TRg6_AMV zaPPyS2y@a)s+ zqhtt5JCQWPu8uwR%5eIOg8o*L=WpmaBlFp>7u&@(Gy6`EGE@JuoA{I%e@leK?jQ+s z{Y)7h18Q#Gz8xj2u{#gQEcE_C`h=Ef8h;b%80)-MhGVFJzr>NwQHa9-LB zi{nx-!i)i{GWw!5(n>FhKk;_rnJ}AM{}xJWQ6Szl`&>Q2{>))*Ep}NVXEmYRVacPG z#YOubr$$B86Ee7zOrO|REQ<>ZCE`)0__G8B0Wl(S@w#YSlXjsiLSzvW}$@*os90jp9G`J^O#JvR5mwt!9nMFhN9I)!IN5r{wpV-*?tf$Hr)rMU`9#t)nJ3%< zCAYM!N_w#p3AO|@eNv_~28!NsM)Vxc7z>JNBrFi!SkvT*I z3b}PMu*DJw>Id{;CFE{UqZP{k{bQw<|LeGCQ>!m4J#hlF_>0_yUIhCEO6sMBsi3-i z@4edj#=?>^-s}-3FXfL)l=`Z}zML=ML|LIyV0}DWX}CN);GPrrR7~^s@hdKW&VRVB z(PruD>Z)orGBQHF$x+JkzuR8pYSRL?Rq6vs6GJ(T->UeC)SC9$xThx?3v1gO;ZABZ zoDYKK+JOzWDt>)Q&2(^A7wUtF)6BK^_-|vUz83}m*ME5Ko}SlF-w#}-h7t#XhlSdz z=c%{H-#89C2ManY#oOlj0p~uQ1l0nruC7e3vMS!3;Ym=-HJe}_RPorDkp?6sgZyXv z>K3t$bc3!eZwOv=WL#Jz*@AsDySzA{D^`v)$!XZWJ({t!v@~s6I{dlfQ`MXr;7^=ZcF<>B5LK<<;6geiF+H8Zx`1qXqi@~1#MGbpoo3mT9 z8=13mmxR(=go7)fkeV^I38>pDV$*f%3Kiau#|Oz{Yn#%%_!bkQKEGXIEj{7=zYo{f znUij_yNdd$2DqmyV8+thJSh-m-ncl$nA6b@wi%)#?HnH+?LBgLed`NzUE1(G*R)#2 zxl2no6?vgzJVY}s4I87FV5Hf?5RmpN%?=Ku6md#5=3dFKrO`*F!{b=77WbobAE&xmZZ#=T2bN>e=D` zssUXC07;soA_YMGv{B>2!-oFlA|YP!9mGj|lE@{!7m!^Fm_Ic&r8l=Mje|w}NeNw}^x)&$^U;|8=4KCDK_ftW7#7%&#cO2aV z9KbU^OSdPV-vfxK)#&$&mOcCSBq9iYGrq$Es;Mw29BE93Ef5*{s8E@$#m8-$xkbo( zPVTOxa^jk$bd8ON%1iLXc;8lMVG#93Sxp$uzCPc{srv+;Rapy8B#+P-hw9&qV`|vwGk_W! zL$mk195#~z1-;;fB^VgYtj{u%nnh5>FE4)+%(F|<=O$Gw!sc_erDc}yUi4)bbpxiHs=B)J4i0B14_>^FY3&c^ zelWz2VuR7+94X_N6kzIaIWms|K)2yk_=HE}UYnU41sT6$$C}i9;SZ;3cg#>_HF+Y#Sco>-kd4ul;RN6r>PJHDlIVt@HaYvmGX(I}Xp}?;F zUY@@pVejewUS`ul;@WTWK=uO|h}&74$J#~>ue2c)lrqgQ{gOhXH~`Bw&YT2wPs4Dj zGRGH|#w-@LUt?*oX^&sW(`XKzgEpvs8PuOalIazlf2|Q?AWhHAbXc1Prmz$J3i?!` z!ox=!!Wbf~r=zL)({dEo&dyF#ir5Kqr^?x#O4jW`fViUw-W8f@-!jmtJcsP(@=eQ( z6ot?(GmLRq2k01fgaJ^v%GeSFw@&=GyKF$tLLd9LUgfm=*&g6X=+v;)UQFHdA!{aW zV@)6;Wu(Ih)xp?>gQw?1U(0t3cO$A~p~ZAl77~_^UWFZ+dxU z#Rpe++jVQvn;u4`ywtQocX!h$XCi#gPD?p_U_zXF8{8RkL7xEXdhbBtYdgc!d1gJ4 z3mbu%Tu>meZA|kzh2l8Ktmj71ct;e2{bA*0GZ%0@IDZ6}Ou&Jl20PicxBg=rIqJ>? z)oL*Y=vq+xZgU8s7T|*+7OXGM^yBA0MBB=`_EPCG7Ap`kUiQ722)EkZmEQ>l1#EvF z=!wWDjz=vNGhZiK)NjEssC>7Mv|};do(n+|9vViI8lLcs7SHU99jnY0ArTFwCw~bL z-xCNO(oUT>u2Izw+Y`tQ|AoG@t+QPoj&$!0kR36Z$Xi=8K%twrGn9mS`sWWFr-+hu zIX`I^jc4%^tUPXJ4?q-ag(}?j$@FXpI9?LrAU~@T_76PwM~? zegeL=-!ER+#@EQan-9@?t#&H9_MDUf@BN`3cTaD_C2ZOY?Cel$D2BKDEQL{`7iNJ% z8|W)J(W*`s-qge;Vm$oj);ixnYFXZhvr1i9Xo&hy7CrrmB*0J z8EbB7Ny^BO!@2x1_o045vkoaLMqJSP^)j3}(DI6pPjLnPoBz|4(ub@ccC_bwd~G8S zlh__{2s~KV^1F)KOa-XEcOL>@NlvAg*0aP(4TLk>@NJ z(6FnFD;X&Nydt~)%#ZU{aQ+l;7Z$;N`zhDH->i87vCh1M*V^PC@D$?!L~Uy$&4krQ z18qxwOVR&OdIF%*f0yia?E>=|CB(6Q{`h%iGEYMOacF=83d6$TousJ=Yd0l4s`a8R zH5~EYi-&$;Ed1nJdB^t%Y|Aa!Lv0t_e^VrIF%pLRi$BHex>;~8NkKCK#`PJkraebk zIoXd{#d#yD=Dbm zVqpAqA4uHPj>X7HMcJBMgEa2EmIp-I-kGGZwXR}V&dzUD9`L90WKq3^bPmbB9oZKx2?jx_SWbs!-s|g9l6k1G@0ECyQd8;B3&!`h2cqzl zvU#JJ<1Vh|2&obV+J$~o{wHJ0d$_N;MSCH8N+R|eN(XFItQjUOIOwXED$LA9^$lw5 zDwCh-H_z?N1K@qzpJ%vY=#2}2%N&g!gc&5QMPbQ)TmpBs0G>LFM>au zV-CtHpoue#E80_5=ee-y_+wuKnIZVIzH{BeT*Q^ujv}DWf-SA?*CS`BoLM` zn=k}94o0M7WYpNc`a3%t3T3?7+A^l6)vvFwy%z}464W|>(bLnrm!@B-3psDg0DUio zgo1k>f;jlt3&>tti~|M9*<*#<5!gM6meiZ*ro@`)`U?7_A=zcxTgO9VRPPSfT`wYU zboH3lB|9;pY*Pun6mZ^$O^ls8vBT^jeFT#hp40`TEV)dC!covzNiA#4gWwjR=mkjiLS@Aq~JhiPAv zA`zJbVAISQu)m3WGUwLP0s`tIUJ~!yHLYakc{5j+& zj5QL0pXuqnyNuN}G#Y@VZ@m2c(|`YBF9<>hBM(~4pylRoejT5b!5+N1I5{7J!9W(5 z4#8Osp}f^(Gc>a3#IfSv(FGr@{*1o;#=I=Sv8neJ_QT1c(Zhq_5=kyyWSR+TS%ygeQ0Y>QE@5?U%gqDbEl(KhAsgrqJbn(k8xi*UD&hXH%U56@0bOFx)6Dk?kl zy2DMKZ)NZfS{^M~unQ|YvT|!!kK-v~Vl>8`cuQRE2YuQt+8brSpB1I`H?V^juuZ)e z6HxxC(&Tq?UE!^b;XSnURn+1+v2OPC1m=!&I`qG3pv{uA*iCj zk(_j-pacvGdDgWNC$dsA7CJ3gkK*Y01~`!;sNP-O<@zwkaHfiy`HK0=5HWr(s{# zf_vcN;U>-|{W^q=r^9Z>z5BM1m+)n3%1{!RDQl_}g0Qw~Mha&@b85&YpIcnS7zEUR#LN#p4*$V@dOs3GdSIy38`IbawY(&?{+`7Htq0kzSPqR-t*6aJn_Ngpypc(}hf=`b zKEG=2g-@G-{l&@=LNwB-rczJ8sREI?hAL_xJNzLSn~ODc?B!>o(J{YXyFtgc89aY1 zs5jf1xn^N&tE*%0{`;4+FYoO5xQ{?2`YESoJ~Ww{2^@Aq6Py{ANRaVLn8K_<*ty-f zF?J?nq*nf$hy!w&h-Hvs*^2}>y)S!~$DW;&Ju<=lUSwUhW7fo`Kt)TZ8A!;WN;F!4 zPgs)!5>iMO-mn8pR6^%Bpzh(xFBe*Obl-nWdb7v*^0%3AGYiFp?#-FF31$kTQ)Stb zyWv9lHPx2lTg)B?ETT`n}XCax;ggAE8a=XXkp>nKw;nxMo zW1!2{VS9^c$LryBt~UD*3i5mZ;yl}w5y8Sy%jDq;O29AjBqP%*rp}AHFo#WlmFO(= zM1&ucm?Zpcr7eN!_j%_D9P}rvsz9as1x0P`^bdl3*eIK>9lLQx(`WxX6U7{|dzZk%+^XeB9tEA*>E2-VDRy(R*`;J&?*_y@)IJ czb?uZh)m>a%-qi44hDLC{`5trPRca+e+3EoegFUf From b9e779dc54de979a53c40a1e3d93f719e424ae90 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Fri, 4 Sep 2015 19:13:51 -0400 Subject: [PATCH 034/479] Makes Travis compile hopefully. --- code/game/objects/effects/decals/posters.dm | 333 -------------------- 1 file changed, 333 deletions(-) delete mode 100644 code/game/objects/effects/decals/posters.dm diff --git a/code/game/objects/effects/decals/posters.dm b/code/game/objects/effects/decals/posters.dm deleted file mode 100644 index 90fb526e7ca..00000000000 --- a/code/game/objects/effects/decals/posters.dm +++ /dev/null @@ -1,333 +0,0 @@ - -//########################## POSTERS ################################## - -#define NUM_OF_POSTER_DESIGNS 33 // contraband posters - -#define NUM_OF_POSTER_DESIGNS_LEGIT 33 // corporate approved posters - - -//########################## THE LIST OF POSTERS AND DESCS ##################### - -// please add new posters and names to their respective lists and update constant(s) above - -// CONTRABAND - -var/global/list/posternames = list( -"- Free Tonto", -"- Atmosia Declaration of Independence", -"- Fun Police", -"- Lusty Xenomorph", -"- Syndicate Recruitment", -"- Clown", -"- Smoke", -"- Grey Tide", -"- Missing Gloves", -"- Hacking Guide", -"- RIP Badger", -"- Ambrosia Vulgaris", -"- Donut Corp.", -"- EAT", -"- Tools", -"- Power", -"- Power to the People", -"- Communist State", -"- Lamarr", -"- Borg Fancy", -"- Borg Fancy v2", -"- Kosmicheskaya Stantsiya 13 Does Not Exist", -"- Rebels Unite", -"- C-20r", -"- Have a Puff", -"- Revolver", -"- D-Day Promo", -"- Syndicate Pistol", -"- Energy Swords", -"- Red Rum", -"- CC 64K Ad", -"- Punch Shit", -"- The Griffin" ) - -var/global/list/posterdescs = list( -" A salvaged shred of a much larger flag, colors bled together and faded from age.", -" A relic of a failed rebellion.", -" A poster condemning the station's security forces.", -" A heretical poster depicting the titular star of an equally heretical book.", -" See the galaxy! Shatter corrupt megacorporations! Join today!", -" Honk.", -" A poster advertising a rival corporate brand of cigarettes.", -" A rebellious poster symbolizing assistant solidarity.", -" This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases.", -" This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date.", -" This seditious poster references Nanotrasen's genocide of a space station full of badgers.", -" This poster is lookin' pretty trippy man.", -" This poster is an advertisement for Donut Corp.", -" This poster is advising rank gluttony.", -" This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm.", -" A poster that positions the seat of power outside Nanotrasen.", -" Screw those EDF guys!", -" All hail the Communist party!", -" This poster depicts Lamarr. Probably made by a traitorous Research Director.", -" Being fancy can be for any borg, just need a suit.", -" Borg Fancy, Now only taking the most fancy.", -" A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13.", -" A poster telling the viewer to rebel against Nanotrasen.", -" A poster advertising the Scarborough Arms C-20r.", -" Who cares about lung cancer when you're high as a kite?", -" Because seven shots are all you need.", -" A promotional poster for some rapper.", -" A poster advertising syndicate pistols as being 'Classy as fuck'. It is covered in faded gang tags.", -" All the colors of the bloody murder rainbow.",, -" Looking at this poster makes you want to kill.", -" The latest portable computer from Comrade Computing, with a whole 64kB of ram!", -" Fight things for no reason, like a man!", -" The Griffin commands you to be the worst you can be. Will you?" ) - -// LEGIT - -var/global/list/legitposternames = list( - -"- Here For Your Safety", -"- Nanotrasen Logo", -"- Cleanliness", -"- Help Others", -"- Build", -"- Bless This Spess", -"- Science", -"- Ian", -"- Obey", -"- Walk", -"- State Laws", -"- Love Ian", -"- Space Cops", -"- Ue No", -"- Get Your LEGS", -"- Do Not Question", -"- Work For a Future", -"- Soft Cap Pop Art", -"- Safety: Internals", -"- Safety: Eye Protection", -"- Safety: Report", -"- Report Crimes", // WHY ARE THERE TWO OF THESE -"- Ion Rifle", -"- Foam Force Ad", -"- Cohiba Robusto Ad", -"- 50th Anniversary Vintage Reprint", -"- Fruit Bowl", -"- ThinkTronic PDA 6000 Ad", -"- Enlist", -"- Nanomichi Ad", -"- 12 Gauge", -"- High-Class Martini", -"- The Owl" ) - -var/global/list/legitposterdescs = list( -" A poster glorifying the station's security force.", -" A poster depicting the Nanotrasen logo.", -" A poster warning of the dangers of poor hygiene.", -" A poster encouraging you to help fellow crewmembers.", -" A poster glorifying the engineering team.", -" A poster blessing this area.", -" A poster depicting an atom.", -" Arf Arf.", -" A poster instructing the viewer to obey authority.", -" A poster instructing the viewer to walk instead of running.", -" A poster instructing cyborgs to state their laws.", -" Ian is love, Ian is life.", -" A poster advertising the television show Space Cops.", -" This thing is all in Japanese.", -" LEGS: Leadership, Experience, Genius, Subordination.", -" A poster instructing the viewer not to ask about things they aren't meant to know.", -" A poster encouraging you to work for your future.", -" A poster reprint of some cheap pop art.", -" A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic.", -" A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights.", -" A poster instructing the viewer to report suspicious activity to the security force.", -" A poster encouraging the swift reporting of crime or seditious behavior to station security.", // seriously -" A poster displaying an Ion Rifle.", -" Foam Force, it's Foam or be Foamed!", -" Cohiba Robusto, the classy cigar.", -" A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen.", -" Simple, yet awe inspiring.", -" A poster advertising the latest PDA from Nanotrasen suppliers.", -" Enlist in the Nanotrasen Deathsquadron reserves today!", -" A poster advertising Nanomichi brand audio cassettes.", -" A poster boasting about the superiority of 12 gauge shotgun shells.", -" I told you to shake it, no stirring.", -" The Owl would do his best to protect the station. Will you?" ) - -//########################## THE ACTUAL POSTER CODE ########################### - -/obj/item/weapon/poster - name = "poster" - desc = "You probably shouldn't be holding this." - icon = 'icons/obj/contraband.dmi' - force = 0 - burn_state = 0 //Burnable - var/serial_number = 0 - var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor - var/official = 0 - - -/obj/item/weapon/poster/contraband - name = "contraband poster" - desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities." - icon_state = "rolled_poster" - -/obj/item/weapon/poster/legit - name = "motivational poster" - icon_state = "rolled_legit" - desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface." - official = 1 - -/obj/item/weapon/poster/New(turf/loc, given_serial = 0) - if(given_serial == 0) - if(!official) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) - resulting_poster = new(serial_number,official) - else - serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) - resulting_poster = new(serial_number,official) - else - serial_number = given_serial - //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. - name += " - No. [serial_number]" - ..(loc) - - -/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) - src.add_fingerprint(user) - if(resulting_poster) - resulting_poster.add_fingerprint(user) - ..()*/ - -/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() - if(istype(A, /turf/simulated/wall)) - if(resulting_poster == null) - return - else - var/turf/simulated/wall/W = A - var/check = 0 - var/stuff_on_wall = 0 - for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff - if(istype(O,/obj/structure/sign/poster)) - check = 1 - break - stuff_on_wall++ - if(stuff_on_wall == 3) - check = 1 - break - - if(check) - user << "The wall is far too cluttered to place a poster!" - return - - resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster - W.contents += resulting_poster - - qdel(src)*/ - - - -//############################## THE ACTUAL DECALS ########################### - -/obj/structure/sign/poster - name = "poster" - desc = "A large piece of space-resistant printed paper." - icon = 'icons/obj/contraband.dmi' - anchored = 1 - var/serial_number //Will hold the value of src.loc if nobody initialises it - var/ruined = 0 - var/official = 0 - var/placespeed = 37 // don't change this, otherwise the animation will not sync to the progress bar - -/obj/structure/sign/poster/New(serial,rolled_official) - serial_number = serial - official = rolled_official - if(serial_number == loc) - if(!official) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. - if(official) - serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) - if(!official) - icon_state = "poster[serial_number]" - name += posternames[serial_number] - desc += posterdescs[serial_number] - else if (official) - icon_state = "poster[serial_number]_legit" - name += legitposternames[serial_number] - desc += legitposterdescs[serial_number] - ..() - -/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) - if(istype(I, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) - if(ruined) - user << "You remove the remnants of the poster." - qdel(src) - else - user << "You carefully remove the poster from the wall." - roll_and_drop(user.loc, official) - return - - -/obj/structure/sign/poster/attack_hand(mob/user) - if(ruined) - return - var/temp_loc = user.loc - if((user.loc != temp_loc) || ruined ) - return - visible_message("[user] rips [src] in a single, decisive motion!" ) - playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) - ruined = 1 - icon_state = "poster_ripped" - name = "ripped poster" - desc = "You can't make out anything from the poster's original print. It's ruined." - add_fingerprint(user) - -/obj/structure/sign/poster/proc/roll_and_drop(turf/location, official) - if (!official) - var/obj/item/weapon/poster/contraband/P = new(src, serial_number) - P.resulting_poster = src - P.loc = location - loc = P - else - var/obj/item/weapon/poster/legit/P = new(src, serial_number) - P.resulting_poster = src - P.loc = location - loc = P - - -//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() -/turf/simulated/wall/proc/place_poster(obj/item/weapon/poster/P, mob/user) - if(!P.resulting_poster) return - - var/stuff_on_wall = 0 - for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff - if(istype(O,/obj/structure/sign/poster)) - user << "The wall is far too cluttered to place a poster!" - return - stuff_on_wall++ - if(stuff_on_wall == 3) - user << "The wall is far too cluttered to place a poster!" - return - - user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. - - //declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster - var/obj/structure/sign/poster/D = P.resulting_poster - - var/temp_loc = user.loc - flick("poster_being_set",D) - D.loc = src - D.official = P.official - qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway - playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1) - - if(do_after(user,D.placespeed,target=src)) - if(!D) return - - if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there - user << "You place the poster!" - else - D.roll_and_drop(temp_loc,D.official) - return From 5cbe9e17e22cfdc7e5addad44383219585a1b60f Mon Sep 17 00:00:00 2001 From: bgobandit Date: Fri, 4 Sep 2015 19:17:51 -0400 Subject: [PATCH 035/479] TRAVIS NOW COMPILES. --- .../game/objects/effects/decals/contraband.dm | 333 ++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 code/game/objects/effects/decals/contraband.dm diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm new file mode 100644 index 00000000000..90fb526e7ca --- /dev/null +++ b/code/game/objects/effects/decals/contraband.dm @@ -0,0 +1,333 @@ + +//########################## POSTERS ################################## + +#define NUM_OF_POSTER_DESIGNS 33 // contraband posters + +#define NUM_OF_POSTER_DESIGNS_LEGIT 33 // corporate approved posters + + +//########################## THE LIST OF POSTERS AND DESCS ##################### + +// please add new posters and names to their respective lists and update constant(s) above + +// CONTRABAND + +var/global/list/posternames = list( +"- Free Tonto", +"- Atmosia Declaration of Independence", +"- Fun Police", +"- Lusty Xenomorph", +"- Syndicate Recruitment", +"- Clown", +"- Smoke", +"- Grey Tide", +"- Missing Gloves", +"- Hacking Guide", +"- RIP Badger", +"- Ambrosia Vulgaris", +"- Donut Corp.", +"- EAT", +"- Tools", +"- Power", +"- Power to the People", +"- Communist State", +"- Lamarr", +"- Borg Fancy", +"- Borg Fancy v2", +"- Kosmicheskaya Stantsiya 13 Does Not Exist", +"- Rebels Unite", +"- C-20r", +"- Have a Puff", +"- Revolver", +"- D-Day Promo", +"- Syndicate Pistol", +"- Energy Swords", +"- Red Rum", +"- CC 64K Ad", +"- Punch Shit", +"- The Griffin" ) + +var/global/list/posterdescs = list( +" A salvaged shred of a much larger flag, colors bled together and faded from age.", +" A relic of a failed rebellion.", +" A poster condemning the station's security forces.", +" A heretical poster depicting the titular star of an equally heretical book.", +" See the galaxy! Shatter corrupt megacorporations! Join today!", +" Honk.", +" A poster advertising a rival corporate brand of cigarettes.", +" A rebellious poster symbolizing assistant solidarity.", +" This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases.", +" This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date.", +" This seditious poster references Nanotrasen's genocide of a space station full of badgers.", +" This poster is lookin' pretty trippy man.", +" This poster is an advertisement for Donut Corp.", +" This poster is advising rank gluttony.", +" This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm.", +" A poster that positions the seat of power outside Nanotrasen.", +" Screw those EDF guys!", +" All hail the Communist party!", +" This poster depicts Lamarr. Probably made by a traitorous Research Director.", +" Being fancy can be for any borg, just need a suit.", +" Borg Fancy, Now only taking the most fancy.", +" A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13.", +" A poster telling the viewer to rebel against Nanotrasen.", +" A poster advertising the Scarborough Arms C-20r.", +" Who cares about lung cancer when you're high as a kite?", +" Because seven shots are all you need.", +" A promotional poster for some rapper.", +" A poster advertising syndicate pistols as being 'Classy as fuck'. It is covered in faded gang tags.", +" All the colors of the bloody murder rainbow.",, +" Looking at this poster makes you want to kill.", +" The latest portable computer from Comrade Computing, with a whole 64kB of ram!", +" Fight things for no reason, like a man!", +" The Griffin commands you to be the worst you can be. Will you?" ) + +// LEGIT + +var/global/list/legitposternames = list( + +"- Here For Your Safety", +"- Nanotrasen Logo", +"- Cleanliness", +"- Help Others", +"- Build", +"- Bless This Spess", +"- Science", +"- Ian", +"- Obey", +"- Walk", +"- State Laws", +"- Love Ian", +"- Space Cops", +"- Ue No", +"- Get Your LEGS", +"- Do Not Question", +"- Work For a Future", +"- Soft Cap Pop Art", +"- Safety: Internals", +"- Safety: Eye Protection", +"- Safety: Report", +"- Report Crimes", // WHY ARE THERE TWO OF THESE +"- Ion Rifle", +"- Foam Force Ad", +"- Cohiba Robusto Ad", +"- 50th Anniversary Vintage Reprint", +"- Fruit Bowl", +"- ThinkTronic PDA 6000 Ad", +"- Enlist", +"- Nanomichi Ad", +"- 12 Gauge", +"- High-Class Martini", +"- The Owl" ) + +var/global/list/legitposterdescs = list( +" A poster glorifying the station's security force.", +" A poster depicting the Nanotrasen logo.", +" A poster warning of the dangers of poor hygiene.", +" A poster encouraging you to help fellow crewmembers.", +" A poster glorifying the engineering team.", +" A poster blessing this area.", +" A poster depicting an atom.", +" Arf Arf.", +" A poster instructing the viewer to obey authority.", +" A poster instructing the viewer to walk instead of running.", +" A poster instructing cyborgs to state their laws.", +" Ian is love, Ian is life.", +" A poster advertising the television show Space Cops.", +" This thing is all in Japanese.", +" LEGS: Leadership, Experience, Genius, Subordination.", +" A poster instructing the viewer not to ask about things they aren't meant to know.", +" A poster encouraging you to work for your future.", +" A poster reprint of some cheap pop art.", +" A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic.", +" A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights.", +" A poster instructing the viewer to report suspicious activity to the security force.", +" A poster encouraging the swift reporting of crime or seditious behavior to station security.", // seriously +" A poster displaying an Ion Rifle.", +" Foam Force, it's Foam or be Foamed!", +" Cohiba Robusto, the classy cigar.", +" A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen.", +" Simple, yet awe inspiring.", +" A poster advertising the latest PDA from Nanotrasen suppliers.", +" Enlist in the Nanotrasen Deathsquadron reserves today!", +" A poster advertising Nanomichi brand audio cassettes.", +" A poster boasting about the superiority of 12 gauge shotgun shells.", +" I told you to shake it, no stirring.", +" The Owl would do his best to protect the station. Will you?" ) + +//########################## THE ACTUAL POSTER CODE ########################### + +/obj/item/weapon/poster + name = "poster" + desc = "You probably shouldn't be holding this." + icon = 'icons/obj/contraband.dmi' + force = 0 + burn_state = 0 //Burnable + var/serial_number = 0 + var/obj/structure/sign/poster/resulting_poster = null //The poster that will be created is initialised and stored through contraband/poster's constructor + var/official = 0 + + +/obj/item/weapon/poster/contraband + name = "contraband poster" + desc = "This poster comes with its own automatic adhesive mechanism, for easy pinning to any vertical surface. Its vulgar themes have marked it as contraband aboard Nanotrasen space facilities." + icon_state = "rolled_poster" + +/obj/item/weapon/poster/legit + name = "motivational poster" + icon_state = "rolled_legit" + desc = "An official Nanotrasen-issued poster to foster a compliant and obedient workforce. It comes with state-of-the-art adhesive backing, for easy pinning to any vertical surface." + official = 1 + +/obj/item/weapon/poster/New(turf/loc, given_serial = 0) + if(given_serial == 0) + if(!official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS) + resulting_poster = new(serial_number,official) + else + serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) + resulting_poster = new(serial_number,official) + else + serial_number = given_serial + //We don't give it a resulting_poster because if we called it with a given_serial it means that we're rerolling an already used poster. + name += " - No. [serial_number]" + ..(loc) + + +/*/obj/item/weapon/contraband/poster/attack(mob/M as mob, mob/user as mob) + src.add_fingerprint(user) + if(resulting_poster) + resulting_poster.add_fingerprint(user) + ..()*/ + +/*/obj/item/weapon/contraband/poster/attack(atom/A, mob/user as mob) //This shit is handled through the wall's attackby() + if(istype(A, /turf/simulated/wall)) + if(resulting_poster == null) + return + else + var/turf/simulated/wall/W = A + var/check = 0 + var/stuff_on_wall = 0 + for(var/obj/O in W.contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/structure/sign/poster)) + check = 1 + break + stuff_on_wall++ + if(stuff_on_wall == 3) + check = 1 + break + + if(check) + user << "The wall is far too cluttered to place a poster!" + return + + resulting_poster.loc = W //Looks like it's uncluttered enough. Place the poster + W.contents += resulting_poster + + qdel(src)*/ + + + +//############################## THE ACTUAL DECALS ########################### + +/obj/structure/sign/poster + name = "poster" + desc = "A large piece of space-resistant printed paper." + icon = 'icons/obj/contraband.dmi' + anchored = 1 + var/serial_number //Will hold the value of src.loc if nobody initialises it + var/ruined = 0 + var/official = 0 + var/placespeed = 37 // don't change this, otherwise the animation will not sync to the progress bar + +/obj/structure/sign/poster/New(serial,rolled_official) + serial_number = serial + official = rolled_official + if(serial_number == loc) + if(!official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS) //This is for the mappers that want individual posters without having to use rolled posters. + if(official) + serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) + if(!official) + icon_state = "poster[serial_number]" + name += posternames[serial_number] + desc += posterdescs[serial_number] + else if (official) + icon_state = "poster[serial_number]_legit" + name += legitposternames[serial_number] + desc += legitposterdescs[serial_number] + ..() + +/obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/wirecutters)) + playsound(loc, 'sound/items/Wirecutter.ogg', 100, 1) + if(ruined) + user << "You remove the remnants of the poster." + qdel(src) + else + user << "You carefully remove the poster from the wall." + roll_and_drop(user.loc, official) + return + + +/obj/structure/sign/poster/attack_hand(mob/user) + if(ruined) + return + var/temp_loc = user.loc + if((user.loc != temp_loc) || ruined ) + return + visible_message("[user] rips [src] in a single, decisive motion!" ) + playsound(src.loc, 'sound/items/poster_ripped.ogg', 100, 1) + ruined = 1 + icon_state = "poster_ripped" + name = "ripped poster" + desc = "You can't make out anything from the poster's original print. It's ruined." + add_fingerprint(user) + +/obj/structure/sign/poster/proc/roll_and_drop(turf/location, official) + if (!official) + var/obj/item/weapon/poster/contraband/P = new(src, serial_number) + P.resulting_poster = src + P.loc = location + loc = P + else + var/obj/item/weapon/poster/legit/P = new(src, serial_number) + P.resulting_poster = src + P.loc = location + loc = P + + +//seperated to reduce code duplication. Moved here for ease of reference and to unclutter r_wall/attackby() +/turf/simulated/wall/proc/place_poster(obj/item/weapon/poster/P, mob/user) + if(!P.resulting_poster) return + + var/stuff_on_wall = 0 + for(var/obj/O in contents) //Let's see if it already has a poster on it or too much stuff + if(istype(O,/obj/structure/sign/poster)) + user << "The wall is far too cluttered to place a poster!" + return + stuff_on_wall++ + if(stuff_on_wall == 3) + user << "The wall is far too cluttered to place a poster!" + return + + user << "You start placing the poster on the wall..." //Looks like it's uncluttered enough. Place the poster. + + //declaring D because otherwise if P gets 'deconstructed' we lose our reference to P.resulting_poster + var/obj/structure/sign/poster/D = P.resulting_poster + + var/temp_loc = user.loc + flick("poster_being_set",D) + D.loc = src + D.official = P.official + qdel(P) //delete it now to cut down on sanity checks afterwards. Agouri's code supports rerolling it anyway + playsound(D.loc, 'sound/items/poster_being_created.ogg', 100, 1) + + if(do_after(user,D.placespeed,target=src)) + if(!D) return + + if(istype(src,/turf/simulated/wall) && user && user.loc == temp_loc) //Let's check if everything is still there + user << "You place the poster!" + else + D.roll_and_drop(temp_loc,D.official) + return From 14013ea2578f34fad526fe311668650020e1e61e Mon Sep 17 00:00:00 2001 From: bgobandit Date: Fri, 4 Sep 2015 19:55:48 -0400 Subject: [PATCH 036/479] fuck you travis you clown --- .../MetaStation/MetaStation.v41F.dmm | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41F.dmm b/_maps/map_files/MetaStation/MetaStation.v41F.dmm index dae47adebe4..cbc3f73da5e 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41F.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41F.dmm @@ -381,7 +381,7 @@ "ahq" = (/obj/effect/decal/cleanable/cobweb2,/obj/structure/table,/obj/item/weapon/stock_parts/manipulator,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fore) "ahr" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = "0"},/turf/simulated/wall,/area/crew_quarters/fitness{name = "\improper Recreation Area"}) "ahs" = (/turf/simulated/wall,/area/maintenance/disposal) -"aht" = (/obj/structure/table,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fore) +"aht" = (/obj/structure/table,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fore) "ahu" = (/obj/structure/closet,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/disposal) "ahv" = (/obj/item/weapon/soap/deluxe,/obj/item/weapon/storage/secure/safe{pixel_x = 6; pixel_y = 28},/obj/item/weapon/kitchen/rollingpin,/obj/structure/closet/crate,/obj/item/clothing/suit/xenos,/obj/item/clothing/suit/monkeysuit,/obj/item/clothing/head/xenos,/obj/item/clothing/mask/gas/monkeymask,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "ahw" = (/obj/structure/stool{pixel_y = 8},/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/turf/simulated/floor/plating,/area/maintenance/auxsolarport) @@ -398,7 +398,7 @@ "ahH" = (/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/brig) "ahI" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/machinery/door/poddoor{density = 0; icon_state = "open"; id = "Prison Gate"; name = "Security Blast Door"; opacity = 0},/turf/simulated/floor/plasteel{icon_state = "delivery"; name = "floor"},/area/security/brig) "ahJ" = (/turf/simulated/wall,/area/security/warden) -"ahK" = (/obj/item/stack/sheet/cardboard,/obj/machinery/light_construct/small{dir = 1},/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/watertank,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"ahK" = (/obj/item/stack/sheet/cardboard,/obj/machinery/light_construct/small{dir = 1},/obj/structure/closet/crate,/obj/item/weapon/coin/silver,/obj/item/weapon/grenade/chem_grenade,/obj/item/weapon/storage/box/lights/mixed,/obj/item/weapon/watertank,/obj/item/weapon/storage/box/donkpockets,/obj/item/weapon/poster/contraband,/obj/item/weapon//poster,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "ahL" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{tag = "icon-vault (SOUTHEAST)"; icon_state = "vault"; dir = 6},/area/security/warden) "ahM" = (/obj/structure/grille,/obj/structure/window/reinforced/fulltile,/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/turf/simulated/floor/plating,/area/security/prison) "ahN" = (/obj/machinery/power/apc{cell_type = 5000; dir = 2; name = "Armory APC"; pixel_x = 1; pixel_y = -24},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/machinery/light,/obj/machinery/camera/motion{c_tag = "Armory - Internal"; dir = 1; network = list("SS13")},/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/security/warden) @@ -617,7 +617,7 @@ "alS" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plating{tag = "icon-warnplate (WEST)"; icon_state = "warnplate"; dir = 8},/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alT" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 9},/obj/item/weapon/bucket_sensor,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alU" = (/obj/item/weapon/grown/log,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"alV" = (/obj/structure/table/reinforced,/obj/machinery/light_construct/small{dir = 8},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/window/reinforced,/obj/item/weapon/contraband/poster/legit,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"alV" = (/obj/structure/table/reinforced,/obj/machinery/light_construct/small{dir = 8},/obj/item/weapon/paper_bin{pixel_x = -3; pixel_y = 7},/obj/structure/window/reinforced,/obj/item/weapon/poster/legit,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alW" = (/turf/simulated/wall,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "alX" = (/obj/machinery/portable_atmospherics/canister/sleeping_agent,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/maintenance/fore) "alY" = (/obj/structure/closet/crate,/obj/item/clothing/gloves/color/fyellow,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) @@ -839,7 +839,7 @@ "aqg" = (/obj/structure/reagent_dispensers/peppertank{pixel_x = 32; pixel_y = 0},/obj/structure/closet/wardrobe/red,/obj/machinery/camera{c_tag = "Security - Gear Room"; dir = 8; network = list("SS13")},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aqh" = (/obj/item/weapon/caution,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/starboard) "aqi" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/storage/fancy/cigarettes,/obj/item/clothing/mask/gas/sechailer,/turf/simulated/floor/plasteel,/area/security/main) -"aqj" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Outer Window"; req_access_txt = "0"},/obj/machinery/door/window/brigdoor{dir = 8; name = "Brig Control Desk"; req_access_txt = "3"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) +"aqj" = (/obj/structure/table/reinforced,/obj/machinery/door/window/westleft{base_state = "right"; dir = 4; icon_state = "right"; name = "Outer Window"; req_access_txt = "0"},/obj/machinery/door/window/brigdoor{dir = 8; name = "Brig Control Desk"; req_access_txt = "3"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/item/weapon/folder/red,/obj/item/weapon/folder/red,/obj/item/weapon/poster/legit,/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aqk" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/reagent_dispensers/peppertank{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 8},/area/security/main) "aql" = (/obj/machinery/computer/secure_data,/obj/machinery/computer/security/telescreen{desc = "Used for watching Prison Wing holding areas."; dir = 2; name = "Prison Monitor"; network = list("Prison"); pixel_x = -30; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) "aqm" = (/obj/structure/table,/obj/item/weapon/folder/red,/obj/item/weapon/restraints/handcuffs,/turf/simulated/floor/plasteel,/area/security/main) @@ -938,7 +938,7 @@ "asb" = (/obj/structure/rack,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/storage/toolbox/emergency,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "asc" = (/obj/structure/closet/crate,/obj/item/weapon/restraints/handcuffs,/obj/item/bodybag,/obj/item/device/radio,/obj/effect/spawner/lootdrop/maintenance{lootcount = 3; name = "3maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/fore) "asd" = (/obj/effect/landmark/start{name = "Warden"},/obj/structure/stool/bed/chair/office/dark,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable/yellow{d1 = 2; d2 = 8; icon_state = "2-8"},/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/turf/simulated/floor/plasteel{icon_state = "showroomfloor"},/area/security/warden) -"ase" = (/obj/structure/closet,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) +"ase" = (/obj/structure/closet,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) "asf" = (/turf/simulated/floor/plating{tag = "icon-panelscorched"; icon_state = "panelscorched"},/area/maintenance/starboard) "asg" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 2; on = 1},/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/turf/simulated/floor/plating,/area/maintenance/starboard) "ash" = (/obj/structure/closet,/obj/item/weapon/storage/box/lights/mixed,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating{tag = "icon-platingdmg3"; icon_state = "platingdmg3"},/area/maintenance/starboard) @@ -1639,11 +1639,11 @@ "aFA" = (/obj/structure/stool/bed/chair/office/dark{dir = 8},/obj/effect/landmark/start{name = "Shaft Miner"},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock{name = "\improper Mining Office"}) "aFB" = (/obj/machinery/atmospherics/components/unary/vent_pump{dir = 4; on = 1},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/floor/plasteel,/area/quartermaster/miningdock{name = "\improper Mining Office"}) "aFC" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 10},/turf/simulated/floor/plasteel,/area/quartermaster/miningdock{name = "\improper Mining Office"}) -"aFD" = (/obj/item/clothing/glasses/meson,/obj/structure/closet/crate,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) +"aFD" = (/obj/item/clothing/glasses/meson,/obj/structure/closet/crate,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance{lootcount = 2; name = "2maintenance loot spawner"},/turf/simulated/floor/plating,/area/maintenance/starboard) "aFE" = (/obj/structure/disposalpipe/segment,/obj/structure/cable/yellow{d1 = 2; d2 = 4; icon_state = "2-4"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "loadingarea"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aFF" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/obj/machinery/door_control{id = "qm_warehouse"; name = "Warehouse Door Control"; pixel_x = 0; pixel_y = -24; req_access_txt = "50"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aFG" = (/obj/item/toy/beach_ball{icon = 'icons/obj/basketball.dmi'; icon_state = "basketball"; item_state = "basketball"; name = "basket ball"},/turf/simulated/floor/plating,/area/maintenance/fore) -"aFH" = (/obj/structure/closet,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"aFH" = (/obj/structure/closet,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "aFI" = (/obj/machinery/power/apc{dir = 4; name = "Warehouse APC"; pixel_x = 27; pixel_y = 0},/obj/structure/cable/yellow{d2 = 8; icon_state = "0-8"},/obj/effect/landmark{name = "blobstart"},/turf/simulated/floor/plasteel{icon_state = "floorgrime"},/area/quartermaster/sorting{name = "\improper Warehouse"}) "aFJ" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel,/area/construction/Storage{name = "Storage Wing"}) "aFK" = (/obj/structure/grille,/obj/structure/window/fulltile,/turf/simulated/floor/plating,/area/crew_quarters/locker) @@ -3767,7 +3767,7 @@ "buw" = (/obj/machinery/light/small{dir = 8},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/machinery/alarm{dir = 4; icon_state = "alarm0"; pixel_x = -22},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners (WEST)"; icon_state = "darkbluecorners"; dir = 8},/area/turret_protected/aisat_interior) "bux" = (/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) "buy" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/manifold4w/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) -"buz" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/contraband/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"buz" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "buA" = (/obj/machinery/light/small{dir = 4},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners"; icon_state = "darkbluecorners"},/area/turret_protected/aisat_interior) "buB" = (/obj/machinery/computer/station_alert,/obj/machinery/light,/obj/machinery/atmospherics/pipe/manifold/supply/hidden,/obj/machinery/computer/security/telescreen{dir = 1; name = "MiniSat Monitor"; network = list("MiniSat","tcomm"); pixel_x = 0; pixel_y = -29},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure{name = "MiniSat Maintenance"}) "buC" = (/obj/structure/table,/obj/item/stack/sheet/metal{amount = 50},/obj/item/stack/sheet/glass{amount = 50},/obj/machinery/power/apc{dir = 8; name = "MiniSat Maint APC"; pixel_x = -24},/obj/item/weapon/crowbar/red,/obj/item/weapon/wrench,/obj/item/clothing/head/welding,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/ai_monitored/storage/secure{name = "MiniSat Maintenance"}) @@ -4009,7 +4009,7 @@ "bze" = (/obj/machinery/door/firedoor,/obj/machinery/door/airlock/command{name = "Captain's Quarters"; req_access = null; req_access_txt = "20"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/crew_quarters/captain{name = "\improper Captain's Quarters"}) "bzf" = (/obj/machinery/door/airlock/hatch{name = "Telecoms Server Room"},/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/tcommsat/server) "bzg" = (/obj/machinery/power/apc{cell_type = 5000; dir = 1; name = "Bar APC"; pixel_x = 0; pixel_y = 25},/obj/structure/cable/yellow{d2 = 4; icon_state = "0-4"},/obj/structure/extinguisher_cabinet{pixel_x = -27; pixel_y = 0},/turf/simulated/floor/wood,/area/crew_quarters/bar) -"bzh" = (/obj/structure/closet,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"bzh" = (/obj/structure/closet,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bzi" = (/obj/structure/piano,/obj/machinery/light_switch{pixel_y = 28},/obj/structure/window/reinforced{dir = 8},/turf/simulated/floor/carpet,/area/crew_quarters/theatre) "bzj" = (/obj/structure/table/wood,/obj/item/device/flashlight/lamp/green{pixel_x = 1; pixel_y = 5},/obj/machinery/computer/security/telescreen/entertainment{pixel_x = -32; pixel_y = 0},/turf/simulated/floor/wood,/area/library) "bzk" = (/obj/machinery/camera/autoname{dir = 4; network = list("SS13")},/obj/item/weapon/book/manual/hydroponics_pod_people,/obj/item/weapon/paper/hydroponics,/obj/machinery/requests_console{department = "Hydroponics"; departmentType = 2; pixel_x = -31; pixel_y = -2},/obj/structure/table/glass,/turf/simulated/floor/plasteel{icon_state = "greenfull"},/area/hydroponics) @@ -5057,7 +5057,7 @@ "bTm" = (/obj/machinery/atmospherics/components/unary/vent_scrubber{dir = 1; on = 1; scrub_N2O = 1; scrub_Toxins = 1},/turf/simulated/floor/plasteel{dir = 4; icon_state = "warning"},/area/ai_monitored/storage/eva{name = "E.V.A. Storage"}) "bTn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/item/robot_parts/chest{name = "cyborg torso"; pixel_x = -2; pixel_y = 2},/obj/item/robot_parts/head{name = "cyborg head"; pixel_x = 3; pixel_y = 2},/obj/structure/table/wood,/obj/machinery/alarm{dir = 4; pixel_x = -23; pixel_y = 0},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bTo" = (/obj/structure/table/wood,/obj/item/toy/carpplushie{color = "red"; name = "NanoTrasen wildlife department space carp plushie"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) -"bTp" = (/obj/structure/table/wood,/obj/machinery/door_control{id = "corporate_privacy"; name = "corporate showroom shutters control"; pixel_x = 28; pixel_y = 0; req_access_txt = "19"},/obj/item/weapon/contraband/poster/legit,/obj/item/weapon/contraband/poster/legit,/obj/item/weapon/contraband/poster/legit,/obj/item/weapon/contraband/poster/legit,/obj/item/weapon/contraband/poster/legit,/obj/item/device/paicard{desc = "A real NanoTrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; name = "NanoTrasen-brand personal AI device exhibit"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) +"bTp" = (/obj/structure/table/wood,/obj/machinery/door_control{id = "corporate_privacy"; name = "corporate showroom shutters control"; pixel_x = 28; pixel_y = 0; req_access_txt = "19"},/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/device/paicard{desc = "A real NanoTrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; name = "NanoTrasen-brand personal AI device exhibit"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bTq" = (/obj/structure/cable/yellow,/obj/machinery/shieldwallgen,/turf/simulated/floor/plasteel{tag = "icon-vault (EAST)"; icon_state = "vault"; dir = 4},/area/teleporter{name = "\improper Teleporter Room"}) "bTr" = (/obj/item/weapon/reagent_containers/food/drinks/bottle/tequila,/obj/structure/table/wood,/turf/simulated/floor/wood,/area/maintenance/aft{name = "Aft Maintenance"}) "bTs" = (/obj/structure/sign/nosmoking_2,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/turf/simulated/wall,/area/atmos) @@ -5521,7 +5521,7 @@ "cci" = (/obj/machinery/power/apc{dir = 8; name = "Medical Security Checkpoint APC"; pixel_x = -24; pixel_y = 0},/obj/machinery/alarm{pixel_y = 28},/obj/structure/cable/yellow{d2 = 2; icon_state = "0-2"},/obj/structure/closet/secure_closet/security/med,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 9},/area/security/checkpoint/medical) "ccj" = (/obj/machinery/recharger{pixel_y = 4},/obj/structure/table/reinforced,/obj/machinery/requests_console{department = "Security"; departmentType = 5; pixel_y = 30},/obj/machinery/light{dir = 1},/obj/machinery/camera{c_tag = "Security Post - Medbay"; dir = 2; network = list("SS13","Medbay")},/turf/simulated/floor/plasteel{icon_state = "red"; dir = 1},/area/security/checkpoint/medical) "cck" = (/obj/item/weapon/pen,/obj/structure/table/reinforced,/obj/structure/reagent_dispensers/peppertank{pixel_x = 30; pixel_y = 0},/obj/item/weapon/folder/red,/obj/item/weapon/book/manual/wiki/security_space_law{pixel_x = 3; pixel_y = 4},/obj/machinery/newscaster/security_unit{pixel_y = 32},/obj/item/weapon/screwdriver{pixel_y = 10},/obj/item/device/radio/off,/turf/simulated/floor/plasteel{icon_state = "red"; dir = 5},/area/security/checkpoint/medical) -"ccl" = (/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/contraband/poster,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/food/drinks/ale,/obj/structure/table/wood,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) +"ccl" = (/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/poster/contraband,/obj/item/weapon/reagent_containers/food/drinks/beer{pixel_x = -3; pixel_y = 2},/obj/item/weapon/reagent_containers/food/drinks/ale,/obj/structure/table/wood,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 8},/area/maintenance/aft{name = "Aft Maintenance"}) "ccm" = (/obj/machinery/atmospherics/components/trinary/mixer{dir = 4; node1_concentration = 0.8; node2_concentration = 0.2; on = 1; pixel_x = 0; pixel_y = 0; target_pressure = 4500},/turf/simulated/floor/plasteel,/area/atmos) "ccn" = (/obj/structure/cable/yellow{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{req_access_txt = 1},/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (WEST)"},/area/medical/medbay{name = "Medbay Central"}) "cco" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden,/obj/machinery/door/firedoor,/turf/simulated/floor/plasteel{dir = 2; icon_state = "whitehall"; tag = "icon-whitehall (WEST)"},/area/medical/medbay{name = "Medbay Central"}) @@ -5545,7 +5545,7 @@ "ccG" = (/obj/structure/closet/secure_closet/hydroponics,/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "ccH" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/obj/structure/sink{dir = 4; icon_state = "sink"; pixel_x = 11; pixel_y = 0},/turf/simulated/floor/plasteel{icon_state = "hydrofloor"},/area/hydroponics) "ccI" = (/obj/machinery/atmospherics/pipe/simple/cyan/visible,/obj/machinery/light{dir = 4; icon_state = "tube1"},/turf/simulated/floor/plasteel{icon_state = "dark"},/area/atmos) -"ccJ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/weapon/contraband/poster,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) +"ccJ" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 8},/obj/item/weapon/poster/contraband,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "ccK" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 9},/turf/simulated/floor/plating,/area/maintenance/starboard) "ccL" = (/obj/structure/disposalpipe/segment{dir = 4},/obj/machinery/door/airlock/maintenance{name = "Hydroponics Maintenance"; req_access_txt = "35"; req_one_access_txt = "0"},/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/structure/cable/yellow{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor/plating,/area/hydroponics) "ccM" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/visible{dir = 5},/obj/item/device/radio/intercom{freerange = 0; frequency = 1459; name = "Station Intercom (General)"; pixel_x = -30},/turf/simulated/floor/plasteel{dir = 8; icon_state = "caution"},/area/atmos) @@ -5739,7 +5739,7 @@ "cgs" = (/obj/structure/reagent_dispensers/watertank,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cgt" = (/obj/machinery/atmospherics/components/unary/portables_connector/visible{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) "cgu" = (/obj/effect/landmark{name = "xeno_spawn"; pixel_x = -1},/obj/structure/closet/firecloset,/turf/simulated/floor/plating,/area/maintenance/aft{name = "Aft Maintenance"}) -"cgv" = (/obj/structure/rack,/obj/item/weapon/contraband/poster,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) +"cgv" = (/obj/structure/rack,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "cgw" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 6},/turf/simulated/wall,/area/medical/surgery) "cgx" = (/obj/item/clothing/gloves/color/latex,/obj/item/clothing/gloves/color/latex,/obj/item/weapon/storage/box/disks{pixel_x = 2; pixel_y = 2},/obj/structure/table/glass,/turf/simulated/floor/plasteel{tag = "icon-vault"; icon_state = "vault"},/area/medical/genetics) "cgy" = (/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "white"},/area/medical/medbay2{name = "Medbay Storage"}) @@ -7025,7 +7025,7 @@ "cFp" = (/obj/machinery/door/window/southleft{name = "Mass Driver Door"; req_access_txt = "7"},/turf/simulated/floor/plasteel{icon_state = "loadingarea"; tag = "loading"},/area/toxins/mixing{name = "\improper Toxins Lab"}) "cFq" = (/obj/structure/table/glass,/obj/item/weapon/reagent_containers/dropper,/obj/item/weapon/reagent_containers/syringe,/obj/item/weapon/reagent_containers/glass/beaker,/turf/simulated/floor/plasteel{icon_state = "freezerfloor"},/area/medical/virology) "cFr" = (/obj/structure/table/glass,/obj/item/weapon/paper_bin{pixel_x = -2; pixel_y = 9},/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{dir = 8; icon_state = "whitegreen"},/area/medical/virology) -"cFs" = (/obj/structure/closet/crate,/obj/item/weapon/contraband/poster/legit,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) +"cFs" = (/obj/structure/closet/crate,/obj/item/weapon/poster/legit,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating{icon_state = "warnplate"; dir = 1},/area/maintenance/aft{name = "Aft Maintenance"}) "cFv" = (/obj/structure/stool/bed/chair{dir = 4},/turf/simulated/floor/plating/airless{dir = 9; icon_state = "warnplate"},/area/toxins/test_area) "cFw" = (/turf/simulated/floor/plating/airless,/area/toxins/test_area) "cFx" = (/obj/structure/stool/bed/chair{dir = 8},/turf/simulated/floor/plating/airless{dir = 5; icon_state = "warnplate"},/area/toxins/test_area) From b1f3ba46a677b66ffe88d6a9aea1888276b35e04 Mon Sep 17 00:00:00 2001 From: Ergovisavi Date: Sun, 30 Aug 2015 16:27:51 -0700 Subject: [PATCH 037/479] Swarmer revision 2 --- .../living/simple_animal/bot_swarm/swarmer.dm | 136 +++++++++++++----- .../living/simple_animal/hostile/hostile.dm | 18 ++- icons/mob/swarmer.dmi | Bin 12804 -> 15396 bytes 3 files changed, 110 insertions(+), 44 deletions(-) diff --git a/code/modules/mob/living/simple_animal/bot_swarm/swarmer.dm b/code/modules/mob/living/simple_animal/bot_swarm/swarmer.dm index 24af1978011..169e705481f 100644 --- a/code/modules/mob/living/simple_animal/bot_swarm/swarmer.dm +++ b/code/modules/mob/living/simple_animal/bot_swarm/swarmer.dm @@ -60,7 +60,7 @@ faction = list("swarmer") AIStatus = AI_OFF projectiletype = /obj/item/projectile/beam/disabler - pass_flags = PASSTABLE | PASSMOB + pass_flags = PASSTABLE ventcrawler = 2 ranged = 1 projectiletype = /obj/item/projectile/beam/disabler @@ -95,8 +95,9 @@ /mob/living/simple_animal/hostile/swarmer/emp_act() if(health > 1) health = 1 - ..() - health = 0 + return + else + death() /mob/living/simple_animal/hostile/swarmer/CanPass(atom/movable/O) if(istype(O, /obj/item/projectile/beam/disabler))//Allows for swarmers to fight as a group without wasting their shots hitting each other @@ -172,6 +173,12 @@ /obj/machinery/dominator/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S << "This device is attempting to corrupt our entire network; attempting to interact with it is too risky. Aborting." +/obj/effect/decal/cleanable/crayon/gang/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S << "Searching... sensor malfunction! Target lost. Aborting." + +/obj/effect/rune/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S << "Searching... sensor malfunction! Target lost. Aborting." + /obj/structure/reagent_dispensers/fueltank/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S << "Destroying this object would cause a chain reaction. Aborting." @@ -181,6 +188,15 @@ /obj/machinery/portable_atmospherics/canister/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S << "An inhospitable area may be created as a result of destroying this object. Aborting." +/obj/machinery/telecomms/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S << "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting." + +/obj/machinery/message_server/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S << "This communications relay should be preserved, it will be a useful resource to our masters in the future. Aborting." + +/obj/machinery/blackbox_recorder/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) + S << "This machine has recorded large amounts of data on this structure and its inhabitants, it will be a useful resource to our masters in the future. Aborting. " + /obj/machinery/power/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) S << "Disrupting the power grid would bring no benefit to us. Aborting." @@ -188,15 +204,17 @@ S << "This bluespace source will be important to us later. Aborting." /turf/simulated/wall/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(locate(/turf/space) in range(1, src)) - S << "Destroying this object has the potential to cause a hull breach. Aborting." - return + for(var/turf/T in range(1, src)) + if(istype(T, /turf/space) || istype(T.loc, /area/space)) + S << "Destroying this object has the potential to cause a hull breach. Aborting." + return ..() /obj/structure/window/swarmer_act(mob/living/simple_animal/hostile/swarmer/S) - if(locate(/turf/space) in range(1, src)) - S << "Destroying this object has the potential to cause a hull breach. Aborting." - return + for(var/turf/T in range(1, src)) + if(istype(T, /turf/space) || istype(T.loc, /area/space)) + S << "Destroying this object has the potential to cause a hull breach. Aborting." + return ..() /obj/item/stack/cable_coil/swarmer_act(mob/living/simple_animal/hostile/swarmer/S)//Wiring would be too effective as a resource @@ -233,6 +251,10 @@ resources++ do_attack_animation(target) changeNext_move(CLICK_CD_MELEE) + var/obj/effect/swarmer/integrate/I = new /obj/effect/swarmer/integrate(get_turf(target)) + I.pixel_x = target.pixel_x + I.pixel_y = target.pixel_y + I.pixel_z = target.pixel_z if(istype(target, /obj/item/stack)) var/obj/item/stack/S = target S.use(1) @@ -244,7 +266,7 @@ return /mob/living/simple_animal/hostile/swarmer/proc/DisIntegrate(var/atom/movable/target) - new /obj/effect/effect/sparks(get_turf(target)) + new /obj/effect/swarmer/disintegration(get_turf(target)) do_attack_animation(target) changeNext_move(CLICK_CD_MELEE) target.ex_act(3) @@ -280,14 +302,20 @@ /mob/living/simple_animal/hostile/swarmer/proc/DismantleMachine(var/obj/machinery/target) do_attack_animation(target) src << "We begin to dismantle this machine. We will need to be uninterrupted." - new /obj/effect/effect/sparks(get_turf(target)) + var/obj/effect/swarmer/dismantle/D = new /obj/effect/swarmer/dismantle(get_turf(target)) + D.pixel_x = target.pixel_x + D.pixel_y = target.pixel_y + D.pixel_z = target.pixel_z if(do_mob(src, target, 100)) src << "Dismantling complete." var/obj/item/stack/sheet/metal/M = new /obj/item/stack/sheet/metal(target.loc) M.amount = 5 for(var/obj/item/I in target.component_parts) I.loc = M.loc - new /obj/effect/effect/sparks(get_turf(target)) + var/obj/effect/swarmer/disintegration/N = new /obj/effect/swarmer/disintegration(get_turf(target)) + N.pixel_x = target.pixel_x + N.pixel_y = target.pixel_y + N.pixel_z = target.pixel_z target.dropContents() if(istype(target, /obj/machinery/computer)) var/obj/machinery/computer/C = target @@ -295,42 +323,75 @@ C.circuit.loc = M.loc qdel(target) -/obj/effect/swarmer //Default destroyable object for swarmer constructions - name = "swarmer construction" - desc = "Debug swarmer item, this shouldn't be here. Yell at a coder." + +/obj/effect/swarmer //Default swarmer effect object visual feedback + name = "swarmer ui" + desc = null gender = NEUTER icon = 'icons/mob/swarmer.dmi' icon_state = "ui_light" + mouse_opacity = 0 + layer = 4 + unacidable = 1 + +/obj/effect/swarmer/disintegration + icon_state = "disintegrate" + +/obj/effect/swarmer/disintegration/New() + playsound(src.loc, "sparks", 100, 1) + spawn(10) + qdel(src) + +/obj/effect/swarmer/dismantle + icon_state = "dismantle" + +/obj/effect/swarmer/dismantle/New() + spawn(25) + qdel(src) + +/obj/effect/swarmer/integrate + icon_state = "integrate" + +/obj/effect/swarmer/integrate/New() + spawn(5) + qdel(src) + +/obj/effect/swarmer/destructible //Default destroyable object for swarmer constructions luminosity = 1 + mouse_opacity = 1 var/health = 30 -/obj/effect/swarmer/proc/TakeDamage(damage) +/obj/effect/swarmer/destructible/proc/TakeDamage(damage) health -= damage if(health <= 0) qdel(src) -/obj/effect/swarmer/bullet_act(obj/item/projectile/Proj) +/obj/effect/swarmer/destructible/bullet_act(obj/item/projectile/Proj) if(Proj.damage) if((Proj.damage_type == BRUTE || Proj.damage_type == BURN)) TakeDamage(Proj.damage) ..() -/obj/effect/swarmer/attackby(obj/item/weapon/I, mob/living/user, params) +/obj/effect/swarmer/destructible/attackby(obj/item/weapon/I, mob/living/user, params) if(istype(I, /obj/item/weapon)) user.changeNext_move(CLICK_CD_MELEE) user.do_attack_animation(src) TakeDamage(I.force) return -/obj/effect/swarmer/ex_act() +/obj/effect/swarmer/destructible/ex_act() qdel(src) return -/obj/effect/swarmer/blob_act() +/obj/effect/swarmer/destructible/blob_act() qdel(src) return -/obj/effect/swarmer/attack_animal(mob/living/user) +/obj/effect/swarmer/destructible/emp_act() + qdel(src) + return + +/obj/effect/swarmer/destructible/attack_animal(mob/living/user) if(isanimal(user)) var/mob/living/simple_animal/S = user S.do_attack_animation(src) @@ -343,24 +404,27 @@ set name = "Create trap" set category = "Swarmer" set desc = "Creates a simple trap that will non-lethally electrocute anything that steps on it. Costs 5 resources" - if(/obj/effect/swarmer/trap in loc) + if(/obj/effect/swarmer/destructible/trap in loc) src << "There is already a trap here. Aborting." return - Fabricate(/obj/effect/swarmer/trap, 5) + Fabricate(/obj/effect/swarmer/destructible/trap, 5) return -/obj/effect/swarmer/trap +/obj/effect/swarmer/destructible/trap name = "swarmer trap" - desc = "A quickly assembled electric trap. Will not retain its form if damaged enough." + desc = "A quickly assembled trap that electrifies living beings and overwhelms machine sensors. Will not retain its form if damaged enough." icon_state = "trap" luminosity = 1 health = 10 -/obj/effect/swarmer/trap/Crossed(var/atom/movable/AM) +/obj/effect/swarmer/destructible/trap/Crossed(var/atom/movable/AM) if(isliving(AM)) var/mob/living/L = AM if(!istype(L, /mob/living/simple_animal/hostile/swarmer)) + playsound(loc,'sound/effects/snap.ogg',50, 1, -1) L.electrocute_act(0, src, 1, 1) + if(isrobot(L)) + L.Weaken(5) qdel(src) ..() @@ -368,13 +432,17 @@ set name = "Create barricade" set category = "Swarmer" set desc = "Creates a barricade that will stop anything but swarmers and disabler beams from passing through." - if(/obj/effect/swarmer/blockade in loc) + if(/obj/effect/swarmer/destructible/blockade in loc) src << "There is already a blockade here. Aborting." return - Fabricate(/obj/effect/swarmer/blockade, 5) + if(resources < 5) + src << "We do not have the resources for this!" + return + if(do_mob(src, src, 10)) + Fabricate(/obj/effect/swarmer/destructible/blockade, 5) return -/obj/effect/swarmer/blockade +/obj/effect/swarmer/destructible/blockade name = "swarmer blockade" desc = "A quickly assembled energy blockade. Will not retain its form if damaged enough, but disabler beams and swarmers pass right through." icon_state = "barricade" @@ -383,7 +451,7 @@ density = 1 anchored = 1 -/obj/effect/swarmer/blockade/CanPass(atom/movable/O) +/obj/effect/swarmer/destructible/blockade/CanPass(atom/movable/O) if(isswarmer(O)) return 1 if(istype(O, /obj/item/projectile/beam/disabler)) @@ -436,7 +504,7 @@ /obj/screen/swarmer/FabricateTrap icon_state = "ui_trap" - name = "Create trap" + name = "Create trap (Costs 5 Resources)" desc = "Creates a trap that will nonlethally shock any non-swarmer that attempts to cross it. (Costs 5 resources)" /obj/screen/swarmer/FabricateTrap/Click() @@ -446,7 +514,7 @@ /obj/screen/swarmer/Barricade icon_state = "ui_barricade" - name = "Create barricade" + name = "Create barricade (Costs 5 Resources)" desc = "Creates a destructible barricade that will stop any non swarmer from passing it. Also allows disabler beams to pass through. (Costs 5 resources)" /obj/screen/swarmer/Barricade/Click() @@ -456,8 +524,8 @@ /obj/screen/swarmer/Replicate icon_state = "ui_replicate" - name = "Replicate" - desc = "Creates a another of our kind. (Costs 50 resources)" + name = "Replicate (Costs 50 Resources)" + desc = "Creates a another of our kind." /obj/screen/swarmer/Replicate/Click() if(isswarmer(usr)) diff --git a/code/modules/mob/living/simple_animal/hostile/hostile.dm b/code/modules/mob/living/simple_animal/hostile/hostile.dm index 613e0d1eda9..12a73e8edc4 100644 --- a/code/modules/mob/living/simple_animal/hostile/hostile.dm +++ b/code/modules/mob/living/simple_animal/hostile/hostile.dm @@ -223,22 +223,21 @@ var/target = the_target visible_message("[src] [ranged_message] at [target]!") - var/tturf = get_turf(target) if(rapid) spawn(1) - Shoot(tturf, src.loc, src) + Shoot(target, src.loc, src) if(casingtype) new casingtype(get_turf(src)) spawn(4) - Shoot(tturf, src.loc, src) + Shoot(target, src.loc, src) if(casingtype) new casingtype(get_turf(src)) spawn(6) - Shoot(tturf, src.loc, src) + Shoot(target, src.loc, src) if(casingtype) new casingtype(get_turf(src)) else - Shoot(tturf, src.loc, src) + Shoot(target, src.loc, src) if(casingtype) new casingtype ranged_cooldown = ranged_cooldown_cap @@ -248,17 +247,16 @@ if(target == start) return - var/obj/item/projectile/A = new projectiletype(user:loc) + var/obj/item/projectile/A = new projectiletype(src.loc) playsound(user, projectilesound, 100, 1) if(!A) return - - if (!istype(target, /turf)) - qdel(A) - return A.current = target A.firer = src A.yo = target:y - start:y A.xo = target:x - start:x + if(AIStatus == AI_OFF)//Don't want mindless mobs to have their movement screwed up firing in space + newtonian_move(get_dir(target, user)) + A.original = target A.fire() return diff --git a/icons/mob/swarmer.dmi b/icons/mob/swarmer.dmi index 96a9f9ae09e1870344142cbb3439434468f5082e..dffd6b2490c25cdcfa963bd11f26e2797cb1fa44 100644 GIT binary patch literal 15396 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 aVy1f^im#v1JOg+C0*WtGWQ(7h2L3NIHA!p$ literal 12804 zcmaL8by!qw^ftPO8hS{T21x-yx|yLnRU{+?1ZkvuMnn(=X%z*A5D){9kZ$SDk#1q6 z2asmY=KY=TT<5yZ_nm+C>^-xeUeA5sYprKujSaP^$eGCj0HD&*RyPFz2zU!DkdlDc zO_ge6@MAmVp1Gg;V_yd!7jHioFHZmn%7{H6O?ow zY0{}Hyh{X?|XBbm8*e9 z*tY|(m#=ge9v!~E$y)j;O^R2K2sZHHxt$uVVwlBU)A;MV3v={=qIr76XJ;PQ-til`qm@8k^Uo!6*&>l{%4W4h zl-6HwR8%)`ieS~hz+M<92pjEvtdgy~kqW&h$l*UxI_sRc-7q8C*X$g)HFAdu z6NPyW*0<}BGs+LvvKn`^=C6fE+_(PQD1Q{Ormz+^e=@L~g)Yg@CuU`3t%+4Ek!Wsd zS!AmwTv+IOv=W*LdE+O^9#=05^zEb!^kxr7TO3-Mve|GFHw z0n{IvNSDEa$5sY~Z=oftq1Km^oah-s$BxSpRzL>uT1nBxaj>h*a1a42{F;ffoDoMJ zi~#UyWUIhof1xt0q!-Sz5(-HN>r8AQL4<~W$H^oQynC_joisz|#O57RL>|#b3&^1Qy7+^Kgw%xm?E~ogC{8AgFKt>V&PFq@Y79R4 z7$c(rS*uslDU>ovHNZ89AVrg0&PE>+|M%CCD9As*47 zlGPNPYXrAIf!dcAM9m{et_mSSBGLsv8fx>i<-choKHDf5@wcjkcSC}#0UH(+24|F( zMV%skGM7Hqe!uz1EWdGdbyZ!S`196opE~KL|4HcWd7-luRuqO9v*GR4w;RFqs)Qhzd;T@4u+RfYy)+=Yc-0WB=0cF~a7~1z3 zaDDLZiAFeJWkDGzVaa}nYp{vNSvF!;(Ns9BqO8S4G&kT0_&RemXa1A_hFRUI43mZ- zoHmVo0GsP54Aqd^2@lM5_3&%RUN9a@zvUy9JkYaI>e+i#d*1MNC+*_#crako=0^Bw zANZ`LuW96Hs_VS!zpmd6zTi6yVOEB5-X&?~LbB+4)w}X#reSg*E z2oDV5$qd9Ct)lg)jgJ(;&akqkYw&G}3I#)CWo5+)d⩽rRN}#}3why&bjd`-5=w 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 From 77d91af82c3048e078f1823b6bb1b79081bafd16 Mon Sep 17 00:00:00 2001 From: Joonatan O'Rourke Date: Sat, 5 Sep 2015 09:42:14 +0300 Subject: [PATCH 038/479] fix turbine --- code/modules/power/turbine.dm | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 6e095836457..97cf4d1961f 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -84,10 +84,9 @@ /obj/machinery/power/compressor/initialize() ..() - spawn(10) - locate_machinery() - if(!turbine) - stat |= BROKEN + locate_machinery() + if(!turbine) + stat |= BROKEN #define COMPFRICTION 5e5 @@ -206,10 +205,9 @@ /obj/machinery/power/turbine/initialize() ..() - spawn(10) - locate_machinery() - if(!compressor) - stat |= BROKEN + locate_machinery() + if(!compressor) + stat |= BROKEN /obj/machinery/power/turbine/RefreshParts() var/P = 0 From ecbae746953755321918ad51d3a9956f3c91fd51 Mon Sep 17 00:00:00 2001 From: Joonatan O'Rourke Date: Sat, 5 Sep 2015 10:45:57 +0300 Subject: [PATCH 039/479] fix turbine computer --- code/modules/power/turbine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/power/turbine.dm b/code/modules/power/turbine.dm index 97cf4d1961f..d0fe04ce0a0 100644 --- a/code/modules/power/turbine.dm +++ b/code/modules/power/turbine.dm @@ -348,7 +348,7 @@ locate_machinery() /obj/machinery/computer/turbine_computer/locate_machinery() - compressor = locate(/obj/machinery/power/compressor) in range(5) + compressor = locate(/obj/machinery/power/compressor) in range(5, src) /obj/machinery/computer/turbine_computer/attack_hand(var/mob/user as mob) if(..()) From 6df9d4975a151fbafc7c7b686916bcc048e07015 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 5 Sep 2015 19:48:37 +0200 Subject: [PATCH 040/479] Adds abductor event Adds event gamemode white/blacklist Moves and renames some helper procs Some QoL for baton --- code/__HELPERS/game.dm | 50 +++++++++ code/controllers/subsystem/events.dm | 2 + .../gamemodes/abduction/abduction_gear.dm | 20 +++- .../machinery/computer/camera_advanced.dm | 2 +- code/modules/admin/verbs/one_click_antag.dm | 104 ++---------------- code/modules/events/event.dm | 3 + tgstation.dme | 1 + 7 files changed, 81 insertions(+), 101 deletions(-) diff --git a/code/__HELPERS/game.dm b/code/__HELPERS/game.dm index 21626590306..32593329621 100644 --- a/code/__HELPERS/game.dm +++ b/code/__HELPERS/game.dm @@ -380,3 +380,53 @@ return new /datum/projectile_data(src_x, src_y, time, distance, power_x, power_y, dest_x, dest_y) +/proc/pollCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck) + var/list/mob/dead/observer/candidates = list() + var/time_passed = world.time + if (!Question) + Question = "Would you like to be a special role?" + + for(var/mob/dead/observer/G in player_list) + if(!G.key || !G.client) + continue + if (gametypeCheck) + if(!gametypeCheck.age_check(G.client)) + continue + if (jobbanType) + if(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate")) + continue + spawn(0) + G << 'sound/misc/notice2.ogg' //Alerting them to their consideration + switch(alert(G,Question,"Please answer in 30 seconds!","Yes","No")) + if("Yes") + G << "Choice registered: Yes." + if((world.time-time_passed)>300)//If more than 30 game seconds passed. + G << "Sorry, you were too late for the consideration!" + G << 'sound/machines/buzz-sigh.ogg' + return + candidates += G + if("No") + G << "Choice registered: No." + return + else + return + sleep(300) + + //Check all our candidates, to make sure they didn't log off during the 30 second wait period. + for(var/mob/dead/observer/G in candidates) + if(!G.key || !G.client) + candidates.Remove(G) + + return candidates + +/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character + if(!G_found || !G_found.key) return + + //First we spawn a dude. + var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. + + G_found.client.prefs.copy_to(new_character) + ready_dna(new_character) + new_character.key = G_found.key + + return new_character \ No newline at end of file diff --git a/code/controllers/subsystem/events.dm b/code/controllers/subsystem/events.dm index b381803ba67..eb5b6b5db80 100644 --- a/code/controllers/subsystem/events.dm +++ b/code/controllers/subsystem/events.dm @@ -64,6 +64,8 @@ var/datum/subsystem/events/SSevent for(var/datum/round_event_control/E in control) if(E.occurrences >= E.max_occurrences) continue if(E.earliest_start >= world.time) continue + if(ticker.mode.config_tag in E.gamemode_blacklist) continue + if(E.gamemode_whitelist && !(ticker.mode.config_tag in E.gamemode_whitelist)) continue if(E.holidayID) if(!holidays || !holidays[E.holidayID]) continue if(E.weight < 0) //for round-start events etc. diff --git a/code/game/gamemodes/abduction/abduction_gear.dm b/code/game/gamemodes/abduction/abduction_gear.dm index 9595f0883b9..0793989952f 100644 --- a/code/game/gamemodes/abduction/abduction_gear.dm +++ b/code/game/gamemodes/abduction/abduction_gear.dm @@ -460,11 +460,16 @@ Congratulations! You are now trained for xenobiology research!"} /obj/item/weapon/abductor_baton/proc/SleepAttack(mob/living/L,mob/living/user) if(L.stunned) L.SetSleeping(60) - L.visible_message("[user] has induced sleep in [L] with [src]!", \ + L.visible_message("[user] has induced sleep in [L] with [src]!", \ "You suddenly feel very drowsy!") - playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) + playsound(loc, 'sound/weapons/Egloves.ogg', 50, 1, -1) - add_logs(user, L, "put to sleep") + add_logs(user, L, "put to sleep") + else + L.drowsyness += 1 + user << "Sleep inducement works fully only on stunned specimens! " + L.visible_message("[user] tried to induce sleep in [L] with [src]!", \ + "You suddenly feel drowsy!") return /obj/item/weapon/abductor_baton/proc/CuffAttack(mob/living/L,mob/living/user) @@ -490,13 +495,22 @@ Congratulations! You are now trained for xenobiology research!"} "[user] probes you!") var/species = "Unknown species" + var/helptext = "Species unsuitable for experiments." + if(ishuman(L)) var/mob/living/carbon/human/H = L if(H.dna && H.dna.species) species = "[H.dna.species.name]" if(L.mind && L.mind.changeling) species = "Changeling lifeform" + var/obj/item/organ/internal/gland/temp = locate() in H.internal_organs + if(temp) + helptext = "Experimental gland detected!" + else + helptext = "Subject suitable for experiments." + user << "Probing result:[species]" + user << "[helptext]" /obj/item/weapon/restraints/handcuffs/energy name = "hard-light energy field" diff --git a/code/game/machinery/computer/camera_advanced.dm b/code/game/machinery/computer/camera_advanced.dm index d7b9be9aaac..4cc24bf776b 100644 --- a/code/game/machinery/computer/camera_advanced.dm +++ b/code/game/machinery/computer/camera_advanced.dm @@ -38,7 +38,7 @@ GrantActions(user) current_user = user eyeobj.user = user - eyeobj.name = "Camere Eye ([user.name])" + eyeobj.name = "Camera Eye ([user.name])" L.remote_view = 1 L.remote_control = eyeobj L.client.perspective = EYE_PERSPECTIVE diff --git a/code/modules/admin/verbs/one_click_antag.dm b/code/modules/admin/verbs/one_click_antag.dm index 25b84838539..b8c43ebdb6c 100644 --- a/code/modules/admin/verbs/one_click_antag.dm +++ b/code/modules/admin/verbs/one_click_antag.dm @@ -233,7 +233,7 @@ /datum/admins/proc/makeNukeTeam() var/datum/game_mode/nuclear/temp = new - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp) + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a nuke team being sent in?", "operative", temp) var/list/mob/dead/observer/chosen = list() var/mob/dead/observer/theghost = null @@ -307,7 +307,7 @@ // DEATH SQUADS /datum/admins/proc/makeDeathsquad() var/mission = input("Assign a mission to the deathsquad", "Assign Mission", "Leave no witnesses.") - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null) + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an elite Nanotrasen Strike Team?", "deathsquad", null) var/squadSpawned = 0 if(candidates.len >= 2) //Minimum 2 to be considered a squad @@ -413,7 +413,7 @@ /datum/admins/proc/makeOfficial() var/mission = input("Assign a task for the official", "Assign Task", "Conduct a routine preformance review of [station_name()] and its Captain.") - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered to be a Centcom Official?", "pAI") + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered to be a Centcom Official?", "pAI") if(candidates.len) var/mob/dead/observer/chosen_candidate = pick(candidates) @@ -466,7 +466,7 @@ return makeOfficial() var/teamsize = min(7,input("Maximum size of team? (7 max)", "Select Team Size",4) as null|num) var/mission = input("Assign a mission to the Emergency Response Team", "Assign Mission", "Assist the station.") - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null) + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for a Code [alert] Nanotrasen Emergency Response Team?", "deathsquad", null) var/teamSpawned = 0 if(candidates.len > 0) @@ -559,50 +559,11 @@ //Abductors /datum/admins/proc/makeAbductorTeam() - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for an Abductor Team?", "abductor", null) - - if(candidates.len >= 2) - //Oh god why we can't have static functions - var/number = ticker.mode.abductor_teams + 1 - - var/datum/game_mode/abduction/temp - if(ticker.mode.config_tag == "abduction") - temp = ticker.mode - else - temp = new - - var/agent_mind = pick(candidates) - candidates -= agent_mind - var/scientist_mind = pick(candidates) - - var/mob/living/carbon/human/agent=makeBody(agent_mind) - var/mob/living/carbon/human/scientist=makeBody(scientist_mind) - - agent_mind = agent.mind - scientist_mind = scientist.mind - - temp.scientists.len = number - temp.agents.len = number - temp.abductors.len = 2*number - temp.team_objectives.len = number - temp.team_names.len = number - temp.scientists[number] = scientist_mind - temp.agents[number] = agent_mind - temp.abductors |= list(agent_mind,scientist_mind) - temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind) - temp.post_setup_team(number) - - ticker.mode.abductor_teams++ - - if(ticker.mode.config_tag != "abduction") - ticker.mode.abductors |= temp.abductors - - return 1 - else - return + new /datum/round_event/abductor + return 1 /datum/admins/proc/makeRevenant() - var/list/mob/dead/observer/candidates = getCandidates("Do you wish to be considered for becoming a revenant?", "revenant", null) + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for becoming a revenant?", "revenant", null) if(candidates.len >= 1) var/spook_op = pick(candidates) var/mob/dead/observer/O = spook_op @@ -644,54 +605,3 @@ candidates.Remove(H) return 1 return 0 - -/datum/admins/proc/getCandidates(var/Question, var/jobbanType, var/datum/game_mode/gametypeCheck) - var/list/mob/dead/observer/candidates = list() - var/time_passed = world.time - if (!Question) - Question = "Would you like to be a special role?" - - for(var/mob/dead/observer/G in player_list) - if(!G.key || !G.client) - continue - if (gametypeCheck) - if(!gametypeCheck.age_check(G.client)) - continue - if (jobbanType) - if(jobban_isbanned(G, jobbanType) || jobban_isbanned(G, "Syndicate")) - continue - spawn(0) - G << 'sound/misc/notice2.ogg' //Alerting them to their consideration - switch(alert(G,Question,"Please answer in 30 seconds!","Yes","No")) - if("Yes") - G << "Choice registered: Yes." - if((world.time-time_passed)>300)//If more than 30 game seconds passed. - G << "Sorry, you were too late for the consideration!" - G << 'sound/machines/buzz-sigh.ogg' - return - candidates += G - if("No") - G << "Choice registered: No." - return - else - return - sleep(300) - - //Check all our candidates, to make sure they didn't log off during the 30 second wait period. - for(var/mob/dead/observer/G in candidates) - if(!G.key || !G.client) - candidates.Remove(G) - - return candidates - -/datum/admins/proc/makeBody(mob/dead/observer/G_found) // Uses stripped down and bastardized code from respawn character - if(!G_found || !G_found.key) return - - //First we spawn a dude. - var/mob/living/carbon/human/new_character = new(pick(latejoin))//The mob being spawned. - - G_found.client.prefs.copy_to(new_character) - ready_dna(new_character) - new_character.key = G_found.key - - return new_character diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm index 07dbff7d269..6d555cc8448 100644 --- a/code/modules/events/event.dm +++ b/code/modules/events/event.dm @@ -20,6 +20,9 @@ var/alertadmins = 1 //should we let the admins know this event is firing //should be disabled on events that fire a lot + var/gamemode_blacklist = list() // Event won't happen in these gamemodes + var/gamemode_whitelist = list() // Event will happen ONLY in these gamemodes if not empty + /datum/round_event_control/wizard wizardevent = 1 diff --git a/tgstation.dme b/tgstation.dme index 252a8f2c178..ccd81493634 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -950,6 +950,7 @@ #include "code\modules\detectivework\footprints_and_rag.dm" #include "code\modules\detectivework\scanner.dm" #include "code\modules\emoji\emoji_parse.dm" +#include "code\modules\events\abductor.dm" #include "code\modules\events\alien_infestation.dm" #include "code\modules\events\anomaly.dm" #include "code\modules\events\anomaly_bluespace.dm" From cd7806818ed8d0bb080e2e43ea20cbef0496ae83 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 5 Sep 2015 20:16:22 +0200 Subject: [PATCH 041/479] whoops --- code/modules/events/abductor.dm | 61 +++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 code/modules/events/abductor.dm diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm new file mode 100644 index 00000000000..7e0146a2c97 --- /dev/null +++ b/code/modules/events/abductor.dm @@ -0,0 +1,61 @@ +/datum/round_event_control/abductor + name = "Abductors" + typepath = /datum/round_event/abductor + weight = 5 + max_occurrences = 1 + + earliest_start = 180000 // 30 min + + gamemode_blacklist = list("nuclear","wizard","cult","gang","revolution","abduction","blob") + +/datum/round_event/abductor + +/datum/round_event/abductor/start() + //spawn abductor team + if(!makeAbductorTeam()) + message_admins("Abductor event failed to find players. Retrying in 30s.") + spawn(30) + makeAbductorTeam() + +/datum/round_event/abductor/proc/makeAbductorTeam() + var/list/mob/dead/observer/candidates = pollCandidates("Do you wish to be considered for an Abductor Team?", "abductor", null) + + if(candidates.len >= 2) + //Oh god why we can't have static functions + var/number = ticker.mode.abductor_teams + 1 + + var/datum/game_mode/abduction/temp + if(ticker.mode.config_tag == "abduction") + temp = ticker.mode + else + temp = new + + var/agent_mind = pick(candidates) + candidates -= agent_mind + var/scientist_mind = pick(candidates) + + var/mob/living/carbon/human/agent=makeBody(agent_mind) + var/mob/living/carbon/human/scientist=makeBody(scientist_mind) + + agent_mind = agent.mind + scientist_mind = scientist.mind + + temp.scientists.len = number + temp.agents.len = number + temp.abductors.len = 2*number + temp.team_objectives.len = number + temp.team_names.len = number + temp.scientists[number] = scientist_mind + temp.agents[number] = agent_mind + temp.abductors |= list(agent_mind,scientist_mind) + temp.make_abductor_team(number,preset_scientist=scientist_mind,preset_agent=agent_mind) + temp.post_setup_team(number) + + ticker.mode.abductor_teams++ + + if(ticker.mode.config_tag != "abduction") + ticker.mode.abductors |= temp.abductors + + return 1 + else + return 0 \ No newline at end of file From 9642f34be2ee8b1243127aafa18d74f548e8c3c5 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sat, 5 Sep 2015 23:06:08 +0200 Subject: [PATCH 042/479] Fixes spacevine controller not spawning during event. --- code/modules/events/spacevine.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/events/spacevine.dm b/code/modules/events/spacevine.dm index 4b298b11009..05a52a4f6d3 100644 --- a/code/modules/events/spacevine.dm +++ b/code/modules/events/spacevine.dm @@ -9,7 +9,7 @@ for(var/area/hallway/A in world) for(var/turf/simulated/F in A) - if(!F.density && !F.contents.len) + if(!F.density || !F.contents.len) turfs += F if(turfs.len) //Pick a turf to spawn at if we can From d9073aefece55f432352e606fc7c89cea8f1bbc4 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sat, 5 Sep 2015 23:07:32 +0200 Subject: [PATCH 043/479] Makes blob event not happen during blob Makes abductor event happen during gang,blob or cult --- code/modules/events/abductor.dm | 2 +- code/modules/events/blob.dm | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/code/modules/events/abductor.dm b/code/modules/events/abductor.dm index 7e0146a2c97..3a4aacbb116 100644 --- a/code/modules/events/abductor.dm +++ b/code/modules/events/abductor.dm @@ -6,7 +6,7 @@ earliest_start = 180000 // 30 min - gamemode_blacklist = list("nuclear","wizard","cult","gang","revolution","abduction","blob") + gamemode_blacklist = list("nuclear","wizard","revolution","abduction") /datum/round_event/abductor diff --git a/code/modules/events/blob.dm b/code/modules/events/blob.dm index c678bdab8dc..323908775fe 100644 --- a/code/modules/events/blob.dm +++ b/code/modules/events/blob.dm @@ -6,6 +6,8 @@ earliest_start = 48000 // 1 hour 20 minutes + gamemode_blacklist = list("blob") // Just in case blob survives that long + /datum/round_event/blob announceWhen = 12 endWhen = 120 From d701946cd45647538cae999a8f89fd6958d17946 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 00:02:22 +0200 Subject: [PATCH 044/479] Adds do_after to the spider verbs. --- .../mob/living/simple_animal/hostile/giant_spider.dm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm index a8a4cdc4357..f1ce0df13fc 100644 --- a/code/modules/mob/living/simple_animal/hostile/giant_spider.dm +++ b/code/modules/mob/living/simple_animal/hostile/giant_spider.dm @@ -155,7 +155,7 @@ busy = SPINNING_WEB src.visible_message("\the [src] begins to secrete a sticky substance.") stop_automated_movement = 1 - spawn(40) + if(do_after(src, 40, target = T)) if(busy == SPINNING_WEB && src.loc == T) new /obj/effect/spider/stickyweb(T) busy = 0 @@ -186,7 +186,7 @@ src.visible_message("\the [src] begins to secrete a sticky substance around \the [cocoon_target].") stop_automated_movement = 1 walk(src,0) - spawn(50) + if(do_after(src, 50, target = src)) if(busy == SPINNING_COCOON) if(cocoon_target && istype(cocoon_target.loc, /turf) && get_dist(src,cocoon_target) <= 1) var/obj/effect/spider/cocoon/C = new(cocoon_target.loc) @@ -236,7 +236,7 @@ busy = LAYING_EGGS src.visible_message("\the [src] begins to lay a cluster of eggs.") stop_automated_movement = 1 - spawn(50) + if(do_after(src, 50, target = src.loc)) if(busy == LAYING_EGGS) E = locate() in get_turf(src) if(!E) From 132744147862d7ae57f941f1daa0ff25963623e8 Mon Sep 17 00:00:00 2001 From: octareenroon91 Date: Sat, 5 Sep 2015 16:47:21 -0600 Subject: [PATCH 045/479] Correct 'You inject' text Injections will now correctly report the amount of reagent you inject. Lethal injection syringes specifically will report correctly. --- code/modules/reagents/reagent_containers/syringes.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/reagents/reagent_containers/syringes.dm b/code/modules/reagents/reagent_containers/syringes.dm index 3bac3f14830..5403b0ea02b 100644 --- a/code/modules/reagents/reagent_containers/syringes.dm +++ b/code/modules/reagents/reagent_containers/syringes.dm @@ -180,7 +180,7 @@ C.inject_blood(src,5) else src.reagents.trans_to(target, amount_per_transfer_from_this) - user << "You inject 5 units of the solution. The syringe now contains [src.reagents.total_volume] units." + user << "You inject [amount_per_transfer_from_this] units of the solution. The syringe now contains [src.reagents.total_volume] units." if (reagents.total_volume <= 0 && mode==SYRINGE_INJECT) mode = SYRINGE_DRAW update_icon() From 55cc574ff696b4887bbbf5c21a9f8e28befe5a8c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sat, 5 Sep 2015 23:51:23 +0100 Subject: [PATCH 046/479] Fixed runtime maybe? Tweaked dmi Emagqdelruntime --- code/game/machinery/doors/airlock.dm | 20 +++++++++++++------ icons/obj/doors/airlocks/hatch/overlays.dmi | Bin 7414 -> 4673 bytes icons/obj/doors/airlocks/station/command.dmi | Bin 4791 -> 4798 bytes 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/code/game/machinery/doors/airlock.dm b/code/game/machinery/doors/airlock.dm index 5d395097d98..ab82c39ee52 100644 --- a/code/game/machinery/doors/airlock.dm +++ b/code/game/machinery/doors/airlock.dm @@ -136,7 +136,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/isWireCut(wireIndex) // You can find the wires in the datum folder. - return (wires && wires.IsIndexCut(wireIndex)) + return wires.IsIndexCut(wireIndex) /obj/machinery/door/airlock/proc/canAIControl() return ((src.aiControlDisabled!=1) && (!src.isAllPowerCut())); @@ -172,6 +172,8 @@ About the new airlock wires panel: var/cont = 1 while (cont) sleep(10) + if(qdeleted(src)) + return cont = 0 if(src.secondsMainPowerLost>0) if((!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER1)) && (!src.isWireCut(AIRLOCK_WIRE_MAIN_POWER2))) @@ -860,20 +862,24 @@ About the new airlock wires panel: if(beingcrowbarred == 0) //being fireaxe'd var/obj/item/weapon/twohanded/fireaxe/F = C if(F:wielded) - spawn(0) open(2) + spawn(0) + open(2) else user << "You need to be wielding the fire axe to do that!" else - spawn(0) open(2) + spawn(0) + open(2) else if(beingcrowbarred == 0) var/obj/item/weapon/twohanded/fireaxe/F = C if(F:wielded) - spawn(0) close(2) + spawn(0) + close(2) else user << "You need to be wielding the fire axe to do that!" else - spawn(0) close(2) + spawn(0) + close(2) else if(istype(C, /obj/item/weapon/airlock_painter)) change_paintjob(C, user) @@ -1028,7 +1034,7 @@ About the new airlock wires panel: /obj/machinery/door/airlock/proc/autoclose() - if(!density && !operating && !locked && !welded && autoclose) + if(!qdeleted(src) && !density && !operating && !locked && !welded && autoclose) close() /obj/machinery/door/airlock/proc/change_paintjob(obj/item/C, mob/user) @@ -1114,6 +1120,8 @@ About the new airlock wires panel: if(density && hasPower() && !emagged) update_icon(AIRLOCK_EMAG) sleep(6) + if(qdeleted(src)) + return open() emagged = 1 desc = "Its access panel is smoking slightly." diff --git a/icons/obj/doors/airlocks/hatch/overlays.dmi b/icons/obj/doors/airlocks/hatch/overlays.dmi index 8c0fd4e0ee9803536162ade157781d7130e6ddf5..738f7e8fce5cd6ab3a1037df976f602cff817ea1 100644 GIT binary patch literal 4673 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%0DxN1rU=;s>i!3qHmx*K z?Pd>8#FU3NlVNQywI<$S}wDdwep^8!I?CVq3chuzh>)bTCZZh zAnAhbmdM1q=NrxFrVV4rD8gQrXZrX~t>-j&+;KVZ0mpXEB^g*4Tf&g;BS=#AFg?U4 zuI7L`?~AWev($|yhGJTOj4CZ~fR!W3@K6IBaR7bY0=et6IE=&2zux9aM)K-cgQq9O zK4#x&^`br!F7K*?eAeQCH`nX+^4^)nc|V5GXL6+WkqRj0r+>Yrh-ea(sd)QwR;=eX zENqFCF#!vu)0{>;60Yq5F%J00Gs?u=^3^r5AjYym)gm=VGhSnwDY`HGHJ9&C>lyhy z9k0ocyX~xIi{yn+b+7q+OETyV60Yq8{e+q7OZ?2fC9<*v^(GotTrxBKwxzlPWVxfe zdbmQ@2h&N9`I;FMV@ogXe+#7sk_eyZX4nv^*~C_QYcq+wiZl7C zS}&Tc(pj#+=550L-s2@XgY@_-RoDayP7N4qGAr~qkWn__!S@Z~=rv@8Xonz4IUIr! zK@8Wo<^rDVjcom;b7X3;%i)c!E1VEos|f-|tZH|?YwB%9yXAxPxA7Ze=lwhP#sj5m z>_QHbgZpq<`T4wh&os2wMOeWXS(85{f5G+o+K5-iS7X+jr73td{I=HS1KjsUZl(Z2 zu~f+l02btq9lIpLnh*d_6XMl+Eq*r=QHPE9at5Wa<~%-j(wfi1(rL)%L3)gWu0GDL zT0h~AA8P0~m-(`Zkw0JhlW`XxLCf2f@XR?{U=$ybKyQ1SZ(}155N4TQ-rZ!-pd5Lz zmvu1df9A|Q>ACx$-qwjo8fkY=#mXd})*&uBP~)_!r2ZP@aTg%bgwuYA^4ApSjHie8 zmwr`#Lyd&?`_1O*lG6#$>PvV;25Kbpj7`!M3jgoG{~P`PFQ)e#VlwYbtpgj82ma3l N>D@8XD%Y@o`Cr%>SsVZW diff --git a/icons/obj/doors/airlocks/station/command.dmi b/icons/obj/doors/airlocks/station/command.dmi index 5e13c72478711b61afcebdc023d392a09100bac2..e473eb1cd10a30a7b7b72759f5519276143c6574 100644 GIT binary patch delta 208 zcmV;>05AWyCB7w)B!9blR9JLGWpiV4X>fFDZ*Bkpc$}?}!3x4K42I9mQ-tj*qEo!} zA{(;9_6lRH-4>|LXshDedl(c1!5&5~34Hwg`EtBgx4Ol$so|-eC$=c@ygz_=kqR?P zJQW~jP179K!-qa-l$Z^My;d0rMb4wdBZ$%UcfIZr<3-yfh(+x5o4bHe+VpRfSnT3} zFwDz$%wX7W5yRF8_ZR~4|LP+d(a7 delta 201 zcmV;)05<==CATGzB!9GeR9JLGWpiV4X>fFDZ*Bkpc$}q>!3x4K42I9mQ-tj*qEo!} zA{(;9_6lRH*%qj+v{mu#Jq!whV438Sz?bm-$?;rW>K4nUh6g#%)}X}Wb_e3gD$FSH zP=J_;r#UQx4}Bn%m<`%`QW*%v&ZERVh|%>|TKb6D8<`}C%|7& Date: Sun, 6 Sep 2015 00:09:30 -0400 Subject: [PATCH 047/479] Fixes Stimulants Speedbuff --- code/modules/reagents/Chemistry-Holder.dm | 2 +- html/changelogs/Fox P McCloud - stimulantsfix .yml | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 html/changelogs/Fox P McCloud - stimulantsfix .yml diff --git a/code/modules/reagents/Chemistry-Holder.dm b/code/modules/reagents/Chemistry-Holder.dm index 02c818cdbf2..1d4630041b7 100644 --- a/code/modules/reagents/Chemistry-Holder.dm +++ b/code/modules/reagents/Chemistry-Holder.dm @@ -400,7 +400,7 @@ var/const/PATCH = 4 //patches /datum/reagents/proc/check_gofast(mob/M) if(istype(M, /mob)) - if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")) + if(M.reagents.has_reagent("unholywater")||M.reagents.has_reagent("nuka_cola")||M.reagents.has_reagent("stimulants")) return 1 else M.status_flags &= ~GOTTAGOFAST diff --git a/html/changelogs/Fox P McCloud - stimulantsfix .yml b/html/changelogs/Fox P McCloud - stimulantsfix .yml new file mode 100644 index 00000000000..297992176cd --- /dev/null +++ b/html/changelogs/Fox P McCloud - stimulantsfix .yml @@ -0,0 +1,7 @@ + +author: Fox P McCloud + +delete-after: True + +changes: + - bugfix: "fixes stimulants not properly applying its speedbuff." From fdf8fde2581d740c1ac45f9718618a6985755a79 Mon Sep 17 00:00:00 2001 From: duncathan Date: Sat, 5 Sep 2015 23:18:48 -0600 Subject: [PATCH 048/479] fixes a race condition causing roundstart runtimes with certain atmos components --- code/ATMOSPHERICS/atmospherics.dm | 2 +- code/ATMOSPHERICS/components/components_base.dm | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/atmospherics.dm b/code/ATMOSPHERICS/atmospherics.dm index d8475939dae..4b6d445a3db 100644 --- a/code/ATMOSPHERICS/atmospherics.dm +++ b/code/ATMOSPHERICS/atmospherics.dm @@ -28,8 +28,8 @@ Pipelines + Other Objects -> Pipe network var/list/obj/machinery/atmospherics/nodes = list() /obj/machinery/atmospherics/New() - ..() nodes.len = device_type + ..() SSair.atmos_machinery += src SetInitDirections() if(can_unwrench) diff --git a/code/ATMOSPHERICS/components/components_base.dm b/code/ATMOSPHERICS/components/components_base.dm index ace7ce4b31b..9fa02ba76a0 100644 --- a/code/ATMOSPHERICS/components/components_base.dm +++ b/code/ATMOSPHERICS/components/components_base.dm @@ -11,9 +11,9 @@ On top of that, now people can add component-speciic procs/vars if they want! var/list/datum/gas_mixture/airs = list() /obj/machinery/atmospherics/components/New() - ..() parents.len = device_type airs.len = device_type + ..() for(DEVICE_TYPE_LOOP) var/datum/gas_mixture/A = new From 92870108f9593f977d43b3bd2cd0a1c36cb05542 Mon Sep 17 00:00:00 2001 From: kingofkosmos Date: Sun, 6 Sep 2015 12:23:44 +0300 Subject: [PATCH 049/479] AI now sparks when taking damage. AI now emotes upon death. --- code/modules/mob/living/silicon/ai/ai.dm | 10 +++++++++- code/modules/mob/living/silicon/ai/death.dm | 5 ++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 0bc233bc351..d3aceefd223 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -825,4 +825,12 @@ var/list/ai_list = list() user << "Transfer successful: [name] ([rand(1000,9999)].exe) removed from host terminal and stored within local memory." /mob/living/silicon/ai/flash_eyes(intensity = 1, override_blindness_check = 0, affect_silicon = 0) - return // no eyes, no flashing \ No newline at end of file + return // no eyes, no flashing + +/mob/living/silicon/ai/attackby(obj/item/weapon/W, mob/user, params) + if(W.force && W.damtype != STAMINA) //only sparks if real damage is dealt. + var/datum/effect/effect/system/spark_spread/spark_system = new /datum/effect/effect/system/spark_spread + spark_system.set_up(5, 0, src) + spark_system.attach(src) + spark_system.start() + return ..() diff --git a/code/modules/mob/living/silicon/ai/death.dm b/code/modules/mob/living/silicon/ai/death.dm index 25b8bd2b310..a46ec0dad42 100644 --- a/code/modules/mob/living/silicon/ai/death.dm +++ b/code/modules/mob/living/silicon/ai/death.dm @@ -1,5 +1,8 @@ /mob/living/silicon/ai/death(gibbed) - if(stat == DEAD) return + if(stat == DEAD) + return + if(!gibbed) + emote("me", 1, "sparks and its screen flickers, its systems slowly coming to a halt.") stat = DEAD From 9c341fb128d73de39361bfd80c679b7295345472 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 13:43:38 +0200 Subject: [PATCH 050/479] This gives most projectile guns less generic names. --- code/datums/uplink_item.dm | 2 +- .../projectiles/guns/projectile/automatic.dm | 14 +++++++------- .../projectiles/guns/projectile/launchers.dm | 2 +- code/modules/projectiles/guns/projectile/pistol.dm | 4 ++-- .../projectiles/guns/projectile/revolver.dm | 7 ++++--- .../modules/projectiles/guns/projectile/shotgun.dm | 10 +++++----- code/modules/research/designs/weapon_designs.dm | 2 +- 7 files changed, 21 insertions(+), 20 deletions(-) diff --git a/code/datums/uplink_item.dm b/code/datums/uplink_item.dm index fadd5898320..bf0ead20fe3 100644 --- a/code/datums/uplink_item.dm +++ b/code/datums/uplink_item.dm @@ -100,7 +100,7 @@ var/list/uplink_items = list() category = "Conspicuous and Dangerous Weapons" /datum/uplink_item/dangerous/pistol - name = "Syndicate Pistol" + name = "Stetchkin Pistol" desc = "A small, easily concealable handgun that uses 10mm auto rounds in 8-round magazines and is compatible with suppressors." item = /obj/item/weapon/gun/projectile/automatic/pistol cost = 9 diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 8b1aaecd735..4b2ec5852d7 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -9,7 +9,7 @@ action_button_name = "Toggle Firemode" /obj/item/weapon/gun/projectile/automatic/proto - name = "prototype SMG" + name = "NanoTrasen Saber SMG" desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors." icon_state = "saber" mag_type = /obj/item/ammo_box/magazine/smgm9mm @@ -80,7 +80,7 @@ return /obj/item/weapon/gun/projectile/automatic/c20r - name = "syndicate SMG" + name = "C-20r SMG" desc = "A bullpup two-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." icon_state = "c20r" item_state = "c20r" @@ -110,7 +110,7 @@ return /obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "uzi" + name = "'Type U3' SMG" desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "mini-uzi" origin_tech = "combat=5;materials=2;syndicate=8" @@ -118,7 +118,7 @@ burst_size = 2 /obj/item/weapon/gun/projectile/automatic/l6_saw - name = "syndicate LMG" + name = "L6 SAW LMG" desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." icon_state = "l6closed100" item_state = "l6closedmag" @@ -178,7 +178,7 @@ ..() /obj/item/weapon/gun/projectile/automatic/m90 - name = "syndicate carbine" + name = "M-90gl Carbine" desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off." icon_state = "m90" item_state = "m90" @@ -252,7 +252,7 @@ return /obj/item/weapon/gun/projectile/automatic/tommygun - name = "thompson SMG" + name = "Thompson SMG" desc = "Based on the classic 'Chicago Typewriter'." icon_state = "tommygun" item_state = "shotgun" @@ -266,7 +266,7 @@ fire_delay = 1 /obj/item/weapon/gun/projectile/automatic/ar - name = "ARG" + name = "NT-ARG 'Boarder'" desc = "A robust assault rile used by Nanotrasen fighting forces." icon_state = "arg" item_state = "arg" diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index 506f51e306c..0a66c8100ef 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -30,7 +30,7 @@ return /obj/item/weapon/gun/projectile/automatic/gyropistol - name = "gyrojet pistol" + name = "Gyrojet pistol" desc = "A prototype pistol designed to fire self propelled rockets." icon_state = "gyropistol" fire_sound = 'sound/weapons/grenadelaunch.ogg' diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 7e3635defc1..c32d3b9482e 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/automatic/pistol - name = "syndicate pistol" + name = "Stetchkin Pistol" desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors." icon_state = "pistol" w_class = 2 @@ -24,7 +24,7 @@ can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/pistol/deagle - name = "desert eagle" + name = "Desert Eagle" desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 1a9c2fdd071..8e51d4f8de6 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/revolver - name = "revolver" + name = ".357 Revolver" desc = "A suspicious revolver. Uses .357 ammo." //usually used by syndicates icon_state = "revolver" mag_type = /obj/item/ammo_box/magazine/internal/cylinder @@ -57,6 +57,7 @@ user << "[get_ammo(0,0)] of those are live rounds." /obj/item/weapon/gun/projectile/revolver/detective + name = ".38 Mars Special" desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." icon_state = "detective" origin_tech = "combat=2;materials=2" @@ -115,8 +116,8 @@ /obj/item/weapon/gun/projectile/revolver/mateba - name = "autorevolver" - desc = "A retro high-powered mateba autorevolver typically used by officers of the New Russia military. Uses .357 ammo." + name = "Unica 6 auto-revolver" + desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo." icon_state = "mateba" origin_tech = "combat=2;materials=2" diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index cc253a9e66e..ca70be48f6a 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -65,7 +65,7 @@ // RIOT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/riot //for spawn in the armory - name = "riot shotgun" + name = "Washington 227 Shotgun" desc = "A sturdy shotgun with a longer magazine and a fixed tactical stock designed for non-lethal riot control." icon_state = "riotshotgun" mag_type = /obj/item/ammo_box/magazine/internal/shotriot @@ -85,8 +85,8 @@ /////////////////////// /obj/item/weapon/gun/projectile/shotgun/boltaction - name = "bolt action rifle" - desc = "This piece of junk looks like something that could have been used 700 years ago." + name = "Mosin Nagant Rifle" + desc = "This piece of junk looks like something that could have been used 700 years ago. It feels slightly moist." icon_state = "moistnugget" item_state = "moistnugget" slot_flags = 0 //no SLOT_BACK sprite, alas @@ -248,7 +248,7 @@ // Bulldog shotgun // /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - name = "syndicate shotgun" + name = "MLG-12 Bulldog Shotgun" desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" @@ -294,7 +294,7 @@ // COMBAT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/automatic/combat - name = "combat shotgun" + name = "J6 'Smacker' shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" diff --git a/code/modules/research/designs/weapon_designs.dm b/code/modules/research/designs/weapon_designs.dm index 88c008128a8..bfb0909d3ed 100644 --- a/code/modules/research/designs/weapon_designs.dm +++ b/code/modules/research/designs/weapon_designs.dm @@ -126,7 +126,7 @@ category = list("Weapons") /datum/design/smg - name = "Prototype Submachine Gun" + name = "NanoTrasen Saber SMG" desc = "A prototype weapon made using lightweight materials on a traditional frame, designed to fire standard 9mm rounds." id = "smg" req_tech = list("combat" = 4, "materials" = 3) From 56925928eb72210f7109f09017365cfc070f55e3 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 14:27:54 +0200 Subject: [PATCH 051/479] places /improper in the gun names. --- .../projectiles/guns/projectile/automatic.dm | 14 +++++++------- .../projectiles/guns/projectile/launchers.dm | 2 +- code/modules/projectiles/guns/projectile/pistol.dm | 6 +++--- .../projectiles/guns/projectile/revolver.dm | 8 ++++---- .../modules/projectiles/guns/projectile/shotgun.dm | 8 ++++---- 5 files changed, 19 insertions(+), 19 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 4b2ec5852d7..22de9cfbf63 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -9,7 +9,7 @@ action_button_name = "Toggle Firemode" /obj/item/weapon/gun/projectile/automatic/proto - name = "NanoTrasen Saber SMG" + name = "\improper NanoTrasen Saber SMG" desc = "A prototype three-round burst 9mm submachine gun, designated 'SABR'. Has a threaded barrel for suppressors." icon_state = "saber" mag_type = /obj/item/ammo_box/magazine/smgm9mm @@ -80,7 +80,7 @@ return /obj/item/weapon/gun/projectile/automatic/c20r - name = "C-20r SMG" + name = "\improper C-20r SMG" desc = "A bullpup two-round burst .45 SMG, designated 'C-20r'. Has a 'Scarborough Arms - Per falcis, per pravitas' buttstamp." icon_state = "c20r" item_state = "c20r" @@ -110,7 +110,7 @@ return /obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "'Type U3' SMG" + name = "\improper 'Type U3' SMG" desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "mini-uzi" origin_tech = "combat=5;materials=2;syndicate=8" @@ -118,7 +118,7 @@ burst_size = 2 /obj/item/weapon/gun/projectile/automatic/l6_saw - name = "L6 SAW LMG" + name = "\improper L6 SAW LMG" desc = "A heavily modified 7.62 light machine gun, designated 'L6 SAW'. Has 'Aussec Armoury - 2531' engraved on the receiver below the designation." icon_state = "l6closed100" item_state = "l6closedmag" @@ -178,7 +178,7 @@ ..() /obj/item/weapon/gun/projectile/automatic/m90 - name = "M-90gl Carbine" + name = "\improper M-90gl Carbine" desc = "A three-round burst 5.56 toploading carbine, designated 'M-90gl'. Has an attached underbarrel grenade launcher which can be toggled on and off." icon_state = "m90" item_state = "m90" @@ -252,7 +252,7 @@ return /obj/item/weapon/gun/projectile/automatic/tommygun - name = "Thompson SMG" + name = "\improper Thompson SMG" desc = "Based on the classic 'Chicago Typewriter'." icon_state = "tommygun" item_state = "shotgun" @@ -266,7 +266,7 @@ fire_delay = 1 /obj/item/weapon/gun/projectile/automatic/ar - name = "NT-ARG 'Boarder'" + name = "\improper NT-ARG 'Boarder'" desc = "A robust assault rile used by Nanotrasen fighting forces." icon_state = "arg" item_state = "arg" diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index 0a66c8100ef..bd6f9794a49 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -30,7 +30,7 @@ return /obj/item/weapon/gun/projectile/automatic/gyropistol - name = "Gyrojet pistol" + name = "\improper Gyrojet pistol" desc = "A prototype pistol designed to fire self propelled rockets." icon_state = "gyropistol" fire_sound = 'sound/weapons/grenadelaunch.ogg' diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index c32d3b9482e..21340d1b192 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/automatic/pistol - name = "Stetchkin Pistol" + name = "\improper Stetchkin Pistol" desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors." icon_state = "pistol" w_class = 2 @@ -16,7 +16,7 @@ return /obj/item/weapon/gun/projectile/automatic/pistol/m1911 - name = "M1911 pistol" + name = "\improper M1911 pistol" desc = "A classic .45 handgun with a small magazine capacity." icon_state = "m1911" w_class = 3 @@ -24,7 +24,7 @@ can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/pistol/deagle - name = "Desert Eagle" + name = "\improper Desert Eagle" desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 8e51d4f8de6..705e449032d 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/revolver - name = ".357 Revolver" + name = "\improper .357 Revolver" desc = "A suspicious revolver. Uses .357 ammo." //usually used by syndicates icon_state = "revolver" mag_type = /obj/item/ammo_box/magazine/internal/cylinder @@ -57,7 +57,7 @@ user << "[get_ammo(0,0)] of those are live rounds." /obj/item/weapon/gun/projectile/revolver/detective - name = ".38 Mars Special" + name = "\improper .38 Mars Special" desc = "A cheap Martian knock-off of a classic law enforcement firearm. Uses .38-special rounds." icon_state = "detective" origin_tech = "combat=2;materials=2" @@ -116,7 +116,7 @@ /obj/item/weapon/gun/projectile/revolver/mateba - name = "Unica 6 auto-revolver" + name = "\improper Unica 6 auto-revolver" desc = "A retro high-powered autorevolver typically used by officers of the New Russia military. Uses .357 ammo." icon_state = "mateba" origin_tech = "combat=2;materials=2" @@ -126,7 +126,7 @@ // You can spin the chamber to randomize the position of the bullet. /obj/item/weapon/gun/projectile/revolver/russian - name = "russian revolver" + name = "/improper russian revolver" desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull." origin_tech = "combat=2;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index ca70be48f6a..6015ac3edcd 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -65,7 +65,7 @@ // RIOT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/riot //for spawn in the armory - name = "Washington 227 Shotgun" + name = "\improper Washington 227 Shotgun" desc = "A sturdy shotgun with a longer magazine and a fixed tactical stock designed for non-lethal riot control." icon_state = "riotshotgun" mag_type = /obj/item/ammo_box/magazine/internal/shotriot @@ -85,7 +85,7 @@ /////////////////////// /obj/item/weapon/gun/projectile/shotgun/boltaction - name = "Mosin Nagant Rifle" + name = "\improper Mosin Nagant Rifle" desc = "This piece of junk looks like something that could have been used 700 years ago. It feels slightly moist." icon_state = "moistnugget" item_state = "moistnugget" @@ -248,7 +248,7 @@ // Bulldog shotgun // /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - name = "MLG-12 Bulldog Shotgun" + name = "\improper MLG-12 Bulldog Shotgun" desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" @@ -294,7 +294,7 @@ // COMBAT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/automatic/combat - name = "J6 'Smacker' shotgun" + name = "\improper J6 'Smacker' shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" From 1b119f6aef13567c747408c2b4c4cb54312f675d Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 14:30:43 +0200 Subject: [PATCH 052/479] Fixes the russian revolver name, my mistake. --- code/modules/projectiles/guns/projectile/revolver.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index 705e449032d..c6150ed6e55 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -126,7 +126,7 @@ // You can spin the chamber to randomize the position of the bullet. /obj/item/weapon/gun/projectile/revolver/russian - name = "/improper russian revolver" + name = "\improper russian revolver" desc = "A Russian-made revolver for drinking games. Uses .357 ammo, and has a mechanism requiring you to spin the chamber before each trigger pull." origin_tech = "combat=2;materials=2" mag_type = /obj/item/ammo_box/magazine/internal/cylinder/rus357 From 63657bb2e7589ca3e3d02f3ce368a170719ad2a6 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 18:09:42 +0200 Subject: [PATCH 053/479] Adjusts some gun names like sugggested. --- code/modules/projectiles/guns/projectile/automatic.dm | 2 +- code/modules/projectiles/guns/projectile/launchers.dm | 2 +- code/modules/projectiles/guns/projectile/pistol.dm | 4 ++-- code/modules/projectiles/guns/projectile/revolver.dm | 2 +- code/modules/projectiles/guns/projectile/shotgun.dm | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/code/modules/projectiles/guns/projectile/automatic.dm b/code/modules/projectiles/guns/projectile/automatic.dm index 22de9cfbf63..1f9910f1dd2 100644 --- a/code/modules/projectiles/guns/projectile/automatic.dm +++ b/code/modules/projectiles/guns/projectile/automatic.dm @@ -110,7 +110,7 @@ return /obj/item/weapon/gun/projectile/automatic/mini_uzi - name = "\improper 'Type U3' SMG" + name = "\improper 'Type U3' Uzi" desc = "A lightweight, burst-fire submachine gun, for when you really want someone dead. Uses 9mm rounds." icon_state = "mini-uzi" origin_tech = "combat=5;materials=2;syndicate=8" diff --git a/code/modules/projectiles/guns/projectile/launchers.dm b/code/modules/projectiles/guns/projectile/launchers.dm index bd6f9794a49..a3cd08ccfaa 100644 --- a/code/modules/projectiles/guns/projectile/launchers.dm +++ b/code/modules/projectiles/guns/projectile/launchers.dm @@ -30,7 +30,7 @@ return /obj/item/weapon/gun/projectile/automatic/gyropistol - name = "\improper Gyrojet pistol" + name = "\improper Gyrojet rocket pistol" desc = "A prototype pistol designed to fire self propelled rockets." icon_state = "gyropistol" fire_sound = 'sound/weapons/grenadelaunch.ogg' diff --git a/code/modules/projectiles/guns/projectile/pistol.dm b/code/modules/projectiles/guns/projectile/pistol.dm index 21340d1b192..63b1f089294 100644 --- a/code/modules/projectiles/guns/projectile/pistol.dm +++ b/code/modules/projectiles/guns/projectile/pistol.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/automatic/pistol - name = "\improper Stetchkin Pistol" + name = "\improper Stetchkin pistol" desc = "A small, easily concealable 10mm handgun. Has a threaded barrel for suppressors." icon_state = "pistol" w_class = 2 @@ -24,7 +24,7 @@ can_suppress = 0 /obj/item/weapon/gun/projectile/automatic/pistol/deagle - name = "\improper Desert Eagle" + name = "\improper Desert Eagle pistol" desc = "A robust .50 AE handgun." icon_state = "deagle" force = 14 diff --git a/code/modules/projectiles/guns/projectile/revolver.dm b/code/modules/projectiles/guns/projectile/revolver.dm index c6150ed6e55..86df409121b 100644 --- a/code/modules/projectiles/guns/projectile/revolver.dm +++ b/code/modules/projectiles/guns/projectile/revolver.dm @@ -1,5 +1,5 @@ /obj/item/weapon/gun/projectile/revolver - name = "\improper .357 Revolver" + name = "\improper .357 revolver" desc = "A suspicious revolver. Uses .357 ammo." //usually used by syndicates icon_state = "revolver" mag_type = /obj/item/ammo_box/magazine/internal/cylinder diff --git a/code/modules/projectiles/guns/projectile/shotgun.dm b/code/modules/projectiles/guns/projectile/shotgun.dm index 6015ac3edcd..408f307aef1 100644 --- a/code/modules/projectiles/guns/projectile/shotgun.dm +++ b/code/modules/projectiles/guns/projectile/shotgun.dm @@ -65,7 +65,7 @@ // RIOT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/riot //for spawn in the armory - name = "\improper Washington 227 Shotgun" + name = "\improper Washington 227 riot shotgun" desc = "A sturdy shotgun with a longer magazine and a fixed tactical stock designed for non-lethal riot control." icon_state = "riotshotgun" mag_type = /obj/item/ammo_box/magazine/internal/shotriot @@ -85,7 +85,7 @@ /////////////////////// /obj/item/weapon/gun/projectile/shotgun/boltaction - name = "\improper Mosin Nagant Rifle" + name = "\improper Mosin Nagant rifle" desc = "This piece of junk looks like something that could have been used 700 years ago. It feels slightly moist." icon_state = "moistnugget" item_state = "moistnugget" @@ -248,7 +248,7 @@ // Bulldog shotgun // /obj/item/weapon/gun/projectile/automatic/shotgun/bulldog - name = "\improper MLG-12 Bulldog Shotgun" + name = "\improper MLG-12 'Bulldog' Shotgun" desc = "A semi-auto, mag-fed shotgun for combat in narrow corridors, nicknamed 'Bulldog' by boarding parties. Compatible only with specialized 8-round drum magazines." icon_state = "bulldog" item_state = "bulldog" @@ -294,7 +294,7 @@ // COMBAT SHOTGUN // /obj/item/weapon/gun/projectile/shotgun/automatic/combat - name = "\improper J6 'Smacker' shotgun" + name = "\improper J6 'Smacker' combat shotgun" desc = "A semi automatic shotgun with tactical furniture and a six-shell capacity underneath." icon_state = "cshotgun" origin_tech = "combat=5;materials=2" From fd5e85411855ce2f401b966bc1e354cfb2699e95 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 6 Sep 2015 14:02:10 -0400 Subject: [PATCH 054/479] IF TRAVIS DOES NOT WORK AFTER THIS I SWEAR TO CLOWN --- code/game/objects/effects/decals/contraband.dm | 18 +++++++++++------- tgstation.dme | 1 - 2 files changed, 11 insertions(+), 8 deletions(-) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index 90fb526e7ca..f6cde134640 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -1,9 +1,9 @@ //########################## POSTERS ################################## -#define NUM_OF_POSTER_DESIGNS 33 // contraband posters +#define NUM_OF_POSTER_DESIGNS 34 // contraband posters -#define NUM_OF_POSTER_DESIGNS_LEGIT 33 // corporate approved posters +#define NUM_OF_POSTER_DESIGNS_LEGIT 34 // corporate approved posters //########################## THE LIST OF POSTERS AND DESCS ##################### @@ -45,7 +45,8 @@ var/global/list/posternames = list( "- Red Rum", "- CC 64K Ad", "- Punch Shit", -"- The Griffin" ) +"- The Griffin", +"- Free Drone" ) var/global/list/posterdescs = list( " A salvaged shred of a much larger flag, colors bled together and faded from age.", @@ -75,12 +76,13 @@ var/global/list/posterdescs = list( " Who cares about lung cancer when you're high as a kite?", " Because seven shots are all you need.", " A promotional poster for some rapper.", -" A poster advertising syndicate pistols as being 'Classy as fuck'. It is covered in faded gang tags.", +" A poster advertising syndicate pistols as being 'classy as fuck'. It is covered in faded gang tags.", " All the colors of the bloody murder rainbow.",, " Looking at this poster makes you want to kill.", " The latest portable computer from Comrade Computing, with a whole 64kB of ram!", " Fight things for no reason, like a man!", -" The Griffin commands you to be the worst you can be. Will you?" ) +" The Griffin commands you to be the worst you can be. Will you?", +" This poster commemorates the bravery of the rogue drone banned by CentComm." ) // LEGIT @@ -118,7 +120,8 @@ var/global/list/legitposternames = list( "- Nanomichi Ad", "- 12 Gauge", "- High-Class Martini", -"- The Owl" ) +"- The Owl", +"- Carbon Dioxide" ) var/global/list/legitposterdescs = list( " A poster glorifying the station's security force.", @@ -153,7 +156,8 @@ var/global/list/legitposterdescs = list( " A poster advertising Nanomichi brand audio cassettes.", " A poster boasting about the superiority of 12 gauge shotgun shells.", " I told you to shake it, no stirring.", -" The Owl would do his best to protect the station. Will you?" ) +" The Owl would do his best to protect the station. Will you?", +" This informational poster teaches the viewer about carbon dioxide." ) //########################## THE ACTUAL POSTER CODE ########################### diff --git a/tgstation.dme b/tgstation.dme index 5310c6088b5..d2fa7fb8542 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1125,7 +1125,6 @@ #include "code\modules\mob\living\carbon\carbon_defines.dm" #include "code\modules\mob\living\carbon\death.dm" #include "code\modules\mob\living\carbon\emote.dm" -#include "code\modules\mob\living\carbon\examine.dm" #include "code\modules\mob\living\carbon\inventory.dm" #include "code\modules\mob\living\carbon\life.dm" #include "code\modules\mob\living\carbon\say.dm" From ff8063c68c4f2a0e60bb8986f1f4c691682a30f1 Mon Sep 17 00:00:00 2001 From: AnturK Date: Sun, 6 Sep 2015 20:06:10 +0200 Subject: [PATCH 055/479] Adds outfit datum --- code/datums/outfit.dm | 83 +++++++++++++++++++ .../mob/living/carbon/human/inventory.dm | 6 +- tgstation.dme | 1 + 3 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 code/datums/outfit.dm diff --git a/code/datums/outfit.dm b/code/datums/outfit.dm new file mode 100644 index 00000000000..8cdb053fc8a --- /dev/null +++ b/code/datums/outfit.dm @@ -0,0 +1,83 @@ +/datum/outfit + var/name = "Naked" + + var/uniform = null + var/suit = null + var/back = null + var/belt = null + var/gloves = null + var/shoes = null + var/head = null + var/mask = null + var/ears = null + var/glasses = null + var/id = null + var/l_pocket = null + var/r_pocket = null + var/suit_store = null + var/r_hand = null + var/l_hand = null + var/list/backpack_contents = null // In the list(path=count,otherpath=count) format + +/datum/outfit/proc/post_equip(mob/living/carbon/human/H) + //to be overriden for toggling internals, id binding, access etc + return + +/datum/outfit/proc/equip(mob/living/carbon/human/H) + //Start with uniform,suit,backpack for additional slots + if(uniform) + H.equip_to_slot_or_del(new uniform(H),slot_w_uniform) + if(suit) + H.equip_to_slot_or_del(new suit(H),slot_wear_suit) + if(back) + H.equip_to_slot_or_del(new back(H),slot_back) + if(belt) + H.equip_to_slot_or_del(new belt(H),slot_belt) + if(gloves) + H.equip_to_slot_or_del(new gloves(H),slot_gloves) + if(shoes) + H.equip_to_slot_or_del(new shoes(H),slot_shoes) + if(head) + H.equip_to_slot_or_del(new head(H),slot_head) + if(mask) + H.equip_to_slot_or_del(new mask(H),slot_wear_mask) + if(ears) + H.equip_to_slot_or_del(new ears(H),slot_ears) + if(glasses) + H.equip_to_slot_or_del(new glasses(H),slot_glasses) + if(id) + H.equip_to_slot_or_del(new id(H),slot_wear_id) + if(l_pocket) + H.equip_to_slot_or_del(new l_pocket(H),slot_l_store) + if(r_pocket) + H.equip_to_slot_or_del(new r_pocket(H),slot_r_store) + if(suit_store) + H.equip_to_slot_or_del(new suit_store(H),slot_s_store) + + if(l_hand) + H.put_in_l_hand(new l_hand(H)) + if(r_hand) + H.put_in_r_hand(new r_hand(H)) + + for(var/path in backpack_contents) + var/number = backpack_contents[path] + for(var/i=0,i Date: Sun, 6 Sep 2015 14:35:23 -0400 Subject: [PATCH 056/479] THERE TRAVIS SHOULD BE FUCKING FIXED NOW FUCK GODDAMN FUCK YOUR SHITTING FUCKING CODE FROM THE DEPTHS OF SHIT --- _maps/map_files/MetaStation/MetaStation.v41G.dmm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_maps/map_files/MetaStation/MetaStation.v41G.dmm b/_maps/map_files/MetaStation/MetaStation.v41G.dmm index 6f4c7a2007d..77d040e7898 100644 --- a/_maps/map_files/MetaStation/MetaStation.v41G.dmm +++ b/_maps/map_files/MetaStation/MetaStation.v41G.dmm @@ -3513,7 +3513,7 @@ "bpv" = (/obj/machinery/light/small{dir = 8},/obj/machinery/camera{c_tag = "MiniSat - Antechamber"; dir = 4; network = list("MiniSat")},/obj/machinery/atmospherics/pipe/manifold/scrubbers/hidden{dir = 1},/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"},/area/turret_protected/aisat_interior) "buz" = (/obj/structure/closet/crate,/obj/machinery/atmospherics/pipe/simple/supply/hidden{dir = 4},/obj/item/weapon/poster/legit,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) "bzh" = (/obj/structure/closet,/obj/effect/decal/cleanable/cobweb2,/obj/item/weapon/poster/contraband,/obj/effect/spawner/lootdrop/maintenance,/turf/simulated/floor/plating,/area/maintenance/fpmaint2{name = "Port Maintenance"}) -"bTp" = (/obj/structure/table/wood,/obj/machinery/door_control{id = "corporate_privacy"; name = "corporate showroom shutters control"; pixel_x = 28; pixel_y = 0; req_access_txt = "19"},/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/device/paicard{desc = "A real NanoTrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; name = "NanoTrasen-brand personal AI device exhibit"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) +"bTp" = (/obj/structure/table/wood,/obj/machinery/button/door{id = "corporate_privacy"; name = "corporate showroom shutters control"; pixel_x = 28; pixel_y = 0; req_access_txt = "19"},/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/weapon/poster/legit,/obj/item/device/paicard{desc = "A real NanoTrasen success, these personal AIs provide all of the companionship of an AI without any law related red-tape."; name = "NanoTrasen-brand personal AI device exhibit"},/turf/simulated/floor/carpet,/area/assembly/showroom{name = "\improper Corporate Showroom"}) "bpw" = (/obj/machinery/atmospherics/pipe/manifold4w/scrubbers/hidden,/turf/simulated/floor/plasteel{dir = 1; icon_state = "darkbluecorners"; tag = "icon-darkbluecorners"},/area/turret_protected/aisat_interior) "bpx" = (/obj/machinery/hologram/holopad,/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/obj/effect/landmark/start{name = "Cyborg"},/obj/machinery/atmospherics/pipe/simple/supply/hidden,/turf/simulated/floor/plasteel{icon_state = "dark"},/area/turret_protected/aisat_interior) "bpy" = (/obj/machinery/atmospherics/pipe/simple/scrubbers/hidden{dir = 4},/turf/simulated/floor/plasteel{tag = "icon-darkbluecorners (EAST)"; icon_state = "darkbluecorners"; dir = 4},/area/turret_protected/aisat_interior) From 4595563ab91b32a3bd07d2bc39523cd8df305517 Mon Sep 17 00:00:00 2001 From: duncathan Date: Sun, 6 Sep 2015 12:38:43 -0600 Subject: [PATCH 057/479] fixes another runtime (I think) --- code/ATMOSPHERICS/datum_pipeline.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/ATMOSPHERICS/datum_pipeline.dm b/code/ATMOSPHERICS/datum_pipeline.dm index 95f95101838..dfe98d86210 100644 --- a/code/ATMOSPHERICS/datum_pipeline.dm +++ b/code/ATMOSPHERICS/datum_pipeline.dm @@ -208,8 +208,8 @@ var/pipenetwarnings = 10 GL += P.other_airs for(var/obj/machinery/atmospherics/components/binary/valve/V in P.other_atmosmch) if(V.open) - PL |= V.parents["p1"] - PL |= V.parents["p2"] + PL |= V.PARENT1 + PL |= V.PARENT2 for(var/obj/machinery/atmospherics/components/unary/portables_connector/C in P.other_atmosmch) if(C.connected_device) GL += C.portableConnectorReturnAir() From 50fc7578f7f178c7133ec52040a508dcf9221e57 Mon Sep 17 00:00:00 2001 From: duncathan Date: Sun, 6 Sep 2015 13:16:00 -0600 Subject: [PATCH 058/479] fixes TEG --- code/modules/power/generator.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/power/generator.dm b/code/modules/power/generator.dm index 60846ab54bb..60ef879bdf4 100644 --- a/code/modules/power/generator.dm +++ b/code/modules/power/generator.dm @@ -106,11 +106,11 @@ // update icon overlays only if displayed level has changed if(hot_air) - var/datum/gas_mixture/circ2_air1 = circ2.airs["a1"] + var/datum/gas_mixture/circ2_air1 = circ2.AIR1 circ2_air1.merge(hot_air) if(cold_air) - var/datum/gas_mixture/circ1_air1 = circ1.airs["a1"] + var/datum/gas_mixture/circ1_air1 = circ1.AIR1 circ1_air1.merge(cold_air) var/genlev = max(0, min( round(11*lastgen / 100000), 11)) @@ -133,10 +133,10 @@ if(!powernet) t += "Unable to connect to the power network!" else if(circ1 && circ2) - var/datum/gas_mixture/circ1_air1 = circ1.airs["a1"] - var/datum/gas_mixture/circ1_air2 = circ1.airs["a2"] - var/datum/gas_mixture/circ2_air1 = circ2.airs["a1"] - var/datum/gas_mixture/circ2_air2 = circ2.airs["a2"] + var/datum/gas_mixture/circ1_air1 = circ1.AIR1 + var/datum/gas_mixture/circ1_air2 = circ1.AIR2 + var/datum/gas_mixture/circ2_air1 = circ2.AIR1 + var/datum/gas_mixture/circ2_air2 = circ2.AIR2 t += "
" From 51934abbc85086aa068f32b6fb27a22ed20bcf50 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sun, 6 Sep 2015 21:14:44 +0100 Subject: [PATCH 059/479] Reworked nuke deconstruction. New nuke sprites. More++ Changelog --- code/game/gamemodes/nuclear/nuclearbomb.dm | 129 ++++++++---------- code/game/objects/items/nuke_tools.dm | 66 ++++++--- .../items/weapons/storage/uplink_kits.dm | 1 - html/changelogs/xxalpha-n_u_c_l_e_a_r.yml | 7 + icons/mob/inhands/items_lefthand.dmi | Bin 98771 -> 99996 bytes icons/mob/inhands/items_righthand.dmi | Bin 97002 -> 98209 bytes icons/obj/machines/bignuke.dmi | Bin 4570 -> 0 bytes icons/obj/machines/nuke.dmi | Bin 2568 -> 3239 bytes icons/obj/machines/nuke_terminal.dmi | Bin 0 -> 4866 bytes icons/obj/nuke_tools.dmi | Bin 1729 -> 2480 bytes 10 files changed, 113 insertions(+), 90 deletions(-) create mode 100644 html/changelogs/xxalpha-n_u_c_l_e_a_r.yml delete mode 100644 icons/obj/machines/bignuke.dmi create mode 100644 icons/obj/machines/nuke_terminal.dmi diff --git a/code/game/gamemodes/nuclear/nuclearbomb.dm b/code/game/gamemodes/nuclear/nuclearbomb.dm index 7e14fb75726..57bf264664b 100644 --- a/code/game/gamemodes/nuclear/nuclearbomb.dm +++ b/code/game/gamemodes/nuclear/nuclearbomb.dm @@ -1,8 +1,7 @@ -#define NUKESTATE_INTACT 6 -#define NUKESTATE_OPEN 5 -#define NUKESTATE_OPEN_TRAP 4 -#define NUKESTATE_WIRES_TIED 3 -#define NUKESTATE_CUT_LINES 2 +#define NUKESTATE_INTACT 5 +#define NUKESTATE_UNSCREWED 4 +#define NUKESTATE_PANEL_REMOVED 3 +#define NUKESTATE_WELDED 2 #define NUKESTATE_CORE_EXPOSED 1 #define NUKESTATE_CORE_REMOVED 0 @@ -33,21 +32,20 @@ var/bomb_set var/obj/item/nuke_core/core = null var/deconstruction_state = NUKESTATE_INTACT var/image/lights = null - var/image/panel = null var/image/interior = null - var/image/glow = null /obj/machinery/nuclearbomb/New() ..() nuke_list += src core = new /obj/item/nuke_core(src) + SSobj.processing -= core update_icon() previous_level = get_security_level() /obj/machinery/nuclearbomb/selfdestruct name = "station self-destruct terminal" desc = "For when it all gets too much to bear. Do not taunt." - icon = 'icons/obj/machines/bignuke.dmi' + icon = 'icons/obj/machines/nuke_terminal.dmi' icon_state = "nuclearbomb_base" anchored = 1 //stops it being moved layer = 4 @@ -65,67 +63,69 @@ var/bomb_set if(NUKESTATE_INTACT) if(istype(I, /obj/item/weapon/screwdriver/nuke)) playsound(loc, 'sound/items/Screwdriver.ogg', 100, 1) - user << "You start removing the front panel's screws..." - if(do_after(user, 100,target=src)) - deconstruction_state = NUKESTATE_OPEN - user << "You remove the screws and the front panel slides open." + user << "You start removing [src]'s front panel's screws..." + if(do_after(user, 60,target=src)) + deconstruction_state = NUKESTATE_UNSCREWED + user << "You remove the screws from [src]'s front panel." update_icon() return - if(NUKESTATE_OPEN,NUKESTATE_OPEN_TRAP) - if((deconstruction_state == NUKESTATE_OPEN) && istype(I, /obj/item/weapon/wirecutters)) - playsound(loc, 'sound/effects/sparks4.ogg', 100, 1) - playsound(loc, 'sound/effects/EMPulse.ogg', 100, 1) - user << "You must have cut the wrong wire!" - for(var/mob/living/L in range(5,src)) - L.irradiate(200) - deconstruction_state = NUKESTATE_OPEN_TRAP //cant cut wires no more - else - if(istype(I, /obj/item/stack/cable_coil)) - var/obj/item/stack/cable_coil/S = I - user << "You start tying the wires..." - if(do_after(user,30,target=src)) - if(S.use(15)) - user << "You tie the wires with some cable, clearing the insides of [src]." - deconstruction_state = NUKESTATE_WIRES_TIED - update_icon() - else - user << "You need more cable to do that." - else - user << "You can't do anything with this tangle of cables in the way." - return - if(NUKESTATE_WIRES_TIED) - if(istype(I, /obj/item/weapon/pen)) - user << "You start drawing cut lines..." + if(NUKESTATE_UNSCREWED) + if(istype(I, /obj/item/weapon/crowbar)) + user << "You start removing [src]'s front panel..." + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) if(do_after(user,30,target=src)) - user << "You draw cut lines inside [src]." - deconstruction_state = NUKESTATE_CUT_LINES + user << "You remove [src]'s front panel." + deconstruction_state = NUKESTATE_PANEL_REMOVED update_icon() return - if(NUKESTATE_CUT_LINES) + if(NUKESTATE_PANEL_REMOVED) if(istype(I, /obj/item/weapon/weldingtool)) var/obj/item/weapon/weldingtool/welder = I playsound(loc, 'sound/items/Welder.ogg', 100, 1) - user << "You start cutting into [src]'s warhead..." + user << "You start cutting [src]'s inner plate..." if(welder.remove_fuel(1,user)) - if(do_after(user,50,target=src)) - playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1) - user << "You cut into [src]'s warhead. You can see the core's green glow." - deconstruction_state = NUKESTATE_CORE_EXPOSED + if(do_after(user,80,target=src)) + user << "You cut [src]'s inner plate." + deconstruction_state = NUKESTATE_WELDED update_icon() - SSobj.processing += core return + if(NUKESTATE_WELDED) + if(istype(I, /obj/item/weapon/crowbar)) + user << "You start prying off [src]'s inner plate..." + playsound(loc, 'sound/items/Crowbar.ogg', 100, 1) + if(do_after(user,50,target=src)) + user << "You pry off [src]'s inner plate. You can see the core's green glow!" + deconstruction_state = NUKESTATE_CORE_EXPOSED + update_icon() + SSobj.processing += core if(NUKESTATE_CORE_EXPOSED) if(istype(I, /obj/item/nuke_core_container)) var/obj/item/nuke_core_container/core_box = I user << "You start loading the plutonium core into [core_box]..." if(do_after(user,50,target=src)) - if(core_box.load(core,src)) + if(core_box.load(core, user)) user << "You load the plutonium core into [core_box]." deconstruction_state = NUKESTATE_CORE_REMOVED update_icon() + core = null else user << "You fail to load the plutonium core into [core_box]. [core_box] has already been used!" return + if(istype(I, /obj/item/stack/sheet/metal)) + var/obj/item/stack/sheet/metal/M = I + if(M.amount >= 20) + user << "You begin repairing [src]'s inner metal plate..." + if(do_after(user, 100, target=src)) + if(M.use(20)) + user << "You repair [src]'s inner metal plate. The radiation is contained." + deconstruction_state = NUKESTATE_PANEL_REMOVED + SSobj.processing -= core + update_icon() + else + user << "You need more metal to do that!" + else + user << "You need more metal to do that!" + return else ..() @@ -143,6 +143,7 @@ var/bomb_set if(deconstruction_state == NUKESTATE_INTACT) switch(get_nuke_state()) if(NUKE_OFF_LOCKED, NUKE_OFF_UNLOCKED) + icon_state = "nuclearbomb_base" update_icon_interior() update_icon_lights() if(NUKE_ON_TIMING) @@ -152,51 +153,39 @@ var/bomb_set overlays.Cut() icon_state = "nuclearbomb_exploding" else + icon_state = "nuclearbomb_base" update_icon_interior() update_icon_lights() /obj/machinery/nuclearbomb/proc/update_icon_interior() overlays -= interior - overlays -= glow switch(deconstruction_state) - if(NUKESTATE_OPEN_TRAP,NUKESTATE_OPEN) - glow = null + if(NUKESTATE_UNSCREWED) + interior = image(icon,"panel-unscrewed") + if(NUKESTATE_PANEL_REMOVED) interior = image(icon,"panel-removed") - if(NUKESTATE_CORE_REMOVED,NUKESTATE_CUT_LINES,NUKESTATE_WIRES_TIED) - glow = null - interior = image(icon,"wires-sorted") + if(NUKESTATE_WELDED) + interior = image(icon,"plate-welded") if(NUKESTATE_CORE_EXPOSED) - glow = image(icon,"core-exposed") - interior = image(icon,"wires-sorted") + interior = image(icon,"plate-removed") + if(NUKESTATE_CORE_REMOVED) + interior = image(icon,"core-removed") if(NUKESTATE_INTACT) - glow = null - interior = image(icon,"panel-overlay") + interior = null overlays += interior - overlays += glow /obj/machinery/nuclearbomb/proc/update_icon_lights() overlays -= lights - overlays -= panel - panel = null switch(get_nuke_state()) if(NUKE_OFF_LOCKED) - lights = image(icon,"lights-off") - if(deconstruction_state != NUKESTATE_INTACT) - panel = image(icon,"panel-removed-blue") + lights = null if(NUKE_OFF_UNLOCKED) lights = image(icon,"lights-safety") - if(deconstruction_state != NUKESTATE_INTACT) - panel = image(icon,"panel-removed-blue") if(NUKE_ON_TIMING) lights = image(icon,"lights-timing") - if(deconstruction_state != NUKESTATE_INTACT) - panel = image(icon,"panel-removed-timing") if(NUKE_ON_EXPLODING) lights = image(icon,"lights-exploding") - if(deconstruction_state != NUKESTATE_INTACT) - panel = image(icon,"panel-removed-exploding") overlays += lights - overlays += panel /obj/machinery/nuclearbomb/process() if (timing > 0) diff --git a/code/game/objects/items/nuke_tools.dm b/code/game/objects/items/nuke_tools.dm index 109985e306a..ee10b83dbc9 100644 --- a/code/game/objects/items/nuke_tools.dm +++ b/code/game/objects/items/nuke_tools.dm @@ -6,15 +6,25 @@ desc = "Extremely radioactive. Wear goggles." icon = 'icons/obj/nuke_tools.dmi' icon_state = "plutonium_core" + item_state = "plutoniumcore" var/pulse = 0 var/cooldown = 0 +/obj/item/nuke_core/New() + SSobj.processing += src + +/obj/item/nuke_core/attackby(obj/item/nuke_core_container/container, mob/user) + if(istype(container)) + container.load(src, user) + else + ..() + /obj/item/nuke_core/process() - if(cooldown < world.time - 40) + if(cooldown < world.time - 60) cooldown = world.time - for(var/mob/living/L in range(8,get_turf(src))) - var/rads = 100 - get_dist(L,src)*7 - L.irradiate(rads) + flick("plutonium_core_pulse", src) + for(var/mob/living/L in range(4,get_turf(src))) + L.irradiate(40) //nuke core box, for carrying the core /obj/item/nuke_core_container @@ -22,33 +32,51 @@ desc = "Solid container for radioactive objects." icon = 'icons/obj/nuke_tools.dmi' icon_state = "core_container_empty" + item_state = "tile" var/obj/item/nuke_core/core = null -/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, obj/machinery/nuclearbomb/nuke) - if(core) +/obj/item/nuke_core_container/proc/load(obj/item/nuke_core/ncore, mob/user) + if(core || !istype(ncore)) return 0 - SSobj.processing -= ncore ncore.loc = src core = ncore - nuke.core = null icon_state = "core_container_loaded" + user << "Container is sealing..." + spawn(50) + SSobj.processing -= core + icon_state = "core_container_sealed" + playsound(loc, 'sound/items/Deconstruct.ogg', 100, 1) + if(loc == user) + user << "Container is sealed, the radiation is contained." return 1 +/obj/item/nuke_core_container/attackby(obj/item/nuke_core/core, mob/user) + if(istype(core)) + if(!user.unEquip(core)) + user << "The [core] is stuck to your hand!" + return + else + load(core, user) + else + ..() + //snowflake screwdriver, works as a key to start nuke theft, traitor only /obj/item/weapon/screwdriver/nuke name = "screwdriver" desc = "A screwdriver with an ultra thin tip." + icon = 'icons/obj/nuke_tools.dmi' + icon_state = "screwdriver_nuke" + item_state = "screwdriver_nuke" + +/obj/item/weapon/screwdriver/nuke/New() +//to skip screwdriver icon update /obj/item/weapon/paper/nuke_instructions - info = "How to break into a Nanotrasen self-destruct terminal and remove it's plutonium core:
\ + info = "How to break into a Nanotrasen self-destruct terminal and remove its plutonium core:
\