Skip to content

Commit

Permalink
Merge pull request #50 from tioluko/main
Browse files Browse the repository at this point in the history
Arcane Spellcasting Update
  • Loading branch information
russ-money authored Sep 7, 2024
2 parents 2f62045 + 4750259 commit b42d988
Show file tree
Hide file tree
Showing 30 changed files with 925 additions and 221 deletions.
15 changes: 0 additions & 15 deletions code/modules/antagonists/roguetown/villain/peasantrebel.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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 = "!"
Expand Down Expand Up @@ -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


//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
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down Expand Up @@ -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()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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
16 changes: 0 additions & 16 deletions code/modules/jobs/job_types/roguetown/church/priest.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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."
22 changes: 21 additions & 1 deletion code/modules/jobs/job_types/roguetown/courtier/magician.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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. \
Expand Down Expand Up @@ -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

15 changes: 0 additions & 15 deletions code/modules/jobs/job_types/roguetown/garrison/bogmaster.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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

9 changes: 0 additions & 9 deletions code/modules/jobs/job_types/roguetown/nobility/lady.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
62 changes: 2 additions & 60 deletions code/modules/jobs/job_types/roguetown/nobility/lord.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down Expand Up @@ -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
88 changes: 0 additions & 88 deletions code/modules/jobs/job_types/roguetown/nobility/sheriff.dm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Loading

0 comments on commit b42d988

Please sign in to comment.