Path of Exile - CommunityTeam_GGG
This weekend we are running a Wings and Back Attachment Sale! You can view the full selection in the specials tab by pressing 'M' to open the store in-game. The sale runs all weekend and ends on Jun 06, 2022 6:00 PM PDT.

During the sale, we’re also offering one free Sentinel Mystery Box when you spend points! If you've already unlocked every item from the Sentinel Mystery Box, you'll get Two Twilight Mystery Boxes instead! This promotion is available on both PC and consoles.

Have a look at the what’s in the box below.


Please note: it's only possible to get the free Mystery Box(es) once from this promotion. Making additional microtransaction purchases will not grant additional mystery boxes. Purchasing a supporter pack will not grant the free Mystery Box(es) but spending points from a supporter pack can grant them.

In case you need points for this sale, we'd recommend checking out the Sentinel Supporter Packs!

Thank you so much for your support!
Jun 2, 2022
Path of Exile - CommunityTeam_GGG
It's been a while since we last did a Q&A about Path of Exile's game mechanics and we're keen to answer your questions about its intricacies! We'll collect your questions and present the answers sometime in the next few weeks.

The intention of this Q&A is to be exclusively about game mechanics rather than game design or other Path of Exile topics - for example, how specific passives interact with particular unique items, etc. It's unlikely that we'll be able to get to every question due to time constraints but we aim to answer as many as we can.

We look forward to your questions!

Path of Exile - CommunityTeam_GGG
We sat down with Ben, one of our UI Programmers who fixed the "mangled text" bug that's been affecting Path of Exile for a long time. Because there was some interest in the bug itself, he was kind enough to write up a post-mortem for us. Check it out below!


After announcing we finally found a fix for the infamous "mangled text" bug players have been encountering for the past 6 years, some players expressed interest in getting a post-mortem on this age-old issue. I'd always been interested in trying my hand at a technical details post someday so here you are! The bug has been known by a few different names, referred to by things such as "jumbled", "corrupted" or "krangled" text. Internally we mostly referred to it as being "mangled" so that's what I'll be calling it.

I can tell you that the bug was introduced to the codebase April 25th of 2016 and made it into production in 2.3.0 with Prophecy League. It was introduced by some refactoring of the text engine in order to support the then-upcoming Xbox version of Path of Exile.

The Symptoms
I feel safe in saying that a majority of players encountered this bug at some point over the years, mostly showing up after longer play sessions, but some players encountered it much more often than others. It could affect any text in the game and there were two distinct effects of the bug:
One where the kerning, or spacing between the individual drawn glyphs, was either too large or too small.





And another where the individual characters were being graphically represented by the wrong glyph:



Some keen-eyed players had noticed that in the second case, applying a substitution cipher could restore the original text.

Example: "Pevpf`^l D^j^db" -> "Physical Damage", ^ maps to "a".

One thing which always struck us as being odd was that capital letters would have a different (or sometimes no offset) compared to lowercase letters.

The Hunt
The earliest bug ticket for this issue was made on June 4th 2016, created from reports on the forums just after Prophecy's release. The biggest hurdle was we could never find a way to reliably reproduce the bug on our machines, only having it pop up very rarely and randomly. From what I heard we only ever got it on a programmer's machine once or twice, which is key to letting us inspect what's in memory to gather clues as to what went wrong. Until we could find reproduction steps the best we could do was some speculative fixes and hope the issue stopped getting reported. Due to lack of finding anything and it not being a show-stopping issue it got downgraded to lower importance so more time could be given to new features and other fixes.

Many developers (myself included) had made their own attempts at finding the issue over the years, all while more links to user reports would get added every other month to remind us of this puzzling issue. From the report gathering, screenshots and my own experience I could tell the following things:
  • It affected individual font styles (combination of typeface, size, italic/bold status), rather than particular text displays or strings.
  • It didn't appear to be a texture generation, corruption or atlasing issue as none of the glyphs ever seemed to be clipped or cut in half. The rare time we got the bug on a programmer's machine also confirmed this.
  • Logging out would not resolve the issue in most cases, only a client restart.
  • I noticed we never got a report for this happening on Xbox, PlayStation or MacOS, which ended up helping me narrow it down the most to a particular area of the text engine.
Around the release of Scourge I noticed the bug seemed to start getting reported a bit more often and I started experiencing the bug more in my own play sessions. I recorded most of these occurrences, collected images from players and started building a couple of hunches, but still couldn't find reproduction steps other than "play the game a bunch". A couple of weeks ago I got a bit of a gap in my tasks and decided to make another serious attempt, spending a few days diving fully into the text engine to read through and understand all its intricacies.

