From fd656e06ddccfb18ca8770508e13321333b3c579 Mon Sep 17 00:00:00 2001 From: Rykka Date: Wed, 13 May 2020 06:20:44 -0400 Subject: [PATCH 1/2] Tweaks to Photocopier, Adjust NanoUI, and allow Butt Photocopying! You can photocopy your ass! It will use 10 toner per (original) photo, and will use your base species! If you're a custom species and have icon set to Vulpkanin, for instance, it will use the vulp ass. Werewolves will use the vulp for now, pending a thicc'er sprite. Xenos + Xenohybrid will use THICC XENOS ASS sprites. Xenochimera will work the same as custom species, using the base species ass. The rest of the species not currently implemented (that is, those without sprites) will print a generic human butt. If you'd like custom sprites, sprite an ass, and put it in butts_vr.dmi Improvements to photocopiers will be pushed forward to Polaris. You can also tell precisely who's ass it is on the photo by clicking on it. ![https://i.imgur.com/UOPhfIt.gifv](https://i.imgur.com/UOPhfIt.gifv) I'd still like to add the option to recolor the sprite based on your body color, but for now, it's a black/white ass. Sorry! --- code/modules/paperwork/photocopier.dm | 176 ++++++++++++++++++++++---- nano/templates/photocopier.tmpl | 90 +++++++------ 2 files changed, 197 insertions(+), 69 deletions(-) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 71a110b4bd..472acfdc2e 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -11,10 +11,12 @@ active_power_usage = 200 power_channel = EQUIP circuit = /obj/item/weapon/circuitboard/photocopier + can_buckle = TRUE var/obj/item/copyitem = null //what's in the copier! var/copies = 1 //how many copies to print! var/toner = 30 //how much toner is left! woooooo~ var/maxcopies = 10 //how many copies can be copied at once- idea shamelessly stolen from bs12's copier! + var/copying = FALSE // Is the printer busy with something? Sanity check variable. /obj/machinery/photocopier/Initialize() . = ..() @@ -43,6 +45,7 @@ var/list/data = list() data["copyItem"] = copyitem + data["assPresent"] = has_buckled_mobs() data["toner"] = toner data["copies"] = copies data["maxCopies"] = maxcopies @@ -58,39 +61,64 @@ ui.open() ui.set_auto_update(10) +/obj/machinery/photocopier/proc/copy_operation(var/mob/user) + if(copying) + return FALSE + copying = TRUE + for(var/i = 0, i < copies, i++) + if(toner <= 0) + break + + if (istype(copyitem, /obj/item/weapon/paper)) + playsound(loc, "sound/machines/copier.ogg", 100, 1) + sleep(11) + copy(copyitem) + audible_message("You can hear [src] whirring as it finishes printing.") + playsound(loc, "sound/machines/buzzbeep.ogg", 30) + else if (istype(copyitem, /obj/item/weapon/photo)) + playsound(loc, "sound/machines/copier.ogg", 100, 1) + sleep(11) + photocopy(copyitem) + audible_message("You can hear [src] whirring as it finishes printing.") + playsound(loc, "sound/machines/buzzbeep.ogg", 30) + else if (istype(copyitem, /obj/item/weapon/paper_bundle)) + sleep(11) + playsound(loc, "sound/machines/copier.ogg", 100, 1) + var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) + sleep(11*B.pages.len) + audible_message("You can hear [src] whirring as it finishes printing.") + playsound(loc, "sound/machines/buzzbeep.ogg", 30) + else if (has_buckled_mobs()) // VOREStation EDIT: For ass-copying. + playsound(loc, "sound/machines/copier.ogg", 100, 1) + audible_message("You can hear [src] whirring as it attempts to scan.") + sleep(rand(20,45)) // Sit with your bare ass on the copier for a random time, feel like a fool, get stared at. + copyass(user) + sleep(15) + audible_message("You can hear [src] whirring as it finishes printing.") + playsound(loc, "sound/machines/buzzbeep.ogg", 30) + else + to_chat(user, "\The [copyitem] can't be copied by [src].") + playsound(loc, "sound/machines/buzz-two.ogg", 100) + break + + use_power(active_power_usage) + copying = FALSE + /obj/machinery/photocopier/Topic(href, href_list) if(href_list["copy"]) if(stat & (BROKEN|NOPOWER)) return + addtimer(CALLBACK(src, .proc/copy_operation, usr), 0) - for(var/i = 0, i < copies, i++) - if(toner <= 0) - break - - if (istype(copyitem, /obj/item/weapon/paper)) - playsound(loc, "sound/machines/copier.ogg", 100, 1) - sleep(11) - copy(copyitem) - else if (istype(copyitem, /obj/item/weapon/photo)) - playsound(loc, "sound/machines/copier.ogg", 100, 1) - sleep(11) - photocopy(copyitem) - else if (istype(copyitem, /obj/item/weapon/paper_bundle)) - sleep(11) - playsound(loc, "sound/machines/copier.ogg", 100, 1) - var/obj/item/weapon/paper_bundle/B = bundlecopy(copyitem) - sleep(11*B.pages.len) - else - to_chat(usr, "\The [copyitem] can't be copied by \the [src].") - break - - use_power(active_power_usage) else if(href_list["remove"]) if(copyitem) copyitem.loc = usr.loc usr.put_in_hands(copyitem) to_chat(usr, "You take \the [copyitem] out of \the [src].") copyitem = null + else if(has_buckled_mobs()) + to_chat(buckled_mobs[1], "You feel a slight pressure on your ass.") // It can't eject your asscheeks, but it'll try. + return TOPIC_REFRESH else if(href_list["min"]) if(copies > 1) copies-- @@ -145,7 +173,6 @@ playsound(loc, O.usesound, 50, 1) anchored = !anchored to_chat(user, "You [anchored ? "wrench" : "unwrench"] \the [src].") - else if(default_deconstruction_screwdriver(user, O)) return else if(default_deconstruction_crowbar(user, O)) @@ -205,6 +232,7 @@ if(need_toner) toner-- if(toner == 0) + playsound(loc, "sound/machines/buzz-sigh.ogg", 100) visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return c @@ -227,16 +255,103 @@ toner -= 5 //photos use a lot of ink! if(toner < 0) toner = 0 + playsound(loc, "sound/machines/buzz-sigh.ogg", 100) visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") return p +// VOREStation Edit Start + +/obj/machinery/photocopier/proc/copyass(mob/user) + var/icon/temp_img + if(!has_buckled_mobs()) // Are there no mobs buckled to the photocopier? + return + var/mob/sitter = buckled_mobs[1] // You have to be sitting on the copier/buckled to it and either be a xeno or a human without clothes on that cover your ass. + if(ishuman(sitter)) // Suit checks are in can_buckle_mobs at the bottom of the file. + var/mob/living/carbon/human/H = sitter // All human subtypes. + var/species_to_check = H.get_species() + if(species_to_check == SPECIES_CUSTOM || species_to_check == SPECIES_XENOCHIMERA) // Are we a custom species, or Xenochimera? If so, what is the base icon sprite for our species? + species_to_check = H.species.base_species // Grab the base species and use that as the 'species' for the purpose of printing off your asscheeks. + switch(species_to_check) + if(SPECIES_HUMAN) + temp_img = icon('icons/obj/butts_vr.dmi', "human") + if(SPECIES_TAJ) + temp_img = icon('icons/obj/butts_vr.dmi', "tajaran") + if(SPECIES_UNATHI) + temp_img = icon('icons/obj/butts_vr.dmi', "unathi") + if(SPECIES_SKRELL) + temp_img = icon('icons/obj/butts_vr.dmi', "skrell") + if(SPECIES_VOX) + temp_img = icon('icons/obj/butts_vr.dmi', "vox") + if(SPECIES_DIONA) + temp_img = icon('icons/obj/butts_vr.dmi', "diona") + if(SPECIES_PROMETHEAN) + temp_img = icon('icons/obj/butts_vr.dmi', "slime") + if(SPECIES_VULPKANIN) + temp_img = icon('icons/obj/butts_vr.dmi', "vulp") + if(SPECIES_PROTEAN) + temp_img = icon('icons/obj/butts_vr.dmi', "machine") + if(SPECIES_WEREBEAST) + temp_img = icon('icons/obj/butts_vr.dmi', "vulp") // Give Werewolves their own thicc'er than a boal of oatmeal ass sprite someday? + if(SPECIES_XENOHYBRID, SPECIES_XENO, SPECIES_XENO_DRONE, SPECIES_XENO_HUNTER, SPECIES_XENO_QUEEN, SPECIES_XENO_SENTINEL) // Xenos + Xenohybrids have their own asses, thanks to Pybro. + temp_img = icon('icons/obj/butts_vr.dmi', "xeno") + /* // Commented out because no icons exist, BUT if someone wants to sprite some more ASSCHEEKS, then just uncomment these and you have asses for each species. - Rykka. + if(SPECIES_TESHARI) + temp_img = icon('icons/obj/butts_vr.dmi', "tesh") + if(SPECIES_SHADEKIN || SPECIES_SHADEKIN_CREW) + temp_img = icon('icons/obj/butts_vr.dmi', "shadekin") + if(SPECIES_AKULA) + temp_img = icon('icons/obj/butts_vr.dmi', "akula") + if(SPECIES_ALRAUNE) + temp_img = icon('icons/obj/butts_vr.dmi', "alraune") + if(SPECIES_NEVREAN) + temp_img = icon('icons/obj/butts_vr.dmi', "nevrean") + if(SPECIES_RAPALA) + temp_img = icon('icons/obj/butts_vr.dmi', "rapala") + if(SPECIES_ZADDAT) + temp_img = icon('icons/obj/butts_vr.dmi', "zaddat") + if(SPECIES_ZORREN_HIGH) + temp_img = icon('icons/obj/butts_vr.dmi', "zorren") + if(SPECIES_FENNEC) + temp_img = icon('icons/obj/butts_vr.dmi', "fennec") + if(SPECIES_SERGAL) + temp_img = icon('icons/obj/butts_vr.dmi', "sergal") + */ + else // Sanity/Safety check - does their species not show up or not work, or did something fail, but they're DEFINITELY a /human/ subtype? Print the 'default' ass. + temp_img = icon('icons/obj/butts_vr.dmi', "human") + else if(istype(sitter,/mob/living/silicon/robot/drone)) // Are we a drone? + temp_img = icon('icons/obj/butts_vr.dmi', "drone") + else if(istype(sitter,/mob/living/carbon/alien/diona)) // Are we a nymph, instead of a full-grown Diona? + temp_img = icon('icons/obj/butts_vr.dmi', "nymph") + else + return + var/obj/item/weapon/photo/p = new /obj/item/weapon/photo (loc) + p.desc = "You see [sitter]'s ass on the photo." + p.pixel_x = rand(-10, 10) + p.pixel_y = rand(-10, 10) + p.img = temp_img + p.drop_sound = 'sound/items/drop/paper.ogg' + var/icon/small_img = icon(temp_img) // Icon() is needed or else temp_img will be rescaled too >.> + var/icon/ic = icon('icons/obj/items.dmi',"photo") + small_img.Scale(8, 8) + ic.Blend(small_img,ICON_OVERLAY, 10, 13) + p.icon = ic + toner -= 10 // PHOTOCOPYING YOUR ASS IS EXPENSIVE (And so you can't just spam it a bunch). + if(toner < 0) + toner = 0 + playsound(loc, "sound/machines/buzz-sigh.ogg", 100) + visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") + return p + +// VOREStation Edit Stop + //If need_toner is 0, the copies will still be lightened when low on toner, however it will not be prevented from printing. TODO: Implement print queues for fax machines and get rid of need_toner /obj/machinery/photocopier/proc/bundlecopy(var/obj/item/weapon/paper_bundle/bundle, var/need_toner=1) var/obj/item/weapon/paper_bundle/p = new /obj/item/weapon/paper_bundle (src) for(var/obj/item/weapon/W in bundle.pages) if(toner <= 0 && need_toner) toner = 0 + playsound(loc, "sound/machines/buzz-sigh.ogg", 100) visible_message("A red light on \the [src] flashes, indicating that it is out of toner.") break @@ -255,6 +370,21 @@ p.pixel_x = rand(-9, 9) return p +// VOREStation Edit Start - Rykka + +/obj/machinery/photocopier/can_buckle_check(mob/living/M, forced = FALSE) + if(!..()) + return FALSE + for(var/obj/item/clothing/C in M) + if(M.item_is_in_hands(C)) + continue + if((C.body_parts_covered & LOWER_TORSO) && !istype(C,/obj/item/clothing/under/permit)) + to_chat(usr, "One needs to not be wearing pants to photocopy one's ass...") + return FALSE + return TRUE + +// VOREStation Edit Stop - Rykka + /obj/item/device/toner name = "toner cartridge" icon_state = "tonercartridge" diff --git a/nano/templates/photocopier.tmpl b/nano/templates/photocopier.tmpl index 9c9910e969..81c238d94d 100644 --- a/nano/templates/photocopier.tmpl +++ b/nano/templates/photocopier.tmpl @@ -1,47 +1,45 @@ - - -{{if data.copyItem}} -
- {{:helper.link('Remove Item', 'eject', {'remove' : 1})}} - {{if data.toner}} - {{:helper.link('Copy', 'copy', {'copy' : 1})}}
-
-
-
- Printing: -
-
-
- {{:helper.link('-', null, {'min' : 1}, data.copies == 1 ? 'linkOff' : null)}} -
{{:data.copies}}
- {{:helper.link('+', null, {'add' : 1}, data.copies == data.maxCopies ? 'linkOff' : null)}} -
-
-
-
-
-
Current toner level:
-
{{:data.toner}}u
-
- {{else}} -
- Please insert a new toner cartridge! -
- {{/if}} -{{else data.toner}} -

Please insert something to copy.

- {{if data.isSilicon}} - {{:helper.link('Print photo from database', 'image', {'aipic' : 1})}} - {{/if}} -
-
Current toner level:
-
{{:data.toner}}u
-
-{{else}} -
- Please insert a new toner cartridge! -
+ + +{{if data.copyItem || data.assPresent}} +
+ {{:helper.link('Remove Item', 'eject', {'remove' : 1})}} + {{if data.toner}} + {{:helper.link('Copy', 'copy', {'copy' : 1})}} +
+
+ Printing: +
+
+
+ {{:helper.link('-', null, {'min' : 1}, data.copies == 1 ? 'linkOff' : null)}} +
{{:data.copies}}
+ {{:helper.link('+', null, {'add' : 1}, data.copies == data.maxCopies ? 'linkOff' : null)}} +
+
+
+
+
+
Current toner level:
+
{{:data.toner}}u
+
+ {{else}} + Please insert a new toner cartridge! + {{/if}} +
+{{else data.toner}} +

Please insert something to copy.

+ {{if data.isSilicon}} + {{:helper.link('Print photo from database', 'image', {'aipic' : 1})}} + {{/if}} +
+
Current toner level:
+
{{:data.toner}}u
+
+{{else}} +
+ Please insert a new toner cartridge! +
{{/if}} \ No newline at end of file From e29648e47cfb34d995a8d0a050a5f9d71a58509d Mon Sep 17 00:00:00 2001 From: Rykka Date: Wed, 13 May 2020 06:28:00 -0400 Subject: [PATCH 2/2] Add some placeholders so they can at least get furry/scaley butts. --- code/modules/paperwork/photocopier.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/paperwork/photocopier.dm b/code/modules/paperwork/photocopier.dm index 472acfdc2e..72200f1631 100644 --- a/code/modules/paperwork/photocopier.dm +++ b/code/modules/paperwork/photocopier.dm @@ -295,13 +295,17 @@ temp_img = icon('icons/obj/butts_vr.dmi', "vulp") // Give Werewolves their own thicc'er than a boal of oatmeal ass sprite someday? if(SPECIES_XENOHYBRID, SPECIES_XENO, SPECIES_XENO_DRONE, SPECIES_XENO_HUNTER, SPECIES_XENO_QUEEN, SPECIES_XENO_SENTINEL) // Xenos + Xenohybrids have their own asses, thanks to Pybro. temp_img = icon('icons/obj/butts_vr.dmi', "xeno") + if(SPECIES_ZORREN_HIGH) + temp_img = icon('icons/obj/butts_vr.dmi', "vulp") // placeholder until we get zorren butts. + if(SPECIES_FENNEC) + temp_img = icon('icons/obj/butts_vr.dmi', "vulp") // placeholder until we get fennec butts. + if(SPECIES_AKULA) + temp_img = icon('icons/obj/butts_vr.dmi', "xeno") // placeholder until we get proper sharkbutt. AKULA BE THICC ASS SHARKS MMMMMMMMMMMMMMKAY? /* // Commented out because no icons exist, BUT if someone wants to sprite some more ASSCHEEKS, then just uncomment these and you have asses for each species. - Rykka. if(SPECIES_TESHARI) temp_img = icon('icons/obj/butts_vr.dmi', "tesh") if(SPECIES_SHADEKIN || SPECIES_SHADEKIN_CREW) temp_img = icon('icons/obj/butts_vr.dmi', "shadekin") - if(SPECIES_AKULA) - temp_img = icon('icons/obj/butts_vr.dmi', "akula") if(SPECIES_ALRAUNE) temp_img = icon('icons/obj/butts_vr.dmi', "alraune") if(SPECIES_NEVREAN) @@ -310,10 +314,6 @@ temp_img = icon('icons/obj/butts_vr.dmi', "rapala") if(SPECIES_ZADDAT) temp_img = icon('icons/obj/butts_vr.dmi', "zaddat") - if(SPECIES_ZORREN_HIGH) - temp_img = icon('icons/obj/butts_vr.dmi', "zorren") - if(SPECIES_FENNEC) - temp_img = icon('icons/obj/butts_vr.dmi', "fennec") if(SPECIES_SERGAL) temp_img = icon('icons/obj/butts_vr.dmi', "sergal") */