Advancements

From Minecraft Wiki
(Redirected from Advancement)
Jump to: navigation, search
This page contains content on features that may be included in the next update.
These features have appeared in development versions, but the full update containing these features has not been released yet.
Dinnerbone-twitter.png The system as a whole is called "advancements", which is aimed at guiding & tracking players progress through the game (in vanilla survival and any custom additions by mapmakers or mods). Most advancements are literally just that - an advancement through the game.
Dinnerbone on the advancements system[1]
The popup that appears when an advancement is completed.
The popup that appears when a goal advancement is completed.
The popup that appears when special challenge advancements are completed.

Advancements are an upcoming feature set to replace achievements.

Obtaining[edit | edit source]

Advancements are completed much in the same fashion that achievements are. They can be completed in any game mode, and are obtained and saved per world. Advancements can also be granted (and revoked) using the /advancement command.

Although advancements guide players logically through the game, they are independent of each other; an advancement can be completed without having completed the advancements "before" it.

When an advancement is obtained, a sliding toast notification displays in the top right corner. The color of the header text in the notification depends on the advancement; normal advancements have yellow header text, while special "challenge" advancements have pink header text. When a final "goal" advancement is completed, the header text will display Goal Reached! instead of the typical Advancement Made! text.

Interface[edit | edit source]

The advancements interface. One advancement ("Isn't It Iron Pick") is selected.

The button to access the Advancements screen is found on the pause menu screen. You can also open this screen by pressing L (this can be changed in the in-game options menu).

The advancement system involves several trees composed of advancements, each tree beginning with a root advancement and ending with goal or challenge advancements. By clicking and dragging, you can view different branches of an advancement tree. Each tree is categorized into different tabs (which are, themselves, advancements). There are currently five tabs in vanilla Minecraft (although more may possibly be added[2][3]):

  • Minecraft: The heart and story of the game.
  • Adventure: Adventure, exploration, and combat.
  • Nether: Bring summer clothes.
  • The End: Or the beginning?
  • Husbandry: The world is full of friends and food.

Each tab has a different background with a repeating texture.

Advancement icons display a header name and description when hovered over. They only appear in a tree when the advancement before it is completed, although, as stated before, advancements can be completed in any order.

The icon frames of advancements can vary in appearance based on difficulty, and whether or not it was completed. A legend is provided below:

Icon Frame Description
Regular Completed
Advancement-plain-raw.png Advancement-plain-worn.png Normal advancement.
Advancement-oval-raw.png Advancement-oval-worn.png Goal advancement.
Advancement-fancy-raw.png Advancement-fancy-worn.png Challenge advancement.

Extra advancements and tabs can be added and customized with the use of JSON files, as detailed below.

List of advancements[edit | edit source]

Minecraft[edit | edit source]

Grid Grass Block.png Minecraft
Icon Advancement In-game description Parent Actual requirements (if different) Internal ID
Advancement-plain-raw.png
Minecraft The heart and story of the game Get a crafting table in your inventory. minecraft:story/root
Advancement-plain-raw.png
Stone Age Mine stone with your new pickaxe Minecraft Get cobblestone in your inventory. minecraft:story/mine_stone
Advancement-plain-raw.png
Getting an Upgrade Construct a better pickaxe Stone Age Get a stone pickaxe in your inventory. minecraft:story/upgrade_tools
Advancement-plain-raw.png
Acquire Hardware Smelt an iron ingot Getting an Upgrade Get an iron ingot in your inventory. minecraft:story/smelt_iron
Advancement-plain-raw.png
Suit Up Protect yourself with a piece of iron armor Acquire Hardware Get any type of iron armor in your inventory. minecraft:story/obtain_armor
Advancement-plain-raw.png
Hot Stuff Fill a bucket with lava Acquire Hardware Get a lava bucket in your inventory. minecraft:story/lava_bucket
Advancement-plain-raw.png
Isn't It Iron Pick Upgrade your pickaxe Acquire Hardware Get an iron pickaxe in your inventory. minecraft:story/iron_tools
Advancement-plain-raw.png
Not Today, Thank You Deflect an arrow with a shield Suit Up minecraft:story/deflect_arrow
Advancement-plain-raw.png
Ice Bucket Challenge Form and mine a block of Obsidian Hot Stuff Get a block of obsidian in your inventory. minecraft:story/form_obsidian
Advancement-plain-raw.png
Diamonds! Acquire diamonds Isn't It Iron Pick Get a diamond in your inventory. minecraft:story/mine_diamond
Advancement-plain-raw.png
We Need to Go Deeper Build, light and enter a Nether Portal Ice Bucket Challenge Enter the Nether dimension. minecraft:story/enter_the_nether
Advancement-plain-raw.png
Cover Me With Diamonds Diamond armor saves lives Diamonds! Get any type of diamond armor in your inventory. minecraft:story/shiny_gear
Advancement-plain-raw.png
Enchanter Enchant an item at an Enchanting Table Diamonds! minecraft:story/enchant_item
Advancement-oval-raw.png
Zombie Doctor Weaken and then cure a zombie villager We Need to Go Deeper Throw a splash potion of weakness at a zombie villager and give it a golden apple (by facing the zombie and pressing the use key with a golden apple in your hand). minecraft:story/cure_zombie_villager
Advancement-plain-raw.png
Eye Spy Follow an Ender Eye We Need to Go Deeper Enter a stronghold. minecraft:story/follow_ender_eye
Advancement-plain-raw.png
The End? Enter the End Portal Eye Spy Enter the End dimension. minecraft:story/enter_the_end

