Ren'Py How can I make an "Update only" release instead of releasing full version?

GrayTShirt

Well-Known Member
Game Developer
Nov 27, 2019
1,204
6,287
I have no idea how to word this correctly:
My game is getting up in size (current 1.3gb), but it'll start getting bigger more quickly since I've started adding animation. (380kb size webm videos.)
I'll have the full version available for download, but how can I make an "Update Only" release so people won't have to keep downloading over a gb at a time?
I think if I can do "update only" releases, I might be able to update my OP more (but with less content than my typical 3-6month window).

Is there a tutorial or something I can follow? What keywords would I use to search for it?

Thank you!
-GTS
 

GNVE

Active Member
Jul 20, 2018
724
1,185
It isn't that difficult in principle. You pack the game as usual. Unzip and remove everything that hasn't changed since the last update. It helps if you use folders for images/videos and separate rpy files per update/event.
I would advise against making an update only if you go from one renpy version to another.
 
  • Like
Reactions: GrayTShirt

79flavors

Well-Known Member
Respected User
Jun 14, 2018
1,607
2,256
Honestly, I wouldn't bother. More than that, I'd actively recommend you don't.
It'll just cause you headaches, with very little benefit for you.

Players are used to the idea that v0.1 can be 600MB, v0.2 800MB, v0.3 1GB, etc. And that means downloading all the bits they already have to get the new bits. Also think about new players joining the game at v0.6 for example. The obvious solution is a full version of the game and separate patch files... and now you're maintaining two separate versions of your game.

Yes, it's relatively bandwidth inefficient. It is however what the community do with practically every other game (including games that have gone well beyond 4GB).
Once you introduce "something new", you introduce yourself to a whole bunch of people who can't quite grasp the concept of following simple instructions. So keep it simple... and just do what everyone else does.

But some options for you if you really want to make your own life difficult...

Given that a large portion of games end up being bundled up within .rpa archives - actually separating the new bits from the existing bits isn't immediately obvious.
The first solution people look at is configuring the options to put specific files and folders into separate .rpa files. Sounds simple at first glance. Set up folders like /game/images/v0.1/, to keep one version/chapter separate from another. But that overlooks what happens when you discover that you need to fix a bug within the v0.1 script while you're working on the v0.4 release.

RenPy also has a tool it calls the . It uses a tool called zsync to only download the files or partial parts of files that have changed between the version installed on the user's computer and the version hosted on your web server. Except that requires that you HAVE your own web server and the bandwidth to cope with a huge number of freeloaders downloading direct from a server you are paying for.

Personally, I like a tool called . But that will only manually do with the Web Updater does... tell you which files have changed between two copies of your game.
 
  • Like
Reactions: GrayTShirt

terryeon

Newbie
Aug 9, 2017
46
98
Given that a large portion of games end up being bundled up within .rpa archives - actually separating the new bits from the existing bits isn't immediately obvious.
The first solution people look at is configuring the options to put specific files and folders into separate .rpa files. Sounds simple at first glance. Set up folders like /game/images/v0.1/, to keep one version/chapter separate from another. But that overlooks what happens when you discover that you need to fix a bug within the v0.1 script while you're working on the v0.4 release.
Question for you on that.

If scripts.rpa contains all script changes every update.
If archivev0.1.rpa has "images/v0.1" & "videos/v0.1" & whatever else.
If archivev0.2.rpa has "images/v0.2" & so forth....

Does the build.classify need to be used as all the script themselves are being contained in scripts.rpa which is being updated every release and they can offer image updates separately. Fairly sure you could code in a simple check for a 1x1 pixel file added to each v0.x folder released as a separate package for verification they didn't forget to add/download an image package and inform them of which is missing as well on load to prevent issues. But I'm not extremely skilled in the area so I was curious why the build.classify is need for only packages containing images.
 
Last edited:
  • Like
Reactions: GrayTShirt

79flavors

Well-Known Member
Respected User
Jun 14, 2018
1,607
2,256
Does the build.classify need to be used as all the script themselves are being contained in scripts.rpa which is being updated every release and they can offer image updates separately.

build.classify can use whatever set of file filters you like... and yes, bundling all the script files (which are relatively small) into each new release is one way to address some of my reservations.
You could literally bundle all the files beginning with "T" (as an example) into archive_t.rpa (not that you'd want to).

As a programmer who likes technical solutions... this is one rabbit hole I went down - until I realized it was causing me more headaches that it was solving and that I was trying to implement something clever that most players don't even think about.



There's nothing quite so simple as "unpack game... play game".
 

terryeon

Newbie
Aug 9, 2017
46
98
build.classify can use whatever set of file filters you like... and yes, bundling all the script files (which are relatively small) into each new release is one way to address some of my reservations.
You could literally bundle all the files beginning with "T" (as an example) into archive_t.rpa (not that you'd want to).

As a programmer who likes technical solutions... this is one rabbit hole I went down - until I realized it was causing me more headaches that it was solving and that I was trying to implement something clever that most players don't even think about.



There's nothing quite so simple as "unpack game... play game".
Okay, I had a brainfart, this is on the packaging of rpa from the dev building. I was reading it as a function within the game after construction and that had me confused.

I still think the example you gave is quite a good one if this works as I think it does.
You don't have permission to view the spoiler content. Log in or register now.

You can then add a 1x1 pixel image to each archive under v0.x/ and add a verification of said file on the main menu load to ensure no archives are missing via that image placed in each version's folder else popup the missing versions. You'd just include renpy, scripts, and the latest image package in each download and add a link to the old archives for content while adding the previous archive when you post an update.

Sounds like a pain hearing it but pretty simple for the user downloading the game if you use good hosts that offer folder based downloads like mega or gofile for the image archive for 1 click downloads.


You don't have permission to view the spoiler content. Log in or register now.


Either way, thank you for clarifying that. I've always been a bit curious myself as how one would do all that and now I'm aware so thank you.

EDIT: I realized this isn't something you can do with a mobile phone version after posting and probably no one wants to do it on a tablet either. This is simple on a PC or mac but other hardware would probably still require you to offer up everything in a single download. That may explain why this type of thing isn't done as often as a lot offer that for mobile/tablet users.
 
  • Like
Reactions: GrayTShirt

anne O'nymous

I'm not grumpy, I'm just coded that way.
Modder
Donor
Respected User
Jun 10, 2017
10,966
16,215
If scripts.rpa contains all script changes every update.
If archivev0.1.rpa has "images/v0.1" & "videos/v0.1" & whatever else.
If archivev0.2.rpa has "images/v0.2" & so forth....
A side note regarding this:

RPA files are processed in the same way than RPY and RPYC file, therefore in alphabetical order.
In the same time, for the media (image, video, music) Ren'Py will always use the last one found.

Therefore if an image from the version 0.1 is wrong, or if you changed it, you can perfectly add it in an "archivev0.1fix.rpa" file. Like the file name come after "archivev0.1.rpa" in alphabetical order, Ren'Py will automatically replace the faulty image by the correct one.