Skip to content

Commit 8a79c7f

Browse files
author
saffron
committed
move bulk of site README.md to /wiki/README.md; point wiki from /wiki/pygbag/ -> /wiki/
- before, the site's main page refers to a wiki while also exposing some documentation on that main page. this was very confusing to me: was I supposed to use the wiki for information or the main page? - this way, the main page is clean is it is clear it exists to be a CDN root, while pointing to a definitive source of information, the wiki page.
1 parent b0ee1f8 commit 8a79c7f

File tree

2 files changed

+200
-199
lines changed

2 files changed

+200
-199
lines changed

README.md

Lines changed: 2 additions & 199 deletions
Original file line numberDiff line numberDiff line change
@@ -1,207 +1,10 @@
11
# pygame-web.github.io
22

3-
This is the CDN root used by [Pygbag](https://pypi.org/project/pygbag/) ([Source code](https://github.com/pygame-web/pygbag)/[Old runtimes](https://github.com/pygame-web/archives)) and the site of its [wiki](/wiki/pygbag).
3+
This is the CDN root used by [Pygbag](https://pypi.org/project/pygbag/) ([Source code](https://github.com/pygame-web/pygbag)/[Old runtimes](https://github.com/pygame-web/archives)) and the site of its [wiki](/wiki/).
44

55
Pygbag does not track usage at all, not even for statistical purposes. If you like it, please [star](https://github.com/pygame-web/pygbag/stargazers) the repository!
66

7-
Check out some [demos](#demos-on-itchio) before you start!
8-
9-
## Important points
10-
11-
Read Pygbag's [project description](https://pypi.org/project/pygbag/) for a more detailed overview. A full packaging guide can be found [here](/wiki/pygbag/).
12-
13-
**<ins>Also, read the page on [making your code compatible with browser game loop](/wiki/python-wasm). You will probably have to change some of your code.</ins>**
14-
15-
### All operating systems
16-
17-
- Name your main game script `main.py` and put it in the root folder of your game.
18-
- Make your main loop async-aware and use `asyncio.sleep(0)` every iteration to give control back to the main thread.
19-
- Add `--template noctx.tmpl` to pygbag command line if using 3D/WebGL.
20-
- Put the import statements of complex packages in order (but numpy first) at the top of `main.py`.
21-
- Avoid using CPython's standard library for web operations, GUI (like tkinter), or I/O as it is very synchronous/platform-specific and will probably stay that way. In terms of GUI alternatives, [pygame_gui](https://pypi.org/project/pygame_gui) works on top of [pygame-ce](https://pyga.me), [Panda3D](https://www.panda3d.org/) provides [directgui](https://docs.panda3d.org/1.10/python/programming/gui/directgui/index) and Harfang3D provides imgui. They are all cross-platform.
22-
- You can add a square image file named `favicon.png` in your game's root folder to make Pygbag use it as the web package's favicon.
23-
- Make sure all audio files are in OGG format, and all files are compressed. (that is, not in WAV/AIFF)
24-
- Avoid raw formats like BMP for your image assets, they are too big for web use; use PNG/WEBP or JPG instead.
25-
26-
- Do not use filenames like `*-pygbag.*` that pattern is reserved for pygbag internal use (optimizing pass).
27-
28-
Before packaging, adapt your code this way if you still want WAV/MP3 format on desktop:
29-
```py
30-
if sys.platform == "emscripten":
31-
snd = pygame.mixer.Sound("sound.ogg")
32-
else:
33-
snd = pygame.mixer.Sound("sound.wav") # or .WAV, .mp3, .MP3, etc.
34-
```
35-
36-
if you have heightmaps in your assets use `--no_opt` to prevent png recompression.
37-
38-
if you want to keep pixelated look whatever the device screen size is use:
39-
```py
40-
import sys, platform
41-
if sys.platform == "emscripten":
42-
platform.window.canvas.style.imageRendering = "pixelated"
43-
```
44-
45-
### Windows
46-
47-
- Use Python that was downloaded from python.org rather than the Windows Store. You can check installed version(s) with the `py --list` command.
48-
- Use `/` instead of `\​` as a path separator (e.g. `img/my_image.png` instead of `img\my_image.png`). The path should still be valid on newer Windows versions.
49-
50-
### MacOS
51-
52-
- If you get a SSL error, use the file `Install Certificates.command` in `Applications/Python 3.XX`.
53-
54-
### Linux
55-
56-
- When using webusb ftdi serial emulation, use `sudo rmmod ftdi_sio` after plugging devices.
57-
58-
## Template
59-
60-
There is actually none, because Python-WASM is just a web-friendly version of CPython REPL with [some added facilities](https://discuss.python.org/t/status-of-wasm-in-cpythons-main-branch/15542/12?u=pmp-p). Most desktop code will run (and continue to run) with only a few changes.
61-
62-
Basic structure of a game (available [here](https://github.com/pygame-web/pygbag/tree/main/test)):
63-
```
64-
test
65-
├── img
66-
│   ├── pygc.bmp
67-
│   ├── pygc.png
68-
│   └── tiger.svg
69-
├── main.py
70-
└── sfx
71-
└── beep.ogg
72-
```
73-
74-
Useful .gitignore additions:
75-
```
76-
*.wav
77-
*.mp3
78-
*.pyc
79-
*.egg-info
80-
*-pygbag.???
81-
/build
82-
/dist
83-
```
84-
85-
## Coding
86-
87-
- [General Python-WASM](/wiki/python-wasm/)
88-
- [With Pygbag specifically](/wiki/pygbag-code/)
89-
- [Pygbag code examples](/wiki/pygbag-code/#pygbag-code-specifics-samples-)
90-
91-
## Adding modules
92-
93-
- [List of available wheels](/wiki/pkg/)
94-
- [requesting modules](https://github.com/pygame-web/pkg-porting-wasm/issues)
95-
96-
When importing complex packages (for example, numpy or matplotlib), you must put their import statements at top of `main.py`. You should also add a metadata header as specified by [PEP 723](https://peps.python.org/pep-0723/), for example:
97-
```
98-
# /// script
99-
# dependencies = [
100-
# "six",
101-
# "bs4",
102-
# "markdown-it-py",
103-
# "pygments",
104-
# "rich",
105-
# "mdurl",
106-
# "textual",
107-
# ]
108-
# ///
109-
```
110-
111-
If using pygame-zero (mostly untested), put `#!pgzrun` near the top of main.py. (2nd line is perfect if the file already has a shebang)
112-
113-
## Debugging / Desktop Simulator
114-
115-
- [How to enter debug mode](/wiki/pygbag-debug/)
116-
- While working, you can access the simulator of the web loop by replacing `import asyncio` by `import pygbag.aio as asyncio` at top of main.py and run the program from the folder containing it.
117-
- TODO: Android remote debugging via [chromium browsers series](https://developer.chrome.com/docs/devtools/remote-debugging/).
118-
- TODO: Universal remote debugging via IRC Client or websocket using pygbag.net.
119-
120-
## Running
121-
122-
- [Pygbag-script](/wiki/pygame-script/) (WIP)
123-
- [REPL](https://pygame-web.github.io/showroom/python.html?-i-&-X-dev#https://gist.githubusercontent.com/pmp-p/cfd398c75608504293d21f2642e87968/raw/773022eef4a2cc676ab0475890577a2b5e79e429/hello.py)
124-
- [CPython test suite](https://pygame-web.github.io/showroom/pythondev.html?-d#src/testsuite.py%20all) (WIP)
125-
126-
## Publishing
127-
128-
- [Github Pages](/wiki/pygbag/github.io/)
129-
- [Itch.io](/wiki/pygbag/itch.io/)
130-
131-
## Demos
132-
133-
### Demos on itch.io
134-
135-
- [Games using Python-WASM](https://itch.io/c/2563651/pygame-wasm) (Expected to be stable)
136-
- [Panda3D demos](https://itch.io/c/3724091/panda3d-wasm) (Experimental)
137-
138-
### Demos on Github Pages
139-
140-
These are provided for testing purposes only, and might not always work since they use development versions of Pygbag.
141-
142-
#### Heavy CPU load, not for low-end devices
143-
144-
- [Perfect Rain](https://pmp-p.github.io/pygame-perfect-rain-wasm/)
145-
- [Alien Dimension](https://pmp-p.github.io/pygame-alien-dimension-wasm/)
146-
147-
#### Light CPU load
148-
149-
- [Breakout](https://pmp-p.github.io/pygame-breakout-wasm/index.html)
150-
- [PyChess](https://pmp-p.github.io/pygame-pychess-wasm/index.html)
151-
- [Penguins Can't Fly!](https://pmp-p.github.io/pygame-PenguinsCantFly-wasm/)
152-
- [John's Adventure](https://pmp-p.github.io/pygame-JohnsAdventure-wasm/)
153-
- [3D Tic-Tac-Toe](https://pmp-p.github.io/pygame-ttt-3d-wasm/)
154-
- [Arachnoids](https://pmp-p.github.io/pygame-arachnoids-wasm/)
155-
- [Sudoku Solver](https://www.pete-j-matthews.com/Sudoku-Solver/)
156-
157-
Source code for these games can be found [here](https://github.com/pmp-p?tab=repositories&q=pygame-.-wasm&sort=name). You can tag your Github repositories with [[pygame-wasm]](https://github.com/topics/pygame-wasm).
158-
159-
### Script demos
160-
161-
The code is read-only, so you should right-click then open in a new window.
162-
163-
- [i18n bidi, complex scripts](/showroom/pypad_git.html?-i#src/test_hb.py)
164-
- [Camera](/showroom/pypad_git.html?-i#src/test_vidcap.py)
165-
- [Panda3D](/showroom/pypad_dev.html?-i#src/test_panda3d_cube.py)
166-
- [Audio Record/Play](/showroom/pypad_dev.html?-i#src/test_audio.py)
167-
- [HTML output](/showroom/pypad_dev.html?-i#src/test_html.py)
168-
169-
## Technology
170-
171-
- [Initial discussion](https://github.com/pygame/pygame/issues/718)
172-
- [Discussion at pygame-ce repo](https://github.com/pygame-community/pygame-ce/issues/540)
173-
- [Python-WASM explained by core dev Christian Heimes (video)](https://www.youtube.com/watch?v=oa2LllRZUlU)
174-
175-
### Early demos from above talk, may not work as intended :)
176-
177-
- [Pygame tech demo PyCon DE & PyData Berlin 2022](https://pmp-p.github.io/pygame-wasm/)
178-
- [Galaxy Attack](https://pmp-p.github.io/pygame-galaxy-attack-wasm/)
179-
180-
Python WebAssembly at PyCon FR 2023 (in French):
181-
[Pour quoi, pour qui et comment](https://harfang3d.github.io/pyconfr2023/#1)
182-
183-
## Status
184-
185-
- [Current issues](https://github.com/pygame-web/pygbag/issues)
186-
- [Package porting](https://github.com/pygame-web/pkg-porting-wasm/issues)
187-
- [PyPI stats](https://pepy.tech/project/pygbag)
188-
189-
## Other Pythons in browser
190-
191-
- [Pyodide/Pyscript](https://github.com/pyodide/pyodide) ( py3.12+ not suitable for heavy games, music or 3D )
192-
- [Micropython/Pyscript](https://www.npmjs.com/package/@micropython/micropython-webassembly-pyscript) ( py3.4, no pygame, but pysdl2/javascript libraries possible )
193-
- PocketPy, not any Python spec compliant but sometimes close. Can make Terminal/raylib based games.
194-
195-
## Support
196-
197-
- [Pygame Community](https://pyga.me/)
198-
199-
## Connect
200-
201-
- [Pygame Community Discord Server](https://discord.gg/p7RjnVNTcM)
202-
- [WebAssembly/Python Discord Server](https://discord.gg/MCTM4xFDMK)
203-
204-
Thanks for reading and supporting pygame-ce and pygbag. These tools could not have existed without your support.
7+
Visit the [wiki](/wiki/) to get started!
2058

2069
**Work in progress, pull requests welcomed. Feel free to propose links to games or tutorials. Please contribute!!!**
20710

0 commit comments

Comments
 (0)