IF Archive question: zips of zips

A few years ago we added the “View contents” button for zip files stored on the IF Archive. This lets you play web-playable games stored in zip (and tar) files. You can also browse the zip and individual content files if you want.

However, this feature isn’t recursive. If a zip file contains zip files, you can download the sub-zips, but unbox won’t let you browse them or play the double-zipped games directly. For various fussy reasons, this limitation is not going to change, at least not any time soon.

Dan Fabulich scanned the archive and came up with a list of 17 zip files which have sub-zips. Mostly these are in the if-archive/games/mini-comps tree. Smaller comps tend to be uploaded as one big zip file (each); we currently don’t do any further processing.

List of zips

if-archive/collections/Kenneth_Pedersen_Games_1996-2022.zip
if-archive/collections/Victor_Gijsbers_Archive_2004-2019.zip
if-archive/games/bbc/beebgames.zip
if-archive/games/mini-comps/adrift/introcomp2009.zip
if-archive/games/mini-comps/adrift/Spring_Ting_2010.zip
if-archive/games/mini-comps/adrift/summer-comp-2010.zip
if-archive/games/mini-comps/adrift/The_Odd_Competition_2008.zip
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip
if-archive/games/mini-comps/ectocomp/ectocomp2014.zip
if-archive/games/mini-comps/ectocomp/ectocomp2015.zip
if-archive/games/mini-comps/ectocomp/ectocomp2016_grand_guignol.zip
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip
if-archive/games/mini-comps/introcomp/introcomp19.zip
if-archive/games/mini-comps/shufflecomp/Shufflecomp2024.zip
if-archive/games/mini-comps/smoochie/smoochie.zip
if-archive/games/mini-comps/speedif/SpeedIF_Penultimate.zip

How big a problem is this? How hard should we push the utopian goal of “every game file can be viewed or played online”?

The naive solution is just “unzip all these zip files”, but that’s not in general possible. If you look at if-archive/games/mini-comps/ectocomp/ectocomp2023.zip, for example (view contents), you’ll see about 40 files, of which 21 are zip files – but 15 are html files, which we can’t store unpacked.

The options seem to be:

  • Do nothing, it’s fine.
  • Unzip each file into a subdirectory (mini-comps/ectocomp/ectocomp2023/...), but then re-zip each HTML file.
  • Unzip only the sub-zips (e.g. 21 files in ectocomp2023.zip), storing them in a new subdir (mini-comps/ectocomp/ectocomp2023/...)
  • Unzip only the sub-zips, storing them in the appropriate game directory (games/twine, games/glulx, etc.)

(In all cases we’d keep the original “big zip” available. No throwing away original files!)

The second option is rather wasteful; we’d be unzipping a lot of game files for the sake of the few which are zips. The third option feels inconsistent, since we’d have a subdirectory called ectocomp2023 (for example) which doesn’t contain every Ectocomp game. The fourth (which was Dan’s suggestion) seems like a good compromise, but it might be confusing.

Thoughts?

What about something like…

Previously:

comp.zip
    entry1.zip
        entry1.html
        entry1.js
    entry2.html

Becomes:

comp_processed.zip
    entry1/
        entry1.html
        entry1.js
    entry2.html

This preserves the original structure while also working with the unboxer, right?

First, I want to put another item on the menu, at least for the sake of discussion: adding a feature to the IFArchive unboxer to support extracting sub zips.

@Dannii has said that he doesn’t think this is a good idea, and explained why:

Mostly that the Unboxer’s cache is designed for a flat single level. It has the metadata cache, storing the files of each zip, and the file cache (out of which it can quickly get each requested file). If it supported second level zips, would we be caching them all too, including storing the second level zips directly in the file cache? (Keep in mind the cache is already buggy) How do we index them? What about third level zips? It would be adding a lot of complexity to the Unboxer for a marginal improvement.

It’s not impossible that there could be a solid architecture for it, but I think it would need a lot of thought, and I don’t think it’s really worth it.