Nether[edit | edit source]

Red Nether Brick.png Nether
Icon Advancement In-game description Parent Actual requirements (if different) Internal ID Rewards
Advancement-plain-raw.png
Nether Bring summer clothes Enter the Nether dimension. minecraft:nether/root
Advancement-fancy-raw.png
Subspace Bubble Use the Nether to travel 7km in the Overworld Nether Use the Nether to travel between 2 points in the Overworld with a minimum horizontal distance of 7000 blocks between each other. minecraft:nether/fast_travel
Advancement-plain-raw.png
A Terrible Fortress Break your way into a Nether Fortress Nether Enter a Nether fortress. minecraft:nether/find_fortress
Advancement-fancy-raw.png
Return to Sender Destroy a Ghast with a fireball Nether Kill a ghast using a ghast fireball. minecraft:nether/return_to_sender
Advancement-plain-raw.png
Into Fire Relieve a Blaze of its rod A Terrible Fortress Get a blaze rod in your inventory. minecraft:nether/obtain_blaze_rod
Advancement-plain-raw.png
Spooky Scary Skeleton Obtain a wither skeleton's skull A Terrible Fortress Get a wither skeleton skull in your inventory. minecraft:nether/get_wither_skull
Advancement-fancy-raw.png
Uneasy Alliance Rescue a Ghast from the Nether, bring it safely home to the Overworld... and then kill it. Return to Sender Kill a Ghast in the Overworld. minecraft:nether/uneasy_alliance
Advancement-plain-raw.png
Local Brewery Brew a potion Into Fire Pick up a potion from a brewing stand potion slot. An already-created potion placed and removed qualifies. minecraft:nether/brew_potion
Advancement-plain-raw.png
Withering Heights Summon the Wither Spooky Scary Skeleton Be within a 100.9×100.9×103.5 cuboid centered on the Wither when it is spawned. minecraft:nether/summon_wither
Advancement-fancy-raw.pngGrid Milk.png A Furious Cocktail Have every potion effect applied at the same time Local Brewery Have all of these 11 potion effects applied to you at the same time. minecraft:nether/all_potions
Advancement-plain-raw.png
Bring Home the Beacon Construct and place a Beacon Withering Heights Be within a 20×20×14 cuboid centered on a beacon block when it realizes it has become powered. minecraft:nether/create_beacon
Advancement-fancy-raw.png
How Did We Get Here? Have every effect applied at the same time A Furious Cocktail Have all of these 20 effects applied to you at the same time. minecraft:nether/all_effects
1,000 experience
Advancement-oval-raw.png
Beaconator Bring a beacon to full power Bring Home the Beacon Be within a 20×20×14 cuboid centered on a beacon block when it realizes it is being powered by a size 4 pyramid. minecraft:nether/create_full_beacon

The End[edit | edit source]

