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
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. :)
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:
- Fight the first prehead, which pops out of the right side of the first map, pointing towards the left.
- Fight the second prehead, which pops out of the left side of the second map, pointing towards the right.
- 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:
- Each prehead has 330M HP, 1 760 WDEF, 1 840 MDEF, and can heal itself for 100k HP at a time.
- Each prehead hits for roughly ≈15k damage if you touch it, although its magic attacks generally only deal slightly more than ≈5k damage each.
- Both preheads are capable of seducing, which renders a seduced character unable to attack, use potions(!) (including pet autopot), use skills, move voluntarily, etc. The seduce effect causes the character to be forced to walk leftwards, or walk rightwards, or jump in place. Indeed, the only voluntary actions that can be taken by a seduced character are: using Hero’s Will (a kind of “get out of jail free card” for any debuff, including seduce, although it has a ten-minute cooldown), and chatting.
- Both preheads are capable of summoning Wyverns, which are generally harmless unless they are Dark Wyverns. Dark Wyverns are capable of dispelling PCs, which is a big deal for those who rely on buffs like Magic Guard, HB, Meso Guard, etc. to survive. This makes Dark Wyverns particularly terrifying for mages.
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.
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:
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:
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:
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:
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…:
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!!:
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…
On the bright side, they grant no small quantity of EXP upon being killed…
I came back to KMs on my I/L magelet cervine when I grabbed some GM buffs on her:
Okay, I admit — the EXP is pretty good for alces:
…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:
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.
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!!!!:
Gratz again! ^^
And, alces is level 99 now…
Tune in next time, where alces will hopefully hit the big triple digits and hold that fancy GDK!!
*Not to be confused with one of its capitonyms, KMS, which stands for “Korean MapleStory”.
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:
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!:
And after killing just two or three of them, alces hit level 97~!:
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:
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:
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!
*It appears that Kacchuu comes from 「甲冑」 ⟨katchū⟩, meaning “helmet & armour”. And Musha from 「武者」 ⟨musha⟩, meaning “warrior”.
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™
I actually finished the Lunar Pixie card set by this point, and I even got a courtesy Star Pixie card as well!:
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.
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.
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™!
NOTE: A previous version of this essay used the dodge-rate clamping figures from “Nise’s Formula Compilation”. These figures were incorrect, so the calculations that you see here have since been adjusted to use the correct figures.
The highest-ACC monster species on Maple Island is the Orange Mushroom. Orange Mushrooms have 42 ACC. The dodge rate (𝑑) against monsters’ physical attacks is:
𝑑 = 𝖠𝖵𝖮𝖨𝖣 ÷ (4.5 ⋅ 𝖠𝖢𝖢).
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 dodge rate of 0.80 versus Orange Mushrooms.
As mentioned before, Orange Mushrooms have 42 ACC. So the above formula simplifies to:
𝑑 = 𝖠𝖵𝖮𝖨𝖣 ÷ 189.
Then, we can set 𝑑 = 0.80 and solve for 𝖠𝖵𝖮𝖨𝖣. Doing that, we obtain 𝖠𝖵𝖮𝖨𝖣 = 0.80 ⋅ 189 = 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 𝖠𝖵𝖮𝖨𝖣 ≥ 151.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⧸𝑥 base stats). And, worse yet, it depends not just on base stats, but also on items and buffs (e.g. White Gomushins, the Dexterity Potions from Myo Myo, etc.). So we’ll look at a simplified case.
One (over)simplified case is a naked (no equipment) & unbuffed islander with 4⧸4⧸4⧸𝑥 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 4 ⋅ 0.25 = 1 AVOID. At level 1, our islander has 13 LUK, which grants 13 ⋅ 0.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 5 ⋅ 0.5 = 2.5 AVOID. So their AVOID is then given by the formula:
𝖠𝖵𝖮𝖨𝖣 = 2.5𝖫𝖵𝖫 + 5
…where 𝖫𝖵𝖫 is the character’s level.
Setting 𝖠𝖵𝖮𝖨𝖣 = 151.25, we get 𝖫𝖵𝖫 = (151.25 − 5) ÷ 2.5 = level 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…:
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, and the associated AVOID thresholds required to maximise the islander’s dodge rate (𝑑 = 0.80) against them:
Levelling up wif woosa
HS really is ridiculously powerful, innit. Powerful enough to get rusa to level 139, at least!:
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:
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.
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:
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:
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!:
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
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!:
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:
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!:
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!
*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.