Dannii’s proposal is to unzip the sub zips. But if it’s unclear whether/how we want to do that, then I think we should leave open the question of whether it is or isn’t “worth it” to make the unboxer support sub zips.

I think Play Online matters a lot, especially for newbies

Second, I want to directly address a question Zarf posed:

Having every game file (that can be played online) be playable online does not sound like a far-off “utopian” goal to me. We’re very close to it already.

In my opinion, “Play Online” is the most important answer to one of the questions that bedeviled interactive fiction as recently as the '00s: how do I even launch this thing?

In the bad old days, the answer was:

Well, first you download the file. Then, you gotta figure out what kind of file it is, probably based on its file extension or other available metadata. Is it Z-Code? Glulx? Blorb? Something else? Here’s a list of formats it might be.

Then, you have to choose an interpreter. I know you don’t even know what an interpreter is, or how you could possibly be expected to choose one, but, here’s a list of interpreters for your operating system, and a list of IF formats that they support (hopefully the list is curated). You’re just gonna have to pick an interpreter off that list, and install it.

Once you’ve downloaded and installed the right interpreter, you can open it, use the interpreter to open the file, and, if you’ve done it all correctly, now at last you can try to figure out how to play the game. Here’s Crazy Uncle Zarf’s reference card… good luck!

Today, the answer is: “There’s a Play Online link. You click it. If you want to play offline, which is something you’d want to do after you’ve learned that you enjoy this stuff, you can learn what an interpreter is, and then try out some interpreters with a few of your favorite game files, just to see what you like.”

In my opinion, games with no “Play Online” link effectively have a big “no newbies welcome” sign on the window. I think that’s pretty bad, and I, at least, am willing to dedicate some volunteer energy towards addressing that.

I’ve run into this before, wanting to play a game that was double-zipped and so having to go through downloading the big zip, unzipping it, and then unzipping the individual game folder. It would be so much easier if these games were playable online instead, so I’m a big supporter of implementing a way (whichever way it is) to do that.

This is even more important for games that won’t launch locally. It’s possible that I’m among a very small handful of people producing things with this sort of behaviour, but if you download Quest for the Teacup of Minor Sentimental Value or The Golden King and load index.html in your browser, they simply won’t run. A browser security feature intended to prevent cross-site scripting stops them from reaching the JavaScript files distributed alongside the HTML.

If you know what you’re doing then you can make that whole directory a localhost server and run index.html that way, but to me that’s even more complicated than the usual “bad old days” approach. I’m sure there are plenty of people out there who’d think nothing of starting a parser game in an interpreter, but would simply assume one of these things were broken if they tried to download and run it.

I have a PR to make Unbox support zips of zips.

In a comment on the PR, I wrote:

