<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<!--[if !mso]><style>v\:* {behavior:url(#default#VML);}
o\:* {behavior:url(#default#VML);}
w\:* {behavior:url(#default#VML);}
.shape {behavior:url(#default#VML);}
</style><![endif]--><style><!--
/* Font Definitions */
@font-face
        {font-family:Wingdings;
        panose-1:5 0 0 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI Emoji";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
p.MsoListParagraph, li.MsoListParagraph, div.MsoListParagraph
        {mso-style-priority:34;
        margin-top:0cm;
        margin-right:0cm;
        margin-bottom:0cm;
        margin-left:36.0pt;
        font-size:11.0pt;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:793837716;
        mso-list-template-ids:-1;}
@list l0:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Symbol;}
@list l0:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:72.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:"Courier New";
        mso-bidi-font-family:"Times New Roman";}
@list l0:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:108.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:144.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level5
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:180.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:216.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:252.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level8
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:288.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l0:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:324.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
@list l1
        {mso-list-id:1504200118;
        mso-list-type:hybrid;
        mso-list-template-ids:1244165668 134807553 134807555 134807557 134807553 134807555 134807557 134807553 134807555 134807557;}
@list l1:level1
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level2
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level3
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l1:level4
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level5
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level6
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l1:level7
        {mso-level-number-format:bullet;
        mso-level-text:\F0B7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Symbol;}
@list l1:level8
        {mso-level-number-format:bullet;
        mso-level-text:o;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:"Courier New";}
@list l1:level9
        {mso-level-number-format:bullet;
        mso-level-text:\F0A7;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        font-family:Wingdings;}
@list l0:level1 lfo1
        {mso-level-start-at:0;
        mso-level-numbering:continue;
        mso-level-text:\F0A7;
        mso-level-tab-stop:36.0pt;
        mso-level-number-position:left;
        text-indent:-18.0pt;
        mso-ansi-font-size:10.0pt;
        font-family:Wingdings;}
ol
        {margin-bottom:0cm;}
ul
        {margin-bottom:0cm;}
--></style>
</head>
<body lang="EN-CA" link="blue" vlink="#954F72" style="word-wrap:break-word">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">It definitely supports all those things, except for the automatic reward part. Unless I’m missing it in their documentation:<br>
<br>
<a href="https://partner.steamgames.com/doc/features/achievements#4">https://partner.steamgames.com/doc/features/achievements#4</a><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal">These points in particular:</p>
<ul style="margin-top:0cm" type="disc">
<li class="MsoListParagraph" style="margin-left:0cm;mso-list:l1 level1 lfo2">For achievements that have progress bars use ISteamUserStats::IndicateAchievementProgress at significant points to show a pop-up with the progress. For instance, if you need 20 wins
 you may want to call this at 10 wins to show that the user has made it halfway.</li><li class="MsoListParagraph" style="margin-left:0cm;mso-list:l1 level1 lfo2">Whenever one or more achievements are unlocked, call ISteamUserStats::SetAchievement for each unlocked achievement and then ISteamUserStats::StoreStats to immediately upload them.
 Your game will see a ISteamUserStats::UserStatsStored_t callback, plus one ISteamUserStats::UserAchievementStored_t callback for each unlocked achievement. The Steam Game Overlay will display a notification panel to the user.</li></ul>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">It <i>does</i> appear that you could use these stats to persist between saves, but we could do that already anyway, and I think a major goal is to be portable, even if the user doesn’t have Steam, so I think it makes more sense to keep
 track ourselves. If the stats are visible in Steam (which, if they are, then I’m not sure where), the we might want to try and sync them, but that’s a bigger deal, and maybe something we do later.</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">(Also hi Simon!)</p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">--<o:p></o:p></p>
<p class="MsoNormal">Mike Caron<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<div style="mso-element:para-border-div;border:none;border-top:solid #E1E1E1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal" style="border:none;padding:0cm"><b>From: </b><a href="mailto:neworiginal@gmail.com">Simon Bradley</a><br>
<b>Sent: </b>October 28, 2021 12:01<br>
<b>To: </b><a href="mailto:ohrrpgce@lists.motherhamster.org">ohrrpgce@lists.motherhamster.org</a><br>
<b>Subject: </b>Re: [Ohrrpgce] Achievement implementations</p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<p class="MsoNormal">I thought Steam had a system where you could update user statistics on Stream and it could automatically award achievements when they reach a specific value? I might be imagining that, or getting it confused with some other achievement
 system. I don't know if you'd need to save anything locally for cross-save counters, I think you could just increment a count on steam.<o:p></o:p></p>
</div>
<p class="MsoNormal"><o:p> </o:p></p>
<div>
<div>
<p class="MsoNormal">On Thu, 28 Oct 2021 at 15:08, Mike Caron <<a href="mailto:caron.mike@outlook.com">caron.mike@outlook.com</a>> wrote:<o:p></o:p></p>
</div>
<blockquote style="border:none;border-left:solid #CCCCCC 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<blockquote style="border:none #C8C8C8 1.0pt;border-left:solid #C8C8C8 2.25pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">​</span><span style="color:black;background:white">The tag_updates function is the place to put hooks for when a tag changes.</span><span style="color:#666666"><o:p></o:p></span></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">I assumed there might be a place like that. Thanks!</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<blockquote style="border:none #C8C8C8 1.0pt;border-left:solid #C8C8C8 2.25pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="color:black;background:white">If achievements are displayed through steam, how does this work? You</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black;background:white">can cause Steam to popup a progress notification with text of your</span><span style="color:black"><br>
<span style="background:white">choice? Or does it have to be numerical, or predefined in Steam's</span></span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black;background:white">achievement editor?</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">​You can just tell it to display progress whenever you want, I believe. I was thinking that we would just do this whenever "value % interval == 0".</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<blockquote style="border:none #C8C8C8 1.0pt;border-left:solid #C8C8C8 2.25pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="color:black;background:white">What about achievements that can be progressed towards in separate</span><span style="font-size:12.0pt;color:black"><br>
</span><span style="color:black;background:white">saved games? The example you put on the wiki of finding all the ways</span><span style="color:black"><br>
<span style="background:white">to die is one where progress needs to be shared rather than</span></span><span style="color:#666666"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black;background:white">save-specific.</span><span style="color:#666666"><o:p></o:p></span></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">​I was envisioning a game where these deaths were not game-over-and-reloading-your-last-save inducing, but I suppose that's not clear. I am not sure how we might want to handle cross-save achievements.
 Part of me wants to not handle it at all and let game creators do that themselves (if or when custom IO is a thing), but it also wouldn't be
<i>Too</i>​ hard to add it now either. On the third hand, I suspect this is a rather more niche feature, so maybe we can just punt the issue down the road a bit.</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<blockquote style="border:none #C8C8C8 1.0pt;border-left:solid #C8C8C8 2.25pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="color:black;background:white">Creating an editor for RELOAD-based data is not yet simple, but I'm</span><span style="font-size:12.0pt;color:black"><br>
</span><span style="color:black;background:white">going to make a start on generalising the Purchases editor (most</span><span style="color:black"><br>
<span style="background:white">likely) into a class for defining editable RELOAD trees.</span></span><span style="color:#666666"><o:p></o:p></span></p>
</div>
</blockquote>
<div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">Neat. I haven't actually looked too hard into what editors look like these days so I'm not sure how bad "not yet simple" is, but if there's anything I can do to help, please let me know.<o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black"><o:p> </o:p></span></p>
</div>
<blockquote style="border:none #C8C8C8 1.0pt;border-left:solid #C8C8C8 2.25pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-bottom:5.0pt">
<div>
<p class="MsoNormal"><span style="color:black;background:white">Pleased that documentation already exists on the wiki, documenting</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
<div>
<p class="MsoNormal"><span style="color:black;background:white">everything is a big task!</span><span style="font-size:12.0pt;color:black"><o:p></o:p></span></p>
</div>
</blockquote>
<div>
<p class="MsoNormal"><span style="font-size:12.0pt;color:black">​If I had to pick one lesson that I've learned over the years, it's that documenting things first makes implementation easier. It's keeping that documentation up to date that is the challenge
</span><span style="font-size:12.0pt;font-family:"Segoe UI Emoji",sans-serif;color:black">😄</span><o:p></o:p></p>
</div>
<div>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
<p class="MsoNormal"><img border="0" width="688" height="2" style="width:7.1666in;height:.0208in" id="Horizontal_x0020_Line_x0020_1" src="cid:image002.png@01D7CBF5.7573D330"><o:p></o:p></p>
<div id="gmail-m_3108319521300769642divRplyFwdMsg">
<p class="MsoNormal"><b><span style="color:black">From:</span></b><span style="color:black"> Ohrrpgce <<a href="mailto:ohrrpgce-bounces@lists.motherhamster.org" target="_blank">ohrrpgce-bounces@lists.motherhamster.org</a>> on behalf of Ralph Versteegen <<a href="mailto:teeemcee@gmail.com" target="_blank">teeemcee@gmail.com</a>><br>
<b>Sent:</b> October 28, 2021 6:24 AM<br>
<b>To:</b> ohrrpgce <<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.org</a>><br>
<b>Subject:</b> Re: [Ohrrpgce] Achievement implementations</span> <o:p></o:p></p>
<div>
<p class="MsoNormal"> <o:p></o:p></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal">This is going quick!<br>
<br>
The permanent data storage you're looking for is<br>
<a href="https://rpg.hamsterrepublic.com/ohrrpgce/Persist.reld" target="_blank">https://rpg.hamsterrepublic.com/ohrrpgce/Persist.reld</a><br>
<br>
The tag_updates function is the place to put hooks for when a tag changes.<br>
<br>
> A game may wish to expose the current progress at intervals ("defeat 100 goblins: 20/100") to motivate the player to continue progresing the achievement.<br>
<br>
If achievements are displayed through steam, how does this work? You<br>
can cause Steam to popup a progress notification with text of your<br>
choice? Or does it have to be numerical, or predefined in Steam's<br>
achievement editor?<br>
<br>
What about achievements that can be progressed towards in separate<br>
saved games? The example you put on the wiki of finding all the ways<br>
to die is one where progress needs to be shared rather than<br>
save-specific.<br>
<br>
Creating an editor for RELOAD-based data is not yet simple, but I'm<br>
going to make a start on generalising the Purchases editor (most<br>
likely) into a class for defining editable RELOAD trees.<br>
<br>
Pleased that documentation already exists on the wiki, documenting<br>
everything is a big task!<br>
<br>
On Thu, 28 Oct 2021 at 14:03, Mike Caron <<a href="mailto:caron.mike@outlook.com" target="_blank">caron.mike@outlook.com</a>> wrote:<br>
><br>
> Hello friends, sorry I’m late. Got sidetracked with a few things <span style="font-family:"Segoe UI Emoji",sans-serif">
😊</span><br>
><br>
><br>
><br>
> As I’ve been discussing with TMC on the Slime Salad discord, I’m working on adding achievements and Steamworks support to the OHRRPGCE. This is based on a post TMC made here just about three years ago:
<a href="http://lists.motherhamster.org/pipermail/ohrrpgce-motherhamster.org/2018-October/004308.html" target="_blank">
http://lists.motherhamster.org/pipermail/ohrrpgce-motherhamster.org/2018-October/004308.html</a><br>
><br>
><br>
><br>
> I’ve currently made progress on integrating Steamworks itself, thanks in no small part to TMC helping me get my environment set up, and now I’m thinking about how this stuff will work in the engine itself. I’ve been documenting stuff on the wiki, and I would
 encourage everyone to take a peek and give any feedback they have. Note that this page is not complete, and suggestions to fill in blanks would be appreciated.<br>
><br>
><br>
><br>
> <a href="https://rpg.hamsterrepublic.com/ohrrpgce/User:Pkmnfrk/Achievements" target="_blank">
https://rpg.hamsterrepublic.com/ohrrpgce/User:Pkmnfrk/Achievements</a><br>
><br>
><br>
><br>
> I’m hopeful to get this implemented soon, so I can get back to my next 13 year hiatus.<br>
><br>
><br>
><br>
> Cheers!<br>
><br>
> --<br>
><br>
> Mike Caron<br>
><br>
><br>
><br>
> _______________________________________________<br>
> Ohrrpgce mailing list<br>
> <a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
> <a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" target="_blank">
http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><br>
_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><o:p></o:p></p>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal" style="margin-left:4.8pt">_______________________________________________<br>
Ohrrpgce mailing list<br>
<a href="mailto:ohrrpgce@lists.motherhamster.org" target="_blank">ohrrpgce@lists.motherhamster.org</a><br>
<a href="http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org" target="_blank">http://lists.motherhamster.org/listinfo.cgi/ohrrpgce-motherhamster.org</a><o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
</div>
</body>
</html>