Official development blog

Special Mode Design, Polymind Part 2: Players, Stats, and the Future

Last time in part 1 I covered everything leading up to Cogmind’s Winter 2022/Polymind event, so architecture, UX design, balance, multitile robot considerations etc. Now let’s take a look at the aftermath!

After Polymind was finally released and I could take a breather, I had a lot of fun seeing other players dive into it, reflected both in what’s been shared on the Discord server and also simply by checking out scoresheet uploads since those include new information specific to the event mode.

Cogmind Polymind Scoresheet Map Excerpt w/Annotations by Captain Croissandwich

It’s especially funny seeing Cogmind in the scoresheet’s final map summary represented by a character other than ‘@’, as seen here in an image shared by Captain Croissandwich who is just around the corner from the exit/win after having already opened the door, as a ‘u’ (Builder/Engineer)… kinda surrounded by unfriendly bots that had clearly become too suspicious!

Any time new play styles are introduced, there’s always a good bit of activity in the community since figuring out a new meta in an otherwise familiar world is an interesting exercise for fans. Polymind being a pretty extreme departure from normal Cogmind, there’s a lot to figure out.

My hope was that players would find creative new solutions to challenges, or at least fun aspects to toy with while setting their own unique goals besides simply winning.

Some strategies are obvious, as intended, such as preferring to take control of allies since their cost is always much lower (generally by 66%, though there are exceptions), and others are more indirect, such as obtaining robot schematics and fabricating desirable allies to then control.

The great thing about combat-capable allies is that later releasing control doesn’t result in having an angry hostile right next to you. Combat-capable hosts are useful, even required sometimes because they’re more resilient while also being the primary method of obtaining more Protomatter, but as aptly described by players there is a “riding the tiger” aspect to trying to leave a hostile one behind once you’re in control. You’ll likely want to get their weapons shot off first, or have some other plan.

Players also came up with the interesting strategy of using Repair Stations to remove unwanted parts from your host, since unlike Cogmind, hosts are not capable of reattaching the repaired parts themselves.

NPCs are commonly desired hosts, generally expensive but also relatively powerful compared to most common Complex 0b10 bots. Strategically speaking, the main goal of taking a combat host is to eventually end up with more Protomatter than you spent on it in the first place, so we’re back to the importance of those cost numbers, and no doubt more fine tuning is called for.

On that note one particularly strong strategy is “Tracker chaining,” or intentionally getting what are normally dangerous enemies sent after you, specifically with the intent to take control of them and use them to fight their friends--rinse and repeat as you progress. In a later update I had to significantly up their cost because Trackers are a special robot outside the normal build balancing rules, at least insofar as our integrity and core exposure variables do not reflect what they’re really capable of. Even after the increase they’re still good, though somewhat more balanced.

One of the most interesting discoveries, made by CaptainWinky, takes advantage of a Mechanic host’s repair abilities to build robot friends! Normally Mechanics use a collection of Backup parts from their inventory to restore basic functionality to robots that have lost their power/propulsion/weapons, and I had assumed that when fitting replacements they search for the appropriate Backup-named part, but no… The assumption is that their inventory would never contain anything other than Backup parts, so the code actually just checks for any available inventory parts that match the desired target slot (a faster check). You can see where this is going :P

Cogmind Polymind Allied Grunt w/Powerful Parts (fitted via Mechanic host)

A regular controllable grunt with very powerful gear xD (screenshot by CaptainWinky while testing the concept in wizard mode)

Since they’re not limited to Backup-series parts, with a Mechanic host you can gather other parts and “repair” your allies with a different loadout. Totally didn’t expect that, but it’s great.

In practice it’s probably hard to take advantage of since it’s a repair functionality after all, one that can’t be used unless the ally in question has an empty slot after taking damage. Other robots are not usually very resilient, so by then their core will often already be damaged as well, after which even with new parts they’ll probably end up dying quickly anyway. It might come in handy later on with stronger robots, or in specific situations. You also can’t fit any utilities to a robot, since that’s not a category of parts they replace with Backups (although this specific discovery honestly has me thinking about adding something that would slot in as a Backup utility).

Stats!

Now that the event has come to an end, the Polymind leaderboards have reached their final state, and it’s time to review the run data and pick out some stats for closer examination!

Cogmind Polymind Leaderboards (final)

Final Polymind leaderboards.