Grid End Stone.png The End
Icon Advancement In-game description Parent Actual requirements (if different) Internal ID
Advancement-plain-raw.png
The End Or the beginning? Enter the End dimension. minecraft:end/root
Advancement-plain-raw.png
Free the End Good luck The End Kill the ender dragon. minecraft:end/kill_dragon
Advancement-oval-raw.png
The Next Generation Hold the Dragon Egg Free the End Get the dragon egg in your inventory. minecraft:end/dragon_egg
Advancement-plain-raw.png
Remote Getaway Escape the island Free the End Throw an ender pearl through an End gateway. minecraft:end/enter_end_gateway
Advancement-oval-raw.png
The End... Again... Respawn the ender dragon. Free the End Summon an ender dragon. minecraft:end/respawn_dragon
Advancement-oval-raw.png
You Need a Mint Collect dragon's breath in a glass bottle. Free the End Get a bottle of dragon's breath in your inventory. minecraft:end/dragon_breath
Advancement-plain-raw.png
The City at the End of the Game Go on in, what could happen? Remote Getaway Enter an End city. minecraft:end/find_end_city
Advancement-oval-raw.png
Sky's the Limit Find an Elytra The City at the End of the Game Get a pair of elytra in your inventory. minecraft:end/elytra
Advancement-fancy-raw.png
Great View From Up Here Levitate up 50 blocks from the attacks of a Shulker The City at the End of the Game Have the Levitation effect applied, and move a vertical distance of 50 blocks. minecraft:end/levitate

Adventure[edit | edit source]

Grid Empty Map.png Adventure
Icon Advancement In-game description Parent Actual requirements (if different) Internal ID
Advancement-plain-raw.png
Adventure Adventure, exploration, and combat Kill any entity, or be killed by any entity. minecraft:adventure/root
Advancement-plain-raw.png
Monster Hunter Kill any hostile monster Adventure Kill one of these 22 mobs. Other mobs are ignored for this advancement. minecraft:adventure/kill_a_mob
Advancement-plain-raw.png
What a Deal! Successfully trade with a Villager Adventure minecraft:adventure/trade
Advancement-plain-raw.png
Sweet dreams Change your respawn point Adventure Successfully sleep in a bed, either by sleeping till dawn, or, in the case of a multiplayer server, staying in bed for longer than five seconds. minecraft:adventure/sleep_in_bed
Advancement-plain-raw.png
Take Aim Shoot something with a bow and arrow Monster Hunter Fire a bow so that the arrow strikes any entity. minecraft:adventure/shoot_arrow
Advancement-fancy-raw.png
Monsters Hunted Kill one of every hostile monster Monster Hunter Kill each of these 22 mobs. Other mobs may be killed, but are ignored for the advancement. minecraft:adventure/kill_all_mobs
Advancement-oval-raw.png
Postmortal Use a Totem of Undying to cheat death Monster Hunter minecraft:adventure/totem_of_undying
Advancement-oval-raw.png
Hired Help Summon an Iron Golem to help defend a village What a Deal! Summon an iron golem. minecraft:adventure/summon_iron_golem
Advancement-fancy-raw.png
Adventuring Time Discover every biome Sweet dreams Visit these 36 biomes. Other biomes may also be visited, but are ignored for the advancement. minecraft:adventure/adventuring_time
Advancement-fancy-raw.png
Sniper duel Kill a skeleton with an arrow from more than 50 meters Take Aim Use a launched arrow to kill a skeleton, wither skeleton, or a stray from 50 or more blocks away, horizontally. minecraft:adventure/sniper_duel

Husbandry[edit | edit source]

Hay Bale.png Husbandry
Icon Advancement In-game description Parent Actual requirements (if different) Internal ID
Advancement-plain-raw.png
Husbandry The world is full of friends and food Eat anything that can be eaten. minecraft:husbandry/root
Advancement-plain-raw.png
The Parrots and the Bats Breed two animals together Husbandry Breed a pair of one of these 10 mobs. Other breedable mobs, if any, are ignored for the advancement. minecraft:husbandry/breed_an_animal
Advancement-plain-raw.png
Best Friends Forever Tame an animal Husbandry Tame one of the 5 types of mob that are tamable. minecraft:husbandry/tame_an_animal
Advancement-plain-raw.png
A Seedy Place Plant a seed and watch it grow Husbandry Plant one of these 5 plants. Other plants are ignored for the advancement. minecraft:husbandry/plant_seed
Advancement-fancy-raw.png
Two by Two Breed all the animals! The Parrots and the Bats Breed pairs of each of these 10 mobs. Other tamable mobs, if any, are ignored for the advancement. minecraft:husbandry/breed_all_animals
Advancement-fancy-raw.png
A Balanced Diet Eat everything that is edible, even if it's not good for you A Seedy Place Eat each of these 35 foods. Other foods, if any, are ignored for the advancement. minecraft:husbandry/balanced_diet
Advancement-fancy-raw.png
Serious Dedication Completely use up a diamond hoe, and then reevaluate your life choices A Seedy Place Use up the final bit of durability on a diamond hoe, so that it breaks. minecraft:husbandry/break_diamond_hoe

