Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arcane Spellcasting Update #50

Merged
merged 44 commits into from
Sep 7, 2024
Merged
Show file tree
Hide file tree
Changes from 38 commits
Commits
Show all changes
44 commits
Select commit Hold shift + click to select a range
d13f4fe
Create arcane.dm
tioluko Aug 30, 2024
0937829
Create arcane_spells.dm
tioluko Aug 30, 2024
acde756
addon for _roguetown.dm to help separating arcane and divine spells
tioluko Aug 30, 2024
895f2e2
arcane spell list
tioluko Aug 30, 2024
2a974a1
Update arcane.dm
tioluko Aug 31, 2024
54f8656
Arcane spell list
tioluko Aug 31, 2024
44c0d19
Just making the new spell icons to work
tioluko Aug 31, 2024
88eaa93
Updated icons
tioluko Aug 31, 2024
73e7318
Fix swap and add Telepathy
tioluko Sep 1, 2024
cb31511
Update arcane_spells.dm
tioluko Sep 1, 2024
73a06c0
Merge branch 'russ-money:main' into main
tioluko Sep 1, 2024
e00abe6
Merge branch 'russ-money:main' into main
tioluko Sep 1, 2024
1d8952d
Merge branch 'russ-money:main' into main
tioluko Sep 2, 2024
bc7defe
Making these new icons work was a pain
tioluko Sep 3, 2024
0d63c86
Arcane magic specifics
tioluko Sep 3, 2024
eea6b66
The actual Arcane spell-list
tioluko Sep 3, 2024
e586eb4
Backup just in case everything goes to shit
tioluko Sep 3, 2024
1d55780
New Spell Icons
tioluko Sep 3, 2024
69dbb3c
Randomized spell selection
tioluko Sep 3, 2024
4097326
Randomized spell selection
tioluko Sep 3, 2024
4466781
Create duskblade.dm
tioluko Sep 3, 2024
c87c967
New rare class I did for fun, feel free to ignore
tioluko Sep 3, 2024
185a2f3
Randomized spell selection
tioluko Sep 3, 2024
8d96b7e
Change to the claw spell
tioluko Sep 3, 2024
c884b61
Small edit to work with the claw skill
tioluko Sep 3, 2024
84d5c9e
New spell icons
tioluko Sep 3, 2024
e1daa5e
Just organizing
tioluko Sep 4, 2024
2ed389a
From single file to a entire folder
tioluko Sep 4, 2024
a88eceb
organizing spelllist
tioluko Sep 5, 2024
40ddacd
organizing spelllist
tioluko Sep 5, 2024
285f3c5
organizing spelllist
tioluko Sep 5, 2024
fb1eb8b
organizing spelllist
tioluko Sep 5, 2024
e974918
organizing spelllist
tioluko Sep 5, 2024
763f27f
adding 1 arcane because he has fetch
tioluko Sep 5, 2024
e877bd6
organizing spelllist
tioluko Sep 5, 2024
a1e5834
organizing spelllist
tioluko Sep 5, 2024
39b2a9b
organizing spelllist
tioluko Sep 5, 2024
c37d4bb
not necessary for this pull
tioluko Sep 5, 2024
c3e9f0f
tiny fix
tioluko Sep 5, 2024
f0b72e6
Merge branch 'russ-money:main' into main
tioluko Sep 5, 2024
0c93af2
shit was busted
tioluko Sep 6, 2024
15d7b1c
Merge branch 'russ-money:main' into main
tioluko Sep 7, 2024
e15d48a
Merge branch 'russ-money:main' into main
tioluko Sep 7, 2024
4750259
Update roguetown.dme
tioluko Sep 7, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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