diff --git a/code/datums/components/pact_weapon.dm b/code/datums/components/pact_weapon.dm index ab2c3dd56..859e58cfe 100644 --- a/code/datums/components/pact_weapon.dm +++ b/code/datums/components/pact_weapon.dm @@ -20,12 +20,10 @@ weapon = parent weapon.name += " of the [patronchoice]" weapon.desc += " It is enchanted to use arcane skill rather than its regular skill. Right click with an empty hand to change this weapon's form." - weapon.force *= 1.2 weapon.max_blade_int *= 1.2 weapon.blade_int = weapon.max_blade_int weapon.max_integrity *= 1.2 weapon.obj_integrity = weapon.max_integrity - weapon.minstr = 1 weapon.associated_skill = /datum/skill/magic/arcane //var/mutable_appearance/magic_overlay = mutable_appearance('icons/effects/effects.dmi', "electricity") //item.add_overlay(magic_overlay) diff --git a/code/game/objects/items/rogueweapons/melee/flail.dm b/code/game/objects/items/rogueweapons/melee/flail.dm index 49df40332..ef5f61567 100644 --- a/code/game/objects/items/rogueweapons/melee/flail.dm +++ b/code/game/objects/items/rogueweapons/melee/flail.dm @@ -93,40 +93,43 @@ /datum/intent/whip/lash - name = "lash" - blade_class = BCLASS_BLUNT - attack_verb = list("lashes", "cracks") - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - chargetime = 5 - recovery = 7 - penfactor = 10 - reach = 2 - icon_state = "inlash" - item_d_type = "slash" + name = "lash" + blade_class = BCLASS_BLUNT + attack_verb = list("lashes", "cracks") + hitsound = list('sound/combat/hits/blunt/flailhit.ogg') + chargetime = 5 + recovery = 7 + penfactor = 10 + damfactor = 1.1 + reach = 1 + icon_state = "inlash" + item_d_type = "blunt" /datum/intent/whip/crack - name = "crack" - blade_class = BCLASS_CUT - attack_verb = list("cracks", "strikes") //something something dwarf fotresss - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - chargetime = 0 - recovery = 10 - penfactor = 40 - reach = 1 - icon_state = "incrack" - item_d_type = "slash" + name = "crack" + blade_class = BCLASS_CUT + attack_verb = list("cracks", "strikes") //something something dwarf fotresss + hitsound = list('sound/combat/hits/blunt/flailhit.ogg') + chargetime = 0 + recovery = 10 + penfactor = 40 + reach = 2 + icon_state = "incrack" + item_d_type = "slash" /datum/intent/whip/punish - name = "punish" - blade_class = BCLASS_BLUNT - attack_verb = list("lashes") - hitsound = list('sound/combat/hits/blunt/flailhit.ogg') - chargetime = 0 - recovery = 10 - penfactor = 0 - reach = 2 - icon_state = "inpunish" - item_d_type = "blunt" + name = "punish" + blade_class = BCLASS_CUT + attack_verb = list("lashes") + hitsound = list('sound/combat/hits/blunt/flailhit.ogg') + chargetime = 5 + swingdelay = 6 + recovery = 10 + penfactor = 0 + damfactor = 0.9 + reach = 3 + icon_state = "inpunish" + item_d_type = "slash" /obj/item/rogueweapon/whip force = 21 diff --git a/code/modules/client/customizer/customizers/organ/snout.dm b/code/modules/client/customizer/customizers/organ/snout.dm index 52c79d1d0..512b547bb 100644 --- a/code/modules/client/customizer/customizers/organ/snout.dm +++ b/code/modules/client/customizer/customizers/organ/snout.dm @@ -200,6 +200,8 @@ /datum/sprite_accessory/snout/front/sharplight, /datum/sprite_accessory/snout/front/roundlight, /datum/sprite_accessory/snout/shortnosed, + /datum/sprite_accessory/snout/front/cownose, + /datum/sprite_accessory/snout/cownose, ) /datum/customizer/organ/snout/akula diff --git a/code/modules/clothing/rogueclothes/shirts.dm b/code/modules/clothing/rogueclothes/shirts.dm index 96de8811a..b592cd22f 100644 --- a/code/modules/clothing/rogueclothes/shirts.dm +++ b/code/modules/clothing/rogueclothes/shirts.dm @@ -32,6 +32,7 @@ allowed_sex = list(MALE, FEMALE) allowed_race = NON_DWARVEN_RACE_TYPES body_parts_covered = CHEST|GROIN|ARMS|VITALS + flags_inv = HIDECROTCH /obj/item/clothing/suit/roguetown/shirt/undershirt/black color = CLOTHING_BLACK diff --git a/code/modules/mob/dead/new_player/sprite_accessory/snouts.dm b/code/modules/mob/dead/new_player/sprite_accessory/snouts.dm index fe1f2edce..9a06e0320 100644 --- a/code/modules/mob/dead/new_player/sprite_accessory/snouts.dm +++ b/code/modules/mob/dead/new_player/sprite_accessory/snouts.dm @@ -458,3 +458,7 @@ /datum/sprite_accessory/snout/cownose name = "Cow Nose" icon_state = "cownose" + +/datum/sprite_accessory/snout/front/cownose + name = "Cow Nose(Top)" + icon_state = "cownose" diff --git a/code/modules/spells/roguetown/warlock.dm b/code/modules/spells/roguetown/warlock.dm index bfa8a2fdc..3a8089f3b 100644 --- a/code/modules/spells/roguetown/warlock.dm +++ b/code/modules/spells/roguetown/warlock.dm @@ -183,30 +183,27 @@ invocation = "" invocation_type = "shout" //can be none, whisper, emote and shout - var/mob/living/fam /obj/effect/proc_holder/spell/self/findfamiliar/cast(mob/user = usr) ..() - var/familiars = list( - /mob/living/carbon/human/species/goblin/hell, //imp - /mob/living/simple_animal/hostile/retaliate/rogue/mossback, //psuedodragon - /mob/living/carbon/human/species/skeleton, //quasit(skeleton?) - /mob/living/simple_animal/shade //sprite - ) + "Imp" = /mob/living/carbon/human/species/goblin/hell, + "Crab" = /mob/living/simple_animal/hostile/retaliate/rogue/mossback, + "Skeleton" = /mob/living/carbon/human/species/skeleton, + "Sprite" = /mob/living/simple_animal/shade, + "Wolf" = /mob/living/simple_animal/hostile/retaliate/rogue/wolf, + "Mutated Spider" = /mob/living/simple_animal/hostile/retaliate/rogue/spider/mutated, + "Buck" = /mob/living/simple_animal/hostile/retaliate/rogue/saigabuck + ) var/familiarchoice = input("Choose your familiar", "Available familiars") as anything in familiars - + var/familiar_type = familiars[familiarchoice] to_chat(user, span_notice("Trying to find familiar...")) - var/list/L = pollCandidatesForMob( - Question = "Do you want to play as [span_notice("[span_danger("[user.real_name]'s")] familiar")]?", - jobbanType = ROLE_PAI, - poll_time = 20 SECONDS, - ignore_category = POLL_IGNORE_SENTIENCE_POTION, - ) - if(L.len > 0) + var/list/L = pollGhostCandidates("Do you want to play as [span_notice("[span_danger("[user.real_name]'s")] familiar")]?", ROLE_PAI) + + if(LAZYLEN(L)) var/mob/chosen_one = pick(L) - fam = new familiarchoice(user.loc) + fam = new familiar_type(user.loc) fam.key = chosen_one.key to_chat(user, span_notice("Your familiar appears...")) chosen_one.mind.transfer_to(fam) diff --git a/icons/mob/actions/roguespells.dmi b/icons/mob/actions/roguespells.dmi index c981fe73a..1b3c84d5e 100644 Binary files a/icons/mob/actions/roguespells.dmi and b/icons/mob/actions/roguespells.dmi differ diff --git a/icons/mob/sprite_accessory/snouts/snouts.dmi b/icons/mob/sprite_accessory/snouts/snouts.dmi index e7c7ed339..eadb8ee7c 100644 Binary files a/icons/mob/sprite_accessory/snouts/snouts.dmi and b/icons/mob/sprite_accessory/snouts/snouts.dmi differ diff --git a/modular_causticcove/code/modules/spells/wizard.dm b/modular_causticcove/code/modules/spells/wizard.dm new file mode 100644 index 000000000..5b1286092 --- /dev/null +++ b/modular_causticcove/code/modules/spells/wizard.dm @@ -0,0 +1,149 @@ +/obj/effect/proc_holder/spell/targeted/touch/sizespell + name = "Reduce/Grow Person" + desc = "A basic trick many apprentices would use to prank their master." + clothes_req = FALSE + drawmessage = "I prepare to perform a arcyne incantation." + dropmessage = "I release my arcyne focus." + school = "transmutation" + overlay_state = "size-change" + castdrain = 50 + chargetime = 10 + charge_max = 2 MINUTES + cost = 2 + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane + hand_path = /obj/item/melee/touch_attack/sizespell + +/obj/item/melee/touch_attack/sizespell + name = "\improper magic touch" + desc = "You recall the following incantations you've learned:\n \ + Reduce: Will Shrink whoever you touch.\n \ + Grow: Will grow whoever you touch, you may also touch yourself. (huehue, get it?)" + catchphrase = null + possible_item_intents = list(INTENT_HELP, INTENT_DISARM) + icon = 'icons/mob/roguehudgrabs.dmi' + icon_state = "pulling" + icon_state = "grabbing_greyscale" + color = "#ff0000" // this produces green because the icon base is yellow but someone else can fix that if they want + + +/obj/item/melee/touch_attack/sizespell/attack_self() + qdel(src) + +/obj/item/melee/touch_attack/sizespell/afterattack(atom/target, mob/living/carbon/user, proximity) + if(!proximity) + return + + switch (user.used_intent.type) + if(INTENT_HELP) //Reduce + shrink_target(target, user) + if(INTENT_DISARM) //Grow + grow_target(target, user) + +/obj/item/melee/touch_attack/sizespell/proc/shrink_target(mob/living/target, mob/living/carbon/human/user) + if(!isliving(target)) + return + + if(user == target) + user.visible_message(span_notice("[user] rapidly changes in size!"), span_notice("I rapidly shrink down!")) + else + user.visible_message(span_notice("[user] touch [target], and they changes in size!"), span_notice("I touch [target] and they shrink in size!")) + target.apply_status_effect(/datum/status_effect/buff/shrinked) + qdel(src) + + +/obj/item/melee/touch_attack/sizespell/proc/grow_target(mob/living/target, mob/living/carbon/human/user) + if(!isliving(target)) + return + + if(user == target) + user.visible_message(span_notice("[user] rapidly changes in size!"), span_notice("I rapidly grow up!")) + else + user.visible_message(span_notice("[user] touch [target], and they changes in size!"), span_notice("I touch [target] and they grow in size!")) + target.apply_status_effect(/datum/status_effect/buff/growth) + qdel(src) + +/datum/status_effect/buff/shrinked + id = "shrink" + alert_type = /atom/movable/screen/alert/status_effect/buff/shrinked + effectedstats = list("speed" = 3, "strength" = -6, "fortune" = -3) + var/removable = FALSE + +/datum/status_effect/buff/shrinked/on_apply() + . = ..() + var/mob/living/target = owner + target.transform = target.transform.Scale(0.5, 0.5) + target.update_transform() + target.pass_flags = PASSTABLE | PASSMOB + spawn(300) //is that how it work? i remember there being a better wait timer but i forgor + if(owner && istype(owner, /mob/living)) + to_chat(owner, span_userdanger("You feel like you might be able to return to your size by pressing on the status effect!")) + removable = TRUE + +/datum/status_effect/buff/shrinked/on_remove() + var/mob/living/target = owner + target.transform = target.transform.Scale(2, 2) + target.update_transform() + target.pass_flags = 0 + . = ..() + +/atom/movable/screen/alert/status_effect/buff/shrinked + name = "Shrinked" + desc = "I've been shrinked! (After 30 seconds, you can press this button to return to your original size.)" + icon_state = "debuff" + /datum/status_effect/buff/shrinked + +/atom/movable/screen/alert/status_effect/buff/shrinked/Click() + . = ..() + var/mob/living/L = usr + if(!istype(L)) // how though + return + var/datum/status_effect/buff/shrinked/effect = L.has_status_effect(/datum/status_effect/buff/shrinked) + if(!effect.removable) + to_chat(L, span_userdanger("I can't turn back yet!")) + return + L.remove_status_effect(/datum/status_effect/buff/shrinked) + + +/datum/status_effect/buff/growth + id = "growth" + alert_type = /atom/movable/screen/alert/status_effect/buff/growth + effectedstats = list("speed" = -6, "strength" = 3) + var/removable = FALSE + +/datum/status_effect/buff/growth/on_apply() + . = ..() + var/mob/living/target = owner + target.transform = target.transform.Scale(2, 2) + target.transform = target.transform.Translate(0, (1 * 16)) + target.update_transform() + target.add_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, update=TRUE, priority=100, multiplicative_slowdown=4, movetypes=GROUND) + spawn(300) //is that how it work? i remember there being a better wait timer but i forgor, so i'm using this one + if(owner && istype(owner, /mob/living)) + to_chat(owner, span_userdanger("You feel like you might be able to return to your size now by pressing on the status effect!")) + removable = TRUE + +/datum/status_effect/buff/growth/on_remove() + var/mob/living/target = owner + target.transform = target.transform.Scale(0.5, 0.5) + target.transform = target.transform.Translate(0, -(1 * 16)) + target.update_transform() + target.remove_movespeed_modifier(MOVESPEED_ID_ADMIN_VAREDIT, TRUE) + . = ..() + +/atom/movable/screen/alert/status_effect/buff/growth + name = "Growth" + desc = "I've became bigger! (After 30 seconds, you can press this button to return to your original size.)" + icon_state = "debuff" + /datum/status_effect/buff/growth + +/atom/movable/screen/alert/status_effect/buff/growth/Click() + . = ..() + var/mob/living/L = usr + if(!istype(L)) // how though + return + var/datum/status_effect/buff/growth/effect = L.has_status_effect(/datum/status_effect/buff/growth) + if(!effect.removable) + to_chat(L, span_userdanger("I can't turn back yet!")) + return + L.remove_status_effect(/datum/status_effect/buff/growth) diff --git a/modular_hearthstone/code/modules/spells/roguetown/wizard.dm b/modular_hearthstone/code/modules/spells/roguetown/wizard.dm index 63e9849c4..848b35349 100644 --- a/modular_hearthstone/code/modules/spells/roguetown/wizard.dm +++ b/modular_hearthstone/code/modules/spells/roguetown/wizard.dm @@ -226,7 +226,8 @@ /obj/effect/proc_holder/spell/invoked/magicstone5e, /obj/effect/proc_holder/spell/invoked/mending5e, /obj/effect/proc_holder/spell/self/primalsavagery5e, - /obj/effect/proc_holder/spell/invoked/projectile/rayoffrost5e + /obj/effect/proc_holder/spell/invoked/projectile/rayoffrost5e, + /obj/effect/proc_holder/spell/targeted/touch/sizespell ) for(var/i = 1, i <= spell_choices.len, i++) choices["[spell_choices[i].name]: [spell_choices[i].cost]"] = spell_choices[i] diff --git a/roguetown.dme b/roguetown.dme index 99a9f3bc4..9b36d94b9 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -3631,6 +3631,7 @@ #include "modular_causticcove\code\modules\roguetown\roguecrafting\alchemy.dm" #include "modular_causticcove\code\modules\roguetown\roguejobs\alchemist\containers.dm" #include "modular_causticcove\code\modules\roguetown\roguejobs\alchemist\reagent.dm" +#include "modular_causticcove\code\modules\spells\wizard.dm" #include "modular_causticcove\code\modules\spells\pantheon\Divine\noc.dm" #include "modular_causticcove\code\modules\vore\persistence.dm" #include "modular_causticcove\code\modules\vore\SSbellies.dm"