diff --git a/GainStation13/code/mechanics/spells.dm b/GainStation13/code/mechanics/spells.dm index 8a020396..62e21dbc 100644 --- a/GainStation13/code/mechanics/spells.dm +++ b/GainStation13/code/mechanics/spells.dm @@ -26,7 +26,7 @@ icon = 'GainStation13/icons/obj/spells/spell_items.dmi' icon_state = "add-hand" ///How much weight is added? - var/weight_to_add = 100 + var/weight_to_add = 300 ///What verb is used for the spell? var/fattening_verb = "fattens" ///Is weight being transfered from the user to another mob? @@ -67,7 +67,7 @@ name = "\improper weight theft touch" desc = "Energy that is eager to take weight." fattening_verb = "steals weight from" - weight_to_add = -100 + weight_to_add = -300 icon_state = "steal-hand" /obj/item/melee/touch_attack/fattening/steal/afterattack(atom/target, mob/living/carbon/user, proximity) diff --git a/GainStation13/code/mechanics/wand.dm b/GainStation13/code/mechanics/wand.dm new file mode 100644 index 00000000..465959d6 --- /dev/null +++ b/GainStation13/code/mechanics/wand.dm @@ -0,0 +1,54 @@ +/obj/item/gun/magic/wand/food + name = "wand of gluttony" + desc = "summons delicious fattening foods" + max_charges = 15 + ammo_type = /obj/item/ammo_casing/magic/food + +/obj/item/gun/magic/wand/food/overpowered //This is a more overpowered version of the item + name = "strong wand of gluttony" + max_charges = 100 + ammo_type = /obj/item/ammo_casing/magic/food/strong + +/obj/item/ammo_casing/magic/food + projectile_type = /obj/item/projectile/magic/food + +/obj/item/ammo_casing/magic/food/strong + projectile_type = /obj/item/projectile/magic/food/strong + +/obj/item/projectile/magic/food + name = "bolt of food" + pass_flags = PASSGLASS|PASSDOOR|PASSGRILLE + ///What foods are able to be spawned by the wand? + var/list/spawnable_foods = list( + /obj/item/reagent_containers/food/snacks/burger/bigbite, + /obj/item/reagent_containers/food/snacks/donut/plain, + /obj/item/reagent_containers/food/snacks/donut/glaze, + /obj/item/reagent_containers/food/snacks/store/cake/cheese, + /obj/item/reagent_containers/food/snacks/store/cake/birthday, + /obj/item/reagent_containers/food/snacks/store/cake/chocolate, + /obj/item/reagent_containers/food/snacks/hotdog, + /obj/item/reagent_containers/food/snacks/pizza/margherita, + /obj/item/reagent_containers/food/snacks/pizza/meat, + ) + + ///How much Lipoifier should be added to the spawned in food? Keep this at 10 maximum. + var/lipoifier_to_add = 5 + +/obj/item/projectile/magic/food/on_hit(atom/target, blocked) + . = ..() + + var/turf/floor = get_turf(target) + if(!floor || iswallturf(floor)) + return FALSE + + var/food_to_spawn = pick(spawnable_foods) + var/obj/item/reagent_containers/food/snacks/spawned_food = new food_to_spawn(floor) + if(!spawned_food) + return FALSE + + spawned_food.reagents.add_reagent(/datum/reagent/consumable/lipoifier, lipoifier_to_add) + return TRUE + +/obj/item/projectile/magic/food/strong + name = "strong bolt of food" + lipoifier_to_add = 10 diff --git a/GainStation13/code/mechanics/web_weaving.dm b/GainStation13/code/mechanics/web_weaving.dm new file mode 100644 index 00000000..e6c6904a --- /dev/null +++ b/GainStation13/code/mechanics/web_weaving.dm @@ -0,0 +1,85 @@ +/datum/quirk/web_weaving + name = "Web Weaver" + desc = "for whatever reason, you are able to weave silk webs, albeit to a limited extent" + value = 0 //ERP quirk + gain_text = "You find yourself able to weave webs." + lose_text = "You are no longer able to weave webs." + category = CATEGORY_SEXUAL + ///What action is linked with this quirk? + var/datum/action/innate/wrap_target/linked_action + +/datum/quirk/web_weaving/post_add() + linked_action = new + linked_action.Grant(quirk_holder) + +/datum/quirk/web_weaving/remove() + linked_action.Remove(quirk_holder) + return ..() + +/datum/action/innate/wrap_target + name = "wrap" + desc = "encases a humanoid in a web cocoon." + icon_icon = 'GainStation13/icons/obj/clothing/web.dmi' + button_icon_state = "web_bindings" + background_icon_state = "bg_alien" + +/datum/action/innate/wrap_target/Activate() + var/mob/living/carbon/user = owner + if(!user || !ishuman(user)) + return FALSE + + var/mob/living/carbon/human/target = user.pulling + if(!target || !ishuman(target) || user.grab_state < GRAB_AGGRESSIVE) //Add a check for a bondage pref whenever that gets added in. + to_chat(user, "You need to aggressively grab a humanoid to use this.") + return FALSE + + if(target.wear_suit) + var/obj/item/clothing/suit = target.wear_suit + if(istype(suit, /obj/item/clothing/suit/straight_jacket/web)) + user.visible_message("[user] begins to fully encase [target] in a cocoon!", "You begin to fully encase [target] in a cocoon.") + if(!do_after_mob(user, target, 30 SECONDS)) + return FALSE + + var/obj/structure/spider/cocoon/quirk/spawned_cocoon = new(target.loc) + if(!target.forceMove(spawned_cocoon)) + qdel(spawned_cocoon) + return FALSE + + spawned_cocoon.icon_state = pick("cocoon_large1","cocoon_large2","cocoon_large3") + return TRUE + + user.visible_message("[user] attempts to remove [target]'s [target.wear_suit]!", "You attempt to remove [target]'s [target.wear_suit].") + if(!do_after_mob(user, target, 10 SECONDS) || !target.dropItemToGround(suit)) + return FALSE + + var/obj/item/clothing/suit/straight_jacket/web/wrapping = new + if(!wrapping) + return FALSE + + user.visible_message("[user] attempts to wrap [target] inside of [wrapping]!", "You attempt to wrap [target] inside of [wrapping].") + if(!do_after_mob(user, target, 20 SECONDS) || !target.equip_to_slot_if_possible(wrapping, SLOT_WEAR_SUIT, TRUE, TRUE)) + user.visible_message("[user] fails to wrap [target] inside of [wrapping]!", "You fail to wrap [target] inside of [wrapping].") + return FALSE + + user.visible_message("[user] successfully [target] inside of [wrapping]!", "You successfully wrap [target] inside of [wrapping].") + return TRUE + +/obj/item/clothing/suit/straight_jacket/web + name = "web bindings" + desc = "A mesh of sticky web that binds whoever is stuck inside of it" + icon = 'GainStation13/icons/obj/clothing/web.dmi' + alternate_worn_icon = 'GainStation13/icons/mob/web.dmi' + icon_state = "web_bindings" + item_state = "web_bindings" + breakouttime = 600 //1 minute is reasonable. + equip_delay_other = 0 + equip_delay_self = 0 + mutantrace_variation = NO_MUTANTRACE_VARIATION + +/obj/item/clothing/suit/straight_jacket/web/equipped(mob/user, slot) + . = ..() + if((user.get_item_by_slot(SLOT_WEAR_SUIT)) != src && !QDELETED(src)) + qdel(src) + +/obj/structure/spider/cocoon/quirk + max_integrity = 20 diff --git a/GainStation13/icons/mob/web.dmi b/GainStation13/icons/mob/web.dmi new file mode 100644 index 00000000..f5fbfed4 Binary files /dev/null and b/GainStation13/icons/mob/web.dmi differ diff --git a/GainStation13/icons/obj/clothing/web.dmi b/GainStation13/icons/obj/clothing/web.dmi new file mode 100644 index 00000000..a78a8321 Binary files /dev/null and b/GainStation13/icons/obj/clothing/web.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 6c2ab638..d2fab673 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3076,6 +3076,8 @@ #include "GainStation13\code\mechanics\fatness.dm" #include "GainStation13\code\mechanics\spells.dm" #include "GainStation13\code\mobs\cakegolem.dm" +#include "GainStation13\code\mechanics\wand.dm" +#include "GainStation13\code\mechanics\web_weaving.dm" #include "GainStation13\code\modules\client\preferences\preferences.dm" #include "GainStation13\code\modules\mob\living\emote.dm" #include "GainStation13\code\modules\reagents\chemistry\reagents\consumable_reagents.dm"