💽🏴🍋⚫📀🖤💽🏴⚫📀🖤💽🏴🌞⚫📀🖤
⚫ `pip install pygame-ce`
📀👤💽🏴⚫📀🖤💽🏴🍋⚫📀🖤💽🏴🍋🔌
(`pip uninstall pygame` first to avoid contention)
Hello! This is the first release of `pygame-ce`-- pygame community edition, a pygame fork. See our [reddit announcement](https://www.reddit.com/r/pygame/comments/1112q10/pygame_community_edition_announcement/) for more of an explanation of the fork's goals and reason for existing.
The entirety of the code changes in this release were developed under the original pygame name. Most of these changes were actually developed by the contributors making this fork!
These changes represent the work on the pygame main branch between December of 2021 and October of 2022. (This release was supposed to happen back in October 2022 to add 3.11 support, but that didn't happen).
This changelog reflects the difference between pygame 2.1.2 and pygame-ce 2.1.3, with a few caveats. After these notes were written and the release was prepped, a couple memory leaks were discovered, and those patches have been added. Additionally, **warning**, font rendering doesn't work on macOS <= 11.0 in this release. We're aware of the problem and have a potential (if not ideal) fix drafted.
Release notes of 2.1.3, extremely long because of the long timescale covered:
Highlights
pygame on the Web
pygame now has source code support for WASM (web assembly)! pmp-p is driving most of the work behind this, you can check their github profile to see a few pygame apps in action on the browser!
This is still a work-in-progress - more changes and fixes need doing before this will be a smooth experience. Existing pygame applications need a few minor changes to work on browsers.
See <https://github.com/pygame-web/pygbag> for more information.
Thanks to pmp-p for making this possible on the pygame end (pygame/pygame3080, pygame/pygame3104, pygame/pygame3105, pygame/pygame3106, pygame/pygame3108, pygame/pygame3191, pygame/pygame3185, pygame/pygame3115, pygame/pygame3225, pygame/pygame3246, pygame/pygame3247, pygame/pygame3349, pygame/pygame3304), and thanks to the CPython team for making CPython 3.11 compile nicely on WASM.
Faster blitting
MyreMylar has been hard at work to make some special flags for `Surface.blit` faster using SIMD instructions, and the results can be more than 10x faster on supported hardware! (pygame/pygame2988, pygame/pygame3136, pygame/pygame3170, pygame/pygame3181) Starbuck5 followed in his footsteps improving blit blend mode efficiency slightly in pygame/pygame3294 and getting a 15-20% boost for simple alpha blits in pygame/pygame3378. There are more blitter improvements in the pipeline and we expect more boosts to alpha blending in 2.1.4.
Enhancements
A lot of nice additions and enhancements. There is some new API in this release, which currently have the experimental status. This release also has some performance enhancements (some of those are from updated dependencies, the performance changes on the pygame end are listed throughout the notes and not in this section)
New contributor ThanhChinhBK made it possible to save surfaces with palettes as indexed 8P PNG in pygame/pygame3028
New contributor mariospapaz added `font.get_sdl_ttf_version` to check the underlying `SDL_ttf` library version in pygame/pygame3095
New contributor Emc2356 added `pygame.image.(to|from)bytes` (the same as (to|from)string but appropriately named) in pygame/pygame3321
New contributor rlatowicz added support for the `BGRA` format for image functions in pygame/pygame3338 and pygame/pygame3342. This should be helpul for pygame interoperability with pycairo!
New contributor JamesC01 added `math.clamp(val, min, max)` in pygame/pygame3326 and pygame/pygame3361
Vectors have been receiving some nice polish thanks to the efforts of novialriptide, who added `move_towards()` in pygame/pygame2929 and `clamp_magnitude` in pygame/pygame2990 and pygame/pygame3133
Starbuck5 added `transform.scale_by` and `transform.smoothscale_by` functions in pygame/pygame2723
dr0id added the parameter `consider_alpha` to `transform.average_color` to to remove black artifacts if alpha is present in pygame/pygame2968. They also added a new rect method `Rect.collidelistall` in pygame/pygame3026 and pygame/pygame2989
MightyJosip added a strikethrough option to `Font` in pygame/pygame2991
ankith26
- Added `precise_x` and `precise_y` fields to `MOUSEWHEEL` events and also added some more pygame events in pygame/pygame2953.
- Made `Rect` and `Color` support `collections.abc.Container` in pygame/pygame3066
- Added `use_compat` to `pygame.key.name`, fixed `key_code` compat issues in pygame/pygame3312
New contributor itzpr3d4t0r cleaned up / optimized functions in the `draw`, `math`, and `transform`, and `rect` modules, resulting in some speedups for certain tasks. Check the PRs if you're interested. pygame/pygame3300, pygame/pygame3314, pygame/pygame3335, pygame/pygame3319, pygame/pygame3401
avaxar changed `_sdl2.video.Image.flipX` and `.flipY` to use snakecase in pygame/pygame2978
Bug Fixes
This release comes with many bug fixes on the pygame side, but there should also be improvements due to bundling newer shinier versions of our dependencies.
New contributor SnoopJ added checks to fail early if there are SDL version incompatibilities in pygame/pygame2661
New contributor Matiiss fixed windows version parsing in camera that errored on windows versions like 8.1 in pygame/pygame3158
New contributor ryanking13 fixed wasm build when no PREFIX variable is defined in pygame/pygame3280
New contributor PurityLake
- Fixed window not staying centered on second call of `display.set_mode` in pygame/pygame3172
- Fixed segault in subclass of `Sound` in pygame/pygame3492
novialriptide
- Fixed pygame Vector subclassing in pygame/pygame3088. Now inherited methods return objects of the correct subtype.
- Added Windows user fonts handling for `pygame.font.match_font()` in pygame/pygame3184
Starbuck5
- Fixed a serious performance regression of `draw.polygon` in pygame/pygame3141
- Fixed `pkgdata` import so that pygame continues to work with PyInstaller in pygame/pygame3082
- Not all surfaces started of with an opaque black background on MacOS, this was fixed in pygame/pygame2973
- Fixed DLL loading problems on Windows Store Python installations in pygame/pygame3196
- Made textinput show a candidate list in pygame/pygame3244
- Fixed `Surface.set_palette` to be usable without an initialized display in pygame/pygame3259
ankith26
- Fixed UCS_4 UCS4 typo, incorrect color methods export and display.c error handling bugs in pygame/pygame2987
- Fixed a segfault in resource loading functions such as `pygame.image.load` in pygame/pygame3089
- Added a mutex to guard multithreaded functions in `pygame.event` and fixed allocation issues due to GIL in pygame/pygame3177
- `font.get_fonts` was returning a list `None` in some cases, this has now been fixed in pygame/pygame3159. Now sysfont code also warns when there are underlying internal issues.
- Made sure all functions in `pygame.camera` are defined at all times regardless init state and fixed a few more bugs around here in pygame/pygame2961
- Music load fails could trigger wrong errors, this was fixed to only raise `pygame.error` in pygame/pygame3148
- Internal function `pgBuffer_Release` now retains previously set errors in pygame/pygame3127
- Internal function `v4l2_read_frame` could raise python exceptions when it should not, fixed in pygame/pygame3052
- Fixed misnamed `APPMOUSEFOCUS` constand naming and updated the values in pygame/pygame3043
- Fixed `Controller.rumble` returning wrong bool on error in pygame/pygame3248
- Vendor in SDL PNG save function, fix new 2.1.3 regression in pygame/pygame3376
- Fixed an edge case bug in `Vector.move_towards`, add more tests in pygame/pygame3400
- Fixed segfault (due to incref issue) in `PixelArray` context manager API in pygame/pygame3414
- Delete rect subscripts should error not segfault in pygame/pygame3440
- Made sure `display.set_mode` always returns a cleared window in pygame/pygame3317
- Fixed pypy rect freelist issue, unskipped tests in pygame/pygame3452
- Fixed blitters compile error when missing SIMD in pygame/pygame3498
MightyJosip fixed a Vector memory leak in pygame/pygame3236
MyreMylar removed `SIGALARM` suppression in pygame/pygame3142
Devops, Maintenance, and Cleanups
The pygame codebase has seen a lot of devops related changes, with many contributors helping with cleanups and maintenance. These changes would have also fixed a few rare bugs and such.
New contributor SergioArnaud fixed dependencies not being found on PowerPC in pygame/pygame2975.
New contributors Yvant2000 and corrected a code comment in `rect.c` in pygame/pygame3182
New contributor GregoryMorse noticed `VideoInfo` string was missing closing parenthesis and fixed this in pygame/pygame3053
New contributor blankRiot96 removed an old use Python 2's \_\_nonzero\_\_ in pygame/pygame3194
New contributor blankRiot96 deprecated `Color.set_length` in pygame/pygame3352
New contributor itzpr3d4t0r ensured the CI continued to work by fixing a checksum in pygame/pygame3329
New contributor Vazno removed unused imports, fixed a confusing message, and improved some code in pygame/pygame3382, pygame/pygame3388, pygame/pygame3397, and pygame/pygame3392
New contributor Matiiss replaced some truth testing with `is not None` checks in sprite module in pygame/pygame3271
New contributor kevin-pease removed deprecated blend argument from test and docs in pygame/pygame3281
New contributor lebedevhhh changed f strings (sysfont.py) in pygame/pygame3391
robertpfeiffer made buildconfig handle `-auto` flag in pygame/pygame3157
zoldalma999 improved clang format source file detection in pygame/pygame3140
zoldalma999 added `__new__` and `__init__` methods to some pygame classes in pygame/pygame3001. Previously these classes had functions named after the class that did what `__init__` was supposed to do. He also changed renderer names to strings in `_sdl2.video.get_drivers` in pygame/pygame3132.
cclauss worked on linting and improving the python source code in pygame/pygame3208, pygame/pygame3213, pygame/pygame3207, pygame/pygame3212, pygame/pygame3220, and pygame/pygame3219
pmp-p fixed setup.py for clang-built Python, fixed a deprecation warning, and corrected some relative imports in pygame/pygame3381, pygame/pygame3228, and pygame/pygame3313
novialriptide cleaned up some python code in pygame/pygame2984, pygame/pygame3013, and pygame/pygame3016
illume worked to update manylinux and Windows dependencies in pygame/pygame2983, pygame/pygame3475 and pygame/pygame3059
illume generated the 2.1.3 dev releases in pygame/pygame2957, pygame/pygame3039, pygame/pygame3060, pygame/pygame3471, pygame/pygame3503 and pygame/pygame3513
ankith26 worked on refactoring and improving code in pygame/pygame2952, pygame/pygame2919, pygame/pygame3032, pygame/pygame3067, pygame/pygame3041, pygame/pygame3201, pygame/pygame3206, pygame/pygame3203, pygame/pygame3295, pygame/pygame3366, pygame/pygame3325, pygame/pygame3396, and pygame/pygame3490
ankith26 made sure the continuous integration and Mac/Linux dependencies were well in order in pygame/pygame3188, pygame/pygame3187, pygame/pygame3431, pygame/pygame3042, pygame/pygame3347, pygame/pygame3445, pygame/pygame3433, and pygame/pygame3496
ankith26 relaxed a SDL minor version exact match check that was giving users problems on Linux in pygame/pygame3428
MyreMylar added tools to make it easier for us to understand and implement blitting changes in pygame/pygame2964 and pygame/pygame3284.
MyreMylar also did some code formatting himself, in pygame/pygame3137
ankith26 and Starbuck5 added Python 3.11 builds to CI in pygame/pygame3484 and pygame/pygame3486
Starbuck5 worked on refactoring and improving code in pygame/pygame3192, pygame/pygame3183, pygame/pygame3014, pygame/pygame2911, pygame/pygame3093, pygame/pygame3126, pygame/pygame3180, pygame/pygame3216, pygame/pygame3186, pygame/pygame3296, pygame/pygame3344, pygame/pygame3364, pygame/pygame3375, pygame/pygame3416, pygame/pygame3487, pygame/pygame3239, and pygame/pygame3272
Starbuck5 worked to keep windows dependencies up to date in pygame/pygame3086, pygame/pygame3162, pygame/pygame3193, and pygame/pygame3287
Unit Tests and Typestubs
New contributor JovialKnoll added a missing copy test for `Vector3` in pygame/pygame3000
New contributor PurityLake added a unittest for fullscreen toggle in pygame/pygame3171
New contributor Temmie3754 relaxed strict pixel match tests in `test_src_alpha_sdl2_blitter` by allowing a small delta by in pygame/pygame3494
New contributor SSS-Says-Snek added SysFont `pygame.font.get_fonts()` verification test in pygame/pygame3266
novialriptide improved `Rect` typehints in pygame/pygame2969
MyreMylar added a unit test for `display.gl_set_attribute()` in pygame/pygame3256
MightyJosip fixed imported class typehints in pygame/pygame2965.
ankith26
- Added a unittest for `pygame.locals` in pygame/pygame2958
- Fixed stubtest warnings, run stubtest on CI in pygame/pygame2999 and pygame/pygame3075
- Did some Event tests and types improvements in pygame/pygame3063
- Did some `Sprite` typestub updates, used generics and protocols in pygame/pygame3138
- Added `_GenericVector` to math typestubs and did some more fixes in pygame/pygame3150
- Fixed latest stubtest issues in pygame/pygame3332
- Fixed new mypy-0.981 fails in pygame/pygame3470
- Fixed tests that had overshadowed names in pygame/pygame3384
Docs and Examples
New contributor eoghanriley fixed a typo in `tests.rst` in pygame/pygame3022
New contributor gresm corrected some docs formatting in pygame/pygame3122, and fixed some docs typos in pygame/pygame3027 and pygame/pygame3044
New contributor brccabral improved the mask example by selecting an image that would actually get an interesting mask, in pygame/pygame3111.
New contributor wxh06 updated a list of datafiles relevant to the docs in pygame/pygame3073.
New contributor dbrown3562 improved many of our example programs in pygame/pygame3092 and pygame/pygame3146
New contributor thanice improved the cursors example in pygame/pygame3037.
New contributor blankRiot96 improved the textinput example in pygame/pygame3050.
New contributor kharissa fixed Chimp tutorial code to use the correct module name alias in pygame/pygame3205
New contributor elgcodes corrected some typos in tutorials in pygame/pygame3164 and pygame/pygame3165.
New contributor EunhoKang fixed typo in korean document in pygame/pygame3176
New contributor StarDexterity fixed typos in sprite docs in pygame/pygame3263
New contributor fQ7N Fix sprite docs `DrawPlain` ---> `RenderPlain` in pygame/pygame3298
New contributor muelletm fixed typo in aliens example in pygame/pygame3485
New contributor oddbookworm improved `pygame.math` documentation in pygame/pygame3359 and pygame/pygame3373
New contributor JoshuaDRose
- updated DisplayModes.rst - PEP Changes in pygame/pygame3385
- fixed a typo in `SpriteIntro.rst` in pygame/pygame3154.
New contributor Vicky-Vicky27
- Improved `mixer.set_reserved()` documentation in pygame/pygame3434
- fixed docs and types for `math.Vector2.cross()` return to float in pygame/pygame3286
New contributor stefpivser added Spanish translation of chimp tutorial in pygame/pygame3421
New contributor pycoinfu refactored `examples/mask.py` in pygame/pygame3455
New contributor cvionis corrected a typo in `tom_games3.rst` in pygame/pygame3504
MyreMylar and new contributor davidpendergast overhauled the "newbie guide" in pygame/pygame3118 and pygame/pygame2718 respectively
hnrkcode made the header of the documentation look nice and pretty in pygame/pygame3094
novialriptide
- Improved README in pygame/pygame3090 and pygame/pygame3091
- Cleaned up test/README.TXT in pygame/pygame3254
- Prettify joystick documentation + add Nintendo Switch mapping in pygame/pygame3290
- overview.rst -> 개요.rst in pygame/pygame3474
dr0id helped keep the docs building nicely by fixing a warning in pygame/pygame3029.
Grimmys fixed an issue where a few pages weren't added to the built documentation in pygame/pygame2977.
Starbuck5
- Updated the image documentation and corrected an image typehint in pygame/pygame2959
- Improved the draw docs and example in pygame/pygame3074
- Corrected some incorrect info about the `DOUBLEBUF` flag in pygame/pygame3129
- Freshened up `arraydemo.py` in pygame/pygame3453
illume fixed es folder location as well some Sphinx issues in `ChimpanceLineaporLinea.rst` in pygame/pygame3473
illume added experimental feedback links to new APIs in pygame/pygame3511
New Contributors
This release has seen a phenomenal rise in the number of new contributors, special shout out to people who are contributing for the first time! No matter the size or way of the contribution, we sincerely appreciate all ways the community is helping the pygame project.
SergioArnaud JovialKnoll eoghanriley gresm ThanhChinhBK GregoryMorse thanice blankRiot96 wxh06 SnoopJ brccabral mariospapaz JoshuaDRose Matiiss dbrown3562 elgcodes EunhoKang PurityLake Yvant2000 kharissa StarDexterity SSS-Says-Snek ryanking13 kevin-pease Vicky-Vicky27 fQ7N itzpr3d4t0r rlatowicz Emc2356 JamesC01 oddbookworm Vazno lebedevhhh stefpivser pycoinfu muelletm Temmie3754 davidpendergast cvionis
Thank you one and all
Sincere thanks to everyone keeping the pygame project going strong! This is not just limited to our contributors on Github, but also thousands of pygame learners and enthusiasts all around the world.
Special thanks to
- people submitting issues and PRs, answering questions, making guides and tutorials, sharing your work, or moderating discussions on different forums.
- code reviewers for helping with PRs that people make.
If we've missed someone in these notes or made any other mistake, don't hesitate to get in touch with us to make a correction.