Guide:Ren'Py visual novels on Steam: Difference between revisions

From VNDev Wiki
more of the text, still v much under construction
m oops
 
(7 intermediate revisions by the same user not shown)
Line 1: Line 1:
{{guide|[https://bobcgames.com Bob Conway]|contrib=no}}
{{guide|[https://bobcgames.com Bob Conway]|contrib=no}}
Ren’Py Visual Novels on Steam: A Step-by-Step Guide<br>
Ren’Py Visual Novels on Steam: A Step-by-Step Guide<br>
By Bob Conway ([https://bobcgames.com])<br>
By Bob Conway ([https://bobcgames.com https://bobcgames.com])<br>
With thanks to BaiYu / Project Ensō ([https://twitter.com/projectenso_])<br>
With thanks to BaiYu / Project Ensō ([https://projectenso.games/ https://projectenso.games/])<br>
Ported to VNDev Wiki by [[User:Ironnori|Ironnori]]<br>
Created: August 11, 2021<br>
Created: August 11, 2021<br>
Last Updated: March 26, 2024 (see [[#Document Changelog|Document Changelog]])<br>
Last Updated: March 26, 2024 (see [[#Document Changelog|Document Changelog]])<br>
Line 14: Line 15:


This is a long document. You can either follow all of the steps roughly in order, or use this table of contents to jump directly to a section.
This is a long document. You can either follow all of the steps roughly in order, or use this table of contents to jump directly to a section.
==Table of Contents==
===Create the Steam App===
{{main|1=Guide:Ren%27Py_visual_novels_on_Steam/App}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/App#Create the App|Create the App]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/App#Some Terminology|Some Terminology]]
===Create Your Store Page===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Store_page}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Viewing Your Store Page|Viewing Your Store Page]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Configure Basic Info|Configure Basic Info]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Search Keywords|Search Keywords]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Supported Platforms|Supported Platforms]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Release Dates|Release Dates]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Adult Content|Adult Content]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Supported Features|Supported Features]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Tags|Tags]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Description|Description]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Mature Content Settings|Mature Content Settings]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Self-Rating Questionnaire|Self-Rating Questionnaire]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Planned Release Date|Planned Release Date]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#System Requirements|System Requirements]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#5 or More Screenshots|5 or More Screenshots]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Add a Trailer|Add a Trailer]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Capsule Images|Capsule Images]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Library Images|Library Images]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Community Images|Community Images]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Client Icon|Client Icon]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Common Reviewer Complaints|Common Reviewer Complaints]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Submit Your Page For Approval|Submit Your Page For Approval]]
===Upload Your Game to Steam===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Upload}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Removing 32-Bit Support for Windows (Optional)|Removing 32-Bit Support for Windows (Optional)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Setting up Archiving For Your Game (Optional)|Setting up Archiving For Your Game (Optional)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Installing Steam Libraries in Ren’Py|Installing Steam Libraries in Ren’Py]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Setting the Steam App Id (Optional)|Setting the Steam App Id (Optional)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Making the Steam Build in Ren’Py|Making the Steam Build in Ren’Py]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Uploading the Game to Steam|Uploading the Game to Steam]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Build Configuration|Build Configuration]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Debugging Build Configurations|Debugging Build Configurations]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Fixing a Bad Upload (via Web UIs)|Fixing a Bad Upload (via Web UIs)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Fixing a Bad Upload (via SteamPipe)|Fixing a Bad Upload (via SteamPipe)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#I Ran My Game Before Re-Zipping and Uploading|I Ran My Game Before Re-Zipping and Uploading]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Upload a Fixed Build|Upload a Fixed Build]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Reset All Game Progress|Reset All Game Progress]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Configuring Steam Cloud Saves|Configuring Steam Cloud Saves]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Setting a Price|Setting a Price]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Setting Supported Operating Systems|Setting Supported Operating Systems]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Submit Your Game For Approval|Submit Your Game For Approval]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Provide Save Files to Steam Support|Provide Save Files to Steam Support]]
===Add Achievements===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Achievements}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Create the Images|Create the Images]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Define the Achievement in Steam|Define the Achievement in Steam]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Unlock the Achievement in Your Game (in Ren’Py)|Unlock the Achievement in Your Game (in Ren’Py)]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Register Your Achievement in an Init Block]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Grant Your Achievement During Gameplay|Grant Your Achievement During Gameplay]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Display Achievements to Users (Optional)|Display Achievements to Users (Optional)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Achievement Stats|Achievement Stats]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Register Your Stat in Steam|Register Your Stat in Steam]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Add Your Stat in Your Game (Ren’Py)|Add Your Stat in Your Game (Ren’Py)]]
===Test Your Game===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Testing}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#Before Release|Before Release]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#Publishing the Build|Publishing the Build]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#For Yourself|For Yourself]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#With Others|With Others]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#Reminder: Ren’Py Automatically Shares Save Data on a Computer|Reminder: Ren’Py Automatically Shares Save Data on a Computer]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Testing#After Release|After Release]]
===Add a Demo===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Demo}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Making the Steam Build in Ren'Py|Making the Steam Build in Ren'Py]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Create the Demo in Steam|Create the Demo in Steam]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Create the Store Page|Create the Store Page]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Upload Your Demo to Steam|Upload Your Demo to Steam]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Test Your Demo|Test Your Demo]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/Demo#Release Your Demo|Release Your Demo]]
===Create DLC===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/DLC}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Soundtracks|Soundtracks]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Assemble the Files|Assemble the Files]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Create the Store Page|Create the Store Page]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Upload the Files to Steam|Upload the Files to Steam]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Submit Your Soundtrack For Approval|Submit Your Soundtrack For Approval]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Other Types of DLC|Other Types of DLC]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Artbooks or Other Supplemental DLC|Artbooks or Other Supplemental DLC]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Additional Game Content DLC|Additional Game Content DLC]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Create the DLC in Steam|Create the DLC in Steam]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Create the Store Page|Create the Store Page]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Upload the Files to Steam|Upload the Files to Steam]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/DLC#Submit Your DLC For Approval|Submit Your DLC For Approval]]
===Create a Bundle===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/Bundle}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/Bundle#Create A New Bundle|Create A New Bundle]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Bundle#Add the Bundle Items to the Bundle|Add the Bundle Items to the Bundle]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Bundle#Create the Store Page|Create the Store Page]]
**[[Guide:Ren%27Py_visual_novels_on_Steam/Bundle#Publish Changes and Release the Bundle|Publish Changes and Release the Bundle]]
===Create an Externally-Distributed Nudity Patch===
{{main|Guide:Ren%27Py_visual_novels_on_Steam/External_patch}}
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#One Define to Rule Them All|One Define to Rule Them All]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Handle All Images|Handle All Images]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Handle All Text|Handle All Text]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Handle Patch Versioning (Optional)|Handle Patch Versioning (Optional)]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Make The Clean Build|Make The Clean Build]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Make a Lewd Project|Make a Lewd Project]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Make the Nudity Patch|Make the Nudity Patch]]
*[[Guide:Ren%27Py_visual_novels_on_Steam/External_patch#Test The Patch|Test The Patch]]


==TL;DR==
==TL;DR==
Line 19: Line 126:


You must create the following assets for the Steam store page, community, and client:
You must create the following assets for the Steam store page, community, and client:
*Five game screenshot images (hit the “s” key while playing to easily generate these) ([[#5 or More Screenshots|details]])
*Five game screenshot images (hit the “s” key while playing to easily generate these) ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#5 or More Screenshots|details]])
*One game trailer video ([[#Add a Trailer|details]])
*One game trailer video ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Add a Trailer|details]])
*Four capsule images for the store ([[#Capsule Images|details]])
*Four capsule images for the store ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Capsule Images|details]])
**A 460x215px header image, which will appear at the top of your store page and in other store views
**A 460x215px header image, which will appear at the top of your store page and in other store views
**A 231x87px small image, which will appear in search results and recommendations
**A 231x87px small image, which will appear in search results and recommendations
**A 616x353px main image that appears on the front page (and will probably never get used unless you are popular)
**A 616x353px main image that appears on the front page (and will probably never get used unless you are popular)
**A 374x448px tall image that will also be used in the store
**A 374x448px tall image that will also be used in the store
*Three images for players’ game libraries ([[#Library Images|details]])
*Three images for players’ game libraries ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Library Images|details]])
**A 600x900px capsule image to represent your game in the large library view
**A 600x900px capsule image to represent your game in the large library view
**A 3840x1240px header image to display (and scale) at the top of the game page in the library
**A 3840x1240px header image to display (and scale) at the top of the game page in the library
**A 1280x720px logo image to overlay on top of the header image above
**A 1280x720px logo image to overlay on top of the header image above
*An image for the Steam community ([[#Community Images|details]])
*An image for the Steam community ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Community Images|details]])
**A 184x69px capsule image for wishlists
**A 184x69px capsule image for wishlists
*An icon for the client distributable ([[#Client Icon|details]])
*An icon for the client distributable ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Client Icon|details]])
**A 32x32px ico file, which can automatically generate the TGA and community image
**A 32x32px ico file, which can automatically generate the TGA and community image


You must create the following game build ZIP to upload:
You must create the following game build ZIP to upload:
*A “markets” game build created with a Steam-library-enabled Ren’Py ([[#Setting up Archiving For Your Game (Optional)|details]])
*A “markets” game build created with a Steam-library-enabled Ren’Py ([[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Setting up Archiving For Your Game (Optional)|details]])


You may optionally create the following assets for the Steam store page:
You may optionally create the following assets for the Steam store page:
*A trailer screenshot image (as a loading placeholder for the trailer video) ([[#Add a Trailer|details]])
*A trailer screenshot image (as a loading placeholder for the trailer video) ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Add a Trailer|details]])
*A 1438x810px background image that will appear on your game page  ([[#Capsule Images|details]])
*A 1438x810px background image that will appear on your game page  ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Capsule Images|details]])


You may optionally create the following asset for the Steam community
You may optionally create the following asset for the Steam community
*A 32x32px JPG for the community icon (which can be automatically generated from your ico file above) ([[#Community Images|details]])
*A 32x32px JPG for the community icon (which can be automatically generated from your ico file above) ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Community Images|details]])


You may optionally create the following asset for the client
You may optionally create the following asset for the client
*A 16x16px TGA for the client icon (which can be automatically generated from your ico file above) ([[#Client Icon|details]])
*A 16x16px TGA for the client icon (which can be automatically generated from your ico file above) ([[Guide:Ren%27Py_visual_novels_on_Steam/Store_page#Client Icon|details]])


You may optionally create the following assets for achievements:
You may optionally create the following assets for achievements:
*Two 256x256px JPG images for each achievement, representing the locked and unlocked states ([[#Create the Images|details]])
*Two 256x256px JPG images for each achievement, representing the locked and unlocked states ([[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Create the Images|details]])


For more step-by-step guidance, read on.
For more step-by-step guidance, read on.
Line 55: Line 162:
(The above steps do not all apply for additive content such as a demo, DLC, a soundtrack, or bundles. Reference the appropriate sections for details.)
(The above steps do not all apply for additive content such as a demo, DLC, a soundtrack, or bundles. Reference the appropriate sections for details.)


==Create the Steam App==
==Document Changelog==
===Create the App===
*August 11, 2021 - Document first published
After purchasing an app credit and logging in to your dashboard (https://partner.steamgames.com/dashboard), you will see the “Create new app…” button. Click it.
*August 26, 2021 - Added info on [[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Fixing a Bad Upload (via Web UIs)|Fixing a Bad Upload]] (with thanks to Thugzilla)
 
*February 13, 2022 - Fixed some info on [[Guide:Ren%27Py_visual_novels_on_Steam/Achievements#Achievement Stats|Achievement Stats]]
 
*March 27, 2022 - Added this changelog section, added [[Guide:Ren%27Py_visual_novels_on_Steam/Upload#I Ran My Game Before Re-Zipping and Uploading|I Ran My Game Before Re-Zipping and Uploading]], added [[Guide:Ren%27Py_visual_novels_on_Steam/External_patch|Create an Externally-Distributed Nudity Patch]]
Select “Game”, and check “This is a free product” if your game will not be for sale.
*July 20, 2022 - Added additional SteamPipe and Ren’Py 8 references
Note: Even with a paid game, you can provide a free demo. Do not check “This is a free product” if you intend to offer your game for purchase with a free demo.
*October 7, 2023 - Added link to Bob's [https://bobcgames.itch.io/bobcachievements Ren'Py Achievements Framework], SuperBiasedGary confirmed that stat achievements work
 
*March 26, 2024 - Added details about save file sharing in [[Guide:Ren%27Py_visual_novels_on_Steam/Upload#Provide Save Files to Steam Support|Provide Save Files to Steam Support]], with thanks to Cyan
 
Steam will create the app, and it will show up on your dashboard
 
 
The next two steps (creating your store page and uploading your game) can happen simultaneously. However, remember that you will not be able to actually release your game until two weeks after the store page has gone live, or 30 days after you purchased your first app credit, so it is generally a good idea to tackle your store page first.
 
Note: It may be in your interest to put up your store page significantly before your game launches. See this thread for details. In such a case, prioritize the Create Your Store Page steps and get the page launched as soon as possible while you continue working on your game.
 
===Some Terminology===
You will see the following terms used in Steamworks. It’s not necessary to have a deep understanding of them, especially if you’re just following the steps below, but it’s still useful to understand how things fit together.
 
At the top level is your Application (or App). This is the topmost representation of your game, and will contain all of the store page configurations within it, in addition to multiple Packages. The App has a dashboard that links to all other sections and has a checklist of steps required to release the store page and the game build. An App can also have sub-Apps (Demo, DLC, Soundtrack, etc)... you can view associated child Apps via the dashboard > View Associated Items > All Associated Packages, DLC, Demos and Tools.
 
An App contains multiple Packages. By default, an App contains three Packages: The default package you’ll sell, a Beta Testing Package (for which you can generate keys and have other players test the game before its release), and a Developer Comp Package (the one you install and run before the game is released). A Package contains one or more Depots. A Package is also the unit that you actually sell in Steam, so pricing is attached to Packages. You can view all Packages for an App via the dashboard > View Associated Items > All Associated Packages, DLC, Demos and Tools.
 
A Depot is a named collection of files, which you can roughly think of as a folder on your computer. Every App has a “default” Depot, and you can create multiple Depots and share them across apps by adding them to Packages. For simplicity, we’ll only be using the default Depot created for each App (and not messing around with Packages unless necessary), but you can do more complicated things to share assets (music, sprites, etc) across different Applications by creating shared Depots. Your primary encounter with other Depots is likely to come if you create DLC, since by default, DLCs are modeled as additional Depots under the base Application.
 
A Build is a particular upload of files to one or more Depots. Think of it as a copy of the folders at a point in time. You can upload new files into a Depot, which results in a new Build from that Depot.
 
A Branch is a named representation of one or more Depots’ state, allowing you to have different “current” versions of a Depot. Think of a Branch as a name indicating which copy of the (Depot) folder you’re currently using. There’s always a “default” Branch available, and you don’t have to create additional ones unless you want to make changes After Release without affecting the live public version.
 
==Create Your Store Page==
Steam offers a helpful checklist, but the process can still be intimidating, as there are a lot of steps and a lot of different graphical resources required.
 
First, head to your dashboard (https://partner.steamgames.com/dashboard) and click on your game. You’ll see a screen like this:
 
 
Scroll down to see a helpful checklist of all the steps required to create your store page.
 
 
Each step of this checklist is described in further detail below.
 
===Viewing Your Store Page===
While you’re working on your store page, you can view any pending changes in the beta mode, via the link in the warning banner.
 
 
Or click the “View in Beta mode” link on the main page for your app.
 
 
Note that, once your store page is live, after making any other changes, you will have to Publish those changes so they show up in the store. In this manner, you will be able to make changes to a live page without affecting the actual live page until you’re ready. As the text suggests, you’ll use the Publish tab to do this after your game is live.
 
 
===Configure Basic Info===
Either click the “Basic Info and Description” link in the checklist, or navigate to Store Presence > Edit Store Page > Basic Info tab (and then the Description tab).
 
Most of the fields here are straightforward. However, a few sections require further explanation.
 
====Search Keywords====
This should be keywords directly related to your game, such as the game name or portions of the name. Do not include general classification keywords here (such as LGBT, Visual Novel, or Slice-of-Life.... These will be handled later as tags). Here’s the example for YAGS:
 
 
====Supported Platforms====
Ren’Py supports Windows, Mac, and Linux. Here are example minimum system requirements for each Operating System, although you should of course adjust the necessary Disk Space based on your game’s actual build size. (You’ll probably want to use the Steam build for this size. See Making the Steam Build in Ren’Py.)
Windows
OS: Windows 7
Processor: 1 Ghz
Memory: 512 MB
Graphics: DirectX or OpenGL compatible card
No network required
DirectX Version: N/A
Disk Space: <Depends on your game build size>
Mac
OS: Mac OS X 10.6-10.14
Processor: 1 Ghz
Memory: 512 MB
Graphics: DirectX or OpenGL compatible card
No network required
DirectX Version: N/A
Disk Space: <Depends on your game build size>
Additional Notes: Game is non-notarized. May not work with 10.15 Catalina
Linux
OS: Ubuntu / SteamOS
Processor: 1 Ghz
Memory: 512 MB
Graphics: DirectX or OpenGL compatible card
No network required
DirectX Version: N/A
Disk Space: <Depends on your game build size>
 
 
====Release Dates====
The setting on this page only controls how the release date shows up on your store page. It does not actually set the value. Set this however you want, but I personally prefer to show the “Coming Soon” box, and use only the month and year instead of the full release date.
 
====Adult Content====
If your game includes any violence or sexual content (even if it is non-explicit or in passing), you must fill out this survey. Save the rest of your work on this page before completing the survey.
 
This survey is also accessible via the Mature Content Settings checklist item.
 
Answer the Yes or No question based on all content in your game, regardless of whether or not it is accessible through gameplay. For example, if there are nude sprite images in your game build that are not normally accessible but are unlocked through a separate patch, you must still answer that your game has adult content. Similarly, if you have explicit sexual text in your game build, you would answer that your game has adult content even if that content must be unlocked via a patch.
 
If you want to potentially get away with a lower level of mature content on Steam, but still offer such content via a patch, Creating an Externally-Distributed Nudity Patch has some details on ways to accomplish this.
 
 
 
We’ll assume for this document that your game does contain adult content. Select “Yes”, which will show additional questions. The questions are mostly straightforward, except for Nudity or Sexual Content (which, when checked, exposes an additional Adult Only Sexual Content checkbox).
 
 
Steam considers discussions of specific sexual acts to be Adult Only, even if such discussion does not go into graphic detail or does not feature explicit images (such as CGs or nude sprites). If your game falls into this category, you might as well go all-in and include explicit imagery and detail in your text.
 
Also note that your Mature Content Survey is published independently of other store page settings (for some reason). Make sure you click “Publish” after saving.
 
====Supported Features====
If your game has achievements, select “Steam Achievements” here. (See Adding Achievements.)
 
====Tags====
You’ll use a separate tagging tool to select tags. Save the rest of your work on this page before clicking the “Tag my Title” button.
 
To begin, click the BEGIN button conveniently hidden in the bottom right corner of the page.
 
 
The tag tool should be fairly straightforward to use.
 
====Description====
After saving all Basic Info, click the “Description” tab. This section should be straightforward, but note that you can include images in your long description by uploading them at the bottom of the page.
 
 
After making any changes, remember to Save.
===Mature Content Settings===
See Adult Content above.
 
===Self-Rating Questionnaire===
This page should be fairly straightforward. Other than the Brazilian questionnaire (which you should complete by answering questions), you’ll only add other ratings if you’ve received such ratings from the appropriate review board.
 
(Note that you’ll likely have received an ESRB rating, as well as other ratings, if you’ve published your game on Google Play. Use those ratings here only if the version of the game is the same as the one published on Google Play.)
 
===Planned Release Date===
This is not a link in the checklist, because you set it with the “planned release date” section right above the checklist.
 
 
 
Before setting a date, keep in mind:
After setting a date, you cannot change it without submitting a request to Steam to approve the change, even if your store page is not yet live
You cannot release your game until two weeks after the store page is live… for this reason, I recommend setting your release date as one of the last things before submitting your page for review
You cannot release your game until 30 days after your first purchase of an app credit
Steam will let you set a release date here that is not possible to meet given the above requirements, which you will be unable to change without their approval
 
The way that the date shows up on the live store page can be customized in Basic Info > Release Dates.
===System Requirements===
These will have already been completed as part of Basic Info > Supported Platforms.
 
===5 or More Screenshots===
Remember that you can capture screenshots while playing a Ren’Py game by hitting the “s” key.
 
You must have five screenshots to publish your game page. This is handled on the same page as other game assets (such as capsule images), and can also be accessed via Store Presence > Edit Store Page > Graphical Assets tab. You’ll see something like this:
 
 
Select your screenshots in Windows Explorer (or equivalent) and drag them to the “Drag images here to upload” section. Ensure that the selection under each one says “Screenshot” and then click “Upload”.
 
 
After they upload, scroll down to the “Screenshots” section of the page. Here, you can reorder the screenshots and mark them as suitable for all ages. Afterward (even if you make no other changes), you must save the page.
 
 
If you want to delete a screenshot, you’ll need to both delete the English version of it (via the “delete” link) and delete the entire screenshot group (which you can do via the “x” that appears when you hover over one of the thumbnails).
 
===Add a Trailer===
For some reason, Steam includes this as part of the checklist for the game build instead of for the store page.
 
Create a game trailer roughly the same aspect ratio as your screenshots, and optionally capture one frame of your trailer as a placeholder image. (I use mp4 and jpg, but other formats may work.)
 
Either click the “Trailer Uploaded” link in the Your Game Build checklist, or navigate to Edit Store Page > Trailers.
 
First, create a new trailer, and name it whatever you want.
 
 
Drag your movie file from Windows Explorer (or equivalent) into the “Drop movie files here to upload” box.
 
 
After uploading, the video will convert for a while, and then you’ll have the opportunity to upload a still image as a placeholder image.
 
 
Drag and drop your screenshot and save.
 
===Capsule Images===
You will need to create four capsule images for your game to represent your game in the store:
A 460x215px header image, which will appear at the top of your store page and in other store views
A 231x87px small image, which will appear in search results and recommendations
A 616x353px main image that appears on the front page (and will probably never get used unless you are popular)
A 374x448px tall image that will also be used in the store
 
You’ll need to make sure these images have the logo with the game name clearly legible. You can find templates for the capsule images here.
 
Additionally you may optionally have:
A 1438x810px background image that will appear on your game page (overlaid with a blue fadeout tint)
 
This background image (obviously) does not have to have the game logo.
 
Once you’ve created these images, click the “Capsule Images” checklist item, or navigate to Store Presence > Edit Store Page > Graphical Assets
 
 
Select your screenshots in Windows Explorer (or equivalent) and drag them to the “Drag images here to upload” section. Ensure that the selection under each image is correct, then click “Upload”.
 
===Library Images===
You will need to create three library images for your game, to represent your game in players’ game libraries:
A 600x900px capsule image to represent your game in the large library view
A 3840x1240px header image to display (and scale) at the top of the game page in the library
A 1280x720px logo image to overlay on top of the header image above
 
The capsule image must contain the game logo and the game name in the logo must be legible. The header image should not contain the logo. You can find templates for these images here.
 
Either click “Library Assets” in the checklist, or navigate to Store Presence > Edit Store Page > Graphical Assets > Library Assets (there’s a small tab under the “Drop images here to upload” area).
 
 
As before, drag and drop your images into the “Drop images here to upload” area, and ensure the selection under the image is correct before clicking “Upload”. In particular, you’ll probably need to switch the selection for your logo image to “Library Logo” instead of “Screenshot”.
 
 
After uploading your images, you’ll have to position your logo on the header background. Click on the “Library assets” tab again and scroll to the bottom, and open the placement tool. As the tool says, you can only pin the logo in one of four places (bottom left, top center, mid center, or bottom center), so make sure your logo is appropriate. (The above ZAGS logo, for example, does not meet this criteria.)
 
 
Use the green handles to select between the four positions, and resize as appropriate.
 
===Community Images===
You will need to create two community images for your game, for use in its Steam community.
A 184x69px capsule image for wishlists
A 32x32px logo image (likely the same as your game’s window_icon or icon.ico)
This image can be generated via the icon.ico when you upload the Client Icon
 
Click the “Community Capsule” link in the checklist or navigate to Technical Tools > Edit Steamworks Settings > Community > Assets.
No fancy drag-and-drop uploads here, so just select the appropriate file for each image.
 
 
Again, note that the Community Icon can be automatically generated from the Client Icon, if you don’t want to generate it manually.
===Client Icon===
You can generate the client icons (as well as the Community Icon in the Community Images section) automatically from an ico file. However, note that the ico file you generated for your Ren’Py game will likely not work for this purpose, as it must be an ico file containing a 32x32px image, which is likely smaller than your existing ico file.
 
I recommend using a website like Online ICO Converter, uploading your gui/window_icon.png file from your game, and specifying the optional “Change size” setting to 32x32.
 
After you have the ico file (and optionally the icns file from your game build), click the “Client Icon” link in the checklist, or navigate to Technical Tools > Edit Steamworks Settings > Installation > Client Images. You’ll see something like this.
 
 
Ignore the “Client Image” section and upload your ico file under “Client Icon”, checking the checkbox to automatically convert to TGA and community JPG. (Note that if your upload fails, the error message will appear in red at the top of the page.)
 
You can also upload your icon.icns file from your game as the Mac icon.
===Common Reviewer Complaints===
The Steam review process is both thorough and haphazard. These are things you should watch out for that Steam will care about:
Each of your capsule images (except for the store page background and hero header) must have the game logo unobscured and readable
For Demos, DLC, and Soundtracks, the banner in the top left must not cover any part of the logo text (even if the text is still readable, and even if that coverage is only a few pixels)... use the templates to ensure you’re good
The store page itself cannot link to any other storefronts (such as itch.io or Google Play)
Websites linked from your store page (such as in Basic information) cannot link to any other storefronts (such as itch.io or Google Play)
Websites linked from the store page that link to websites that link to storefronts seem to be okay… for example, http://zags.bobcgames.com is not acceptable anywhere on the store page since it links to itch.io, but links to http://bobcgames.com (which links to http://zags.bobcgames.com) on the store page are acceptable
For paid games, ensure that you have a price filled out for each currency. (If your project is an older project, you may be missing currencies that you’ll have to fill in or double-confirm.)
Your library logo must “float” over the hero header… so any “fixed” elements of the logo should be part of the hero
For example, the example ZAGS logo above in Library Images required the red logo background to be part of the hero header, with the logo floating over it
(If you have others that you’ve run into, please let me know)
 
===Submit Your Page For Approval===
After you’ve completed all required steps in the store page checklist, the section will turn green.
 
 
At the top of the dashboard, you will also be able to submit your page for review by Valve by clicking the big blue button.
 
 
Review, as noted, will take a couple days.
 
 
You will receive an email after your page is approved for launch. At that time, the dashboard button will change to a green Launch button.
 
 
Remember that, after your page is live, you’ll have to Publish any time you make further changes to the store page.
 
 
If Valve requires changes to the page or any images, the requested changes will be emailed and will also appear in the “Your Store Presence” checklist and in the “Checklist Complete” section at the top of the dashboard. After making changes, you’ll mark the page as ready for review again until it is ultimately approved.
 
==Upload Your Game to Steam==
To upload your game to Steam, there are a few more steps you’ll have to take than usual. Steam provides a useful checklist, but we’ll walk through it in a slightly different order, prioritizing actually getting the game build uploaded and working before dealing with the logistical aspects of selling your game.
 
If you’re making a game in Ren’Py, and your game build is under 2 GB, this guide is all you need. You don’t need to deal with the SDK or any Steamworks build process or pipelines.
 
 
 
First of all, you should update your game code with achievements if desired. You should also set up archiving if you haven’t. Ensure that your game builds and plays correctly with achievements added before proceeding with any of the following steps.
 
===Removing 32-Bit Support for Windows (Optional)===
By default, Ren’Py 7.5 and below will generate both a 64-bit and 32-bit executable for Windows. There isn’t a huge reason to generate the 32-bit version at this point (as of May 2020, Windows 10 doesn’t support 32-bit OSes going forward). The 32-bit executable also often causes problems with virus scanners, so if you can, it’s probably better to not generate it.
 
(Note: This step is not necessary with Ren’Py 8, which does not generate 32-bit builds at all.)
 
You can disable generation of the 32-bit executable by adding this line to any rpy file (such as options.rpy)
define build.include_i686 = False
 
If you build without removing 32-bit support for Windows, you’ll have some additional configuration you have to do in some of the below steps. We’ll note them as we get to them.
 
===Setting up Archiving For Your Game (Optional)===
Before making a build for Steam, I highly recommend you take advantage of archiving. This will ensure that file changes in future game builds (adding new sprite images or deleting music files, for example) do not cause problems for users that have already installed the game, as uploads to Steam via the Steamworks UIs are additive, and there is no way to delete existing uploaded files from the web UI. Using archives instead will cause the user to re-download the updated archive.rpa file, ensuring consistent files between users.
 
There should already be some archiving code in options.rpy, but this should be all you need. You can put this in any rpy file.
init python:
    build.classify('**~', None)
    build.classify('**.bak', None)
    build.classify('**.rpy', None)
    build.classify('**/.**', None)
    build.classify('**/#**', None)
    build.classify('**/thumbs.db', None)
    build.classify("game/**.webp", "archive")
    build.classify("game/**.png", "archive")
    build.classify("game/**.jpg", "archive")
    build.classify("game/**.ttf", "archive")
    build.classify("game/**.mp3", "archive")
    build.classify("game/**.wav", "archive")
    build.classify("game/**.ogg", "archive")
    build.classify("game/**.rpyc", "archive")
 
(If you use other image or audio file types in your game, add those in the same manner.)
 
Note: Archive names are case sensitive. In other words: "archive" is not the same as "Archive". Use the lowercase version.
 
===Installing Steam Libraries in Ren’Py===
Before doing anything else, you’ll need to download the Steam libraries in Ren’Py. If you’re running the latest version of Ren’Py, in the launcher, click “preferences” in the lower right, then Actions > Install libraries, then Install Steam Support. You must have an internet connection.
 
You only need to do this once. If you’re not sure if you’ve done it, simply click “Install libraries” again. The screen will say if Steam support has been installed.
 
===Setting the Steam App Id (Optional)===
You can test your game with Steam context (including achievements) by setting the config.steam_appid variable. This is optional, as the game will have its appid available when downloaded by and started up through Steam, but setting it will let you test Steam integration without having to go through the steps of actually uploading a build (and publishing) through Steamworks.
 
In any rpy file (such as options.rpy), add the following line.
define config.steam_appid = YOUR_APP_ID
For example:
define config.steam_appid = 123456
 
The value should be your Steam app id, without quotes around it. The value can be found either in the URL of your game’s dashboard in Steam, or next to your game’s name in the dashboard.
 
 
Once this is added, as long as you have Steam open and are signed in to it, launching your game (even from the Ren’Py launcher) will behave as if you launched it from Steam, complete with Steam overlay. (Achievements should also work, so you can test them without needing to publish to Steam first.)
 
However, if you do this, this will cause all games run from the launcher (even those without config.steam_appid set) to run as the last game with a steam_appid set when run from the launcher. For example, if you add config.steam_appid only to ZAGS, and run it from the launcher, and then run YAGS (which doesn’t have steam_appid) from the launcher, Steam will think that you’re running ZAGS while playing YAGS. If you then add config.steam_appid to YAGS and run it again, Steam will correctly pick up that you’re running YAGS.
 
If you ran the game from the launcher, you can fix this by deleting the generated steam_appid.txt file, located at “<renpydirectory>/lib/<yourOS>/steam_appid.txt”, for example “renpy-7.4.6-sdk/lib/windows-x86_64/steam_appid.txt” if your launcher is normally “renpy-7.4.6-sdk/renpy.exe”. You’ll have to do this every time after running a game with config.steam_appid set from the launcher.
 
 
You can also prevent this problem by making a Markets build of your game and running via that build instead of via the launcher, which will ensure that only that build picks up the Steam appid for that game.
 
===Making the Steam Build in Ren’Py===
If you’ve uploaded a build to Steam before, it’s recommended that you bump the version from the last release by changing this line in options.rpy (for example from 1.0 to 1.1):
define config.version = "1.0"
(This isn’t strictly necessary, but it’s good for users to be able to understand which game version they’re using when they ask for help. By default, this version info shows up on the “About” screen in your game.)
 
Make sure you have installed Steam libraries in the launcher before proceeding.
 
First, make a build of your game as “Windows, Mac, Linux for Markets”.
 
 
If your game is at the top level (see Build Configuration), you will need to unzip the resulting file and re-zip it so it does not contain a folder. The ZIP generated by Ren’Py should look something like this:
 
 
Unzip it, then navigate into the folder so you can see the exe itself. Highlight all files in this directory, and directly generate a ZIP from that:
 
 
Warning: Do not launch your unzipped game before zipping for Steam. Launching the game will sync all game state from your local computer, including persistent data and save files. Uploading this to Steam will cause all players to share this state, with no way to undo the damage due to the way Ren’Py stores a copy of all data on the local computer.
 
The resulting ZIP file should look like this (with all files at the top level, instead of containing a folder inside it). This ZIP file can be uploaded to Steam.
 
 
If your game is not at the top level, you may not need to unzip and rezip the game build. However, you will need to configure your Build Configuration to include the directory name, and you may need to update other configurations with each new build since Ren’Py normally includes the version in the folder name (so you’ll probably want to override the build directory setting). (In general, put your game at the top level. It’ll make your life easier.)
 
Note: If you are uploading your game via SteamPipe instead of a ZIP upload in the UI (for example, your game is larger than 2GB), you do not need to zip up your game. Instead, drop the unzipped copy of your game in the appropriate folder and generate a build.
 
===Uploading the Game to Steam===
Click “At Least One Build Configured” in the checklist, or navigate to Technical Tools > Edit Steamworks Settings > SteamPipe > Builds
 
If your game is under 2GB, you can upload from the web interface rather than using SteamPipe/the SDK. Click the “here” link.
 
 
Then select your ZIP file and upload it. If you have DLC projects (see Creating DLC), make sure you upload to the correct depot. (The default depot for your primary project will be “Your project Content”, for example “Zen: A Gay Sequel Content”.)
 
The “Standard” upload type is fine.
 
 
After uploading, you should see a screen like this. Add a comment and set the build live for the “default” branch. (If this is your first upload, there won’t be a branch yet, so just select None. If your game is already released, you may not want to immediately set it as live or to select a different branch… see After Release.)
 
 
If this was your first upload, you’ll need to manually set the build live. Select the default branch, Preview Change, and then set it live. (For future uploads, you can set them live immediately after upload when you commit.)
 
 
If your game build is larger than 2 GB, you might be able to use the web tool to upload it in parts, but you’ll probably be better off figuring out the Steam SDK tools. You might try LewdPixel’s Steam Guide for help with that.
 
To avoid having to later fix a bad upload, here’s a checklist of things to validate before uploading your ZIP:
You made your build from a Steam-enabled Ren’Py launcher
You did not change support for 32-Bit Windows builds since the last build upload
You are using archiving and did not change archive settings, or you did not remove any asset files (images, music, etc) since the last build upload
You unzipped and re-zipped the Ren’Py generated build if appropriate
If you are not putting your game at the top level, then instead ensure that the new build has the same folder name as the old build
You did not run your game between unzipping and re-zipping
Really, you did not run your game between unzipping and re-zipping
If you upload a build with save data intact, the situation is unrecoverable without fully resetting user progress and invalidating save files for all users, because of how Ren’Py handles save data on a local computer
If you’re paranoid, navigate into your zip file before uploading and ensure there is no game/saves folder
 
===Build Configuration===
You must decide whether you want your game to live inside a folder, or at the top level, given that Steam will already create a folder for your project.
 
For example, do you want your game at the top level as
<steam directory>/Zen A Gay Sequel/ZAGS.exe
Or in a folder as
<steam directory>/Zen A Gay Sequel/ZAGS/ZAGS.exe
 
In general, the former (at the top level) is easier, unless you are planning on having non-game DLC in a separate directory. It will also make game-patching DLC simpler. (If you’re not putting your game at the top level, we highly recommend overriding the build directory name so it does not change between build versions.)
 
We will assume you are putting your game at the top level, rather than inside a folder. This means you unzipped and appropriately re-zipped your Ren’Py build above before continuing with upload below.
 
Navigate to Technical Tools > Edit Steamworks Settings > Installation > General Installation and click the Add New Launch Option button
 
 
Click the button two more times until you have three launch options. Do this before editing any of them, or changes will not be saved.
 
The three options will correspond to Windows, Mac, and Linux. Use these settings:
Windows
Executable: <yourgame>.exe
Launch type: Launch (default)
Description: Launch
Operating System: Windows
Mac
Executable: <yourgame>.app
Launch type: Launch (default)
Description: Launch
Operating System: macOS
Linux
Executable: <yourgame>.sh
Launch type: Launch (default)
Description: Launch
Operating System: Linux + SteamOS
 
If your build generates a 32-bit executable, you’ll need two different Windows launch configurations (for four total configurations)
Windows 64-bit
Executable: <yourgame>.exe
Launch type: Launch (default)
Description: Launch
Operating System: Windows
CPU Architecture: 64-bit only
Windows 32-bit
Executable: <yourgame>-32.exe
Launch type: Launch (default)
Description: Launch
Operating System: Windows
CPU Architecture: 32-bit only
 
Save each update as you make it by clicking the “Update” button.
 
If your game is not at the top level, and is a directory instead, include the directory name in the executable settings (for example ZAGS/ZAGS.exe instead of just ZAGS.exe).
 
If you’re following these steps in order, this is enough to make your game playable natively within Steam. Follow the instructions in Testing Your Game to play your game through the Steam client. Exciting!
 
===Debugging Build Configurations===
Before doing anything else, check whether your Application name, Depot name, or Package name in Steam contains a period. (Thugzilla ran into a problem with launching when this was the case, as it caused a period to be added in the local Steam folder name.)
 
In particular, the Install Folder (dashboard > Edit Steamworks Settings > Installation > General Installation) should not have a period in it.
 
 
If the build settings don’t work. Look at the files in your Depot and ensure that the exes are where you expect them to be. Click dashboard > Edit Steamworks Settings > SteamPipe > Builds and click on the depot number for any build to see the contents of the depot. (If you have DLC, Steampipe will automatically merge DLC metadata as a new build every time you upload changes, but you don’t care about those merged builds.)
 
 
You’ll see a complete list of all files within that depot.
 
 
Verify in that file list that the exe is either at the top level or appropriately in a folder that is part of the Build Configuration path, based on your settings..
 
===Fixing a Bad Upload (via Web UIs)===
Made a mistake when uploading? Maybe you forgot to unzip and re-zip or maybe you have some uploaded files that you now want to delete… (With thanks to Thugzilla for letting me mess with his game depots for this section.)
 
(See also I Ran My Game Before Re-Zipping and Uploading for handling of that particular unfortunate situation.)
 
If your game isn’t yet released, you can create a new depot to fix the problems, essentially starting your project from scratch. (You could probably also delete files or clean them up via the SDK for a less-destructive approach, but we’re taking a web-browser-focused approach in this document, instead, and you can’t delete files in a depot from the UI.)
 
If your game is already released, you can probably still do this, but it may play badly with different data sync mechanisms. (For example, this would not resolve issues where you accidentally uploaded persistent and save data to Steam for end users, because of how Ren’Py handles local save data.) It is likely to also be a fairly bad experience for users.
 
First, navigate to dashboard > Technical Tools > Edit Steamworks Settings > SteamPipe > Depots and create a new Depot in your project. Select the next Depot ID after your current one. (The ID doesn’t really matter, but you just want to make sure it’s not one you’ve potentially used in the past.)
 
 
You should see something like this. The error is fine for now. Make sure the depot is set to All OSes, and then click the “Save” button under “Save Depot Changes” further down on the page.
 
 
After saving, the new depot should be assigned to the Base App. This is correct.
 
 
Publish the changes (via the Publish tab) to ensure that the new depot is properly picked up by the build.
 
Navigate to SteamPipe > Builds, click the “here” link, and upload your ZIP file (with the fixed build) to the new depot. Set it as live on the default branch and commit.
 
 
Publish your changes.
 
 
Next, you’ll need to switch the Depot in all packages to the new Depot. Navigate to dashboard > View Associated Items > All Associated Packages, DLC, Demos, and Tools. There should be three packages there: the Store (or Free to Play) package and two special-use packages (Beta Testing and Developer Comp).
 
For each of these packages, Add/Remove Depots and switch to the new depot. You must do this separately for all three packages.
 
 
Finally, navigate back to the depots view (dashboard > Technical Tools > Edit Steamworks Settings > SteamPipe > Depots) and delete the old depot, which should no longer be referenced, by clicking the “X” at the end of the line.
 
 
As always, save Depot changes with the “Save” button, then re-publish.
 
===Fixing a Bad Upload (via SteamPipe)===
If you used SteamPipe to upload, simply delete all files, add the fixed version of the game, and go through the build process again. SteamPipe replaces all depot files (instead of doing additive uploads like the Steamworks UI).
 
Please see LewdPixel’s Steam Guide for details on uploading with SteamPipe.
 
===I Ran My Game Before Re-Zipping and Uploading===
Ouch.
 
No, seriously. Don’t do that. But it’s probably too late for that warning if you’re reading this section. In the future, I recommend following the checklist under Uploading the Game to Steam before every upload, so you don’t run into this situation again.
 
You are very sad now because Ren’Py stores all save data (save files plus persistent game data) in two places: Inside the application directory itself (ex: Yearning A Gay Story/YAGS/game/saves) and on a user’s local machine (for example: C:\Users\<you>\AppData\Roaming\RenPy\YAGS-123456). You cannot touch the latter, no matter how many builds you upload to Steam, and Ren’Py automatically syncs data between the two locations.
 
This effectively means that all users who launched the version of your game where you incorrectly uploaded save data have (portions of) the bad data on their local machines that cannot be removed by you.
 
(You might be even sadder if you enabled Steam Cloud saves, as that will further sync all save files to the cloud, which you also cannot remove.)
 
You basically have two options now:
Upload a fixed build and permanently screw all users who received your incorrect build and launched the game while it was incorrect
Reset all game progress (including persistent data and clearing all save files) for all users
 
Technically, you have a third option, but this isn’t really viable:
Upload a fixed build and tell users how to recover by manually deleting selected files from their local computer and Steam game directories
This may not work anyway given Steam cloud
This will still result in some users losing saves and persistent data
Users won’t follow the instructions to do this
 
====Upload a Fixed Build====
Generate a new zip, follow the instructions for fixing a bad upload above (particularly the parts about creating a new game depot, because new uploads to the existing depot are additive, and will not remove the badly-uploaded save files). (You could also use other Steamworks tools such as Steampipe that allow deletion of files, but we're assuming here that you're interacting entirely through Steamworks UIs.)
 
Hopefully you caught the error quickly enough that very few players launched the game in the meantime.
 
All players will be forced to re-download the game. However, thanks to Ren’Py’s local storage as well as Steam Cloud, progress should be persistent.
 
(Players that launched the game with your bad build will continue to be in a bad state, and you have no way of recovering from this.)
 
====Reset All Game Progress====
If it took you a while to catch the issue and many players have already launched your game… well, now you’re really sad.
 
The option to nuke everything should not be taken lightly, as this will reset all player progress and effectively delete all of their saves.
 
First, update this line in options.rpy to something different. Changing the numbers at the end is enough.
define config.save_directory = "SOMETHING-12345678"
 
What we’ve done here is changed the folder inside C:\Users\<you>\AppData\Roaming\RenPy so the new build of your game will not pick up the old local data.
 
After that, build in the same way as before except do not unzip and rezip. We’re going to rely on the fact that the game now has a subdirectory to fix the save syncing issues. So if your game was previously “Yearning A Gay Story/YAGS.exe” it should now be “Yearning A Gay Story/YAGS/YAGS.exe”. (You may wish to override the build directory name to be consistent, while you’re at it, so it doesn’t include the version number.)
 
Refresh your memory with the Build Configuration section for what all of this means.
 
Next, change your Steam Cloud save settings to add another directory to sync. This should now include the subdirectory. (Ex: YAGS/game/saves instead of game/saves)
 
This makes it so Steam cloud will not simply re-sync the bad files into the new, clean build once the game is launched again.
 
Next, follow the above steps for fixing a bad upload, including creating a new depot.
 
After all of that, you should effectively have a new version of the game where both Ren’Py’s local syncing and Steam Cloud’s syncing do not sync the bad save files.
 
===Configuring Steam Cloud Saves===
This step is optional, but will allow players to synchronize their save data across computers, including any persistent data. If you do this, it is highly recommended that you use Persistent Data merging where appropriate.
 
Navigate to Technical Tools > Edit Steamworks Settings > Application > Steam Cloud. You should see something like this
 
 
Byte quota should be 10000000 (ten million bytes, or 10 megabytes), and 500 files. (This should be more than enough for most games’ save and persistent data, but if your game uses particularly many variables or uses classes as variables, you may wish to raise the byte quota.)
 
Save these settings, and some new options should appear.
 
First, uncheck the Beta Testing checkbox. (This checkbox seems to sporadically get re-checked, so ensure this is not checked before you actually launch your game.)
 
Scroll down to the Steam Auto-Cloud Configuration section, and click the Add New Auto-Cloud Path button. Add a new entry against the root with the subdirectory “game/saves” with the * pattern for all OSes. The setting should look like this after saving.
 
 
Make sure to save the page itself as well, afterward.
 
(If your game is located in a folder as per Build Configuration, you will instead need the path to the saves folder, such as “YAGS/game/saves”)
 
===Setting a Price===
On your dashboard, you should have a single package for your game under “Store Packages, Pricing, & Release Dates”. Click on the package row.
 
 
You should see a screen like this if you haven’t priced your package before. Click “Propose Pricing”.
 
 
Select a USD price, and the other currencies will automatically populate. Note: The other currency values are NOT calculated via current exchange rates, and will mean your game actually sells for cheaper in most other countries. Set accordingly.
 
 
Steam says they’ll “review” prices, but the first one seems to be fairly automatic. Just publish when ready.
 
 
You can also set a launch discount from the dashboard, under the release date.
 
===Setting Supported Operating Systems===
Navigate to Technical Tools > Edit Steamworks Settings > Application > General, and ensure the supported operating system settings match your build and other configurations.
 
You’ll need to check (or not check) the 64 Bit Only checkbox for Windows based on your Ren’Py build configuration. The macOS build is not notarized, but is 64-bit compatible.
 
===Submit Your Game For Approval===
After completing all of the required steps in the game build checklist, the section will turn green.
 
 
At the top of the dashboard, you’ll be able to submit your game build to Valve for review by clicking the big blue button.
 
 
Review, as noted, will take a couple days.
 
 
You will receive an email after your game build is approved for launch. You still won’t be able to launch until the time criteria (two weeks after coming soon, or 30 days after buying your first app credit) are met.
 
 
After the release criteria are met, you can release your game, which allows your game to be purchased and downloaded.
 
 
 
If Valve requires changes to the page or any images, the requested changes will be emailed and will also appear in the “Checklist Complete” section at the top of the dashboard. After making changes, you’ll mark the page as ready for review again until it is ultimately approved.
 
===Provide Save Files to Steam Support===
(WIth thanks to Cyan for this information)
 
There may be times when Steam support requests save files to help test your game.
 
 
If you receive this request, do not upload save files to the regular "default" app branch. This will cause the same problems as if you run your game before uploading it to Steam. (See I Ran My Game Before Re-Zipping and Uploading if you did this.)
 
The best way to proceed is to upload the save file to Google Drive or Dropbox, and share the link with support. Tell them to copy the file into the /game/saves directory. (This has been acceptable for other devs, despite the message in the failure requesting that the save file is in the repository.)
 
(To actually find the file that you should send, click the "game" link under "Open Directory" in the Renpy launcher for your game. Navigate into the "saves" directory from there. Save files are named by the page and save slot, so if you want to locate the first save file on the second save page, you'll want the file called 2-1-LT1.save. In the default save menu, the slots are numbered left to right, then top to bottom.)
 
If this is not acceptable to support, you must upload a save file on a separate beta branch for your game. Do not upload any save files to your primary "default" app branch. If you use a beta branch, you will probably want to set a password on it, and upload the save file(s) in the correct path (for example: game/saves). For help with creating branches, see After Release.
 
==Add Achievements==
For each achievement you wish to have, you will need to add the appropriate code in your Ren’Py game, you will need to add the corresponding achievement in Steam, and you will need to create two images for it (one locked, one unlocked).
 
These steps can be done in any order.
 
For a simpler time adding achievements, Bob has a Ren'Py Achievements Framework which handles all of the in-game work. (You'll still need to do the work to add the corresponding achievement in Steam, including creating two images for the achievement.)
 
===Create the Images===
Create two 256x256px JPG images for the achievement, representing the locked and unlocked states.
 
===Define the Achievement in Steam===
Navigate to Technical Tools > Edit Steamworks Settings > Stats & Achievements > Achievements, and click the “New Achievement” button. You will see something like this:
 
For the API Name (the top left text field), enter a name for the achievement using letters, numbers, and underscores. For example, you can name the achievement “FIRST_STEPS” or “first_steps” or “firststeps”, but you should not name it “first steps” or “First Steps!”. This value will not be visible to users. Note this value down, as you’ll use it in Unlock the Achievement in Your Game (in Ren’Py).
 
For the Progress Stat, select None, unless you are using Achievement Stats.
 
The Display Name and Description are player-visible values, so you’ll want to enter friendly values here. For example, “First Steps” and “Start a new game” would be a good Display Name and Description.
 
Check the “Hidden?” checkbox if you want your achievement description to be hidden by default until unlocked. The name will still be visible.
 
Save the achievement before uploading icons or the upload will not work. After saving, edit the achievement again and upload the icons for achieved and unachieved, and save again.
 
Repeat these steps for each achievement.
 
===Unlock the Achievement in Your Game (in Ren’Py)===
If you're using Bob's Ren'Py Achievements Framework, you should follow the directions for that framework rather than this section.
 
For each API Name corresponding to an achievement in Steam, you will want to first register the achievement in an init block, and then grant it when the appropriate in-game event triggers. There is documentation here, but we’ll lay it out step-by-step below.
 
Note: You can do all of this before the above steps within Steam. Simply select an appropriate API name for your achievement and note it down for later reference when configuring Steam.
====Register Your Achievement in an Init Block====
You should register each achievement you want to grant. In any rpy file, add the following code:
init python:
achievement.register("THE_API_NAME")
For example, for the achievement with an API name FIRST_STEPS, you would add:
init python:
achievement.register("FIRST_STEPS")
 
It’s generally a good idea to register all of your achievements together at once, since this also provides an easy reference if you define the achievements in Steam later.
init python:
achievement.register("FIRST_STEPS")
achievement.register("NOTHING_BUT_LOVE")
achievement.register("JOURNEYS_END")
achievement.register("COMPLETIONIST")
 
===Grant Your Achievement During Gameplay===
When you wish to grant an achievement during gameplay, simply use the following code:
python:
achievement.grant("THE_API_NAME")
achievement.sync()
 
For example, to grant the FIRST_STEPS achievement when the game starts, you would simply use this code:
label start:
python:
achievement.grant("FIRST_STEPS")
achievement.sync()
"Welcome to the game!"
e "My name is Eileen!"
 
You may also wish to add a “Sync Achievements” button to some screen, such as the Preferences screen. This will allow players who play your game build with achievements through other storefronts (such as itch.io) to synchronize their achievements with Steam after downloading the Steam version.
textbutton "Sync Achievements" action achievement.Sync()
 
Please note the capitalization of “achievement.Sync()”, and note that this is a button to be added to a screen. (If you are not familiar with screen language, please reference the Ren’Py documentation or ask a friendly fellow developer for assistance.)
 
====Display Achievements to Users (Optional)====
Achievements granted through Steam will automatically show a popup notification when they are granted. Additionally, players can view the achievements they’ve unlocked through the game page in their library, and on their Steam profiles.
 
However, you may wish to add Achievements to all builds of your game, including ones distributed through other storefronts such as itch.io. All of the above code is still perfectly fine and applicable, but you will need to add a new screen to your game to view unlocked achievements. (This will also allow Steam players to view achievements within the game itself, which is always a plus.)
 
The following is an example of a basic screen that shows all unlocked achievements, with the same Display Name and Description as we used in Steam. If you are not familiar with screen language, please reference the Ren’Py documentation or ask a friendly fellow developer for assistance.
screen achievements():
tag menu
add "#aaaa"
vbox:
xcenter 0.5 ycenter 0.5
if achievement.has("FIRST_STEPS"):
text "First Steps - Start a new game" color "#000"
else:
text "First Steps - ???" color "#fff"
if achievement.has("NOTHING_BUT_LOVE"):
text "Nothing But Love - Come out to your parents" color "#000"
else:
text "Nothing But Love - ???" color "#fff"
if achievement.has("JOURNEYS_END"):
text "Journey's End - Finish the game" color "#000"
else:
text "Journey's End - ???" color "#fff"
if achievement.has("COMPLETIONIST"):
text "Completionist - Unlock all 333 collectables" color "#000"
else:
text "Completionist - ???" color "#fff"
textbutton "Close" action Return()
 
After adding this screen to a rpy file (such as screens.rpy), you will need to add some way to show it. The easiest way is to add another button to show the screen in the navigation (screen navigation in screens.rpy).
        if main_menu:
            textbutton _("Start") action Start()
        else:
            textbutton _("History") action ShowMenu("history")
            textbutton _("Save") action ShowMenu("save")
        textbutton _("Load") action ShowMenu("load")
        textbutton _("Preferences") action ShowMenu("preferences")
        textbutton _("Achievements") action ShowMenu("achievements")
 
===Achievement Stats===
Bob's achievement framework does not support achievement stats, so if you wish to use these, you will be unable to use the framework.
 
The achievement examples above are for boolean achievements: You either have it or you don’t. However, you may wish to add achievements that you can gradually build up to as you accomplish multiple goals in the game. (For example, you may wish to have an achievement that counts up from 0 to 50 for each secret item that you find, and grant the achievement when you find the 50th item.)
 
For this, you will need to use Stats, in conjunction with renpy’s achievements functionality.
 
(Bob has not personally done this, so thanks to SuperBiasedGary for confirming this works!)
 
====Register Your Stat in Steam====
Navigate to Technical Tools > Edit Steamworks Settings > Stats & Achievements > Stats, and click “New Stat”. You should see something like this:
 
 
You probably want an INT stat. Give it an API name (with the same requirements as regular achievements), and set the other fields to reasonable values based on your use case. The Display Name, of course, is the name that players can see.
 
After you’ve done this, go back and create an achievement with your stat as the Progress Stat, and set a reasonable min and max for it.
 
====Add Your Stat in Your Game (Ren’Py)====
For this example, we’ll assume you have a stat with the API name COLLECTION with a min value of 0, a max value of 100, and a default value of 0. We’ll assume you also have an achievement with the API name ALL_COLLECTION using that stat, with the same min and max.
 
In any rpy file, you’ll need to register both your stat and achievement.
 
init python:
achievement.register("COLLECTION", stat_max=100)
achievement.register("ALL_COLLECTION")
 
Whenever a player finds a collection item, you’ll update the count. You may also want to grant the achievement if applicable, so that players not playing on Steam can obtain the achievement as well. (Steam should automatically grant the corresponding achievement when the stat reaches the max value.)
 
default persistent.found_items = Set()
label whatever:
"You found a seashell!"
python:
persistent.found_items.add("seashell")
achievement.progress("COLLECTION", len(persistent.found_items))
if achievement.get_progress("COLLECTION") >= 100:
achievement.grant("ALL_COLLECTION")
achievement.sync()
 
==Test Your Game==
===Before Release===
====Publishing the Build====
After making any changes and uploading a new game build, you will need to once again publish the changes (essentially making them “live”). Open the Publish tab, click “Prepare for Publishing” and then “Publish to Steam”. It will prompt you for confirmation and some notes for yourself. Fill these in and hit “Really Publish”.
 
====For Yourself====
After you have uploaded and published a game build on the default branch, the game should show up in the Library of the Steam account used for the above configurations. You can install the game and run it to test out functionality, including achievements. You can do this even if your store page isn’t yet live. (Remember that you can not test demos this way.)
 
 
After making changes and publishing a new build, I recommend uninstalling and re-installing the application. This will ensure you have the latest changes without having to wait for Steam to automatically update for you.
 
====With Others====
You can generate special beta keys to allow others to help test the game before it is fully released. (This is also the only way to test Demos.) Navigate to Technical Tools > Request Steam Product Keys > Release State Override, and select Beta Test.
 
Your game should have a beta test package that can be requested.
 
 
Steam needs to approve these keys, which will take some time. You’ll receive an email when the keys are generated and approved, and can download them from your dashboard. (Note: You can only download the keys once, so keep the resulting file safe.)
 
 
These keys can be redeemed in the usual way, causing the pre-release game to show up in their library. They can then install and play it as normal.
 
====Reminder: Ren’Py Automatically Shares Save Data on a Computer====
If you’ve already played your game from either the Ren’Py launcher or via a standalone build on the same computer before, when you start up the build from Steam, all existing persistent state and save files will be automatically synced into the Steam version. This is expected. To test a truly new Steam build, you should make sure you delete persistent data for your game from the Ren’Py launcher before installing and running the Steam build. (Of course, also remember that Steam cloud may be syncing save data if you configured it to do so.)
 
This means that, when starting your game in Steam, you may see all save files and persistent data from that computer. This is expected. It does not mean you accidentally uploaded your save and persistent data into Steam.
 
If you’re worried, you can confirm you haven’t actually uploaded save data, including persistent data, into Steam, by checking the Depot contents. As long as there is no “saves” directory in the Depot, you are fine.
 
This behavior is normally useful as it allows players to be able to pick up where they left off from an itch build. If you do NOT want this behavior, change the save directory. In options.rpy, you should see the following line:
define config.save_directory = "SOMETHING-12345678”
 
Change it to a value that is different from previous values, clear all persistent data from the Ren’Py launcher, rebuild your game, upload the new build, and uninstall and reinstall the game. (Again, note that Steam Cloud may sync save data automatically, defeating much of this.)
 
===After Release===
If you need to make changes to your game after its release, but you want to test such changes before making them generally available to players, you should make use of Steam branches.
 
Click through to Technical Tools > Edit Steamworks Settings > SteamPipe > Builds and create a new app branch. Name it something like “beta”, add a description, and add a password (unless you want anyone to be able to grab the beta build).
 
 
Once the branch is created, you can set different builds live on different branches. The “default” branch is your public release branch, but when you upload a new build (see Upload Your Game to Steam), you can set it live on the beta branch instead of default. You can also manage your builds (and which ones are live) from the same page.
 
 
You’ll likely be uploading a new build to the new branch, so you can set it to be live on the beta branch at the time of upload.
 
 
Remember that you’ll need to publish for changes to take effect after any upload, even to the beta branch.
 
After your branch is created, you can select which branch you want to use in your Steam client. A “betas” tab shows up in the Preferences menu. For password-protected branches, type the password to unlock the branch. (It will not show up in the dropdown until you have entered the password.) Opt into the appropriate beta.
 
 
After you’ve tested and are happy with the changes, set the new build to be live on the default branch, which will make it available to everyone. Publishing is not required when changing live builds on branches if you’ve already published the build. (You can also disable and then delete the beta branch if you’d like, which will hide the “Betas” section in Preferences in the Steam client.)
 
 
Steam will ask you to post a small update when you set the new build live on the default branch for a released game. It’s probably a good idea to add one.
 
==Add a Demo==
A demo can be attached to your full (paid) game, allowing players to download a free version of the game to try before they buy.
 
You can share Steam depots between your demo and full game (including assets), but for simplicity here, we’re going to treat the Demo as an entirely distinct Ren’Py Project that generates an entirely distinct game build. (In other words, we will not share any depots, and therefore will not share any asset files, between the two.)
 
Note, as the documentation says, you will not be able to test a demo on the account you used to create the full game, as you cannot download a demo for a game you already own. Instead, you should create a test Steam account, request beta keys for the Demo after it’s uploaded and published, and test with the test account.
 
===Making the Steam Build in Ren’Py===
As noted above, we’re going to assume you have a completely separate Ren’Py project for your demo, that is not attempting to share any resource files with the full game.
 
We highly recommend setting a different save directory for your demo versus your full game so the two games do not share persistent state or save files. In options.rpy, you should see the following line:
define config.save_directory = "SOMETHING-12345678”
 
Ensure that this line is different from the corresponding line in your full game. If you change it, ensure that it contains only letters, a hyphen, and numbers.
 
If you set the Steam app id, make sure to update the value for the Demo, which will have its own app id.
 
Generate the game build for the demo project in the same way as for the full game.
 
It is recommended that demos do NOT have achievements. (If you want to include achievements, instead use multi-game persistence and pick them up on game startup in the full game… instructions for doing this are out of the scope of this guide.)
 
===Create the Demo in Steam===
From the dashboard, navigate to View Associated Items > All Associated Packages, DLC, Demos and Tools.
 
 
Click the “Add Demo” button under “Demos”. This will create a new app that is very similar to your base game app.
 
 
Click on the demo name, and you should see a very familiar page.
 
===Create the Store Page===
Many of the same above steps apply, except the store requirements are simplified. Here’s references back to the appropriate above sections that you’ll need to complete for the demo.
Complete the Mature Content Survey
Complete the Self-Rating Questionnaire
You can inherit your rating from the parent game, and should probably do so
Add a planned release date
Your demo can release before your main game, and before the page has been live for two weeks
Create Capsule images
Only three capsule images are required: A 460x215px header, a 231x87px small image, and a 616x353 main image
You do not need additional screenshots for the demo
Fill out the Basic Info
Add System Requirements
Add the Client Icon
 
You may also add distinct Library images, and we recommend you do so, as demos will show up as distinct games.
 
After these steps are complete, you can submit your demo’s assets for review.
 
===Upload Your Demo to Steam===
Many of the same above steps apply. Here’s references back to the appropriate above sections that you’ll need to complete for the demo.
 
Upload the demo to Steam
Set the Build Configuration
Set supported operating systems
 
You may optionally configure Steam Cloud saves. After these steps are complete, you can submit your demo build for review.
 
===Test Your Demo===
As noted above, you won’t be able to test the demo on the same account that you’re using to create it, because the account owns the full game (and therefore can’t download the demo.)
 
First, request beta keys for the demo project. Then, create another Steam account, redeem the key, and test the demo that way.
 
Again, you cannot test the demo from the same Steam account you’re using to add the game to Steam because that account owns the full game. You must use a different account. The different account must also not own the full game, via a key or otherwise, including a beta testing key for the full game.
 
===Release Your Demo===
After your store page and build have been approved, you’ll be able to release both. There is no two-week waiting period for a demo.


==Suggestions and Contact Information==
Bob welcomes suggestions, corrections, and additions to this document. You can reach him at bobcgames(at)gmail.com, from his website [https://bobcgames.com bobcgames.com], or on Mastodon as [https://peoplemaking.games/@bobcgames @bobcgames@peoplemaking.games].


You can release the store page to show the demo as “Coming soon” (on the parent game’s page, once that’s live), and then actually release the demo so players can download it. As noted, you can also just outright release the demo, which will be available immediately (assuming your parent game’s page is live). Remember that, once your store page is live, you’ll have to Publish any new changes to either the store page or the build.
However, he requests you do not contact him with questions relating to Ren’Py code, including questions about screen language, patch file creation, and achievement code. For such questions, he recommends [https://discordapp.com/invite/6ckxWYm the official Ren’Py Discord server].


If you found this guide useful, please consider supporting him by [https://bobcgames.itch.io/yags donating to YAGS on itch.io] or [https://yags.bobcgames.com/?swag picking up some YAGS swag].


I recommend waiting until the full game’s store page is live before making the demo live.
{{Template:Renpy steam guide nav}}

Latest revision as of 13:38, 19 February 2025

Ren’Py Visual Novels on Steam: A Step-by-Step Guide
By Bob Conway (https://bobcgames.com)
With thanks to BaiYu / Project Ensō (https://projectenso.games/)
Ported to VNDev Wiki by Ironnori
Created: August 11, 2021
Last Updated: March 26, 2024 (see Document Changelog)
Short Link to original version (may be more up-to-date): https://bit.ly/2VOH4vf

This is a step-by-step guide with screenshots for getting your Ren’Py based game onto Steam. (This guide can be used for non-Ren’Py games too. Just ignore the portions about Ren’Py.)

This guide assumes you have already registered as a Steamworks partner and purchased an app credit.

Please note: You will not be able to release your game on Steam until 30 days after purchasing an app credit, or two weeks after your game page goes live after undergoing Steam review and receiving approval, whichever is later. Please plan ahead.

This is a long document. You can either follow all of the steps roughly in order, or use this table of contents to jump directly to a section.

Table of Contents

Create the Steam App

Main article: Guide:Ren'Py_visual_novels_on_Steam/App

Create Your Store Page

Main article: Guide:Ren'Py_visual_novels_on_Steam/Store_page

Upload Your Game to Steam

Main article: Guide:Ren'Py_visual_novels_on_Steam/Upload

Add Achievements

Main article: Guide:Ren'Py_visual_novels_on_Steam/Achievements

Test Your Game

Main article: Guide:Ren'Py_visual_novels_on_Steam/Testing

Add a Demo

Main article: Guide:Ren'Py_visual_novels_on_Steam/Demo

Create DLC

Main article: Guide:Ren'Py_visual_novels_on_Steam/DLC

Create a Bundle

Main article: Guide:Ren'Py_visual_novels_on_Steam/Bundle

Create an Externally-Distributed Nudity Patch

Main article: Guide:Ren'Py_visual_novels_on_Steam/External_patch

TL;DR

Want to figure things out on your own, and just want to know the images and builds you have to make, or just want a checklist of images before tackling Steamworks configuration?

You must create the following assets for the Steam store page, community, and client:

  • Five game screenshot images (hit the “s” key while playing to easily generate these) (details)
  • One game trailer video (details)
  • Four capsule images for the store (details)
    • A 460x215px header image, which will appear at the top of your store page and in other store views
    • A 231x87px small image, which will appear in search results and recommendations
    • A 616x353px main image that appears on the front page (and will probably never get used unless you are popular)
    • A 374x448px tall image that will also be used in the store
  • Three images for players’ game libraries (details)
    • A 600x900px capsule image to represent your game in the large library view
    • A 3840x1240px header image to display (and scale) at the top of the game page in the library
    • A 1280x720px logo image to overlay on top of the header image above
  • An image for the Steam community (details)
    • A 184x69px capsule image for wishlists
  • An icon for the client distributable (details)
    • A 32x32px ico file, which can automatically generate the TGA and community image

You must create the following game build ZIP to upload:

  • A “markets” game build created with a Steam-library-enabled Ren’Py (details)

You may optionally create the following assets for the Steam store page:

  • A trailer screenshot image (as a loading placeholder for the trailer video) (details)
  • A 1438x810px background image that will appear on your game page (details)

You may optionally create the following asset for the Steam community

  • A 32x32px JPG for the community icon (which can be automatically generated from your ico file above) (details)

You may optionally create the following asset for the client

  • A 16x16px TGA for the client icon (which can be automatically generated from your ico file above) (details)

You may optionally create the following assets for achievements:

  • Two 256x256px JPG images for each achievement, representing the locked and unlocked states (details)

For more step-by-step guidance, read on.

(The above steps do not all apply for additive content such as a demo, DLC, a soundtrack, or bundles. Reference the appropriate sections for details.)

Document Changelog

Suggestions and Contact Information

Bob welcomes suggestions, corrections, and additions to this document. You can reach him at bobcgames(at)gmail.com, from his website bobcgames.com, or on Mastodon as @bobcgames@peoplemaking.games.

However, he requests you do not contact him with questions relating to Ren’Py code, including questions about screen language, patch file creation, and achievement code. For such questions, he recommends the official Ren’Py Discord server.

If you found this guide useful, please consider supporting him by donating to YAGS on itch.io or picking up some YAGS swag.