The Fix
While deep diving through the text engine code, I finally came upon the following function:

SCRIPT_CACHE* ShapingEngineUniscribe::GetFontScriptCache( const Resources::Font& font ) { const auto font_resource = font.GetResource()->GetPointer(); // `font_script_caches` here is a map of `const FontResource*` to `SCRIPT_CACHE` values auto it = font_script_caches.find( font_resource ); if( it == std::end( font_script_caches ) ) it = font_script_caches.emplace( std::make_pair( font_resource, nullptr ) ).first; return &it->second; }
For non-programmers: this function takes in a reference to a particular font resource and uses its location in memory as a key (lookup value) for a SCRIPT_CACHE data object, creating a new entry if it doesn't already exist. The function then returns a pointer to the SCRIPT_CACHE object, which lets the function caller modify the stored SCRIPT_CACHE instead of a copy which wouldn't have its changes persisted in the `font_script_caches` map.
The SCRIPT_CACHE object here is an opaque data object used by the Windows Uniscribe library (which we only use for the Windows version of the client). The Uniscribe documentation doesn't give insight into what information is actually stored by this, just that the application must keep one of these for each "character style" used. From the effects of the text mangling bug though we can infer that it's used for kerning and mapping characters to glyph textures at least.

Upon first glance this function appears to be doing something completely reasonable, which is probably why the issue never got noticed all these years. You only spot the issue once you realise that font resources can be unloaded by our resource manager when they are no longer in use. The bug then occurs when another font (different typeface, style and/or size) happens to get loaded by the resource manager into the exact same location memory, causing the new font to reuse the old one's SCRIPT_CACHE.
Once I had found this I did a couple of tests to confirm my theory that this was the issue.
Forcing every font to use the same script cache immediately produced this upon starting the game:



Huzzah! Both types of symptoms on display, which was also confirmation that these effects were from the same issue and not two separate ones. From this I was then able to reproduce the bug naturally by purposefully loading and unloading as many fonts as possible, until you get a new font occupying an old one's memory location:



Now that we know the problem, there were a few ways to go about fixing this: You could move the SCRIPT_CACHE object to belong to the Resource::Font object, delete the old SCRIPT_CACHE whenever the font gets unloaded, or swap the lookup value from the memory address to be instead be based on the typeface, size and styling of the font, which is what actually makes a font unique. All these options work but each has its own pros and cons and should be weighed based on how it fits into the larger systems.

Summary
The actual cause of the bug isn't that interesting in itself, just realising that memory addresses can and do get reused, so you need to be careful if/when using pointers as keys. This bug will stick around in my memory though due to the particularly strange symptoms, being really annoying to track down and even just the notoriety of having stuck around for so long. I'll almost miss it in a way since it's one less "grand mystery" for my brain to pick at. Guess I just need to find the next mystery issue to fascinate myself with!

Thanks to everyone who has reported this and other issues over the years! Software development and debugging in particular can be strange and the smallest of things can produce really weird bugs. Detailed bug reports are always really valuable for building a picture of what could be happening and helps us reproduce the problem ourselves, which then lets us develop and test fixes instead of poking around in the dark.


R.I.P T l e e v

May 31, 2022
Path of Exile - CommunityTeam_GGG
We went through our Hideout Showcase forum again to highlight some of your amazing hideout designs with the rest of the community! Some of the hideouts featured make use of the new Timekeeper's and Ghost-lit Graveyard Hideouts, both exclusive to the Sentinel Supporter Packs! If you're looking for a new Hideout or need some inspiration for your next one, check them out in the showcase below!


Here's a list of the hideouts featured in the video (.hideout files are available for download in corresponding forum threads):
Path of Exile - CommunityTeam_GGG
Today, we have a variety of both concept art and 3D art for items featured in Kirac's Vault Pass! The pass contains item skins and effects for specific unique items that unlock as you complete Atlas objectives! Check out the art below!

If you want to find out more about Kirac's Vault Pass, check out the Vault Pass page here.

Rumi's Concoction




The Devouring Diadem


Void Battery


Ashes of the Stars


Arakaali's Fang


Mageblood


If you want to find out more about Kirac's Vault Pass, check out the Vault Pass page here.

Path of Exile - CommunityTeam_GGG
We're continuing to share backstories of Divination Cards created by our supporters. This time we spoke with Quelex about the story behind the Imperfect Memories, a Divination Card from the Siege of the Atlas expansion.



I have played games like Path of Exile since Diablo 1 came out when I was young. I've always enjoyed coming up with different ideas and testing how well they will work. I stumbled upon the website for PoE during its closed beta and thought it looked cool (especially as a person who loves Final Fantasy X's passive tree) but I didn't know anyone that played it. When the open beta came around my friend and I finally gave it a shot and we have been hooked and played every league since.

