Skip to content

Add Warlock class: pact-bound debuff and DoT caster#519

Open
aconite33 wants to merge 6 commits intoTempusMUD:mainfrom
aconite33:add-warlock-class
Open

Add Warlock class: pact-bound debuff and DoT caster#519
aconite33 wants to merge 6 commits intoTempusMUD:mainfrom
aconite33:add-warlock-class

Conversation

@aconite33
Copy link
Copy Markdown

Summary

Adds a new playable class, the Warlock, occupying the former CLASS_SPARE1 slot. Warlocks are an evil-only fantasy caster whose identity is debuffs + damage-over-time, anchored by an at-will signature attack called Eldritch Blast.

Design decisions baked into this PR:

  • Eldritch Blast is a skill command (at-will, cheap, scales beams by level), not a spell.
  • Full v1 spellbook: 23 new abilities plus 12 re-grants of existing spells.
  • Evil-only alignment, auto-forced at CXN_ALIGN_PROMPT like monk neutrality.
  • Open race list: all races except Dwarf and Minotaur can pick Warlock as primary.
  • Pact drift: Warlocks who go neutral cast at 50% damage, good Warlocks at 25%.

What's in the PR

Class shell

  • CLASS_SPARE1 renamed to CLASS_WARLOCK (enum 14); IS_SPARE1 / ITEM3_REQ_SPARE1 renamed to the _WARLOCK form (bit values preserved, no data migration).
  • prac_params, race_restr, thaco_factor, class_names, char_class_abbrevs, weap_spec_char_class populated.
  • do_start, advance_level, parse_player_class, roll_real_abils, and the race/class stat bonuses all handle CLASS_WARLOCK.
  • PAST_CLASS macro includes Warlock (gold currency).
  • Class selection menu entry; evil-alignment force at creation.

Signature skill - Eldritch Blast

  • SKILL_ELDRITCH_BLAST = 700, MAX_SKILLS bumped to 701.
  • New src/classes/act.warlock.c with do_eldritch_blast, modelled on do_whirlwind. Beam count scales 1/2/3/4 at effective levels 1-14 / 15-29 / 30-44 / 45+. Per-beam damage dice(1 + (lvl>4), 8) + lvl/3. Costs 3 mana + 5 move. Auto-targets in combat. Fails while AFF3_MUTED.
  • Registered as eldritch and eblast in the command table.

Spellbook (sample_lib/etc/spells.xml)

  • 14 new mortal spells (IDs 162-175): Hex, Corruption, Ray of Enfeeblement, Shadow Bolt, Bane, Drain Life, Bestow Curse, Vampiric Touch, Hellish Rebuke, Darkness, Fear Hex, Agony, Soul Rot, Circle of Death.
  • 3 mortal pact summons (IDs 176-178): Summon Dretch (L12), Summon Barlgura (L20 tank), Summon Vrock (L30 stunner).
  • 6 remort spells (IDs 276-281, gen 1-5): Siphon Soul, Enervation, Finger of Death, Summon Glabrezu, Negative Energy Flood, Summon Balor.
  • 12 re-grants of existing spells to Warlock: Blindness, Charm Person, Chill Touch, Curse, Drowsy/Sleep, Energy Drain, Poison, Slow, Undead Protection, Word Stun, Banishment, Vampiric Regeneration.

Magic-engine hooks

  • 10 new mag_affects cases using existing AFF/AFF2/AFF3 bits (no new flag bits needed).
  • 5 new mag_damage cases including Finger of Death's instakill clause and NEF's post-damage Corruption seeding. mag_areas strings for the two room-scope spells.
  • 3 MAG_MANUAL lifesteal handlers (Drain Life, Vampiric Touch, Siphon Soul).
  • Pact-summon helper perform_summon_pact modelled on spell_summon_legion: skill check, mob load, skill_bonus * 1.5 / 100 scaling, charm-as-pet, dominance check against can_charm_more. Placeholder mob vnums reuse the existing legion_vnums pool until dedicated Dretch / Barlgura / Vrock / Glabrezu / Balor mobs are built.
  • Soul Rot dispel-backlash: dispelling SPELL_SOUL_ROT fires dice(5, 10) damage at the dispeller.
  • DoT tick hooks for Corruption / Agony / Soul Rot / Enervation in mobact.c next to the existing stigmata tick.