JSON Format[edit | edit source]

The advancements in the 'data/advancements' folder of a Minecraft world store the advancement data for that world as separate JSON files:

These JSON files are structured according to the following format:


  • The root tag.

    •  display: The optional display data.

      •  icon: The data for the icon.

        •  item: The item id.

        •  data: The damage value for the item.

      •  title: The title for this advancement.

      •  title: A JSON text component (containing text and formatting like used in /tellraw and various other commands. Also translate tag can be used here).

      •  frame: The optional type of frame for the icon. challenge for a tile with a more fancy spiked border as it is used for the kill all mobs advancement, goal for a tile with a rounded border as it is used for the full beacon advancement, task for a normal tile (default.)

      •  background: The optional directory for the background to use in this advancement tab (only for the root advancement).

      •  description: The description of the advancement.

      •  description: A JSON text component (containing text and formatting like used in /tellraw and various other commands. Also translate tag can be used here).

      •  show_toast: Can be true or false. Whether or not to show the toast pop up after completing this advancement. Defaults to true.

      •  announce_to_chat: Can be true or false. Whether or not to announce in the chat when this advancement has been completed. Defaults to true.

      •  hidden: Can be true or false. Whether or not to hide this advancement and all its children from the advancement screen until they have been completed. Has no effect on root advancements them self but will still effect all their children. Once a value of true has been inherited from a parent advancement, it can't be overwritten. Defaults to false.

    •  parent: The optional parent advancement directory of this advancement (does not apply for the root advancement).

    •  criteria: The required criteria that have to be met.

      •  <criteriaName>: A name given to the criteria (can be any string, must be unique).

        •  trigger: The trigger for this advancement; specifies what the game should check for the advancement.

        •  conditions: All the conditions that need to be met when the trigger gets activated.

    •  requirements: An optional list of requirements (all the <criteriaName>). If all criteria are required, this may be omitted. With multiple criteria: requirements contains a list of lists with criteria (all criteria need to be mentioned). If all the criteria within any of the lists is met, it will complete the advancement. (basically AND grouping and OR grouping the criteria.)

    •  rewards: An optional collection of the rewards provided when this advancement is obtained.

      •  recipes: A list of crafting recipes (strings).

      •  loot: A list of loot tables (strings).

      •  experience: An amount of experience.

      •  function: A function to run. Functions are text files with the file extension .mcfunction in .minecraft\saves\XXXX\data\functions\ and can contain a list of commands to run in order.

Triggers[edit | edit source]

Trigger Name Triggered when: Available Conditions
minecraft:bred_animals Player breeds 2 animals. "parent", "partner", "child"
minecraft:brewed_potion Player brews a potion. "potion"
minecraft:changed_dimension Player travels to or from a dimension. "to", "from"
minecraft:construct_beacon Player changes the structure of a beacon. (When the beacon updates itself). "level"
minecraft:consume_item Player consumes an item. "item"
minecraft:cured_zombie_villager Player cures a zombie villager. "zombie", "villager"
minecraft:effects_changed Player gets a potion effect applied or taken from them. "effects"
minecraft:enchanted_item Player enchants an item through an enchanting table (does not get triggered through an anvil, or through commands). "item", "levels"
minecraft:enter_block Player enters a block (such as a portal), player needs to be standing in the same block space as the block. Checks every tick but if the advancement is revoked immediatly using a reward command, it will trigger for each successful match in one tick. This means it can trigger between 1 and 8 times each tick. "block", "state"
minecraft:entity_hurt_player Entity hurts a player. "damage"
minecraft:entity_killed_player Entity kills a player. "entity"
minecraft:impossible Only using commands.
minecraft:inventory_changed Any changes happen to the player's inventory. "items", "slots"
minecraft:item_durability_changed Any item being damaged in any form. "item", "durability", "delta"
minecraft:levitation Player having the levitation status effect. "duration", "distance"
minecraft:location Checks every 20 ticks (1 second) where the player is. "position", "biome", "feature"
minecraft:nether_travel Player travels to the Nether and then returns to the Overworld. "distance"
minecraft:placed_block Player placed a block. "location", "block", "state"
minecraft:player_hurt_entity Player hurts an entity (including itself). "damage", "entity"
minecraft:player_killed_entity Player kills an entity. "entity", "killing_blow"
minecraft:recipe_unlocked Player unlocks a recipe (using a knowledge book for example). "recipe"
minecraft:slept_in_bed Player enters a bed. "location"
minecraft:summoned_entity Player summons an entity through for example summoning the wither using soul sand and wither skulls. Works with iron golems, snow golems and the ender dragon (using ender crystals) as well. Using dispensers to place the wither skulls or pumpkins will still activate this trigger. Spawn eggs, commands and mob spawners will not work however. "entity"
minecraft:tame_animal Player tames an animal. "entity"
minecraft:tick Triggers every tick (20 times a second).
minecraft:used_ender_eye Player uses an ender eye (in a world where strongholds generate). "distance"
minecraft:used_totem Players uses a totem. "item"
minecraft:villager_trade Player trades with a villager. "villager", "item"

