# ./play.it platform games collection

The codebase is maintained at [https://git.dotslashplay.it/games-platform/]

Bug reports should be sent to [bugs@dotslashplay.it], and support requests to [requests@dotslashplay.it]

[https://git.dotslashplay.it/games-platform/]: https://git.dotslashplay.it/games-platform/
[bugs@dotslashplay.it]: mailto:bugs@dotslashplay.it
[requests@dotslashplay.it]: mailto:requests@dotslashplay.it

## Description

./play.it is a free software building native packages from installers for Windows or Linux, mainly those sold by stores focusing on DRM-free games distribution. The goal is that a game installed via ./play.it is indistinguishable from a game installed via the official repositories of your favourite distribution.

This specific collection includes only platform games. These games focus on navigating through levels, often requiring precise jumps. Some of them may include puzzles, time constraints, or action-based combat. Player dexterity is expected to play a big part.

## Installation

### Distributions providing ./play.it

The following distributions provide installation instructions in their official documentation:

- [Debian]
- [Gentoo]
- [Ubuntu] (French article)

[Debian]: https://wiki.debian.org/Games/PlayIt#Installation
[Gentoo]: https://wiki.gentoo.org/wiki/Play.it#Installation
[Ubuntu]: https://doc.ubuntu-fr.org/play.it#installation

In most cases, these instructions should work in the same way for derivatives of these distributions.

### Installation from git

If your distribution does not already have a package for this ./play.it collection, you can install it from this git repository.

```
git clone --branch main --depth 1 https://git.dotslashplay.it/games-platform play.it-platform.git
cd play.it-platform.git
make install
```

## Usage

Usage instructions are provided on the main ./play.it repository: [./play.it: Installer for DRM-free commercial games — Usage]

[./play.it: Installer for DRM-free commercial games — Usage]: https://git.dotslashplay.it/scripts/about/#usage

## Contributing

### First contribution

There is no real rule for your first contribution. You can host your updated code anywhere you like and contact us via any way described in the [Contact information] section below. It is OK to expose your updated code through GitHub or GitLab.com if you have nothing better at hand, but we would be thankful if you would instead use some hosting outside of these big silos.

[Contact information]: #contact-information

We do not enforce any workflow like merge/pull requests or any such thing. We are interested in the result of your work, not in how you got to it. So shatter your shackles, and for once take pleasure in working *however you like*! You are not even required to use git if you do not know or do not like this tool.

Please try to follow these simple guidelines, and your contribution is probably going to be accepted quickly:

- Run `make check` before submitting your code, to ensure you did not break anything by accident;
- Use tabs for indentation. No real developer would ever indent anything with spaces.

### Regular contributions

If you keep contributing on a more regular basis (sending 3 patches in the same year would already make you a regular) we can grant you direct write access to the repositories hosted at git.dotslashplay.it. This is not mandatory, if for some reason you can not or do not want to work with git you can simply keep following the "First contribution" guidelines, and forget about this whole "Regular contributions" section.

To grant you such an access we need nothing but a public SSH key, that you can send us through any way described in the [Contact information] section below.

[Contact information]: #contact-information

Once you have been granted access, you should add the following to your local SSH configuration:

```
Host git.dotslashplay.it
    Port 1962
    User gitolite3
```

You should then update the remote of your local repository, with the following command (assuming a remote named "upstream"):

```
git remote set-url --push upstream ssh://git.dotslashplay.it/games-platform
```

Since these repositories are worked on by several people, there are a couple extra guidelines that you should follow:

- Your work should always be pushed to a dedicated branch, never on the main branch;
- Game script updates, including bug fixes, should be pushed to branches named with a "update/" prefix;
- Addition of new game scripts should be pushed to branches named with a "new/" prefix;
- You are allowed to push code to branches opened by other contributors, but please communicate with them if you plan to do so;
- Force push and branches deletion are not allowed, if you want a branch to be deleted please ask us to do it for you.

### Collection maintenance

If you really like this collection, you might wish to start co-maintaining it. That kind of help would be most welcome!

This implies more trust than a contributor access, but there are safeguards in place so there is no risk for you to break anything in a way impossible to revert. So you do not need to be some kind of "git guru" to be granted access, the only skill really required is some real interest for the games supported in this collection.

The main difference with a contributor access is that you are no longer limited to the `update/*` and `new/*` branches, you can update the `main` branch too, the one that is installed by ./play.it users and that is used to build packages for Linux distributions including ./play.it in their repositories.

To reduce risks of breakages, please always run the full collection of tests prior to sending an update to the main branch:

```
make check
```

A good way to never forget about it is to set a git hook, an executable .git/hooks/pre-push file with the following content:

```
#!/bin/sh
set -o errexit

# Check the syntax of all game scripts, using ShellCheck.
make --jobs=$(nproc) check

exit 0
```

## Supported games

- 140
- 1365
- 6180 The Moon
- A Boy and His Blob
- A Hat in Time
- A Story About My Uncle
- A Tale of Paper
- Arise: A Simple Story
- Ascendant
- Beatbuddy: Tale of the Guardians
- Binaries
- Biped
- Braid
- Bubbles the Cat
- Candleman
- Capsized
- Cats are Liquid series:
    - Cats are Liquid: A Light in the Shadows
    - Cats are Liquid: A Better Place
- Celeste
- Chronology
- Closure
- Creaks
- Dark Echo
- Dead Cells
- Deadlight
- Disney 1993-1994 platformers:
    - Aladdin
    - The Jungle Book
    - The Lion King
- Dreaming Sarah
- Dustforce DX
- Earthworm Jim
- Element4l
- Elephantasy
- Escape Goat series:
    - Escape Goat
    - Escape Goat 2
- Evan's Remains
- Feist
- Fez
- Flat Kingdom
- Forgotton Anne
- Fossil Echo
- Fotonica
- Four Sided Fantasy
- Giana Sisters series:
    - Giana Sisters: Twisted Dreams
    - Giana Sisters: Rise of the Owlverlord
- Gris
- Guacamelee
- Hoa
- Hollow Knight
- Indivisible
- Itorah
- Kero Blaster series:
    - Kero Blaster
    - Pink Heaven
    - Pink Hour
- La-Mulana
- Limbo
- Little Bug
- Little Nightmares
- Lost Ruins
- Lost Words: Beyond the Page
- Mable and the Wood
- Mark of the Ninja
- Minute of Islands
- Mirror's Edge
- Mobius
- Momodora: Reverie Under the Moonlight
- Mushroom 11
- My Rabbits Are Gone
- Never Alone
- Nihilumbra
- Noita
- NyxQuest: Kindred Spirits
- Oddworld: Abe's Oddysee
- One Hand Clapping
- Ori and the Blind Forest
- Out of Line
- Owlboy
- Papo and Yo
- Pandemonium
- Pikuniku
- Pid
- Pinstripe
- Prince of Persia series:
    - Prince of Persia: The Sands of Time, supported in another collection: [https://git.vv221.fr/play.it/games-vv221/about/]
    - Prince of Persia (2008)
- Project Feline
- Psychonauts
- Puddle
- Rogue Legacy
- Scarf
- Seasons After Fall
- Shantae and the Pirate's Curse
- Shovel Knight
- Space Tail: Every Journey Leads Home
- Spelunky
- Spiritfarer
- SteamWorld setting:
    - SteamWorld Dig
    - SteamWorld Dig 2
    - SteamWorld Heist, supported in another collection: [https://git.dotslashplay.it/games-action-adventure/about/]
    - SteamWorld Quest, supported in another collection: [https://git.dotslashplay.it/games-rpg/about/]
- Steel Rats
- Sunblaze
- Sundered
- Super Meat Boy
- Supercow
- Symphonia
- Tag: The Power of Paint
- Tandem: A Tale of Shadows
- Teslagrad
- The Adventures of Shuggy
- The Deer God
- The Girl and the Robot
- The King's Bird
- The Smurfs: Mission Vileaf
- Thomas Was Alone
- Time Loader
- Tiny & Big in Grandpa's Leftovers
- Tiny Hunter
- Toki Tori 2
- Toren
- Trine series:
    - Trine
    - Trine 2
- Tulpa
- Volgarr the Viking
- VVVVVV
- Wandersong
- WitchWay
- Wonder Boy: The Dragon's Trap
- World to the West
- Yoku's Island Express
- Yooka Laylee

[https://git.dotslashplay.it/games-action-adventure/about/]: https://git.dotslashplay.it/games-action-adventure/about/
[https://git.dotslashplay.it/games-rpg/about/]: https://git.dotslashplay.it/games-rpg/about/
[https://git.vv221.fr/play.it/games-vv221/about/]: https://git.vv221.fr/play.it/games-vv221/about/

## Contact information

### IRC channel

Some ./play.it developers and users can be reached on IRC, channel is `#play.it` on network `irc.oftc.net`. The main language on this IRC channel is English, but most of us can speak French too.

### E-mail

A contact e-mail for feedback can usually be found in each ./play.it game script, as well as in the library. Open one of these files with any text editor to see the contact e-mail.

## blackhole.vv222.fr

Instead of getting access to this git repository, or any other ./play.it-related Web stuff, you might get redirected to blackhole.vv222.fr
where you get a slow trickle of nonsensical French text with a couple hyperlinks. This is a trap for generative AI scraping bots
that have been attacking ./play.it server relentlessly for a long time.

If you get hit by this forced redirection this means you are trying to reach a Web page from an IP provided by a known bad ISP,
one who already took part in mass attacks against our server. Then the most effective way to avoid the redirection is to use another ISP,
one that is not providing resources to DDoS attacks in favour of generative AI companies.

If you can not access Internet using another ISP then please get in touch through one of the contact methods listed above,
and we can unblock either your IP or your whole ISP.