I think the biggest concern with this PR are unknown unknowns. In a comment on Slack (copied and pasted to #69), Dannii wrote:

(Keep in mind the cache is already buggy)

If the cache is buggy now, this PR might increase the complexity of the cache, making it harder to debug.

But, as we discussed on https://intfiction.org/t/if-archive-question-zips-of-zips/82022 it’s not clear that extracting sub zips is a good use of volunteer effort.

If the cache is still buggy, we kinda have to fix it. But if/once we think the cache is working, I think we should merge this PR, or something like it.

For the record, is this code AI-assisted?

If it’s really only 17 zips then I think we should just process them. I like @Draconis’s proposal.

Though maybe the IF Archive admin panel could show a warning for nested zips so further ones don’t get added?

I agree it’s a bad idea to unzip zips of zips every single time the file is being requested on the server.

Just make each game from these zips available separately and let people play those directly, and leave the big files there for others that want to download everything in one go.

It’s 17 zips containing 68 sub-zips. (Plus a commitment to always manually re-process all sub-zips that any competition ever submits us in the future.)

68 sub-zips is still kinda manageable but it’s pretty painful to do by hand.

I was imagining the option that Zarf described as: “Unzip only the sub-zips, storing them in the appropriate game directory (games/twine, games/glulx, etc.)”

To do that, someone (I??) would have to download all 17 of the zips that contain zips, unzip them, re-upload the sub-zips using the web form, and then manually move each file into its target location, manually applying metadata to each. I filed a PR https://github.com/iftechfoundation/ifarchive-admintool/pull/67 to make it possible to script this process. I’d be willing to do it if we thought that’s the right approach and if I were allowed to use an API to do it. I would not, personally, be willing to do it if I had to do it manually (without an API) on all 68 sub-zips, but perhaps someone would.

(Note that we’d have to continue to do this job in perpetuity, every time a competition sent us a zip of zips.)

Alternately, if we’re doing it the way @Draconis suggested, I guess I can automatically download all 17 zips-of-zips, automatically unzip them, unzip sub-zips, re-zip the contents, and re-upload them to the archive. Then I’d only need to manually handle the 17 zips-of-zips rather than the 68 sub-zips.

Presumably the new Draconis-style zips would (gulp) replace the original zips? (Would there be backups? Where? My laptop?)

When we settle on a plan, I’ll merge the PR, if needed.

We’re keeping the original zips regardless.

I should note one “easy” case: if-archive/games/bbc/beebgames.zip is all sub-zips (no HTML, obviously). There’s no reason not to unpack them into the games/bbc directory.

Your spreadsheet only names 11 of the 36 games in there, by the way. What was the reason behind that? The Scott Adams games are stored elsewhere, and I guess Countdown to Doom is in phoenix/games/bbc/, but that’s still not all of them. (And it’s still worth either storing or symlinking the games in games/bbc, depending on whether the zips are identical.)

My script excluded games that had already been made available unpacked elsewhere on the archive.

For the record, here's the output.

sub-zips-to-extract.tsv.zip (4.5 KB)

parent_path nested_member_path tuid proposed_path description
if-archive/collections/Kenneth_Pedersen_Games_1996-2022.zip Grandma’s Flying Saucer.zip p8evueig4717wx4 if-archive/games/adrift/Grandma’s Flying Saucer.zip Grandma’s Flying Saucer, by Kenneth Pedersen. Release 1 / Serial number 220424.
if-archive/collections/Kenneth_Pedersen_Games_1996-2022.zip Grandpa’s Ranch PostCompRelease.zip auocp18rdh3uxzp9 if-archive/games/adrift/Grandpa’s Ranch.zip Grandpa’s Ranch, by Kenneth Pedersen. Release 4 / Serial number 210804.
if-archive/collections/Victor_Gijsbers_Archive_2004-2019.zip Archive 2004-2019/Games - Complete/2012 Nemesis Macana/Nemesis Macana Materials/Release/Nemesis Macana.zip 1cd4ja4ralbouxxb if-archive/games/zcode/Nemesis Macana.zip Nemesis Macana, by Herman Schudspeer, Victor Gijsbers. Release 1 / Serial number 120503.
if-archive/games/bbc/beebgames.zip DragonsTooth.zip v99nghmx071lrwvu if-archive/games/bbc/Dragon’s Tooth.zip Dragon’s Tooth, by Anonymous.
if-archive/games/bbc/beebgames.zip HauntedAbbey.zip 1i7ipxidp4yg0w5k if-archive/games/bbc/The Haunted Abbey.zip The Haunted Abbey, by Dr. Leslie E. Klein.
if-archive/games/bbc/beebgames.zip HuntSearchForShauna.zip vnmxrjyj6kzvdmeb if-archive/games/bbc/The Hunt Search for Shauna.zip The Hunt: Search for Shauna, by Ian Muriss.
if-archive/games/bbc/beebgames.zip LabyrinthsOfLaCoshe.zip olfuzcbtmur4o5uw if-archive/games/bbc/Labyrinths of LaCoshe.zip Labyrinths of LaCoshe, by Anonymous.
if-archive/games/bbc/beebgames.zip Oxbridge.zip 6fbmarzl4qfm6o0w if-archive/games/bbc/Oxbridge.zip Oxbridge, by C H B Jack.
if-archive/games/bbc/beebgames.zip SagaOfASpy1RickHanson.zip 2zy6kxbabrkjxe35 if-archive/games/bbc/Rick Hanson.zip Rick Hanson, by Robert O’Leary and Mike O’Leary.
if-archive/games/bbc/beebgames.zip SagaOfASpy2ProjectThesius.zip 550yn7z07xw2i1jf if-archive/games/bbc/Project Thesius.zip Project Thesius, by Mike O’Leary and Robert O’Leary.
if-archive/games/bbc/beebgames.zip SagaOfASpy3Myorem.zip 8egjgodx17oca68s if-archive/games/bbc/Myorem.zip Myorem, by Mike O’Leary and Robert O’Leary.
if-archive/games/bbc/beebgames.zip SecretSamMission2.zip kjxuya4o4cupicsc if-archive/games/bbc/Secret Sam Mission 2.zip Secret Sam Mission 2, by Don MacLeod.
if-archive/games/bbc/beebgames.zip Startrek.zip t3k2jon2e2ob04a6 if-archive/games/bbc/Star Trek Adventure.zip Star Trek Adventure, by Anonymous.
if-archive/games/bbc/beebgames.zip VillageOfLostSouls.zip xusfx4h3gpy81zpq if-archive/games/bbc/Village of Lost Souls.zip Village of Lost Souls, by Martin Moore and Glenn McAuley.
if-archive/games/mini-comps/adrift/Spring_Ting_2010.zip Egghunt.zip xsmj7098j838n5l8 if-archive/games/mini-comps/adrift/Spring_Ting_2010/Easter Egg Hunt.zip Easter Egg Hunt, by Ian Thomson. Serial number 100430.
if-archive/games/mini-comps/adrift/Spring_Ting_2010.zip WGHN.zip 55myhkpbgmwedw5z if-archive/games/mini-comps/adrift/Spring_Ting_2010/Wes Garden’s Halting Nightmare.zip Wes Garden’s Halting Nightmare, by Jubell. Serial number 100531.
if-archive/games/mini-comps/adrift/The_Odd_Competition_2008.zip asteroid_aftermath.zip p9721y8wl37duxik if-archive/games/mini-comps/adrift/The_Odd_Competition_2008/Asteroid Aftermath.zip Asteroid Aftermath, by Duncan Bowsman. Serial number 080916.
if-archive/games/mini-comps/adrift/introcomp2009.zip introcomp/TMN.zip hr1nvj7aausn73vn if-archive/games/mini-comps/adrift/introcomp2009/The Magician’s Niece.zip The Magician’s Niece, by Eric Anderson. Serial number 090519.
if-archive/games/mini-comps/adrift/summer-comp-2010.zip Aegis.zip wceeesnpko5hcydg if-archive/games/mini-comps/adrift/summer-comp-2010/Aegis.zip Aegis, by Lumin. Serial number 100802.
if-archive/games/mini-comps/adrift/summer-comp-2010.zip Ba’Roo.zip e4glkj6scwvwey4f if-archive/games/mini-comps/adrift/summer-comp-2010/Ba’Roo!.zip Ba’Roo!, by Hensman Int’l. Serial number 100802.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/Blackness.Ectocomp.2013.zip 72sn7wkuew6579u4 if-archive/games/zcode/Blackness.zip Blackness, by Michael Phipps. Release 1 / Serial number 131026.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/Boogle.zip 6ec16khm357uu89f if-archive/games/html/Boogle.zip Boogle, by Buster Hudson.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/The Hallway Phantom.zip dq73dhz1amm5j8rq if-archive/games/html/The Hallway Phantom.zip The Hallway Phantom, by Tyler Zahnke.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/TrickOrTreat.zip xyc9iq7i5eucad1o if-archive/games/html/A Trick-or-Treat Adventure.zip A Trick-or-Treat Adventure, by Adelynn Snyder.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/profile.zip zrig9potqpe45zzn if-archive/games/hugo/The Profile.zip The Profile, by Mike Snyder.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/theargumentwinnersghostectocompentry.zip kfxpc2jfv1u8bmf7 if-archive/games/zcode/The Argument-Winner’s Ghost.zip The Argument-Winner’s Ghost, by Andrew Schultz. Release 1 / Serial number 131031.
if-archive/games/mini-comps/ectocomp/ectocomp2013.zip Ectocomp_2013/zdz.zip p24lat8czguki16c if-archive/games/html/ZombieDating.zom.zip ZombieDating.zom, by Mike Snyder.
if-archive/games/mini-comps/ectocomp/ectocomp2014.zip IDSPISPOPD (1).zip 5zr8n7lniwmac39k if-archive/games/html/IDSPISPOPD.zip IDSPISPOPD, by Christopher Brent.
if-archive/games/mini-comps/ectocomp/ectocomp2014.zip LISEY_def.zip khclq55krtwb5ruy if-archive/games/glulx/LISEY.zip LISEY, by Marco Innocenti. Release 1 / Serial number 141031.
if-archive/games/mini-comps/ectocomp/ectocomp2015.zip ECTOCOMP_2015/La Petite Mort/Open That Vein.zip aynqilyjkha55aoa if-archive/games/zcode/Open That Vein.zip Open That Vein, by Chandler Groover. Release 1 / Serial number 151029.
if-archive/games/mini-comps/ectocomp/ectocomp2015.zip ECTOCOMP_2015/La Petite Mort/TheGhostShip.zip ej1ojzk3h40ao1md if-archive/games/zcode/The Ghost Ship.zip The Ghost Ship, by Jonathan Snyder. Release 1 / Serial number 151009.
if-archive/games/mini-comps/ectocomp/ectocomp2015.zip ECTOCOMP_2015/La Petite Mort/foodrinksgirls.tar.gz ycqc6upkqb6wxlu2 if-archive/games/html/Food, Drink, Girls.zip Food, Drink, Girls, by Roboman.
if-archive/games/mini-comps/ectocomp/ectocomp2015.zip ECTOCOMP_2015/Le Grand Guignol/Invasion.zip r2y6iry1bz5lkpht if-archive/games/html/Invasion.zip Invasion, by Cat Manning.
if-archive/games/mini-comps/ectocomp/ectocomp2016_grand_guignol.zip LE-GRAND-GUIGNOL/Bring-Me-A-Head.zip vhud0bjh6zdz702z if-archive/games/html/Bring Me A Head!.zip Bring Me A Head!, by Chandler Groover.
if-archive/games/mini-comps/ectocomp/ectocomp2016_grand_guignol.zip LE-GRAND-GUIGNOL/sittings-v1.1.zip f7a6q8ckas89f36f if-archive/games/html/Four Sittings in a Sinking House.zip Four Sittings in a Sinking House, by Bruno Dias.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/Going home.zip 20fjuqknnjt1t3ul if-archive/games/html/Going Home.zip Going Home, by Santiago Eximeno.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/Howled House.zip ljzbc8h1m9r9jt0a if-archive/games/html/Howled House.zip Howled House, by B Minus Seven.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/Low.zip uxs2s81b63bfygxr if-archive/games/glulx/Low.zip Low, by Peregrine Wade. Release 1 / Serial number 161016.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/The Train of Life.html.zip 4qgc0hwehff7zdno if-archive/games/html/The Train of Life.zip The Train of Life, by Marco Innocenti.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/a-checkered-haunting.zip eid2gsps9yl5jm83 if-archive/games/zcode/A Checkered Haunting.zip A Checkered Haunting, by Andrew Schultz. Release 1 / Serial number 161031.
if-archive/games/mini-comps/ectocomp/ectocomp2016_petite_mort.zip LA PETITE MORT/light into darkness.zip o6iksmr9gx8d99bj if-archive/games/zcode/Light into Darkness.zip Light into Darkness, by Christina Nordlander. Release 1 / Serial number 161030.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Billie Night (Sequentia Soft).zip 11smn4ovx9n57f54 if-archive/games/spectrum/BILLIE NIGHT.zip BILLIE NIGHT, by Sequentia Soft (Fran Kapilla).
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Chasquidos-v0.5.1.zip k1ik4gcjn78bk500 if-archive/games/html/Chasquidos.zip Chasquidos, by binary-sequence.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip ConfigurationUploader.zip 3tbbnsnszvx0hoce if-archive/games/html/ConfigurationUploader.zip ConfigurationUploader, by Autumn Chen.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Dark Communion.zip 5p17to8jy6b1q4u2 if-archive/games/html/Dark Communion.zip Dark Communion, by alyshkalia.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip ForeverAndEver_postjamdl.zip 58mtdzk9nq058ro2 if-archive/games/html/Forever and Ever.zip Forever and Ever, by PetricakeGames-IF.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip GoodBones.zip yqiczwd0hkr7ivxo if-archive/games/html/Good Bones A Haunted Housewarming.zip Good Bones: A Haunted Housewarming, by Leon Lin.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Into_Darkness_Zipped_Jacic.zip 7u7j73zzvq0jd7t7 if-archive/games/html/~Into Darkness~.zip ~Into Darkness~, by Jacic.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Ohfwerhld_v1.0_OfflineCopy.zip phlz1cmrgl2gr5cc if-archive/games/html/Öhfwërhld.zip Öhfwërhld, by Bruhstin.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Red haze_Bruma roja.zip m3koxkgbyhdwb54c if-archive/games/html/Red Haze Bruma Roja.zip Red Haze / Bruma Roja, by Ruber Eaglenest.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Roads of Liches.zip 9wdfsydvnzgbpfs9 if-archive/games/zcode/Roads of Liches.zip Roads of Liches, by Andrew Schultz. Release 1 / Serial number 231030.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip Taller Tech Mauler Mech.zip mkae1vl4fb2nvttv if-archive/games/zcode/Taller Tech Mauler Mech.zip Taller Tech Mauler Mech, by Andrew Schultz. Release 1 / Serial number 231031.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip a-study-of-human-behavior.zip veqi3o9c7nvvzhk0 if-archive/games/glulx/A Study of Human Behavior.zip A Study of Human Behavior, by Earth Traveler. Release 1 / Serial number 231031.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip bonfire-night-the-black-dog.zip 4i6bcia4kwylt4df if-archive/games/glulx/Bonfire Night The Black Dog.zip Bonfire Night: The Black Dog, by Carter X Gwertzman. Release 1 / Serial number 231105.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip el-fin-de-la-historia.zip t5nmdeew9ltaqmbl if-archive/games/html/El Fin de la Historia.zip El Fin de la Historia, by n-n.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip end-of-history.zip x5z9jk7bxst5wsz4 if-archive/games/html/End Of History.zip End Of History, by n-n.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip haunted-house-for-social-phobics.zip 4kmbajm743rfogw3 if-archive/games/html/Haunted House for Social Phobics.zip Haunted House for Social Phobics, by Stewart C Baker.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip labyrinthine.zip b992cr2h1gcxfs6u if-archive/games/glulx/The Labyrinthine Library of Xleksixnrewix.zip The Labyrinthine Library of Xleksixnrewix, by Daniel Stelzer, Ada Stelzer, and Sarah Stelzer. Release 1 / Serial number 231029.
if-archive/games/mini-comps/ectocomp/ectocomp2023.zip the-revenants-lament.zip quflifg2tqxwezqt if-archive/games/html/The Revenant’s Lament.zip The Revenant’s Lament, by 30x30.
if-archive/games/mini-comps/introcomp/introcomp19.zip introcomp2019/DEADLINE.zip ox79nq87mllk44qo if-archive/games/html/DEADLINE.zip DEADLINE, by Jeff Schomay.
if-archive/games/mini-comps/introcomp/introcomp19.zip introcomp2019/Homeland.zip g2s43ak6my3t7in3 if-archive/games/zcode/Homeland.zip Homeland, by Jason Self. Release 0 / Serial number 190728.
if-archive/games/mini-comps/introcomp/introcomp19.zip introcomp2019/Memorosa.zip 3xtvnclanf1fsfxk if-archive/games/html/Memorosa.zip Memorosa, by Enrique Henestroza Anguiano.
if-archive/games/mini-comps/introcomp/introcomp19.zip introcomp2019/Steamed Hams, but It’s a Twine Game.zip splj92utazd41mnz if-archive/games/html/Steamed Hams, but It’s a Twine Game.zip Steamed Hams, but It’s a Twine Game, by Damon L. Wakes.
if-archive/games/mini-comps/introcomp/introcomp19.zip introcomp2019/Sunder.zip klycfvmdwwwm42o5 if-archive/games/html/Sunder.zip Sunder, by K.G. Orphanides.
if-archive/games/mini-comps/shufflecomp/Shufflecomp2024.zip ALGfaBH 1.0.zip owxgii61ndvy6q1 if-archive/games/html/A Little Guidance for A Big Heart.zip A Little Guidance for A Big Heart, by Norbez Jones (call me Bez).
if-archive/games/mini-comps/shufflecomp/Shufflecomp2024.zip Raven & Cardinal 1.0.zip pr988hqpvu69xalf if-archive/games/html/Raven & Cardinal.zip Raven & Cardinal, by Norbez Jones (call me Bez).
if-archive/games/mini-comps/smoochie/smoochie.zip Bantam.zip i3xvnq3vv5h0c38y if-archive/games/alan/Even Bantams get the Blues.zip Even Bantams get the Blues, by Eric Mayer.
if-archive/games/mini-comps/speedif/SpeedIF_Penultimate.zip Mammoth Vacuum Button of Death.zip r6p8jra09jzg13t5 if-archive/games/adrift/Mammoth Vacuum Button of Death.zip Mammoth Vacuum Button of Death, by Daniel Airey. Serial number 111222.

In that case, I think Draconis-style zips is the option that wastes the most space.

In many cases, e.g. Kenneth_Pedersen_Games_1996-2022.zip, most of the zip doesn’t need extraction; just a couple of sub-zips need to be extracted in order for them to be playable online.

If we replace Kenneth_Pedersen_Games_1996-2022.zip with a Draconis-style zip, with the sub-zips extracted into the zip, then we don’t have to find an individual location on the archive for Grandma’s Flying Saucer and Grandpa’s Ranch, and we won’t be wasting space having a copy of the games in Kenneth_Pedersen_Games_1996-2022.zip and in if-archive/games/adrift.

But if we leave the original Kenneth_Pedersen_Games_1996-2022.zip in place as well, then a Draconis-style zip would duplicate all of the games in Kenneth_Pedersen_Games_1996-2022.zip, even the ones that didn’t need to be extracted.

Is the risk that the proposed ability to unzip zips of zips might break the whole unbox service?

If not, and it’s just that the new feature might not work, then why not give it a go? It seems by far the simplest option.

When a game gets zipped up as part of a comp, and that game later gets a post-comp release, this is where the post-comp version goes, correct? Games/glulx or similar?

If you did this

then could you end up with an Ectocomp game in the ectocomp2023 directory (the comp version) and then a post-comp release of that same Ectocomp game in games/glulx? That to me seems potentially more confusing than putting the (previously sub-zipped) individual games in games/glulx to begin with.

Yes. It’s a complicated PR on a service which already has an ongoing cache bug. The IF Archive and related systems really have to be completely bulletproof; they’re supposed to stay up for years with no maintenance. Any change proposals have to be interrogated with a big magnifying glass, pardon my mixed metaphor.

Is this the cache bug?

Yeah. I think it’s a race condition.

I’m going to rewrite the Unboxer in typescript and hopefully make it a little more reliable, but we can still update the current code if you do figure out a fix.

I think this will fix it.

Wow, thank you for identifying it! I think you’re right, it definitely sounds like the cause.

It’s also a bug that would have been prevented by Typescript, so I definitely want to proceed with that plan.

(I actually got stuck upgrading the Ubuntu Docker image because the locales commands I was using stopped working. The actual Typescript update should go much faster.)

Someone missed an easter-egg of an opportunity to write “by hand, solo”