diff --git a/GainStation13/code/mechanics/fatness.dm b/GainStation13/code/mechanics/fatness.dm index db33321a..df6750bb 100644 --- a/GainStation13/code/mechanics/fatness.dm +++ b/GainStation13/code/mechanics/fatness.dm @@ -17,34 +17,8 @@ return FALSE if(!HAS_TRAIT(src, TRAIT_UNIVERSAL_GAINER) && client?.prefs) - switch(type_of_fattening) - if(FATTENING_TYPE_ITEM) - if(!client.prefs.weight_gain_items) - return FALSE - - if(FATTENING_TYPE_FOOD) - if(!client.prefs.weight_gain_food) - return FALSE - - if(FATTENING_TYPE_CHEM) - if(!client.prefs.weight_gain_chems) - return FALSE - - if(FATTENING_TYPE_WEAPON) - if(!client.prefs.weight_gain_weapons) - return FALSE - - if(FATTENING_TYPE_MAGIC) - if(!client.prefs.weight_gain_magic) - return FALSE - - if(FATTENING_TYPE_VIRUS) - if(!client.prefs.weight_gain_viruses) - return FALSE - - if(FATTENING_TYPE_WEIGHT_LOSS) - if(HAS_TRAIT(src, TRAIT_WEIGHT_LOSS_IMMUNE)) - return FALSE + if(!check_weight_prefs(type_of_fattening)) + return FALSE var/amount_to_change = adjustment_amount if(adjustment_amount > 0) @@ -60,3 +34,42 @@ /mob/living/carbon/fully_heal(admin_revive) fatness = 0 . = ..() + +///Checks the parent mob's prefs to see if they can be fattened by the fattening_type +/mob/living/carbon/proc/check_weight_prefs(type_of_fattening = FATTENING_TYPE_ITEM) + if(HAS_TRAIT(src, TRAIT_UNIVERSAL_GAINER) && !client.prefs) //Comment this second part out + return TRUE + + if(!client?.prefs || !type_of_fattening) + return FALSE + + switch(type_of_fattening) + if(FATTENING_TYPE_ITEM) + if(!client.prefs.weight_gain_items) + return FALSE + + if(FATTENING_TYPE_FOOD) + if(!client.prefs.weight_gain_food) + return FALSE + + if(FATTENING_TYPE_CHEM) + if(!client.prefs.weight_gain_chems) + return FALSE + + if(FATTENING_TYPE_WEAPON) + if(!client.prefs.weight_gain_weapons) + return FALSE + + if(FATTENING_TYPE_MAGIC) + if(!client.prefs.weight_gain_magic) + return FALSE + + if(FATTENING_TYPE_VIRUS) + if(!client.prefs.weight_gain_viruses) + return FALSE + + if(FATTENING_TYPE_WEIGHT_LOSS) + if(HAS_TRAIT(src, TRAIT_WEIGHT_LOSS_IMMUNE)) + return FALSE + + return TRUE diff --git a/GainStation13/code/mechanics/spells.dm b/GainStation13/code/mechanics/spells.dm new file mode 100644 index 00000000..8a020396 --- /dev/null +++ b/GainStation13/code/mechanics/spells.dm @@ -0,0 +1,110 @@ +/obj/effect/proc_holder/spell/targeted/touch/add_weight + name = "Fattening" + desc = "Channel fattening energy to your hand to fatten people with." + drawmessage = "You channel fattening energy into your hand." + dropmessage = "You let the fattening energy from your hand dissipate." + hand_path = /obj/item/melee/touch_attack/fattening + action_icon_state = "spell_default" + charge_max = 200 + clothes_req = FALSE + +/obj/effect/proc_holder/spell/targeted/touch/add_weight/transfer + name = "Weight transfer" + hand_path = /obj/item/melee/touch_attack/fattening/transfer + charge_max = 100 + +/obj/effect/proc_holder/spell/targeted/touch/add_weight/steal + name = "Weight steal" + hand_path = /obj/item/melee/touch_attack/fattening/steal + charge_max = 100 + +/obj/item/melee/touch_attack/fattening + name = "\improper fattening touch" + desc = "The calories from multiple donuts compressed into pure energy." + catchphrase = null + on_use_sound = 'sound/weapons/pulse.ogg' + icon = 'GainStation13/icons/obj/spells/spell_items.dmi' + icon_state = "add-hand" + ///How much weight is added? + var/weight_to_add = 100 + ///What verb is used for the spell? + var/fattening_verb = "fattens" + ///Is weight being transfered from the user to another mob? + + +/obj/item/melee/touch_attack/fattening/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !iscarbon(target) || target == user) + return FALSE + + var/mob/living/carbon/gainer = target + if(!gainer || !weight_to_add) + return FALSE + + if(!gainer.adjust_fatness(weight_to_add, FATTENING_TYPE_MAGIC)) + to_chat(user,"") + return FALSE + + gainer.visible_message("[user] [fattening_verb] [target]!","[user] [fattening_verb] you!") + return ..() + +/obj/item/melee/touch_attack/fattening/transfer + name = "\improper weight transfer touch" + desc = "Your weight compressed into a fattening energy." + fattening_verb = "transfers weight to" + icon_state = "transfer-hand" + +/obj/item/melee/touch_attack/fattening/transfer/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity || !target || target == user) + return FALSE + + if(weight_to_add > user.fatness || !user.adjust_fatness(-weight_to_add, FATTENING_TYPE_MAGIC)) + to_chat(user, "") + return FALSE + + return ..() + +/obj/item/melee/touch_attack/fattening/steal + name = "\improper weight theft touch" + desc = "Energy that is eager to take weight." + fattening_verb = "steals weight from" + weight_to_add = -100 + icon_state = "steal-hand" + +/obj/item/melee/touch_attack/fattening/steal/afterattack(atom/target, mob/living/carbon/user, proximity) + var/mob/living/carbon/loser = target + if(!proximity || !iscarbon(target) || target == user) + return FALSE + + if(loser.fatness < -weight_to_add) + to_chat(user, "") + return FALSE + + . = ..() + if(. != null && !.) + return FALSE + + user.adjust_fatness(-weight_to_add, FATTENING_TYPE_MAGIC) + +///Spellbooks +/obj/item/book/granter/spell/fattening + name = "fattening tome" + spell = /obj/effect/proc_holder/spell/targeted/touch/add_weight + spellname = "fattening" + icon = 'GainStation13/icons/obj/spells/spellbooks.dmi' + icon_state = "add_weight" + desc = "This book feels warm to the touch." + page_time = 10 + +/obj/item/book/granter/spell/fattening/transfer + name = "weight transfer tome" + spell = /obj/effect/proc_holder/spell/targeted/touch/add_weight/transfer + spellname = "weight transfer" + icon_state = "transfer_weight" + desc = "This book feels warm to the touch." + +/obj/item/book/granter/spell/fattening/steal + name = "weight steal tome" + spell = /obj/effect/proc_holder/spell/targeted/touch/add_weight/steal + spellname = "weight steal" + icon_state = "steal_weight" + desc = "This book feels warm to the touch." diff --git a/GainStation13/icons/obj/spells/spell_items.dmi b/GainStation13/icons/obj/spells/spell_items.dmi new file mode 100644 index 00000000..b1aa6c3f Binary files /dev/null and b/GainStation13/icons/obj/spells/spell_items.dmi differ diff --git a/GainStation13/icons/obj/spells/spellbooks.dmi b/GainStation13/icons/obj/spells/spellbooks.dmi new file mode 100644 index 00000000..a76e5b72 Binary files /dev/null and b/GainStation13/icons/obj/spells/spellbooks.dmi differ diff --git a/tgstation.dme b/tgstation.dme index 38c673dd..8313283a 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -3318,6 +3318,7 @@ #include "code\modules\zombie\organs.dm" #include "GainStation13\code\clothing\calorite_collar.dm" #include "GainStation13\code\mechanics\fatness.dm" +#include "GainStation13\code\mechanics\spells.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"