Alignment drift

  • warlock_align_scale(ch, dam) helper returns dam for evil, dam/2 for neutral, dam/4 for good. Applied in mag_damage, Eldritch Blast, the three lifesteal handlers, and the four DoT tick sites. Ticks scale by current alignment at tick time, so DoTs weaken as the caster drifts.

Content

  • sample_lib/misc/messages gains a Warlock Abilities section with 13 fight_message records covering every damage-dealing spell and Eldritch Blast.
  • Help entries for the class, the skill, and every new spell are prepared but not bundled here. The scratch file we used to draft them is posted as a follow-up comment on this PR so maintainers can paste it into hedit.

Known follow-ups (content, not code)

  • Builder-created demon mobs for Dretch / Barlgura / Vrock / Glabrezu / Balor. Until those exist, summoned pets use the generic legion devil vnums.
  • Warlock guildmaster mob in sample_lib/world/ for training.
  • hedit help entries (see PR comment).

Test plan

  • ./configure && make builds cleanly.
  • New Human / Half-Orc / Drow character can pick Warlock from the class menu; Dwarf / Minotaur cannot.
  • CXN_ALIGN_PROMPT auto-sets alignment to -666 with the pact flavor line.
  • At L1, skills lists Eldritch Blast at 25% and spells lists Magic Missile / Chill Touch; eblast <mob> fires one beam.
  • After advance 15 / 30 / 45, eblast fires 2 / 3 / 4 beams respectively.
  • Cast Corruption on a mob; observe damage ticks each pulse.
  • Cast Soul Rot on a mob, have another PC dispel magic it; dispeller takes roughly 5d10 backlash.
  • Cast Summon Dretch at L12+; pet loads, follows caster, scales with skill bonus.
  • Change alignment to neutral via set alignment 0; Shadow Bolt and Eldritch Blast damage drop to about half.
  • Remort and verify gen-1 Siphon Soul, gen-2 Vampiric Regeneration, gen-3 Finger of Death, gen-4 Summon Balor, gen-5 Negative Energy Flood become learnable at each tier.

Introduces a new playable class, the Warlock, occupying the former
CLASS_SPARE1 slot. Warlocks are an evil-only fantasy caster whose
identity is debuffs and damage-over-time, anchored by an at-will
signature attack called Eldritch Blast.

Class shell:
  - CLASS_SPARE1 renamed to CLASS_WARLOCK (enum value 14).
  - IS_SPARE1 renamed to IS_WARLOCK; ITEM3_REQ_SPARE1 renamed to
    ITEM3_REQ_WARLOCK (bit value preserved, no data migration needed).
  - prac_params, race_restr, thaco_factor, class_names,
    char_class_abbrevs, weap_spec_char_class, and all other
    NUM_CLASSES-sized tables updated.
  - Allowed as primary class for every race except Dwarf and Minotaur.
  - do_start, advance_level, parse_player_class, roll_real_abils,
    and the race/class stat bonuses handle CLASS_WARLOCK.
  - PAST_CLASS macro includes Warlock (gold currency cohort).
  - CXN_ALIGN_PROMPT auto-forces evil alignment at creation, with a
    custom prompt line (mirrors monk neutrality and drow evil).
  - Class selection menu in show_char_class_menu adds a Warlock entry.

