- This is a game written in Python 3 and based on the
Pokémon Red
game. However, it is not intended to be a perfect recreation; think of it as a remix. - Prior in-depth knowledge of the Pokémon franchise, especially the video game series, is recommended and may be required to fully enjoy this game.
- This project (@Pokemon-PythonRed and anything found within) is not endorsed by Nintendo, GAME FREAK, Creatures Inc., or The Pokémon Company. This is an independent, fan-made game.
- This game's plot is a work of fiction! Any references to real people or events are completely coincidental.
- Pokémon PythonRed is a work-in-progress and is intended to be a long-term project. The owners feel no rush to meet community deadlines or expectations. Please be considerate.
- Any problems with the game can be reported in issues.
If you or someone else has been offended or treated poorly by a member of our community, please submit a complaint.
For report options, please see the Enforcement section of the Code of Conduct.
For more information on various topics regarding this project, please visit the following links:
- Code Of Conduct
- Contributing Guidelines
- Contributors List
Current Tasks(closed)- Discussions
- Installation Guide
- Issue Management
- License
- Project Status Updates
- Security Policy
This project follows the all-contributors specification (emoji key, command issue). See what you can do to contribute.
- To play the game, you will need:
- Windows or Linux OS
- Python 3 (aka CPython 3.x)
- Follow this link to download a
.zip
file of this repository. Once it downloads, unzip and open it. - You will need to open a command line in the folder, then run the following command to install dependencies:
python -m pip install -r requirements.txt
-
Finally, open
main.py
in theapp
folder. -
If you encounter any problems when opening the game, feel free to create an issue.
- If you want to contribute to the project, please see the Contributing Guidelines.
- When
>
is shown, press ⏎ Enter to continue. You may need to input text first. - When text bullets are shown, you need to enter the character next to the option you choose.
- In the overworld, navigation bullets are WASD for directional movement, then lettered for interactions. Other commands might also be available.
- Enter the M command from the overworld to open the menu.
- When
Y/N
is shown, you can enter Y or N for "yes" or "no" respectively. - When reading through next normally, you can press any key to proceed.
No text needed, just press ⏎ Enter:
Press Enter to continue.
>_
Type text from a bullet point (e.g. 1 or 2), then press ⏎ Enter:
Choose an option.
[1] - Save
[2] - Quit
>_
Type any variant of yes
, y
, no
, or n
, then press ⏎ Enter:
Would you like to save? Y/N
>_
Press any key:
OAK: Hello there! Welcome to the world of POKéMON!
_
Here's some extra information that isn't required to play the game, but might still be interesting.
Technicalities
Since this is a Python game, some elements will have to be changed from the original version. Here are some examples of challenging changes.
The game has to keep track of the many variables that make up a Save File. These include:
- Trainer info
- Party / Box info
- If a place has been visited, for Fly locations (each city separately)
- If cutscenes have been triggered
- Event flags
- Pokédex
- Game mechanic settings for accessibility
These are stored in a Python dictionary
variable, which is then saved to the external file .ppr-save
via Python's json
module.
Not to be confused with save data, game data is composed of the numbers and calculations that the game uses. These include:
- Pokémon info
- Trainer battle info
- Save file templates
Large sets of data may be stored as .json
files in the project folder. This is done to keep the program files concise. These files may be added, removed, or changed at any time.
Save file templates contain all the things the game must keep track of between sessions. On each save or load, the player's file is automatically updated with the latest data, in case an update was performed. This means that when the game is updated, the player can copy their .ppr-save
file into the new version, and the save file will automatically be updated with the latest data.
Pokémon Red is full of menus that look like the following:
Would you like to save your progress?
> Save
Don't Save
This has been changed to be more suitable for a text-adventure game:
Would you like to save your progress? Y/N
>_
This is done with code similar to the following:
import json
save = {
# Save Data
}
print('Would you like to save your progress? Y/N')
saveOption = ' '
while saveOption.lower()[0] not in ['y', 'n']:
saveOption = input('>') + ' '
if saveOption.lower()[0] in ['y']:
open('.ppr-save', 'w').write(json.dumps(save))
print('Game saved successfully!')
The user can use multiple save files by moving or backing up their .ppr-save
file to a different directory on their device. This has been implemented in the interest of user-friendliness and safety. Save files can easily be backed up, reset, or shared.
Mystery Gifts
Pokémon games use Mystery Gifts to bring communities together and incentivise players to take part in events, and Pokémon PythonRed is no different. Codes can be given out in planned giveaway events to specific people, left online to be found by anyone, or even given in-person to specific people. Most of them are online, so you should try looking in places @TurnipGuy30 has been.
As of the time of writing, Mystery Gifts have not yet been implemented into the game. The base game will have to be completed first. For now, keep track of any codes you find.
Pokémon PythonRed Mystery Gift codes are easy to identify because they will always be given in the following format:
Pokémon PythonRed Mystery Gift #20: "POKEMONPYTHONRED"
(Yes, this is a valid code. Consider it a free trial. You're welcome.)
Redeemed codes will reward a player with in-game items or Pokémon.
Any person or group who finds or receives a code has no responsibility to keep it to themselves unless otherwise stated by the giver of the code.
Mystery Gifts are meant to unite the community and provide a fun way to interact with the game.