Merge pull request #9333 from Tenryumi/nikki-fluff

Adds Nikki's Fluff Outfit For Nikki, + Rigsuit-Mounted Size Guns For Research
This commit is contained in:
Novacat
2020-11-30 18:45:57 -05:00
committed by Chompstation Bot
parent 26d1977857
commit a9f77823d7
15 changed files with 318 additions and 12 deletions

View File

@@ -92,11 +92,11 @@
else
return ..()
/obj/item/device/perfect_tele/proc/unload_ammo(mob/user)
/obj/item/device/perfect_tele/proc/unload_ammo(mob/user, var/ignore_inactive_hand_check = 0)
if(battery_lock)
to_chat(user,"<span class='notice'>[src] does not have a battery port.</span>")
return
if(user.get_inactive_hand() == src && power_source)
if((user.get_inactive_hand() == src || ignore_inactive_hand_check) && power_source)
to_chat(user,"<span class='notice'>You eject \the [power_source] from \the [src].</span>")
user.put_in_hands(power_source)
power_source = null
@@ -111,7 +111,7 @@
return FALSE
return TRUE
/obj/item/device/perfect_tele/attack_self(mob/user)
/obj/item/device/perfect_tele/attack_self(mob/user, var/radial_menu_anchor = src)
if(loc_network)
for(var/obj/item/device/perfect_tele_beacon/stationary/nb in GLOB.premade_tele_beacons)
if(nb.tele_network == loc_network)
@@ -124,8 +124,7 @@
and tele-vore. Make sure you carefully examine someone's OOC prefs before teleporting them if you are \
going to use this device for ERP purposes. This device records all warnings given and teleport events for \
admin review in case of pref-breaking, so just don't do it.","OOC WARNING")
var/choice = show_radial_menu(user, src, radial_images, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
var/choice = show_radial_menu(user, radial_menu_anchor, radial_images, custom_check = CALLBACK(src, .proc/check_menu, user), require_near = TRUE, tooltips = TRUE)
if(!choice)
return
@@ -281,7 +280,7 @@
//Seems okay to me!
return TRUE
/obj/item/device/perfect_tele/afterattack(mob/living/target, mob/living/user, proximity)
/obj/item/device/perfect_tele/afterattack(mob/living/target, mob/living/user, proximity, var/ignore_fail_chance = 0)
//No, you can't teleport people from over there.
if(!proximity)
return
@@ -312,6 +311,7 @@
R.force_dismount(rider)
//Failure chance
if (!ignore_fail_chance)
if(prob(failure_chance) && beacons.len >= 2)
var/list/wrong_choices = beacons - destination.tele_name
var/wrong_name = pick(wrong_choices)

View File

@@ -739,6 +739,12 @@
character_name = list("Clara Mali")
cost = 1
/datum/gear/fluff/nikki_dorky_outfit
path = /obj/item/weapon/storage/box/fluff
display_name = "Nikki's Witchy Outfit"
ckeywhitelist = list("ryumi")
character_name = list("Nikki Yumeno")
// S CKEYS
/datum/gear/fluff/brynhild_medal
path = /obj/item/clothing/accessory/medal/silver/valor

View File

@@ -0,0 +1,12 @@
/obj/item/rig_module/mounted/sizegun
icon = 'icons/obj/rig_modules.dmi'
icon_state = "sizegun"
name = "mounted size gun"
desc = "A size gun to be mounted on a rig suit. Features interface-based target size adjustment for hands-free size-altering shenanigans."
engage_string = "Select Size"
interface_name = "mounted sizegun"
interface_desc = "A wrist-mounted, hardsuit cell-powered, size gun. Features interface-based target size adjustment for hands-free size-altering shenanigans."
gun_type = /obj/item/weapon/gun/energy/sizegun/mounted

View File

@@ -5,3 +5,11 @@
req_tech = list(TECH_MATERIAL = 5, TECH_ENGINEERING = 5, TECH_MAGNET = 5, TECH_BIO = 4)
materials = list(MAT_PLASTEEL = 3000, MAT_GRAPHITE = 2000, MAT_PLASTIC = 3500, MAT_SILVER = 1750, MAT_GOLD = 1250)
build_path = /obj/item/rig_module/rescue_pharm
/datum/design/item/mechfab/rigsuit/mounted_sizegun
name = "hardsuit mounted size gun"
desc = "A suit mounted size gun. Features interface-based target size adjustment for hands-free size-altering shenanigans."
id = "rig_gun_sizegun"
req_tech = list(TECH_COMBAT = 3, TECH_MATERIAL = 3, TECH_POWER = 2)
materials = list(DEFAULT_WALL_MATERIAL = 3000, MAT_GLASS = 2000, MAT_URANIUM = 2000)
build_path = /obj/item/rig_module/mounted/sizegun

View File

@@ -217,6 +217,16 @@
/obj/item/weapon/melee/fluffstuff/wolfgirlsword,
/obj/item/weapon/shield/fluff/wolfgirlshield)
// Ryumi: Nikki Yumeno
/obj/item/weapon/storage/box/fluff
name = "Nikki's Outfit Box"
desc = "Warning: Contains dangerous amounts of dork."
has_items = list(
/obj/item/weapon/rig/nikki,
/obj/item/clothing/head/fluff/nikki,
/obj/item/clothing/under/skirt/outfit/fluff/nikki,
/obj/item/clothing/shoes/fluff/nikki)
/*
Swimsuits, for general use, to avoid arriving to work with your swimsuit.
*/