Signature skill:
  - SKILL_ELDRITCH_BLAST = 700 and MAX_SKILLS bumped to 701.
  - New do_eldritch_blast command in src/classes/act.warlock.c,
    modelled on do_whirlwind. Beam count scales with effective level
    (character level plus twice remort generation): 1/2/3/4 beams at
    levels 1-14 / 15-29 / 30-44 / 45+. Per-beam damage is
    dice(1 + (lvl>4), 8) + lvl/3. Costs 3 mana + 5 move. Auto-targets
    via random_opponent in combat. Fails while AFF3_MUTED.
    Registered as "eldritch" and "eblast" in the command table.

Spellbook (sample_lib/etc/spells.xml plus SPELL_/SKILL_ constants):
  - 14 new mortal spells: Hex, Corruption, Ray of Enfeeblement,
    Shadow Bolt, Bane, Drain Life, Bestow Curse, Vampiric Touch,
    Hellish Rebuke, Darkness, Fear Hex, Agony, Soul Rot, Circle of
    Death (IDs 162-175).
  - 3 mortal pact summons: Summon Dretch (L12), Summon Barlgura (L20,
    tank/protector), Summon Vrock (L30, stun screech) at IDs 176-178.
  - 6 remort spells (gen 1-5): Siphon Soul, Enervation, Finger of
    Death, Summon Glabrezu (gen 2 tank), Negative Energy Flood,
    Summon Balor (gen 4 capstone demon) at IDs 276-281.
  - 12 existing spells re-granted to Warlock: Blindness, Charm Person,
    Chill Touch, Curse, Drowsy/Sleep, Energy Drain, Poison, Slow,
    Undead Protection, Word Stun, Banishment, Vampiric Regeneration.

Magic engine hooks:
  - 10 new mag_affects cases (Hex, Corruption, Ray of Enfeeblement,
    Bane, Bestow Curse, Darkness, Fear Hex, Agony, Soul Rot,
    Enervation) using existing AFF/AFF2/AFF3 bits (no new flag bits).
  - 5 new mag_damage cases (Shadow Bolt, Hellish Rebuke, Circle of
    Death, Finger of Death with instakill clause, Negative Energy
    Flood). Mag_areas strings for the two room-scope spells.
  - NEF applies Corruption DoT to survivors in the post-damage hook.
  - 3 MAG_MANUAL lifesteal handlers (Drain Life, Vampiric Touch,
    Siphon Soul) at the bottom of spells.c.
  - Pact-summon helper perform_summon_pact modelled on Summon Legion:
    skill check, load mob, scale by skill_bonus * 1.5 / 100, charm as
    pet, dominance check against can_charm_more. Placeholder mob
    vnums reuse the existing legion_vnums pool until dedicated demon
    mobs are built in sample_lib/world.
  - Soul Rot dispel-backlash: removing SPELL_SOUL_ROT from a target
    fires dice(5, 10) damage at the dispeller.
  - DoT tick hooks for Corruption / Agony / Soul Rot / Enervation in
    mobact.c next to the existing stigmata tick.

Alignment drift:
  - Warlock pact weakens when alignment wavers. warlock_align_scale
    helper returns dam for evil, dam/2 for neutral, dam/4 for good.
    Applied in mag_damage, Eldritch Blast, the three lifesteal
    MAG_MANUAL handlers, and the four DoT tick sites. Scaling uses
    current alignment at tick time so already-applied DoTs weaken as
    the caster drifts.

Content and damage messages:
  - sample_lib/misc/messages gains a Warlock Abilities section with
    13 fight_message records for every damage-dealing spell/skill.
  - warlock_hedit.txt (gitignored) is a scratch file containing
    hedit-ready help entry bodies for the maintainers to paste in.
@aconite33
Copy link
Copy Markdown
Author

================================================================================
Warlock class - hedit content for help entries

This is a scratch support file. It is NOT committed (.gitignore excludes it).
Paste each block into the in-game hedit editor when creating the help items.
When submitting the PR for the Warlock class, include this file as a comment
on the PR so the maintainers can import it.

