From c5bafe54208d45301b04108c1b26a9e1adee2495 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Mon, 31 Aug 2015 20:39:01 +0100 Subject: [PATCH 01/35] 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 7daee1797bd47e82ecbfc80386fa8cce25cf6a4e Mon Sep 17 00:00:00 2001 From: Aranclanos Date: Tue, 1 Sep 2015 15:38:56 -0300 Subject: [PATCH 02/35] 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 ff0733784159faaad19114f2af53c88268e849c3 Mon Sep 17 00:00:00 2001 From: Remie Richards Date: Wed, 2 Sep 2015 01:32:02 +0100 Subject: [PATCH 03/35] 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 04/35] 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 05/35] 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 7e7b7bc491b3992ee8450dea41b7c5a151319079 Mon Sep 17 00:00:00 2001 From: Nerd Lord Date: Thu, 3 Sep 2015 12:34:59 -0400 Subject: [PATCH 06/35] 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 07/35] 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 08/35] 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 09/35] 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 10/35] 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 21c3c7733c102579c211808fb5f07f9054742f35 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Fri, 4 Sep 2015 13:46:55 +0100 Subject: [PATCH 11/35] 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 12/35] 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 zcmW++by!qS7pA038bLt1yIZ6iq`SMjFO77E5=#n#bc0AsgS3EjH>@1d5oM z)5XilBZ&yl z)YflH-gcHJxiWpLQZZZGA)7vwx*?x1mk~ez$9dE4-cX@3u1QRtkst{%@^eMMgQK-IRJ~F<l zP4~G*CB}NKXmV1HSA3Wa2r>7^yGZnYO8)NG5<#)rmyAu6OZZ_Vs${pnV~;#n{6k!7 z$>2x_J4LSTZj;Lq{mp-$RDyz7y65ddXV5>BoQhd?zcwmlQ{Yi@s; z{OkL^nt;sin~M?eMu2TKlS3#>vFXRyb0m(SMHEk4iS&u4;_<7@R}OPGek!DHYy3Sd zjvcNfb1w8k>}rk#Z@&D_Y5Cjo$l&Tg(bUGk#xFgXfuCCu{#FpH{!fnUN{)+RTlpq+ z8Q&N3RJ{Tj3IH@RGg%;_U|yIGS$r<~S9G7J+HYSJ6$(=?$Oe{P-TT~T@G)W;8#9Sm zH|=?aM|6oc=yFRu*HE^;ymQ%6@7JLhWmZ@?Bq6mge=UK8{0d=Jmgw#d}3my zOV=oJVQmfTOD(|KnzqzD5K4~qkS;-^v;FJeQ0pDp_n!nMP{i9OYD{2;y4+s{!`bb) z7_hkdF{E*o$j;4zio6a5hvg?CJ>##%O>cV$A0IU!401?UHs>;=y!+yj{^hkKR_fq( zxNK}^FM?hTaX9s&N@Hjc;+&L}r<`n!z4V)rVDQZ$3oF2ixdMxbK)kyQm1FQRs?kWy zH4Di|0JC`IJ5qPc;6~%ViW_`y(v%2$I5?kt9>6INJ65?m))<^F+%l&-TN6*2KCly? z;sVS3nrRTm-MQ)PeEE9W9Qd#P!MC1Bz=CIJS2bEGK`Rd9zHb4!J)=SIsbr<=IxbK3 z>G@9r6b*RB@pJwqxE>WX#Afo#S1NsAE@c%;V;ElhuAB277SXdvS<}p08?qF~8U{2L z*)4-zO<&bs$W9js%lexOykMto@uiXFDqbv*|NgIljU?<iq6+e4K#hvPbMn*r=$!xtXMAFpwuKd{ zGXdWeQc>NgB$VyF`F#7LyUok(CxUetlPZIXBi7uXBqfYD%Gf1So$Eql70eB=rN_=l zuPdqSDcy%9dy{>3NGxZ-&j&(_LzGPMf^q@ z*QF`;1O9=*4z9^tObW=B$y1ZDlvB{tIFcFcwJl`&Os&vOoE3 zK`tNXgw`|#lP6cL12*cmhgusoiX9$@*&C#_)oIl_I$Vmg&qsnA4YZY%8b?XCR)FSP z;ldsh@@0jO@{~%eapWkBneia1t_(03Y`J94zf-y1w{bW#Qu%{xz-2%JW)9m7QdVZH z&Kbb)T>ORPWV(|&^#c<$6E|~c4Krh*Q@q~meD{nOrPB+hnEUwAVtt+6@R7T4Dr5Jg z^I49!?Z=1)aLdO^_=^u_46@GI0lMH9{kXyfUd*~zG=9S96@#c9gglXJLr@>qGO6SA z+pm{5U6ZO{LHIjpqnr(GA;opLRmFbYM1HUZe2aD`h0`uecV^+7Oi81C* zL-qd-6-KRMl_8jI#B;J`%8)jJjWL1m`th6o93)hd-WkJ$36HaySKHZu15=&b^9HtE zm^QR;jyx^&9YHIp}7m$1~Wsxvo&tUWa!?i??Y2A-Pl%hn-HKJPMswpYhcKgxr zU2<8+li2=095y$M70X~?1|Rl3)RpEdi!N7%kv1naGTU8&GXG7L*EtpO>e~B|D@-}8 z;^DSMgqtbE)dSms?aXYm z+#A@EQ6xe)Y;$7HS<+-oi?tu^M#j*Vp>=U_&X?>HG|mW>X-ETW8!6W`kOLvP)|xql z?G18?Gp&F+R}#?WPO#)Iu92th9Fx?7&0SB{JQ zz~{c5{+cao2yj<;My_7Y7c0p-_2PXOT|)mv?I=i=y8hmOP()I&JMHY%uBRxbh>7(e z-yf9$>7z?&9hL2HOP&bNlprwQj)>>iR46p8skvE6Ma6nUoMm&_xxVLD%3Cp+pBT+6 zlP7ojki#!{p&z6d-mE?8j-2c|3DtY3X0S&i#Veg$D*(oa2vR=+8QR5(3@J0H^vcT{ zxfUnB7>gRTz7}_1Mj@86ZsIu*?lT^T4#@YSf61&^zHIOOlbaXCAQEwQ=7Wlglp`x6 zL&=$&7#d5-*}TH7!JYXfM;cIY$d!qH+p+GZ%J^{s>7i%tEf~AOqcG;rV~Au|clUl? zKRoNZ6#x)|`Wtqv6<9__c%sh7U}a)d7(3 z&fcf-CrrBIlVbCVs+Q+#XLEyrQn^H(9eZJ&sZ!uSN&h9@l-;OBks<7_P56HY{`bw^ zzUKAS)vO_~JPp#JyJw228LaEDU!D@a}MPpO@iSIUKy}Wo!cJ!h;TL<<{LG3`e zn6ZDO!Na_#D+gzy;sdsd|t0yJBz0}B0+Y+=3`@fCnqDSCJpfGg42xil= zpe~I!dlYwrAn5XyXFYa1burKI@iMX%nhKceOpTUp7bHi%9PSBj?;vDmW_E@y`H8%i zslrIG&`c;M84o`;9^d%t{+sIV5d?_(<}9`0vW_nzPS^jqp%@>he^+4iQ<|hc*DOGr z7`v9JKeO_t9RpucT|M?4H+jDU_Z4)BX{#&$^Eief$^WR|^03{{Ek)I>jJ)(i!Yv9eRu{? zw)7kUK#KVX0mF@KV=r6L1q$J3Ys@3(v&!yZeDP}^-@7z?>Zn&_q@)V%g9`d_<#THK zP&G5OAKz5~ns)wLw5Q-B;2mi5<-#9=bojt*gQY|><67RR&aM52=>C+jw#?H6+LPD6>nH z1r($~8k{QjxCc?ayYRLuPSmF9an>A1C5+V&Ph7KiT~>?noiVQjPTGQ@8#7v3;wih8 z(_SYpIPc9j-P&tpHOIc8@u;JFoINNd$s^l-M1BS>EEHwb_U;NWT|X|cy&s=YsrrVY z`b&)kLvpJwhzk{2G72%o!{U@{yX#WM^p^X&S@mbqPtM~J(*mr1Li_obtPvquo=#U+*T>h_6TGMN)U?^+-yx z!%8}xLiyittvl))`-u4whIC%WY&(7GgTLZIA%{m70z6->Xw`!AqkfV^e?s2N{cQnDWCqQNS!cqY?Gc@M{;yh6XA7xL`nsMbGV~N`} zg&E`Z@^1vVKbJSgY3^#tm%YZL(xqux0*h^G=4x`kNfzJQ#Im{Fs4=MhLxxdoqbiAZ zCqho?GrxH_v`aoO=URY>H35AM;NUn!FF|^D`&BdoC?08bvJAW;;p{?<327NJ#*tLeWQ-eoT+c%&wgcpa6;G#YkUyi;K^ zb;u2eO*Jg{xdLCyqtD`wdJ!EbSC|}W7LA1-ofVItW8|2J@X}_oZJVyf&MWkV5OMD{ zhhFqiW$wdVSpg$#P^eyYvn6MiYEGTdWDGGaUc3~5Ao>RD_vvj02&Cca%5gZYWDQY1 zRb#O@H1^vYeLY<$rr`If#kv$06b$rvkajfh3X6R1EFZ3%onKYdHo+^5TK8$Wn_VPd z6~huktqLWSxf${da@&e3$ii6Dz-Te0GcP()aL; zSHBO$3Du*}&~d02p(rUoS^i$uzS~?otZ-5ILAgiS0Fk7;{s@-(p<(nwbN7J%h@jD0 zxC>@@JX=3!l;{CXqzZx|9adjwRJWpbC3Pv#K}MVVUSru$sOR*~Mf)Fe0UE5_H_ON# zdv6s5>1KYg+K2U+arN}{l$V!ReJ|3);OPO(xSmOX7>0VccT!x&3@(K%EO0lcT|3U2 zKq#7I)-6m7u8ofmfnE6tM(4fq>ol1IB4-l4`;r+pk|O#-tCQaAWw_=RTi7l`oT4r|Xi0@Qvtx_u=DzUV8 zDs0eSh1sgSz0XbyT_%>!9HYNPtqdg`0Dr{Xyvxk+ZI!J3#AT1VaW?)Gq<47e9sF^t z^@f|DKe{P(dq^FxWc6t3DKukAI!7os>W|Y>WqkBt! zvMWS0YWlpbn~gzLtXak*fUKBgoeJ-CKEc4UecTrAvOCuUu}QSL5)1?J)QZ-!Q&S~n zw{$VH4q5G2$j9%Q7#PMV=o8POlLuRTPM)5g9mJ<-8eDgM6xzaL8mr>0>GPN-?2(lt z^>U!iY~69^HnGo~{z9RW)ScHX^lAxA0#lPE$S_&3jfg@Y^*u$}M9&uN5A)e)8oq7%uiyY34pv_TsOdVkh6yyK?1 zHOHvXlrvshS^{F>nsNMyjz+;oMOIQ$%F4~100C7l68$%5<;=LQkNu&y2HJDv{7k%A znKC~n6#YT@ob7mn4=xTklIWxhNc4)#L-703^D%Nf(ZSk$w3x`@AYDwk4Vu_f=fV|F zO~>!_fLL+iRmzVRNK&^>snL@tHh-E@7kiYXhOa=TQfYgoM!PAqNzx3gJ@XL!SqNn9 z;PA=4U}MIeX=b0IvLd3cCwTMFMVlbiHf!9r6t}Om7B*4?>Wx@SJ>To=lQzJ*vO4P} z7?fkbQ{@ZlV1A~S1^j>uZW;z<{0^IXuPQZyB_h~nz;yH;@7do@Z-Z?$q4hlqGBV9? zEx_72BL|18L3!`sb|1W2|o^2p<}fO_HaR1ZfmO zsVOP<(iN!U9q|3K0QiIrTmxCfY~k>NS^@|Rl8rxr9kvhZYhS?(($l=5b*5)U68Vp4 zxY%My)w~E#Pe{Ig7dH22D}SkJ!6vD&WFZ;%9^G%Fce5)iN`PtJ?X=at5lkhyQ|D0~?MFae=ugNUb+p-3_JG|n>&%a0W#$=4y zl-51@y1b2`nKB@tVwU4rx1nWXQbqO~3 zX{7%tLw*2c%ge6*nf87l?3~EOt=Ig4F`168Sp@VB?O?V#6F84LMffAyRjM37^WZ;I#DN7O z*m+9$Soudwn>N?+6f-^gh=7y%x!$Bj!hV`^b#3i4zazo2AV2r8)4q)v6+k6LRkNrZ z7$`D4JbZI=Q?=^n<1;kr&RYRqthtx}s|UnO{diK6CKzydWYag7yFF=FR1%zsY&+}X zO}OleeLj#FPsRIN;#5W~Yx{Y5ozNS0E69=BHhJzhGFd+)L@lOfY)nyK-<>2dgTfBg z-DKBW2QC0EiY39Iu+Y}2iJ8NdL-XQ~jX`vDbW!5L57B64WVoh?L`wzQ5S@F|bzpCA zZ&ZQ9B>`tPhL}uE(7YcO!|ldUC8vqUcYkRQ_gbE7XFk1__V&z-jL1c&ibcEKZ>6+# zZAOhj;&2%My|E#A)+$Q-2i-V#lRkd4aAF#KTOn2a?OVj>T-3YvhE{_ya^vXQVbIK>vPJ@IOt1?eR!^HSzT<*dalsB$#MWsQ=0n;s5tY z16}zAwtI7)fi58z*dSIMgDnb>7~Q73GuDE>QRLwWHCflh=xCo?yZ0mH(QC!r|5DHP z@9W#_91DI3HNz36MODmrZF1#@12AT+=5z50_%y_#BwF405OWGRP}Tb9%ni4lHpDU8 zMc?IM(Z7PHOFuE8VQNKsyqir?N$H)CP;N^L{|aVOcCR_l&*g;$n);YRL2JFyw(gC9 z&tJcyVq*RRk-|3hdSB5u!7UfYj?=0Q*NevEEzb1)BbG_fNYvkE3lh9@(Q;OQKVPro zw;6wWVMj02ZvY@yg&@~oUHC!A5%aRZgPYws5?4NQ^Z7a$G0)6Q-8fjx+RNL~+1)-U zP$ZdyL;M+n6>_d(PI*A3Fagt&`4bwUfH@n2AYZ0cw1xj0^9$Ih;B>KZ#br{;BOJjdGv3+IaxHc6%vuyziN0(WRMPd$^0!9}SbB4gGXjf!ce>yFb7@@I(z7Au@ zq3rI1NX#->xgjU@8X!u^{#%T6)^Hp*e#>j25=L$bVXBBZ#3z7>ilED z#&%;V21q?w+{M(XWhrI^OUdn z5Hp%xfAuYz%ivM*U+?op_uj#Q6*n1kb*O6FUBZUx``Kh`~_R`1?Drbwcz-PKZk^kx=#-%lz)=ffzvZ4 zL8W}N7Ph9(Y#iNSV#(|W$BAs(Kl=#vLSF4=Yp@tB(j6aB9x`ltCMNF>fRsHY?i~`= z>e}b5jDh+WF~i*K>_(4mnd+JvT^TZ0*likL+o%0a=o=C1#D@olOhf2-{kIDkIAd{6 zb~Jr(aP`+Xmt9z{X*-Z?yPO^4KpfsSHM9mruD|cK-ocB#r|zM?2*6i-mr{_ngGToc zq9599Q1sH{gd|N}{=OzOJkvGmtVUww^fYz`A(co#pl~46YvvKnCX@?Q<<9Gwh_|ohCxm~ z*RjP_1QD>>`k;ZW@Jf^V^(B^xNhgYPI`IbTE~BH#bobv_&yVU`9gFf%G{SGpprOxv z+aC-f`%iDRyTrNMN?Yz|W9C@dO*e3Byvla;ciOr{fxFIAM~*@bCnr`oJy^H?m4RbvD0q^?*zI=HzIz7E}ZhG0^(O=mh)?;Ik1dnPf z<;lL?Chxr?PbHKW*Xdkyjia!TE!-SaQnJ(erP=Pb71O`>iKCS%TsKlRIRIQm8^))q zFN{Fwr8hVZtNFZuAF=6QUh>2^*s#gVT+^BRP1w7T`H6{r!%d#fIsZoowPX{?w|mbr z*n@^KB@JHt%Ail@rpo00RAO#AH4J?ud;!J`1$wHULD(GTx@K> z_l`V~iy%=kvE#F|A$VE+j)%sTb$)J6Mo*6w@03>c@M67mDx`rzpIBd_ zwQ9EY*&a6fFo2{>;aOkOsPwZv?B9?jAxk=#%{~GVz_zG8F&TPQeOguDD|KFy2RtZX zjxW+Qg0YtU4|$Heb>yVcvj@=Tge{o$g-M{t`*T#k)hj>x7JM{}Z?1PYc)S67r7SHB zO#+97{!gr|tfO$?brEcKT4Y`M^59SS0nRPz;%dthR}z29{}4%;`%2(|w1GnP56$!^ zxx+5iq|F?C>%%bSXLBB`zn3|(fXB>gcppp5#W@=N`=r#5xgb2)&GGzoU{8QJ)g9T$ zdwVA9mkTt-h}q80&b=of-Pp+Jk2Pgn|8D=`t+t7YD!c^z<2%s*Fq|Qzgn}q@?oJVO zxn}SHv>b|66H|@ z?|d2_M4@b&m(0;zdZ(95#_n+bki#o1%#3!IxDERI*TfJTW*W_1DlC0(5g->YG?M)3 z0R!5Tx(6QXF2~zCM_ZT)+BO1Jn*?$UU7n+1dp&L_(E0l3sqSO_2gr-7+Cx|=|I zdpn==68j44-&SW9F@N=!ToM^mM4wI*aOa9kio?#JgfKtt4#4!#V-|2&VlqcO#t~f{ z(@iq)aEFZAWvv*w?bT_}U=b1GcEe<>sG>4>?l-@KC;amM1G1D>3n9635@RL=n@KfK z+B0i6qV)WxlM7oV2%p2sGs2XUw7vE3lt_NEO%!7H@W2E$fH_eB8`uSNAKlIQOn(T= zrT@<642!et1zL-1PfzYV>NvW1ByuN+y##*6;T%7rY512B4WtuE3c#)`5i0OmYx~Ot z1n6i(kV>GNa%9t-BMT?vwwk)P5$^qw9Iz%5O9MplM%WCjMW}2KwjePlrK7HnD|R7- zU#qosJ3x&0gk&9_D)06x0lKMUJ|iWr#{Xu-^XbMBVALp5)yv@@T%DgE{E0*ecc-Q+ z5lUQjkmS_E_3mc_7?rsz_{t$VfAI90dL1TbH=X&5{EMW4a{mIy>q4Q>2A!~419s_t zsm6x1ji;baaY?$@ppm$mdc5gx%QYk#dD4jki=@8K*y^9&Bh1gwmpSoepfiOdW#Fe2 zTzz{4qEe$U+XK|Snv@~(NU2iL4$DXIz9f3bPa~H{nu<3pZ%r7o7Z;oDXX;E^ow7C1 z54(I%p|(TZN9-Q^*>fo;LB_K3$matWip2%5);xO=Q_Ux7hX-0EH%uHYMqW_uHb}&^ zr6^%F{|;VLQ)`q=$bI;LY*wFJR791KkT5z9jPIB_Z>f~}_+w#VIjXU5?`v<}9Opg0 z=kORmwV-9Dsl&T8Bq9Xh&WoHtEral(01>X8r8I{FhLRGtLypm_8VVLb_&fD!4rlXq%;3RTne}I5`g`< zaTPS1TH?0aGKS#sa=SbM^O^tpt(~+U1rFvlx$3?;fFJ_~dl=2IL-~pgt@<+^$zIJ_La7@)q=ZpgUinPs`h&yu9HDH* z)v>9sy9czH@8Ohc`67>#^P5 z-YzUI$_d~e-3GnC{?h^=RWb#vHvM}odkqN|6XQYn0G;`5fpQp*C83L@x18r9`*})O z8)`VApHTq+f#>LzI2(tw?c1KypKfB^FPSKCSScYA=4ja=sdoDgQI41=6w|`3I$^1w zA(g?d?}Y|Y+w1G;>1*TkGpR;DAllg1+g$dEUi|o{zWH=}%Eb!2ULfwnDio2qLTkRu zA}Jy0KT&Xg#ro{tYQ)0EQBl&U^%E8F@QH|@_#)m!jQ;!gA4PeiH?2(Svcuo@g}!KY zw(f}k;W04$4xwjwSL=@6=X%A%zb6;%!2DWm9iE`w_v4?9w&$1P1xXrud(Ef!NhfiZ za$eOC*4~nCDG$e=t|U@tKX49pjC>Bn5ejQ~^cEPkcxm9-jHfnjxGo*4(lb z*l$TmnbuUde<8$FRC3Ix5Xw(TZF%7|{|kwtx^k?*MSXgv1L`PPU@_5K=7F{JR^vnH zM%P%rMCXVZss*8Qr-e$zZ$Jagnf?iqoShVk8s?cJEC(M z>vGHGaaC0T1tZh|q|^&|7wKcrIJr~Al?73L{bOh0o28OQD|!y40133h*SG2RPA9rM zZTtjlj~r~b^dWRhb83L(vkgv8uWyOvpik? z1O~pjm=h`bdCs>vcODiRhPWGdx~-Fv$hRxYt-v&CAE0ITH6|M#%d=Nlr)rd~OK+=~ z-pdo1)$6xGhqPu^3F{j49yn2=@mYuQ%ZZ@GFR2rJ6QmSAp*WdivbJ_#T{?B`>~NcJ zhO~~6;?_7gwH?eqd@2@P?^zn3XVlbfO9o;96;B?O(-RMb&C6p9wn$tg8I~dUKP2g| z!ECNvsg*+I4;Y>;@Or-B{;M*IHAb}HXH^T{LHs;5JJIeJii@G)K?`2Hd3>r=+I~9| zacr5?L44-><#W%D1-PB`Y33TsG`oij@c<3rYOgA2hcqa0(%>Pq>k-kiWAWY+=;}$A z5eW`yq&p%jUOuhhg3rcv(rsGBx_J)Op_igkl$~;(k z^1xY%8!Q*I5^($!^o;i8~`h6~eL*wi+m{78Vp(Cc9)i{Fgj1j#VB z%_u)p_ucCX*~uEAHY&~sn*mu1?#Do2jKf5g2OkbaLw zgK$_ix)UN*z(=V=lkcM($srLPW=Bcd5Arg5wA-X4#UwH}VL3Tpy8!BQ19M@h#i!xw z#2hJx#?-&6gi088>`G=S;x|I78`3Lzs(f4_FC>h)oO;=(i>>r>q^R&dv2crHVYO;- z&;5u$PB&?t8b8De;Ah$4qA?Hu@3!U*u8B&RN0Cu0%$Kg7eQ&;S4c delta 10442 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 From b9e779dc54de979a53c40a1e3d93f719e424ae90 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Fri, 4 Sep 2015 19:13:51 -0400 Subject: [PATCH 13/35] 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 14/35] 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 15/35] 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 d701946cd45647538cae999a8f89fd6958d17946 Mon Sep 17 00:00:00 2001 From: Firecage Date: Sun, 6 Sep 2015 00:02:22 +0200 Subject: [PATCH 16/35] 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 55cc574ff696b4887bbbf5c21a9f8e28befe5a8c Mon Sep 17 00:00:00 2001 From: xxalpha Date: Sat, 5 Sep 2015 23:51:23 +0100 Subject: [PATCH 17/35] 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: Sat, 5 Sep 2015 23:18:48 -0600 Subject: [PATCH 18/35] 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 fd5e85411855ce2f401b966bc1e354cfb2699e95 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 6 Sep 2015 14:02:10 -0400 Subject: [PATCH 19/35] 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 652260af2ae4424a6bfea2246cbd4ebd7151bb0a Mon Sep 17 00:00:00 2001 From: bgobandit Date: Sun, 6 Sep 2015 14:35:23 -0400 Subject: [PATCH 20/35] 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 21/35] 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 22/35] 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 c05dc7ef93ad94136420f3690f45cbed0c427671 Mon Sep 17 00:00:00 2001 From: Orange Borg Date: Mon, 7 Sep 2015 17:14:42 +1200 Subject: [PATCH 23/35] remove commented out code --- code/controllers/subsystem/shuttles.dm | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/code/controllers/subsystem/shuttles.dm b/code/controllers/subsystem/shuttles.dm index 4c04c91bbdf..baf1ee3e01d 100644 --- a/code/controllers/subsystem/shuttles.dm +++ b/code/controllers/subsystem/shuttles.dm @@ -199,19 +199,6 @@ var/datum/subsystem/shuttle/SSshuttle return 2 return 0 //dock successful - -/* -/proc/push_mob_back(var/mob/living/L, var/dir) - if(iscarbon(L) && isturf(L.loc)) - if(prob(88)) - var/turf/T = get_step(L, dir) - if(T) - for(var/obj/O in T) // For doors and such (kinda ugly but we can't have people opening doors) - if(!O.CanPass(L, L.loc, 1)) - return - L.Move(get_step(L, dir), dir) -*/ - /datum/supply_order var/ordernum var/datum/supply_packs/object = null @@ -333,11 +320,3 @@ var/datum/subsystem/shuttle/SSshuttle return O -/* -/datum/subsystem/shuttle/proc/getShuttleFromArea(area/A) - if(!A) - return - for(var/obj/docking_port/mobile/M in SSshuttle.mobile) - if(M.areaInstance == A) - return M -*/ From ab34f7cb86b0b22a70ba074bc3cf85cc4f65afe9 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 7 Sep 2015 07:15:24 -0400 Subject: [PATCH 24/35] Adds two new posters. --- icons/obj/contraband.dmi | Bin 62020 -> 64042 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/obj/contraband.dmi b/icons/obj/contraband.dmi index 0010b7f1113cbcd90ca83d6240e72f6ddb5a184d..b5993088523ce1004c33e134987a238234b66a1f 100644 GIT binary patch literal 64042 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⪼j0U5jjp%l_1xR9ear}qDV>(zN+|Ix_%UWOc+mc| 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 a7Uom(SFT1ng7Opz`1vBO@TpQ#-~WHLZ-s#X literal 62020 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

JCterb;b;)k)fxjg;e#bhDK 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 Date: Mon, 7 Sep 2015 07:18:58 -0400 Subject: [PATCH 25/35] henk --- code/game/objects/effects/decals/contraband.dm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index f6cde134640..a986044722d 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 34 // contraband posters +#define NUM_OF_POSTER_DESIGNS 35 // contraband posters -#define NUM_OF_POSTER_DESIGNS_LEGIT 34 // corporate approved posters +#define NUM_OF_POSTER_DESIGNS_LEGIT 35 // corporate approved posters //########################## THE LIST OF POSTERS AND DESCS ##################### @@ -46,6 +46,7 @@ var/global/list/posternames = list( "- CC 64K Ad", "- Punch Shit", "- The Griffin", +"- Lizard", "- Free Drone" ) var/global/list/posterdescs = list( @@ -82,6 +83,7 @@ var/global/list/posterdescs = list( " 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?", +" This lewd poster depicts a lizard preparing to mate.", " This poster commemorates the bravery of the rogue drone banned by CentComm." ) // LEGIT @@ -121,6 +123,7 @@ var/global/list/legitposternames = list( "- 12 Gauge", "- High-Class Martini", "- The Owl", +"- No ERP", "- Carbon Dioxide" ) var/global/list/legitposterdescs = list( @@ -157,6 +160,7 @@ var/global/list/legitposterdescs = list( " 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?", +" This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations.", " This informational poster teaches the viewer about carbon dioxide." ) //########################## THE ACTUAL POSTER CODE ########################### From a4b0a7e1bffdb6847ae58d7f48b8583835c09cc0 Mon Sep 17 00:00:00 2001 From: duncathan Date: Mon, 7 Sep 2015 06:40:04 -0600 Subject: [PATCH 26/35] fixes roundstart atmos --- code/ATMOSPHERICS/components/unary_devices/vent_pump.dm | 4 ++-- code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm index 487c3323f04..cc253759f72 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_pump.dm @@ -93,7 +93,7 @@ if(pump_direction & RELEASING) icon_state = "vent_out" - if(pump_direction & SIPHONING) + else //pump_direction == SIPHONING icon_state = "vent_in" /obj/machinery/atmospherics/components/unary/vent_pump/process_atmos() @@ -130,7 +130,7 @@ loc.assume_air(removed) air_update_turf() - if(pump_direction & SIPHONING) //external -> internal + else //external -> internal var/pressure_delta = 10000 if(pressure_checks&EXT_BOUND) pressure_delta = min(pressure_delta, (environment_pressure - external_pressure_bound)) diff --git a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm index cee4e68b4d5..ac52a1d1178 100644 --- a/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm +++ b/code/ATMOSPHERICS/components/unary_devices/vent_scrubber.dm @@ -76,7 +76,7 @@ amount += idle_power_usage if (scrub_N2O) amount += idle_power_usage - if(scrubbing & SIPHONING) + else //scrubbing == SIPHONING amount = active_power_usage if (widenet) @@ -99,7 +99,7 @@ if(scrubbing & SCRUBBING) icon_state = "scrub_on" - if(scrubbing & SIPHONING) + else //scrubbing == SIPHONING icon_state = "scrub_purge" /obj/machinery/atmospherics/components/unary/vent_scrubber/proc/set_frequency(new_frequency) @@ -203,7 +203,7 @@ tile.assume_air(removed) tile.air_update_turf() - if(scrubbing & SIPHONING) //Just siphoning all air + else //Just siphoning all air if (air_contents.return_pressure()>=50*ONE_ATMOSPHERE) return From 6bb1ca3f122d331bd11837051922d1fe60e6c9d2 Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 7 Sep 2015 09:18:55 -0400 Subject: [PATCH 27/35] Changelog. --- html/changelogs/bgobandit - legitposters.yml | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 html/changelogs/bgobandit - legitposters.yml diff --git a/html/changelogs/bgobandit - legitposters.yml b/html/changelogs/bgobandit - legitposters.yml new file mode 100644 index 00000000000..dd2b99c8ea6 --- /dev/null +++ b/html/changelogs/bgobandit - legitposters.yml @@ -0,0 +1,7 @@ +author: bgobandit + +delete-after: True + +changes: + - rscadd: "Nanotrasen has commissioned two new corporate motivational posters for your perusal and edification." + - rscadd: "Nanotrasen also wishes to remind the crew that non-authorized posters ARE CONTRABAND. Especially those new ones with Rule 34. Perverts." \ No newline at end of file From dc16dfbcc2e9cc95a72d0c5dc5871640b13a7f3c Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 7 Sep 2015 09:48:31 -0400 Subject: [PATCH 28/35] Fixes/tweaks slime potions. --- .../research/xenobiology/xenobiology.dm | 39 +++++-------------- 1 file changed, 10 insertions(+), 29 deletions(-) diff --git a/code/modules/research/xenobiology/xenobiology.dm b/code/modules/research/xenobiology/xenobiology.dm index 58ef59bfd34..777cb0bc607 100644 --- a/code/modules/research/xenobiology/xenobiology.dm +++ b/code/modules/research/xenobiology/xenobiology.dm @@ -13,19 +13,14 @@ throw_range = 6 origin_tech = "biotech=3" var/Uses = 1 // uses before it goes inert - var/enhanced = 0 //has it been enhanced before? /obj/item/slime_extract/attackby(obj/item/O, mob/user) - if(istype(O, /obj/item/slimepotion/steroid)) - if(enhanced == 1) - user << "This extract has already been enhanced!" + if(istype(O, /obj/item/slimepotion/enhancer)) + if(Uses >= 5) + user << "You cannot enhance this extract further!" return ..() - if(Uses == 0) - user << "You can't enhance a used extract!" - return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." - Uses = 3 - enhanced = 1 + user <<"You apply the enhancer to the slime extract. It may now be reused one more time." + Uses++ qdel(O) /obj/item/slime_extract/New() @@ -226,7 +221,7 @@ /obj/item/slimepotion/steroid name = "slime steroid" - desc = "A potent chemical mix that will cause a slime to generate more extract." + desc = "A potent chemical mix that will cause a baby slime to generate more extract." icon = 'icons/obj/chemical.dmi' icon_state = "bottle16" @@ -240,34 +235,20 @@ if(M.stat) user << "The slime is dead!" return..() - if(M.cores == 3) + if(M.cores >= 5) user <<"The slime already has the maximum amount of extract!" return..() - user <<"You feed the slime the steroid. It now has triple the amount of extract." - M.cores = 3 + user <<"You feed the slime the steroid. It will now produce one more extract." + M.cores++ qdel(src) /obj/item/slimepotion/enhancer name = "extract enhancer" - desc = "A potent chemical mix that will give a slime extract three uses." + desc = "A potent chemical mix that will give a slime extract an additional use." icon = 'icons/obj/chemical.dmi' icon_state = "bottle17" - /*afterattack(obj/target, mob/user , flag) - if(istype(target, /obj/item/slime_extract)) - if(target.enhanced == 1) - user << "This extract has already been enhanced!" - return ..() - if(target.Uses == 0) - user << "You can't enhance a used extract!" - return ..() - user <<"You apply the enhancer. It now has triple the amount of uses." - target.Uses = 3 - target.enahnced = 1 - qdel(src)*/ - - /obj/item/slimepotion/stabilizer name = "slime stabilizer" desc = "A potent chemical mix that will reduce the chance of a slime mutating." From 1af843ef0f76d076fee6184d9aeca2e93960d488 Mon Sep 17 00:00:00 2001 From: sybil-tgstation13 Date: Mon, 7 Sep 2015 14:44:43 +0000 Subject: [PATCH 29/35] Automatic changelog compile --- html/changelog.html | 6 ++++++ html/changelogs/.all_changelog.yml | 3 +++ html/changelogs/xxalpha-xenoweedspread.yml | 7 ------- 3 files changed, 9 insertions(+), 7 deletions(-) delete mode 100644 html/changelogs/xxalpha-xenoweedspread.yml diff --git a/html/changelog.html b/html/changelog.html index 8d71d8d1f3d..450653912d3 100644 --- a/html/changelog.html +++ b/html/changelog.html @@ -55,6 +55,12 @@ -->