View File

@@ -2008,3 +2008,221 @@ Departamental Swimsuits, for general use
/obj/item/clothing/head/that/fluff/gettler
name = "Charles' Top-Hat"
desc = "A special hat, removed from its owner."
//Ryumi: Nikki Yumeno
/obj/item/clothing/under/skirt/outfit/fluff/nikki
name = "dorky outfit"
desc = "A little witch costume that looks like it's been worn as ordinary clothes. Who in their right mind would...??"
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_onmob_vr.dmi'
icon_state = "nikki_outfit"
item_state = "nikki_outfit"
item_icons = list()
sensor_mode = 3 // I'm a dumbass and forget these all the time please understand :(
/obj/item/clothing/under/skirt/outfit/fluff/nikki/mob_can_equip(var/mob/living/carbon/human/M, slot, disable_warning = 0)
if(..())
if (M.ckey == "ryumi")
return 1
else if (M.get_active_hand() == src)
to_chat(M, "<span class='warning'>What the heck? \The [src] doesn't fit!</span>")
return 0
/obj/item/clothing/shoes/fluff/nikki
name = "non-magical boots"
desc = "Boots optimally built for a dork. They don't sparkle or anything, but you can imagine them doing that when you click the heels together."
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_onmob_vr.dmi'
icon_state = "nikki_boots"
item_state = "nikki_boots"
/obj/item/clothing/shoes/fluff/nikki/mob_can_equip(var/mob/living/carbon/human/M, slot, disable_warning = 0)
if(..())
if (M.ckey == "ryumi")
return 1
else if (M.get_active_hand() == src)
to_chat(M, "<span class='warning'>What the heck? \The [src] doesn't fit!</span>")
return 0
/obj/item/clothing/suit/fluff/nikki //see /obj/item/weapon/rig/nikki
name = "cape"
desc = "Snazzy!"
flags = null
armor = list(melee = 0, bullet = 0, laser = 0, energy = 0, bomb = 0, bio = 0, rad = 0) // It's not armor, it's a dorky frickin cape
body_parts_covered = null // Cape ain't gonna cover a THING
cold_protection = UPPER_TORSO|LOWER_TORSO|ARMS // It will keep you toasty tho, it's more than big enough to help with that! Just wrap the thing around you when on the surface, idk
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_onmob_vr.dmi'
icon_state = "nikki"
/obj/item/clothing/head/fluff/nikki
// I have never tryharded so much just to accomplish something so stupid as "Vore By Hat" in my entire life, and I apologize to each and every one of you.
name = "oversized witch hat"
desc = "A dork-shaped hat. Its long, pointed tip reaches far more than most hats had ought to, its wide brim complementing \
this with its tendency to droop at the ends under its own weight."
description_fluff = "Despite what Nikki Yumeno may believe, her hat is not in fact a magical artifact of teleportation magicks. \
It is however the result of clever utilization of bluespace technology combined with style. Like a classic magician's trick, \
the power of this hat lies in the hidden compartment hidden on the inside, into which a personal translocation device can be \
snapped inside. Once installed, bluespace electronics inside the hat sync with the translocator and utilize its teleportation \
technology to create a localized bluespace portal within the hole of the hat. This tiny portal will warp anything or anyone \
who makes physical contact with it to whatever beacon the translocator within is locked onto."
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_state = "nikki-hat"
item_state = "nikki-hat"
item_icons = list(
slot_l_hand_str = 'icons/vore/custom_clothes_left_hand_vr.dmi',
slot_r_hand_str = 'icons/vore/custom_clothes_right_hand_vr.dmi',
slot_head_str = 'icons/vore/custom_onmob_32x48_vr.dmi'
)
flags_inv = HIDEEARS
w_class = ITEMSIZE_LARGE // THIS HAT IS FUCKIN HUGE YO
var/owner = "ryumi"
var/obj/item/device/perfect_tele/translocator = null // The translocator installed inside, if there is one. Gotta go out and get it first!
/obj/item/clothing/head/fluff/nikki/verb/verb_translocator_unequip()
set category = "Object"
set name = "Nikki's Hat - Unequip Translocator"
set src in usr
translocator_unequip(translocator, usr)
/obj/item/clothing/head/fluff/nikki/proc/translocator_equip(var/obj/item/device/perfect_tele/T, var/mob/living/carbon/human/user)
if (do_after(user, 2 SECONDS, T))
user.unEquip(T)
translocator_unequip(translocator, user)
T.forceMove(src)
translocator = T
user.show_message("[bicon(src)]*click!*")
playsound(src, 'sound/machines/click.ogg', 30, 1)
/obj/item/clothing/head/fluff/nikki/proc/translocator_unequip(var/obj/item/device/perfect_tele/T, var/mob/living/carbon/human/user)
if (translocator)
if (user)
user.put_in_hands(T)
user.show_message("[bicon(src)]*click!*")
else
translocator.forceMove(get_turf(src))
translocator = null
playsound(src, 'sound/machines/click.ogg', 30, 1)
/obj/item/clothing/head/fluff/nikki/proc/teleport_fail(mob/user, mob/target)
if (target != user)
user.visible_message("<span class='notice'>[user] harmlessly bops [target] with \the [src].</span>", \
"<span class='notice'>\The [src] harmlessly bops [target]. The hat seems... unwilling?</span>")
else
user.visible_message("<span class='notice'>\The [src] flops over [user]'s' head for a moment, but they seem alright.</span>", \
"<span class='notice'>\The [src] flops over your head for a moment, but you correct it without issue. There we go!</span>")
/obj/item/clothing/head/fluff/nikki/proc/hat_warp_checks(var/mob/living/target, mob/user, proximity_flag)
if (!proximity_flag)
return 0
if (!translocator)
to_chat(user, "<span class='warning'>\The [src] doesn't have a translocator inside it yet, you goof!</span>")
return 0
if (target.ckey == owner && target != user) // ur not getting me that easy sonny jim......
to_chat(user, "<span class='warning'>You think to turn \the [src] on its creator?! <b>FOOOOOOOOL.</b></span>")
to_chat(user, "<span class='notice'>From seemingly nowhere you hear echoing, derisive laughter, accompanied by a stock laugh track and... Are those bike horns?</span>")
return 0
if (!istype(target))
to_chat(user, "<span class='warning'>\The [src] isn't a valid target!</span>")
return 0
// Because other mobs (i.e. monkeys) apparently have dropnom prey set to 0, we check SPECIFICALLY for humans' dropnom setting.
if (target.type == /mob/living/carbon/human && !target.can_be_drop_prey)
teleport_fail(user, target)
return 0
if (!translocator.teleport_checks(target, user))
return 0
else return 1
/obj/item/clothing/head/fluff/nikki/attackby(obj/item/weapon/I as obj, mob/user as mob)
if (istype(I, /obj/item/device/perfect_tele) && user.get_inactive_hand() == src)
if (translocator)
visible_message("<span class='notice'>[user] starts to pull \a [translocator] out of \the [src] to swap it out with \the [I]...</span>", \
"<span class='notice'>You start pulling \the [translocator] pops out of its compartment with a soft 'click' as you replace it with \the [I]....</span>")
else
visible_message("<span class='notice'>[user] begins slipping \the [I] into \the [src]...</span>", \
"<span class='notice'>You begin to snap \the [I] into a small, hidden compartment inside \the [src]...</span>")
// This works for both adding and replacing a translocator
translocator_equip(I, user)
return
else if (translocator)
translocator.attackby(I, user)
return
..()
/obj/item/clothing/head/fluff/nikki/get_description_interaction()
. = ..()
if (translocator)
. += "It has \a [translocator] inside of it. Alt-click while holding it on your inactive hand to remove it."
. += "Otherwise, this hat functions exactly as the translocator it has inside while still being a sweet head accessory."
else
. += "A translocator can be placed inside of it! While holding the hat in your inactive hand, use a translocator on it to slip it inside."
. += "After doing this, it will function as both a head accessory and teleportation device."
/obj/item/clothing/head/fluff/nikki/attack_hand(mob/user)
if (translocator && (user.get_inactive_hand() == src))
translocator.unload_ammo(user, ignore_inactive_hand_check = 1)
return
..()
/obj/item/clothing/head/fluff/nikki/AltClick(mob/user)
if (translocator && (user.get_inactive_hand() == src))
translocator_unequip(translocator, user)
/obj/item/clothing/head/fluff/nikki/attack_self(mob/user)
..()
if (translocator)
translocator.attack_self(user, user)
return
else
to_chat(user, "<span_class='warning'>\The [src] doesn't have a translocator inside it right now.</span>")
return
/obj/item/clothing/head/fluff/nikki/examine(mob/user) // If it has a translocator installed, make it very obvious to viewers that something WEIRD is going on with this hat.
. = ..()
if (translocator)
. += "Weird... <span class='danger'>You can't see the bottom of the hole inside the hat...</span>"
/obj/item/clothing/head/fluff/nikki/equipped(mob/living/carbon/human/user, slot)
. = ..()
if (slot == slot_head && translocator && user.ckey != owner) // This way we don't unnecessarily spam the chat with hat/translocator errors
// hey, are we actually able to teleport this poor person?
if (hat_warp_checks(user, user, proximity_flag = 1))
// YOU FOOL! YOU HAVE ACTIVATED MY STAND, 「VORE BY HAT」!
src.visible_message("<span class='danger'>\The [src] falls over [user]'s head... and somehow falls over the rest of their body, causing them to vanish inside. Where did they go?!</span>", \
"<span class='danger'>The hat falls over your head as you put it on, enveloping you in a bright green light! <b>Uh oh.</b></span>")
var/uh_oh = pick(translocator.beacons)
user.remove_from_mob(src, get_turf(user))
translocator.destination = translocator.beacons[uh_oh]
translocator.afterattack(user, user, proximity = 1, ignore_fail_chance = 1)
add_attack_logs(user, user, "Tried to put on \the [src] and was involuntarily teleported by it (via \the [translocator] within)!")
return
/obj/item/clothing/head/fluff/nikki/afterattack(var/mob/living/target, mob/user, proximity_flag, click_parameters)
// If the hat is willing to cooperate with the holder...
if (hat_warp_checks(target, user, proximity_flag))
// Silly fluffed up styles of teleporting people based on user intent.
switch (user.a_intent)
if (I_HELP)
user.visible_message("<span class='notice'>[user] guides \the [target] to the bottomless hole within \the [src]. They begin to climb inside...</span>")
if (do_after(user, 5 SECONDS, target))
translocator.afterattack(target, user, proximity_flag)
if (I_DISARM)
user.visible_message("<span class='danger'>[user] plops \the [src] onto \the [target]'s head!</span>")
translocator.afterattack(target, user, proximity_flag)
if (I_GRAB)
user.visible_message("<span class='danger'>[user] begins stuffing [target] into \the [src]!</span>")
if (do_after(user, 5 SECONDS, target))
translocator.afterattack(target, user, proximity_flag)
if (I_HURT)
user.visible_message("<span class='danger'>[user] swipes \the [src] over \the [target]!</span>")
translocator.afterattack(target, user, proximity_flag)
add_attack_logs(user, target, "Teleported [target] with via \the [src]'s [translocator]!")
else ..()