For each entry:

  1. hedit create
  2. hedit set keywords
  3. hedit set text (then paste the body, end with "~" or ".h" per editor)

Style rules: only use single dash (-), no em dash, no double dash (--).

================================================================================
CLASS HELP

--- HELP: WARLOCK -----------------------------------------------------------
keywords: warlock pact cursebringer

CLASS: Warlock

The Warlock is a pact-bound arcane caster who trades personal morality for
forbidden power. Where Mages study and Clerics pray, Warlocks bargain -
binding their soul to an Abyssal patron in exchange for curses, festering
diseases, and the signature cantrip Eldritch Blast.

Role: Debuff and damage-over-time specialist. Warlocks wear down
enemies with curses, poisons, and rot while their pact-born
minions hold the line.
Alignment: Evil only. The pact does not tolerate remorse. A Warlock whose
alignment drifts neutral casts at 50% damage; a Warlock who
turns good casts at 25%. Keep the pact, keep your power.
Prime: Intelligence (spellcasting), Charisma (pact strength).

Signature ability: ELDRITCH BLAST, an at-will beam that gains additional
beams at levels 15, 30, and 45. Scales further on remort generation.

Pact minions (levels 12, 20, 30): Dretch, Barlgura, Vrock. The pact
advances through remort: Glabrezu (gen 2), Balor (gen 4).

See also: ELDRITCH BLAST, HEX, CORRUPTION, PACT.

================================================================================
SIGNATURE SKILL

--- HELP: ELDRITCH BLAST ----------------------------------------------------
keywords: eldritch blast eblast

Syntax: eldritch [target]
eblast [target]

Eldritch Blast is the Warlock's signature cantrip: a crackling beam of
abyssal force drawn directly from the pact. Unlike other spells, it costs
only a trickle of mana (3) and a breath of stamina (5 movement), and can
be invoked as often as the Warlock has the energy for it.

The number of beams scales with effective level (character level plus twice
remort generation):

Levels 1-14:   1 beam
Levels 15-29:  2 beams
Levels 30-44:  3 beams
Levels 45+:    4 beams

Each beam deals 1d8 + level/3 damage on hit. Hit chance scales with your
Eldritch Blast skill and Charisma. Fails while MUTED or silenced.

Alignment penalty: a non-evil Warlock's beams do half damage at neutral
and one-quarter damage at good. The Abyss does not lend power to
wavering souls.

See also: WARLOCK, PACT.

================================================================================
WARLOCK SPELLS - MORTAL TIER

--- HELP: HEX ---------------------------------------------------------------
keywords: hex warlock

Spell: hex
Level: 3 (warlock)
Mana: 25 / 1 / 12
Target: creature room or creature fighting

A binding curse that saps the target's strike accuracy and presence. The
signature entry-level Warlock debuff - cheap enough to hex every opponent
you meet.

See also: WARLOCK.

--- HELP: CORRUPTION --------------------------------------------------------
keywords: corruption warlock

Spell: corruption
Level: 6 (warlock)
Mana: 35 / 2 / 15
Target: creature room or creature fighting

Dark rot festers within the target's flesh, draining constitution and
leaking hit points each tick. Your first proper damage-over-time.

See also: WARLOCK, SOUL ROT, AGONY.

--- HELP: RAY OF ENFEEBLEMENT -----------------------------------------------
keywords: ray enfeeblement warlock

Spell: ray of enfeeblement
Level: 7 (warlock)
Mana: 30 / 1 / 18
Target: creature room or creature fighting

A desaturating ray that cuts the target's strength and damage output for
the duration. Ideal against heavy-hitting melee foes.

See also: WARLOCK.

--- HELP: SHADOW BOLT -------------------------------------------------------
keywords: shadow bolt warlock

Spell: shadow bolt
Level: 9 (warlock)
Mana: 30 / 1 / 15
Target: creature room or creature fighting