+

07 September 2015

+

xxalpha updated:

+
    +
  • Changed xeno weed spread to be like gas spread.
  • +
+

06 September 2015

Fox P McCloud updated:

    diff --git a/html/changelogs/.all_changelog.yml b/html/changelogs/.all_changelog.yml index aa5ac0ba361..0ba050a0c60 100644 --- a/html/changelogs/.all_changelog.yml +++ b/html/changelogs/.all_changelog.yml @@ -1708,3 +1708,6 @@ DO NOT EDIT THIS FILE BY HAND! AUTOMATICALLY GENERATED BY ss13_genchangelog.py. Xhuis: - bugfix: Nanotrasen inspectors have discovered a fault in the buckles of chairs and beds. This has been fixed and you are now able to buckle again. +2015-09-07: + xxalpha: + - tweak: Changed xeno weed spread to be like gas spread. diff --git a/html/changelogs/xxalpha-xenoweedspread.yml b/html/changelogs/xxalpha-xenoweedspread.yml deleted file mode 100644 index c088d6273cc..00000000000 --- a/html/changelogs/xxalpha-xenoweedspread.yml +++ /dev/null @@ -1,7 +0,0 @@ -author: xxalpha - -delete-after: True - -changes: - - tweak: "Changed xeno weed spread to be like gas spread." - From 2cee8c85dcb1b8088a182ee80c8015d50016710b Mon Sep 17 00:00:00 2001 From: bgobandit Date: Mon, 7 Sep 2015 12:18:06 -0400 Subject: [PATCH 30/35] Reworks the poster lists per cheridan --- .../game/objects/effects/decals/contraband.dm | 234 +++++++----------- tgstation.dme | 1 + 2 files changed, 84 insertions(+), 151 deletions(-) diff --git a/code/game/objects/effects/decals/contraband.dm b/code/game/objects/effects/decals/contraband.dm index a986044722d..59059d5ca9b 100644 --- a/code/game/objects/effects/decals/contraband.dm +++ b/code/game/objects/effects/decals/contraband.dm @@ -5,163 +5,95 @@ #define NUM_OF_POSTER_DESIGNS_LEGIT 35 // corporate approved posters +#define POSTERNAME "name" -//########################## THE LIST OF POSTERS AND DESCS ##################### +#define POSTERDESC "desc" + + +//########################## LISTS OF POSTERS AND DESCS ##################### // please add new posters and names to their respective lists and update constant(s) above +// use the format below, including punctuation, this will become important later // 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", -"- Lizard", -"- Free Drone" ) +var/global/list/contrabandposters = list( -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?", -" This lewd poster depicts a lizard preparing to mate.", -" This poster commemorates the bravery of the rogue drone banned by CentComm." ) +list(name = "- Free Tonto", desc = " A salvaged shred of a much larger flag, colors bled together and faded from age."), +list(name = "- Atmosia Declaration of Independence", desc = " A relic of a failed rebellion."), +list(name = "- Fun Police", desc = " A poster condemning the station's security forces."), +list(name = "- Lusty Xenomorph", desc = " A heretical poster depicting the titular star of an equally heretical book."), +list(name = "- Syndicate Recruitment", desc = " See the galaxy! Shatter corrupt megacorporations! Join today!"), +list(name = "- Clown", desc = " Honk."), +list(name = "- Smoke", desc = " A poster advertising a rival corporate brand of cigarettes."), +list(name = "- Grey Tide", desc = " A rebellious poster symbolizing assistant solidarity."), +list(name = "- Missing Gloves", desc = " This poster references the uproar that followed Nanotrasen's financial cuts toward insulated-glove purchases."), +list(name = "- Hacking Guide", desc = " This poster details the internal workings of the common Nanotrasen airlock. Sadly, it appears out of date."), +list(name = "- RIP Badger", desc = " This seditious poster references Nanotrasen's genocide of a space station full of badgers."), +list(name = "- Ambrosia Vulgaris", desc = " This poster is lookin' pretty trippy man."), +list(name = "- Donut Corp.", desc = " This poster is an unauthorized advertisement for Donut Corp."), +list(name = "- EAT.", desc = " This poster promotes rank gluttony."), +list(name = "- Tools", desc = " This poster looks like an advertisement for tools, but is in fact a subliminal jab at the tools at CentComm."), +list(name = "- Power", desc = " A poster that positions the seat of power outside Nanotrasen."), +list(name = "- Power to the People", desc = " Screw those EDF guys!"), +list(name = "- Communist State", desc = " All hail the Communist party!"), +list(name = "- Lamarr", desc = " This poster depicts Lamarr. Probably made by a traitorous Research Director."), +list(name = "- Borg Fancy", desc = " Being fancy can be for any borg, just need a suit."), +list(name = "- Borg Fancy v2", desc = " Borg Fancy, Now only taking the most fancy."), +list(name = "- Kosmicheskaya Stantsiya 13 Does Not Exist", desc = " A poster mocking CentComm's denial of the existence of the derelict station near Space Station 13."), +list(name = "- Rebels Unite", desc = " A poster urging the viewer to rebel against Nanotrasen."), +list(name = "- C-20r", desc = " A poster advertising the Scarborough Arms C-20r."), +list(name = "- Have a Puff", desc = " Who cares about lung cancer when you're high as a kite?"), +list(name = "- Revolver", desc = " Because seven shots are all you need."), +list(name = "- D-Day Promo", desc = " A promotional poster for some rapper."), +list(name = "- Syndicate Pistol", desc = " A poster advertising syndicate pistols as being 'classy as fuck'. It is covered in faded gang tags."), +list(name = "- Energy Swords", desc = " All the colors of the bloody murder rainbow."), +list(name = "- Red Rum", desc = " Looking at this poster makes you want to kill."), +list(name = "- CC 64K Ad", desc = " The latest portable computer from Comrade Computing, with a whole 64kB of ram!"), +list(name = "- Punch Shit", desc = " Fight things for no reason, like a man!"), +list(name = "- The Griffin", desc = " The Griffin commands you to be the worst you can be. Will you?"), +list(name = "- Lizard", desc = " This lewd poster depicts a lizard preparing to mate."), +list(name = "- Free Drone", desc = " This poster commemorates the bravery of the rogue drone banned by CentComm.") ) // LEGIT -var/global/list/legitposternames = list( +var/global/list/legitposters = 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", -"- No ERP", -"- Carbon Dioxide" ) - -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?", -" This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations.", -" This informational poster teaches the viewer about carbon dioxide." ) +list(name = "- Here For Your Safety", desc = " A poster glorifying the station's security force."), +list(name = "- Nanotrasen Logo", desc = " A poster depicting the Nanotrasen logo."), +list(name = "- Cleanliness", desc = " A poster warning of the dangers of poor hygiene."), +list(name = "- Help Others", desc = " A poster encouraging you to help fellow crewmembers."), +list(name = "- Build", desc = " A poster glorifying the engineering team."), +list(name = "- Bless This Spess", desc = " A poster blessing this area."), +list(name = "- Science", desc = " A poster depicting an atom."), +list(name = "- Ian", desc = " Arf arf. Yap."), +list(name = "- Obey", desc = " A poster instructing the viewer to obey authority."), +list(name = "- Walk", desc = " A poster instructing the viewer to walk instead of running."), +list(name = "- State Laws", desc = " A poster instructing cyborgs to state their laws."), +list(name = "- Love Ian", desc = " Ian is love, Ian is life."), +list(name = "- Space Cops.", desc = " A poster advertising the television show Space Cops."), +list(name = "- Ue No.", desc = " This thing is all in Japanese."), +list(name = "- Get Your LEGS", desc = " LEGS: Leadership, Experience, Genius, Subordination."), +list(name = "- Do Not Question", desc = " A poster instructing the viewer not to ask about things they aren't meant to know."), +list(name = "- Work For A Future", desc = " A poster encouraging you to work for your future."), +list(name = "- Soft Cap Pop Art", desc = " A poster reprint of some cheap pop art."), +list(name = "- Safety: Internals", desc = " A poster instructing the viewer to wear internals in the rare environments where there is no oxygen or the air has been rendered toxic."), +list(name = "- Safety: Eye Protection", desc = " A poster instructing the viewer to wear eye protection when dealing with chemicals, smoke, or bright lights."), +list(name = "- Safety: Report", desc = " A poster instructing the viewer to report suspicious activity to the security force."), +list(name = "- Report Crimes", desc = " A poster encouraging the swift reporting of crime or seditious behavior to station security."), +list(name = "- Ion Rifle", desc = " A poster displaying an Ion Rifle."), +list(name = "- Foam Force Ad", desc = " Foam Force, it's Foam or be Foamed!"), +list(name = "- Cohiba Robusto Ad", desc = " Cohiba Robusto, the classy cigar."), +list(name = "- 50th Anniversary Vintage Reprint", desc = " A reprint of a poster from 2505, commemorating the 50th Aniversery of Nanoposters Manufacturing, a subsidary of Nanotrasen."), +list(name = "- Fruit Bowl", desc = " Simple, yet awe-inspiring."), +list(name = "- PDA Ad", desc = " A poster advertising the latest PDA from Nanotrasen suppliers."), +list(name = "- Enlist", desc = " Enlist in the Nanotrasen Deathsquadron reserves today!"), +list(name = "- Nanomichi Ad", desc = " A poster advertising Nanomichi brand audio cassettes."), +list(name = "- 12 Gauge", desc = " A poster boasting about the superiority of 12 gauge shotgun shells."), +list(name = "- High-Class Martini", desc = " I told you to shake it, no stirring."), +list(name = "- The Owl", desc = " The Owl would do his best to protect the station. Will you?"), +list(name = "- No ERP", desc = " This poster reminds the crew that Eroticism, Rape and Pornography are banned on Nanotrasen stations."), +list(name = "- Carbon Dioxide", desc = " This informational poster teaches the viewer what carbon dioxide is.") ) //########################## THE ACTUAL POSTER CODE ########################### @@ -258,12 +190,12 @@ var/global/list/legitposterdescs = list( serial_number = rand(1, NUM_OF_POSTER_DESIGNS_LEGIT) if(!official) icon_state = "poster[serial_number]" - name += posternames[serial_number] - desc += posterdescs[serial_number] + name += contrabandposters[serial_number][POSTERNAME] + desc += contrabandposters[serial_number][POSTERDESC] else if (official) icon_state = "poster[serial_number]_legit" - name += legitposternames[serial_number] - desc += legitposterdescs[serial_number] + name += legitposters[serial_number][POSTERNAME] + desc += legitposters[serial_number][POSTERDESC] ..() /obj/structure/sign/poster/attackby(obj/item/I, mob/user, params) @@ -338,4 +270,4 @@ var/global/list/legitposterdescs = list( user << "You place the poster!" else D.roll_and_drop(temp_loc,D.official) - return + return \ No newline at end of file diff --git a/tgstation.dme b/tgstation.dme index d2fa7fb8542..5310c6088b5 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -1125,6 +1125,7 @@ #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 bcdf5666e88c54443267207cca79b7b43f311b43 Mon Sep 17 00:00:00 2001 From: blah Date: Mon, 7 Sep 2015 18:37:41 +0100 Subject: [PATCH 31/35] Fixes Orion Trail properly the error was a rogue ! in the top of the topic that was added by accident --- code/game/machinery/computer/arcade.dm | 5 +++-- config/admins.txt | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/code/game/machinery/computer/arcade.dm b/code/game/machinery/computer/arcade.dm index c9c6c6e81b9..3724eb13ae4 100644 --- a/code/game/machinery/computer/arcade.dm +++ b/code/game/machinery/computer/arcade.dm @@ -424,7 +424,6 @@ name = "The Orion Trail" desc = "Learn how our ancestors got to Orion, and have fun in the process!" - else if(event) dat = eventdat else if(playing) @@ -454,7 +453,8 @@ return /obj/machinery/computer/arcade/orion_trail/Topic(href, href_list) - if(..()) + . = ..() + if(.) return if(href_list["close"]) usr.unset_machine() @@ -979,6 +979,7 @@ /obj/machinery/computer/arcade/orion_trail/proc/win() playing = 0 + turns = 1 say("Congratulations, you made it to Orion!") if(emagged) new /obj/item/weapon/orion_ship(src.loc) diff --git a/config/admins.txt b/config/admins.txt index 852f58e02b9..3b29d011131 100644 --- a/config/admins.txt +++ b/config/admins.txt @@ -92,3 +92,4 @@ Dunc = Game Master MMMiracles = Game Master bear1ake = Game Master CoreOverload = Game Master +Jalleo = Game Master \ No newline at end of file From a9e4429d574519cab63841516d01be82d560195c Mon Sep 17 00:00:00 2001 From: Orange Borg Date: Tue, 8 Sep 2015 11:30:15 +1200 Subject: [PATCH 32/35] Better error messages for start game verb --- code/modules/admin/admin.dm | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 2eb84777f6e..bc468f7fa35 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -512,9 +512,12 @@ var/global/floorIsLava = 0 message_admins("[usr.key] has started the game.") feedback_add_details("admin_verb","SN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return 1 + else if (ticker.current_state == GAME_STATE_STARTUP) + usr << "Error: Start Now: Game is in startup, please wait until it has finished." else usr << "Error: Start Now: Game has already started." - return 0 + + return 0 /datum/admins/proc/toggleenter() set category = "Server" @@ -820,4 +823,4 @@ var/global/floorIsLava = 0 string = pick( "Admin login: [key_name(src)]") if(string) - message_admins("[string]") \ No newline at end of file + message_admins("[string]") From 966ec11958172a7346b9dab0d8dd4e3597fb1b0e Mon Sep 17 00:00:00 2001 From: oranges Date: Tue, 8 Sep 2015 12:25:33 +1200 Subject: [PATCH 33/35] Adds game and attack logging to rags This adds a proc to help print reagent lists nicely --- code/modules/detectivework/footprints_and_rag.dm | 3 +++ code/modules/reagents/Chemistry-Reagents.dm | 7 +++++++ 2 files changed, 10 insertions(+) diff --git a/code/modules/detectivework/footprints_and_rag.dm b/code/modules/detectivework/footprints_and_rag.dm index 6e770a21eda..e1bbf424c46 100644 --- a/code/modules/detectivework/footprints_and_rag.dm +++ b/code/modules/detectivework/footprints_and_rag.dm @@ -28,6 +28,9 @@ reagents.reaction(C, INGEST) reagents.trans_to(C, reagents.total_volume) C.visible_message("[user] has smothered \the [C] with \the [src]!", "[user] has smothered you with \the [src]!", "You hear some struggling and muffled cries of surprise.") + var/reagentlist = pretty_string_from_reagent_list(A.reagents) + log_game("[key_name(user)] smothered [key_name(A)] with a damp rag containing [reagentlist]") + log_attack("[key_name(user)] smothered [key_name(A)] with a damp rag containing [reagentlist]") else reagents.reaction(C, TOUCH) reagents.clear_reagents() diff --git a/code/modules/reagents/Chemistry-Reagents.dm b/code/modules/reagents/Chemistry-Reagents.dm index 6800d140184..3dba0acb8ca 100644 --- a/code/modules/reagents/Chemistry-Reagents.dm +++ b/code/modules/reagents/Chemistry-Reagents.dm @@ -108,3 +108,10 @@ M << "You're not feeling good at all! You really need some [name]." return +/proc/pretty_string_from_reagent_list(var/list/reagent_list) + //Convert reagent list to a printable string for logging etc + var/result = "| " + for (var/datum/reagent/R in reagent_list) + result += "[R.name], [R.volume] | " + + return result From 83f144a236aeb9f798359224dadae42d96726a75 Mon Sep 17 00:00:00 2001 From: Kyle Spier-Swenson Date: Mon, 7 Sep 2015 21:49:36 -0700 Subject: [PATCH 34/35] Fixes tcoms crashing the server. --- code/__DATASTRUCTURES/stacks.dm | 14 +++----------- 1 file changed, 3 insertions(+), 11 deletions(-) diff --git a/code/__DATASTRUCTURES/stacks.dm b/code/__DATASTRUCTURES/stacks.dm index e5d846fbaae..b310a3b9401 100644 --- a/code/__DATASTRUCTURES/stacks.dm +++ b/code/__DATASTRUCTURES/stacks.dm @@ -1,11 +1,3 @@ - -//Both count as failures, and they don't equate to each other -//this lets us do if(Pop()) without having to specifically check for underflow -//same for if(Push()) and overflow -#define STACK_OVERFLOW -1 -#define STACK_UNDERFLOW -2 - - /datum/stack var/list/stack = list() var/max_elements = 0 @@ -19,18 +11,18 @@ /datum/stack/proc/Pop() if(is_empty()) - return STACK_UNDERFLOW + return null . = stack[stack.len] stack.Cut(stack.len,0) /datum/stack/proc/Push(element) if(max_elements && (stack.len+1 > max_elements)) - return STACK_OVERFLOW + return null stack += element /datum/stack/proc/Top() if(is_empty()) - return STACK_UNDERFLOW + return null . = stack[stack.len] /datum/stack/proc/is_empty() From 5adb732a6638dfe4f0be87b215b135584da1cd30 Mon Sep 17 00:00:00 2001 From: xxalpha Date: Tue, 8 Sep 2015 15:37:49 +0100 Subject: [PATCH 35/35] Changed asteroid plating singularity pull to do nothing. Changed singularity act on asteroid plating to do nothing.: --- code/modules/mining/mine_turfs.dm | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) diff --git a/code/modules/mining/mine_turfs.dm b/code/modules/mining/mine_turfs.dm index 91bff3cb8e5..1584f1d604d 100644 --- a/code/modules/mining/mine_turfs.dm +++ b/code/modules/mining/mine_turfs.dm @@ -602,16 +602,11 @@ var/global/list/rockTurfEdgeCache icon_state = "asteroid_dug" return +/turf/simulated/floor/plating/asteroid/singularity_act() + return + /turf/simulated/floor/plating/asteroid/singularity_pull(S, current_size) - if(current_size == STAGE_THREE) - if(prob(30)) - gets_dug() - else if(current_size == STAGE_FOUR) - if(prob(50)) - gets_dug() - else if(current_size >= STAGE_FIVE) - if(prob(90)) - gets_dug() + return /turf/proc/updateMineralOverlays() src.overlays.Cut()