I tacked a couple extra days onto the end of the leaderboard cutoff past when the Polymind autoactivation period ended (through January 7th) so that anyone who had started a run near the end had some time to finish it and still be included. That means the official event ran for about 16 days, though other runs outside that period (and any additional lower-scoring runs for each player) can of course be found in the complete Beta 11.2 run database.

During this period, a total of 786 Cogmind runs were submitted, 328 (41.7%) of which were something other than Polymind. In a majority of cases those other runs were new players who didn’t yet qualify to have the mode start automatically, the remainder being anyone who deactivated it manually (didn’t want to participate) or playing some other special mode (launching any new event tends to bring attention to past events).

The data we’re looking at here is for the 457 Polymind runs (58.1% of the total) submitted by 113 unique players. That’s an average of 4 runs per participant. Polymind run counts per player ranged from 1 to 20, but most people played through at least a few runs. (Reminder: Cogmind run data is opt-in, so we don’t have any info for those who are not submitting scores.)

There were a total of 14 Polymind wins by 10 unique players, including two extended wins (both by aoemica). All winning runs except for one took less than three hours, and most were about 1~2 hours, so as reported Polymind runs do tend to be faster than regular Cogmind (see the Beta 10 stat summary for a graph of Win Count by Hours). The reduced length comes mainly because you have few significant incentives to take detours and collect branch rewards, or even seek out specific items--it’s simply a matter of survival to the end through a process of controlling other bots while gaining enough Protomatter to maintain that momentum.

Total play hours for this data set clocked in at 276 hours, so about twice what I spent on it. Not a great ratio, but then not surprising since I mostly work to serve a smaller number of long-term players at this point, and as I’ll write a bit about later, some of the work could impact the main game itself and gain more longevity that way. Plus of course some people will still play Polymind in the future.

Polymind Classes

One of the more fun bits of Polymind data which I was eager to examine is the class distribution list, since unlike the normal behavior which derives player build types from their current loadout, here we could instead use it to see what classes of bots they’re preferring to control (I had the system switch to simply reporting the current host class).

Among those runs with a Dominant Class of “Cogmind,” meaning their most common state was running around naked with no host at all, the majority were understandably limited to the early game (first few depths). 38% of Cogmind-dominant runs, however, reported making it to the mid- or late-game (none won), with half of those also naked for the majority of the entire run.

Of course most Polyminds spent their time in control of hosts, as expected, averaging 4 different classes of host throughout their run.

The record-holder for greatest number of unique classes controlled in a single run is CaptainWinky, whose list includes 11 different classes (making it onto the list requires spending at least 3% of the run using a given class):

Cogmind Polymind Scoresheet (Captain Winky): Class Distribution

CaptainWinky controlled a Sentry-class robot for 24% of their run, but also controlled hosts of 10 other types.

The number of unique host classes ranged from 3 to 9 among winning runs, so generally above average. Actually, the only winning run with a below-average dominant class count was my own--only three! During that run (being my first) I tried out a number of other classes, but not for a significant enough chunk of relative time to be included in the list.

Cogmind Polymind Scoresheet (Kyzrati): Class Distribution

Class distribution for my Polymind win.

As you can see I’m a fan of Heavies and their devastating firepower and just all around buff part-covered builds (plus they can rest off their suspicion at guard points!).

Despite my high 62% preference for Heavies, among winning runs that one actually ranks behind another for emphasis on a single host: LILY’s dominant class was Programmer, at 67%!

Cogmind Polymind Stats: Dominant Classes (winning runs)

Dominant class for each of Polymind’s winning runs, ranked by how dominant it really was throughout that run.

Here I should mention that I’m not differentiating difficulty modes for the purpose of Polymind data analysis. LILY had the only non-Rogue run among the wins, one of 76 (16.6% of the total).

To give some of the data coming out of these lists proper context, we’ll also have to explain one of the quirks of the class system: While players are certainly familiar with common Grunts, Sentries, and whatnot, some may not be aware that there are other special robots also categorized as those same classes. For example, some runs may show a high percentage of Swarmer hosts, like KTG-v3’s win spent 48% as a Swarmer! Examining the history log from that run we can see they indeed must have controlled common Swarmers for numerous maps before finally switching to the one and only Tracker (a special, more powerful, type of Swarmer) they eventually controlled in Research.

Cogmind Polymind Scoresheet: History Log w/Special Host

KTG-v3 takes control of a Tracker in Research. Before this, seven of the maps they traversed using common Swarmers.