A bolt of condensed shadow for when you need direct damage instead of a
slow bleed. Your reliable filler spell between curses.

See also: WARLOCK, ELDRITCH BLAST.

--- HELP: BANE --------------------------------------------------------------
keywords: bane warlock

Spell: bane
Level: 14 (warlock)
Mana: 50 / 2 / 25
Target: creature room or creature fighting

A pact-forged curse on the target's every swing - penalties to attack
and saves for roughly a minute.

See also: WARLOCK, HEX, BESTOW CURSE.

--- HELP: DRAIN LIFE --------------------------------------------------------
keywords: drain life warlock

Spell: drain life
Level: 18 (warlock)
Mana: 50 / 2 / 25
Target: creature room or creature fighting

Drain a ribbon of life from your enemy and convert half of it into your
own hit points. Core Warlock sustain.

See also: WARLOCK, VAMPIRIC TOUCH, SIPHON SOUL.

--- HELP: BESTOW CURSE ------------------------------------------------------
keywords: bestow curse warlock

Spell: bestow curse
Level: 22 (warlock)
Mana: 70 / 2 / 35
Target: creature room or creature fighting

A greater curse stacking accuracy, damage, and armor penalties. The
upgraded Hex; you'll open most fights with this past level 22.

See also: WARLOCK, HEX, BANE.

--- HELP: VAMPIRIC TOUCH ----------------------------------------------------
keywords: vampiric touch warlock

Spell: vampiric touch
Level: 25 (warlock)
Mana: 60 / 2 / 30
Target: creature fighting (touch range)

A melee touch spell: deals heavy damage and converts every point into
healing for you. Higher commitment than Drain Life, higher payoff.

See also: WARLOCK, DRAIN LIFE.

--- HELP: HELLISH REBUKE ----------------------------------------------------
keywords: hellish rebuke warlock

Spell: hellish rebuke
Level: 27 (warlock)
Mana: 55 / 2 / 25
Target: creature fighting

Flames of the Abyss erupt on the target as pact-retaliation. Ignites the
target if they aren't fire-resistant.

See also: WARLOCK.

--- HELP: DARKNESS ----------------------------------------------------------
keywords: darkness warlock

Spell: darkness
Level: 28 (warlock)
Mana: 60 / 1 / 30
Target: self

Wraps you in unnatural shadow, displacing your form. Self-only
defensive.

See also: WARLOCK.

--- HELP: FEAR HEX ----------------------------------------------------------
keywords: fear hex warlock

Spell: fear hex
Level: 36 (warlock)
Mana: 80 / 2 / 45
Target: creature room or creature fighting

A paralyzing dread-curse that confuses the target and may cause them to
flee.

See also: WARLOCK.

--- HELP: AGONY -------------------------------------------------------------
keywords: agony warlock

Spell: agony
Level: 39 (warlock)
Mana: 90 / 3 / 50
Target: creature room or creature fighting

A pact-symbol of agony is burned into the target. Ticks damage every
round until dispelled. Does not stack with other symbol effects.

See also: WARLOCK, STIGMATA, CORRUPTION.

--- HELP: SOUL ROT ----------------------------------------------------------
keywords: soul rot warlock

Spell: soul rot
Level: 43 (warlock)
Mana: 110 / 3 / 60
Target: creature room or creature fighting

A festering decay of the very soul. Ticks damage; anyone who dispels it
takes 5d10 backlash damage as the pact snaps back. Your signature
late-mortal DoT.

See also: WARLOCK, CORRUPTION, AGONY.

--- HELP: CIRCLE OF DEATH ---------------------------------------------------
keywords: circle death warlock

Spell: circle of death
Level: 49 (warlock)
Mana: 160 / 3 / 100
Target: room (area damage)

A sphere of negative energy engulfs every enemy in the room. Warlock
capstone at level 49.

See also: WARLOCK, NEGATIVE ENERGY FLOOD.

