{"id":18,"date":"2023-11-06T16:00:00","date_gmt":"2023-11-06T15:00:00","guid":{"rendered":"https:\/\/www.sleepingpanda.games\/blog\/?p=18"},"modified":"2024-10-15T12:57:34","modified_gmt":"2024-10-15T10:57:34","slug":"how-to-export-your-construct-3-game-for-steam-and-steamdeck","status":"publish","type":"post","link":"https:\/\/www.sleepingpanda.games\/blog\/how-to-export-your-construct-3-game-for-steam-and-steamdeck\/","title":{"rendered":"How to export your Construct 3 game for Steam (and Steam Deck)"},"content":{"rendered":"\n<p>Before you start reading, you should know that this post was written from notes I took while releasing updates for <a href=\"http:\/\/babydino.sleepingpanda.games\" data-type=\"link\" data-id=\"http:\/\/babydino.sleepingpanda.games\">my first commercial game on Steam<\/a> &#8211; which is still in early access as I write this.<\/p>\n\n\n\n<p>If you&#8217;d prefer a video tutorial, take a look at <a href=\"https:\/\/www.ajordaz.com\/\" data-type=\"link\" data-id=\"https:\/\/www.ajordaz.com\/\">AJ Ordaz<\/a>&#8216;s YouTube video: <a rel=\"noreferrer noopener\" href=\"https:\/\/youtu.be\/D1ZF6pnsFeA\" target=\"_blank\">How to add Steam Achievements and Overlay to your Construct 3 game using Greenworks<\/a>.<\/p>\n\n\n\n<p>I use NW.js to export my game. I know there are other alternatives like Electron and Tauri. I&#8217;m not saying which one you should use. NWjs worked for me and my game so here&#8217;s how I did it.<\/p>\n\n\n\n<p>It&#8217;s going to be a long journey for developers who&#8217;ve never done this before. There are lots of little things to learn here and there, and we&#8217;re going to go through them step by step.<\/p>\n\n\n\n<p>It&#8217;s taken me a long time and a lot of patience, research and testing. If you notice any mistakes, errors or missing information, please feel free to leave a comment below or get in touch with me via my socials or <a href=\"mailto:wakeup(at)sleepingpanda.games\" data-type=\"mailto\" data-id=\"mailto:wakeup(at)sleepingpanda.games\">e-mail<\/a>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity is-style-default\"\/>\n\n\n\n<h2 class=\"wp-block-heading\">Table of content<\/h2>\n\n\n\n<p>Here&#8217;s a summary of the different stages we&#8217;ll be dealing with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#greenworks-plugin-for-construct-3\" data-type=\"internal\" data-id=\"#greenworks-plugin-for-construct-3\">Greenworks plugin for Construct 3<\/a><\/li>\n\n\n\n<li><a href=\"#debugging-greenworks-plugin\" data-type=\"internal\" data-id=\"#debugging-greenworks-plugin\">Debugging Greenworks plugin<\/a><\/li>\n\n\n\n<li><a href=\"#construct3-export-settings\" data-type=\"internal\" data-id=\"#construct3-export-settings\">Construct 3 Export Settings<\/a><\/li>\n\n\n\n<li><a href=\"#getting-additional-files-for-exports\" data-type=\"internal\" data-id=\"#getting-additional-files-for-exports\">Getting additional files for exports<\/a><\/li>\n\n\n\n<li><a href=\"#preparing-packages\" data-type=\"internal\" data-id=\"#preparing-packages\">Preparing packages<\/a><\/li>\n\n\n\n<li><a href=\"#uploading-packages-on-Steam\" data-type=\"internal\" data-id=\"#uploading-packages-on-Steam\">Uploading packages to Steam<\/a><\/li>\n\n\n\n<li><a href=\"#testing-on-steam\" data-type=\"internal\" data-id=\"#testing-on-steam\">Testing on Steam<\/a><\/li>\n\n\n\n<li><a href=\"#testing-on-steam-deck\" data-type=\"internal\" data-id=\"#testing-on-steam-deck\">Testing on Steam Deck<\/a><\/li>\n\n\n\n<li><a href=\"#conclusion\" data-type=\"internal\" data-id=\"#conclusion\">Conclusion<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"greenworks-plugin-for-construct-3\">Greenworks plugin for Construct 3<\/h3>\n\n\n\n<p>Scirra, the team behind Construct, has created an official plugin called &#8220;Greenworks&#8221; that lets you access the Steamworks API from within NW.js. <\/p>\n\n\n\n<p>This plugin is <strong>not implemented by default in Construct<\/strong>. We therefore need to download the appropriate version and install it ourselves.<\/p>\n\n\n\n<p>Let&#8217;s <a href=\"https:\/\/www.construct.net\/en\/make-games\/addons\/84\/greenworks-for-nw-js\/versions\" data-type=\"link\" data-id=\"https:\/\/www.construct.net\/en\/make-games\/addons\/84\/greenworks\/versions\">go to the plugin page<\/a>, and download version 0.60.0 of the plugin in the &#8220;Version&#8221; tab.<\/p>\n\n\n\n<p>I&#8217;ve tried my best to get versions higher than 0.60.0 to work, but so far I&#8217;ve never succeeded. Sometimes visual bugs when launching the game, sometimes black screens on Linux or macOS, or even random crashes on SteamDeck\u2026 <\/p>\n\n\n\n<p>So I&#8217;ve stuck with version 0.60.0 for the time being, since it works everywhere. For me, it&#8217;s important that the game runs on as many platforms as possible.<\/p>\n\n\n\n<p>Once you have downloaded the plugin, <a href=\"https:\/\/editor.construct.net\/\" data-type=\"link\" data-id=\"https:\/\/editor.construct.net\/\">open Construct 3<\/a> and install it.<\/p>\n\n\n\n<p>To install a plugin, open the <strong>Addon manager<\/strong>:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"690\" height=\"634\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-07-21.png?resize=690%2C634&#038;ssl=1\" alt=\"\" class=\"wp-image-153\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-07-21.png?w=690&amp;ssl=1 690w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-07-21.png?resize=300%2C276&amp;ssl=1 300w\" sizes=\"auto, (max-width: 690px) 100vw, 690px\" \/><figcaption class=\"wp-element-caption\">Click on Menu &gt; View &gt; Addon manager<\/figcaption><\/figure>\n\n\n\n<p>The &#8220;Addon manager&#8221; dialog appears. Now click on the &#8220;Install new addon&#8230;&#8221; button on the bottom left of the dialog:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"828\" height=\"527\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-11-38.png?resize=828%2C527&#038;ssl=1\" alt=\"\" class=\"wp-image-155\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-11-38.png?w=828&amp;ssl=1 828w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-11-38.png?resize=300%2C191&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-11-38.png?resize=768%2C489&amp;ssl=1 768w\" sizes=\"auto, (max-width: 828px) 100vw, 828px\" \/><\/figure>\n\n\n\n<p>Select the Greenworks plugin file we previously downloaded. It should be something like &#8220;greenworks-0.60.0-stable.c3addon&#8221;. Notice the &#8220;.c3addon&#8221; extension that Construct uses to recognize an addon file.<\/p>\n\n\n\n<p>As soon as you upload the file, Construct will show you a warning message to warn you to install only addons from trusted sources:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"517\" height=\"380\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-18-41.png?resize=517%2C380&#038;ssl=1\" alt=\"\" class=\"wp-image-156\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-18-41.png?w=517&amp;ssl=1 517w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-18-41.png?resize=300%2C221&amp;ssl=1 300w\" sizes=\"auto, (max-width: 517px) 100vw, 517px\" \/><\/figure>\n\n\n\n<p>We downloaded this file from Scirra&#8217;s official website and it was made by them so we should be safe enough, right?<\/p>\n\n\n\n<p>Proceed with the installation of the plugin by clicking on the &#8220;Install&#8221; button.<\/p>\n\n\n\n<p>Once the installation completed, <strong>make sure to restart Construct to be able to use the addon<\/strong>. Simply refresh the page (ctrl+R or cmd R) and if you head to the &#8220;Addon manager&#8221; dialog again, you should see the Greenworks plugin version 0.60.0 listed there.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"824\" height=\"522\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-29-25.png?resize=824%2C522&#038;ssl=1\" alt=\"\" class=\"wp-image-157\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-29-25.png?w=824&amp;ssl=1 824w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-29-25.png?resize=300%2C190&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-29-25.png?resize=768%2C487&amp;ssl=1 768w\" sizes=\"auto, (max-width: 824px) 100vw, 824px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"debugging-greenworks-plugin\">Debugging Greenworks plugin<\/h3>\n\n\n\n<p>Now that the plugin has been installed, you can start creating the Steamworks events logic you want in your game.<\/p>\n\n\n\n<p>When you want to debug your game&#8217;s NWjs exports, even before testing whether or not bugs come from your events, it&#8217;s vital to <strong>make sure that the Steam API has been loaded and is available<\/strong>.<\/p>\n\n\n\n<p>If the API is not available, none of the Steamworks features will work. Your game will probably work fine, but not the events you&#8217;ve added with the Greenworks plugin. Such as achievements, for example.<\/p>\n\n\n\n<p>There may be several reasons why the API isn&#8217;t available. Mostly due to not using the right versions of files together. We will go through them later in this article.<\/p>\n\n\n\n<p>For now, lets focus on adding some events that will help us understand if the Steamworks API is available or not when we run our game on exported platforms.<\/p>\n\n\n\n<p>The idea is to show\/hide a text object by pressing a key on the keyboard. The text value of this object is :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>If Steamworks is not available, display the text &#8220;Steamworks is not available&#8221;.<\/li>\n\n\n\n<li>If Steamworks is available, display the text &#8220;Steamworks is available&#8221;.<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"818\" height=\"398\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-48-13.png?resize=818%2C398&#038;ssl=1\" alt=\"\" class=\"wp-image-158\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-48-13.png?w=818&amp;ssl=1 818w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-48-13.png?resize=300%2C146&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-13-48-13.png?resize=768%2C374&amp;ssl=1 768w\" sizes=\"auto, (max-width: 818px) 100vw, 818px\" \/><\/figure>\n\n\n\n<p>Quite simple, but invaluable in determining whether the error is in our events or whether the versioning of the plugin files, NW.js and the Steam API we use are compatible or not.<\/p>\n\n\n\n<p>Note also that <strong>for the condition to be true<\/strong>, i.e. for Steamworks to be available, <strong>it is imperative that the Steam client is running with a connected user in the background when you launch the game<\/strong>. Otherwise Steamworks will always be unavailable.<\/p>\n\n\n\n<p>You can launch the game from the Steam client directly or from any folder on your computer (in this case the overlay might not work).<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"construct3-export-settings\">Construct 3 export settings<\/h3>\n\n\n\n<p>Now let&#8217;s assume that we&#8217;ve created all our Greenworks events the way we want them and that our game is ready for export and testing.<\/p>\n\n\n\n<p>To export our game, click on &#8220;Menu &gt; Project &gt; Export&#8221; button.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"456\" height=\"428\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-14-00-39.png?resize=456%2C428&#038;ssl=1\" alt=\"\" class=\"wp-image-161\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-14-00-39.png?w=456&amp;ssl=1 456w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-14-00-39.png?resize=300%2C282&amp;ssl=1 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/figure>\n\n\n\n<p>A new dialog opens, asking us to choose which platforms we want to export our game to. Select the NW.js export option and click on &#8220;Next&#8221; button:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"571\" height=\"642\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/05\/photo-001.png?resize=571%2C642&#038;ssl=1\" alt=\"Screenshot of Construct 3 export options showing the NW.JS option selected\" class=\"wp-image-23\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/05\/photo-001.png?w=571&amp;ssl=1 571w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/05\/photo-001.png?resize=267%2C300&amp;ssl=1 267w\" sizes=\"auto, (max-width: 571px) 100vw, 571px\" \/><\/figure>\n\n\n\n<p>Another modal appears and asks you for export options:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"419\" height=\"412\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image.png?resize=419%2C412&#038;ssl=1\" alt=\"\" class=\"wp-image-141\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image.png?w=419&amp;ssl=1 419w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image.png?resize=300%2C295&amp;ssl=1 300w\" sizes=\"auto, (max-width: 419px) 100vw, 419px\" \/><\/figure>\n\n\n\n<p>I won&#8217;t go through all of them here, but <a href=\"https:\/\/www.construct.net\/en\/make-games\/manuals\/construct-3\/overview\/publishing-projects\" data-type=\"link\" data-id=\"https:\/\/www.construct.net\/en\/make-games\/manuals\/construct-3\/overview\/publishing-projects\">you can find detailed information on the Construct 3 documentation about &#8220;Publishing projects&#8221;<\/a>.<\/p>\n\n\n\n<p>Notice I&#8217;m not asking Construct to minify my scripts. I had several bad experiences in the past where my exported games were crashing so I prefer to not minify it anymore. Plus I don&#8217;t think it really saves a lot of data. Compressing images and your audio will already help.<\/p>\n\n\n\n<p>Hit &#8220;Next&#8221; button, then the &#8220;NW.js options&#8221; modal appears:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"534\" height=\"473\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-1.png?resize=534%2C473&#038;ssl=1\" alt=\"\" class=\"wp-image-142\" style=\"aspect-ratio:1.1289640591966172;width:534px;height:auto\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-1.png?w=534&amp;ssl=1 534w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-1.png?resize=300%2C266&amp;ssl=1 300w\" sizes=\"auto, (max-width: 534px) 100vw, 534px\" \/><figcaption class=\"wp-element-caption\">NW.js options are saved automatically by Construct 3 in your browser cache. Next time you&#8217;ll do an export, Construct will prefill all these export options again for you.<\/figcaption><\/figure>\n\n\n\n<p>Here are a couple of information regarding each NW.JS export parameters:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>&#8220;NW.js version&#8221; is the NW.js version we want to export our game to. Here we selected the version 0.60.0 which uses Chromium 97;<\/li>\n\n\n\n<li>&#8220;Platforms&#8221; are the selected platforms we want Construct to export our game to;<\/li>\n\n\n\n<li>&#8220;Package assets&#8221; option means that Construct will bundle all our game project&#8217;s files in to a single compressed file named &#8220;package.nw&#8221;;<\/li>\n\n\n\n<li>&#8220;Compress final zip&#8221; says it all. Very handy if we want to export our game to multiple platforms;<\/li>\n\n\n\n<li>&#8220;Window frame&#8221; adds the default operating system window frame around our game. Players will see it only if they play in windowed mode. In full screen mode, no window frame and caption are shown;<\/li>\n\n\n\n<li>&#8220;Resizable window&#8221; allows players to resize the game window. This is only possible in windowed mode;<\/li>\n\n\n\n<li>&#8220;Ignore GPU blacklist&#8221; allows our game to run on systems with poor quality drivers. I&#8217;m not so sure about this one to be honest, but it is recommended by Scirra;<\/li>\n\n\n\n<li>&#8220;Export for Steam&#8221; will add a couple of Chrome arguments to our exports such as &#8220;&#8211;in-process-gpu&#8221;&nbsp;and&nbsp;&#8220;&#8211;disable-windows10-custom-titlebar&#8221;. It  also forces the game window to constantly redraw to improve compatibility with the Steam Overlay;<\/li>\n<\/ul>\n\n\n\n<p>You can find even more information about NW.js export options <a href=\"https:\/\/www.construct.net\/en\/make-games\/manuals\/construct-3\/interface\/dialogs\/nw-js-options\" data-type=\"link\" data-id=\"https:\/\/www.construct.net\/en\/make-games\/manuals\/construct-3\/interface\/dialogs\/nw-js-options\">on the official documentation page &#8220;NW.js options dialog&#8221;<\/a>.<\/p>\n\n\n\n<p>When you are ready, click on the &#8220;Next&#8221; button to start the export.<\/p>\n\n\n\n<p>Once the export is done, you&#8217;ll see a new dialog that will allow you to download exported files:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"523\" height=\"525\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-2.png?resize=523%2C525&#038;ssl=1\" alt=\"\" class=\"wp-image-145\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-2.png?w=523&amp;ssl=1 523w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-2.png?resize=300%2C300&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/image-2.png?resize=150%2C150&amp;ssl=1 150w\" sizes=\"auto, (max-width: 523px) 100vw, 523px\" \/><\/figure>\n\n\n\n<p>Download your file(s) and save it\/them on your computer disk.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"getting-additional-files-for-exports\">Getting additional files for exports<\/h3>\n\n\n\n<p>Go to the folder you saved your NW.js export in, and unzip the archive.<\/p>\n\n\n\n<p>You should see different folders with names of platforms you wanted Construct to export your game to:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"733\" height=\"450\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-15-35-21.png?resize=733%2C450&#038;ssl=1\" alt=\"\" class=\"wp-image-167\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-15-35-21.png?w=733&amp;ssl=1 733w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/10\/Screenshot-from-2023-10-30-15-35-21.png?resize=300%2C184&amp;ssl=1 300w\" sizes=\"auto, (max-width: 733px) 100vw, 733px\" \/><figcaption class=\"wp-element-caption\">If you want to use a custom app icon for your game, double click the &#8220;WindowsIconUpdater.exe&#8221; file to run the application and update the app icon for your Windows builds.<\/figcaption><\/figure>\n\n\n\n<p>We&#8217;ll now need to add a few more files to our exports so that the game works properly on Steam. But first, let&#8217;s create\/download them.<\/p>\n\n\n\n<p>Here&#8217;s a list of what we&#8217;ll need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#steam-appid-file\" data-type=\"internal\" data-id=\"#steam-appid-file\">A &#8220;steam_appid&#8221; text file containing our game&#8217;s Steam ID;<\/a><\/li>\n\n\n\n<li><a href=\"#steamworks-api-sdk-files\" data-type=\"internal\" data-id=\"#steamworks-api-sdk-files\">The Steamworks API SDK files for each platform;<\/a><\/li>\n\n\n\n<li><a href=\"#greenworks-prebuild-files\" data-type=\"internal\" data-id=\"#greenworks-prebuild-files\">Greenworks prebuild files compatible with the Steam API we will be using<\/a>;<\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"steam-appid-file\">Steam AppID file<\/h4>\n\n\n\n<p>You need to create an empty text file &#8211; meaning with a &#8220;.txt&#8221; extension &#8211; and add your game&#8217;s Steam ID number to it. This is how the Steam API can identify your game.<\/p>\n\n\n\n<p>If you don&#8217;t know your Steam game ID yet, here is a simple trick.<\/p>\n\n\n\n<p>Go to your game&#8217;s Steam Store page, copy and paste the game&#8217;s url and the game ID should be in the link path just before your game name.<\/p>\n\n\n\n<p>Here&#8217;s an example with my game <a href=\"https:\/\/store.steampowered.com\/app\/1271910\/Baby_Dino_Adventures\/\" data-type=\"link\" data-id=\"https:\/\/store.steampowered.com\/app\/1271910\/Baby_Dino_Adventures\/\">Baby Dino Adventures<\/a>:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"845\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-1.png?resize=979%2C845&#038;ssl=1\" alt=\"\" class=\"wp-image-176\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-1.png?w=979&amp;ssl=1 979w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-1.png?resize=300%2C259&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-1.png?resize=768%2C663&amp;ssl=1 768w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/figure>\n\n\n\n<p>My game Steam Store page url is: <strong>https:\/\/store.steampowered.com\/app\/1271910\/Baby_Dino_Adventures\/<\/strong><\/p>\n\n\n\n<p>My game ID is: <strong>1271910<\/strong>.<\/p>\n\n\n\n<p>Once you have the id of your game, create this new text file and fill it in only with the id number of your game.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"607\" height=\"482\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image.png?resize=607%2C482&#038;ssl=1\" alt=\"\" class=\"wp-image-175\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image.png?w=607&amp;ssl=1 607w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image.png?resize=300%2C238&amp;ssl=1 300w\" sizes=\"auto, (max-width: 607px) 100vw, 607px\" \/><figcaption class=\"wp-element-caption\">A steam_appid.txt text file containing our Steam game id.<\/figcaption><\/figure>\n\n\n\n<p>That&#8217;s all we need for our &#8220;steam_appid.txt&#8221; file. Keep it safe somewhere on your disk for now, we&#8217;ll need it later.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"steamworks-api-sdk-files\">Steamworks API SDK files<\/h4>\n\n\n\n<p id=\"debugging-greenworks-plugin\">For the Greenworks plugin events we&#8217;ve used in Construct to work, it&#8217;s imperative that we add the Steam API SDK files, otherwise nothing will work. Not even our &#8220;Steamworks is available&#8221; event we created earlier in the &#8220;<a href=\"#debugging-greenworks-plugin\" data-type=\"internal\" data-id=\"#debugging-greenworks-plugin\">Debugging Greenworks plugin<\/a>&#8221; section.<\/p>\n\n\n\n<p>The latest version of the Steam API compatible with NW.js 0.60.0 is <strong>version 1.50<\/strong>. <\/p>\n\n\n\n<p>You can find a list of all SDK releases on Steamworks website at following address: <a href=\"https:\/\/partner.steamgames.com\/downloads\/list\">https:\/\/partner.steamgames.com\/downloads\/list<\/a><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"714\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-3.png?resize=1024%2C714&#038;ssl=1\" alt=\"\" class=\"wp-image-179\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-3.png?resize=1024%2C714&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-3.png?resize=300%2C209&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-3.png?resize=768%2C536&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-3.png?w=1319&amp;ssl=1 1319w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">To access this page you will need to login using your Steam Partner account.<\/figcaption><\/figure>\n\n\n\n<p>Download the version 1.50 of the Steam SDK that has been released on Aug 29, 2020. Once downloaded, unzip the archive on your machine. We will need some of those files later.<\/p>\n\n\n\n<p>Here is an example of where the &#8220;package.nw&#8221; file is in my Windows 64 folder of my NW.js export:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"833\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-4.png?resize=1024%2C833&#038;ssl=1\" alt=\"\" class=\"wp-image-181\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-4.png?resize=1024%2C833&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-4.png?resize=300%2C244&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-4.png?resize=768%2C625&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-4.png?w=1161&amp;ssl=1 1161w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">The &#8220;package.nw&#8221; file is an archive containing all our game files.<br>It basically contains the HTML5 export of our game if you prefer.<\/figcaption><\/figure>\n\n\n\n<p>Make sure to copy and paste the <strong>sdkencryptedappticket<\/strong> and <strong>steam_api<\/strong> files to the according operating system folder otherwise it will not work.<\/p>\n\n\n\n<p>Here is an example of how the package.nw file for Windows 64 looks once I added the appticket and steam api files:<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"930\" height=\"761\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-5.png?resize=930%2C761&#038;ssl=1\" alt=\"\" class=\"wp-image-183\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-5.png?w=930&amp;ssl=1 930w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-5.png?resize=300%2C245&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-5.png?resize=768%2C628&amp;ssl=1 768w\" sizes=\"auto, (max-width: 930px) 100vw, 930px\" \/><figcaption class=\"wp-element-caption\">Notice that Windows requires additional .dll files for any .lib files.<br>Make sure to add them accordingly.<\/figcaption><\/figure>\n\n\n\n<p>For Linux builds, it is quite the same as Windows except that library files have an &#8220;.so&#8221; extension and that there is no need for additional &#8220;.dll&#8221; files.<\/p>\n\n\n\n<p>For Mac builds, the exported folder structure is a bit different. You&#8217;ll find the package named &#8220;app.nw&#8221; inside the following path: &#8220;..\/your-game-name.app\/Contents\/Resources\/&#8221;.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"927\" height=\"760\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-6.png?resize=927%2C760&#038;ssl=1\" alt=\"\" class=\"wp-image-187\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-6.png?w=927&amp;ssl=1 927w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-6.png?resize=300%2C246&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-6.png?resize=768%2C630&amp;ssl=1 768w\" sizes=\"auto, (max-width: 927px) 100vw, 927px\" \/><figcaption class=\"wp-element-caption\">Mac export folder structure is a bit different compared to Windows and Linux exports.<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"greenworks-prebuild-files\">Greenworks prebuild files<\/h4>\n\n\n\n<p>This is not an easy step. It&#8217;s often the one I&#8217;ve had the most trouble with. Because it&#8217;s not easy to find out which Greenworks version is compatible with which version of NW.js and which version of the Steam API.<\/p>\n\n\n\n<p>Fortunately, Armaldio, a member of the Construct community, has created an online tool called <a rel=\"noreferrer noopener\" href=\"https:\/\/greenworks-prebuilds.armaldio.xyz\/\" target=\"_blank\">Greenworks Prebuild Downloader<\/a> that will allow us to find the ideal prebuild files compatible with specific NW.js and Steam SDK version.<\/p>\n\n\n\n<p>Browse to Armaldio&#8217;s website: <a href=\"https:\/\/greenworks-prebuilds.armaldio.xyz\/\" target=\"_blank\" rel=\"noreferrer noopener\">greenworks-prebuilds.armaldio.xyz\/<\/a><\/p>\n\n\n\n<p>We&#8217;re going to use the left sidebar filters to tell the tool the exact prebuild files we need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Release Tag: <strong>v0.7.0 &#8211; Steamworks v1.5.0<\/strong>;<\/li>\n\n\n\n<li>OS: any you want;<\/li>\n\n\n\n<li>Architecture: any you want;<\/li>\n\n\n\n<li>Runtime: <strong>NW.js<\/strong>;<\/li>\n\n\n\n<li>Versions: <strong>v102<\/strong>;<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1900\" height=\"920\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?resize=1900%2C920&#038;ssl=1\" alt=\"\" class=\"wp-image-200\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?w=1900&amp;ssl=1 1900w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?resize=300%2C145&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?resize=1024%2C496&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?resize=768%2C372&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/greenworks-prebuild-options_cropped-1.png?resize=1536%2C744&amp;ssl=1 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">It&#8217;s important to select the ABI version that includes the version of NW.js we used, i.e. 0.60.0. Look at the &#8220;Version range&#8221; column which states &#8220;from 0.59.0 to 0.64.0&#8221;.<\/figcaption><\/figure>\n\n\n\n<p>Once you&#8217;ve set the right parameters, click on the download icon on the right-hand side of the screen for each operating system you want. Notice that there are different files for 32-bit and 64-bit exports too.<\/p>\n\n\n\n<p>Once we downloaded all required prebuilds files, we can go on the next step: preparing our packages.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"preparing-packages\">Preparing packages<\/h3>\n\n\n\n<p>Now that we&#8217;ve our &#8220;steam_appid.txt&#8221; file and downloaded the missing library files, we can start preparing the packages for each operating system we need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"#windows-package\" data-type=\"internal\" data-id=\"#windows-package\">Windows package<\/a><\/li>\n\n\n\n<li><a href=\"#linux-package\" data-type=\"internal\" data-id=\"#linux-package\">Linux package<\/a><\/li>\n\n\n\n<li><a href=\"#macos-package\" data-type=\"internal\" data-id=\"#macos-package\">macOS package<\/a><\/li>\n<\/ul>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"windows-package\">Windows package<\/h4>\n\n\n\n<p>Go to your Windows export folder.<\/p>\n\n\n\n<p>Copy and paste your &#8220;steam_appid.txt&#8221; file into the root of your Windows folder.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1164\" height=\"947\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-7.png?resize=1164%2C947&#038;ssl=1\" alt=\"\" class=\"wp-image-202\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-7.png?w=1164&amp;ssl=1 1164w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-7.png?resize=300%2C244&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-7.png?resize=1024%2C833&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-7.png?resize=768%2C625&amp;ssl=1 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">See &#8220;steam_appid&#8221; text file is selected and inside our &#8220;win64&#8221; folder for Windows 64 bit.<\/figcaption><\/figure>\n\n\n\n<p>Now, we need to open the &#8220;package.nw&#8221; file. It is basically an archive file containing the HTML5 export of our game.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1167\" height=\"951\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-8.png?resize=1167%2C951&#038;ssl=1\" alt=\"\" class=\"wp-image-204\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-8.png?w=1167&amp;ssl=1 1167w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-8.png?resize=300%2C244&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-8.png?resize=1024%2C834&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-8.png?resize=768%2C626&amp;ssl=1 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">See &#8220;package&#8221; file is selected. It is an archive file, but with .NW extension.<\/figcaption><\/figure>\n\n\n\n<p>We&#8217;ll add two different files to that &#8220;package.nw&#8221; archive from the Steam SDK library files we downloaded previously.<\/p>\n\n\n\n<p>First, we need to get the <strong>sdkencryptedappticket<\/strong> file.<br>We can find it in the following path: &#8220;<em>..\/steamworks_sdk_150\/sdk\/public\/steam\/lib<\/em>\/win64\/..&#8221;.<\/p>\n\n\n\n<p>Second, we need the <strong>steam_api<\/strong> file.<br>We can find it in the following path: &#8220;<em>..\/steamworks_sdk_150\/sdk\/redistributable_bin\/win64\/..<\/em>&#8220;.<\/p>\n\n\n\n<p>We copy those files and paste them into the &#8220;package.nw&#8221; archive.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1919\" height=\"1029\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?resize=1919%2C1029&#038;ssl=1\" alt=\"\" class=\"wp-image-205\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?w=1919&amp;ssl=1 1919w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?resize=300%2C161&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?resize=1024%2C549&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?resize=768%2C412&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/Screenshot-2023-11-06-142046.png?resize=1536%2C824&amp;ssl=1 1536w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Notice that Windows requires additional .dll files for any .lib files.<br>Make sure to add them accordingly.<\/figcaption><\/figure>\n\n\n\n<p>Now we need to make sure that greenworks files in the &#8220;package.nw&#8221; archive are the right ones &#8211; meaning these we previously downloaded.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"949\" height=\"568\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-9.png?resize=949%2C568&#038;ssl=1\" alt=\"\" class=\"wp-image-208\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-9.png?w=949&amp;ssl=1 949w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-9.png?resize=300%2C180&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-9.png?resize=768%2C460&amp;ssl=1 768w\" sizes=\"auto, (max-width: 949px) 100vw, 949px\" \/><figcaption class=\"wp-element-caption\">One greenworks prebuild file for each operating system and its 32 bit or 64 bit version downloaded from Armaldio&#8217;s online tool: <a href=\"https:\/\/greenworks-prebuilds.armaldio.xyz\/\" data-type=\"link\" data-id=\"https:\/\/greenworks-prebuilds.armaldio.xyz\/\">Greenworks Prebuild Downloader<\/a>.<\/figcaption><\/figure>\n\n\n\n<p>Notice how those files are named differently from the ones already available in our &#8220;package.nw&#8221; archive. We will need to rename them accordingly to match files name in our existing archive, likeso:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>greenworks-linux32.node<\/li>\n\n\n\n<li>greenworks-linux64.node<\/li>\n\n\n\n<li>greenworks-osx64.node<\/li>\n\n\n\n<li>greenworks-win32.node<\/li>\n\n\n\n<li>greenworks-win64.node<\/li>\n<\/ul>\n\n\n\n<p>Once renamed, drag-and-drop these files into our &#8220;package.nw&#8221; archive file.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"922\" height=\"754\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-10.png?resize=922%2C754&#038;ssl=1\" alt=\"\" class=\"wp-image-209\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-10.png?w=922&amp;ssl=1 922w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-10.png?resize=300%2C245&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-10.png?resize=768%2C628&amp;ssl=1 768w\" sizes=\"auto, (max-width: 922px) 100vw, 922px\" \/><\/figure>\n\n\n\n<p>We are now good to go. At least for the Windows 64 build. <\/p>\n\n\n\n<p>If we want to support Windows 32 bit computers, we will need to do the exact same steps as before but with Steam SDK files for Windows 32 bit version.<\/p>\n\n\n\n<p>To finalize, we can create a .zip archive of our &#8220;win64&#8221; folder. We will upload this archive as our Windows build in our Steam Partners platform later. <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-13.png?resize=1024%2C560&#038;ssl=1\" alt=\"\" class=\"wp-image-213\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-13.png?resize=1024%2C560&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-13.png?resize=300%2C164&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-13.png?resize=768%2C420&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-13.png?w=1394&amp;ssl=1 1394w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Since I want to support Windows 32 bit version, I archived both folders (&#8220;win64&#8221; and &#8220;win32&#8221; folders) into one archive that I will use as my Windows build on Steam Partners website.<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"linux-package\">Linux package<\/h4>\n\n\n\n<p>For the Linux package, it is exactly the same as for the Windows build.<\/p>\n\n\n\n<p>We upload our &#8220;steam_appid.txt&#8221; file to the root of our linux folder.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1022\" height=\"686\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-11.png?resize=1022%2C686&#038;ssl=1\" alt=\"\" class=\"wp-image-211\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-11.png?w=1022&amp;ssl=1 1022w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-11.png?resize=300%2C201&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-11.png?resize=768%2C516&amp;ssl=1 768w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">The Linux 64 bit folder of our NW.js export with its &#8220;steam_appid.txt&#8221; file.<\/figcaption><\/figure>\n\n\n\n<p>Then we add Steam SDK library files and Greenworks prebuild files to the related &#8220;package.nw&#8221; archive file.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-12.png?resize=1024%2C512&#038;ssl=1\" alt=\"\" class=\"wp-image-212\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-12.png?resize=1024%2C512&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-12.png?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-12.png?resize=768%2C384&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-12.png?w=1513&amp;ssl=1 1513w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">The Linux 64 bit package.nw archive with updated greenworks prebuild files and Steam SDK&#8217;s library files for Linux 64 bit.<\/figcaption><\/figure>\n\n\n\n<p>We are done with Linux builds. We can create a .zip archive of our Linux folders. We will upload this archive as our Linux build in our Steam Partners platform later.<\/p>\n\n\n\n<p>If we want to support Linux 32 bit version, we do exactly the same steps as before but with Steam SDK libraries for Linux 32 bit. Then we include the &#8220;linux32&#8221; folder into our Linux build archive.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"511\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-14.png?resize=1024%2C511&#038;ssl=1\" alt=\"\" class=\"wp-image-216\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-14.png?resize=1024%2C511&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-14.png?resize=300%2C150&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-14.png?resize=768%2C383&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-14.png?w=1514&amp;ssl=1 1514w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Our Linux build containing both Linux 32 bit and Linux 64 bit versions.<\/figcaption><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"macos-package\">macOS package<\/h4>\n\n\n\n<p>For the macOS package, we will do exactly the same steps as we did for Windows and Linux. The only difference is the folder structure.<\/p>\n\n\n\n<p>We will need to copy and paste our &#8220;steam_appid.txt&#8221; on the &#8220;Resources&#8221; folder that can be found on the following path: &#8220;..\/mac64\/yourgamename.app\/Contents\/Resources\/..&#8221;<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"708\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-15.png?resize=1024%2C708&#038;ssl=1\" alt=\"\" class=\"wp-image-217\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-15.png?resize=1024%2C708&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-15.png?resize=300%2C207&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-15.png?resize=768%2C531&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-15.png?w=1102&amp;ssl=1 1102w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">macOS builds have a different file structure than Windows and Linux builds. We need to add our files in the &#8220;Resources&#8221; folder.<\/figcaption><\/figure>\n\n\n\n<p>Notice the &#8220;app.nw&#8221; file in the &#8220;Resources&#8221; folder. That&#8217;s the &#8220;package.nw&#8221; archive file, but with a different name for macOS.<\/p>\n\n\n\n<p>Copy appropriate Steam SDK files (from the &#8220;osx&#8221; folder) and paste them into the &#8220;app.nw&#8221; archive.<\/p>\n\n\n\n<p>Do the same for Greenworks prebuild files.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"553\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-16.png?resize=1024%2C553&#038;ssl=1\" alt=\"\" class=\"wp-image-218\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-16.png?resize=1024%2C553&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-16.png?resize=300%2C162&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-16.png?resize=768%2C415&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-16.png?w=1409&amp;ssl=1 1409w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">Our macOS build archive containing updated greenworks prebuild and Steam SDK library files.<\/figcaption><\/figure>\n\n\n\n<p>If you&#8217;re wondering, Apple dropped support for 32 bit versions so that&#8217;s why there is no 32 bit export of our game.<\/p>\n\n\n\n<p>Once we&#8217;re done, we can create an archive file of our &#8220;mac64&#8221; folder. This archive will be used to upload a macOS build of our game via Steam Partners website in the next step.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"uploading-packages-on-Steam\">Uploading packages on Steam<\/h3>\n\n\n\n<p>All our packages are now ready.<\/p>\n\n\n\n<p>We created an archive .zip file for every operating system we want to support.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"705\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-17.png?resize=1024%2C705&#038;ssl=1\" alt=\"\" class=\"wp-image-225\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-17.png?resize=1024%2C705&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-17.png?resize=300%2C206&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-17.png?resize=768%2C529&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/11\/image-17.png?w=1100&amp;ssl=1 1100w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">See highlighted files. These are our OS-related archives. One for Linux, one for macOS, and one for Windows.<\/figcaption><\/figure>\n\n\n\n<p>Unfortunately, <strong>I can&#8217;t share screenshots of my Steam Partners interface publicly due to the non-disclosure agreement<\/strong> signed with Valve. <\/p>\n\n\n\n<p>For this reason, I will try to share as much details as possible but without screenshots and I&#8217;m going to assume that you have a minimum of knowledge as a Steam developer.<\/p>\n\n\n\n<p>We will need to go to the &#8220;AppAdmin &gt; SteamPipe&#8221; section of the Steamworks site to upload our packages to related depots our game may have.<\/p>\n\n\n\n<p>Before uploading our game packages, we will have to <strong>create these depots first<\/strong>. These can be seen as folders where we will upload our game files. As example, for my game, I used 3 different depots that I named per platform like so:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows;<\/li>\n\n\n\n<li>macOS;<\/li>\n\n\n\n<li>Linux;<\/li>\n<\/ul>\n\n\n\n<p>You probably got it. We will upload each of our packages to the related operating system depots.<\/p>\n\n\n\n<p>Once we created depots, we will need to <strong>define launch options<\/strong> so that the Steam client knows what to do when a player will click on the Play button of our game&#8217;s Steam client page.<\/p>\n\n\n\n<p>To define launch options, we go to &#8220;App Admin &gt; General installation&#8221;. Under &#8220;Install folder&#8221;, we set the current install folder name to our game name.<\/p>\n\n\n\n<p>Under &#8220;Launch options&#8221;, the section below, we will create one launch option for each operating system and each architecture we want.<\/p>\n\n\n\n<p>Let&#8217;s say we want to target all the following:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows 32-bit;<\/li>\n\n\n\n<li>Windows 64-bit;<\/li>\n\n\n\n<li>Linux 32-bit;<\/li>\n\n\n\n<li>Linux 64-bit;<\/li>\n\n\n\n<li>macOS;<\/li>\n<\/ul>\n\n\n\n<p>Then we will create 6 different launch options. One for each OS with specific rules. We will set the path of the executable, the targeted operating system, and the CPU Architecture.<\/p>\n\n\n\n<p>Here are the configuration we are going to use for each launch option:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Windows 32-bit\n<ul class=\"wp-block-list\">\n<li>Executable: win32\/BabyDinoAdventures.exe<\/li>\n\n\n\n<li>Description: English<\/li>\n\n\n\n<li>Operating System: Windows<\/li>\n\n\n\n<li>CPU Architecture: 32-bit only<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Windows 64-bit\n<ul class=\"wp-block-list\">\n<li>Executable: win64\/BabyDinoAdventures.exe<\/li>\n\n\n\n<li>Description: English<\/li>\n\n\n\n<li>Operating System: Windows<\/li>\n\n\n\n<li>CPU Architecture: 64-bit only<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Linux 32-bit:\n<ul class=\"wp-block-list\">\n<li>Executable: linux32\/BabyDinoAdventures<\/li>\n\n\n\n<li>Description: English <\/li>\n\n\n\n<li>Operating System: Linux + SteamOS<\/li>\n\n\n\n<li>CPU Architecture: 32-bit only<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Linux 64-bit:\n<ul class=\"wp-block-list\">\n<li>Executable: linux64\/BabyDinoAdventures<\/li>\n\n\n\n<li>Description: English<\/li>\n\n\n\n<li>Operating System: Linux + SteamOS<\/li>\n\n\n\n<li>CPU Architecture: 64-bit only<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>macOS:\n<ul class=\"wp-block-list\">\n<li>Executable: mac64\/BabyDinoAdventures.app<\/li>\n\n\n\n<li>Description: English<\/li>\n\n\n\n<li>Operating System: macOS<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>Once we are done setting launch options and the installation folder, we can go back to the &#8220;Builds&#8221; section under &#8220;SteamPipe&#8221; and upload our packages according to related depots.<\/p>\n\n\n\n<p>Once it is done, we publish our changes and we can go the next step: testing.<\/p>\n\n\n\n<p>Note: <em>before sending this to production, I&#8217;d advise you to publish your new packages in a beta branch first, to make sure everything works as you&#8217;d like.<\/em><\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"testing-on-steam\">Testing on Steam<\/h3>\n\n\n\n<p>If we&#8217;ve followed the previous steps correctly, then there&#8217;s not much to test other than that the Greenworks plugin is working properly.<\/p>\n\n\n\n<p>To do this, remember we&#8217;ve created a simple text that will tell us whether Greenworks is initialized or not in the &#8220;<a href=\"#debugging-greenworks-plugin\" data-type=\"internal\" data-id=\"#debugging-greenworks-plugin\">Debugging Greenworks plugin<\/a>&#8221; step of this tutorial.<\/p>\n\n\n\n<p>Go ahead and run your Steam application on your computer. <br>Log in to your Steam account if you haven&#8217;t already done so, then go to your game&#8217;s page and launch it by clicking on the big green &#8220;Play&#8221; button.<\/p>\n\n\n\n<p>The game should start within a few seconds, as expected.<\/p>\n\n\n\n<p>If it doesn&#8217;t, the game is either crashing or loading endlessly. <br>In this case, there&#8217;s probably a problem with the NW.js versions, or the library files aren&#8217;t the right ones. Go back to the previous steps, and make sure you&#8217;re using the right versions.<\/p>\n\n\n\n<p>If it works, then press the &#8220;G&#8221; keyboard key to toggle the debug text. If the Greenworks plugin works, then you should see the text &#8220;Greenworks is available&#8221; on your screen.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?resize=1024%2C576&#038;ssl=1\" alt=\"\" class=\"wp-image-259\" srcset=\"https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?resize=1024%2C576&amp;ssl=1 1024w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?resize=300%2C169&amp;ssl=1 300w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?resize=768%2C432&amp;ssl=1 768w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?resize=1536%2C864&amp;ssl=1 1536w, https:\/\/i0.wp.com\/www.sleepingpanda.games\/blog\/wp-content\/uploads\/2023\/12\/Screenshot-from-2023-12-08-22-49-01.png?w=1600&amp;ssl=1 1600w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption class=\"wp-element-caption\">An example of how I show the text &#8220;Greenworks is available&#8221; in my game &#8220;Baby Dino Adventures&#8221;. Debug text is visible on the top left of the screen.<\/figcaption><\/figure>\n\n\n\n<p>Greenworks is available so this means that the Greenworks plugin is working and that all our Greenworks events should work. Make sure you test them thoroughly to make sure your events are working properly.<\/p>\n\n\n\n<p>And don&#8217;t forget that Steam achievements can only be activated once. So if you&#8217;ve already unlocked an achievement, it won&#8217;t show up again. In this case, you could, for example, create a simple debugging text saying that the success is unlocked according to the desired action. I use this often, and it is very handy. Because you know.. It can happen even to the best of us.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"testing-on-steam-deck\">Testing on Steam Deck<\/h3>\n\n\n\n<p>(coming soon)<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"conclusion\">Conclusion<\/h3>\n\n\n\n<p>It took a while to get there, right?<\/p>\n\n\n\n<p>Well, it took me a long time to figure out how to do all this and, above all, where the problems were coming from.<\/p>\n\n\n\n<p>If this article exists today, it&#8217;s certainly not only thanks to me. Indeed, <strong>one of Construct 3&#8217;s strengths is its community<\/strong>. And I&#8217;d particularly like to thank <strong>Mikal <\/strong>and <strong>Armaldio<\/strong> for their invaluable help, as well as all the other people I&#8217;ve chatted with over the years on <a href=\"https:\/\/discord.gg\/construct-community-116497549237551109\" data-type=\"link\" data-id=\"https:\/\/discord.gg\/construct-community-116497549237551109\">Construct&#8217;s Discord server<\/a>.<\/p>\n\n\n\n<p>I hope this tutorial helps you. If you encounter any difficulties, have any questions or even suggestions, please don&#8217;t hesitate to leave a comment below or <a href=\"mailto:wakeup(at)sleepingpanda.games\" data-type=\"mailto\" data-id=\"mailto:wakeup(at)sleepingpanda.games\">contact me by e-mail<\/a> or via my social networks:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/bsky.app\/profile\/sleepingpanda.bsky.social\" data-type=\"link\" data-id=\"https:\/\/bsky.app\/profile\/sleepingpanda.bsky.social\">Bluesky<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/instagram.com\/_sleepingpandagames\" data-type=\"link\" data-id=\"https:\/\/instagram.com\/_sleepingpandagames\">Instagram<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/mastodon.gamedev.place\/@sleepingpanda\" data-type=\"link\" data-id=\"https:\/\/mastodon.gamedev.place\/@sleepingpanda\">Mastodon<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/www.tiktok.com\/@sleepingpandagames\" data-type=\"link\" data-id=\"https:\/\/www.tiktok.com\/@sleepingpandagames\">Tik Tok<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/twitter.com\/__sleepingpanda\" data-type=\"link\" data-id=\"https:\/\/twitter.com\/__sleepingpanda\">Twitter<\/a><\/li>\n<\/ul>\n\n\n\n<p>See you soon,<br>Antoine<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Before you start reading, you should know that this post was written from notes I took while releasing updates for my first commercial game on Steam &#8211; which is still in early access as I write this. If you&#8217;d prefer a video tutorial, take a look at AJ Ordaz&#8216;s YouTube video: How to add Steam [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[3],"tags":[4,7,5,6],"class_list":["post-18","post","type-post","status-publish","format-standard","hentry","category-construct-3","tag-construct3","tag-nwjs","tag-steam","tag-steamdeck"],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/posts\/18","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/comments?post=18"}],"version-history":[{"count":66,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions"}],"predecessor-version":[{"id":275,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/posts\/18\/revisions\/275"}],"wp:attachment":[{"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/media?parent=18"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/categories?post=18"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.sleepingpanda.games\/blog\/wp-json\/wp\/v2\/tags?post=18"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}