So the history log provides more color as to what kinds of special hosts each player controlled, as does the event-specific “host kill count leaderboard,” both of which record the specific variant or name of the host. It is there that we can examine hosts of particular interest.

122 (26.7%) Polyminds controlled at least one unique special host, with about half of those controlling more than one. youngster controlled the largest variety of special hosts, eight in all, in a run that eventually went on to win.

By far the most popular special host to control was EX-DEC, an Exile that could be met early and controlled for relatively cheap, considering the formula-based Protomatter costs. EX-DEC is not normally a combat bot, but does carry a decently powerful autonomous weapon that allows them to move and shoot at the same time.

Cogmind Polymind Stats: Special Hosts Controlled (all runs)

Special hosts ranked by total times controlled across all Polymind runs.

The Tracker is up there, too, being quite cheap for a good while (that formula again…) until I significantly increased it manually in a later update (though still plenty worth it considering how powerful they are). Beasts make sense at #3 as one of the earliest ways to have some fun with a destructive multitile robot. The next two, Strikers and Executioners, along with many others on this list are clearly from Warlord-related events where these combat bots are either cheap (allied) or at least plentiful and effective. Many of the rest are various NPCs, since almost nothing was off limits for control, and NPCs often have decent loadouts.

The full mapwise Dominant Class list that goes along with these can be even more interesting, in order to see which stretches of the world, and for how long, players used them, but that data contains much bigger spoilers so I’ll leave that off here. You can always check out other Polymind stats on your own by examining the raw Beta 11.2 run data to see more (sort by Mode to more easily find all Polymind runs).

Polymind-specific Scoring

Some bigger Cogmind events come with their own dedicated section in the scoresheet for recording event-specific data, and for Polymind there we’ll find some other entries besides the host kill leaderboard.

Cogmind Polymind Scoresheet: Polymind Data Sample

A sample Polymind scoresheet’s data section.

Among the Polymind-specific scoresheet data, we have the Top 5 Hosts by Kills per run, where it’s interesting to pick out the most destructive individual hosts among winning runs. Captain Winky led in this category by far, having managed to take control of 8R-AWN, by far the most powerful early target but also very expensive for that depth, hence only being used twice during the event.

Cogmind Polymind Stats: Top Deadly Hosts Ranked by Kills (w/player) (wins only)

Polymind’s ten most deadly hosts (and their controlling player) among winning runs.

The kill records get even higher if we include all runs, even those that did not ascend:

Cogmind Polymind Stats: Top 10 Hosts by Kills (all runs)

Top 10 individual Polymind hosts by kills, across all runs.

Captain Winky is still up there, in fact the only one on both lists. We can also see the only other 8R-AWN controller ;). And Perseus sure knows how to get the most out of a host!

Cogmind Polymind Scoresheets: Host Kill Leaderboard Samples

Here are some more samples of host leaderboards submitted in various scoresheets. Each ranks the best hosts by kill count, and where they were first controlled.

Note that during the first couple days of the event there were some issues with the host kill leaderboard system (fixed in one of the several patches), so technically a portion of the earlier runs may have failed to consider a few hosts for inclusion.

With a further fleshing out of the job system, it could also be interesting to tally a corresponding “unsuspicious leaderboard” ranking individual hosts by how much they contributed to lowering suspicion over their lifetime. This would allow us to see what kinds of hosts were being used for that purpose, and their relative effectiveness.

Classes Controlled tallies would be fun to examine over the long term if players were to continue doing many Polymind runs, but as an event there are only so many runs per player. This means the likelihood of optimal play is fairly low, as everyone is still experimenting with possibilities and learning what they can do with different hosts, making that stat less meaningful for aggregate analysis right now.

Robots Controlled data might hold some insights, especially looking at the percentage of new hosts at each depth which are combat-capable, although pulling those numbers from our data set in a meaningful way would be pretty challenging so I didn’t go that far…

Average host suspicion among winning runs was 64.2, lower than I expected! And among non-winning runs the average was 60.7, so not a significant difference. Some of the more interesting runs in this regard:

  • Thermalderp averaged only 26 suspicion, surviving 90% of the run as a Recycler and making it all the way to a -6 Garrison before being destroyed by a Grunt
  • Perseus spent 78% of one run as a Programmer and made it all the way to -1 with an average 32 suspicion
  • LILY and lyrabold tied for the lowest suspicion (40) among winning runs, the former also surviving 67% of the run as a Programmer, and lyrabold 58% Sentry.