--- HELP: SUMMON DRETCH -----------------------------------------------------
keywords: summon dretch warlock pact

Spell: summon dretch
Level: 12 (warlock)
Mana: 80 / 2 / 40
Target: self

Tear open a minor rift and bind a Dretch - a weak but reliable Abyssal
servant - to your will. First of the Warlock's three mortal pact
minions.

See also: WARLOCK, SUMMON BARLGURA, SUMMON VROCK.

--- HELP: SUMMON BARLGURA ---------------------------------------------------
keywords: summon barlgura warlock pact

Spell: summon barlgura
Level: 20 (warlock)
Mana: 120 / 3 / 60
Target: self

Call a massive ape-demon of the Abyss. The Barlgura tanks for you and
hunts anyone who strikes at its master.

See also: WARLOCK, SUMMON DRETCH, SUMMON VROCK.

--- HELP: SUMMON VROCK ------------------------------------------------------
keywords: summon vrock warlock pact

Spell: summon vrock
Level: 30 (warlock)
Mana: 160 / 3 / 90
Target: self

A carrion bird-demon whose screech can stun its prey. Strong melee
damage with crowd-control upside.

See also: WARLOCK, SUMMON DRETCH, SUMMON BARLGURA.

================================================================================
WARLOCK SPELLS - REMORT TIER

--- HELP: SIPHON SOUL -------------------------------------------------------
keywords: siphon soul warlock

Spell: siphon soul
Level: 18 (warlock) gen 1
Mana: 75 / 2 / 40
Target: creature room or creature fighting

(Gen 1) Drain Life's remort upgrade: heals you, restores mana, and
afflicts the target with a mana-tap debuff.

See also: WARLOCK, DRAIN LIFE, VAMPIRIC TOUCH.

--- HELP: ENERVATION --------------------------------------------------------
keywords: enervation warlock

Spell: enervation
Level: 30 (warlock) gen 3
Mana: 100 / 3 / 60
Target: creature room or creature fighting

(Gen 3) The target's life-force leaks from them over time. Max-HP
penalty and a mana-leak aura.

See also: WARLOCK.

--- HELP: FINGER OF DEATH ---------------------------------------------------
keywords: finger death warlock

Spell: finger of death
Level: 42 (warlock) gen 3
Mana: 140 / 3 / 80
Target: creature room or creature fighting

(Gen 3) Point and speak a word of death. Heavy damage with an instakill
clause if the target is brought below Warlock level.

See also: WARLOCK, NEGATIVE ENERGY FLOOD.

--- HELP: SUMMON GLABREZU ---------------------------------------------------
keywords: summon glabrezu warlock pact

Spell: summon glabrezu
Level: 28 (warlock) gen 2
Mana: 180 / 4 / 100
Target: self

(Gen 2) Bind a four-armed demon-general to your pact. High
magic-resistance and multi-attack - the ideal bodyguard against enemy
casters.

See also: WARLOCK, SUMMON BALOR.

--- HELP: NEGATIVE ENERGY FLOOD ---------------------------------------------
keywords: negative energy flood warlock

Spell: negative energy flood
Level: 48 (warlock) gen 5
Mana: 250 / 5 / 150
Target: room (area damage)

(Gen 5) Your capstone: a flood of negative energy bursts through the
room, dealing massive damage and implanting Corruption on every
survivor.

See also: WARLOCK, CIRCLE OF DEATH.

--- HELP: SUMMON BALOR ------------------------------------------------------
keywords: summon balor warlock pact

Spell: summon balor
Level: 42 (warlock) gen 4
Mana: 220 / 5 / 130
Target: self

(Gen 4) A Balor lord of the Abyss, bound in a pact-chain. Top-tier melee
demon; the endgame bodyguard.

See also: WARLOCK, SUMMON GLABREZU.

================================================================================
End of file.

Follow-up to the Warlock class PR, tightening the new code against the
codebase's existing style.