History[edit | edit source]

Upcoming
1.12 February 16, 2017 Dinnerbone tweets that he had spent an entire day designing "a new thing" with Darngeek.
February 20, 2017 The design on "this thing" is now done and can begin to be implemented; he later hints at the feature's name.[4]
February 22, 2017 He states that he is "advancing" on the feature; "So. Many. Json. Files." he adds.
Later that day he states that the project is growing bigger, and that he may need a command "even more complicated than /scoreboard"
March 6, 2017 The backend of the mysterious feature is finished, but the UI needs work, he tweets.
"I made a tabthulhu today," he later adds,[5] indicating this feature may use a large number of tabs.
March 13, 2017 He again references the name of the feature in a tweet, stating that he is almost done with "this new feature advancement".
March 14, 2017 He tweets that the UI is now working, and that the project took many days and a few research papers to accomplish.
March 22, 2017 The feature now "awards players with things", he states while making another reference to the feature name.
March 23, 2017 Dinnerbone states that the feature requires around 500 JSON files.
He later tweets a teaser of what the feature holds,[6] though it is hidden behind an encrypted .zip file disguised as a .png image, which he clarifies in later tweets.[7][8][9] This .zip file contains custom recipe JSON files.
He posts another encrypted .zip file soon afterwards, containing a few more recipes.[10]
March 24, 2017 "A deafening metallic condor keeps distracting me", Dinnerbone states. Users quickly pinpointed this bizarre message to this Gfycat URL officially showcasing advancements for the first time.
He reveals that the UI can have several tabs with advancement trees that are themselves advancements.[11] He clarifies that that's what he meant by "tabthulhu."[12]
All of the UI is data-driven, including positioning and layout, with no hardcoded data or positions.[13]
17w13a Advancements added.
17w14a Added new advancements, including a new "adventure" tab.
Added new notifications for when players advance, which have a sliding effect, and come in two colors: yellow for normal advancements, and pink for special challenges.
17w15a Added advancement descriptions and changed several titles.
Added the "Adventuring Time" advancement.
17w16b Added trigger minecraft:item_durability_changed.
17w17a Added new advancements and two new tabs: "The End" and "Nether"
Added trigger levitation.
Added feature condition to the location trigger.
Advancements can now execute commands when achieved.
Advancement icons now allow data values.
Added five modifiers to the /advancement grant and /advancement revoke commands: "everything", "from", "until", "through", and "only".
17w17b The default advancements now all receive their titles and descriptions from the localization files.
Added a new number display to track progress while completing certain advancements
Added the changed_dimension trigger, which takes two optional conditions: to and from, both being strings that accept "overworld", "the_nether", or "the_end".
The "location" shared object has a new dimension string (same values as above).
17w18a Re-introduced announcements to chat when someone earns an advancement
Added new Adventure advancements: "Best Friends Forever", "The Parrots and the Bats", and "Two by Two"
Added new minecraft:tick and minecraft:tame_animal triggers
Added new show_toast and announce_to_chat display options
Added /gamerule announceAdvancements, which toggles announcing of advancements, replacing the old server.properties entry
"entity" objects and the minecraft:levitation trigger now use a shared "distance" object. They check if the player is within or outside of the specified range on the x, y, or z axis. absolute and horizontal ranges check if the player is within range on all axes, though horizontal will exclude the Y axis.
The "Great View From Up Here" advancement now requires 50 vertical blocks, instead of levitating for 30 seconds
Changed the "Sniper Duel" advancement to horizontal distance
Advancement loading is now strict JSON
17w18b Added a new "Husbandry" tab and several new advancements: "A Seedy Place", "Serious Dedication", "A Balanced Diet", and "Hired Help".
The advancements added in the previous snapshot were moved to the new Husbandry tab.
Added new advancement triggers: consume_item, placed_block, and arbitrary_player_tick.
The "Monster Hunter" and "Monsters Hunted" advancements now use 22 mobs instead of 23, removing the illusioner from the list.
1.12-pre1 Added new advancements: "A Furious Cocktail", "Postmortal", "Subspace Bubble", and "Uneasy Alliance".
Added hidden field to advancement display info, which defaults to false.
Added new effects_changed, used_totem, and nether_travel advancements triggers.
Removed commands from advancement rewards, replaced with function.
Advancement trees are now centered in the UI.
Items and entities in advancements now have an extra NBT field.
Entities in advancements now have an extra effects and location field.
Removed arbitrary_player_tick advancement trigger.
1.12-pre2 Added new hidden advancement: "How Did We Get Here?", which rewards 100 experience.
1.12-pre3 Advancement "How Did We Get Here?" now includes the Resistance status effect, and now rewards 1000 experience.
Advancement "Balanced Diet" now includes all fish types (raw and cooked if possible) and an Enchanted Golden Apple.
Advancements will now remember the tab the player last selected.
1.12-pre5 All recipe unlock advancements now have a parent of minecraft:recipes/root
Several recipe unlock advancements were renamed

