Darkest Dungeon

  • Want to keep track of this thread?
    Accounts can bookmark posts, watch threads for updates, and jump back to where you stopped reading.
    Create account
Finally hit 300 on Endless for the achievement. I switched out one Shieldbreaker for Man-at-Arms and got to 232, but it was frustrating as all fuck and required countless reloads because I kept getting fucked by RNG on the bosses early. I used at least 10 on Sunken Crew because I had the wrong skills and couldn't kill the anchor guy healing unless SB got a crit, finally I said fuck it and hit multiple crits on the main part and just rushed it down. After that run I switched back to double Shieldbreaker with better speed difference to make Impale go brrrr and lucked out hitting Collector twice on the boss stages and dipped out after 303 before my party got too fucked with stress. I don't want to hear the Ancestor talk about the Miller being thrice a victim ever again.
There's virtue farming and virtue scumming. Virtue farming is doing "legit" affliction checks, and then stress-healing anyone who afflicts to 0 stress, so that you can try again by letting their stress build up again. Virtue scumming is simply exiting to menu when you get the affliction splash to reroll until you get a virtue instead. Doing this early in the run gives everyone the virtuous buffs and act-outs and makes stress much less... stressful. As a bonus, it completely screws up the Crew since virtuous heroes can't be anchored. Heroes will lose the virtue if you let stress reach 200 though, and obviously you're front-loading your annoyance with RNG.

With Jester|Vestal|Shieldbreakerx2 you would still eventually taper off as you accumulate diseases and mortality debuffs. There's a Youtuber who has taken Plague Doctor|Antiquarian|Crusader|Man-at-Arms to 15k and counting but that's also with optimized quirks.
 
Last edited:
There's virtue farming and virtue scumming. Virtue farming is doing "legit" affliction checks, and then stress-healing anyone who afflicts to 0 stress, so that you can try again by letting their stress build up again.
If you're going to do this, remember the Tentacle Idol (+20% to Virtue chance) and Hero's Ring (+25%) and if you have a Highwayman (a good idea) and Crimson Court, his pair of CC trinkets (+45%). Switch off the virtue trinkets to whoever you're fishing on.

You obviously want a Jester for this, who should have Bright Tambourine and Tyrant's Tasting Cup and spam Inspiring Cry until you get an afflicted hero back to normal.
 
That's cool about the virtues. I don't know anything about them yet because I get afflictions 9 times out of 10. I figure they give a buff but never really looked at what they do or how good it is. I also saw from videos that a lot of people used trinkets from CC that I'm not running on my file but I found some replacements. I know I have some of those virtue trinkets so I'll try one more run with them, but for now I'm almost done with the base game. I have the final versions of the Flesh and Drowned Crew then I can start the actual Darkest Dungeon to finish the Caretaker's list. I've also been trying to hunt down the Shambler after I realized he drops the Bright Tambourine, but of course now I never run into the altars to go to the fight. I saw someone use a team with double Highwayman and MAA that killed it with triple riposte and want to try it, maybe I can just run around torchless until it spawns randomly.
 
That's cool about the virtues. I don't know anything about them yet because I get afflictions 9 times out of 10. I figure they give a buff but never really looked at what they do or how good it is.
They're very good but considering the low chance of getting them, not really worth exploiting outside of the Farmstead, the only place you can basically get infinite chances at it. All four heroes being virtuous is almost always going to get you past 300.
 
I've also been trying to hunt down the Shambler after I realized he drops the Bright Tambourine
Bright Tambourine is a generic Rare that can drop whenever Rares drop. You might be thinking of another trinket. Out of the Shambler-exclusive trinkets, I use the Map, Candle, and Scroll the most often. The Tentacle Idol is mainly for virtue farming and the Bottle is annoying.

Highwayman is great for the Shambler because he's rank flexible for the shuffles, and riposte is great because Shambler always hits all ranks.
 
There is now a 64-bit Chinese-patched client based on the Steam beta build with the Farmstead bug fix. Unlike the 32-bit Chinese patch where the modders did the service of increasing the client's memory cap and trinket cap, the 64-bit client doesn't have those problems to begin with, so the only reasons to use this patch are 1) you use mods which rely on the niche functions the patch fixes or 2) you're not on Steam and you want to play Color of Madness/the Farmstead in 64-bit NOW NOW NOW NOW. But it exists, if either reason applies to you.
Kinda late but this has been open since 2022 and has been the unofficial way to play ultra-modded DD runs. IIRC there was supposed to be an update to this reverse-engineered version of DD following the official 64-bit upgrade patch though I don't know if it ever got updated.
 
Kinda late but this has been open since 2022 and has been the unofficial way to play ultra-modded DD runs. IIRC there was supposed to be an update to this reverse-engineered version of DD following the official 64-bit upgrade patch though I don't know if it ever got updated.
My post was about the 64-bit update they promised. Deovolente decided to edit the download and description into their 2022 post instead of putting it in the announcement post.
 
Last edited:
>mom can we have darkest dungeon board game
>we have darkest dungeon board game at home


1751974215602.webp

If you've touched DD modding at all, you'll recognize the art. Shipping started in January 2025, but the game only came to my attention now because S-Purple was seething at the use of Black Reliquary art, believing that he would know if it was endorsed, only to walk it back within 24 hours.

1751974947937.webp1751975032856.webp

I'm sorry you didn't make anything the Cursed Castle devs wanted to license?

I'm mildly curious if the devs ever approached Red Hook and Red Hook refused because of the Mythic Games disaster, Red Hook just left them on read, or the devs never thought of Red Hook at all.

I have no idea what the game itself is like.
 
Last edited:
Retarded modder news ahead.

TLDR: Nothing ever happens, but have a regular reminder to keep local copies of stuff you like. If not everything, then the Wildlanders backport, Uncrowned class, Home for Lost Monsters, Courtyard Plus, Farmstead Plus, and Vermintide. Nothing has actually happened to those mods yet.

ShallowIris decided that it's Be a Twat Week because he'll never be a woman. First order of business, harangue Stingu / Orimurax (Wildlanders backport) over a span of hours for amateur mistakes in the Wildlanders backport because "[Stingu] is not doing justice to Black Reliquary" and is "wast[ing] away the assets". (Note the Kvarotz backport drama I posted earlier shows that they're not Iris' assets and nobody on Team Reliquary even tells him if someone asks for permission to use the assets.)

1752665713776.webp1752666059683.webp1752666151751.webp1752666233313.webp

The eventual solution that other people suggested? Put "Unofficial" on the Wildlanders backport. idontwantasolutioniwanttobemad.jpeg

Next order of business, have a meltdown about Uncrowned's Silence debuff.
The Uncrowned class has a limited-use skill with Silence, a modded debuff that disables the debuffed enemy's stress skills. This is hilariously cathartic, but you can also instantly recognize that vanilla enemies have no natural defenses against it. Enemies which only have skills which do stress, like the puke pigs, are forced to pass their turns. For vanilla enemies you get to laugh at them. However, some modded enemies have funky effects which can cause softlocks when they are Silenced.

First ask TheAwkwardHeady and Wellington to remove Silence. When that fails, threaten to make all mobs in Home for Lost Monsters, Courtyard+, Farmstead+, and Vermintide immune regardless of whether they even need it (the mob which brought the possibility of softlocks into the spotlight was from the Tangle DD2 backport, again not even Iris' own work).
1752667547380.webp1752667599891.webp1752667751990.webp1752667816427.webp1752667928859.webp1752667971882.webp

Hours later, the "decisive answer" as to whether Silence will be removed is not in Iris' favor and he melts down again:
1752668335973.webp1752668393535.webp1752668502831.webp1752668569583.webp

Sasiji (correctly) pointed out that every argument against Silence other than the softlocks was retarded. He came up with a stun that rolls against debuff resist instead of stun resist, but can't implement it yet without a PC. This would be much less likely to softlock, but also more boring. Given TheAwkwardHeady's refusal it is unlikely that the original Uncrowned will be completely replaced. Still doesn't hurt to keep a copy.
 
Last edited:
If not everything, then the Wildlanders backport, Uncrowned class, Home for Lost Monsters, Courtyard Plus, Farmstead Plus, and Vermintide. Nothing has actually happened to those mods yet.
Can't edit my post: SeethingIris has pushed the Silence immunity patches. Skymods (may have NSFW on landing) currently has previous versions available.

Also for accuracy, Sasiji would be in charge of Succubus' Silence, not Uncrowned.

If no one else does it, I'm 80% confident I could do patches so that complete rollbacks aren't necessary (and so that they can be uploaded without strikable material, to increase seething), but I need free time and I can't use my Steam account for it.
 
Last edited:
The 64-bit Farmstead patch has been pushed to the retail branch on Steam! ...and Mac users can't run it. No one reported this issue when the patch was on the coming_in_hot beta branch, and some report that reverting to this branch fixes the problem. Good job Red Hook.

GOGDB states that GOG received Windows build 26186a a week ago, which is strange.

DD2 has had its Steadfast Steward's Update pushed to retail (Steadfast Steward being a public balance beta), and while I'm sure there are plenty of complaints about balance I don't recall seeing anything as disastrous as the DD1 updates. (The DD1 64-bit build itself is a great boon for playing with mods, but nearly every push has had game-breaking bugs.)



DD2 modding tools have been updated. I don't think they're at the point of enabling new classes.

Meanwhile, Black Reliquary development has stalled for now because Rick Gibbed, whom they were commissioning to make an injector, is having personal issues. (Being a they/them on Bluesky is surely purely coincidence.) He's at least not taking payment for Black Reliquary during this time.

For my own mod sperging, I've decided to try the Janissary, Exorcist and Wanderer. I also found out Chogex's Dimensional Havoc doesn't load all creature sounds if you haven't also installed Koala's Creature Collection, even though KCC isn't strictly a dependency. I think it's as simple as adding the KCC soundbank to the audio load order file, so I'm waiting for the portal to appear again.

There is currently a public voting tierlist for DD1 mod classes, for those who wish to gloat about how their favorites' superiority is self-evident / sneer at the uncultured masses.
 
Last edited:
There is currently a public voting tierlist for DD1 mod classes, for those who wish to gloat about how their favorites' superiority is self-evident / sneer at the uncultured masses.
Of course the newer classes get better treatment than the rest. The complete disrespect to Twilight Knight and Sunlight Warrior makes this voting list completely irrelevant.
 
Of course the newer classes get better treatment than the rest. The complete disrespect to Twilight Knight and Sunlight Warrior makes this voting list completely irrelevant.
Where tf are Marvin Seo's? Also the thumbnails often don't even make the mod identifiable and they don't include names. Any list where Sisters isn't S-tier is retard shit.
 
Where tf are Marvin Seo's? Also the thumbnails often don't even make the mod identifiable and they don't include names. Any list where Sisters isn't S-tier is retard shit.
According to the poll, Sisters is S-tier with 38 votes, A-tier with 27 and B-tier with 15
 
ShallowIris decided that it's Be a Twat Week because he'll never be a woman
Trannies like Iris and others in the DD server are always one bad day away from banning your ass over the mildest arguments, I've had to witness seeing a somewhat new user get hounded and kicked out by the troon cliche because an argument over Martyr's Seal resulted in the user assuming Iris was on his period (lol) and that was enough for Iris to bitch and cry to the jannies about killing himself, jannies then banned the user for assuming xer gender.
Seal.webp

Martyr's Seal is such a polarizing trinket in that the primary stats of increased deathblow resist and bonus DMG & CRIT at Death's Door are absolutely shit because you should never rely on surviving in Death's Door, deathblow resist caps at 87% meaning there's is still a 13% chance that the wearer will still die on the first check (hence the running gag of Deathblow resist being a myth), however its also one of the few generic trinkets in the game that grants bonus hp with no downsides at all. its always a heated debate on whether the trinket is actually good or not, just don't debate with a tranny over it.

Seriously, it won't end well for you.

how it started.webp

1.webp

2.webplel.webp

3.webp

4.webp

how it ended.webp
 
According to the poll, Sisters is S-tier with 38 votes, A-tier with 27 and B-tier with 15
I was just looking at most votes and you have to scroll down pretty far to find it. I guess the people who know the class value it correctly.
Martyr's Seal is such a polarizing trinket in that the primary stats of increased deathblow resist and bonus DMG & CRIT at Death's Door are absolutely shit because you should never rely on surviving in Death's Door, deathblow resist caps at 87% meaning there's is still a 13% chance that the wearer will still die on the first check (hence the running gag of Deathblow resist being a myth), however its also one of the few generic trinkets in the game that grants bonus hp with no downsides at all. its always a heated debate on whether the trinket is actually good or not, just don't debate with a tranny over it.
Extra HP are overrated unless they come along with something else that's worthwhile. Deathblow resistance isn't one of those things. Great, a resistance where you still have to pray to RNGesus for it to be worthwhile and could still die anyway.

There are very few trinkets with +HP that I'd consider using. One of those is Antiquarian's Candle of Life which turns her from a pitiful healer, to well, a mediocre one, and has +HP as a side benefit. There's also Crusader's Knight's Crest, a pure +HP trinket with no downsides other than that if you take up a slot with it, you probably have something better to put there. Crusader's Crimson Court trinket set is actually somewhat decent (most of the sets have one shitty trinket and/or a lousy set bonus). Another half-decent set is Flagellant's.

Flesh's Heart also has no downsides, but similarly, it's another HP trinket with nothing particularly useful along with it, just a bleed resist. It's a really solid resist (+50%) but I find this kind of thing near useless. It might be okay for Cove just because of those arterial pinching crabs.

There's a fringe use case for Mantra of Fasting+Rat Carcass, which gives a solid HP bonus and also comes with a net +3 speed bonus. You have to have Crimson Curse AND be wasting, though. The Rat Carcass keeps you from dying of it, but it's still disadvantageous because the hero is a stress bomb to the rest of the party.

Petrified Skull (Occultist's Crystalline trinket) is quite reasonable.

I've listed only the truly best of these trinkets (IMO) and most of them are near worthless or only have niche uses. The rest are completely atrocious and have horrible negatives like lowering SPD (the most valuable attribute in the game along than ACC) or a huge stress boost.

Not getting hit because you hit first and connected beats hoping a HP boost gives you a buffer.
 
Last edited:
The 64-bit Farmstead patch has been pushed to the retail branch on Steam! ...and Mac users can't run it. No one reported this issue when the patch was on the coming_in_hot beta branch, and some report that reverting to this branch fixes the problem. Good job Red Hook.
For complete fairness, the Mac bug was fixed the next day. All 7 players rejoiced.


Retarded modder news segment.

an argument over Martyr's Seal resulted in the user assuming Iris was on his period (lol)
I thought that would have been ✨affirming✨. Lmao.

Someone has gotten around to patches which remove Silence immunity for Farmstead Plus, Courtyard Plus, Home for Lost Monsters and Koala's Creature Collection Color of Madness. This was noticed.
Silence is a debuff used by some mod classes like the Succubus and Uncrowned, which disables enemy stress skills. Weird interactions with enemy AI can occur, and Iris spent literal hours seething that people wouldn't remove Silence from Uncrowned, culminating in adding immunity to every mod enemy he could get his hands on. See this post for more details.

1754306689171.webp
Of course not. His first course of action was to try and browbeat other people to remove Silence from their mods by suicide-baiting with a unilateral patch for his mods and not with himself because people actually care about the mods

>we must deboonk this
>pulls up completely different mod that is in unlisted beta (Tangle)
>cannot even reproduce
1754306862545.webp
1754306902807.webp
1754307417943.webp

("Oliver" is the Aesthete class, a Fire Emblem crossover which uses Silence.)

They are maddeningly imprecise when they talk about "breaking"—when you read what Silence does, you instantly know that it can make monsters spaz out. If you're playing with Silence you want that to happen. Only softlocks are a genuine problem. But considering that the oldest class I can think of which uses Silence (the Succubus) was uploaded in 2018, I shouldn't be surprised that actually softlocking a game with Silence requires a more specific chain of events than "Silence an incompatible enemy". But that would mean Iris' sturm und drang was all for nothing. (Of course, it's possible that Iris got the wrong Tangle version.)

Of course the newer classes get better treatment than the rest. The complete disrespect to Twilight Knight and Sunlight Warrior makes this voting list completely irrelevant.
I didn't even notice until now that Zotlan put in the Guru, a class of his which is still in unlisted beta.
1754308420334.webp
I don't expect a tierlist made on a whim to be completely representative of everything the community has contributed over the years, but one could make the circlejerk slightly less obvious than this set of additions and omissions.

1754308592944.webp
I will give them that the D votes for the Guru aren't all legit, because Miscreant was pushed to S and Squire was pushed to D at the same time (post for context of those two mods). Still, insert normmacdonald.png
 
Last edited:
I've created with AI a Python script to tell you how many times you've sent a class on a successful quest.

Python:
import json
import struct
from collections import Counter

"""
Use https://robojumper.github.io/DarkestDungeonSaveEditor/ to convert a profile's ".json" files to actual JSON.
Then paste in the file paths to your actual JSON files below.
"""

roster_file = r"persist.roster.json"
log_file = r"persist.campaign_log.json"


def stringHash(s):
    """
    Python implementation of Darkest Dungeon's string hasher as described in https://github.com/robojumper/DarkestDungeonSaveEditor/blob/master/docs/dson.md
    """
    hash_val = 0
    # Encode the string to bytes for iteration
    byte_array = s.encode('utf-8')
    for byte in byte_array:
        # Multiply hash by 53 and add the unsigned byte value
        hash_val = hash_val * 53 + byte
        # Simulate 32-bit integer overflow
        hash_val &= 0xFFFFFFFF
  
    # Convert the unsigned 32-bit hash to a signed 32-bit integer
    return struct.unpack('i', struct.pack('I', hash_val))[0]

def create_hash_to_class_map(roster_file_path):
    """
    Parses persist.roster.json to create a mapping from class hash to class name.

    Args:
        roster_file_path (str): The path to the roster JSON file.

    Returns:
        dict: A dictionary mapping integer hash values to string class names.
              Returns an empty dictionary if the file cannot be read or parsed.
    """
    hash_map = {}
    try:
        with open(roster_file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
    except FileNotFoundError:
        print(f"Error: The file '{roster_file_path}' was not found.")
        return {}
    except json.JSONDecodeError:
        print(f"Error: Could not decode JSON from '{roster_file_path}'.")
        return {}
  
    heroes_data = data.get('base_root', {}).get('heroes', {})
    for hero_id, hero_data in heroes_data.items():
        hero_class = hero_data.get('hero_file_data', {}).get('raw_data', {}).get('base_root', {}).get('heroClass')
        if hero_class and isinstance(hero_class, str):
            cleaned_class = hero_class.replace('###', '')
            hash_val = stringHash(cleaned_class)
            hash_map[hash_val] = cleaned_class
          
    return hash_map

def parse_quest_log_and_count_classes(log_file_path, hash_map):
    """
    Parses persist.campaign_log.json to count hero class occurrences in successful quests,
    resolving hashed IDs to class names using the provided hash map.
    If a hash cannot be resolved, the raw hash is used as the class ID.

    Args:
        log_file_path (str): The path to the JSON log file.
        hash_map (dict): A dictionary mapping integer class hashes to string names.

    Returns:
        collections.Counter: A Counter object with class names (or unresolved hashes)
                             as keys and their counts as values.
    """
    try:
        with open(log_file_path, 'r', encoding='utf-8') as f:
            data = json.load(f)
    except FileNotFoundError:
        print(f"Error: The file '{log_file_path}' was not found.")
        return Counter()
    except json.JSONDecodeError:
        print(f"Error: The file '{log_file_path}' is not a valid JSON file.")
        return Counter()

    class_counts = Counter()
    chapters = data.get('base_root', {}).get('chapters', {})

    for chapter_content in chapters.values():
        if not isinstance(chapter_content, dict):
            continue
          
        for entry_content in chapter_content.values():
            # Identify quest-success entries
            if (isinstance(entry_content, dict) and
                    entry_content.get('rtti') == 2006063882 and
                    entry_content.get('success') is True):
              
                heroes = entry_content.get('heroes', {})
                for hero_details in heroes.values():
                    hero_class_id = hero_details.get('class')
                    if hero_class_id is not None:
                        class_name = None
                        if isinstance(hero_class_id, str):
                            # Handle string IDs like "###crusader"
                            class_name = hero_class_id.replace('###', '')
                        elif isinstance(hero_class_id, int):
                            # Resolve integer hashes using the map. If not found, use the hash as a string.
                            class_name = hash_map.get(hero_class_id, str(hero_class_id))
                      
                        if class_name:
                            class_counts[class_name] += 1
    return class_counts

# --- Execution ---
if __name__ == "__main__":

    # Step 1: Create the hash map from the roster file
    hero_hash_map = create_hash_to_class_map(roster_file)

    if hero_hash_map:
        # Step 2: Parse the log file and count classes using the hash map
        hero_class_counts = parse_quest_log_and_count_classes(log_file, hero_hash_map)

        if hero_class_counts:
            print("Class counts in successful quests:")
            # Sort items by count in descending order for better readability
            for class_id, count in hero_class_counts.most_common():
                print(f"- {class_id}: {count}")
        else:
            print("No successful quest data found in campaign_log.")
    else:
        print("Could not create the class hash map.")

The counts for my current modded run. Just beat the Countess with Vestal-Runaway-Sisters-Shieldbreaker, no Darkest Dungeon quests yet.
- shieldbreaker: 39
- runaway: 38
- crusader: 37
- vestal: 34
- occultist: 32
- judicator: 28
- plague_doctor: 26
- houndmaster: 25
- bounty_hunter: 22
- highwayman: 21
- sisters: 20
- arbalest: 20
- thrall: 19
- seraph: 18
- man_at_arms: 18
- leper: 18
- antiquarian: 17
- flagellant: 14
- lamia: 14
- wraith_ms: 13
- grave_robber: 13
- cataphract: 13
- hellion: 12
- omenseeker: 11
- dd2exanimate: 10
- musketeer: 10
- abomination: 10
- falconer: 10
- jester: 9
- stargazer: 8
- sibyl_ms: 6
- dd2duelist: 6
- dredge: 6
- wanderer: 2
- janissary: 1
- exorcist: 1

This is somewhat biased because I didn't add all the mods at the same time. The Wanderer, Janissary and Exorcist are the newest additions. It's also biased against swapping teams in the Courtyard for clearing enemies vs fighting the boss, because only the boss team gets counted as a success. But overall this aligns with my impression of how often I've used each class. Shieldbreaker is leading partly because my Legend Shieldbreaker has the Farmstead Plus version of the Natural quirk, which is OP when fully evolved.

For comparison, my first vanilla estate and a Stygian estate:
Class counts in successful quests:
- plague_doctor: 49
- vestal: 46
- occultist: 39
- crusader: 36
- bounty_hunter: 36
- houndmaster: 36
- hellion: 35
- grave_robber: 30
- man_at_arms: 21
- arbalest: 20
- leper: 19
- highwayman: 16
- abomination: 16
- antiquarian: 15
- jester: 10
- occultist: 35
- crusader: 29
- shieldbreaker: 28
- vestal: 25
- plague_doctor: 25
- houndmaster: 22
- highwayman: 21
- antiquarian: 20
- man_at_arms: 20
- jester: 16
- grave_robber: 13
- arbalest: 12
- hellion: 11
- bounty_hunter: 10
- flagellant: 9
- leper: 9
- abomination: 7


Martyr's Seal and extra HP trinkets
It's funny that the much-vaunted Trinkets Plus mod (which I also use) has never touched Martyr's Seal, a minor honor that it shares with Candle of Life, Flesh's Heart, Surgical Gloves, Heavy Boots, and a handful others. I suppose it's because Martyr's Seal is good at what it does, even if what it does isn't necessarily good.
 
Last edited:
With modded classes, the combinatorial possibilities make it difficult to randomly discover their named parties. So I'll share some I liked.

1755700566562.webp

Relatively easy to find, since it's only a Thrall and three vanilla classes he hates (The Flagellant for his whip, the Jester for his mockery, and the Antiquarian for her trade.)
Ironically, the team is not terrible, having stress heals and accuracy and speed buffs to support the Thrall, HP healing, bleed, etc. But they don't have stuns other than Thrall's gamba stuns and they don't have ambush prevention.

1755700579455.webp

Grave Robber - Lamia - Shieldbreaker - Sisters
This seems... unfair to the Shieldbreaker. When I tried them they were short on damage since the Sisters have to Mark for themselves, and no one else has Mark bonuses on their "main" attack.

1755700588604.webp

Vestal - Exorcist - Crusader - Seraph
Now here's a cross-author named party. They need Fire Patches so that everyone can use the Fire debuff from the Seraph's Mark, since no one else uses Mark by default. A pity that they're vulnerable to shuffles, or they could go in the first Darkest Dungeon quest (We Are The Flame) vs the Shuffling Horror. One could re-select skills just before the fight for the Vestal, Exorcist and Crusader so they have both front and back skills, but Seraph has nothing in rank 4 unless Ascended.
 
Last edited:
Back
Top Bottom