From d13f4fe7b89546c674a625baaf5916ea1bd2a2eb Mon Sep 17 00:00:00 2001 From: AllanR Date: Fri, 30 Aug 2024 16:00:24 -0300 Subject: [PATCH 01/38] Create arcane.dm --- code/modules/spells/roguetown/arcane.dm | 96 +++++++++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 code/modules/spells/roguetown/arcane.dm diff --git a/code/modules/spells/roguetown/arcane.dm b/code/modules/spells/roguetown/arcane.dm new file mode 100644 index 00000000..1c668896 --- /dev/null +++ b/code/modules/spells/roguetown/arcane.dm @@ -0,0 +1,96 @@ +//Might as well need this if we have arcane and divine versions of the same spell + +/obj/effect/proc_holder/spell/arcane + name = "invoked spell" + range = -1 + selection_type = "range" + no_early_release = TRUE + charge_max = 30 + charge_type = "recharge" + invocation_type = "shout" + var/active_sound + clothes_req = FALSE + warnie = "spellwarning" + no_early_release = TRUE + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane + charging_slowdown = 1 + +/obj/effect/proc_holder/spell/arcane/Click() + var/mob/living/user = usr + if(!istype(user)) + return + if(!can_cast(user)) + start_recharge() + deactivate(user) + return + if(active) + deactivate(user) + else + if(active_sound) + user.playsound_local(user,active_sound,100,vary = FALSE) + active = TRUE + add_ranged_ability(user, null, TRUE) + on_activation(user) + update_icon() + start_recharge() + +/obj/effect/proc_holder/spell/arcane/deactivate(mob/living/user) + ..() + active = FALSE + remove_ranged_ability(null) + on_deactivation(user) + +/obj/effect/proc_holder/spell/arcane/proc/on_activation(mob/user) + return + +/obj/effect/proc_holder/spell/arcane/proc/on_deactivation(mob/user) + return + +/obj/effect/proc_holder/spell/arcane/InterceptClickOn(mob/living/caller, params, atom/target) + . = ..() + if(.) + return FALSE + if(!can_cast(caller) || !cast_check(FALSE, ranged_ability_user)) + return FALSE + if(perform(list(target), TRUE, user = ranged_ability_user)) + return TRUE + +/obj/effect/proc_holder/spell/arcane/projectile + var/projectile_type = /obj/projectile/magic/teleport + var/list/projectile_var_overrides = list() + var/projectile_amount = 1 //Projectiles per cast. + var/current_amount = 0 //How many projectiles left. + var/projectiles_per_fire = 1 //Projectiles per fire. Probably not a good thing to use unless you override ready_projectile(). + +/obj/effect/proc_holder/spell/arcane/projectile/proc/ready_projectile(obj/projectile/P, atom/target, mob/user, iteration) + return + +/obj/effect/proc_holder/spell/arcane/projectile/cast(list/targets, mob/living/user) + . = ..() + var/target = targets[1] + var/turf/T = user.loc + var/turf/U = get_step(user, user.dir) // Get the tile infront of the move, based on their direction + if(!isturf(U) || !isturf(T)) + return FALSE + fire_projectile(user, target) + user.newtonian_move(get_dir(U, T)) + update_icon() + start_recharge() + return TRUE + +/obj/effect/proc_holder/spell/arcane/projectile/proc/fire_projectile(mob/living/user, atom/target) + current_amount-- + for(var/i in 1 to projectiles_per_fire) + var/obj/projectile/P = new projectile_type(user.loc) + if(istype(P, /obj/projectile/magic/bloodsteal)) + var/obj/projectile/magic/bloodsteal/B = P + B.sender = user + P.firer = user + P.preparePixelProjectile(target, user) + for(var/V in projectile_var_overrides) + if(P.vars[V]) + P.vv_edit_var(V, projectile_var_overrides[V]) + ready_projectile(P, target, user, i) + P.fire() + return TRUE From 0937829ea503dfc4d44e6f5042378667dfaf6a76 Mon Sep 17 00:00:00 2001 From: AllanR Date: Fri, 30 Aug 2024 16:01:36 -0300 Subject: [PATCH 02/38] Create arcane_spells.dm --- .../modules/spells/roguetown/arcane_spells.dm | 255 ++++++++++++++++++ 1 file changed, 255 insertions(+) create mode 100644 code/modules/spells/roguetown/arcane_spells.dm diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm new file mode 100644 index 00000000..ef8dfe5d --- /dev/null +++ b/code/modules/spells/roguetown/arcane_spells.dm @@ -0,0 +1,255 @@ +//SMOKESCREEN----------------- + +/obj/effect/proc_holder/spell/arcane/smokescreen + name = "Smoke" + desc = "" + overlay_state = "smoke" + sound = 'sound/items/firesnuff.ogg' + range = 8 + releasedrain = 15 + chargedrain = 0 + chargetime = 0 + smoke_spread = 1 + smoke_amt = 2 + +/obj/effect/proc_holder/spell/arcane/smokescreen/cast(list/targets,mob/user = usr) + . = ..() + if(isopenturf(targets[1])) + return TRUE + return FALSE + +//SWAP PLACES----------------- + +/obj/effect/proc_holder/spell/arcane/swap + name = "Location Swap" + desc = "" + overlay_state = "swap" + sound = 'sound/magic/magic_nulled.ogg' + range = 8 + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + charge_max = 15 SECONDS + var/include_space = FALSE //whether it includes space tiles in possible teleport locations + var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations + +/obj/effect/temp_visual/swap + icon_state = "anom" + layer = ABOVE_MOB_LAYER + plane = GAME_PLANE_UPPER + +/obj/effect/proc_holder/spell/invoked/swap/arcane/cast(list/targets, mob/living/user) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + new /obj/effect/temp_visual/swap(get_turf(user)) + new /obj/effect/temp_visual/swap(get_turf(target)) + var/atom/targl = get_turf(target) + if(do_teleport(target, user, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)) + do_teleport(user, targl, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) + if(ismob(target)) + var/mob/M = target + to_chat(M, span_warning("You find myself somewhere else...")) + return TRUE + +// BLINDNESS-------------- + +/obj/effect/proc_holder/spell/arcane/blindness + name = "Blindness" + desc = "" + overlay_state = "blindness" + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + range = 7 + movement_interrupt = FALSE + sound = 'sound/magic/churn.ogg' + antimagic_allowed = TRUE + +/obj/effect/proc_holder/spell/arcane/blindness/cast(list/targets, mob/user = usr) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + target.visible_message(span_warning("[user] points at [target]'s eyes!"),span_warning("My eyes are covered in darkness!")) + target.blind_eyes(2) + return TRUE + +// INVISIBILITY-------------- + +/obj/effect/proc_holder/spell/arcane/invisibility + name = "Invisibility" + desc = "" + overlay_state = "invisibility" + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + charge_max = 30 SECONDS + range = 3 + movement_interrupt = FALSE + sound = 'sound/misc/area.ogg' //This sound doesnt play for some reason. Fix me. + antimagic_allowed = TRUE + +/obj/effect/proc_holder/spell/arcane/invisibility/cast(list/targets, mob/living/user) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + target.visible_message(span_warning("[target] starts to fade into thin air!"), span_notice("You start to become invisible!")) + animate(target, alpha = 0, time = 1 SECONDS, easing = EASE_IN) + target.mob_timers[MT_INVISIBILITY] = world.time + 15 SECONDS + addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, update_sneak_invis), TRUE), 15 SECONDS) + addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, visible_message), span_warning("[target] fades back into view."), span_notice("You become visible again.")), 15 SECONDS) + return FALSE + +//LIGHTNING--------------- + +/obj/effect/proc_holder/spell/arcane/projectile/lightningbolt + name = "Bolt of Lightning" + desc = "" + overlay_state = "lightning" + sound = 'sound/magic/lightning.ogg' + range = 8 + projectile_type = /obj/projectile/magic/lightning + releasedrain = 30 + chargedrain = 1 + chargetime = 15 + charge_max = 20 SECONDS + movement_interrupt = FALSE + charging_slowdown = 3 + +/obj/projectile/magic/lightning + name = "bolt of lightning" + tracer_type = /obj/effect/projectile/tracer/stun + muzzle_type = null + impact_type = null + hitscan = TRUE + movement_type = UNSTOPPABLE + light_color = LIGHT_COLOR_WHITE + damage = 15 + damage_type = BURN + nodamage = FALSE + speed = 0.3 + flag = "magic" + light_color = "#ffffff" + light_range = 7 + +/obj/projectile/magic/lightning/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[src] fizzles on contact with [target]!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK + if(isliving(target)) + var/mob/living/L = target + L.electrocute_act(1, src) + qdel(src) + +//FIREBALL------------------------- + +/obj/effect/proc_holder/spell/arcane/projectile/fireball + name = "Fireball" + desc = "" + clothes_req = FALSE + range = 8 + projectile_type = /obj/projectile/magic/aoe/fireball/rogue + overlay_state = "fireball" + sound = list('sound/magic/fireball.ogg') + active = FALSE + releasedrain = 30 + chargedrain = 1 + chargetime = 15 + charge_max = 10 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + movement_interrupt = FALSE + charging_slowdown = 3 + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane + +/obj/effect/proc_holder/spell/arcane/projectile/fireball/fire_projectile(list/targets, mob/living/user) + projectile_var_overrides = list("range" = 8) + return ..() + +/obj/projectile/magic/aoe/fireball/rogue + name = "fireball" + exp_heavy = 0 + exp_light = 0 + exp_flash = 0 + exp_fire = 1 + damage = 10 + damage_type = BURN + nodamage = FALSE + flag = "magic" + hitsound = 'sound/blank.ogg' + + +/obj/projectile/magic/aoe/fireball/rogue/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[src] fizzles on contact with [target]!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK + + + +/obj/effect/proc_holder/spell/arcane/projectile/fireball/greater + name = "Greater Fireball" + desc = "" + clothes_req = FALSE + range = 8 + projectile_type = /obj/projectile/magic/aoe/fireball/rogue/great + overlay_state = "fireball" + sound = list('sound/magic/fireball.ogg') + active = FALSE + releasedrain = 50 + chargedrain = 1 + chargetime = 15 + charge_max = 10 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + movement_interrupt = TRUE + chargedloop = /datum/looping_sound/invokegen + +/obj/projectile/magic/aoe/fireball/rogue/great + name = "fireball" + exp_heavy = 0 + exp_light = 1 + exp_flash = 2 + exp_fire = 2 + flag = "magic" + +//FETCH------------------------- + +/obj/effect/proc_holder/spell/arcane/projectile/fetch + name = "Fetch" + desc = "" + range = 15 + projectile_type = /obj/projectile/magic/fetch + overlay_state = "fetch" + sound = list('sound/magic/magnet.ogg') + active = FALSE + releasedrain = 5 + chargedrain = 0 + chargetime = 0 + warnie = "spellwarning" + no_early_release = TRUE + charging_slowdown = 1 + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane +/obj/projectile/magic/fetch/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[target] repells the fetch!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK From acde75615fa01cf2337325d77834e00a19e18462 Mon Sep 17 00:00:00 2001 From: AllanR Date: Fri, 30 Aug 2024 16:05:39 -0300 Subject: [PATCH 03/38] addon for _roguetown.dm to help separating arcane and divine spells --- code/modules/spells/roguetown/arcane.dm | 1 + 1 file changed, 1 insertion(+) diff --git a/code/modules/spells/roguetown/arcane.dm b/code/modules/spells/roguetown/arcane.dm index 1c668896..129f23ac 100644 --- a/code/modules/spells/roguetown/arcane.dm +++ b/code/modules/spells/roguetown/arcane.dm @@ -1,5 +1,6 @@ //Might as well need this if we have arcane and divine versions of the same spell + /obj/effect/proc_holder/spell/arcane name = "invoked spell" range = -1 From 895f2e2127282448910345d4daef0ccf79fe9929 Mon Sep 17 00:00:00 2001 From: AllanR Date: Fri, 30 Aug 2024 16:06:35 -0300 Subject: [PATCH 04/38] arcane spell list From 2a974a1d08b89acf6bb32afcbe46b6d4abc8d263 Mon Sep 17 00:00:00 2001 From: AllanR Date: Sat, 31 Aug 2024 17:58:24 -0300 Subject: [PATCH 05/38] Update arcane.dm --- code/modules/spells/roguetown/arcane.dm | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/code/modules/spells/roguetown/arcane.dm b/code/modules/spells/roguetown/arcane.dm index 129f23ac..0603bc6e 100644 --- a/code/modules/spells/roguetown/arcane.dm +++ b/code/modules/spells/roguetown/arcane.dm @@ -1,5 +1,4 @@ -//Might as well need this if we have arcane and divine versions of the same spell - +//Might as well do this if we end having both arcane and divine versions some spells /obj/effect/proc_holder/spell/arcane name = "invoked spell" From 54f86567a532474125126d46feffa130cb802279 Mon Sep 17 00:00:00 2001 From: AllanR Date: Sat, 31 Aug 2024 18:00:30 -0300 Subject: [PATCH 06/38] Arcane spell list Will still need to have charge values/drain/etc to be be balanced and quite possibly some minor bug-fixing --- .../modules/spells/roguetown/arcane_spells.dm | 52 +++++++++++++++---- 1 file changed, 43 insertions(+), 9 deletions(-) diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm index ef8dfe5d..29aa035e 100644 --- a/code/modules/spells/roguetown/arcane_spells.dm +++ b/code/modules/spells/roguetown/arcane_spells.dm @@ -6,15 +6,17 @@ overlay_state = "smoke" sound = 'sound/items/firesnuff.ogg' range = 8 - releasedrain = 15 + releasedrain = 30 chargedrain = 0 chargetime = 0 smoke_spread = 1 smoke_amt = 2 - + /obj/effect/proc_holder/spell/arcane/smokescreen/cast(list/targets,mob/user = usr) . = ..() - if(isopenturf(targets[1])) + if(isliving(targets[1])) + return TRUE + else if(isopenturf(targets[1])) return TRUE return FALSE @@ -25,8 +27,8 @@ desc = "" overlay_state = "swap" sound = 'sound/magic/magic_nulled.ogg' - range = 8 - releasedrain = 30 + range = 6 + releasedrain = 60 chargedrain = 0 chargetime = 0 charge_max = 15 SECONDS @@ -53,13 +55,45 @@ to_chat(M, span_warning("You find myself somewhere else...")) return TRUE +//BLINK----------------- + +/obj/effect/proc_holder/spell/arcane/blink + name = "Blink" + desc = "" + overlay_state = "blink" + sound = 'sound/magic/magic_nulled.ogg' + range = 8 + releasedrain = 40 + chargedrain = 0 + chargetime = 0 + charge_max = 15 SECONDS + var/include_space = FALSE //whether it includes space tiles in possible teleport locations + var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations + +/obj/effect/temp_visual/blink + icon_state = "anom" + layer = ABOVE_MOB_LAYER + plane = GAME_PLANE_UPPER + +/obj/effect/proc_holder/spell/arcane/blink/cast(list/targets,mob/user = usr) + . = ..() + if(isopenturf(targets[1])) + var/atom/location = get_turf(targets[1]) + new /obj/effect/temp_visual/swap(get_turf(user)) + new /obj/effect/temp_visual/swap(get_turf(location)) + do_teleport(user, location, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) + return TRUE + else + return FALSE + + // BLINDNESS-------------- /obj/effect/proc_holder/spell/arcane/blindness name = "Blindness" desc = "" overlay_state = "blindness" - releasedrain = 30 + releasedrain = 40 chargedrain = 0 chargetime = 0 range = 7 @@ -82,7 +116,7 @@ name = "Invisibility" desc = "" overlay_state = "invisibility" - releasedrain = 30 + releasedrain = 50 chargedrain = 0 chargetime = 0 charge_max = 30 SECONDS @@ -102,7 +136,7 @@ addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, update_sneak_invis), TRUE), 15 SECONDS) addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, visible_message), span_warning("[target] fades back into view."), span_notice("You become visible again.")), 15 SECONDS) return FALSE - + //LIGHTNING--------------- /obj/effect/proc_holder/spell/arcane/projectile/lightningbolt @@ -206,7 +240,7 @@ clothes_req = FALSE range = 8 projectile_type = /obj/projectile/magic/aoe/fireball/rogue/great - overlay_state = "fireball" + overlay_state = "greaterfireball" sound = list('sound/magic/fireball.ogg') active = FALSE releasedrain = 50 From 44c0d19569fc8b5c311a7bcf3ed59ed3f3f53b30 Mon Sep 17 00:00:00 2001 From: AllanR Date: Sat, 31 Aug 2024 18:02:45 -0300 Subject: [PATCH 07/38] Just making the new spell icons to work --- code/modules/spells/roguetown/_roguetown.dm | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/code/modules/spells/roguetown/_roguetown.dm b/code/modules/spells/roguetown/_roguetown.dm index 1e8983ed..52e1b071 100644 --- a/code/modules/spells/roguetown/_roguetown.dm +++ b/code/modules/spells/roguetown/_roguetown.dm @@ -11,12 +11,22 @@ invocation_type = "shout" var/active_sound +//Old update icon +///obj/effect/proc_holder/spell/update_icon() +// if(!action) +// return +// action.button_icon_state = "[base_icon_state][active]" +// if(overlay_state) +// action.overlay_state = overlay_state +// action.name = name +// action.UpdateButtonIcon() + +//New update icon to work with the new spell icons /obj/effect/proc_holder/spell/update_icon() if(!action) return - action.button_icon_state = "[base_icon_state][active]" - if(overlay_state) - action.overlay_state = overlay_state + action.button_icon_state = "[overlay_state][active]" + action.overlay_state = "[overlay_state][active]" action.name = name action.UpdateButtonIcon() From 88eaa936d353c106927fd86944a6df4959b2d912 Mon Sep 17 00:00:00 2001 From: AllanR Date: Sat, 31 Aug 2024 18:05:44 -0300 Subject: [PATCH 08/38] Updated icons --- icons/mob/actions/roguespells.dmi | Bin 38152 -> 20856 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/actions/roguespells.dmi b/icons/mob/actions/roguespells.dmi index 62263e41e56c27d4dae406098bf72c4b97790f77..31348bad196959150f63f2150555f37428c978f4 100644 GIT binary patch literal 20856 zcmag`WmsEL*EI^G#flUultPgfcZx#^P$(_#Qrt=@?!^+^wP* ziv>#{gcI)jdEW1P&!6)nxsqIaueI0ObFVqp7-J?zOGBBIn4TC53ybvKTSXl#ENo`X z3ybgp<`*h~npVu0d4D}4FGV{~8xIFJF9%l_EUeGD=^0%vTXGMT91nONyaT`Wne8-| zAT)gerqFtsrf8J?=tBvEciAz2w^R}t{xl-siGEMNa z>^au)sBdH-pm?6)loo_%|~Kd;FR)5TKhF zBC7O*?%SDFMTK)v2>u%4OO;%gDe-pPuGAC%kf`Eq!n-KJE!oDzJvNEzE;b+hQ2v)y z_C+~f*=_8?p=~|1FD6%xImKxtmTea@-}A0=X1LwuRqEJf){?JBg#`1>77lJ|k=k_0 zd6=Owtmj|Ijg*JnAvw&KPtI-nh1+$muJ-yr$%^8>Z2CpsPhSrpB*eB6#UA@_vV*r! z51!vk&>TN2#0+?I3$+ToPd&7zNww>|YDJpJc_D^d1>f+AN=r>FdGG)!siD z4)LAwrS}v0qWj?`v?^C?eYTi)tU}2+cq8UHpPa9IDgN%{W1L?fNm%4_A!IS@dOmUp zDIZ&T-+y;TQ&$^EXDYFV%VBahfR&2hvCcqMmOljTj!})SAl_^_1`bQ)LlHa zA$MpPMIE}kj)~!x6XhDti=>`UPd3jEu$c|ekbQ1b&|lG%6Y%vcXg1^a`eiu#uDsj_%$4A=rlfswd#bY*&=J+Ery@4PtW}gebacv3rI35%j0U@1>aY>g0As zfZnKnp!-C@2?xskwBpnLr&-md>^wpVx?R9WhNb&%B z2VKD`iHO0dq;LqpPbcOSMZolLP�Bc)WzeCY?!cpx|V5#A1kR@|@k!O#BBZ+4~i( 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 From 73e73182001acea694fd77ff860e4ec0f2406862 Mon Sep 17 00:00:00 2001 From: AllanR Date: Sun, 1 Sep 2024 02:21:50 -0300 Subject: [PATCH 09/38] Fix swap and add Telepathy --- .../modules/spells/roguetown/arcane_spells.dm | 48 ++++++++++++++++--- 1 file changed, 41 insertions(+), 7 deletions(-) diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm index 29aa035e..c014ce69 100644 --- a/code/modules/spells/roguetown/arcane_spells.dm +++ b/code/modules/spells/roguetown/arcane_spells.dm @@ -27,11 +27,12 @@ desc = "" overlay_state = "swap" sound = 'sound/magic/magic_nulled.ogg' - range = 6 - releasedrain = 60 - chargedrain = 0 - chargetime = 0 - charge_max = 15 SECONDS + range = 8 + releasedrain = 50 + chargedrain = 1 + chargetime = 15 + charge_max = 20 SECONDS + charging_slowdown = 3 var/include_space = FALSE //whether it includes space tiles in possible teleport locations var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations @@ -40,7 +41,7 @@ layer = ABOVE_MOB_LAYER plane = GAME_PLANE_UPPER -/obj/effect/proc_holder/spell/invoked/swap/arcane/cast(list/targets, mob/living/user) +/obj/effect/proc_holder/spell/arcane/swap/arcane/cast(list/targets, mob/living/user) if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.anti_magic_check(TRUE, TRUE)) @@ -63,7 +64,7 @@ overlay_state = "blink" sound = 'sound/magic/magic_nulled.ogg' range = 8 - releasedrain = 40 + releasedrain = 50 chargedrain = 0 chargetime = 0 charge_max = 15 SECONDS @@ -278,6 +279,7 @@ charging_slowdown = 1 chargedloop = /datum/looping_sound/invokegen associated_skill = /datum/skill/magic/arcane + /obj/projectile/magic/fetch/on_hit(target) . = ..() if(ismob(target)) @@ -287,3 +289,35 @@ playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) qdel(src) return BULLET_ACT_BLOCK + +//TELEPATHY + +/obj/effect/proc_holder/spell/arcane/telepathy + name = "telepathy" + desc = "" + range = 15 + overlay_state = "psy" + sound = list('sound/magic/magnet.ogg') + active = FALSE + releasedrain = 20 + chargedrain = 0 + chargetime = 0 + warnie = "spellwarning" + no_early_release = TRUE + charging_slowdown = 1 + chargedloop = /datum/looping_sound/invokegen + associated_skill = /datum/skill/magic/arcane + +/obj/effect/proc_holder/spell/arcane/telepathy/cast(list/targets,mob/user = usr) + . = ..() + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + var/input = stripped_input(user, "What message are you sending?", null, "") + if(!input) + return FALSE + to_chat(user, span_warning("I transmit to [target]: " + "[input]")) + to_chat(target, span_warning("You hear a voice in your head saying: ") + span_boldwarning("[input]")) + return TRUE + From cb31511df3f696f0c00d420bc887e8e542f0ee2e Mon Sep 17 00:00:00 2001 From: AllanR Date: Sun, 1 Sep 2024 04:37:19 -0300 Subject: [PATCH 10/38] Update arcane_spells.dm --- code/modules/spells/roguetown/arcane_spells.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm index c014ce69..496c731d 100644 --- a/code/modules/spells/roguetown/arcane_spells.dm +++ b/code/modules/spells/roguetown/arcane_spells.dm @@ -41,7 +41,7 @@ layer = ABOVE_MOB_LAYER plane = GAME_PLANE_UPPER -/obj/effect/proc_holder/spell/arcane/swap/arcane/cast(list/targets, mob/living/user) +/obj/effect/proc_holder/spell/arcane/swap/cast(list/targets, mob/living/user) if(isliving(targets[1])) var/mob/living/target = targets[1] if(target.anti_magic_check(TRUE, TRUE)) From bc7defe460259a684c825a294bb02b622db18140 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:06:24 -0300 Subject: [PATCH 11/38] Making these new icons work was a pain --- code/modules/spells/roguetown/_roguetown.dm | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/code/modules/spells/roguetown/_roguetown.dm b/code/modules/spells/roguetown/_roguetown.dm index 52e1b071..23f6af13 100644 --- a/code/modules/spells/roguetown/_roguetown.dm +++ b/code/modules/spells/roguetown/_roguetown.dm @@ -21,12 +21,19 @@ // action.name = name // action.UpdateButtonIcon() -//New update icon to work with the new spell icons +//That is a ugly way of checking it the spell is a mmb cast or not and I know it... +//But it's what worked better so far for some reason. /obj/effect/proc_holder/spell/update_icon() if(!action) return - action.button_icon_state = "[overlay_state][active]" - action.overlay_state = "[overlay_state][active]" + action.button_icon_state = base_icon_state + if (selection_type == "view") + if(overlay_state) + action.overlay_state = "[overlay_state]1" + else + action.button_icon_state = "[base_icon_state][active]" + if(overlay_state) + action.overlay_state = "[overlay_state][active]" action.name = name action.UpdateButtonIcon() From 0d63c86256b11283f48d15b5b665966b7918c5fe Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:16:22 -0300 Subject: [PATCH 12/38] Arcane magic specifics This is basically a pseudo spell/Invoked clone Might as well do this if we end having both arcane and divine versions some spells That will also help organizing future lists and shit (specially if we are adding spell books later) --- code/modules/spells/roguetown/arcane.dm | 99 ++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/code/modules/spells/roguetown/arcane.dm b/code/modules/spells/roguetown/arcane.dm index 0603bc6e..3d569679 100644 --- a/code/modules/spells/roguetown/arcane.dm +++ b/code/modules/spells/roguetown/arcane.dm @@ -1,7 +1,9 @@ +//This is basically a pseudo spell/Invoked clone //Might as well do this if we end having both arcane and divine versions some spells +//That will also help organizing future lists and shit (specially if we are adding spell books later) /obj/effect/proc_holder/spell/arcane - name = "invoked spell" + name = "arcane spell" range = -1 selection_type = "range" no_early_release = TRUE @@ -54,6 +56,7 @@ if(!can_cast(caller) || !cast_check(FALSE, ranged_ability_user)) return FALSE if(perform(list(target), TRUE, user = ranged_ability_user)) + caller.mind.adjust_experience(associated_skill, (caller.STAINT*0.3))//Arcane Skill exp gain - Delete/Edit if on your leisure return TRUE /obj/effect/proc_holder/spell/arcane/projectile @@ -94,3 +97,97 @@ ready_projectile(P, target, user, i) P.fire() return TRUE + +/obj/effect/proc_holder/spell/arcane/targeted //can mean aoe for mobs (limited/unlimited number) or one target mob + var/max_targets = 1 //leave 0 for unlimited targets in range, 1 for one selectable target in range, more for limited number of casts (can all target one guy, depends on target_ignore_prev) in range + var/target_ignore_prev = 1 //only important if max_targets > 1, affects if the spell can be cast multiple times at one person from one cast + var/include_user = 0 //if it includes usr in the target list + var/random_target = 0 // chooses random viable target instead of asking the caster + var/random_target_priority = TARGET_CLOSEST // if random_target is enabled how it will pick the target + + +/obj/effect/proc_holder/spell/arcane/aoe_turf //affects all turfs in view or range (depends) + var/inner_radius = -1 //for all your ring spell needs + +/obj/effect/proc_holder/spell/arcane/targeted/choose_targets(mob/user = usr) + var/list/targets = list() + + switch(max_targets) + if(0) //unlimited + for(var/mob/living/target in view_or_range(range, user, selection_type)) + if(!can_target(target)) + continue + targets += target + if(1) //single target can be picked + if(range < 0) + targets += user + else + var/possible_targets = list() + + for(var/mob/living/M in view_or_range(range, user, selection_type)) + if(!include_user && user == M) + continue + if(!can_target(M)) + continue + possible_targets += M + + //targets += input("Choose the target for the spell.", "Targeting") as mob in possible_targets + //Adds a safety check post-input to make sure those targets are actually in range. + var/mob/M + if(!random_target) + M = input("Choose the target for the spell.", "Targeting") as null|mob in sortNames(possible_targets) + else + switch(random_target_priority) + if(TARGET_RANDOM) + M = pick(possible_targets) + if(TARGET_CLOSEST) + for(var/mob/living/L in possible_targets) + if(M) + if(get_dist(user,L) < get_dist(user,M)) + if(los_check(user,L)) + M = L + else + if(los_check(user,L)) + M = L + if(M in view_or_range(range, user, selection_type)) + targets += M + + else + var/list/possible_targets = list() + for(var/mob/living/target in view_or_range(range, user, selection_type)) + if(!can_target(target)) + continue + possible_targets += target + for(var/i=1,i<=max_targets,i++) + if(!possible_targets.len) + break + if(target_ignore_prev) + var/target = pick(possible_targets) + possible_targets -= target + targets += target + else + targets += pick(possible_targets) + + if(!include_user && (user in targets)) + targets -= user + + if(!targets.len && !cast_without_targets) //doesn't waste the spell + revert_cast(user) + return + + perform(targets,user=user) + +/obj/effect/proc_holder/spell/arcane/aoe_turf/choose_targets(mob/user = usr) + var/list/targets = list() + + for(var/turf/target in view_or_range(range,user,selection_type)) + if(!can_target(target)) + continue + if(!(target in view_or_range(inner_radius,user,selection_type))) + targets += target + + if(!targets.len) //doesn't waste the spell + revert_cast() + return + + perform(targets,user=user) From eea6b6681531152d1431ce757a5afea1de9da0e7 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:22:56 -0300 Subject: [PATCH 13/38] The actual Arcane spell-list This might as well become a entire folder later if the list becomes too big.... --- .../modules/spells/roguetown/arcane_spells.dm | 108 ++++++++++++++++-- 1 file changed, 97 insertions(+), 11 deletions(-) diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm index 496c731d..03387dd0 100644 --- a/code/modules/spells/roguetown/arcane_spells.dm +++ b/code/modules/spells/roguetown/arcane_spells.dm @@ -1,3 +1,39 @@ +//IGNITE------------------ + +/obj/effect/proc_holder/spell/arcane/ignite + name = "Ignite" + desc = "" + overlay_state = "flame" + sound = 'sound/items/firelight.ogg' + range = 4 + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + charge_max = 10 SECONDS + +/obj/effect/proc_holder/spell/arcane/ignite/cast(list/targets, mob/user = usr) + . = ..() + if(isliving(targets[1])) + var/mob/living/L = targets[1] + user.visible_message("[user] points at [L]!") + if(L.anti_magic_check(TRUE, TRUE)) + return FALSE + L.adjust_fire_stacks(5) + L.IgniteMob() + addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, ExtinguishMob)), 5 SECONDS) + return TRUE + + // Spell interaction with ignitable objects (burn wooden things, light torches up) + else if(isobj(targets[1])) + var/obj/O = targets[1] + if(O.fire_act()) + user.visible_message("[user] points at [O], igniting it in flames!") + return TRUE + else + to_chat(user, span_warning("You point at [O], but it fails to catch fire.")) + return FALSE + return FALSE + //SMOKESCREEN----------------- /obj/effect/proc_holder/spell/arcane/smokescreen @@ -9,6 +45,7 @@ releasedrain = 30 chargedrain = 0 chargetime = 0 + charge_max = 10 SECONDS smoke_spread = 1 smoke_amt = 2 @@ -97,6 +134,7 @@ releasedrain = 40 chargedrain = 0 chargetime = 0 + charge_max = 10 SECONDS range = 7 movement_interrupt = FALSE sound = 'sound/magic/churn.ogg' @@ -150,7 +188,7 @@ releasedrain = 30 chargedrain = 1 chargetime = 15 - charge_max = 20 SECONDS + charge_max = 10 SECONDS movement_interrupt = FALSE charging_slowdown = 3 @@ -181,9 +219,13 @@ return BULLET_ACT_BLOCK if(isliving(target)) var/mob/living/L = target +// for(var/obj/item/I in L.get_equipped_items()) //Maybe add 5 damage for each metal gear in the target? +// if(I.smeltresult == /obj/item/ingot/iron) //More damage if the target is on water tuff too? +// damage += 5 //(dont know it that code work tho) L.electrocute_act(1, src) qdel(src) + //FIREBALL------------------------- /obj/effect/proc_holder/spell/arcane/projectile/fireball @@ -203,8 +245,6 @@ no_early_release = TRUE movement_interrupt = FALSE charging_slowdown = 3 - chargedloop = /datum/looping_sound/invokegen - associated_skill = /datum/skill/magic/arcane /obj/effect/proc_holder/spell/arcane/projectile/fireball/fire_projectile(list/targets, mob/living/user) projectile_var_overrides = list("range" = 8) @@ -243,7 +283,6 @@ projectile_type = /obj/projectile/magic/aoe/fireball/rogue/great overlay_state = "greaterfireball" sound = list('sound/magic/fireball.ogg') - active = FALSE releasedrain = 50 chargedrain = 1 chargetime = 15 @@ -270,15 +309,13 @@ projectile_type = /obj/projectile/magic/fetch overlay_state = "fetch" sound = list('sound/magic/magnet.ogg') - active = FALSE releasedrain = 5 chargedrain = 0 chargetime = 0 + charge_max = 5 SECONDS warnie = "spellwarning" no_early_release = TRUE charging_slowdown = 1 - chargedloop = /datum/looping_sound/invokegen - associated_skill = /datum/skill/magic/arcane /obj/projectile/magic/fetch/on_hit(target) . = ..() @@ -290,7 +327,7 @@ qdel(src) return BULLET_ACT_BLOCK -//TELEPATHY +//TELEPATHY--------------------------- /obj/effect/proc_holder/spell/arcane/telepathy name = "telepathy" @@ -298,15 +335,13 @@ range = 15 overlay_state = "psy" sound = list('sound/magic/magnet.ogg') - active = FALSE releasedrain = 20 chargedrain = 0 chargetime = 0 + charge_max = 15 SECONDS warnie = "spellwarning" no_early_release = TRUE charging_slowdown = 1 - chargedloop = /datum/looping_sound/invokegen - associated_skill = /datum/skill/magic/arcane /obj/effect/proc_holder/spell/arcane/telepathy/cast(list/targets,mob/user = usr) . = ..() @@ -321,3 +356,54 @@ to_chat(target, span_warning("You hear a voice in your head saying: ") + span_boldwarning("[input]")) return TRUE +//UNLOCK -------------------------- + +/obj/effect/proc_holder/spell/arcane/unlock + name = "unlock" + desc = "" + range = 1 + overlay_state = "lock" + sound = list('sound/magic/magnet.ogg') + releasedrain = 20 + chargedrain = 1 + chargetime = 30 + charge_max = 15 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + charging_slowdown = 1 + +///obj/effect/proc_holder/spell/arcane/unlock/cast(list/targets,mob/user = usr) +// . = ..() +// if(istype(targets[1], (/obj/structure/mineral_door/ | /obj/structure/closet))) +// var/obj/O = targets[1] +// if(O.door_opened || O.isSwitchingStates) +// to_chat(user, "It is already open.") +// return TRUE +// if(!O.keylock) +// to_chat(user, "There's no lock on this.") +// return TRUE +// return +// if(O.lockbroken) +// to_chat(user, "The lock is broken.") +// return TRUE +// else +// var/prob2open = 0 +// var/diceroll = 0 +// if(user && user.mind) +// prob2open = 20 +// diceroll = rand(0,100) +// for(var/i in 1 to user.mind.get_skill_level(/datum/skill/magic/arcane)) +// prob2open += 5 +// if (diceroll <= prob2open) +// if(istype(targets[1], /obj/structure/mineral_door/) +// lock_toggle(O) +// if(istype(targets[1], /obj/structure/closet) +// togglelock(O) +// else +// to_chat(user, "The spell fails to unlock it...") +// +// return TRUE +// else +// return TRUE +//I cant code for shit, will rethink this later. + From e586eb4432e9972dbe93cfa1f125babe048b2655 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:35:19 -0300 Subject: [PATCH 14/38] Backup just in case everything goes to shit --- icons/mob/actions/roguespellsbackup.dmi | Bin 0 -> 38152 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 icons/mob/actions/roguespellsbackup.dmi diff --git a/icons/mob/actions/roguespellsbackup.dmi b/icons/mob/actions/roguespellsbackup.dmi new file mode 100644 index 0000000000000000000000000000000000000000..62263e41e56c27d4dae406098bf72c4b97790f77 GIT binary patch literal 38152 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 literal 0 HcmV?d00001 From 1d5578018a03be7b3e523f1c573a31110f1f8b3d Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:36:05 -0300 Subject: [PATCH 15/38] New Spell Icons --- icons/mob/actions/roguespells.dmi | Bin 20856 -> 23639 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/actions/roguespells.dmi b/icons/mob/actions/roguespells.dmi index 31348bad196959150f63f2150555f37428c978f4..758a4df3727d4095488173cfa56db7e855147c15 100644 GIT binary patch literal 23639 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�Bc)WzeCY?!cpx|V5#A1kR@|@k!O#BBZ+4~i( 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 Date: Tue, 3 Sep 2024 16:50:15 -0300 Subject: [PATCH 16/38] Randomized spell selection --- .../roguetown/adventurer/types/combat/mage.dm | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm index 68f5a5e9..aa9e0c46 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/mage.dm @@ -56,6 +56,20 @@ H.change_stat("intelligence", 3) H.change_stat("constitution", 1) H.change_stat("endurance", -1) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/fireball) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/lightningbolt) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/fetch) + var/list/possible_spells = list( + "/obj/effect/proc_holder/spell/arcane/telepathy", + "/obj/effect/proc_holder/spell/arcane/ignite", + "/obj/effect/proc_holder/spell/arcane/blink", + "/obj/effect/proc_holder/spell/arcane/swap", + "/obj/effect/proc_holder/spell/arcane/smokescreen", + "/obj/effect/proc_holder/spell/arcane/blindness", + "/obj/effect/proc_holder/spell/arcane/invisibility", + "/obj/effect/proc_holder/spell/arcane/projectile/fetch" + ) + H.mind.AddSpell(pick(new /obj/effect/proc_holder/spell/arcane/projectile/fireball,new /obj/effect/proc_holder/spell/arcane/projectile/lightningbolt)) + for(var/i=2,i>0,i--) + var/random_item = pick(possible_spells) + var typepath = text2path(random_item) + H.mind.AddSpell(new typepath) + possible_spells.Remove(random_item) + possible_spells = null From 4097326fe12781e0db6b26b0b7b3309925853aec Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:51:00 -0300 Subject: [PATCH 17/38] Randomized spell selection --- .../adventurer/types/combat/sorceress.dm | 22 +++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/sorceress.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/sorceress.dm index c389c526..ed967e74 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/sorceress.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/sorceress.dm @@ -27,7 +27,7 @@ backl = /obj/item/storage/backpack/rogue/satchel beltr = /obj/item/reagent_containers/glass/bottle/rogue/manapot beltl = /obj/item/rogueweapon/huntingknife - neck = /obj/item/storage/belt/rogue/pouch/coins/poor + neck = /obj/item/storage/belt/rogue/pouch/coins/poor r_hand = /obj/item/rogueweapon/woodstaff if(H.mind) H.mind.adjust_skillrank(/datum/skill/combat/polearms, 1, TRUE) @@ -47,6 +47,20 @@ H.change_stat("strength", -1) H.change_stat("intelligence", 4) H.change_stat("speed", 1) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/fireball) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/lightningbolt) - H.mind.AddSpell(new /obj/effect/proc_holder/spell/invoked/projectile/fetch) + var/list/possible_spells = list( + "/obj/effect/proc_holder/spell/arcane/telepathy", + "/obj/effect/proc_holder/spell/arcane/ignite", + "/obj/effect/proc_holder/spell/arcane/blink", + "/obj/effect/proc_holder/spell/arcane/swap", + "/obj/effect/proc_holder/spell/arcane/smokescreen", + "/obj/effect/proc_holder/spell/arcane/blindness", + "/obj/effect/proc_holder/spell/arcane/invisibility", + "/obj/effect/proc_holder/spell/arcane/projectile/fetch" + ) + H.mind.AddSpell(pick(new /obj/effect/proc_holder/spell/arcane/projectile/fireball,new /obj/effect/proc_holder/spell/arcane/projectile/lightningbolt)) + for(var/i=2,i>0,i--) + var/random_item = pick(possible_spells) + var typepath = text2path(random_item) + H.mind.AddSpell(new typepath) + possible_spells.Remove(random_item) + possible_spells = null From 4466781dab7721b810e1bad566c5a960310cbf14 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:54:46 -0300 Subject: [PATCH 18/38] Create duskblade.dm Optional new rare class I did just for fun, feel free to ignore it (It's basicalle a mix of warrior/mage with nerfs to both to balance it out. --- .../adventurer/types/combat/rare/duskblade.dm | 98 +++++++++++++++++++ 1 file changed, 98 insertions(+) create mode 100644 code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm new file mode 100644 index 00000000..1dcbf03d --- /dev/null +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm @@ -0,0 +1,98 @@ +//duskblade + +/datum/advclass/duskblade + name = "Duskblade" + tutorial = "The duskblade blurs the line between spellcaster and warrior, \ + marrying the power of magic with hand-to-hand combat prowess. A student of ancient elven spellcasting techniques, \ + the duskblade combines arcane spellcasting with the combat skills of a fighter." + allowed_races = list( + "Humen", + "Elf", + "Half-Elf", + "Dwarf", + "Tiefling", + "Argonian", + "Dark Elf", + "Aasimar", + "Half Orc" + ) + outfit = /datum/outfit/job/roguetown/adventurer/dblade + pickprob = 11 + traits_applied = list(TRAIT_MEDIUMARMOR, TRAIT_DODGEEXPERT) + category_tags = list(CTAG_ADVENTURER) + + +/datum/outfit/job/roguetown/adventurer/dblade/pre_equip(mob/living/carbon/human/H) + ..() + H.mind.adjust_skillrank(/datum/skill/combat/crossbows, rand(1,2), TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/polearms, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/maces, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/axes, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/bows, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/wrestling, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/unarmed, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/athletics, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/swords, 3, TRUE) + H.mind.adjust_skillrank(/datum/skill/combat/knives, rand(1,2), TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/sneaking, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/swimming, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/climbing, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/riding, pick(1,2), TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/medicine, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/reading, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/alchemy, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/magic/arcane, 1, TRUE) + H.mind.adjust_skillrank(/datum/skill/misc/medicine, 1, TRUE) + if(H.age == AGE_OLD) + H.mind.adjust_skillrank(/datum/skill/magic/arcane, pick(1,2,3), TRUE) + H.change_stat("strength", 2) + H.change_stat("endurance", 1) + H.change_stat("constitution", 1) + H.change_stat("intelligence", 2) + H.change_stat("speed", 1) + shoes = /obj/item/clothing/shoes/roguetown/boots + gloves = /obj/item/clothing/gloves/roguetown/leather + belt = /obj/item/storage/belt/rogue/leather + neck = /obj/item/storage/belt/rogue/pouch/coins/poor + shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/random + if(prob(70)) + armor = /obj/item/clothing/suit/roguetown/armor/chainmail/hauberk + else if(prob(50)) + armor = /obj/item/clothing/suit/roguetown/armor/plate/half/iron + else + armor = /obj/item/clothing/suit/roguetown/armor/plate/scale + if(prob(25)) + mask = /obj/item/clothing/mask/rogue/facemask + backl = /obj/item/storage/backpack/rogue/satchel + backr = /obj/item/rogueweapon/shield/wood + beltl = /obj/item/rogueweapon/huntingknife + if(prob(50)) + beltr = /obj/item/rogueweapon/sword/iron + else + beltr = /obj/item/rogueweapon/sword/sabre + if(H.gender == MALE) + pants = /obj/item/clothing/under/roguetown/tights/black + else + H.underwear = "Femleotard" + H.underwear_color = CLOTHING_BLACK + H.update_body() + pants = /obj/item/clothing/under/roguetown/tights/black + + var/list/possible_spells = list( + "/obj/effect/proc_holder/spell/arcane/telepathy", + "/obj/effect/proc_holder/spell/arcane/ignite", + "/obj/effect/proc_holder/spell/arcane/blink", + "/obj/effect/proc_holder/spell/arcane/swap", + "/obj/effect/proc_holder/spell/arcane/smokescreen", + "/obj/effect/proc_holder/spell/arcane/blindness", + "/obj/effect/proc_holder/spell/arcane/invisibility", + "/obj/effect/proc_holder/spell/arcane/projectile/fetch" + ) + H.mind.AddSpell(pick(new /obj/effect/proc_holder/spell/arcane/projectile/fireball,new /obj/effect/proc_holder/spell/arcane/projectile/lightningbolt)) + var/random_item = pick(possible_spells) + var typepath = text2path(random_item) + H.mind.AddSpell(new typepath) + possible_spells = null + + ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) + ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) From c87c967dcc61e7286a25a505c5f92b575929bce8 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 16:59:38 -0300 Subject: [PATCH 19/38] New rare class I did for fun, feel free to ignore (Basically a mix of Warrior and Mage with both parts considerably nerfed to balance things out) --- .../roguetown/adventurer/types/combat/rare/duskblade.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm index 1dcbf03d..a7fc711a 100644 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm +++ b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm @@ -2,8 +2,8 @@ /datum/advclass/duskblade name = "Duskblade" - tutorial = "The duskblade blurs the line between spellcaster and warrior, \ - marrying the power of magic with hand-to-hand combat prowess. A student of ancient elven spellcasting techniques, \ + tutorial = "The duskblade blurs the line between spellcaster and warrior,\ + marrying the power of magic with hand-to-hand combat prowess. A student of ancient elven spellcasting techniques,\ the duskblade combines arcane spellcasting with the combat skills of a fighter." allowed_races = list( "Humen", From 185a2f3c7c7f3f67eb64c529b12d989bbd9de48b Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 17:01:24 -0300 Subject: [PATCH 20/38] Randomized spell selection --- .../job_types/roguetown/courtier/magician.dm | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/code/modules/jobs/job_types/roguetown/courtier/magician.dm b/code/modules/jobs/job_types/roguetown/courtier/magician.dm index 51419307..dd5aa0d5 100644 --- a/code/modules/jobs/job_types/roguetown/courtier/magician.dm +++ b/code/modules/jobs/job_types/roguetown/courtier/magician.dm @@ -13,7 +13,6 @@ "Half-Elf", "Aasimar", ) - spells = list(/obj/effect/proc_holder/spell/invoked/projectile/fireball/greater, /obj/effect/proc_holder/spell/invoked/projectile/fireball, /obj/effect/proc_holder/spell/invoked/projectile/lightningbolt, /obj/effect/proc_holder/spell/invoked/projectile/fetch) display_order = JDO_MAGICIAN tutorial = "Your creed is one dedicated to the conquering of the arcane arts and the constant thrill of knowledge. \ You owe your life to the Lord, for it was his coin that allowed you to continue your studies in these dark times. \ @@ -70,3 +69,24 @@ head = /obj/item/clothing/head/roguetown/wizhat armor = /obj/item/clothing/suit/roguetown/shirt/robe/wizard H.dna.species.soundpack_m = new /datum/voicepack/male/wizard() + + var/list/possible_spells = list( + "/obj/effect/proc_holder/spell/arcane/telepathy", + "/obj/effect/proc_holder/spell/arcane/ignite", + "/obj/effect/proc_holder/spell/arcane/blink", + "/obj/effect/proc_holder/spell/arcane/swap", + "/obj/effect/proc_holder/spell/arcane/smokescreen", + "/obj/effect/proc_holder/spell/arcane/projectile/lightningbolt", + "/obj/effect/proc_holder/spell/arcane/projectile/fireball", + "/obj/effect/proc_holder/spell/arcane/blindness", + "/obj/effect/proc_holder/spell/arcane/invisibility", + "/obj/effect/proc_holder/spell/arcane/projectile/fetch" + ) + H.mind.AddSpell(new /obj/effect/proc_holder/spell/arcane/projectile/fireball/greater) + for(var/i=3,i>0,i--) + var/random_item = pick(possible_spells) + var typepath = text2path(random_item) + H.mind.AddSpell(new typepath) + possible_spells.Remove(random_item) + possible_spells = null + From 8d96b7e7e23a9b78f460000f0e59196a8f459de5 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 17:42:28 -0300 Subject: [PATCH 21/38] Change to the claw spell The icon now gives a nice feedback to show when the claws are active/inactive --- .../villain/werewolf/werewolf_spells.dm | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm index 9bfba392..e904fe0d 100644 --- a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm +++ b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_spells.dm @@ -32,6 +32,7 @@ message_admins("WEREWOLF: [werewolf_player.wolfname] howls: [message]") +//Old version, ugly and no feedback with the new icons /obj/effect/proc_holder/spell/self/claws name = "Lupine Claws" desc = "!" @@ -62,4 +63,32 @@ user.put_in_hands(r, TRUE, FALSE, TRUE) //user.visible_message("Your claws extend.", "You feel your claws extending.", "You hear a sound of claws extending.") extended = TRUE - \ No newline at end of file + +//New version (to work nicely with the new icons) +/obj/effect/proc_holder/spell/invoked/claws + name = "Lupine Claws" + desc = "!" + overlay_state = "claws" + antimagic_allowed = TRUE + charge_max = 20 //2 seconds + var/extended = FALSE + var/obj/item/rogueweapon/werewolf_claw/left/l + var/obj/item/rogueweapon/werewolf_claw/right/r + +/obj/effect/proc_holder/spell/invoked/claws/on_activation(mob/user = usr) + l = new(user,1) + r = new(user,2) + user.put_in_hands(l, TRUE, FALSE, TRUE) + user.put_in_hands(r, TRUE, FALSE, TRUE) + //user.visible_message("Your claws extend.", "You feel your claws extending.", "You hear a sound of claws extending.") + extended = TRUE + +/obj/effect/proc_holder/spell/invoked/claws/on_deactivation(mob/user = usr) + l = user.get_active_held_item() + r = user.get_inactive_held_item() + user.dropItemToGround(l, TRUE) + user.dropItemToGround(r, TRUE) + qdel(l) + qdel(r) + //user.visible_message("Your claws retract.", "You feel your claws retracting.", "You hear a sound of claws retracting.") + extended = FALSE From c884b61200e13156965df938bd96655cbaba3123 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 17:43:59 -0300 Subject: [PATCH 22/38] Small edit to work with the claw skill --- .../roguetown/villain/werewolf/werewolf_transformation.dm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm index 96ff16cb..433c645b 100644 --- a/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm +++ b/code/modules/antagonists/roguetown/villain/werewolf/werewolf_transformation.dm @@ -116,7 +116,7 @@ W.mind.adjust_skillrank(/datum/skill/misc/climbing, 6, TRUE) W.AddSpell(new /obj/effect/proc_holder/spell/self/howl) - W.AddSpell(new /obj/effect/proc_holder/spell/self/claws) + W.AddSpell(new /obj/effect/proc_holder/spell/invoked/claws) ADD_TRAIT(src, TRAIT_NOSLEEP, TRAIT_GENERIC) @@ -171,7 +171,7 @@ W.mind.skill_experience = WA.stored_experience.Copy() W.RemoveSpell(new /obj/effect/proc_holder/spell/self/howl) - W.RemoveSpell(new /obj/effect/proc_holder/spell/self/claws) + W.RemoveSpell(new /obj/effect/proc_holder/spell/invoked/claws) W.regenerate_icons() From 84d5c9e9bb7c6465249be5d142790e9e12e255a2 Mon Sep 17 00:00:00 2001 From: AllanR Date: Tue, 3 Sep 2024 17:45:22 -0300 Subject: [PATCH 23/38] New spell icons --- icons/mob/actions/roguespells.dmi | Bin 23639 -> 24261 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/icons/mob/actions/roguespells.dmi b/icons/mob/actions/roguespells.dmi index 758a4df3727d4095488173cfa56db7e855147c15..ddc68f3a6e3a06b2f0865996bdce758dd8f79e46 100644 GIT binary patch delta 23683 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 D6NC}7{Fj9ij(lv*WPDP|!NePRFp+UNl?v|LL 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 From e1daa5ed8c8e86b736622ca1ae6a0fd02d7039ca Mon Sep 17 00:00:00 2001 From: AllanR Date: Wed, 4 Sep 2024 00:37:49 -0300 Subject: [PATCH 24/38] Just organizing --- .../spells/roguetown/arcane/blindness.dm | 23 ++++++ code/modules/spells/roguetown/arcane/blink.dm | 30 ++++++++ code/modules/spells/roguetown/arcane/fetch.dm | 26 +++++++ .../spells/roguetown/arcane/fireball.dm | 72 +++++++++++++++++++ .../modules/spells/roguetown/arcane/ignite.dm | 35 +++++++++ .../spells/roguetown/arcane/invisibility.dm | 26 +++++++ .../spells/roguetown/arcane/lightning.dm | 48 +++++++++++++ .../spells/roguetown/arcane/smokescreen.dm | 68 ++++++++++++++++++ code/modules/spells/roguetown/arcane/swap.dm | 35 +++++++++ .../spells/roguetown/arcane/telepathy.dm | 28 ++++++++ 10 files changed, 391 insertions(+) create mode 100644 code/modules/spells/roguetown/arcane/blindness.dm create mode 100644 code/modules/spells/roguetown/arcane/blink.dm create mode 100644 code/modules/spells/roguetown/arcane/fetch.dm create mode 100644 code/modules/spells/roguetown/arcane/fireball.dm create mode 100644 code/modules/spells/roguetown/arcane/ignite.dm create mode 100644 code/modules/spells/roguetown/arcane/invisibility.dm create mode 100644 code/modules/spells/roguetown/arcane/lightning.dm create mode 100644 code/modules/spells/roguetown/arcane/smokescreen.dm create mode 100644 code/modules/spells/roguetown/arcane/swap.dm create mode 100644 code/modules/spells/roguetown/arcane/telepathy.dm diff --git a/code/modules/spells/roguetown/arcane/blindness.dm b/code/modules/spells/roguetown/arcane/blindness.dm new file mode 100644 index 00000000..dbce6704 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/blindness.dm @@ -0,0 +1,23 @@ +// BLINDNESS-------------- + +/obj/effect/proc_holder/spell/arcane/blindness + name = "Blindness" + desc = "" + overlay_state = "blindness" + releasedrain = 40 + chargedrain = 0 + chargetime = 0 + charge_max = 10 SECONDS + range = 7 + movement_interrupt = FALSE + sound = 'sound/magic/churn.ogg' + antimagic_allowed = TRUE + +/obj/effect/proc_holder/spell/arcane/blindness/cast(list/targets, mob/user = usr) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + target.visible_message(span_warning("[user] points at [target]'s eyes!"),span_warning("My eyes are covered in darkness!")) + target.blind_eyes(2) + return TRUE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/blink.dm b/code/modules/spells/roguetown/arcane/blink.dm new file mode 100644 index 00000000..b5f8f9d5 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/blink.dm @@ -0,0 +1,30 @@ +//BLINK----------------- + +/obj/effect/proc_holder/spell/arcane/blink + name = "Blink" + desc = "" + overlay_state = "blink" + sound = 'sound/magic/magic_nulled.ogg' + range = 8 + releasedrain = 50 + chargedrain = 0 + chargetime = 0 + charge_max = 15 SECONDS + var/include_space = FALSE //whether it includes space tiles in possible teleport locations + var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations + +/obj/effect/temp_visual/blink + icon_state = "anom" + layer = ABOVE_MOB_LAYER + plane = GAME_PLANE_UPPER + +/obj/effect/proc_holder/spell/arcane/blink/cast(list/targets,mob/user = usr) + . = ..() + if(isopenturf(targets[1])) + var/atom/location = get_turf(targets[1]) + new /obj/effect/temp_visual/swap(get_turf(user)) + new /obj/effect/temp_visual/swap(get_turf(location)) + do_teleport(user, location, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) + return TRUE + else + return FALSE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/fetch.dm b/code/modules/spells/roguetown/arcane/fetch.dm new file mode 100644 index 00000000..f17f4a07 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/fetch.dm @@ -0,0 +1,26 @@ +//FETCH------------------------- + +/obj/effect/proc_holder/spell/arcane/projectile/fetch + name = "Fetch" + desc = "" + range = 15 + projectile_type = /obj/projectile/magic/fetch + overlay_state = "fetch" + sound = list('sound/magic/magnet.ogg') + releasedrain = 5 + chargedrain = 0 + chargetime = 0 + charge_max = 5 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + charging_slowdown = 1 + +/obj/projectile/magic/fetch/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[target] repells the fetch!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/fireball.dm b/code/modules/spells/roguetown/arcane/fireball.dm new file mode 100644 index 00000000..b7037c02 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/fireball.dm @@ -0,0 +1,72 @@ +//FIREBALL------------------------- + +/obj/effect/proc_holder/spell/arcane/projectile/fireball + name = "Fireball" + desc = "" + clothes_req = FALSE + range = 8 + projectile_type = /obj/projectile/magic/aoe/fireball/rogue + overlay_state = "fireball" + sound = list('sound/magic/fireball.ogg') + active = FALSE + releasedrain = 30 + chargedrain = 1 + chargetime = 15 + charge_max = 10 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + movement_interrupt = FALSE + charging_slowdown = 3 + +/obj/effect/proc_holder/spell/arcane/projectile/fireball/fire_projectile(list/targets, mob/living/user) + projectile_var_overrides = list("range" = 8) + return ..() + +/obj/projectile/magic/aoe/fireball/rogue + name = "fireball" + exp_heavy = 0 + exp_light = 0 + exp_flash = 0 + exp_fire = 1 + damage = 10 + damage_type = BURN + nodamage = FALSE + flag = "magic" + hitsound = 'sound/blank.ogg' + +/obj/projectile/magic/aoe/fireball/rogue/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[src] fizzles on contact with [target]!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK + +//GREATER FIREBALL------------------------- + +/obj/effect/proc_holder/spell/arcane/projectile/fireball/greater + name = "Greater Fireball" + desc = "" + clothes_req = FALSE + range = 8 + projectile_type = /obj/projectile/magic/aoe/fireball/rogue/great + overlay_state = "greaterfireball" + sound = list('sound/magic/fireball.ogg') + releasedrain = 50 + chargedrain = 1 + chargetime = 15 + charge_max = 10 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + movement_interrupt = TRUE + chargedloop = /datum/looping_sound/invokegen + +/obj/projectile/magic/aoe/fireball/rogue/great + name = "fireball" + exp_heavy = 0 + exp_light = 1 + exp_flash = 2 + exp_fire = 2 + flag = "magic" \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/ignite.dm b/code/modules/spells/roguetown/arcane/ignite.dm new file mode 100644 index 00000000..6c08ccda --- /dev/null +++ b/code/modules/spells/roguetown/arcane/ignite.dm @@ -0,0 +1,35 @@ +//IGNITE------------------ + +/obj/effect/proc_holder/spell/arcane/ignite + name = "Ignite" + desc = "" + overlay_state = "flame" + sound = 'sound/items/firelight.ogg' + range = 4 + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + charge_max = 10 SECONDS + +/obj/effect/proc_holder/spell/arcane/ignite/cast(list/targets, mob/user = usr) + . = ..() + if(isliving(targets[1])) + var/mob/living/L = targets[1] + user.visible_message("[user] points at [L]!") + if(L.anti_magic_check(TRUE, TRUE)) + return FALSE + L.adjust_fire_stacks(5) + L.IgniteMob() + addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, ExtinguishMob)), 5 SECONDS) + return TRUE + + // Spell interaction with ignitable objects (burn wooden things, light torches up) + else if(isobj(targets[1])) + var/obj/O = targets[1] + if(O.fire_act()) + user.visible_message("[user] points at [O], igniting it in flames!") + return TRUE + else + to_chat(user, span_warning("You point at [O], but it fails to catch fire.")) + return FALSE + return FALSE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/invisibility.dm b/code/modules/spells/roguetown/arcane/invisibility.dm new file mode 100644 index 00000000..6d157993 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/invisibility.dm @@ -0,0 +1,26 @@ +// INVISIBILITY-------------- + +/obj/effect/proc_holder/spell/arcane/invisibility + name = "Invisibility" + desc = "" + overlay_state = "invisibility" + releasedrain = 50 + chargedrain = 0 + chargetime = 0 + charge_max = 30 SECONDS + range = 3 + movement_interrupt = FALSE + sound = 'sound/misc/area.ogg' //This sound doesnt play for some reason. Fix me. + antimagic_allowed = TRUE + +/obj/effect/proc_holder/spell/arcane/invisibility/cast(list/targets, mob/living/user) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + target.visible_message(span_warning("[target] starts to fade into thin air!"), span_notice("You start to become invisible!")) + animate(target, alpha = 0, time = 1 SECONDS, easing = EASE_IN) + target.mob_timers[MT_INVISIBILITY] = world.time + 15 SECONDS + addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, update_sneak_invis), TRUE), 15 SECONDS) + addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, visible_message), span_warning("[target] fades back into view."), span_notice("You become visible again.")), 15 SECONDS) + return FALSE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/lightning.dm b/code/modules/spells/roguetown/arcane/lightning.dm new file mode 100644 index 00000000..1476cdfc --- /dev/null +++ b/code/modules/spells/roguetown/arcane/lightning.dm @@ -0,0 +1,48 @@ +//LIGHTNING--------------- + +/obj/effect/proc_holder/spell/arcane/projectile/lightningbolt + name = "Bolt of Lightning" + desc = "" + overlay_state = "lightning" + sound = 'sound/magic/lightning.ogg' + range = 8 + projectile_type = /obj/projectile/magic/lightning + releasedrain = 30 + chargedrain = 1 + chargetime = 15 + charge_max = 10 SECONDS + movement_interrupt = FALSE + charging_slowdown = 3 + +/obj/projectile/magic/lightning + name = "bolt of lightning" + tracer_type = /obj/effect/projectile/tracer/stun + muzzle_type = null + impact_type = null + hitscan = TRUE + movement_type = UNSTOPPABLE + light_color = LIGHT_COLOR_WHITE + damage = 15 + damage_type = BURN + nodamage = FALSE + speed = 0.3 + flag = "magic" + light_color = "#ffffff" + light_range = 7 + +/obj/projectile/magic/lightning/on_hit(target) + . = ..() + if(ismob(target)) + var/mob/M = target + if(M.anti_magic_check()) + visible_message(span_warning("[src] fizzles on contact with [target]!")) + playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) + qdel(src) + return BULLET_ACT_BLOCK + if(isliving(target)) + var/mob/living/L = target +// for(var/obj/item/I in L.get_equipped_items()) //Maybe add 5 damage for each metal gear in the target? +// if(I.smeltresult == /obj/item/ingot/iron) //More damage if the target is on water tuff too? +// damage += 5 //(dont know it that code work tho) + L.electrocute_act(1, src) + qdel(src) \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/smokescreen.dm b/code/modules/spells/roguetown/arcane/smokescreen.dm new file mode 100644 index 00000000..d1b30d5a --- /dev/null +++ b/code/modules/spells/roguetown/arcane/smokescreen.dm @@ -0,0 +1,68 @@ +//SMOKESCREEN----------------- + +/obj/effect/proc_holder/spell/arcane/smokescreen + name = "Smokescreen" + desc = "" + overlay_state = "smoke" + sound = 'sound/items/firesnuff.ogg' + range = 8 + releasedrain = 30 + chargedrain = 0 + chargetime = 0 + charge_max = 10 SECONDS + smoke_spread = 1 //Just Smoke + smoke_amt = 2 + +/obj/effect/proc_holder/spell/arcane/smokescreen/cast(list/targets,mob/user = usr) + . = ..() + if(isliving(targets[1])) + return TRUE + else if(isopenturf(targets[1])) + return TRUE + return FALSE + +//DENSE SMOKE------------------- + +/obj/effect/proc_holder/spell/arcane/densesmoke + name = "Dense Smoke" + desc = "" + overlay_state = "smoke" + sound = 'sound/items/firesnuff.ogg' + range = 8 + releasedrain = 40 + chargedrain = 1 + chargetime = 10 + charge_max = 15 SECONDS + smoke_spread = 2 //Now it makes the target cough and drop items in hand + smoke_amt = 1 + +/obj/effect/proc_holder/spell/arcane/densesmoke/cast(list/targets,mob/user = usr) + . = ..() + if(isliving(targets[1])) + return TRUE + else if(isopenturf(targets[1])) + return TRUE + return FALSE + +//SLEEPING GAS------------------- + +/obj/effect/proc_holder/spell/arcane/sleepgas + name = "Sleeping Gas" + desc = "" + overlay_state = "smoke" + sound = 'sound/items/firesnuff.ogg' + range = 8 + releasedrain = 60 + chargedrain = 1 + chargetime = 30 + charge_max = 30 SECONDS + smoke_spread = 3 //Now this will make the target to fall asleep + smoke_amt = 2 + +/obj/effect/proc_holder/spell/arcane/sleepgas/cast(list/targets,mob/user = usr) + . = ..() + if(isliving(targets[1])) + return TRUE + else if(isopenturf(targets[1])) + return TRUE + return FALSE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/swap.dm b/code/modules/spells/roguetown/arcane/swap.dm new file mode 100644 index 00000000..2ef5e107 --- /dev/null +++ b/code/modules/spells/roguetown/arcane/swap.dm @@ -0,0 +1,35 @@ +//SWAP PLACES----------------- + +/obj/effect/proc_holder/spell/arcane/swap + name = "Location Swap" + desc = "" + overlay_state = "swap" + sound = 'sound/magic/magic_nulled.ogg' + range = 8 + releasedrain = 50 + chargedrain = 1 + chargetime = 15 + charge_max = 20 SECONDS + charging_slowdown = 3 + var/include_space = FALSE //whether it includes space tiles in possible teleport locations + var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations + +/obj/effect/temp_visual/swap + icon_state = "anom" + layer = ABOVE_MOB_LAYER + plane = GAME_PLANE_UPPER + +/obj/effect/proc_holder/spell/arcane/swap/cast(list/targets, mob/living/user) + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + new /obj/effect/temp_visual/swap(get_turf(user)) + new /obj/effect/temp_visual/swap(get_turf(target)) + var/atom/targl = get_turf(target) + if(do_teleport(target, user, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)) + do_teleport(user, targl, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) + if(ismob(target)) + var/mob/M = target + to_chat(M, span_warning("You find myself somewhere else...")) + return TRUE \ No newline at end of file diff --git a/code/modules/spells/roguetown/arcane/telepathy.dm b/code/modules/spells/roguetown/arcane/telepathy.dm new file mode 100644 index 00000000..ed70c87c --- /dev/null +++ b/code/modules/spells/roguetown/arcane/telepathy.dm @@ -0,0 +1,28 @@ +//TELEPATHY--------------------------- + +/obj/effect/proc_holder/spell/arcane/telepathy + name = "telepathy" + desc = "" + range = 15 + overlay_state = "psy" + sound = list('sound/magic/magnet.ogg') + releasedrain = 20 + chargedrain = 0 + chargetime = 0 + charge_max = 15 SECONDS + warnie = "spellwarning" + no_early_release = TRUE + charging_slowdown = 1 + +/obj/effect/proc_holder/spell/arcane/telepathy/cast(list/targets,mob/user = usr) + . = ..() + if(isliving(targets[1])) + var/mob/living/target = targets[1] + if(target.anti_magic_check(TRUE, TRUE)) + return FALSE + var/input = stripped_input(user, "What message are you sending?", null, "") + if(!input) + return FALSE + to_chat(user, span_warning("I transmit to [target]: " + "[input]")) + to_chat(target, span_warning("You hear a voice in your head saying: ") + span_boldwarning("[input]")) + return TRUE \ No newline at end of file From 2ed389a1b58ce2b819e6dfc6496adbafb589438d Mon Sep 17 00:00:00 2001 From: AllanR Date: Wed, 4 Sep 2024 00:39:14 -0300 Subject: [PATCH 25/38] From single file to a entire folder --- .../modules/spells/roguetown/arcane_spells.dm | 409 ------------------ 1 file changed, 409 deletions(-) delete mode 100644 code/modules/spells/roguetown/arcane_spells.dm diff --git a/code/modules/spells/roguetown/arcane_spells.dm b/code/modules/spells/roguetown/arcane_spells.dm deleted file mode 100644 index 03387dd0..00000000 --- a/code/modules/spells/roguetown/arcane_spells.dm +++ /dev/null @@ -1,409 +0,0 @@ -//IGNITE------------------ - -/obj/effect/proc_holder/spell/arcane/ignite - name = "Ignite" - desc = "" - overlay_state = "flame" - sound = 'sound/items/firelight.ogg' - range = 4 - releasedrain = 30 - chargedrain = 0 - chargetime = 0 - charge_max = 10 SECONDS - -/obj/effect/proc_holder/spell/arcane/ignite/cast(list/targets, mob/user = usr) - . = ..() - if(isliving(targets[1])) - var/mob/living/L = targets[1] - user.visible_message("[user] points at [L]!") - if(L.anti_magic_check(TRUE, TRUE)) - return FALSE - L.adjust_fire_stacks(5) - L.IgniteMob() - addtimer(CALLBACK(L, TYPE_PROC_REF(/mob/living, ExtinguishMob)), 5 SECONDS) - return TRUE - - // Spell interaction with ignitable objects (burn wooden things, light torches up) - else if(isobj(targets[1])) - var/obj/O = targets[1] - if(O.fire_act()) - user.visible_message("[user] points at [O], igniting it in flames!") - return TRUE - else - to_chat(user, span_warning("You point at [O], but it fails to catch fire.")) - return FALSE - return FALSE - -//SMOKESCREEN----------------- - -/obj/effect/proc_holder/spell/arcane/smokescreen - name = "Smoke" - desc = "" - overlay_state = "smoke" - sound = 'sound/items/firesnuff.ogg' - range = 8 - releasedrain = 30 - chargedrain = 0 - chargetime = 0 - charge_max = 10 SECONDS - smoke_spread = 1 - smoke_amt = 2 - -/obj/effect/proc_holder/spell/arcane/smokescreen/cast(list/targets,mob/user = usr) - . = ..() - if(isliving(targets[1])) - return TRUE - else if(isopenturf(targets[1])) - return TRUE - return FALSE - -//SWAP PLACES----------------- - -/obj/effect/proc_holder/spell/arcane/swap - name = "Location Swap" - desc = "" - overlay_state = "swap" - sound = 'sound/magic/magic_nulled.ogg' - range = 8 - releasedrain = 50 - chargedrain = 1 - chargetime = 15 - charge_max = 20 SECONDS - charging_slowdown = 3 - var/include_space = FALSE //whether it includes space tiles in possible teleport locations - var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations - -/obj/effect/temp_visual/swap - icon_state = "anom" - layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER - -/obj/effect/proc_holder/spell/arcane/swap/cast(list/targets, mob/living/user) - if(isliving(targets[1])) - var/mob/living/target = targets[1] - if(target.anti_magic_check(TRUE, TRUE)) - return FALSE - new /obj/effect/temp_visual/swap(get_turf(user)) - new /obj/effect/temp_visual/swap(get_turf(target)) - var/atom/targl = get_turf(target) - if(do_teleport(target, user, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC)) - do_teleport(user, targl, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) - if(ismob(target)) - var/mob/M = target - to_chat(M, span_warning("You find myself somewhere else...")) - return TRUE - -//BLINK----------------- - -/obj/effect/proc_holder/spell/arcane/blink - name = "Blink" - desc = "" - overlay_state = "blink" - sound = 'sound/magic/magic_nulled.ogg' - range = 8 - releasedrain = 50 - chargedrain = 0 - chargetime = 0 - charge_max = 15 SECONDS - var/include_space = FALSE //whether it includes space tiles in possible teleport locations - var/include_dense = FALSE //whether it includes dense tiles in possible teleport locations - -/obj/effect/temp_visual/blink - icon_state = "anom" - layer = ABOVE_MOB_LAYER - plane = GAME_PLANE_UPPER - -/obj/effect/proc_holder/spell/arcane/blink/cast(list/targets,mob/user = usr) - . = ..() - if(isopenturf(targets[1])) - var/atom/location = get_turf(targets[1]) - new /obj/effect/temp_visual/swap(get_turf(user)) - new /obj/effect/temp_visual/swap(get_turf(location)) - do_teleport(user, location, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) - return TRUE - else - return FALSE - - -// BLINDNESS-------------- - -/obj/effect/proc_holder/spell/arcane/blindness - name = "Blindness" - desc = "" - overlay_state = "blindness" - releasedrain = 40 - chargedrain = 0 - chargetime = 0 - charge_max = 10 SECONDS - range = 7 - movement_interrupt = FALSE - sound = 'sound/magic/churn.ogg' - antimagic_allowed = TRUE - -/obj/effect/proc_holder/spell/arcane/blindness/cast(list/targets, mob/user = usr) - if(isliving(targets[1])) - var/mob/living/target = targets[1] - if(target.anti_magic_check(TRUE, TRUE)) - return FALSE - target.visible_message(span_warning("[user] points at [target]'s eyes!"),span_warning("My eyes are covered in darkness!")) - target.blind_eyes(2) - return TRUE - -// INVISIBILITY-------------- - -/obj/effect/proc_holder/spell/arcane/invisibility - name = "Invisibility" - desc = "" - overlay_state = "invisibility" - releasedrain = 50 - chargedrain = 0 - chargetime = 0 - charge_max = 30 SECONDS - range = 3 - movement_interrupt = FALSE - sound = 'sound/misc/area.ogg' //This sound doesnt play for some reason. Fix me. - antimagic_allowed = TRUE - -/obj/effect/proc_holder/spell/arcane/invisibility/cast(list/targets, mob/living/user) - if(isliving(targets[1])) - var/mob/living/target = targets[1] - if(target.anti_magic_check(TRUE, TRUE)) - return FALSE - target.visible_message(span_warning("[target] starts to fade into thin air!"), span_notice("You start to become invisible!")) - animate(target, alpha = 0, time = 1 SECONDS, easing = EASE_IN) - target.mob_timers[MT_INVISIBILITY] = world.time + 15 SECONDS - addtimer(CALLBACK(target, TYPE_PROC_REF(/mob/living, update_sneak_invis), TRUE), 15 SECONDS) - addtimer(CALLBACK(target, TYPE_PROC_REF(/atom/movable, visible_message), span_warning("[target] fades back into view."), span_notice("You become visible again.")), 15 SECONDS) - return FALSE - -//LIGHTNING--------------- - -/obj/effect/proc_holder/spell/arcane/projectile/lightningbolt - name = "Bolt of Lightning" - desc = "" - overlay_state = "lightning" - sound = 'sound/magic/lightning.ogg' - range = 8 - projectile_type = /obj/projectile/magic/lightning - releasedrain = 30 - chargedrain = 1 - chargetime = 15 - charge_max = 10 SECONDS - movement_interrupt = FALSE - charging_slowdown = 3 - -/obj/projectile/magic/lightning - name = "bolt of lightning" - tracer_type = /obj/effect/projectile/tracer/stun - muzzle_type = null - impact_type = null - hitscan = TRUE - movement_type = UNSTOPPABLE - light_color = LIGHT_COLOR_WHITE - damage = 15 - damage_type = BURN - nodamage = FALSE - speed = 0.3 - flag = "magic" - light_color = "#ffffff" - light_range = 7 - -/obj/projectile/magic/lightning/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message(span_warning("[src] fizzles on contact with [target]!")) - playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) - qdel(src) - return BULLET_ACT_BLOCK - if(isliving(target)) - var/mob/living/L = target -// for(var/obj/item/I in L.get_equipped_items()) //Maybe add 5 damage for each metal gear in the target? -// if(I.smeltresult == /obj/item/ingot/iron) //More damage if the target is on water tuff too? -// damage += 5 //(dont know it that code work tho) - L.electrocute_act(1, src) - qdel(src) - - -//FIREBALL------------------------- - -/obj/effect/proc_holder/spell/arcane/projectile/fireball - name = "Fireball" - desc = "" - clothes_req = FALSE - range = 8 - projectile_type = /obj/projectile/magic/aoe/fireball/rogue - overlay_state = "fireball" - sound = list('sound/magic/fireball.ogg') - active = FALSE - releasedrain = 30 - chargedrain = 1 - chargetime = 15 - charge_max = 10 SECONDS - warnie = "spellwarning" - no_early_release = TRUE - movement_interrupt = FALSE - charging_slowdown = 3 - -/obj/effect/proc_holder/spell/arcane/projectile/fireball/fire_projectile(list/targets, mob/living/user) - projectile_var_overrides = list("range" = 8) - return ..() - -/obj/projectile/magic/aoe/fireball/rogue - name = "fireball" - exp_heavy = 0 - exp_light = 0 - exp_flash = 0 - exp_fire = 1 - damage = 10 - damage_type = BURN - nodamage = FALSE - flag = "magic" - hitsound = 'sound/blank.ogg' - - -/obj/projectile/magic/aoe/fireball/rogue/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message(span_warning("[src] fizzles on contact with [target]!")) - playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) - qdel(src) - return BULLET_ACT_BLOCK - - - -/obj/effect/proc_holder/spell/arcane/projectile/fireball/greater - name = "Greater Fireball" - desc = "" - clothes_req = FALSE - range = 8 - projectile_type = /obj/projectile/magic/aoe/fireball/rogue/great - overlay_state = "greaterfireball" - sound = list('sound/magic/fireball.ogg') - releasedrain = 50 - chargedrain = 1 - chargetime = 15 - charge_max = 10 SECONDS - warnie = "spellwarning" - no_early_release = TRUE - movement_interrupt = TRUE - chargedloop = /datum/looping_sound/invokegen - -/obj/projectile/magic/aoe/fireball/rogue/great - name = "fireball" - exp_heavy = 0 - exp_light = 1 - exp_flash = 2 - exp_fire = 2 - flag = "magic" - -//FETCH------------------------- - -/obj/effect/proc_holder/spell/arcane/projectile/fetch - name = "Fetch" - desc = "" - range = 15 - projectile_type = /obj/projectile/magic/fetch - overlay_state = "fetch" - sound = list('sound/magic/magnet.ogg') - releasedrain = 5 - chargedrain = 0 - chargetime = 0 - charge_max = 5 SECONDS - warnie = "spellwarning" - no_early_release = TRUE - charging_slowdown = 1 - -/obj/projectile/magic/fetch/on_hit(target) - . = ..() - if(ismob(target)) - var/mob/M = target - if(M.anti_magic_check()) - visible_message(span_warning("[target] repells the fetch!")) - playsound(get_turf(target), 'sound/magic/magic_nulled.ogg', 100) - qdel(src) - return BULLET_ACT_BLOCK - -//TELEPATHY--------------------------- - -/obj/effect/proc_holder/spell/arcane/telepathy - name = "telepathy" - desc = "" - range = 15 - overlay_state = "psy" - sound = list('sound/magic/magnet.ogg') - releasedrain = 20 - chargedrain = 0 - chargetime = 0 - charge_max = 15 SECONDS - warnie = "spellwarning" - no_early_release = TRUE - charging_slowdown = 1 - -/obj/effect/proc_holder/spell/arcane/telepathy/cast(list/targets,mob/user = usr) - . = ..() - if(isliving(targets[1])) - var/mob/living/target = targets[1] - if(target.anti_magic_check(TRUE, TRUE)) - return FALSE - var/input = stripped_input(user, "What message are you sending?", null, "") - if(!input) - return FALSE - to_chat(user, span_warning("I transmit to [target]: " + "[input]")) - to_chat(target, span_warning("You hear a voice in your head saying: ") + span_boldwarning("[input]")) - return TRUE - -//UNLOCK -------------------------- - -/obj/effect/proc_holder/spell/arcane/unlock - name = "unlock" - desc = "" - range = 1 - overlay_state = "lock" - sound = list('sound/magic/magnet.ogg') - releasedrain = 20 - chargedrain = 1 - chargetime = 30 - charge_max = 15 SECONDS - warnie = "spellwarning" - no_early_release = TRUE - charging_slowdown = 1 - -///obj/effect/proc_holder/spell/arcane/unlock/cast(list/targets,mob/user = usr) -// . = ..() -// if(istype(targets[1], (/obj/structure/mineral_door/ | /obj/structure/closet))) -// var/obj/O = targets[1] -// if(O.door_opened || O.isSwitchingStates) -// to_chat(user, "It is already open.") -// return TRUE -// if(!O.keylock) -// to_chat(user, "There's no lock on this.") -// return TRUE -// return -// if(O.lockbroken) -// to_chat(user, "The lock is broken.") -// return TRUE -// else -// var/prob2open = 0 -// var/diceroll = 0 -// if(user && user.mind) -// prob2open = 20 -// diceroll = rand(0,100) -// for(var/i in 1 to user.mind.get_skill_level(/datum/skill/magic/arcane)) -// prob2open += 5 -// if (diceroll <= prob2open) -// if(istype(targets[1], /obj/structure/mineral_door/) -// lock_toggle(O) -// if(istype(targets[1], /obj/structure/closet) -// togglelock(O) -// else -// to_chat(user, "The spell fails to unlock it...") -// -// return TRUE -// else -// return TRUE -//I cant code for shit, will rethink this later. - From a88eceb0424d845b1bc2420c8c1bdee463de68fe Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:15:36 -0300 Subject: [PATCH 26/38] organizing spelllist --- .../jobs/job_types/roguetown/nobility/lord.dm | 62 +------------------ 1 file changed, 2 insertions(+), 60 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/nobility/lord.dm b/code/modules/jobs/job_types/roguetown/nobility/lord.dm index 7f1c7028..fda6ad66 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/lord.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/lord.dm @@ -65,12 +65,12 @@ GLOBAL_LIST_EMPTY(lord_titles) belt = /obj/item/storage/belt/rogue/leather/plaquegold l_hand = /obj/item/rogueweapon/lordscepter backpack_contents = list(/obj/item/rogueweapon/huntingknife/idagger/steel/special = 1) - id = /obj/item/clothing/ring/active/nomag + id = /obj/item/clothing/ring/active/nomag if(H.gender == MALE) pants = /obj/item/clothing/under/roguetown/tights/black shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/black armor = /obj/item/clothing/suit/roguetown/armor/leather/vest/black - shoes = /obj/item/clothing/shoes/roguetown/boots + shoes = /obj/item/clothing/shoes/roguetown/boots if(H.mind) H.mind.adjust_skillrank(/datum/skill/combat/polearms, 2, TRUE) H.mind.adjust_skillrank(/datum/skill/combat/maces, 2, TRUE) @@ -140,61 +140,3 @@ GLOBAL_LIST_EMPTY(lord_titles) else family_guy.fully_replace_character_name(family_guy.real_name, family_guy.real_name + " " + GLOB.lordsurname) return family_guy.real_name - -/obj/effect/proc_holder/spell/self/grant_title - name = "Grant Title" - desc = "Grant someone a title of honor... Or shame." - antimagic_allowed = TRUE - charge_max = 100 - /// Maximum range for title granting - var/title_range = 3 - /// Maximum length for the title - var/title_length = 42 - -/obj/effect/proc_holder/spell/self/grant_title/cast(list/targets, mob/user = usr) - . = ..() - var/granted_title = input(user, "What title do you wish to grant?", "[name]") as null|text - granted_title = reject_bad_text(granted_title, title_length) - if(!granted_title) - return - var/list/recruitment = list() - for(var/mob/living/carbon/human/village_idiot in (get_hearers_in_view(title_range, user) - user)) - //not allowed - if(!can_title(village_idiot)) - continue - recruitment[village_idiot.name] = village_idiot - if(!length(recruitment)) - to_chat(user, span_warning("There are no potential honoraries in range.")) - return - var/inputty = input(user, "Select an honorary!", "[name]") as anything in recruitment - if(inputty) - var/mob/living/carbon/human/recruit = recruitment[inputty] - if(!QDELETED(recruit) && (recruit in get_hearers_in_view(title_range, user))) - INVOKE_ASYNC(src, PROC_REF(village_idiotify), recruit, user, granted_title) - else - to_chat(user, span_warning("Honorific failed!")) - else - to_chat(user, span_warning("Honorific cancelled.")) - -/obj/effect/proc_holder/spell/self/grant_title/proc/can_title(mob/living/carbon/human/recruit) - //wtf - if(QDELETED(recruit)) - return FALSE - //need a mind - if(!recruit.mind) - return FALSE - //need to see their damn face - if(!recruit.get_face_name(null)) - return FALSE - return TRUE - -/obj/effect/proc_holder/spell/self/grant_title/proc/village_idiotify(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter, granted_title) - if(QDELETED(recruit) || QDELETED(recruiter) || !granted_title) - return FALSE - if(GLOB.lord_titles[recruit.real_name]) - recruiter.say("I HEREBY STRIP YOU, [uppertext(recruit.name)], OF THE TITLE OF [uppertext(GLOB.lord_titles[recruit.real_name])]!") - GLOB.lord_titles -= recruit.real_name - return FALSE - recruiter.say("I HEREBY GRANT YOU, [uppertext(recruit.name)], THE TITLE OF [uppertext(granted_title)]!") - GLOB.lord_titles[recruit.real_name] = granted_title - return TRUE From 40ddacd33f57cf5d2afa9164caca28d94fb1a274 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:17:45 -0300 Subject: [PATCH 27/38] organizing spelllist --- code/modules/jobs/job_types/roguetown/nobility/lady.dm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/nobility/lady.dm b/code/modules/jobs/job_types/roguetown/nobility/lady.dm index ee34bb20..ff3b07b6 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/lady.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/lady.dm @@ -71,12 +71,3 @@ H.change_stat("speed", 2) H.change_stat("perception", 2) H.change_stat("fortune", 5) - -/obj/effect/proc_holder/spell/self/convertrole/servant - name = "Recruit Servant" - new_role = "Servant" - recruitment_faction = "Servants" - recruitment_message = "Serve the crown, %RECRUIT!" - accept_message = "FOR THE CROWN!" - refuse_message = "I refuse." - charge_max = 100 From 285f3c5407bf29e9cc071410ee6518195766e070 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:18:23 -0300 Subject: [PATCH 28/38] organizing spelllist --- .../job_types/roguetown/nobility/sheriff.dm | 88 ------------------- 1 file changed, 88 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/nobility/sheriff.dm b/code/modules/jobs/job_types/roguetown/nobility/sheriff.dm index ab2d7063..0ecad3d0 100644 --- a/code/modules/jobs/job_types/roguetown/nobility/sheriff.dm +++ b/code/modules/jobs/job_types/roguetown/nobility/sheriff.dm @@ -91,91 +91,3 @@ ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) H.verbs |= /mob/proc/haltyell - -/obj/effect/proc_holder/spell/self/convertrole - name = "Recruit Beggar" - desc = "Recruit someone to your cause." - antimagic_allowed = TRUE - charge_max = 100 - /// Role given if recruitment is accepted - var/new_role = "Beggar" - /// Faction shown to the user in the recruitment prompt - var/recruitment_faction = "Beggars" - /// Message the recruiter gives - var/recruitment_message = "Serve the beggars, %RECRUIT!" - /// Range to search for potential recruits - var/recruitment_range = 3 - /// Say message when the recruit accepts - var/accept_message = "I will serve!" - /// Say message when the recruit refuses - var/refuse_message = "I refuse." - -/obj/effect/proc_holder/spell/self/convertrole/cast(list/targets,mob/user = usr) - . = ..() - var/list/recruitment = list() - for(var/mob/living/carbon/human/recruit in (get_hearers_in_view(recruitment_range, user) - user)) - //not allowed - if(!can_convert(recruit)) - continue - recruitment[recruit.name] = recruit - if(!length(recruitment)) - to_chat(user, span_warning("There are no potential recruits in range.")) - return - var/inputty = input(user, "Select a potential recruit!", "[name]") as anything in recruitment - if(inputty) - var/mob/living/carbon/human/recruit = recruitment[inputty] - if(!QDELETED(recruit) && (recruit in get_hearers_in_view(recruitment_range, user))) - INVOKE_ASYNC(src, PROC_REF(convert), recruit, user) - else - to_chat(user, span_warning("Recruitment failed!")) - else - to_chat(user, span_warning("Recruitment cancelled.")) - -/obj/effect/proc_holder/spell/self/convertrole/proc/can_convert(mob/living/carbon/human/recruit) - //wtf - if(QDELETED(recruit)) - return FALSE - //need a mind - if(!recruit.mind) - return FALSE - //only migrants and peasants - if(!(recruit.job in GLOB.peasant_positions) && \ - !(recruit.job in GLOB.yeoman_positions) && \ - !(recruit.job in GLOB.allmig_positions) && \ - !(recruit.job in GLOB.mercenary_positions)) - return FALSE - //need to see their damn face - if(!recruit.get_face_name(null)) - return FALSE - return TRUE - -/obj/effect/proc_holder/spell/self/convertrole/proc/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) - if(QDELETED(recruit) || QDELETED(recruiter)) - return FALSE - recruiter.say(replacetext(recruitment_message, "%RECRUIT", "[recruit]"), forced = "[name]") - var/prompt = alert(recruit, "Do you wish to become a [new_role]?", "[recruitment_faction] Recruitment", "Yes", "No") - if(QDELETED(recruit) || QDELETED(recruiter) || !(recruiter in get_hearers_in_view(recruitment_range, recruit))) - return FALSE - if(prompt != "Yes") - if(refuse_message) - recruit.say(refuse_message, forced = "[name]") - return FALSE - if(accept_message) - recruit.say(accept_message, forced = "[name]") - if(new_role) - recruit.job = new_role - return TRUE - -/obj/effect/proc_holder/spell/self/convertrole/guard - name = "Recruit Guardsmen" - new_role = "Watchman" - recruitment_faction = "Watchman" - recruitment_message = "Serve the town guard, %RECRUIT!" - accept_message = "FOR THE KING!" - refuse_message = "I refuse." - -/obj/effect/proc_holder/spell/self/convertrole/guard/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) - . = ..() - if(!.) - return - recruit.verbs |= /mob/proc/haltyell From fb1eb8b3b3a71fdc0d15b5d1975e247bb31e4795 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:19:22 -0300 Subject: [PATCH 29/38] organizing spelllist --- .../jobs/job_types/roguetown/church/priest.dm | 16 ---------------- 1 file changed, 16 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/church/priest.dm b/code/modules/jobs/job_types/roguetown/church/priest.dm index 71f321eb..d2d1d1c8 100644 --- a/code/modules/jobs/job_types/roguetown/church/priest.dm +++ b/code/modules/jobs/job_types/roguetown/church/priest.dm @@ -154,19 +154,3 @@ to_chat(src, span_warning("I need to do this from the chapel.")) return FALSE priority_announce("[inputty]", title = "The Priest Speaks", sound = 'sound/misc/bell.ogg') - -/obj/effect/proc_holder/spell/self/convertrole/templar - name = "Recruit Templar" - new_role = "Templar" - recruitment_faction = "Templars" - recruitment_message = "Serve the nine, %RECRUIT!" - accept_message = "FOR THE NINE!" - refuse_message = "I refuse." - -/obj/effect/proc_holder/spell/self/convertrole/monk - name = "Recruit Acolyte" - new_role = "Acolyte" - recruitment_faction = "Church" - recruitment_message = "Serve the nine, %RECRUIT!" - accept_message = "FOR THE NINE!" - refuse_message = "I refuse." From e974918a42c2706c3b931dc3a5b17447129e0c02 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:20:01 -0300 Subject: [PATCH 30/38] organizing spelllist --- .../job_types/roguetown/garrison/bogmaster.dm | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/garrison/bogmaster.dm b/code/modules/jobs/job_types/roguetown/garrison/bogmaster.dm index 59c34418..1a42c946 100644 --- a/code/modules/jobs/job_types/roguetown/garrison/bogmaster.dm +++ b/code/modules/jobs/job_types/roguetown/garrison/bogmaster.dm @@ -86,18 +86,3 @@ ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) ADD_TRAIT(H, TRAIT_STEELHEARTED, TRAIT_GENERIC) - -/obj/effect/proc_holder/spell/self/convertrole/bog - name = "Recruit Bogmen" - new_role = "Bog Guard" - recruitment_faction = "Bog Guard" - recruitment_message = "Serve the bog, %RECRUIT!" - accept_message = "FOR THE BOG!" - refuse_message = "I refuse." - -/obj/effect/proc_holder/spell/self/convertrole/bog/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) - . = ..() - if(!.) - return - recruit.verbs |= /mob/proc/haltyell - From 763f27f891f837b1982cc1721a8b5918982de9db Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:22:37 -0300 Subject: [PATCH 31/38] adding 1 arcane because he has fetch --- code/modules/jobs/job_types/roguetown/yeomen/archivist.dm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm b/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm index a21f10a6..547a0a70 100644 --- a/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm +++ b/code/modules/jobs/job_types/roguetown/yeomen/archivist.dm @@ -6,7 +6,7 @@ faction = "Station" total_positions = 1 spawn_positions = 1 - spells = list(/obj/effect/proc_holder/spell/invoked/projectile/fetch) + spells = list(/obj/effect/proc_holder/spell/arcane/projectile/fetch) allowed_races = list( "Humen", "Elf", @@ -46,9 +46,8 @@ H.mind.adjust_skillrank(/datum/skill/misc/alchemy, 6, TRUE) H.mind.adjust_skillrank(/datum/skill/misc/medicine, 3, TRUE) H.mind.adjust_skillrank(/datum/skill/misc/riding, 2, TRUE) + H.mind.adjust_skillrank(/datum/skill/magic/arcane, 1, TRUE) H.change_stat("strength", -2) H.change_stat("intelligence", 8) H.change_stat("constitution", -2) H.change_stat("speed", -2) - - From e877bd60eae5d0f3d93fe8b12474490df36c5595 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:23:55 -0300 Subject: [PATCH 32/38] organizing spelllist --- .../antagonists/roguetown/villain/peasantrebel.dm | 15 --------------- 1 file changed, 15 deletions(-) diff --git a/code/modules/antagonists/roguetown/villain/peasantrebel.dm b/code/modules/antagonists/roguetown/villain/peasantrebel.dm index c6d1962b..3636902e 100644 --- a/code/modules/antagonists/roguetown/villain/peasantrebel.dm +++ b/code/modules/antagonists/roguetown/villain/peasantrebel.dm @@ -111,21 +111,6 @@ return FALSE return TRUE -/obj/effect/proc_holder/spell/self/rebelconvert - name = "RECRUIT REBELS" - desc = "!" - antimagic_allowed = TRUE - charge_max = 150 - -/obj/effect/proc_holder/spell/self/rebelconvert/cast(list/targets,mob/user = usr) - ..() - var/inputty = input("Make a speech!", "ROGUETOWN") as text|null - if(inputty) - user.say(inputty, forced = "spell") - var/datum/antagonist/prebel/PR = user.mind.has_antag_datum(/datum/antagonist/prebel) - for(var/mob/living/carbon/human/L in get_hearers_in_view(6, get_turf(user))) - addtimer(CALLBACK(L,TYPE_PROC_REF(/mob/living/carbon/human, rev_ask), user,PR,inputty),1) - /mob/living/carbon/human/proc/rev_ask(mob/living/carbon/human/guy,datum/antagonist/prebel/mind_datum,offer) if(!guy || !mind_datum || !offer) return From a1e583415677e197ae0bf97533da2a38e44bf742 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:25:41 -0300 Subject: [PATCH 33/38] organizing spelllist --- .../spells/roguetown/other/grant_title.dm | 60 +++++++ .../spells/roguetown/other/recruiting.dm | 154 ++++++++++++++++++ 2 files changed, 214 insertions(+) create mode 100644 code/modules/spells/roguetown/other/grant_title.dm create mode 100644 code/modules/spells/roguetown/other/recruiting.dm diff --git a/code/modules/spells/roguetown/other/grant_title.dm b/code/modules/spells/roguetown/other/grant_title.dm new file mode 100644 index 00000000..03bd7da9 --- /dev/null +++ b/code/modules/spells/roguetown/other/grant_title.dm @@ -0,0 +1,60 @@ +//Grant Title--------------------- + +/obj/effect/proc_holder/spell/self/grant_title + name = "Grant Title" + desc = "Grant someone a title of honor... Or shame." + overlay_state = "recruit" + antimagic_allowed = TRUE + charge_max = 100 + /// Maximum range for title granting + var/title_range = 3 + /// Maximum length for the title + var/title_length = 42 + +/obj/effect/proc_holder/spell/self/grant_title/cast(list/targets, mob/user = usr) + . = ..() + var/granted_title = input(user, "What title do you wish to grant?", "[name]") as null|text + granted_title = reject_bad_text(granted_title, title_length) + if(!granted_title) + return + var/list/recruitment = list() + for(var/mob/living/carbon/human/village_idiot in (get_hearers_in_view(title_range, user) - user)) + //not allowed + if(!can_title(village_idiot)) + continue + recruitment[village_idiot.name] = village_idiot + if(!length(recruitment)) + to_chat(user, span_warning("There are no potential honoraries in range.")) + return + var/inputty = input(user, "Select an honorary!", "[name]") as anything in recruitment + if(inputty) + var/mob/living/carbon/human/recruit = recruitment[inputty] + if(!QDELETED(recruit) && (recruit in get_hearers_in_view(title_range, user))) + INVOKE_ASYNC(src, PROC_REF(village_idiotify), recruit, user, granted_title) + else + to_chat(user, span_warning("Honorific failed!")) + else + to_chat(user, span_warning("Honorific cancelled.")) + +/obj/effect/proc_holder/spell/self/grant_title/proc/can_title(mob/living/carbon/human/recruit) + //wtf + if(QDELETED(recruit)) + return FALSE + //need a mind + if(!recruit.mind) + return FALSE + //need to see their damn face + if(!recruit.get_face_name(null)) + return FALSE + return TRUE + +/obj/effect/proc_holder/spell/self/grant_title/proc/village_idiotify(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter, granted_title) + if(QDELETED(recruit) || QDELETED(recruiter) || !granted_title) + return FALSE + if(GLOB.lord_titles[recruit.real_name]) + recruiter.say("I HEREBY STRIP YOU, [uppertext(recruit.name)], OF THE TITLE OF [uppertext(GLOB.lord_titles[recruit.real_name])]!") + GLOB.lord_titles -= recruit.real_name + return FALSE + recruiter.say("I HEREBY GRANT YOU, [uppertext(recruit.name)], THE TITLE OF [uppertext(granted_title)]!") + GLOB.lord_titles[recruit.real_name] = granted_title + return TRUE \ No newline at end of file diff --git a/code/modules/spells/roguetown/other/recruiting.dm b/code/modules/spells/roguetown/other/recruiting.dm new file mode 100644 index 00000000..3aab7e8b --- /dev/null +++ b/code/modules/spells/roguetown/other/recruiting.dm @@ -0,0 +1,154 @@ +/obj/effect/proc_holder/spell/self/convertrole + name = "Recruit Beggar" + desc = "Recruit someone to your cause." + overlay_state = "recruit" + antimagic_allowed = TRUE + charge_max = 100 + /// Role given if recruitment is accepted + var/new_role = "Beggar" + /// Faction shown to the user in the recruitment prompt + var/recruitment_faction = "Beggars" + /// Message the recruiter gives + var/recruitment_message = "Serve the beggars, %RECRUIT!" + /// Range to search for potential recruits + var/recruitment_range = 3 + /// Say message when the recruit accepts + var/accept_message = "I will serve!" + /// Say message when the recruit refuses + var/refuse_message = "I refuse." + +/obj/effect/proc_holder/spell/self/convertrole/cast(list/targets,mob/user = usr) + . = ..() + var/list/recruitment = list() + for(var/mob/living/carbon/human/recruit in (get_hearers_in_view(recruitment_range, user) - user)) + //not allowed + if(!can_convert(recruit)) + continue + recruitment[recruit.name] = recruit + if(!length(recruitment)) + to_chat(user, span_warning("There are no potential recruits in range.")) + return + var/inputty = input(user, "Select a potential recruit!", "[name]") as anything in recruitment + if(inputty) + var/mob/living/carbon/human/recruit = recruitment[inputty] + if(!QDELETED(recruit) && (recruit in get_hearers_in_view(recruitment_range, user))) + INVOKE_ASYNC(src, PROC_REF(convert), recruit, user) + else + to_chat(user, span_warning("Recruitment failed!")) + else + to_chat(user, span_warning("Recruitment cancelled.")) + +/obj/effect/proc_holder/spell/self/convertrole/proc/can_convert(mob/living/carbon/human/recruit) + //wtf + if(QDELETED(recruit)) + return FALSE + //need a mind + if(!recruit.mind) + return FALSE + //only migrants and peasants + if(!(recruit.job in GLOB.peasant_positions) && \ + !(recruit.job in GLOB.yeoman_positions) && \ + !(recruit.job in GLOB.allmig_positions) && \ + !(recruit.job in GLOB.mercenary_positions)) + return FALSE + //need to see their damn face + if(!recruit.get_face_name(null)) + return FALSE + return TRUE + +/obj/effect/proc_holder/spell/self/convertrole/proc/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) + if(QDELETED(recruit) || QDELETED(recruiter)) + return FALSE + recruiter.say(replacetext(recruitment_message, "%RECRUIT", "[recruit]"), forced = "[name]") + var/prompt = alert(recruit, "Do you wish to become a [new_role]?", "[recruitment_faction] Recruitment", "Yes", "No") + if(QDELETED(recruit) || QDELETED(recruiter) || !(recruiter in get_hearers_in_view(recruitment_range, recruit))) + return FALSE + if(prompt != "Yes") + if(refuse_message) + recruit.say(refuse_message, forced = "[name]") + return FALSE + if(accept_message) + recruit.say(accept_message, forced = "[name]") + if(new_role) + recruit.job = new_role + return TRUE + +//GUARD-------------------------------------- + +/obj/effect/proc_holder/spell/self/convertrole/guard + name = "Recruit Guardsmen" + new_role = "Watchman" + recruitment_faction = "Watchman" + recruitment_message = "Serve the town guard, %RECRUIT!" + accept_message = "FOR THE KING!" + refuse_message = "I refuse." + +/obj/effect/proc_holder/spell/self/convertrole/guard/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) + . = ..() + if(!.) + return + recruit.verbs |= /mob/proc/haltyell + +//BOG GUARD-------------------------------------- + +/obj/effect/proc_holder/spell/self/convertrole/bog + name = "Recruit Bogmen" + new_role = "Bog Guard" + recruitment_faction = "Bog Guard" + recruitment_message = "Serve the bog, %RECRUIT!" + accept_message = "FOR THE BOG!" + refuse_message = "I refuse." + +/obj/effect/proc_holder/spell/self/convertrole/bog/convert(mob/living/carbon/human/recruit, mob/living/carbon/human/recruiter) + . = ..() + if(!.) + return + recruit.verbs |= /mob/proc/haltyell + +//SERVANT-------------------------------------- + +/obj/effect/proc_holder/spell/self/convertrole/servant + name = "Recruit Servant" + new_role = "Servant" + recruitment_faction = "Servants" + recruitment_message = "Serve the crown, %RECRUIT!" + accept_message = "FOR THE CROWN!" + refuse_message = "I refuse." + charge_max = 100 + +//TEMPLAR-------------------------------------- + +/obj/effect/proc_holder/spell/self/convertrole/templar + name = "Recruit Templar" + new_role = "Templar" + recruitment_faction = "Templars" + recruitment_message = "Serve the nine, %RECRUIT!" + accept_message = "FOR THE NINE!" + refuse_message = "I refuse." + +//ACOLYTE-------------------------------------- + +/obj/effect/proc_holder/spell/self/convertrole/monk + name = "Recruit Acolyte" + new_role = "Acolyte" + recruitment_faction = "Church" + recruitment_message = "Serve the nine, %RECRUIT!" + accept_message = "FOR THE NINE!" + refuse_message = "I refuse." + +//REBEL-------------------------------------- + +/obj/effect/proc_holder/spell/self/rebelconvert + name = "RECRUIT REBELS" + desc = "!" + antimagic_allowed = TRUE + charge_max = 150 + +/obj/effect/proc_holder/spell/self/rebelconvert/cast(list/targets,mob/user = usr) + ..() + var/inputty = input("Make a speech!", "ROGUETOWN") as text|null + if(inputty) + user.say(inputty, forced = "spell") + var/datum/antagonist/prebel/PR = user.mind.has_antag_datum(/datum/antagonist/prebel) + for(var/mob/living/carbon/human/L in get_hearers_in_view(6, get_turf(user))) + addtimer(CALLBACK(L,TYPE_PROC_REF(/mob/living/carbon/human, rev_ask), user,PR,inputty),1) \ No newline at end of file From 39b2a9bb1c254e173c85931667b4ece16852ffd1 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:26:44 -0300 Subject: [PATCH 34/38] organizing spelllist --- code/modules/spells/roguetown/{ => other}/jester.dm | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename code/modules/spells/roguetown/{ => other}/jester.dm (100%) diff --git a/code/modules/spells/roguetown/jester.dm b/code/modules/spells/roguetown/other/jester.dm similarity index 100% rename from code/modules/spells/roguetown/jester.dm rename to code/modules/spells/roguetown/other/jester.dm From c37d4bb326231a77518a7e506587e0d12d907af4 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:37:32 -0300 Subject: [PATCH 35/38] not necessary for this pull --- .../adventurer/types/combat/rare/duskblade.dm | 98 ------------------- 1 file changed, 98 deletions(-) delete mode 100644 code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm diff --git a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm b/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm deleted file mode 100644 index a7fc711a..00000000 --- a/code/modules/jobs/job_types/roguetown/adventurer/types/combat/rare/duskblade.dm +++ /dev/null @@ -1,98 +0,0 @@ -//duskblade - -/datum/advclass/duskblade - name = "Duskblade" - tutorial = "The duskblade blurs the line between spellcaster and warrior,\ - marrying the power of magic with hand-to-hand combat prowess. A student of ancient elven spellcasting techniques,\ - the duskblade combines arcane spellcasting with the combat skills of a fighter." - allowed_races = list( - "Humen", - "Elf", - "Half-Elf", - "Dwarf", - "Tiefling", - "Argonian", - "Dark Elf", - "Aasimar", - "Half Orc" - ) - outfit = /datum/outfit/job/roguetown/adventurer/dblade - pickprob = 11 - traits_applied = list(TRAIT_MEDIUMARMOR, TRAIT_DODGEEXPERT) - category_tags = list(CTAG_ADVENTURER) - - -/datum/outfit/job/roguetown/adventurer/dblade/pre_equip(mob/living/carbon/human/H) - ..() - H.mind.adjust_skillrank(/datum/skill/combat/crossbows, rand(1,2), TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/polearms, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/maces, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/axes, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/bows, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/wrestling, 2, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/unarmed, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/athletics, 3, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/swords, 3, TRUE) - H.mind.adjust_skillrank(/datum/skill/combat/knives, rand(1,2), TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/sneaking, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/swimming, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/climbing, 2, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/riding, pick(1,2), TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/medicine, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/reading, 2, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/alchemy, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/magic/arcane, 1, TRUE) - H.mind.adjust_skillrank(/datum/skill/misc/medicine, 1, TRUE) - if(H.age == AGE_OLD) - H.mind.adjust_skillrank(/datum/skill/magic/arcane, pick(1,2,3), TRUE) - H.change_stat("strength", 2) - H.change_stat("endurance", 1) - H.change_stat("constitution", 1) - H.change_stat("intelligence", 2) - H.change_stat("speed", 1) - shoes = /obj/item/clothing/shoes/roguetown/boots - gloves = /obj/item/clothing/gloves/roguetown/leather - belt = /obj/item/storage/belt/rogue/leather - neck = /obj/item/storage/belt/rogue/pouch/coins/poor - shirt = /obj/item/clothing/suit/roguetown/shirt/undershirt/random - if(prob(70)) - armor = /obj/item/clothing/suit/roguetown/armor/chainmail/hauberk - else if(prob(50)) - armor = /obj/item/clothing/suit/roguetown/armor/plate/half/iron - else - armor = /obj/item/clothing/suit/roguetown/armor/plate/scale - if(prob(25)) - mask = /obj/item/clothing/mask/rogue/facemask - backl = /obj/item/storage/backpack/rogue/satchel - backr = /obj/item/rogueweapon/shield/wood - beltl = /obj/item/rogueweapon/huntingknife - if(prob(50)) - beltr = /obj/item/rogueweapon/sword/iron - else - beltr = /obj/item/rogueweapon/sword/sabre - if(H.gender == MALE) - pants = /obj/item/clothing/under/roguetown/tights/black - else - H.underwear = "Femleotard" - H.underwear_color = CLOTHING_BLACK - H.update_body() - pants = /obj/item/clothing/under/roguetown/tights/black - - var/list/possible_spells = list( - "/obj/effect/proc_holder/spell/arcane/telepathy", - "/obj/effect/proc_holder/spell/arcane/ignite", - "/obj/effect/proc_holder/spell/arcane/blink", - "/obj/effect/proc_holder/spell/arcane/swap", - "/obj/effect/proc_holder/spell/arcane/smokescreen", - "/obj/effect/proc_holder/spell/arcane/blindness", - "/obj/effect/proc_holder/spell/arcane/invisibility", - "/obj/effect/proc_holder/spell/arcane/projectile/fetch" - ) - H.mind.AddSpell(pick(new /obj/effect/proc_holder/spell/arcane/projectile/fireball,new /obj/effect/proc_holder/spell/arcane/projectile/lightningbolt)) - var/random_item = pick(possible_spells) - var typepath = text2path(random_item) - H.mind.AddSpell(new typepath) - possible_spells = null - - ADD_TRAIT(H, TRAIT_HEAVYARMOR, TRAIT_GENERIC) - ADD_TRAIT(H, TRAIT_MEDIUMARMOR, TRAIT_GENERIC) From c3e9f0fc8e9a484542c2175f2de04f6845eb6933 Mon Sep 17 00:00:00 2001 From: AllanR Date: Thu, 5 Sep 2024 13:55:08 -0300 Subject: [PATCH 36/38] tiny fix --- code/modules/spells/roguetown/other/recruiting.dm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/modules/spells/roguetown/other/recruiting.dm b/code/modules/spells/roguetown/other/recruiting.dm index 3aab7e8b..1f9369f6 100644 --- a/code/modules/spells/roguetown/other/recruiting.dm +++ b/code/modules/spells/roguetown/other/recruiting.dm @@ -141,6 +141,7 @@ /obj/effect/proc_holder/spell/self/rebelconvert name = "RECRUIT REBELS" desc = "!" + overlay_state = "recruit" antimagic_allowed = TRUE charge_max = 150 @@ -151,4 +152,4 @@ user.say(inputty, forced = "spell") var/datum/antagonist/prebel/PR = user.mind.has_antag_datum(/datum/antagonist/prebel) for(var/mob/living/carbon/human/L in get_hearers_in_view(6, get_turf(user))) - addtimer(CALLBACK(L,TYPE_PROC_REF(/mob/living/carbon/human, rev_ask), user,PR,inputty),1) \ No newline at end of file + addtimer(CALLBACK(L,TYPE_PROC_REF(/mob/living/carbon/human, rev_ask), user,PR,inputty),1) From 0c93af29994985ae4971845f3910132816ad3f03 Mon Sep 17 00:00:00 2001 From: AllanR Date: Fri, 6 Sep 2024 16:30:54 -0300 Subject: [PATCH 37/38] shit was busted you must at least see where you want to teleport into --- code/modules/spells/roguetown/arcane/blink.dm | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/code/modules/spells/roguetown/arcane/blink.dm b/code/modules/spells/roguetown/arcane/blink.dm index b5f8f9d5..93446d3e 100644 --- a/code/modules/spells/roguetown/arcane/blink.dm +++ b/code/modules/spells/roguetown/arcane/blink.dm @@ -22,9 +22,9 @@ . = ..() if(isopenturf(targets[1])) var/atom/location = get_turf(targets[1]) - new /obj/effect/temp_visual/swap(get_turf(user)) - new /obj/effect/temp_visual/swap(get_turf(location)) - do_teleport(user, location, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) - return TRUE - else - return FALSE \ No newline at end of file + if(location in oview(range,user)) + new /obj/effect/temp_visual/swap(get_turf(user)) + new /obj/effect/temp_visual/swap(get_turf(location)) + do_teleport(user, location, forceMove = TRUE, channel = TELEPORT_CHANNEL_MAGIC) + return TRUE + return FALSE From 4750259d78f0ef7a6e16ab5e179a334a9c538d6b Mon Sep 17 00:00:00 2001 From: AllanR Date: Sat, 7 Sep 2024 14:40:44 -0300 Subject: [PATCH 38/38] Update roguetown.dme --- roguetown.dme | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/roguetown.dme b/roguetown.dme index 6948c28a..40cdb514 100644 --- a/roguetown.dme +++ b/roguetown.dme @@ -3257,8 +3257,8 @@ #include "code\modules\shuttle\white_ship.dm" #include "code\modules\spells\spell.dm" #include "code\modules\spells\roguetown\_roguetown.dm" +#include "code\modules\spells\roguetown\arcane.dm" #include "code\modules\spells\roguetown\confessor.dm" -#include "code\modules\spells\roguetown\jester.dm" #include "code\modules\spells\roguetown\monk.dm" #include "code\modules\spells\roguetown\necromancer.dm" #include "code\modules\spells\roguetown\priest.dm" @@ -3270,6 +3270,19 @@ #include "code\modules\spells\roguetown\acolyte\necra.dm" #include "code\modules\spells\roguetown\acolyte\noc.dm" #include "code\modules\spells\roguetown\acolyte\pestra.dm" +#include "code\modules\spells\roguetown\arcane\blindness.dm" +#include "code\modules\spells\roguetown\arcane\blink.dm" +#include "code\modules\spells\roguetown\arcane\fetch.dm" +#include "code\modules\spells\roguetown\arcane\fireball.dm" +#include "code\modules\spells\roguetown\arcane\ignite.dm" +#include "code\modules\spells\roguetown\arcane\invisibility.dm" +#include "code\modules\spells\roguetown\arcane\lightning.dm" +#include "code\modules\spells\roguetown\arcane\smokescreen.dm" +#include "code\modules\spells\roguetown\arcane\swap.dm" +#include "code\modules\spells\roguetown\arcane\telepathy.dm" +#include "code\modules\spells\roguetown\other\grant_title.dm" +#include "code\modules\spells\roguetown\other\jester.dm" +#include "code\modules\spells\roguetown\other\recruiting.dm" #include "code\modules\spells\spell_types\aimed.dm" #include "code\modules\spells\spell_types\area_teleport.dm" #include "code\modules\spells\spell_types\barnyard.dm"