Bonus Points

Outside the Polymind section, we also have a special bonus point entry simply called “Polymind Skill.” This value is a combination of multiple factors to reward players for being good polyminds, generally awarding points for behavior and achievements that are not normally sources of bonus points (or don’t even exist in the regular game).

At the high end Polymind Skill tended to contribute about 10-20k points to one’s final score, so often counts for a fairly significant chunk of that.

Cogmind Polymind Leaderboard Polymind Skill Percent

Top 20 Polymind leaderboard scores, along with the percentage of that score accounted for purely by the Polymind Skill bonus.

To compare, I also reranked the leaderboards by Polymind Skill to see what would come out of that:

Cogmind Polymind Leaderboards Re-ranked by Polymind Skill (Top 20)

Polymind leaderboards ranked by Polymind Skill (final Top 20 only).

Only a couple players swapped in/out of the Top 20 when switching metrics, so the effect was not significant in that regard, although it did enable a few players in the Top 20 to jump quite a few places.

I was thinking it might be fun to rank the final Polymind leaderboards using this method, but I would first want to further tweak the values and formulas used to generate the bonus, since all that was set based on theory, before Polymind had ever been played.

Perseus earned the highest Polymind Skill of any run (23176, 32% of their total score), and Captain Winky earned the highest among all wins (17933, 41% of total score).

aoemica had the only extended game wins, and while both of those runs had by far the lowest Polymind Skill as a percentage of score (both only 18%), that’s a more likely result as branches and extended game areas offer lots of alternative point sources to tip the balance in favor of non-Polymind scoring. As far as true play style goes, we could get more accurate readings by looking only at main maps, for example.

One of the preexisting bonus score components pairs especially well with Polymind: pacifism. Polymind’s capabilities of course lend itself to aiming for even more points (and survivability!) via the Pacifist bonus (the way it normally works is that you receive extra points for each new depth reached without having destroyed any robot on any previous floor, generally achieved by either avoiding enemies completely, running from them, or using alternative means of dispatching them). Polymind can fairly easily remain unsuspicious in the early floors, which are dense with cheaply controlled non-combat bots, and the data strongly reflects that: 44.4% of Polymind runs had at least some Pacifist bonus, quite high compared to a mere 4.5% in the regular game!

Looking at runs with the highest Pacifist bonus, we see a bunch of new names:

Cogmind Polymind Top 5 Runs by Pacifist Bonus

Top 5 Polymind runs by Pacifist bonus.

These players were particularly interested in remaining undetected, only sometimes controlling a combat bot such as a Sentry or Hunter to gather Protomatter for more sneaking around (eventually losing their pacifist streak at that point unless they had acquired Protomatter through other means). Above I only listed the primary class for their run, though they tended to control a good variety of classes across their run, at least 5~6 different types.

lcbb_tuk in particular had an interesting one, sticking with the same Watcher picked up in -10/Materials for the entire run. They were apparently attempting to speed run it with that Watcher, a decent choice due to their speed, evasion, and sensors, all in a single package, but eventually headed into the Upper Caves where they were chased down by a P-70 Sage.

Future of Polymind

Like most Cogmind events, Polymind will remain accessible in future versions of the game. (A list of all currently available modes, each with a summary and date when they were held, is avaiable in the manual.)

Seeing as I had already done quite a lot of work on Cogmind’s next version (Beta 12), and that version wasn’t yet itself ready for release, Polymind was developed as part of the public Beta 11.1 branch, and released as 11.2. (Patrons found it funny that when starting up their Beta 12 builds the date-based version notification system informed them that a “newer” version was available, even though Beta 12 has a lot more new stuff :P)

As a pretty big project, one that even included a few features we want back in the regular game as well (that new force melee toggle!), there’s a lot to import into the upcoming Beta 12. I normally don’t bother simultaneously working with multiple branches like this, but here it made sense.

Out of curiosity I checked just how much the code base expanded with the addition of Polymind and was surprised to see it clocked in at nearly 5k lines! Lines of code is of course a pretty bad metric, but it’s easy to calculate and fun to compare nonetheless, as long as the context and limitations are understood. Naturally we want to see how Polymind weighs up against Cogmind’s other special event versions :)

Cogmind Special Event Versions: Lines of Code (2017~2022)

Lines of code added for each of Cogmind’s special event versions over the years (2017~2022).

