Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411505 Posts in 69374 Topics- by 58429 Members - Latest Member: Alternalo

April 25, 2024, 09:31:41 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsCogmind (sci-fi robot-themed roguelike) - BETA RELEASED
Pages: 1 ... 56 57 [58] 59 60 ... 71
Print
Author Topic: Cogmind (sci-fi robot-themed roguelike) - BETA RELEASED  (Read 236827 times)
Kyzrati
Level 10
*****



View Profile WWW
« Reply #1140 on: April 06, 2018, 05:11:08 PM »

And finally the final set of achievement icons! These are the win-related ones:



In terms of implementation, 204 of the 256 achievements are now done, whew Smiley

I did an April 1st event this year that went over pretty well with players, too, by turning all items on the ground into random launchers Tongue

Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1141 on: April 13, 2018, 03:49:02 PM »

All 256 achievements are done! But... there's still a lot to do Tongue

Even just on the achievements side of things there's more UI work before the system can be considered finished, then after that still the Steam support to add as well, for those playing Cogmind on Steam, but at least we're in the tail end of it. And at least all the achievements are both implemented and tested, so the foundation is complete and stable!

As reported last time the final batch of icons was completed, too, so I have a program that can spit out all the icons as individual PNGs (I develop them as REXPaint spritesheets), and those are ready for the next processing steps...



Specifically for Steam players I have to upload all the achievement icons and fill in their tag, name, description, setting.... It'd be nice if Steam supported batch uploading, but no, each has to be done one. at. a. time. xD. I guess that's fine for most games not having quite so many achievements, but it doesn't scale very well!

Steam also uses JPGs for achievements (along with ugly scaling!), so the quality in Steam's interface won't be as good as it is in game (where you always get perfectly crisp pixels, yay! :D)

UI Work

One of the next places you may need to see achievements is one the game over screen. Most achievements will be displayed directly on the map, but a subset of them can be specifically earned only after the run ends, and they should also be shown somewhere convenient. Plus sometimes you may earn an achievement immediately before the run ends and there's no chance for it to appear on the map--those too will show on the game over screen next to the stats.



Any that won't fit in the window (they'll usually fit) can be found in the score sheet as part of the complete list of achievements earned that run.



The score sheet will of course also keep track of the total percentage of achievements earned so far, as it does with lore and gallery items.

So all the little UI features are done, while the big achievements interface is still under construction. (Remember that both Steam and non-Steam players have equal access to the achievements system, which comes with a better UI and functionality than Steam can offer anyway :D) Here's its current state:



It's very WIP right now--missing lots of buttons, some animations are wrong, and some pieces aren't even animating Tongue. I shared the original mockup in an earlier SITREP which you can check out to get an idea of what's missing from the layout.

This'll be finished up for next time, and I'll be writing more about achievements the UI later, including via some dedicated blog posts.

In order to fit achievements into the game menu system, I've made some adjustments there as well. First of all I removed some of the tab/page buttons, and recentered the remaining ones. (Note that the lore and gallery will still be directly accessible via their original number hotkeys, as an extra fast shortcut, you just don't see the buttons there.)



Those features have been consolidated into a single new "Records" page.



That page will be getting more features in the future, but I'll talk about those another time. For now that's where access to lore, gallery, and achievements is provided, along with a little description which is helpful for those just getting into Cogmind.
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1142 on: April 27, 2018, 04:25:13 PM »

Active objects labels are now appearing as the map pans around!



Almost no one's asked for this feature, but I'm sure a lot of players will appreciate it Smiley

Another feature added this week was Even More Autosaving. Cogmind already includes a couple of autosave mechanisms, the first which automatically saves the current run's progress at an adjustable interval, and another which makes a backup copy of the current save and all settings once per day. But this doesn't quite cover all the possibilities--what if something bad happens to the computer at precisely the wrong time and a save file is corrupted? If there's a long run in progress it can still be restored to wherever it was on the previous day, but any progress on the current day would be lost. Not anymore!

The autosave system has been expanded to also save an adjustable number of sequential backups at a designated interval, so even if the current save doesn't work, there's a backup not long before that Smiley



It's pretty rare that players would need this, but probably one of its more useful benefits is making it much easier to track down a subtype of bug which can otherwise be elusive if the issue already happened before the current save. Most bugs can be solved fairly easily given existing tools, but there are a few that are extremely difficult to track without knowing the game state prior to where something went wrong.

And it's really cool having so many devs as players. One of the new players just wrote a python script that takes all of a player's score sheets and creates a whole bunch of interesting progression graphs from them. Some examples:















Many more examples, including from some of the top players.

The source.
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1143 on: May 07, 2018, 05:01:04 PM »

Time to start achieving! While Beta 6 brings with it a ton of other improvements and tweaks, the big new thing is a large collection of achievements to earn, 256 of them spanning six categories. All players have equal access to the achievements system, regardless of whether or not on Steam.



For the full release notes and feature demo images, see here. Cogmind is also 10% off for the next week.