As with many other cards, the idea for the reward came first. I've always felt it was important to have special mods tied to content (like Incursion or Delve) to keep that content relevant to crafting. Synthesis league added a ton of stats and some you can't find anywhere else. I especially liked +% Attributes from jewelry as an implicit since I love playing Whispering Ice. So why not a 3 implicit synthesised jewelry so that you can try to hit at least one of those chase modifiers?

But there was a snag: You can't make a card for an item that can't drop in Standard. Synthesis was one of my favorite leagues and for over a year it looked like nothing from it would be coming back so the idea was shelved. With Echoes of The Atlas, synthesised and fractured items returned to the core game and so now the card I wanted could be made!

For the theme I wanted to connect something from my life to Synthesis. Synthesis League was a personal favorite, but it had its flaws. I thought back to how my then girlfriend (and now wife!) and I had been apart while she was at college a couple hours away. It was hard being apart but it made the times we did get to spend together on the beautiful campus memorable. Looking back it's easy to gloss over the bad parts. So I settled on the theme of nostalgia and the rest of the card came together quickly at that point. The art comes from a combination of the synthesis decay effect around the edges and a picture of a spot on the campus featuring a very assertive pilgrim goose that always wandered the campus with its duck friends in tow.

Thank you GGG for an amazing game, for adding my card, and for bringing more Synthesis content back to the game! (Synthesis 2 league when?) It's been wonderful to see other contributors bringing more opportunities for people to get synthesised items and maps so that part of the game can live on and be more accessible. And for all of those who made it to the end and have turned in a set: I'm sorry you got resists and mana regen. I'm sure you'll get an extra maximum power charge next time.



Path of Exile - CommunityTeam_GGG
As the Archnemesis league ended on consoles last week, we'd like to announce the winners of the Siege of the Atlas Boss Kill Event for our console players! We'd like to thank everyone for participating and congratulate the winners!

PlayStation
The following players were the first to defeat The Maven, The Searing Exarch and The Eater of Worlds in the Hardcore Solo Self-found Archnemesis League on PlayStation:
  • #1: camuflado_cz
  • #2: NeuroIsCool
  • #3: shawn_33179
  • #4: Shade_AU
  • #5: Denton860
Bonus Prizes:
  • First Uber Elder Kill: Denton860
  • First Shaper Kill: NeuroIsCool
  • First Sirus Kill: camuflado_cz
Xbox
The following players were the first to defeat The Maven, The Searing Exarch and The Eater of Worlds in the Hardcore Solo Self-found Archnemesis League on Xbox:
  • #1: ReignerRuler
  • #2: ImToxic8998
Bonus Prizes:
  • First Uber Elder: ImToxic8998
  • First Shaper: ImToxic8998
  • First Sirus: ImToxic8998
Thanks again to everyone who participated! Don't forget, we're running another Boss Kill competition for our Sentinel expansion that's also for console players! This time, the event is being run on the Sentinel SSF league (non-HC). For more information on the competition, check out the original post here! Good luck to everyone participating!
Path of Exile - CommunityTeam_GGG
Our Sentinel Mystery Box is our first Mystery Box with non-repeating rewards that features microtransactions that have different levels of effects based on gameplay elements! They were a lot of fun to design, so we thought you'd like to take a peek at the process through its concept art! Check it out below.

If you want to find out more about the Sentinel Mystery Box, check out the Mystery Box page here!



















If you want to find out more about the Sentinel Mystery Box, check out the Mystery Box page here!
Path of Exile - CommunityTeam_GGG
Sometime this week or early next week, we're planning to deploy the 3.18.0d patch that includes further changes to monster modifiers and some bug fixes. Check out a preview of its patch notes below.

3.18.0d Patch Notes

This patch includes changes to monster modifiers that provide ailment immunity, as well as a few improvements and bug fixes of both small- and medium-importance.