View File

@@ -1250,6 +1250,52 @@
else
return 1
//Ryumi - Nikki Yumeno
/obj/item/weapon/rig/nikki
name = "weird necklace"
desc = "A necklace with a brilliantly blue crystal encased in protective glass."
icon = 'icons/vore/custom_clothes_vr.dmi'
icon_override = 'icons/vore/custom_onmob_vr.dmi'
suit_type = "probably not magical"
icon_state = "nikki"
w_class = ITEMSIZE_SMALL // It is after all only a necklace
armor = list("melee" = 0, "bullet" = 0, "laser" = 0, "energy" = 0, "bomb" = 0, "bio" = 0, "rad" = 0) // this isn't armor, it's a dorky frickin cape
siemens_coefficient = 0.9
slowdown = 0
offline_slowdown = 0
offline_vision_restriction = 0
siemens_coefficient = 0.9
chest_type = /obj/item/clothing/suit/fluff/nikki
req_access = list()
req_one_access = list()
helm_type = null
glove_type = null
boot_type = null
allowed = list(
/obj/item/device/flashlight,
/obj/item/weapon/tank,
/obj/item/device/suit_cooling_unit,
/obj/item/weapon/storage,
)
/obj/item/weapon/rig/nikki/attackby(obj/item/W, mob/living/user)
//This thing accepts ONLY mounted sizeguns. That's IT. Nothing else!
if(open && istype(W,/obj/item/rig_module) && !istype(W,/obj/item/rig_module/mounted/sizegun))
to_chat(user, "<span class='danger'>\The [src] only accepts mounted size gun modules.</span>")
return
..()
/obj/item/weapon/rig/nikki/mob_can_equip(var/mob/living/carbon/human/M, slot, disable_warning = 0) // Feel free to (try to) put Nikki's hat on! The necklace though is a flat-out no-go.
if(..())
if (M.ckey == "ryumi")
return 1
else if (M.get_active_hand() == src)
to_chat(M, "<span class='warning'>For some reason, the necklace seems to never quite get past your head when you try to put it on... Weird, it looked like it would fit.</span>")
return 0
//Nickcrazy - Damon Bones Xrim
/obj/item/clothing/suit/storage/toggle/bomber/bombersec
name = "Security Bomber Jacket"

View File

@@ -82,3 +82,8 @@
/obj/item/projectile/beam/sizelaser/grow
set_size = 2.0 //200% of current size
/obj/item/weapon/gun/energy/sizegun/mounted
name = "mounted size gun"
self_recharge = 1
use_external_power = 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 455 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 409 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 413 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 215 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 542 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -2024,6 +2024,7 @@
#include "code\modules\clothing\spacesuits\rig\modules\specific\jetpack.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\metalfoam_launcher.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\mounted_gun_vr.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\pat_module_vr.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\powersink.dm"
#include "code\modules\clothing\spacesuits\rig\modules\specific\rescue_pharm_vr.dm"