Cogmind Beta 6 "Achievements Unlocked" (0.10.180508) changelog:
  • NEW: 256 achievements (available both on Steam and in offline/DRM-free versions)
  • NEW: 35 new score sheet entries (total = 697)
  • NEW: Achievement names and their icon appear over the map when earned (deactivate or change duration in advanced.cfg: achievementPopupDuration)
  • NEW: Achievements earned reported in message log (toggle in advanced.cfg: showAchievementMessages)
  • NEW: Achievements earned specifically at end of a run appear in new area to right of end game stats
  • NEW: Achievements newly earned throughout a run listed towards end of score sheet
  • NEW: Composite achievement percent listed among score sheet meta data and and scorehistory.txt
  • NEW: Achievements browsing UI (contents sortable and filterable)
  • NEW: Bidirectional automatic syncing between achievements in your local game meta data and Steam records
  • NEW: Optimized startup time, reducing it by about one-third
  • NEW: RTS-style map panning in true fullscreen mode, and new menu option for controlling speed
  • NEW: Added to manual's Key Holding section a mention of holding "wait" key while waiting for a hostile
  • NEW: Updated Dismemberment immunity trait description with explicit notice that it does not prevent the side effect of slashing weapons
  • NEW: Optional Terminus style map glyphs for size 12 and 14 ASCII mode players (see manual under Advanced UI > Fonts)
  • NEW: Optional classic IBM VGA style map glyphs for size 14 ASCII mode players (see manual under Advanced UI > Fonts)
  • NEW: Datajack descriptions explicitly indicate their base chance to rewire traps (10%)
  • NEW: Score sheet records number of moves per propulsion type
  • NEW: Game over screen shows total number of new achievements earned during run
  • NEW: challengeSuperGauntlet description in manual explicitly mentions lack of garrisons at -10/-9
  • NEW: Two challenging (spoiler) plot points that didn't originally earn bonus points now do
  • NEW: "Records" submenu added to game menu, containing links to Gallery/Lore/Achievements data
  • NEW: Export achievements data to TXT, HTML, or CSV for external reading/processing (exports based on selected filters/sorting)
  • NEW: Pre-attack warning about Researchers in view takes effect even if previously scanned (can disable in advanced.cfg: alwaysWarnAboutResearchers)
  • NEW: Core Analyzer effect description explicitly states that critical hits and disruption effects are also applied to affected cores
  • NEW: Dedicated section about achievements added to the manual
  • NEW: Multiple previous autosaves from current run are stored in parallel (adjust number of saves in advanced.cfg: autosaveCount)
  • NEW: While manual hostiles/allies/parts labels active, panning the map view automatically calls up same-category labels where applicable
  • NEW: Escape also clears active map object labels even if disableEscMenuAccessKeyboard/disableEscMenuAccessMouse true
  • NEW: Traps with damaging AOE effects now include salvage mod in their description
  • NEW: Gallery item info includes description for those items which have them (e.g. important for traps)
  • NEW: Melee weapon info explicitly lists the disruption stat (only two melee weapons have that property)
  • NEW: Projectile weapon info explicitly lists the spread arc stat (very few weapons use that relatively new mechanic)
  • NEW: Extreme slow movement warning also applies when attempting to swap positions with allies
  • NEW: Items crushed by cave-ins reported in message log
  • NEW: Safe to hold a wait key while waiting for System Backup Module (etc) to reduce corruption to 0% (autoblocks command for 2s on task completion)
  • NEW: Use '>' on top of a Drone Bay to automatically release all its drones without attaching it (RMB on self for mouse users)
  • NEW: Melee Analysis Suites increase minimum damage of melee weapons
  • NEW: Specific amount of corruption caused by impact destruction revealed in manual and context help
  • NEW: Manual includes step-by-step Attack Resolution section outlining defensive order of operations once an attack hits a robot
  • NEW: All Alpha supporter names registered since Beta 5 added to in-game list (see Credits menu)
  • MOD: Cave Seal allied faction priority changed
  • MOD: Removed "Parts Merge Repaired" from score sheet since no longer possible for now
  • MOD: Removed "Zionite Hack Detections" from score sheet since no longer possible
  • MOD: Removed "Impact Corruptions" from score sheet under Highest Corruption (unused)
  • MOD: Timer length doubled on the "final" Archives event
  • MOD: Log message for critical strikes on immune robots only shown if the attack hits armor (which still confers the damage bonus)
  • MOD: While using any LOW_CONTRAST renderFilter, on-map resource alerts override default color with black lettering
  • MOD: While using any LOW_CONTRAST renderFilter, path visualization shown lighter to be more visible against brighter background
  • MOD: Part range circles and robot motion trails appear much more nicely when combined with LOW_CONTRAST background settings
  • MOD: While using showMapBorders option combined with a LOW_CONTRAST renderFilter, map edges displayed with a brighter line rather than modified wall color
  • MOD: While using ` or dedicated mapshift mode, if LOW_CONTRAST renderFilter active the surrounding known cells are brightened even more than usual
  • MOD: Floor foreground darkened more than usual under LOW_CONTRAST renderFilters to make FOV edges easier to distinguish
  • MOD: Updated rendering of LOW_CONTRAST renderFilters to improve visualizations for: SFX, potential cave-ins, ally transfer area, explosion targeting AOE
  • MOD: Improved LOW_CONTRAST animations: Sensor Arrays, Terrain Scanners, Structural Scanners, Spotter scans, Triangulator, and some processor activations
  • MOD: Exposed ground appears slightly lighter in low-contrast mode (applies to both tiles and ASCII modes)
  • MOD: Improved header line drawing on Advanced commands page animation when viewed in a low-contrast mode
  • MOD: Part autosorting defaults to on
  • MOD: Hardlight Generator effect description more specifically lists types of incompatible shields
  • MOD: Score sheet "Communications Jammed" entry expanded to include distress signals from non-combat to combat bots
  • MOD: Score Sheet "Damage Inflicted > Projectiles" entry split into "Guns" and "Cannons"
  • MOD: Score sheet ally-related tallies exclude drones
  • MOD: Removed turn numbers preceding special messages for machine hacking output (e.g. unique door access codes)
  • MOD: Gallery/Lore buttons removed from game menu top-level button list and Credits menu (still accessible via hotkeys and new Records menu)
  • MOD: Game menu submenu buttons horizontally centered in widescreen layouts
  • MOD: Default hotkey for Alpha Supporters list now '0'
  • MOD: Pre-Beta 3.1 cogmind.cfg file no longer converted to multifile format on importing
  • MOD: Game count not incremented for aborting ("quit, delete save") below -9
  • MOD: Total game time not incremented for self-destruction below -9
  • MOD: High Security response dialogue no longer delivered by ARC
  • MOD: Item info window simultaneously displays any description and gallery collection status
  • MOD: Gallery item info no longer includes fabrication stats (still available via export feature)
  • MOD: Label Supporter Items option no longer required for '!' marker items not yet collected for gallery (always shown by default)
  • MOD: Scan Cloaking entry removed from robot info window since it became accessible via the new Traits popup in Beta 4
  • MOD: Borebot weapon no longer a prototype to reveal its name (since it cannot be acquired)
  • MOD: Improved visibility of explosion count on info page for multi-explosion weapons (consistent with multi-projectile weapons now)
  • MOD: Derelicts of classes with variants at more than one tier list them all in Analysis() output
  • MOD: Prototype ID Bank terminal hack has a static base chance rather than being based on the number of prototypes, which is now based on security level
  • MOD: Stricter penalties if Zion repeatedly calls loyalty into question
  • MOD: Roster dispatches a little more likely to refill used squad slots
  • MOD: Tweaked targeting behavior of AOE-equipped robots
  • MOD: Desublimator slot count reduced to 1, mass lowered to 6
  • MOD: Quantum Capacitor no longer compatible with Weapon Cyclers
  • MOD: EMDS energy and matter costs increased
  • MOD: Hyp. EM Gauss Rifle spectrum changed to Fine
  • MOD: Base penalty for overweight hover increased from 40 to 60
  • MOD: Base penalty for overweight flight increased from 50 to 80
  • MOD: While overweight, robots running on flight propulsion lose the ability to fly over other robots
  • MOD: Traps always trigger while overweight, rather than using a mass-based multiplier
  • MOD: Investigator movement speed increased 50%
  • MOD: Score sheet Melee Sneak Attacks no longer counts those against broken or unpowered targets
  • MOD: Upload Scores option now off by default
  • MOD: Anonymous player scores no longer uploaded
  • FIX: Combining Transmission Jammer w/Transport Network Coupler to block Hauler reinforcements didn't count as Communications Jammed in score sheet [Joshua]
  • FIX: Additional energy capacity provided by LRC Energy Wells not automatically restored on entering a new map [Joshua]
  • FIX: Certain types of followers stuck in a separate unattached part of the complex could slow down the game, especially on large maps [Joshua]
  • FIX: Trap Extractors did not count trap for gallery collection purposes [Joshua]
  • FIX: Unable to insert-ID an alien artifact at a Scanalyzer if no other scanalyzable items current in inventory [Joshua]
  • FIX: Unable to indirectly hack analyses for a number of derelict classes [Joshua]
  • FIX: Unidentified prototype energy/matter containers in inventory reflected their actual contents in HUD readout if preloaded [Joshua]
  • FIX: Impact weapons not showing new momentum-modified damage values in inventory and part list info ('q') mode like other melee weapons [Joshua, zxc]
  • FIX: Core reset while info ('q') mode active later created empty schematics lists on status page and at Fabricators [Joshua, Valguris]
  • FIX: Followers sucked into chutes remained allied but would not follow again if you meet up with them later [Valguris]
  • FIX: DC usage would leave out random map locations that should be revealed [Valguris]
  • FIX: Active Particle Chargers destroyed or removed in info ('q') mode did not immediately modify damage data for affected weapons [Valguris]
  • FIX: If no unfiltered label parts in view, not possible to use '3' to call up filtered labels [Valguris]
  • FIX: Having two info windows open and right-clicking inside the second at the position of an object under it opened its info instead of closing [Valguris]
  • FIX: Core resets rendered Z-Drones unable to explore or share FOV data [GJ]
  • FIX: Still possible for 0b10 Decoder Chips to crash on attempting to reveal an item outside FOV under special circumstances [GJ]
  • FIX: Loading a Fragile Parts challenge run in progress failed to apply the mechanic [GJ]
  • FIX: Tiny decimal values close to zero showed as larger numbers in Tactical HUD energy-change-per-move readout [Pimski]
  • FIX: Researcher hostility checks did not take into account active Cloaking Devices [Pimski]
  • FIX: Workers pushing disabled bots on floors with only one chute located in hidden corridor could cause slowdown in Factory [Laida]
  • FIX: Hostile Programmers assimilating Watchers made them neutral rather than hostile [Laida]
  • FIX: Crushing DM with treads triggers the normal reaction [8fpsbossfight]
  • FIX: Under certain conditions attempting to exit Waste might warn about leaving behind more allies than known [fpsbossfight, b_sen]
  • FIX: Tutorial message referencing Gallery/Lore access commands referenced old key commands [Rob Hewitt]
  • FIX: Options menu Upload Scores context help referenced old URL [Ezghoul]
  • FIX: New part caches added to Materials may overlap Storage stairs if latter placed in a room rather than corridor [Jazzer]
  • FIX: Item info ALIEN type label followed by a dark 'd' [Amphouse]
  • FIX: Game hangs if attempt to move while completely surrounded by walls/earth and corruption causes a misdirection [NoCreativeNames]
  • FIX: A certain Zion dialogue encounter was slightly too long to fit in the popup window [nuzcraft]
  • FIX: Attempting to use the swap menu on an empty slot with less than 30 energy prevented the action, even though the requirement is 20 [zxc]
  • FIX: Counterattack warning event may come on the following map if escaped fast enough and at exactly the right time [lsend, Sherlockkat]
  • FIX: Potential crash on startup when using a certain LOW_CONTRAST renderFilter in advanced.cfg
  • FIX: advanced.cfg did not properly bound values for mapCombatLogMaxLength, mapCombatLogDuration, mapAlertDuration
  • FIX: While using any LOW_CONTRAST renderFilter, black lettering of temporary part status labels would change to a non-black value when updating
  • FIX: Score sheet undercalculating Robots Melted entry (excluded non-delayed melting)
  • FIX: Beta 4 robot label behavior update unintentionally removed all labels from non-FOV hostiles
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1144 on: May 11, 2018, 01:01:33 AM »

Achievements
[Cross-posted from the devblog here--follow link for better formatting and light-on-dark style.]

Whew! I've finally finished putting together all the achievements-related features for Cogmind! As a large single system I'd like to provide a rundown of the whole process and reasoning here on the blog. It'll be divided into two articles, this first one exploring achievements in general, how they were selected and organized, icon creation, and underlying implementation. Next time I'll cover meta aspects like the UI and Steam integration.

I certainly spent a long time on this feature, so I guess the first question that comes to mind is why add achievements at all? In my case the answer isn't simply "it's just something games on Steam do to sell better" (although Valve recommends them for this reason :P), because after all Cogmind achievements are available to non-Steam players as well, and throughout development my focus has always been first and foremost on making the non-Steam version the best it can be as the "primary version"--Steam is simply a distribution platform.

When first starting out with achievement work, to help guide the development process I came up with my own list of reasons for adding them:
  • Record progress and skill milestones. Prior to achievements Cogmind already included a couple such systems in the form of lore and item gallery completion rates, and aside from their reference value they've shown to be useful among players when it comes to keeping track of their own long-term progress, and also measuring their progress versus other players in the community. Achievements provide yet another metric for both personal advancement and to compare against other players.
  • Recognize special accomplishments. Some interesting aspects of a run that a player might accomplish in the course of normal play under certain circumstances may go unnoticed or forgotten in the long term. Achievements can offer formal recognition of these accomplishments, like Shocking Conclusion, earned after corrupting 50 hostiles (something that combat players with a heavy EM focus might manage in a single run).
  • Create unique meta challenges. Unlike achievements that recognize existing milestones or likely (if situational) accomplishments, another type of achievement can actually suggest new goals outside the normal scope of gameplay. For example the Giant Slayer achievement challenges the player to take down five Behemoths. It's fairly rare for players to even encounter this many in a single run, much less attack them (since they can be troublesome and are often best avoided when possible). So this isn't the kind of achievement one might incidentally earn, but instead means actively hunting them down, requiring a different style and possibly a specialized build. Although having achievements at all increases replayability (as a kind of "collectible" like the lore and gallery), meta challenges are one of the best categories in that regard because they essentially expand the scope of the game.
  • Teach players about the world or mechanics. At the most basic level, achievements can be an alternative indirect method of helping players learn. Lots of games have these, perhaps because many players are blind to tutorials or help messages but pay a lot more attention when it comes to achievements! Still, although I added quite a few of these there isn't a lot of overlap with Cogmind's dedicated tutorial messages. For example there aren't any "achievements" for basic UI functionality (which the tutorial messages cover), but instead we have achievements for some mechanics worth highlighting which don't otherwise have a tutorial, e.g. Hehehe ("Reprogram a trap."), or useful tips like Short-term Sacrifices ("Escape a Stasis Trap with help from an explosion."). Loot Pinata ("Destroy a Hauler.") was added because I've heard of players going for a while before realizing Haulers are a pretty good source of decent parts, or at least a source of spares, so achievements like these are aimed mainly at the players interested in actively seeking out achievements, where these are low-hanging fruit and also teach something in the process.
  • Hint at some things possible in the game. Achievements can be used as a way to tease content or features that players may not have early or easy access to, kind of as an incentive to keep exploring further. "Subspace Traveler" is simply described as "Find a way to teleport"--most players still don't even know this is a thing in Cogmind :). Then there's "WMD" ("Destroy 100 robots in a single turn."), suggesting that it's possible to wield some pretty devastating firepower. Similarly, only one plot-related achievement was intentionally left unhidden, "Origins," which is described as "Discover what you really are." Not too revealing, other than to suggest that there's more to what's going on than one might assume until starting to discover the story elements (intentionally somewhat left out of main areas of play).
  • Suggest alternative play styles. Although many people will have their preferred play style(s), providing achievements that emphasize a specific style is a good way to get players branching out, possibly discovering additional ways to enjoy the game, or simply approaching a new style as a different challenge. "Explosive Specialist" ("Destroy 100 hostiles with at least 90% of damage dealt by explosives.") is one of the more straightforward examples, likely requiring a dedicated build focused more around blowing things up for an extended period. And not just a build but the associated tactics and long-term strategy as well--specializing in explosive-based combat means paying extra attention to matter acquisition and consumption, managing the risks of likely opening up a lot of terrain and increasing exposure across the combat zone, and dealing with the likely higher alert that results.
Although achievements are available both on and off Steam, having never played a game with achievements (or used Steam in any serious gaming capacity) I did have to spend some time researching how Steam handles them as well as how other devs have chosen to use them in their games. You'll see this information come into play a little more later, but starting such a big system without a decent plan laid out in advance is just asking for trouble.

A more specific area for early consideration was how to treat difficulty levels. Cogmind has multiple difficulty settings, so how do achievements work in relation to those? Here I thought through three different approaches:
  • Require a minimum difficulty level for certain achievements. This one's pretty unfair to some people who enjoy unlocking achievements, those who just want to play at their own level, undermining the purpose of adding difficulty levels in the first place.
  • Have separate achievements for every achievement at every difficulty level. Even though it's possible to automatically award same-type achievements of a lower difficulty each time a new one is earned on high difficulty (important to avoid forcing better players to also play at a lower difficulty just to earn achievements), I'd prefer to avoid massively bloating the achievements list like this. An informal poll of current players showed that most people were against achievements for different difficulty levels. Instead I'd like to just make it possible to clear achievements in case a player wants to permanently move up to a higher difficulty and start over. I did, however, make it so that the game internally records the highest difficulty on which each achievement was earned, so this data could be exposed in the future considering that Cogmind has its own achievement browsing interface.
  • Allow any achievement to be earned at any difficulty level. This is what I went with. Simple. Accommodating.


Organization
Cogmind has a lot of achievements, and any time you have a lot of something it can benefit from some organization. I divided achievements into six categories, which comes in useful when there's a need or desire to filter or sort them, or even simply to assist with quicker recognition of an achievement's icon.

Some categories also further subdivide their achievements into "tiers" where appropriate (higher tiers being more difficult), similarly aiding in recognition and differentiation as we'll see later with the icon design.


Initial category distribution for first batch of 256 achievements.
  • Mechanics: A group of mostly basic achievements covering common useful tactics and learning about systems. Even the obvious ones can serve as a way to reinforce features that players may accidentally trigger without realizing it. These make up over a quarter of the total, as there are quite a few different suitable mechanics.
  • Style: Specifically play style-related achievements, like combat, stealth, hacking, etc. These are generally earned through normal play using a given style/strategy, and while some might be more challenging or require focus in a certain area, they're not difficult enough to be considered "special challenges " (a separate category).
  • Progress: Personal meta progress like high scores, lore/gallery collection, and world exploration.
  • Challenges: This group doesn't have anything to do with Cogmind's "Challenge Modes," but are instead achievement-specific individual challenges ranging from Tier 1 (not too hard) to Tier 2 (hard) to Tier 3 (pretty hard!). This is currently the smallest category, but is also the most likely to grow if and when more achievements are added in the future. (It's also the smallest because a fair number of challenges are siphoned off by the later Wins category.)
  • Events: Story-related elements. Basically once you've visited every location and exhausted all the branching possibilities of the plot, you'll have all of these. This category is entirely hidden, though, so these aren't achievements to be explicitly sought out as if going down a list. You've just gotta explore and maybe in some cases use the in-game lore as clues to find more out-of-the-way areas.
  • Wins: There are many different ways to win the game, whether achieving one of the seven unique endings or simply winning by overcoming other challenging scenarios, so these get a whole category of their own. A lot of win-related achievements are technically considered Challenges, but since they require a win at the end they're all collected under this category rather than the other one above.
Notice that these categories somewhat roughly align with the six reasons for adding achievements listed earlier, which probably isn't a coincidence :)


Selection
I didn't have any specific goal for the total number of achievements, just wanted to come up with what seemed like a pretty good variety covering as many aspects of the experience as possible. And while I could've eventually put together a large selection on my own, the process certainly benefited from player suggestions! Long before I started working on achievements, there was already a forum thread where players could submit ideas, and one of my very first actions when starting achievements work was to read through the entire thread and harvest any ideas compatible with both Cogmind's architecture and my aims for achievements, in some cases modifying them where necessary.

Aside from of course thinking up a fair number of achievement concepts from scratch based on my own play experiences, I had a couple other outside sources for inspiration as well:
  • Score sheets: Years before achievements were even a consideration, Cogmind's extensive and ever-expanding score sheets already recorded quite a few stats and accomplishments, so this was an obvious place to look for meaningful achievements. As of Beta 5 score sheets held more than 600 values, plenty to choose from!
  • Game Manual: I also parsed the manual to see if my Mechanics list wasn't potentially missing out on anything worth emphasizing with its own achievement, although in the end not many came from here.
Coming up with a good set of achievements was a very gradual process of adding new ones to the list and making repeated passes over that list to group them by likely category, although this was before the final categories were determined so it involved a bit of back and forth. At first there were a lot of uncertain achievements organized into tentative categories, and later on the appropriate categories (and specifically their names) became clear, further helping flesh out and finalize the achievements.

Even within categories there are subcategories. I mentioned tiers earlier as a form of subcategory, but for determining which achievements to add, more important than difficulty-based subcategories are type-based subcategories. For example the rather large Mechanics category is broken down into general mechanics, combat mechanics, alert, interactive machines, machine hacking, robot hacking, information warfare, flight, allies, and more. (My earlier summary of Style-related achievements also happens to essentially reflect a partial list of its hidden subcategories.) This level of subcategory was created purely for my own organizational and development purposes, though, there's no need to make them public.


Well, not public in the game anyway--may as well demonstrate here how they appear in the game data for my own reference :)

Prior to building the achievements list I also set out some important guiding principles:
  • Most importantly, an achievement should be obtainable in the space of a single run (rather than accumulated across many runs). First of all this does a better job of adhering to the roguelike spirit, which places a lot of emphasis on individual runs given the nature of procedural generation and permadeath. Second, since there would be so many achievement descriptions which ideally need to be as short as possible, it'd really simplify the system to not require every single one to specify whether it's per run or across all runs combined. There are a few exceptional "meta achievements," but it's a small number and they're obvious enough to not even require explicitly pointing out that it doesn't refer to a single run, e.g. "Curator: Reach 100% gallery collection."
  • While all achievements are definitely guaranteed earnable with the right tactics, strategy, and skill level, not all achievements will be within reach of all players. Certainly more of them become accessible to a wider audience by lowering the difficulty level, but it's still going to take a decent amount of practice and skill to reach 100%. Some of them are downright hard even on easier difficulties, but serve as interesting goals in and of themselves, supplementing the many goals already suggested by the plot and world layout.
  • Although some games do this, I decided against having achievements emphasizing negative effects and experiences that might not ever happen to certain players, since it feels counter-intuitive to require that players intentionally subject themselves or their run to nasty things simply to earn achievements. A small number of exceptions were made for situations that will certainly happen at one point or another, but these are specifically designated as hidden achievements so that they're not something to aim for--they'll be earned naturally through regular play.
Again there was no target number of achievements, but by pure coincidence the final tally came to 256. It was originally 255, but after late-stage polishing I ended up removing a couple and adding a few :P. "Too bad" this is only the first batch--more achievements will almost certainly be added and end up ruining this rather appropriate number!


For now we can admire this number on the Steam store page.

(continued in the following post...)
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1145 on: May 11, 2018, 01:05:31 AM »

(...continued from the previous post)

Definition
The naming of achievements is important, but pretty straightforward so I don't have much to say about that other than pointing out the obvious: players like names that are fun/interesting/provocative/cool/punny/etc. There were plenty of opportunities to come up with a variety of names when there are so many achievements :D

Of course there are a lot more details to creating a good set of achievements beyond simply choosing and naming them!


Numbers
While a lot of achievements are essentially binary ("player did X"), many others involve reaching certain thresholds, which usually means numbers. It was really nice to have so much score sheet data (including archives) and past analyses to draw on in order to set realistic values for these numbers.


Excerpt of run stats from Beta 4 (the full table includes 446,028 data points). Filtering and sorting this data is able to answer a lot of questions about balance and difficulty, suggesting potential achievement requirements.

I could adjust the difficulty of an achievement based on the precise reported performance of players in earlier Betas, and further informed decisions by recalling anecdotal evidence from player discussions over the years--I'm always listening to stories and this continues to help shape the game in numerous ways, the most recent example of which being achievement design. Being pretty familiar with the game myself (I'm decent at it and enjoy playing, too :P) also provides some important context for creating reasonable achievements for all skill levels. So in the end details emerge through a combination of hard data and subjective experience.

One of the things I wanted to avoid in the number department are a lot of repetitive achievements, as these aren't very meaningful. For example there are many different types of robots, but we don't need dozens of varieties of "destroyed 10 of this robot." In fact there are almost none of that type of achievement except where doing so is especially interesting, as with the Giant Slayer achievement discussed earlier.


Descriptions
Names can be fun and in a lot of cases not perfectly descriptive of the achievement, but descriptions themselves had better be clear. These I wrote (and sometimes rewrote, on later passes) with a mind towards "what are players going to ask about this achievement?" "What's not clear?" Once descriptions have satisfied that condition, they're also checked for consistency of tense, grammar, style, etc. (basically what should be done with any game writing :P), and at the end I ran a spell check on the final set to ensure no typos were overlooked.


Hidden?
Steam achievements don't have a wide range of functionality, but do at least support marking an unearned achievement type as "hidden," which shows only its name and whatever icon is associated with that state. (Or on the global achievements list for a game it'll show the achievement's icon and name, but still no description.) This offers some interesting possibilities, so I enabled the same feature in Cogmind and in order to take proper advantage of it spent some time thinking about reasons for whether or not to hide an achievement:
  • Plot spoilers is an obvious one. There are numerous plot lines and points to explore across different runs, reaching almost any of which can be considered an achievement in itself since every single one is off the beaten path. But I've always been spoiler-averse, not wanting to ruin the discovery aspect of the experience, so plot-related achievements (or any others dealing with "special content," even if not necessarily connected to the plot) are all hidden.There is one plot-related achievement, "Origins," which is not hidden but instead given a vague description ("Discover what you really are.") and meant to be a teaser of sorts for any new or potential players just browsing the global achievements list on Steam. It hints that there's more to even the basic premise for the story than one might guess.
  • A handful of special achievements I wanted to hide for spoiler reasons, but doing so would make it very difficult for players to discover them so I had to keep those unhidden. In this case it's useful to rely on a "middle ground" approach: Make the description vague enough that the average player won't know what it refers to, but experienced players will be able to accurately guess the requirements.
  • Actions that require specific behavior which is boring to set up with the intent to earn an achievement, but otherwise fun to recognize when it happens organically, should be hidden. This goes along with the general game design principle of "don't reward tedium." There are only a few of these, but they're fun :) (as I write this article Cogmind's achievements have been in prerelease testing for a short while, and already I've got reports from players laughing at these)
  • While it's fun to recognize achievements that can be earned organically, and certainly many can, sometimes where the intent is to get players to explicitly try different styles it's best to leave them unhidden. For example the Explosive Specialist achievement from earlier would be fun if and when earned suddenly by players focusing on that style, I believe it's more valuable to use as a suggestion for any players browsing the achievements for something they might want to aim for. (In the same vein, Gun/Cannon/Melee Specialist also remain unhidden.)
  • "The Most Popular Achievement" (an actual achievement name :P) is a special case worth discussing, as it's quite vague and also hidden. This one, awarded on a player's first death, has several uses. First of all it takes the sting out of a loss, pointing out that this is a normal thing that is likely going to be a frequent occurrence. It'll also be the one achievement that anyone who plays will have, meaning it will top the Steam global achievements list--as a hidden achievement (remember that means there's no description) this makes it kinda intriguing to potential players who open the list. As the "guaranteed achievement" it also serves as an indicator of the percentage of people who've actually played through a run. Unfortunately this percentage will remain low at first since a lot of owners are waiting until Cogmind is out of Beta, and too bad achievements weren't around when a huge percentage of players tried it for a bit during the EA launch, but I'm sure we'll be seeing more players jump back in with the Beta 6 achievements release, and of course 1.0 later, and can use that number to follow the trend.
When creating an achievements list, my approach was to "assume hidden is the default state, what should I hide?" But another game might take the opposite route and come out with different results, i.e. hide everything and only reveal what's absolutely necessary (or nothing at all?).

Some players might even prefer this, because then they feel less obliged to play in a specific way and either all the achievements are surprises, or any descriptions that do exist might instead just be indirect clues to figuring out what that achievement requires. This would allow for an extra sense of accomplishment on earning one, but I decided not to have any like that for now. Maybe in the future as a fun expansion, depending on how players fare with the initial batch. (Note their icons could also contain clues, or not since icons for displayed achievements before they're earned can be non-specific.)

Of the final set of Cogmind achievements (as of Beta 6), 31.2% are hidden, exactly half of which are for plot-related reasons. Therefore 15.6%, or about one-sixth of all achievements, are hidden for one of the other reasons.


Initial hidden setting distribution for first batch of 256 achievements.


Icons
Oh my... When you've got 256 achievements, not only do you need good names and descriptions, but also a whole ton of icons to represent them!

At least ASCII art is fairly quick to produce, and I didn't have a choice with the style anyway, because 1) I am not capable of producing anything else decent, and more importantly 2) all of Cogmind's art must be CP437 in order to fit in the game (remember that Steam is the sideshow in this system--the game itself has even more achievement-related features).

I did, however, have to ensure from the start that icons would also be compatible with Steam. Their system requires 64x64 JPGs, in which I can fit up to a 5x5 grid of 12x12 pixel ASCII (12px happens to be the default size at which I draw ASCII art), so 5x5 it is.

But icons also need a border, and inserting a border into a 5x5 grid means all that's left for content is a 3x3-cell interior! This seemed ridiculously limiting, especially for "abstract" achievements, so after coming up with the initial list of achievement ideas I went through each category and sketched about 20% of them (since each category represents a different set of concepts). It started out well enough, and wasn't nearly as time-consuming as I'd feature it would be, either, so amazingly it actually seemed like this would work out in the long run. Limitations leading to interesting results is basically a cornerstone of Cogmind development, and this ended up no different :P

Thanks to REXPaint the drawing part was quick and easy, but it took longer to both establish the symbolism and ensure it was consistently applied throughout all of the icons. It was definitely fun working with the symbolism, and later when I started sharing batches of icons some regular players were pretty good at guessing the meanings of each, even without a description! (of course it helps greatly to have an understanding of Cogmind's ASCII mode...) So I think the system has worked out pretty well.

In terms of productivity, as usual it helped to draw all the icons over a very short period, making it less likely I'd forget some of the symbolism and either make mistakes that would need to be discovered later, or slow down the process by having to repeatedly review such a large collection of icons before continuing.

I also drew them all in a single file to make cross-referencing as quick as possible.


Cogmind's complete achievement icon spritesheet as it appears in REXPaint. The code knows how to extract the icons and which is which.

Looking closer at the structure of individual icons, there are two main ways to differentiate categories: border style and color scheme.


Border Style
Since nearly two-thirds (64%!) of the cells in an icon will be occupied by borders, they'd better be put to good use. Their first priority is to reflect an achievement's category--each should have its own unique style. The most basic category has the simplest style, but decisions for other categories had to take into account another factor: how many difficulty tiers would be required within that category. Some potential border styles naturally lent themselves to a greater range of modifications, making them more suitable for multi-tiered categories.

Before starting on the icons, I first designed a large collection of different borders, seeing which looked bad, decent, or good, and which could be expanded into a natural progression of multiple tiers. It's from that page of concepts that I'd pick the final set which best matched up with the requirements.


Achievement icon border style concepts. I generally started with an idea on the left and changed only one aspect of it for each new iteration moving to the right, or sometimes up or down if I wanted to try taking the concept in a different direction.

Higher tiers would need to look "cooler," essentially more intricate or elaborate. I eventually settled on this arrangement:


Final Cogmind achievement icon templates by category and tier, colored.

The Wins category doesn't use its full range as a "progression," as it has four border styles but only two tiers. The other two borders are for special subcategories of wins, specifically the core seven different win types according to plot, and challenge mode wins, so these have a different look from the tiered "special condition wins."


Color Scheme
Border style is not the only way to differentiate categories--each has its own base color as well (demonstrated in the above template matrix).

Colors were picked with purpose. As an "extremely Cogmind" color, green is used for one of the highest level of achievements, Wins. As a "powerful, deadly" color, red is used for the special Challenges. As a category of "basic" achievements that don't really need to stand out, the Mechanics category uses dark amber (somewhat close to brown) as its main color. Colors for other categories were chosen for somewhat less specific reasons :)

Border colors for the templates are all dark, at 25% brightness (and backgrounds are even darker at 12%), but each category also has a base foreground color (100% brightness in the same shade) used for generic content like numbers. This way the numbers, as secondary bits of information, are somewhat connected to the category and background/border itself, at least more so than most other elements that make up the interior.


A sample of Style category icons with generic number components highlighted.

Most foreground characters are all quite bright as well (usually 70-100%), so while the border and background colors serve a supporting and informational role, they don't take over the entire icon.

As for icon interiors, colors used there are drawn from Cogmind's ASCII mode where possible, although in some cases alternatives were needed where a concept is not already associated with some specific color (sometimes required for abstract icons). Again though, in all cases colors were chosen with purpose, and where a concept is repeated across multiple icons those colors are applied consistently.


Locked (Unachieved) Icons
Locked achievements need a display icon as well, and there are about three ways to handle them:
  • Use a grayscale or muted/darkened version of the unlocked icon. Most games seem to handle it this way, and it's the recommendation from Valve.
  • Use the same icon to represent any locked achievement. This is a lot less common, but some games do it. I guess it has the advantage of making the actual icon part of the surprise/reward on achieving it. Hiding the icon contents also removes yet another clue as to what a hidden achievement might be referring to, becoming a truly hidden achievement aside from whatever information is suggested by the name alone.
  • With enough achievements to divide them into categories, a separate icon can be used for each category, but used across all achievements in that category. I went with this approach to further emphasize the categorical nature, and because it helps break up what would otherwise be a huge mass of identical icons if I went with the second method above. (For the same reason I don't like the idea of grayscale versions--too much information value is lost when this many achievements are at play.)

Locked achievement icons.

Note that locked icons also reflect the relevant tier--essentially these icons are equivalent to the templates, with the interior replaced by dark question marks.

As for those PNGs, they are exported from the game via debug command in order to convert them from the internal format and assign proper file names. This isn't necessary for the default DRM-free version, but again Steam requires that achievement icons be 1) JPGs, and 2) 64x64. So I created a tool to output all icons, then use Photoshop to batch convert from PNG to JPG while also adding a 2-pixel black border around each (since in Cogmind their dimension is 60x60).


256 Cogmind achievement icons, exported as individual PNGs.

(continued in the following post...)
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1146 on: May 11, 2018, 01:05:52 AM »

(...continued from the previous post)

Implementation
We've got names! Details! Descriptions! Even icons! But... achievements also need to actually make their way into the game :P

Once all the data and resources were defined and ready, next came the code and systems.

On an individual level each achievement is pretty straightforward to implement, being a quick check for the condition and corresponding call to a method to assign it if applicable. This process was made even easier by the fact (mentioned earlier) that a fair number of achievements are based on the existing score sheet data, which itself already tracks many hundreds of conditions and stats throughout a run. Implementing a related achievement could take as little as a minute or less since I don't have to search around for or confirm the right location in the source--just ctrl-f for the appropriate stat name!

Of course some achievements required new stats that I hadn't been tracking, so throughout this process I also ended up expanding score sheets by several dozen entries where it would help. In yet other cases some achievements required whole new internal variables to track special conditions in more complicated situations, basically those which had to be confirmed at more than one point in time to award.

Note that most games will actually use Steamworks' stats system for this kind of thing, but Cogmind has its own internal stats system so I could more readily use that, plus I wanted non-Steam Cogmind to fully support achievements as well, so relying on Steam for any help wasn't an option anyway.


Checking the internal stat value for whether to attempt to award the Assassin achievement ("Sneak attack 15 hostiles.").

The above code doesn't do any heavy lifting because control should naturally be as centralized as possible to make any potential changes easier to implement down the line. So additional generic checks and the actual achievement award itself are handled by that single earnAchievement() method:


Generic code for handling achievement application.

For now I've decided to not hand out achievements to brand new players, to help them focus on the tutorial messages and avoid overwhelming them with even more information in an already daunting interface.

I was originally thinking of ways to save on development time throughout all this, and seeing as a lot of the achievements were so straightforward, one of the possibilities was to... skip testing. Nope--too difficult to go against my standard practice of manually testing every little feature, so I tested all 256, too xD

Only a tiny percentage didn't work as implemented, but it's better to make sure they do rather than have so many players scratching their heads, or reporting bugs I could've easily found on my own. Setting up testing conditions was extremely fast with debugging commands anyway.

The final step was to integrate achievement data into score sheets as well, which I did in three areas.

Like gallery collection and lore percentage, at the bottom of the sheet in the section for general game data there's a new "Achievement%" which keeps a running tally of the total number of achievements earned so far, out of 256.


Cumulative achievement progress in a Beta 6 score sheet (recorded from one of the prerelease testers' runs).

Like the other two, this percentage is a fun and useful indicator of overall progress.

There's also the full list of achievements earned for the first time specifically on that run.


An achievement list as it appears in a score sheet.

And although it's possible to count the number of achievements in that list to get a total, the tally for the run also appears as its own entry in number form with the regular stats. This is more convenient for players looking for a quick count, and also for me when I run the data analysis since no extra work is needed to extract the number of achievements while analyzing global stats.

The final feature tacked on at the end is a way for players to reset all their achievement progress for whatever reason (without losing their other meta data in the process). It's a text-only advanced config option, but unlike other options this one is only discussed in the manual, not even listed in the config file itself, because players had really better be sure they want to do this and not accidentally trigger it. Manually adding "resetAchievements=1" to the file will tell Cogmind when it next starts up to erase all achievements.

I'm glad all this achievement work was handled late in development, i.e. after the core game content and features were completed, because it would've been much more likely for achievements to become a disorganized mess over time if it was added too early.

And I'm happy with the results--there's something for every skill level, and players appreciate them. Achievements are a great high-value meta feature (so yeah, no surprise that lots of games offer them, and Valve highly recommends adding them, too).

And that's it! Next up is another piece on how to provide ways for players to monitor and learn about their achievements, and hook everything up to Steam...
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1147 on: May 18, 2018, 04:14:02 PM »

I won on stream this week. There's some dev talk, but mostly strategizing with viewers how best to approach different situations. It was a rather exciting win down to the wire.

Full summary and YouTube links here. Warning: The videos are long xD

This week I also finished my normal post-release stats analysis, looking at data from the previous release.



Here's the more generally dev-relevant stats (aggregate preferences/settings):



There are some other things from this week, including more/other stats, in the SITREP.
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1148 on: May 25, 2018, 02:44:01 AM »

Achievements UI: Design and Implementation
[Cross-posted from the devblog here--follow link for better formatting and light-on-dark style.]

Players not only appreciate a game having achievements to begin with, they really appreciate it when said achievements are available without Steam. A sizeable chunk of players don't use Steam for whatever reason, so having achievements be a Steam-only feature would leave all of them out of the fun and benefits described before! Achievements are essentially a form of content in their own right, so it'd be unfortunate to restrict that content to a subset of the player base. I've heard a lot of praise for this decision, both with regard to Cogmind and other games that have taken the same approach in the past.

Of course supporting achievements independent of Steam does involve a lot more work! At least on the implementation side there's not much extra to do, since actions that earn achievements need to be detected all the same in either case, but without relying on Steam a game must provide its own interface to both notify players of new achievements and offer a way to interact with them. With Cogmind in particular this need comes to the forefront even for Steam players, since achievement interaction is restricted due to the lack of Steam overlay support.

I took this opportunity to build a better system than Steam's own :)

Supplementary UI
The most basic UI requirement is notifying players when they've earned an achievement. I added this much before even starting on individual achievements, since being able to clearly see when one is earned is fairly useful while testing and working on them :P

New achievements are immediately shown in the bottom-right corner of the screen as a pop-up that remains for an adjustable 5 (?) seconds, where multiple simultaneous achievements will push up older ones that haven't yet disappeared. Cogmind was designed to be an immersive experience and these pop-ups can kinda ruin the atmosphere at some points, so I also added an option to remove them completely (though it's probably best that they be left on by default).


Achievement notification pop-ups in action, showing both their name and icon.

Achievement pop-ups are queued through a separate system so their display can be delayed if necessary. Although they're shown as soon as possible, some may be earned while in a different UI (hacking, for example), and it's better to have the notification appear in a consistent, predictable location (bottom-right corner of the map) once that location is available for use. Notice that the code for earning an achievement, shared last time, ends with a call to GM::addAchievement(). That just adds it to the queue and the UI can draw from there when ready.

New achievements also get their own meta notification in the message log, for later reference after the pop-up has disappeared. Meta notifications are game-related messages that always appear in white and enclosed by brackets.


Achievement notification as it appears in the message log.

The majority of achievements are earned and displayed mid-run, but some cannot be determined until the end of a run, in which case they'll appear to the right of the game over stats in a separate window.


New achievement list displayed on game over if applicable.

Since I didn't really want to mess up the balance and flow of the game over screen, I originally imagined I'd display any end game achievements at the beginning of the next run, but later decided it would be a bad idea, and unnecessarily anti-climactic, to force a such a potentially large disjoint between when an achievement is earned and when it is shown. It's great to have a sense of accomplishment be associated more closely with how and when it was achieved. In fact I even read that on the PlayStation developers must show achievements immediately at the point they are earned, presumably for that same reason. So even though it doesn't look great, for now this subset of achievements (if any were earned) appears in its own window.

An alternative solution I'm still considering is to have achievements appear first in a centered window over where the stats will be (or perhaps on a separate window after the stats), and the player has to press a button or key to advance to the next window. This would kinda mess with the flow, but at least it would look better. A lot of games take the multi-page game over approach in order to fit more information in without crowding the layout.

Main Achievements UI
The last part of the interface I worked on, and by far the most involved, was the achievements browsing UI. According to my records I spent 18 hours coding it, but as an essential part of any game that wants to provide its own system for interacting with achievements independent of Steam, it was worth it to make this UI as functional and informative as possible.

As with any major UI component I started with a design mockup in REXPaint, setting a clear goal to aim for that also accurately reflects intended functionality so that I knew everything I needed would fit just right and there'd be no time wasted on iteration following the implementation phase.


Working mockup of the achievements UI, as it appears in REXPaint. Note that the achievement-specific content is in some cases repetitive or inaccurate--it's purely for testing purposes and needed to fill the space :)

The elements across the bottom match the other two collection-oriented features (item gallery and lore), with page buttons, animated percent bar, and export buttons. Exports are for players who like to view or process their performance via other means. For image examples see this progress update.

New subwindows were implemented one by one, starting with the secondary ones that control content in the main window so that when it came time to do the latter it could be fully implemented and tested all at once.

First was the category-specific window, useful for enabling players to cut down the otherwise huge number of achievements that could be annoying to scroll through looking for something specific.


Interacting with achievement category filters.

Below those are the state filters, further helping players hone in on an achievement they're looking for, or simply browse their actual achievements vs the pool of remaining achievements they can aim for. 256 achievements is a lot, but with sufficient filtering each subgroup can be reduced to a pretty manageable size, especially considering that the UI can display up to 16 achievements on a single page.


Achievement state filters and sort types.

Sorting features have a number of purposes: search efficiency is increased when listed alphabetically or grouped by category; "oldest first" gives a chronological listing since the player starting playing Cogmind; and "newest first" is best for reviewing those earned across the current run, or seeing the exact description for the latest achievement, since that's not reflected in the map pop-up notification.

Note the highlighted letters in all these windows, there to indicate the relevant keyboard command for that button. Giving keyboard players easy and intuitive access to everything actually affected what words could be chosen for each button, simply to ensure it was always the first letter highlighted. Fortunately there was no overlap among the achievement category names themselves, though the "Category" sorting method had to be renamed to "Grouped" due to the former's overlap with the "Challenges" category itself.

And here's the whole thing put together! (As usual scrolling was annoying to implement, but having done it a ridiculous number of times in different formats by now it went surprisingly smoothly...)


Interacting with the full Cogmind achievements UI.

Notice that the UI behind it remains unchanged when the achievements UI opens, resulting in oddities like that dangling "Alt" in the bottom right, and leaves other commands visible at the top left. To fix the top left, for now the Beta 6 version of Cogmind simply raised the height of the Filter window so that its top is level with the Achievements. I'll lower it again like this later (as per the mockup, too) once I implement darkening of the background while this and similar windows are open. The current height adjustment is just a temporary measure so that the UI appears less confusing until then.

All done! Oh wait yeah, this is it for the DRM-free version of Cogmind but there's still more to do for Steam...

Steam Integration
Integrating with Steam is pretty easy, even for often technically challenged me :P

It would be more involved if I also had to make use of Steam's stats interface as a backbone for achievements, but 1) most Cogmind achievements are for intra-run accomplishments anyway and 2) Cogmind has its own internal stats system for recording long-term progress in the few areas it's needed so there's no need to rely on Steam for that, either. (Any game that wants to offer its own Steam-free achievement system will naturally need its own solution for stats, and the good thing is that with Steam cloud saves even players on Steam can retain persistent data all the same, as long as the meta data is considered part of the cloud saved content!)

In any case, all the relevant API commands can be found on this page, and Steam has pretty good step-by-step documentation for how to set up an achievement system, including a complete example with code you can just borrow directly or modify as necessary.

My own version is pretty similar to theirs.


steam.h

The source is somewhat bloated with additions of my own, which I'll get to in a moment.


steam.cpp

On startup the game basically just has to ask Steam for the latest "stats" (which includes achievements) and wait for a response via callback. Then it's good to go, adding new achievements at any point or using any of the API's other dozens of methods.

As per onUserStatsRecieved(), as soon as Cogmind has the online stats data the other thing it does is immediately sync the data between the game and Steam. Usually there will be no difference, but if for example a player has been using the DRM-free version then migrates their data over to a Steam install, it'd be nice to automatically upload all their previous achievements. Likewise, a fresh reinstall of Cogmind on Steam will also need to know all previous achievements so that it can display them in the game's own UI. The drawback of the latter Steam->Cogmind scenario is that Cogmind technically stores more information about individual achievements than Steam's database (for example the highest difficulty on which it was earned), meaning that extra data would be lost.

So that's what all the logged "uploading" and "downloading" is about in the source there :)

With a basic API interface available, the first order of business was to test it! Using my trusty new EARN_ACHIEVEMENT debug console command, I gave myself a couple of achievements--earnAchievement() simply calls SteamAchievements::SetAchievement() and voilĂ , the first ever Cogmind achievements to appear on Steam popped right up :)


First Cogmind achievements to be tested on Steam. "Every single achievement" my...

I also needed the CLEAR_ACHIEVEMENT command to make sure different scenarios worked as expected, and it was pretty neat to see how quickly Steam's UI reacted to having or not having the achievements (it's pretty much instantaneous), even when I was just repeatedly toggling them on and off :P

Testing achievements on Steam requires them to be added to the Steam database, sure, but unfortunately test achievements also show on the store page. I guess you could make an obvious "test_achievement" and use that temporarily to make it more obvious, but I didn't want to pollute my data with testing stuff, so for a couple weeks or more leading up to the Beta 6 release, Cogmind's store page looked somewhat odd xD


Test achievements appearing on Cogmind's Steam store page... 2 of them.

Steamworks clearly has an internal toggle for whether a game supports achievements, but it doesn't honor that toggle in terms of showing on the freaking store page whether a game includes any. How misleading...

There were no hitches at all--time to upload the entire batch! Steam does not, however, provide a way to batch upload achievements, so games with lots of them are going to have a harder time here. I dunno, maybe they do it as a way to discourage devs from adding too many achievements? (there have certainly been a number of requests for batch uploading over the years)

It took me about two hours to add the data (tag, name, description, hidden state, locked icon, unlocked icon) for all 256, a pretty decent pace. Sometimes it's fun to just put on some good music and find ways to do some mundane task more and more efficiently until it's done. You can technically write a script to do it for you through Steam's web interface, but I'm terrible at web stuff so it was unquestionably faster to just upload them manually xD

Also the different focus of this task, and looking at achievements from a different angle as I worked with them yet again, allowed me to notice a few last minute issues that needed to be addressed (e.g. correcting descriptions).


All achievements appearing on Cogmind's Store Page. Now that's more like it!

More?
Aside from the two-page game over screen I mentioned earlier, another new feature that might be worked in is global achievement rates. You can see there's a place for these numbers in the original mockup. Games can retrieve these values as part of the API with RequestGlobalAchievementPercentages(), so it would only be available to players on Steam.

Also it goes without saying that there'll definitely be more achievements as more content is added :). That's too bad because we'll ruin the coincidental "256" figure! 512 is out of the question... for now.
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1149 on: June 01, 2018, 04:11:47 PM »

Mostly been doing chores and streaming Cogmind runs lately Smiley

Lots of general update stuff and links in the latest SITREP



although the most dev-relevant issue to bring up here would be that I recently got an offer from EA to put Cogmind on their platform... hahahahaha...

Kinda unexpected, although they're the third major platform to contact me since releasing to Steam so maybe they're on to something xD. EA sucks, but I dunno, I guess it could be good for publicity? Hard to say exactly what kind of benefit it might have since I doubt they'll give me any kind of real numbers to make a decision based on!

Not sure what to do with this yet.

I'd like to say it's bad publicity in some ways--even though there's the saying that any exposure is good exposure, I have a fairly different model than most people out there releasing commercial games :/
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #1150 on: June 02, 2018, 02:01:58 PM »

Quote
Hard to say exactly what kind of benefit it might
You could offer your fans the opportunity to feel a sense of achievement pride and accomplishment for owning Cogmind on all legally available platforms  Durr...?

edit: screwed up the meme
« Last Edit: June 03, 2018, 12:32:14 AM by JobLeonard » Logged
Kyzrati
Level 10
*****



View Profile WWW
« Reply #1151 on: June 02, 2018, 04:23:05 PM »

Haha, but like... I doubt I have many/any fans who use Origin? xD

This is both a good and bad thing--good because I don't think their player base really overlaps with Steam, and bad because I don't believe Origin's regular subscriber base is all that interested in a niche game like Cogmind.

We could add a new achievement: "own Cogmind on all legally available platforms" Cheesy
Logged

JobLeonard
Level 10
*****



View Profile
« Reply #1152 on: June 03, 2018, 12:32:31 AM »

Call it "Pride and Accomplishment"

EDIT: For the handful out of the loop
Logged
Kyzrati
Level 10
*****



View Profile WWW
« Reply #1153 on: June 08, 2018, 03:42:53 PM »

As per the roadmap, the next major feature is robot hacking, and I've finally reached the final stretch of the design phase. Just the design phase!? This is a huge system, and building it for both balance and fun on the first go is going to take some doing. I've already spent more time just designing the system than any other in the game. It's for the better, though--the design seems to be coming along well after all this refining... Soon it'll be time to put it into practice!

I don't have much to share for it yet, except for one of the latest mockups:



This is a rough WIP and could still change alot. (I haven't really spent much time delving into the UI aspect yet, just planning the underlying system and all its related mechanics and capabilities.)

Later I'll be writing a lot about this feature, but don't want to share too much too early--let's wait until things are more certain Tongue

In other features, a little glowing `@` marker will pop up to show the direction of Cogmind when offscreen.



No one asked for this, probably because the map will never hop around on its own without your explicit command (and there's also always the  commands to recenter the view), but I can see it occasionally being helpful to know this. In particular while working on hacking ideas I saw one new potential situation where it could become useful, so put this system together yesterday.

And as someone who never uses the Evasion window (it's useful! just not the way I play), I needed someone else to remind me that it still contained a modifier for "Cloaking," even though Cloaking Devices were repurposed and based on the actual part name associated with that mechanic it should be called "Phasing," so that's fixed for Beta 7:

Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1154 on: June 15, 2018, 03:25:47 PM »

The IDE's wait is over! I'm now back to real coding again. With the new robot hacking system fully designed, this week it was time to actually start building it all.

Last time I shared an initial mockup of the UI layout, which has since changed significantly. It's getting closer to what it'll probably look like, and I noticed it was kinda fun to see how the idea was changing as I played with it, so here it is as a time lapse:



That's still just a mockup--more changes are likely before I piece that bit together. (Also note that as a mockup, the contents themselves will not fully make sense and aren't quite realistic, so don't try to read too much into it Tongue)

I haven't needed the UI yet since none of the hacks themselves have been implemented, but the system's foundation is getting pretty solid. First up was adding the new mechanics for getting access to robot hacks in the first place. I'll be covering the system and its design in more detail later on.

Some other new features related to the hacking system:





Still a rather long way to go before this system is is done, but it'll be worth it!

Seeing as I'm retiring the old robot hacking system, may as well share a shot of its spreadsheet calculations that I used to aid in its design some years ago:



This is common in design, to have spreadsheets where you can enter hypothetical values and see how they affect outcomes. I'm by no means a math whiz, but predictions like this make the testing and balance effort go so much more smoothly. Without something like this, grounding the design in too many guesses would be a recipe for wasted dev time!

The new spreadsheet I've already put together has a larger and more complex data set Tongue. It helped me set all the base values earlier this week--now I "just" have to code all those hacks...

There has been some recent talk of putting Cogmind's lore into a markov chain generator to see what kinds of things could result, and although interested I didn't have any time to play with it myself. Then a couple days ago Raine (one of our players) did just that and shared some results with us. Pretty funny stuff...

It's fun guessing where each piece of this new "lore" originated.



That's some nice tech...



And this sounds like a different game entirely xD



Anyone interested in developing their own roguelike should check out our r/RoguelikeDev summer event. Starts next week!
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1155 on: June 22, 2018, 04:21:04 PM »

Item tagging! This is a rather common feature for classic roguelikes, the ability to tag items with player-specified text as a memory aid. Tagging is usually a part of the item identification process, and due to the nature of Cogmind's items and ID system it's almost never useful, hence the absence of a tagging feature all these years. However there are a handful of special cases towards the end of the game where you may know what a particular unidentified item is (based on where you found it) but not want to immediately attach-ID it.

Here are a couple silly examples of tagging inventory items.



And here's a more realistic use (albeit with a silly tag), also demonstrating how the tag appears in the item info window itself.



I'm sure this feature could also be used for just fun screenshots and jokes, too Wink

There's more in SITREP #27, including new details about the robot hacking system, though I'll be covering that here later with a full blog post at some point.
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1156 on: June 29, 2018, 03:03:20 PM »

Robot hacking UI complete!





Looks more or less like the earlier mockups, though I made some small changes to improve usability.

Next up is making it so the options actually do something Tongue

(I've continued last week's introduction to the new hacking system here.)
Logged

nkm
Level 1
*


Ludere ergo sum


View Profile WWW
« Reply #1157 on: June 29, 2018, 10:25:26 PM »

Impressive work so far!

And an astonishing amount of achievements you did there! I just added 17 to my game and it wore me down Cry
Logged

Kyzrati
Level 10
*****



View Profile WWW
« Reply #1158 on: June 29, 2018, 11:50:37 PM »

Haha "so far" ... I've "only" been working full time for over five years at this point xD. Thanks!

Once you've got a decent foundation in place, the difference between 17 and 256 achievements does at least get smaller, although having art for each would probably be a pain for most devs (mmmm gotta love ASCII!). I've already got dozens more to add at some point, but quite busy with a bunch of other features for now. 256 will keep most people busy for a while Wink
Logged

nkm
Level 1
*


Ludere ergo sum


View Profile WWW
« Reply #1159 on: June 30, 2018, 09:33:18 AM »

5 years full-time, wow! And still in EA? How do you manage to sustain it financially speaking?

Yeah the art is lots of work, but also testing whether each achievement actually triggers correctly.



Logged

Pages: 1 ... 56 57 [58] 59 60 ... 71
Print
Jump to:  

Theme orange-lt created by panic