Issues[edit | edit source]

Issues relating to “Advancements” are maintained on the issue tracker. Report issues there.

Gallery[edit | edit source]

References[edit | edit source]

  1. https://www.reddit.com/r/Minecraft/comments/64pk6r/dinnerbone_working_on_giving_advancements/dg4uiou?context=1
  2. “The tabs are alternate trees that are themselves advancements too. We support a lot, but we'll use 4/5 in vanilla. http://media.dinnerbone.com/uploads/2017-03/screenshots/24_09-23-41_rYLfqg0Q52.png” – @Dinnerbone, March 24, 2017
  3. “4 or 5 tabs. Probably: "mine & craft", "nether", "end", "combat", "engineering" or some variant of.” – @Dinnerbone, March 27, 2017
  4. “Getting this implemented in a nice way would be a real advancement for the game.” – @Dinnerbone, February 20, 2017
  5. “I made a tabthulhu at work today. This is an interesting project!” – @Dinnerbone, March 06, 2017
  6. “This is a super big spoiler of what I'm working on. Totally unfinished and may change a lot, but gives you an idea. http://media.dinnerbone.com/uploads/2017-03/screenshots/23_15-00-52_ttcfj9tDnV.png” – @Dinnerbone, March 23, 2017
  7. “(No I'm not adding emoji.)” – @Dinnerbone, March 23, 2017
  8. “(P.s. there was more to that picture than meets the eye. May need a bit of trickery.)” – @Dinnerbone, March 23, 2017
  9. “Did the filesize seem a bit big?” – @Dinnerbone, March 23, 2017
  10. “Okay so I think my webserver proxy messed that up. Technology is difficult. Here's a more fun image, in a zip: http:// media.dinnerbone.com/uploads/2017-0 3/screenshots/23_15-00-52_ttcfj9tDnV.zip” – @Dinnerbone, March 23, 2017
  11. “The tabs are alternate trees that are themselves advancements too. We support a lot, but we'll use 4/5 in vanilla. http://media.dinnerbone.com/uploads/2017-03/screenshots/24_09-23-41_rYLfqg0Q52.png” – @Dinnerbone, March 24, 2017
  12. “(Thus "tabthulu" tweets from a few weeks back. :D)” – @Dinnerbone, March 24, 2017
  13. “Also worth noting: all of that UI is data driven. Positioning and layout included. No hardcoded data in UI, no hardcoded positions in data.” – @Dinnerbone, March 24, 2017