- act.warlock.c: add the "Copyright 1998 by John Watson" header line
  that every other class file has; move libxml/parser.h up with the
  other system headers; add the "// <function> - <blurb>" single-line
  function comment that precedes every ACMD in the peer class files.
- do_eldritch_blast: "Blast whom?" -> "Blast who?" to match the
  existing "Whirlwind who?" / "Backstab who?" phrasing.
- magic.c: drop the "/* ============ Warlock ============ */" banner
  comments around the mag_affects and mag_damage Warlock case blocks.
  No other per-class region in these switches uses section dividers,
  so the banners read as unusual.
- magic.c: add audible = true to Hellish Rebuke and Negative Energy
  Flood, matching the pattern used by other noisy damage spells
  (Fireball, Flame Strike, Call Lightning).
- magic.c: rephrase the SPELL_AGONY same-symbol error from two
  sentences to one, matching the existing SYMBOL_OF_PAIN error
  style ("Another symbol of pain already burns upon this creature.").
- magic.c: replace the multi-line pact-drift block comment with a
  single // line comment for consistency with nearby inline comments.
- spells.c: drop the WARLOCK MANUAL SPELLS banner above the helper
  block, and the multi-line block comment above perform_summon_pact,
  in favor of a single // line comment each.
- spell_parser.c: drop the banner comment lines around the Warlock
  MAG_MANUAL dispatch cases.
- sample_lib/etc/spells.xml: drop the "<!-- Warlock Class -->" section
  comment; other class-grouped spells in the XML are not separated
  by section headers.
Captures the real coding conventions used in the baseline so that
generated contributions to this repo can be audited against the
project's actual style rather than generic C norms. The rules are
compiled from a survey of existing files (act.monk.c, magic.c,
spells.c, etc.) and cite file:line examples in-place.

The skill includes a review procedure with automated grep checks for
AI tells (em dashes, -- in prose, Doxygen openers, banner comments,
XML dividers, trailing whitespace on comments), plus a blacklist of
patterns that do not appear anywhere in the baseline.

The intended usage is: before committing or opening a PR, invoke the
skill to get a blocker/style/idiom report, then apply fixes with user
approval. The skill does not auto-edit.
Applies findings from the tempuscode-style skill audit against the
Warlock branch:

- Convert inline /* ... */ comments inside function bodies to //
  comments, matching the style used by act.monk.c and siblings. Six
  instances across act.warlock.c, magic.c, and spells.c.
- Drop the redundant "victim died" comments after damage() returns
  non-zero in the three lifesteal ASPELL handlers; the early return
  is self-explanatory.
- Rephrase "Your pact falters. The Abyss does not answer." into a
  single sentence, since baseline error strings are one sentence.
- Reformat the Warlock alignment prompt in nanny.c to match the
  line-break shape used by the monk equivalent (split across \r\n
  rather than joined by double-space).
class_can_do_abilities() in spec_procs.c hard-codes which classes can
use the SPELL_BIT category, gating the 'spells' command, the 'cast'
command, and spell learning. The allowed list was Mage, Cleric, Knight,
Ranger only. Adding Warlock to both the primary and remort-class checks
so that playing a Warlock actually lets you see and cast your spells.

Caught during in-game testing: a level 49 Warlock ran 'spells' and got
"A warlock cannot cast spells!" despite having granted entries in
spells.xml.
Two more hard-coded class lists that excluded Warlock and turned up
during live playtesting.

src/magic/spell_parser.c:1600 - the cast command's gate listed only
Mage/Cleric/Knight/Ranger/Vampire; a Warlock attempting 'cast hex'
got "You are not learned in the ways of magic." Added IS_WARLOCK(ch)
to the allow list.

src/misc/limits.c:147 - the mana-regen caster-bonus (2x gain) listed
Mage/Cleric/Psychic/Physic/Bard. Warlocks are the newest caster class
and should get the same bonus.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant