Skip to the main content
Skip to the entry’s beginning
First published on .

rangifer’s diary: pt. lxxvii

Taxonomising odd jobs, pt. vi: Forestry. §3

In the previous section (§2) of this part (pt. vi), we considered the problem of representing the hand-constructed rooted forest that we want to make. We considered two levels of representation: a serialised format, and a graphical/visual format. I decided to represent the trees serially by using Newick format, and graphically by feeding the Newick data into the toytree library. Along the way, I switched to a different theoretical representation, in which the inner nodes (i.e. the vertices that aren’t leaves) are left anonymous (rather than each vertex being an odd job), and the members of our odd job universe are all leaves — and vice versa. This is more similar to typical phylogenetic trees, but also meant that we had to change how we constrain the rooted forest’s construction. Nevertheless, the new constraint is similar to the old one: it’s a simple one-way implication between two orderings, one of the orderings being our hand-constructed weak ordering of the odd job universe, and the other ordering being some ordering defined over the vertex set of our rooted forest.

In the previous section, we did put together some actual tree data, and rendered it into various visual diagrams. But we didn’t include every element of our odd job universe — only the permabeginner ones. So, the task remains to put together at least one satisfactory rooted forest that includes every member of our universe. So I did that. The tree data can be found in 00-00.tree, and the script used to render the diagrams seen below can be found at render.py.

Odd job phylogeny v0.0

Odd job phylogeny v0.0

Odd job phylogeny v0.0, geometric version

Odd job phylogeny v0.0, radial version

I wrote the Newick data by hand, starting from the data used in the previous section. From there, I basically just went through the hand-constructed weak ordering as found in ../072/weak_ordering.ron, from top to bottom, and inserted each job into the tree by hand. There were a few exceptions here and there, and I had to go back and tweak the tree numerous times, but that was basically the idea. In order to keep things more human-readable, I used indentation in a consistent way, throughout the Newick data, to make the hierarchical structure more clear. This turned out to be a slight issue, because toytree’s Newick parser can’t handle any newlines within the Newick data itself (i.e. it’s after the semicolon, or before the beginning of the data). This is technically incorrect, as Newick parsers are supposed to ignore whitespace (unless perhaps it’s found within a name). Indeed, toytree’s parser does correctly ignore some ASCII whitespace that isn’t an LF (viz. U+0020, U+000D, and U+0009), but sees an LF as a separator of multiple trees. So having an LF within the tree data unexpectedly truncates it, which generally leaves you with ungrammatical garbage. The offending line of code can be found here. However, this admits a simple workaround, which I implement in render.py as removing all whitespace from the Newick data before handing it over to toytree.

Another thing that I had to work around was the fact that Newick data doesn’t allow certain characters to be part of names. The important ones are whitespace and round brackets, which appear in several of the odd job names (e.g. “HP warrior” contains whitespace, “woods(wo)man” contains round brackets). So the rename_nodes function in render.py performs a depth-first traversal of the tree, renaming leaf nodes as it goes (e.g. “HP_warrior” ↦ “HP warrior”).

There are some issues with determining the structure of the tree (even if we ignore the weights of the edges), which arise naturally due to the fact that we are shoehorning our universe into a phylogenetic tree. But, before I get to that, I want to check that my tree actually satisfies the constraint given in the previous section: 𝑜 ≺ 𝑝 → 𝑜 ≾ 𝑝. Of course, I had this constraint in mind while putting the tree together, but it’s a little difficult to really tell whether or not it’s fully satisfied by just looking at the Newick data and/or the resulting diagrams. Better is to have a program that can ensure this satisfaction automatically…

The script found in constraint_check.py does exactly this, by leveraging the in-memory tree representation that is part of toytree’s API. This program does a depth-first traversal of the tree, building up an associative array that maps each node’s name to its distance from the root. The program also keeps an in-memory representation of the weak ordering that was constructed by hand in ../072/weak_ordering.ron. This information is then used to compare every possible pair of odd jobs, ensuring that the desired constraint is satisfied for all such pairs. Much to my relief, the program doesn’t find any discrepancies.

With that taken care of, I’d like to talk about the actual structure of the tree that I constructed, and the issues and difficulties that arise along the way. But I think I’ll save that for next time. :)

Horntail (1st-)prehead run!!

Gruzz, xBowtjuhNL, Harlez (VigiI), Bipp (Cassandro, Copo, Sommer, Celim, Fino), ItsPav, and I (as my darksterity knight rusa) planned to do some kind of Horntail (HT) run, but just with the prehead(s). For those not familiar, HT runs proceed in a series of three stages:

  1. Fight the first prehead, which pops out of the right side of the first map, pointing towards the left.
  2. Fight the second prehead, which pops out of the left side of the second map, pointing towards the right.
  3. Summon HT itself in the third & final map, which is the main fight. This HT has multiple body parts, all of which must be slain in order to get the huge loot and EXP at the end.

Our plan was to only do (1.) & (2.), or possibly only (1.). This is a lot easier than actually fighting HT itself, but still not for the faint of heart:

That being said, between the six of us, we thought we’d be capable of taking down at least one prehead, so we wanted to do it for the big achievement. And maybe some EXP? Who knows. One thing pushing us to do this run earlier, rather than later, was that we wanted to do it before Harlez hit level 155. Because HT (and its preheads) are level 160, any level ≥155 character gets party EXP normally. But other characters cannot get party EXP normally, effectively meaning that higher-level characters rob the lower-level characters of their EXP. The solution is, then, to make sure that everyone is on the same side of the threshold — either all level ≥155, or all level <155.

We got everyone together, made sure that everyone had their Dragon Elixirs — and helping those who didn’t have one to do the quest — and headed into the cave:

HT prehead krew

Most of us — myself included — already had a Certificate of the Dragon Squad, so we were able to warp the entire party past HTPQ (Horntail Party Quest), and into the proper Cave of Life.

Our first attempt, unfortunately, was a failure. We chipped off some of the first prehead’s HP, but then xBowtjuhNL met an unfortunate demise:

First prehead run failed…

Harlez (who is a shadower) acted as effectively our “sed[uce] mule”, which meant that he was always the first character to enter any map. Seduce always targets the first PC who entered the map (unless it’s a “mass” sed), so Harlez was the natural choice, as his AVOID is very high, and he has Shadow Shifter, plenty of MAXHP, and Meso Guard. This meant that ItsPav, a bishop and our only party member with Heal, was on babysitting duty any time that Harlez got seduced. While we were talking about this, xBowtjuhNL accidentally died…

But the second run was much better! Here we are, fighting the first prehead for the second time:

Killing the 1st prehead

The preheads do this really annoying attack that launches you backwards (i.e. to the left wall) and briefly stuns. It seems that even if you jump, this attack can’t be dodged. However, you can still avoid it using normal AVOID mechanics, as well as with Shadow Shifter. And Power Stance will prevent the pushback and stun, even if you do get hit and take the damage. So here is a screenshot that I snagged when I happened to be the only one (besides Bipp) who didn’t get launched backwards:

rusa’s damage vs. 1st prehead

This screenshot let me pretty clearly see at least two of my damage lines; you can see me doing a 3 216 damage line, and a 6 170 critical damage line. The critical one would have been 3 383, had it not been a crit. These are pretty small damage lines for rusa, considering that she is zerking here, and is buffed by a Cider and some level of MW (I think MW20, although it was definitely at least MW10). The reason for this is simply that the head has 1 760(!) WDEF, and rusa is 21(!) levels below the head in this image. Being a DEX warrior (particularly as a DEX DK, meaning no pre-WDEF damage multipliers like Combo Attack or elemental charges), WDEF impacts my damage a lot — my raw damage range is quite low and stable.

We did, eventually, slay the beast:

The 1st prehead dies!!

Hurrah! The first prehead is dead!! And we got… well, some EXP, at least. The effective EPH here was pretty bad for everyone involved, and rusa was no exception. But it was cool~!!

We knew, at this point, that we didn’t have enough time to kill the second prehead. But we thought we’d at least go and check it out. Turns out, although the direction of the second prehead is reversed in comparison to the first prehead (it comes out of the left wall instead of the right wall, and faces rightwards instead of leftwards), they both knock PCs in the same direction (leftwards) when dealing damage. This was Bad News™ for rusa, as my ability to consistently zerk whilst fighting the first prehead was predicated on the fact that I could not be knocked rightwards (unless by a stray Wyvern). This meant that I effectively never had to worry about taking touch damage. Now, with the second prehead, the situation was reversed…:

Stupid meme…

Very stupid maymay

All-Oddjobs EPQ~!

I had the pleasure of doing some all-Oddjobs EPQs on my DEX brawler EPQ/LPQ mule sorts!! I filmed the first one, featuring Cassandro (Bipp, Sommer, Copo, Fino, Celim) the claw clericlet, Nyanners (Taima, Hanyou, Boymoder, Tacgnol, Numidium, Gambolpuddy, Inugami) the steelwoman permawarrior, and Suzuran (xAme, AmeAme) the blood dit! You can watch an edited version of the footage on the official Oddjobs YouTube channel!!:

All-Oddjobs EPQ! [YouTube]

The evil bunny children diaries

Have you ever mercilessly murdered any evil bunny children (a.k.a. “Kid Mannequins” (“KMs”*))? If not, believe me when I say that you would, if only you had met them. They are vicious and murderous creatures who will do immense damage do you without even being provoked! You can’t even get near then without being chased by them!! I, personally, have died many times to Kid Mannequins, and have witnessed many deaths of my comrades at their tiny, fuzzy, evil hands. STRginner queen Taima (Nyanners, Hanyou, Boymoder, Tacgnol, Numidium, Gambolpuddy, Inugami) and I (as my undead daggermit alces) were determined to put a stop to this madness, so we set out to eliminate them once and for all:

Evil bunny child murder lies within…

alces & Taima @ Kid Mannequins

On the bright side, they grant no small quantity of EXP upon being killed…

alces hits level 95~!

I came back to KMs on my I/L magelet cervine when I grabbed some GM buffs on her:

cervine w/ GM buffs & Taima, @ KMs

Okay, I admit — the EXP is pretty good for alces:

alces hits level 96~!

…But they just won’t stay dead!! On another set of GM boofs, I joined both Taima, and a fellow STRginner Permanovice (Battlesage, Dreamscapes, Paean), as cervine:

cervine, Taima, & Permanovice @ KMs

When training here — particularly when duoing/trioing — I like to have my pure STR bishop cervid parked in the FM entrance to give us buffs: mostly HS, but also Bless & MW9. This increases EPH by quite a bit, and also increases MPH significantly.

Permarogue extraordinaire xX17Xx (breakcore, attackattack, drainer, strainer, raving) was passing us on the way to train at Fancy Amps, so she stopped to train with Taima & I!:

Taima, xX17Xx, & alces @ KMs

Things get a little chaotic with three people at KMs, as the map is divided exactly in half by the two map-wide platforms. There’s no obvious way to distribute people across the platforms, but we made it work.

And, I was fortunate enough to be there when Taima hit the big 110!!!!:

Taima hits level 110!!!

Gratz again! ^^

And, alces is level 99 now…

alces hits level 99~!

Tune in next time, where alces will hopefully hit the big triple digits and hold that fancy GDK!!

Footnotes for “The evil bunny children diaries”

*Not to be confused with one of its capitonyms, KMS, which stands for “Korean MapleStory”.

More adventures with alces

I thought it was about time for me to get alces some pet equips, to boost her relatively fragile MAXHP. For that, though, I would need enough pets to equip all that MAXHP gear. So I headed over to the Pet-Walking Road in Henesys to do the JQ:

alces finishes the Henesys pet JQ :)

You can see how surprised Trainer Frod is to see that I’ve completed the JQ, without using FJ even once!

Now that I had Follow the Lead, it was time to buy two more pets, in addition to the Jr. Reaper that I already had:

alces has 3 pets now!

That’s right, two more Jr. Reapers! I guess they come with a “set effect” that makes them aggressively spout chat/thought bubbles with random images and colours…

During our usual scheduled area-bossing time, I met up with fellow Oddjobs member LawdHeComin (Snel), the F/P archgish, to kill some HHs! We were fortunate enough to find half a dozen of them at Hollowed [sic] Ground!:

alces & LawdHeComin vs. HH

And after killing just two or three of them, alces hit level 97~!:

alces levels to HH~!

capre stares down some bosses

On my woodsmaster capreolina, I did some of the usual Ravanas and Papulatuses with marksman xBowtjuhNL. I rarely have the occasion to use my Puppet — although that’s probably partially because I’m so averse to using it, as it used to be extremely buggy — but these runs gave me some chance to use it. Like when Rav gets unpinned from the left wall and starts waltzing around like a big six-armed dummy:

Double-Puppeteering Rav

Or when xBowtjuhNL switches to a clean PSB and lets me solo Papu’s second body:

capreolina semi-soloing Papu’s second body

And, later on, Harlez introduced me to an area boss called Kacchuu Musha*. This heavily-armoured samurai zombie is no joke, with a whopping 78M HP, and a magic attack that deals over 9k damage. Now, even with HB, capreolina doesn’t have quite enough MAXHP to take a hit from this magical attack. The trick is, though, that the magic attack only hits those who are within a certain distance of Kacchuu Musha. And, as an archer wielding a (cross)bow, it’s possible to hit Kacchuu Musha from outside of this range:

capreolina & Harlez vs. Kacchuu Musha

It’s a bit tough to do, and pretty much relies on being able to pin the Kacchuu Musha, but luckily it only has a knockback threshold of 250. That being said, I did die a number of times. Getting back to the map that spawns Kacchuu Musha is difficult, just because of how confusing the Ninja Castle is. All of the maps have the same name (“Ninja Castle Hallway”), and there are no explicit portals — only cracks in the wall, holes in the floor, etc. I still have troubles walking there myself (remembering the exact route is a bit tough for me), but I was sort of able to get around that by having my pure STR bishop cervid walk there, and then door capreolina whenever she needed it.

In the end, we did kill this thing, and boy does it give some EXP. Its base EXP is 3.68M, which means that killing it solo and unbuffed (and not during an event) would grant a whopping 7.36M EXP!

Footnotes for “capre stares down some bosses”

*It appears that Kacchuu comes from 「甲冑」 ⟨katchū⟩, meaning “helmet & armour”. And Musha from 「武者」 ⟨musha⟩, meaning “warrior”.

cervine does a lil more questing~

In the previous diary entry, my I/L magelet cervine went out and did a bunch of questing. Well, she has since continued a bit of that…

I was in Taipei 101 for CD refrigeration purposes, so I headed back to Victoria Island. I then needed to head to Ossyria for the quests that I was doing, so I took the (flying) boat from Ellinia to Orbis:

Questing With cervine™

cervine vs. crogs

From there, I headed down the Orbis Tower towards El Nath for Dr. De Lang’s Notes, and to kill 100 Leatties for Acquiring the Seed for the Snowfield Rose:

cervine vs. Leatties

And then, I headed back up the tower to Orbis, to kill some Lunar Pixies for The Fairy in Despair 1:

Lunar Pixie card get!

I actually finished the Lunar Pixie card set by this point, and I even got a courtesy Star Pixie card as well!:

Star Pixie card get!

With the Snow Rose Seed in hand, it was time to head back to Magatia and get a Snow Rose for Humanoid A:

cervine obtains the Snow Rose~

I then headed to Area A-3 of the Alcadno Research Institute to kill some Reinforced Iron Mutaes for a present, for Keeny:

Reinforced Iron Mutae card get!

I killed D. Roys until one finally dropped a Broken Mechanical Heart, also as a present, for Keeny:

cervine vs. D. Roy

Now, it was time to get started on the latter leg of the main Magatia questline. Starting this second leg is a bit tricky, as the game gives very few hints about how to proceed — these quests can only be started by entering a hidden map, at which point a lightbulb pops above your character’s head. Before that, there’s nothing in the quest journal about any available quests, or anything like that.

For Parwen’s Lab, I killed a bunch of these Site* things:

Site card get!

I got really lucky with the cards here — I think I had 3⧸5 or 4⧸5 by the time that I finished the associated quests. Also associated with the Sites is The Secret, Quiet Passage, which I did concurrently as well. This latter quest is the one that gives you access to the passage directly between the Alcadno laboratories and the Zenumist laboratories, which is where Kimera spawns.

With that, Parwen took me to see Dr. De Lang himself:

Meeting Dr. De Lang…

This is, apparently, not actually Dr. De Lang. The wording is a bit vague, but Parwen says:

Parwen: Where? Hmm… there’s no such place where he resides. It’s just a[n] afterimage from the past.

cervine: Can you tell me where he is right now?

Parwen: There’s no way you can tell. Like I said, it’s just a[n] afterimage. It’s nothing important, so just forget about it.

Hmmm… Well, it looks like cervine is going to have to do some more investigation, in the next episode of Questing With cervine™!

Footnotes for “cervine does a lil more questing~”

*These are called Cyti, when inside of MPQ.

Dodging snails, avoiding mushrooms

The highest-ACC monster species on Maple Island is the Orange Mushroom. Orange Mushrooms have 42⁢ ACC. The dodgerate (here denoted by 𝑑) against monsters’ physical attacks is:

𝑑 = AVOID 4.5 ACC .

Well, not quite. The result of this arithmetic gets clamped between two values. For thieves, the result gets clamped to the interval [0.05,0.95]. For everyone else (including beginners), the result gets clamped to the interval [0.02,0.80]. So, the ultimate goal is to achieve a dodgerate of 0.80 against Orange Mushrooms.

As mentioned before, Orange Mushrooms have 42⁢ ACC. So the above formula simplifies to:

𝑑 = AVOID 189 .

Then, we can set 𝑑0.80 and solve for AVOID. Doing that, we obtain AVOID=0.80189=151.2. Because we only care about beginners, we know that actual AVOID values are always integer multiples of 0.25 (in other words, 𝑛4 for some integer 𝑛). So effectively, the ultimate goal is AVOID151.25.

Naturally, this leads to the question of “what’s the earliest level at which I can achieve this amount of AVOID?”. Unfortunately for us, this is highly situational, as there are other reasons to allocate AP other than improving AVOID (otherwise all islanders would have 4⧸4⧸4⧸x base stats). And, worse yet, it depends not just on base stats, but also on items & buffs (e.g. White Gomushins, the Dexterity Potions from Myo Myo, &c.). So we’ll look at a simplified case.

One (over)simplified case is a naked (i.e. no equipment) & unbuffed islander with 4⧸4⧸4⧸x base stats (and no AP spent on maxHP nor maxMP). This (over)simplification allows us to easily calculate the level at which our hypothetical islander reaches the ultimate goal.

The 4 total DEX grants 40.25=1⁢ AVOID. At level 1, our islander has 13⁢ LUK, which grants 130.5=6.5⁢ AVOID. So, at level 1, our islander has 1+6.5=7.5⁢ AVOID. Each level gets them 5⁢ AP, which becomes 5 additional LUK, which grants 50.5=2.5⁢ AVOID. So their AVOID is then given by the formula:

AVOID = 2.5 LVL + 5

…Where LVL is the character’s level.

Setting AVOID151.25, we get LVL=151.2552.5=58.5. Rounding towards positive infinity, we get level 59.

Of course, this is a slightly idealised case, so for most practical purposes, islanders who want this kind of avoidability will likely end up adding LUK beyond level 59.

Or, you can just get GM boofs…:

ozotoceros on GM boofs

I’ve been asked, on multiple occasions, about AVOID in the context of islanders. So, this is here as something that I can direct people to, so that they can get a basic rundown. To make things a little more complete, here’s a table of every monster species on Maple Island, along with their ACC values, & the associated AVOID thresholds required to maximise the islander’s dodgerate (𝑑=0.80) against them:

species ACC AVOID threshold
Orange Mushroom 42 151.25
Pig 40 144.00
Slime 35 126.00
Red Snail 35 126.00
Stump 30 108.00
Shroom 30 108.00
Blue Snail 20 72.00
Snail 20 72.00

Levelling up with rusa

I duoed 7F — as my darksterity knight rusa — with shadower Harlez (VigiI), when we both had GM buffs. And boy, is the EXP absolutely bonkers:

rusa duoing 7F w/ Harlez on GM buffs, @epm test

HS really is ridiculously powerful, innit. Powerful enough to get rusa to level 139, at least!:

rusa hits level 139~!

Later, rusa did a number of Krex runs, joined by Harlez, xBowtjuhNL, and others. In fact, in one session we did not one, not two, not t(h)ree, but four Krexel runs:

The first of many Krexes…

Pictured above is the first Krex run out of this series of four. Doing the usual two Krexes (as it can only be entered twice daily, at most) is already enough mind-numbing punishment for most people. But we were, apparently, not satisfied. Because the number of possible entries resets at midnight (server time, which is just UTC), we did two a bit before midnight, and then two immediately after midnight.

The first two were done with dark knight Jatizso and hero WarSeven, who asked me about rusa’s build. One thing that I never even really considered before this point was that rusa doesn’t have to worry about “MISS”ing the Golden Giants at 7F. Those guys have a whopping 75(!) AVOID, meaning that a level ≥130 physical attacker needs ≥276 total WACC to be capable of hitting them 100% of the time. For rusa, that’s basically nothing. But for ordinary warriors, it’s quite the challenge.

Also, I was reminded that my Power Stance was level 19, and I still had yet to pass a Stance 30 book. So I went ahead and did that:

rusa passes a Stance 30~!

Luckily for me, I passed it on the first try. These books seem to be a bit inconsistently priced, where they are rare enough to be worth something, but the demand isn’t quite high enough to keep the prices consistent. This one was 1.5M mesos, so it was a decent deal.

Oh, and rusa is on the same account as my undead daggermit alces. The plan was to make a set of three pet equips scrolled for MAXHP, and then share them between the characters on that account (via the Cash Shop inventory). This meant that I also had to get three pets for rusa:

rusa finishes the Henesys pet JQ

Well, I got two more Rudolphs (in addition to the one that rusa already had), and it turns out that these get a set effect too, if you have three of them:

rusa has 3 pets now…

Appropriately for the winter holidays (albeit less so for the summer holidays), this set effect is an igloo with some snow-covered conifers, a snowman, and a penguin. Unfortunately, I hate it. So, I may get rid of one of the Rudolphs at some point, and replace it with… some other pet.

In any case, rusa hit level 140 at 7F!:

rusa hits level 140~!

And, I got to do a Zakum run alongside fellow Oddjobs member LawdHeComin (Snel), the F/P archgish!!:

rusa & LawdHeComin killing Zakum together

Also, in the bottom-left corner there, you can see Cassandro (Bipp, Copo, Sommer, Celim, Fino), the claw clericlet! He tagged along in hopes of a zhelm, but unfortunately wasn’t able to survive until the end (I could only Resurrect him once, so he had to mostly survive on his own).

And, finally, rusa is now level 141 :3

rusa hits level 141~!

My first-ever CWKPQ~!

As seen in past entries of this diary, I’ve been inside of CWKPQ (Crimsonwood Keep Party Quest) before. But only as a MoN buyer — I have a MoN on my pure STR bishop cervid, on my woodsmaster capreolina, and on my I/L magelet cervine. But I’ve never actually done the PQ! Well, that has since changed!! I got the privilege of doing a CWKPQ on my darksterity knight rusa, hosted by nightlord Keirilius of Vandals, and featuring members of the Funk guild, as well as other guilds like Beaters, Kyoto, and Athena. I tried filming this PQ — unfortunately, doing the boss fight and screen recording at the same time proved to be too much for my poor CPU to handle, so the footage stops about 10% of the way into the boss stage — but you can watch some clips from the run on the Oddjobs YouTube channel!:

clips from rusa’s first CWKPQ~ [YouTube]

Some time after the point at which I was forced to stop recording, the ranged folks (in this case, bowmasters, marksmen, and nightlords) came down to the floor, where the three bosses are that are typically handled by the melee folks:

Ranged folks come to the cleave side

The mage and pirate* bosses spawn on the platforms above, but at this point they had already been slain, so the ranged folks came down and got a taste of how annoying the floor bosses can be (warrior, archer, thief). Basically, these bosses constantly spam stuns and seals, and also have an attack that pushes you backwards and briefly stuns (similar to the HT preheads). This makes it impossible to effectively fight these guys, unless you have Holy Shield active, or Smokescreen active, or… you’re hugging the bosses and constantly taking touch attacks from them, instead. So, as a ranged attacker, this is kind of a shit deal. But for melee folks, constantly receiving touch attacks from the bosses is much more doable.

In any case, being able to CWKPQ was super fun, and I hope that I get to do it again in the future. By the end of it all, I got to break some (viz. three) boxes in the bonus stage, and got some nifty loot!:

CWKPQ loot

The items here that aren’t 30% scrolls are Sugar-Coated Olives and Sunblock. The former is basically just Haste for five minutes, in an item! And Sunblock is a mighty MDEF buff (+200 MDEF!!), which is great for when you need to squeeze out that extra bit of defence to avoid getting one-shotted by bosses like Capt. Latanica!

Footnotes for “My first-ever CWKPQ~!”

*The pirate boss is usually called “Nagrom” (“Morgan” spelled in reverse) — the CWKPQ guide on the MapleLegends forums even names it as such — but it is actually called “Heron” in MapleLegends, including within the MapleLegends library.