Monster modifier changes
  • Frostweaver: No longer grants immunity to Cold Ailments. It now grants 80% reduced effect of Cold Ailments.
  • Permafrost: No longer grants immunity to Freeze and Chill. It now grants 80% reduced effect of Cold Ailments.
  • Flameweaver: No longer grants immunity to Scorch. It now grants 80% reduced effect of Scorch.
  • Stormweaver: No longer grants immunity to Lightning Ailments. It now grants 80% reduced effect of Lightning Ailments.
  • Dynamo: No longer grants immunity to Shock. It now grants 80% reduced effect of Lightning Ailments.
  • Frost Strider: No longer grants immunity to Cold Ailments. It now grants 80% reduced effect of Cold Ailments.
  • Ice Prison: No longer grants immunity to Cold Ailments. It now grants 50% reduced effect of Cold Ailments.
  • Flame Strider: No longer grants immunity to Scorch. It now grants 80% reduced effect of Scorch.
  • Storm Strider: No longer grants immunity to Lightning Ailments. It now grants 80% reduced effect of Lightning Ailments.
  • Mana Siphoner: No longer grants immunity to Lightning Ailments. It now grants 50% reduced effect of Lightning Ailments.
  • Storm Herald: No longer grants immunity to Lightning Ailments. It now grants 50% reduced effect of Lightning Ailments.
  • Steel-infused: Now grants "Overwhelm 10% of Physical Damage Reduction" (previously 30%).
  • Rejuvenating: Reduced the life regeneration for Unique Monsters from Healing Nova to 10% of life regenerated over 2 seconds.
  • Effigy: Summoned Effigies are now spawned at the player's location and are immune to damage for 2 seconds after linking to a player. While linked, 50% of damage from Hits taken by the Effigy is also taken by the player as reflected damage (previously 100%).
  • Crystal-skinned: Improved the charge up visuals of crystals.
  • The Trickster monster modifier can no longer be found on Magic or Rare Monsters in the Azurite Mine.
  • The Juggernaut monster modifier can no longer be found on Blighted Monsters.
Improvements and bug fixes
  • Character level no longer prevents you from using Sentinels in Act Areas.
  • Updated the description of the Sentinel Runic Node that causes found Normal-rarity Sentinels to be upgraded to Magic rarity to clarify it applies to Sentinels found from Monsters you kill and Chests you open.
  • Updated the Controller input mode keybind for equipping a Sentinel. Using this keybind when highlighting an equippable Sentinel will now also open the Sentinel Controller Panel.
  • Using the equip keybind in Controller input mode will now swap the Sentinel highlighted in your inventory with the relevant Sentinel in your Sentinel Controller Panel if you already have one equipped.
  • The charges on equipped Sentinels can now be viewed using the Right-stick button in Controller input mode.
  • The destructible pillars in the Polaric Hideout can no longer be moved by player skills.
  • The Invisible Buff Effect Microtransaction can now be applied to Withering Step, allowing you to hide its visual effects.
  • Fixed a bug that allowed Bow, Wand and Concoction Skills to be used with the Varunastra Unique equipped.
  • Fixed an issue where you could fail to obtain credit towards the Complete Encounters II challenge when completing an 8-mod Blight-Ravaged Map.
  • Fixed a bug where Kirac's "Slay the Beyond Boss" Atlas Mission could not be completed.
  • Fixed a bug where the size sliders in the Unique and Divination Card Stash Tabs were not working in Controller input mode.
  • Fixed a client crash that could occur when trying to enter The Control Blocks in Act 5.
We're still working on a fix for Headhunter and will release it as soon as it's ready. Thanks for your feedback!
Path of Exile - CommunityTeam_GGG
The Sentinel Boss Kill Event on PC concluded earlier this week. Seven players have managed to kill seven Uber Pinnacle Bosses in Sentinel HC SSF mode! Congratulations to all winners and thank you to everyone who participated. All winners will be granted the Godslayer's Pride microtransaction and we're currently working with them to design their unique item prizes.

The following 7 players were the first to defeat seven Uber Bosses (the Uber Eater of Worlds, the Uber Searing Exarch, the Uber Maven, Uber Sirus, Uber Venarius, Uber Uber Elder, Uber Shaper) in the Hardcore Solo Self-found Sentinel League on PC:

  • #1 Darkee
  • #2 nickexile11
  • #3 Zizaran
  • #4 GucciPradas
  • #5 Jezie
  • #6 Steelmage
  • #7 z4kur
The Sentinel Boss Kill Event on consoles is still running.

Twitch Highlights
Check out the Twitch Highlights on our forum post by clicking here!



...