Yep, as expected Polymind is a chonky one. Also, fond memories of building an entire event in one hour--Launchers mode, Cogmind’s first ever April Fools Day event, which was unannounced and really caught people by surprise ;) (it was made and released on a whim that very morning). Note that some of these larger builds were accompanied by unrelated changes or fixes that could impact the LoC count, but the vast majority (if not all) of each was about the main event. Also note that some events added data as well, but I only compared source code for the purposes of this graph (it’s likely a similar ratio, except with Holiday Mode 2017 which was a data-heavy mode and that’s also part of the reason it was only playable in that version of Cogmind--I didn’t want to keep all that data polluting the later versions).

Anyway, time for Beta 12 Polymind. I’ve merged code before, but not anywhere near on this scale, so I searched up a new tool to help facilitate the process and found the lovely Meld. It’s very easy to use, can be navigated pretty much entirely by keyboard for fast merging, and supports three-way comparisons of directories and the contents of their files.

Cogmind Polymind Merging (Meld): Files

Meld comparison of files between Beta 11.1, 11.2, and 12.

This is perfect for my case since I can load up the original 11.1 alongside 11.2 and 12 while moving all the new parts of 11.2 into 12, most of which are detected just fine.

Cogmind Polymind Merging (Meld): Source Code

Meld source code comparison between Beta 11.1, 11.2, and 12.

There were just a few cases where I had to look a little closer due to some changes while writing Polymind that affected the overall logical organization rather than simple modification to lines of code.

Cogmind Polymind Merging (Meld): Source Code Merge Conflict

A relatively rare sighting during this process: red denoting an obvious conflict.

Of course this was also helpful for merging all the other supporting materials as well, so not just source code but also media files (SFX!) and external data/scripts.

Cogmind Polymind Merging (Meld): Data

Sample data comparison between log message definitions.

After completing the merge, I went and tested it out by streaming a round of Polymind in the IDE. It was meant to be a short one, followed by switching over to regular Cogmind to ensure that’s working properly as well, but I ended up having too much fun (and also playing well enough despite fooling around) to get really close to another Polymind win :P

Since it was basically a test run for dev purposes, there’s some dev talk in there, too.

Among my notes for Polymind, as I built it I was also recording features that would be nice if it were revisited one day for a significant update.

Probably highest priority among them would be making it so that almost any 0b10 robot has more relevant jobs it can do, especially combat bots. Derelict incursions! Calling for help from Garrisons! Basically things that would’ve required a lot more unique content and balancing to actually produce, and therefore beyond the scope of this event. At least there’s the low-hanging fruit of guard-type robots being able to remain at designated guard spots to lower suspicion, but even that system could be expanded.

Examples of other ideas:

  • proper faction responses to various host types outside 0b10
  • more machine interactions for 0b10 classes
  • add derelict reactions to having been a host
  • rework the “hidden faction” issue, since that doesn’t matter in Cogmind but clearly affects behavior in Polymind

I was thinking, and others were even later commenting, that Polymind could really be developed into a whole different game, leveraging the world of Cogmind and layering over it an alternative story and gameplay goals. Of course making another game is on a whole different level in terms of work :P

There are already other possession-focused roguelikes, a surprising number, actually, including also several 7DRLs, commercial projects, as well as multiple games in which it’s not the central mechanic but does at least exist as an ability.

In any case, some of the smaller bits from my notes that never made it into the Polymind event will likely find their way into a future release of Cogmind anyway, like I sometimes do for other major alternative modes when people are still playing them. There are still a couple fixes to come, but I didn’t want to do yet more releases during the event period, since there had already been several…

And even if Polymind is never revisited in a major way, experimenting with events like this, and the features required to get them playable, sometimes has a way of filtering back into the regular game in some form or another.

Like I discovered and experimented with what it’s like if the player has a way to temporarily be “friendly” with 0b10 (without actually changing faction alignment), harking back to that zxc idea about disguises mentioned earlier. Maybe we have a reasonable framework for that now?

Multitile Entity pushing is another feature that could offer a potential route for solving movement issues with very large bots (so long as it’ll agree with the AI--there is a distinct difference between allowing the player to do something and getting the AI to use it properly).

That backup utility for Mechanic repairs is definitely on my radar now, too…

???

???

 

This entry was posted in Design and tagged , . Bookmark the permalink. Trackbacks are closed, but you can post a comment.

Post a Comment

Your email is never published nor shared. Only the anti-spam entry is required. See here for the privacy policy.

You may use these HTML tags and attributes <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>