From 1f96b3351fd911dd7c8c932f2ac2350643b5ad08 Mon Sep 17 00:00:00 2001 From: UniquaSa <111698205+UniquaSa@users.noreply.github.com> Date: Sun, 1 Dec 2024 04:19:33 +0100 Subject: [PATCH] Reduce/Grow Spell, Whip Rebalance, Summon Fix, etc (#83) * add sizespell, nerf pact weapon, add cownose * hahahokay * Update wizard.dm * fix.. * Update wizard.dm * fix giant from wizard --- code/datums/components/pact_weapon.dm | 2 - .../objects/items/rogueweapons/melee/flail.dm | 63 ++++---- .../customizer/customizers/organ/snout.dm | 2 + code/modules/clothing/rogueclothes/shirts.dm | 1 + .../new_player/sprite_accessory/snouts.dm | 4 + code/modules/spells/roguetown/warlock.dm | 29 ++-- icons/mob/actions/roguespells.dmi | Bin 56908 -> 57036 bytes icons/mob/sprite_accessory/snouts/snouts.dmi | Bin 19014 -> 19005 bytes .../code/modules/spells/wizard.dm | 149 ++++++++++++++++++ .../code/modules/spells/roguetown/wizard.dm | 3 +- roguetown.dme | 1 + 11 files changed, 205 insertions(+), 49 deletions(-) create mode 100644 modular_causticcove/code/modules/spells/wizard.dm 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 c981fe73abac49e1e1bc8224b6a07f4deadb4bc1..1b3c84d5e5fb466ad925061c6ae85cda273de9ed 100644 GIT binary patch delta 7405 zcmWky2Q(aA7~N&{-a_;sN)SY%gk{NU5iNhBMeikgSu940=$#NmPe_!F8YS3-=rxF5 zBf99Uviy@dXXebDH)r1W-o4-b?l=8k3Hw_JlXw9FNWe2gZ=|i4wWp)Ix1*aY1mc$y zpRVOPD^3|PAz31x;uFia<13{SW_6>7iSluwsPB<=(pbaBMzeYef|;nXCUl5?ftM>t zF$jGY9GsnNKGY>#t?M@Gcz%Ai*H;|{v2;rpzZ|THV2t~fAetWP+ynNb7A|2lFbv%P$z?% zk9Rf3(sO>I4@&fIW{Dh)Qt8vG%#aY%r%~K^!Cog!Ms%k*L7v&^V?k7l{kdy16UFw4 z-unyw9*MsmpBGcrK0I3fDZ88#va?UsV$Oa||4fZiI0ozF{DYrra`nw19coDIr8VPw zBp@s#c)YqtM?Yx!*_!E^Wn9~Zf2Gyd;lv*;)|UgnFp!KRf9O|7h-L9l8jSG~UL;-S z;jobGM zC_q<;i(-BIts+{Z{QZ-DB#KwVX_@zVQPGs={g2{l}s-Yxc;tabYI4n%$g@3Xsz-*Z!6O5%F3u>nJO(|&DxFt($w&WfW4^|KG0QB>hcy!Z zo|`_l$sY1AQH+MiJYdA68$iG2TqnwkpLyQ*zDkj+$LaD_gOWr!qeD#c zoO^Js07gmdfWdCaj~IP=9slE!XN4V6yeSK~H;&X~DCP6LC!LA68_QOMD16}ic%+ZQ z-y8fQ*CLZ^Sl{f+D4nC%Fbm#HPLDJAFj#!=*~EC)=x8Zj2xGpFZQV))JX*z0-a=+S z&(O`^BGBr~&_o9Ez{RNNX9kvQ1C zr1#JgsVg0=+_9it$z)sI^S>~WvkM~#wkZ4$KV{6>yPLo(5=!Ib_xFSKI91Y6n^GZ1}U+7hNFS{3z|Az@Y9Fu4ES1r20rReerBrf$yR#G#L^l!m+0 zgJbPMAdqlxHSS5+i|eH?&p!=F-#3o!keeEg>eAwMZ~gXVP6Ix*VDA5Xgth|()sB*? z+B&n}v&$pH?tKkpYuH1C!IWJQZe#_=Mr<- z=k#pozRc8ccclRRdCDt_F$JBgV7h`#3M2OJ%I4$+2171H!$>!MFf%(fNS%?p9R~ro zHs?^`_h6)|^4GB?`?LLT`|Eb8b^l9}4Gigei4HOZ?oYpL>bPcfies1hzVqPM==sBl z6;2@5$E#|@Ub&Wxp-?MRPCPd#y2IJUxhrx(AL>3heYkpst`VCq{J?cJRXc6Z35g%n z%gx<`62{M_QRH(1n*_zd5Q)bnM&Y5AFvdB7oR<2yC|i$~=1$IFI7HbVL!rxYLi%(s z{FK56Y4?i~<3;#VI?JQIAP6}qcK4o0ACSra_Tfn`_m`~1otF6OG`>KoVAi{1=|cC; z113+2MNiNVq2cUZci**FX|5&Fvc;cy{ggOa&W>@l0@NMLn0L zgKJmO8^g<@6Y`Kj54=AeEuF&_hE+l6a&m7gC*o<*!0Y68RY5ykbR$5Ti-QpGC|Zse z%n=(Wcd=U`pV!}CPRoT_b<0q`6crRAbhS6HF&4Vnw|gJ zXZ^iyXKn40feH6>LqahcVqUmKdBC6!b6CB_jd^GT3Oit$)djP3dPxa!_z zJrvSpi-#|zeov%&Yb06B(&eM-4hruN<5$nNcH>@i=f09Jy%iZ%`sU@RwF`EzmMhJf zAcoY>XVLm#6I=V(J)eO4FGGG;7I0lL{`(lhI-n(A6&a>JHfYFU z=yq}X3bGD`!$U0SLP&@Lnev;7Ai61^%T8g#GgpMX5cs+hjmgL;$#6KQJa(Nfg!5<- zsyh4}8Zb-<=^jkc4AkhUr6ZvvZj_vFN+=iLWS_C196gNl)hDLZHW=YA(yikOP zhvhJEIYK&zfBDYkIy@b$W;mnAi+({X+<_C+lpxqbM=vkNcpuMr`ni{48 z3xIKxeq)F=J0wkW51=*JX~bEF&dSLN>oi#aR6yqW4T$8O9VV6$X*#d|q3Xksl*OZm z;OM!U6(3KA8#tw0yGfZ>IeBcALIh^YsqXYaFpXcLv@-I4#?gCN-d*4sRHm*C&bZ;EX$FRB6|h^6Qn0C&;5 zgYEb+cdSm1yA3%Vy;|ovV*PQX{OsjJNdAC+fy`a{uc*xEXowik@^PWNU--28P!Y~T zq1vwX6YZzv@Us~ETg|PLeS^KJgN%uGMZie1=}Q}X<{gNt7)#g)OBe?cLdlWnvt0pS z40a=hKSyY=V=}Ii8Tw$^{JfMMs7trs9bm`en-m{@OVyl_>wiUfF)v-(xaw5o%Kd!= zd?u~Q!8tWO{hqMk>u08yIf&*h7l;}fqUZ^QmnBOCz5PBaQ@cwG`Ml;*^Zc`QXkq?X zx%+-k1#k+VVq>B5*LqDC#2{B`z#MwJNj_dmq<@Yd-snnKkH13**{cCM%zx{L%iGuL z)Hc}FqvU-otG!?1GT!m9nh`AqFL0S6_mzyQ#PowAGv4%K+~inIO}tp&s!Y6a+v9;i zQlE}xU@JdXsQJusoLtoxjZ|bh`~bs(%BcC#$2@iR?_wH!KP>g~N_pR?C0JSvL!soF zMTO3`c{-4A=X+FZGz-vTLE0*m)E@4!QQ0?@#sQD5EcazN^Wx|K-92u1x%$zzv`yq% znlt0MXhlvUgbUzVH>Jv>`dYPG&uAAvBG;!7zj<>s zqX0zdH9vKGo>X6z2pKfA8{kyFdE0OE4kB80gdcPgo}@noICnR)e%# znEPNiVS7vO^Oz?&$i<(#`flr=N6bB1j&lgZc`!v4KcEm6Mt=^3SOo1^cy*C|a`uPW z|MorFPXz_F5TW}m)VKUdYKme)IjWg;9Wm~WI^cRu8#|e7FTf>PZ>gy`z&+xVxrPw7&H;NWma^nkKB0Yf&z{{zigo7Gbt=a^DLM)}PlFU9Z?LnIV3Z}N~L zo6bWl~hcYX@&1^YQc- z(OPmwZ%>WmhPF=_pVS#A;lX*eg&WsI@>k z5j68&R6DPxk6S&BA$m}ET>7zMm%BicFLS~()f8Q5z!#DY+V8P~xT_z%ns+Ctv{=I? zZV+DYH(sI~Yo6zieVTn(iOM81k~9a>skhM!m<0{jtaye{*e^y{w`|yLcYTtSxFYwa z71GY72OEEUZgIe2@3zkEwS!*c=d6i`thy+4a%?fYanaDkOQ*Ht1K2YG!u^ZX(Ow?o z69JO^$-JDl#9#Q4=IP*H{RZzz4+T{{>7fdZKe`&pdFp4q=^*BhAk`EyM5+LvV(5_0 zaJTj?f(SwoBo#9Yl#O}LI#YCfJu7A?1r%z%yB($)y94iQbe%*ak8`%K7JTpX1Y3xi zIB#Io$$!dLd{;ld9KEe2V_Rqa*-;iEuq3?0gahUF>qV|tTZd!?dcS9PnXzNHd_)oL zn>!{DAfx&BwzhG|r{8i(fQ%#bT#FrsI3aKn9{Qe=7KfUDvcDl)8@K1glmCEZ@i~vm zgt19XCIVdD1Jf48CR|{^6p77uIQ-CYHJD*4D)5pt8;mkpmQ2kT0M0czTz_ObmEHa^B0ETbW%2AmAA6Oe^>Tg@)jV1&%4^ zuD&#&Y$ZhiaVl`&Ry&S6P#3IwQ==OmJm@bfO~;g-00Q^qah2d5`ZQF-jsr5gg21Jo zTwiaWM2_a=J;t;w5A76Ffc1=wky^KiHgUULUPyX?`26R8uxk4?jp)=H`Bw+b4mAe1 z?Dj-{Eo=Tu{rIadtak-Hq2Gv~(^yzse*;)1fzO+{zj+*Dt(x>*c8*5&bu5N;Yz+o7 zUggMLgoqH-ZiLEqbgSzu2*F4@u3Xf3`;OXb?{hs$ef?P`Q`LqZir_SjzQknzW+5Y8 zVe+fdtRHu}VlHd7UJW6vE{jNX_v8+?uIKU*IQbKEg3M1Zv>JWu4Ct(6 zc#%Bb<4H}0&)qiaMblk{sCxG90bVtaZ^4M(+sV^sg;e3~tY5ZG`SIO{t`);pK1}U( zCZj&vxO`ZsA4jaLk>SB4XF2%JQk&bb>IsiVinp(+a-&><{EJlQYIBmkbm)JWNDJpL zWtAC~Nfyf>fk!l6>)2PARq0fKJZoo=Tdl9P5;qdHL5@xX_l*Rf9sV zeB_YK28cTuGY%*&ZVQ60^d@R1e&3+y9Zc`VLm+!?L3V^m(dLdAEX~eB(R%mYNB`ti zVLU2Ls7L)Rfk^LcQIFjy(88~RUxtsjG1KK-F^FjN{PQvm)li@YsUox2xjr+PHXq>c@~2uXr0>=-uD+XyY~PTfW7Hu0Z_)&d`v5p8%X)I zd4My#P%8b~s&jGj#|(@N!Ga_RFJc0f-ZUGN){5W+)ze@GlBKPk3&w(w+d?;!+gINI zvt4K4Mh(|BX`oP>IcP}9Ais74Mj+j;3XP{@dtMtwo|OKUlv@{o`K6p>7@Z|I&>1_9%_^bS{{oc;WtOb7#bkhg4VzYy= zMy!l&qy8R%x9AB}mfx-EX_(XtBCvM5&y1||DP)`}n(6nEK6Mi9GQYYsfZT&Flbl$6 z9|jF&>7;k!pD%H7?9tUnfYpaw)UIa5ACX42^hoooyi1+4*~6iG7kT&<*4CJ|J|r?{ z@ppw>awVp+Iow%v@WvuI%lraP$FORdse@+wM{X#6^54}vxbSx*Qa1-R$R?Z4#SMl0l2mwYA6J`eV2ie-s?cKH=`+I<{h4Arv&}t#d)X2JNKl>RJ+yQ7 z?5R$}k)CYt)y`ag!iB%!Yic*J?BuQpu(6tUf2cQa)W6A`_o61m8P^;K&gmjtb$ILoAUjCgorG&=eeJQ1jf_$Siwq{`({< zW(IuxDp7ybfF?Jr8FrdFr2=DV+XA)>+D79Mrn#_UjuOo*cPD%xnL0M>GX7sVePVQ` zc6qRL_Hz*5OgU9^So|sBr`d8b5rX8588D73oLwj!Fncfbch^-A79w?nn>kO_+QWH; zOuSL+oDP(CuP8mRyU5)>JguFpYkopO9MTwt0vdlATsXnFCs6b0^s8A6r85cKoy{u& z456Sr!v}l4z7Qm3hQM-);Q3Ez56&Pc#q8#f{XCXGu3jl6Pte&%TS|f2URqh^bHbA5 zzbi3pOqA~jY;Cq1R!cF=&Z z-}F=d=%Q6_3wTSI>=Emn2#saZx>zl2JP6ufnXp>OcJ7xRrNu?d9KGAkVo0@aebRH= zN_P^0CuMX^TD<%-1f;X2HNY%^rNM9rc7ViPp;;!~U@IzcW+ZB}Nv>Z3PBDirs!*jP z&~2x6)7)AS$k30YUUp!0R=5)>~ncMDy?cyP^0K1}9 z-#P27yipkFiY9~osDFWEgWj9^A*R*o9abV`ZeD5N0wZ6=k9-^#FnFo)VIp8sfRUNG z+61!jgix>qc4$-7$&M0jx@!22G@Eai0TU_p^E3-k*<9quNgkPyF@7hd)cE|?Y^W#n z#jgp$)k}trkK59=ww&`a2h?Upbdk56CGow`oa$)_P_zqqNvKrRs9ERd+xoB>^j#&a z5-ywGb2G7op%|Wg-*;W_LUGUi#^?hfUljeLF7Q40fh$y95UPk*=Z0r&OZ;k}evaF> zXH8Rt*nl96d(AmBwznG^CJccKq+s;db}7kAsb*j;%6JN9lFo^ zK*#%lR$UNuRNrKUltzp5!)JSyUpDK8Ej$kA4a}tBCiM65s^i3!_e3zD& zmD@vucGM+Y_zpuYG5Rf>55v^dX#W>~)A;Ni)WK*9D{>f~$C#%6K{p6`kNJID7T zuNyD-!@4PCOn<%-5LG-^>7k{?8oNRMHxw+@&HA%7?W;@($!Maf!~!nY zF>BS1$U(4vvMflv(A_>^%X6~H4Qu1cf6b78FEz;kS6W znvYb@^}by1Z(A!^n+^fy92c^;HZ`AW3X{!>QUuS8l#&XU@~v0iDX4?0m$M{^RzEsr zS|HS3`dxPW$RCaj(WfF_VTb7K?SE7S+a_hOs`;7?F@*}Ah&}WaU$4QZ=Jloq_E6zw z$<&cgv$fPZw)(-QVW#yY1;REjqO`F&}k{n)?s%k=q0l+8qre`jM=cdZiUStS4 zouHR5N6L&?%EH7(XQ+kVDyP(U!p#m8`J*sbUxC-~xPP-|nF!-8H(&fygBJ!|e>2Ot z(Y$WE6D7B0b#YlNN6zTI3rD~kSfY6AKVk6lV5CW%lm>+-kniZoYbb9l843uvaenhD z7mb(Pc^ROjL$e5StGq+a2>tk6&ok);J(>4WNi~<-BTC`0h@&g47<4_<*MSLg<+Ut9 z54ofAR3%LQHAs)}hK@|dY;V7dn;mQWM@H}rZ2>y&z2o3sx^<;15-6NtIARzrsZ|#* ze>7j(kvcFq&+v@_Nyj~$1%)=o{?czVhz1gk6(dN&h+MOdJ6q;GvTxi@ps4o delta 7276 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 delta 2871 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 X&7wKYe~CB2pvT_E8U5z$AGiMlz<5Z5 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"