Skip to content

Releases: pygame-community/pygame-ce

2.5.3

09 Feb 12:33
Compare
Choose a tag to compare

🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗

pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade

🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗🐉🛡️🔥🥇📗

Hello all! We are pleased to announce the first pygame-ce release of 2025.

Since last release, our underlying library SDL (Simple DirectMedia Layer) has released SDL3, with tons of shiny new features and lots of breaking changes. Our goal is to get our existing API fully working on top of SDL3, then focus on a pygame-ce 3.0 release with SDL3 + cool SDL3 features + a few minor backwards compatibility tweaks-- nothing crazy but more than we would feel comfortable changing in a release normally. See #2760 for a discussion of potential pygame-ce 3.0 API changes. To that end, significant effort this release went to getting things more ready for SDL3, but we still have a ways to go. And this plan may change, just wanted to share what we're thinking.

Before we get into the meat of the changes,

  • This release drops support for Python 3.8, as it is end of life. (Contributed by @ankith26 in #3143)
  • This release raises the minimum SDL2 version to 2.0.14 (Contributed by @ankith26 in #3213)

Enhancements

  • @gresm added an option for pygame.Windows to not show up in the taskbar, for "utility windows". pygame.Window(utility=True). Added in #3226.
  • @damusss Added "erase" and "repeat" options for Surface.scroll in #2855.
  • @damusss Expanded color type support (not just tuples, but also color strings like other APIs accept) for mask.from_threshold. He also fixed the type stubs for PixelArray methods to correctly indicate they don't have the expanded color type support. See #3164.
  • @MrRedstone058 added Line methods and length attribute to the experimental geometry module in #3179.

Bugfixes

  • @Matiiss Added runtime support for type hinting sprite Groups like other Python containers. E.g. group: pygame.sprite.Group[MySpriteClass] = pygame.sprite.Group() tells type hinters that this is a sprite group of MySpriteClass instances. Contributed in #3053.
  • @ankith26 Fixed a bug in saving Surfaces as TGA images, where they could overrun allocated memory and crash, in #3169.
  • @yunline Added the missing BLENDMODE_MUL (relevant to the experimental _sdl2.video module) in #3258.
  • @ankith26, @MyreMylar, and @zoldalma999 all worked together (we love to see it) to straighten out event.peek behavior between implementation, type hints, and documentation, in #3283. Classifying this as a bugfix because the previous behavior was a mistake and has been fixed.

Peformance improvements

  • @Starbuck5 removed unnecessary calls to PyNumber_Index, PyLong_Check-- speeding up x = rect[0] and rect[0] = x 7-9% percent-- in #3242.
  • @Starbuck5 optimized an internal function that converts pairs of Python numbers into C integers or floats. This function is used all over the place, but is only significant for functions that were pretty quick anyways. Rect.move_ip and Rect.collidepoint were tested to be 19% and 17% faster, respectively. Contributed in #3214.
  • @ankith26 and @damusss improved the speed of color parsing for color names (e.g "green") and string hex values (e.g. "#FF00FF") by more than 2x, by adding a fast path before stranger arguments are considered. Contributed in #3297 and #3302.

Deprecations

  • @ankith26 deprecated Window's foreign kwarg and Window.focus's input_only kwarg in #3234
  • @Starbuck5 marked old type aliases as deprecated (SurfaceType, RectType --- just use Surface and Rect!) #3288

Docs and Types

  • @zoldalma999 began implementation of a new documentation system where we generate the docs from a unified representation in the type hints. This will allow editors to see and display the documentation of each function as the user uses it. Currently this is only implemented for the time and cursors modules, it is planned to roll out to other modules in future releases. See #3188.

An example before/after with docs in the type hints

  • @aatle improved the type hints, especially around Color, Rect, display, and geometry. See #3172, #3183, #3248, and #3264.
  • @gavinmorrow fixed a grammar mistake in the Window docs in #3194.
  • @Starbuck5 corrected some older docs content and some recent invalid formatting that got through, in #3204, #3205, #3266, #3272, and #3316.
  • @ankith26 improved the type hints around the experimental geometry and _sdl2 modules, as well as the freetype module, in #3212, #3300, #3301.
  • @damusss expanded the type hints for pygame.Window init keyword arguments to make them easier to discover in editors/IDEs, see #3295.
  • @XORandom and @noahcse worked on Russian and Traditional Chinese readmes, respectively, in #3138 and #3113.
  • @GabrieleLS added a note to the mixer documentation about different meanings of the word "channel" in #3228.
  • @JovialKnoll did a grammar fix and removed incorrect information from the Surface docs in #3231 and #3263
  • @yunline fixed a formatting mistake in sndarray.rst and cursors.rst in #3257
  • @Matiiss documented how volume is stored internally for (get|set)_volume functions/methods (129-value scale) in #3091

Tests and Examples

  • @damusss Added __name__ == "__main__" guards to the examples, so they can't be accidentally run on import. People occasionally import them on accident, like in this case. Contributed in #3181.
  • @Akaracy added a test for draw.arc in #3230.
  • @MyreMylar renamed TestTags so it doesn't get confused for a test in #3276.
  • @MyreMylar fixed most of the Deprecation Warnings in surfarray_test in #3274.

SDL 3 porting

  • @Starbuck5 put in several PRs to getting modules compiling or get modules closer to compiling, focusing on modules failing because of SDL3's pixelformat changes. See #3166, #3171, #3278, #3294, #3308, #3307.
  • @ankith26 put in a bunch of PRs as well, getting time, surflock, constants, event, imageext, window, key, and mouse all compiling for SDL3. See #3206, #3217, #3262, #3251, #3207.

Maintenance

  • @ankith26 added a new dev.py file to help pygame-ce devs run necessary commands and do editable builds very smoothly, as a spiritual successor to setup.py which is seemingly being phased out in the Python packaging ecosystem. See #3128.
  • @ankith26 and @Starbuck5 kept us up to date with SDL2 (and SDL3 releases/prereleases for our experimental support). We've pulled in the new SDL 2.30.12, SDL_image 2.8.4, and SDL_ttf 2.24.0. Contributed in #3203, #3261, #3271, #3286, #3304, #3279, and #3322.
  • @ankith26...
Read more

2.5.3.dev2

02 Feb 07:36
Compare
Choose a tag to compare
2.5.3.dev2 Pre-release
Pre-release

Hello! This is a preview release for 2.5.3, which should be out in a week or so. Included are the GitHub autogenerated release notes, for the full release we will clean these up to be more human readable.

What's Changed

Read more

2.5.2

27 Oct 17:11
7a7dea3
Compare
Choose a tag to compare

☀️🎃👻🕸️🕷️🧛🧟‍♂️🧙‍♀️🧙‍♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈‍⬛🦇🌌
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🎃👻🕸️🕷️🧛🧟‍♂️🧙‍♀️🧙‍♂️🕯️🪦🍬🍭🍫☠️⚰️🔮🧹🌕🐈‍⬛🦇🌌

We're pumped to drop another pygame-ce release, thanks to the awesome efforts of 30+ contributors in this release! In the last couple of months, we've together made 286 commits, updated 281 files, and merged 85 pull requests.

Now, let's dive into what's new!

New and improved API

Bugfixes

  • @Starbuck5 fixed an OpenGL issue in Window init in #3059

  • @oddbookworm fixed a break when the OS resizes the window in set_mode in #2992

  • @bilhox fixed segfault with antialiased draw functions with a depth different than 32bits in #3008

  • @pmp-p did some fixes for improved wasm support in #3137 and #3163

  • @MyreMylar fixed midi timer reset when quit in #3018

  • @mzivic7

    • Fixed aalines overlap issue in #2912
    • Fixed missing pixels in aalines when using integer coordinates in #3144
  • @ankith26

    • Fixed (F)Rect.scale_by(_ip) handling of the scale_by parameter in #3078
    • Updated FRect repr to handle larger values in #3077
    • Fixed pygame-ce editable install on windows in #3117

General Enhancements

  • @oddbookworm improved Vector{2,3}.__delattr__ messaging when deleting x, y, {z} and removed Vector4 zombies in #3069, and @ankith26 applied some more related updates in #3087
  • @bilhox made it so that too many arguments to Color.from_{colorspace} style methods now raise errors in #3125
  • @damusss added handling for all color types in transform.threshold in #3156

Performance Enhancements

  • @Starbuck5 updated more places in rect code to use PyObject_Vectorcall in #3048. The affected methods therefore see 15-22% improvements in speed.

  • @itzpr3d4t0r

    • Optimized Rect.clipline() in #3067. The performance is up by upto 50% in some of our test cases.
    • Optimized tuple creation for Rect getters in #3072

Docs and Type Hints

  • New contributor @MrValdez added example on how Window behaves with WINDOWCLOSE and QUIT events in #3115

  • New contributor @datapythonista clarified how Rect and positions relate in the intro tutorial in #3111

  • New contributor @hisa10 added a Japanese README in #3114

  • @oddbookworm fixed a couple of versionadded tags that should have been versionaddedold in display docs in #3046

  • @itzpr3d4t0r improved geometry docs in #3043

  • @Starbuck5 fixed transform.average_color docs and stubs to match implementation in #3076

  • @yunline updated the dependency section of zh-cn README in #3119

  • @zoldalma999 fix stubcheck typing error on windows in #3147

  • @bilhox

    • Made it so that some experimental API is not hidden in the docs anymore in #3068
    • Polished and reviewed french readme + note of when it was last reviewed in #3142
  • @damusss

    • Enhanced pygame.mouse.get_pressed docs in #3084
    • Made copy methods explicit for linting in #3129
    • Added Italian README in #3120
    • Improved color notation in the docs in #3165

Examples and Unit Tests

Code Quality and General Maintenance

Read more

2.5.2.dev2

13 Oct 08:35
Compare
Choose a tag to compare
2.5.2.dev2 Pre-release
Pre-release

Pre release version of 2.5.2 for testing, we appreciate everyone who tests out our dev releases!

Release highlights

  • Promoted pygame.Window to public API. Allows use of multiple windows at once, new window operations.
  • Various rect optimizations
  • Dependency updates: SDL and lower level C libraries
  • New module pygame.typing
  • Fixed segfault in antialiased draw functions with non 32 bit surfaces

What's Changed

Read more

2.5.1

12 Aug 11:47
e6fb798
Compare
Choose a tag to compare

☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉

We are pleased to do yet another release of pygame-ce, and this has been possible due to the efforts of over 20 code contributors. Together, we have made 193 commits across 139 files via 80 pull requests in the last 2 months since the previous release!

Now, onto the highlights!

Highlights

  • Added Python 3.13 (just standard 3.13, no free threading yet) and PyPy for apple silicon support.

  • We have a new logo!

pygame-ce logo

  • We haven't run out of optimization ideas yet 😅, we've managed to cram a few more in this release.

New API

  • There is now a default destination position (0, 0) for Surface.blit, thanks to @damusss in #2936.
  • @itzpr3d4t0r added a new function Surface.premul_alpha_ip to premultiply alpha faster by operating in place instead of needing to allocate a new Surface. @Matiiss also helped with documentation. See #2899, #2972, and #2980.

Bugfixes

  • @Matiiss fixed passing parent_window=None to display.message_box in #2723.
  • @itzpr3d4t0r fixed an issue transform.hsl not working on certain pixel formats in #2948.
  • @oddbookworm fixed a Surface.fill where rects with negative positions would slide to (0, 0) and then fill, instead of only filling part of the Rect. See #2939 for details.
  • @ankith26 fixed using SCALED after not using SCALED in display in #2925.
  • @damusss fixed using OpenGL with a resizable pygame.Window, see #2915.

General Enhancements

  • @MyreMylar added a SIMD printout (SSE2, AVX2 & NEON) to pygame.print_debug_info() in #2897. This will help us debug any SIMD-backend specific bugs submitted by users.
  • @damusss added support for radius = 0 circles to the experimental geometry module, see #2913.
  • @zoldalma999 added new "ABGR" format support to image.frombytes and image.tobytes in #2951.
  • @zoldalma999 made the experimental Window class subclassable in #2950.
  • @ankith26 added support for iterables in display.update, see #2987.
  • @Starbuck5 and @ankith26 added Python 3.13 support in #2994 and #3030.

Performance Enhancements

  • @itzpr3d4t0r continued his quest to optimize all the things, merging improvements to PixelArray.make_surface, transform.scale2x, Surface.fblits (a fix for a performance regression), mask.from_surface and (F)Rect methods. See #2953, #2859, #2978, #2895, and #2908 for more details.
  • @mzivic7 got a 5-6% boost out of draw.aacircle (new in pygame-ce 2.5.0) in #3012.
  • @Starbuck5 boosted the performance of some draw operations on 24-bit surfaces, with a 20% improvement on single-pixel line drawing, see #3021.

Deprecations and Removals

No new deprecations this release, but-

  • @ankith26 added deprecation warnings to some already-deprecated API (freetype.was_init, scrap.lost) in #3001.

Docs and Type Hints

  • @Mega-JC created a new logo and added it to the docs (in collaboration with @kadir014 on the design), in #2965. This is great for us to express our own identity as a project.
  • @REX2626, @whangho, @Mic-lab, and @damusss made grammar and wording improvements to docs content. See #2907, #2919, #2911, #3004, and #2901.
  • @damusss made it so deprecated functions are marked with the deprecated decorator in #2984. This allows editors to show users that a function is deprecated very neatly. They also made some smaller enhancements to the type stubs in #2918 and #2926.
  • @ankith26 modernized the stubs to use python-3.8-isms in #2995
  • @MrF1ow added a Contribution Section to README to help out new contributors in #2910.
  • @MyreMylar added license identifier to README in #2890.
  • @oddbookworm changed dark theme slightly to make code more readable in some cases in #2960.

Examples and Unit Tests

Code Quality and General Maintenance

New Contributors

Thanks all

A heartfelt thank you to everyone involved! This includes not just code contributors, but also the wider community - issue reporters, PR reviewers, tutorial creators, helpers on various media platforms, developers of supp...

Read more

2.5.1.dev2

06 Aug 09:56
Compare
Choose a tag to compare
2.5.1.dev2 Pre-release
Pre-release

A pre-release before the final release, please help us by testing this!

Release highlights

This is mostly a bug-fixes-and-enhancements release, but we do have a few cool new stuff to showcase!

  • We now support and distribute wheels for CPython 3.13 and PyPy for apple silicon.
  • The experimental Window class is now subclass-able.
  • Added new method Surface.premul_alpha_ip
  • The dst argument of Surface.blit now has a default value: (0, 0). This means you can skip this argument if you are blitting a surface at the origin (top-left) of the window.

What's Changed

New Contrib...

Read more

2.5.0

12 Jun 03:59
d93ad87
Compare
Choose a tag to compare

☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
☀️🌊🏖️😎🏄🐚🌈🏝️🍹☀️🌊🏖️🎉

This release, coming in just four months after the previous one, has been possible due to patches submitted by over 30 contributors, who have collectively made over 132 pull requests with 464 commits that touch 413 files! Impressive!

Now, onto the highlights!

Highlights

API updates

@damusss

  • added mouse.get_just_[pressed|released] in #2836
  • added display.[get|set]_window_position in #2816
  • (F)Rect can be initialized with no arguments in #2655

@whydoubt added the pitch argument for image.tobytes in #2602

@XFajk added Color.from_normalized constructor and Color.normalized property in #2693

@mzivic7 added draw.aacircle in #2800

@itzpr3d4t0r added transform.hsl in #2398

@ScriptLineStudios implemented a few convenience properties to Surface class: Surface.width, Surface.height and Surface.size in #2813

@bilhox added math.invlerp and math.remap in #2654

@ankith26 added mixer.get_driver in #2741

SIMD Performance enhancements

@Starbuck5 improved performance of SSE2 no_surf_alpha_opaque_dst blitter in #2601 and #2896. As a result of this PR, some kinds of blit operations should get a nice speed up (upto about 2.5x speedup on the testcases we used) on some hardware.

@itzpr3d4t0r

  • Partially refactor SSE2 blitters with macros in #2656.
  • Implemented AVX2 variant of Surface.premul_alpha in #2615

@MyreMylar added SIMD versions transform.invert in #2534. This gives a significant performance boost, and in the example we tested, we have observed a 12x-13x speedup!

More pygame.geometry goodies

The recently introduced experimental pygame.geometry submodule has gotten more features and polish in this release in the PRs: #2561, #2660, #2634, #2662, #2661, #2709, #2791, #2732, #2731

A big thanks to everyone who contributed to pygame-geometry so far: @Emc2356, @itzpr3d4t0r, @novialriptide, @ScriptLineStudios, @avaxar, @gresm, @Matiiss, @newpaxonian, @maqa41, and @blankRiot96

As with all experimental submodules, do remember that things in here are subject to change, and there are a lot more things to be added! See the docs for the current progress.

Other general highlights

@oddbookworm added opengl support to the experimental pygame.Window interface in #2659

@ankith26 added Wayland and PipeWire support in the linux wheels distributed by us in #1997 and #2733

@ankith26 rewrote the build machinery in the meson buildsystem, while deprecating the old build machinery in the PRs #2557, #2803, #2853, #2856, #2875, #2854, #2831, #2779. As part of these changes, a few improvements are:

  • On 32-bit ARMv7 systems (which includes many Raspberry Pi), NEON (SIMD) optimizations are now enabled by default. Therefore users of this should see a significant performance boost in many operations that can support SIMD.
  • Enhanced support for Windows MinGW/MSYS2 systems.
  • Reduced wheel size.

Deprecations and Removals

@Starbuck5 removed the pygame.threads submodule in #2762

@oddbookworm re-added and properly deprecated the blend argument of draw.aaline in #2743

Performance Enhancements

In addition to those mentioned above that are SIMD-related

@itzpr3d4t0r

  • Optimized (F)Rect.unionall(_ip) in #2784
  • Optimized (F)Rect.collideXX family of methods in #2786
  • Replaced use of internal C-API functions with more efficient alternatives in #2819

Bug fixes

@oddbookworm added shim to fix broken midi module compilation in #2863

@ankith26

  • fixed some init related issues in the experimental window API in #2860
  • fixed segmentation fault during invalid PixelArray usage in #2742

General Enhancements

@Kn4ughty made error messages for using font align clearer in #2777

@pmp-p ensured we keep supporting pygame on the web in

  • wasm: unify pygame-web/pyodide/static Freetype init in #2748
  • fixed some METH_NOARGS arg missing in #2888

@damusss

  • made transform blur on a surface with either width or height equal to 0 not raise ValueError in #2852
  • Cleanup codebase, docs and examples with American spelling in #2827

@Starbuck5 added a briefcase template to pygame-ce in #2862

@RainRat fixed typos across the repository in #2847

@robertpfeiffer relax Surface.convert conditions in #2839, now it is no longer a requirement to have called display.set_mode when this method has been invoked with a

@oddbookworm removed the xwayland warning and ensured that debug info now contains whether x11 is running or xwayland in #2823

Examples and Unit tests

@snowfruit added an example for retro scaling in #2785

@Matiiss removed undefined variable in aliens.py in #2769

@Starbuck5 fixed ftfont_test being run directly in #2763

@MyreMylar

  • Add a delta of 2 ms to test_music_pause__unpause() in #2898

@ankith26

  • Force window surface update after set_size, hopefully proper fix for that pesky frequent pypy test fail in #2865
  • Minor changes to support pytest in #2675

Docs, Tutorials and typestubs

@lispspb

  • fixed documentation mix up in attributes of object returned by get_power_state in #2734
  • added clarifications about ranges in mixer docs in #2738

@kritserv fixed an issue in pygame.display.get_caption docs in #2765

@yohanmoon added instructions for resolving setuptools issue in the docs readme in #2868

@Matiiss added more / (positional-only notation) to docs and stubs in #2691

@oddbookworm fixed indentation of surface attributes in #2900

@ankith26 did some minor docs/stubs improvements in invlerp/remap in #2902

@Starbuck5 added warning about 7.1 stereo on set_source_location in #2881

@MyreMylar

  • removed duplicate images in tutorials in #2871
  • including print_debug_info() in issue template in #2879
  • adjusted symbol color in light theme in #2891

Code quality and robustness

@cclauss

  • Minor optimizations by using comprehensions in #2771
  • PEP572 Use Python's assignment expression in #2782
  • Remove lint logic from setup.py in #2796
  • setup.py: Properly add _sdl2_data_files to data_files in #2770

@Lumiobyte fix a comment typo...

Read more

2.5.0.dev4

02 Jun 19:16
311baac
Compare
Choose a tag to compare
2.5.0.dev4 Pre-release
Pre-release

This is a pre-release for 2.5.0.

Highlights

  • New functions for surfaces: draw.aacircle() and transform.hsl. Surfaces also have new attributes Surface.width, Surface.height and Surface.size.
  • New window positioning API for pygame.display. pygame.display.get/set_window_position()
  • New math functions math.invlerp and math.remap
  • OpenGL support for the experimental Window class
  • See the highlights of 2.5.0.dev2 as well: https://github.com/pygame-community/pygame-ce/releases/tag/2.5.0.dev2

What's Changed

New Contributors

Full Changelog: 2.5.0.dev2...2.5.0.dev4

2.5.0.dev2

24 Apr 10:21
Compare
Choose a tag to compare
2.5.0.dev2 Pre-release
Pre-release

This is an early pre-release for 2.5.0, we expect to also do a dev4 before the full release.

Highlights

  • More performance optimizations: Faster blitters in some cases, faster Surface.premul_alpha, faster transform.invert, faster "multi-collide" Rect methods (like Rect.collidelist).
  • Incremental progress in pygame.geometry, more methods added to classes.
  • Wayland and PipeWire support on linux wheels we distribute.
  • Switched to the Meson build system (keeps us modern). As part of this we expect SIMD support by default on 32-bit ARM systems (like some Raspberry Pi).

Other API updates

  • Added from_normalized() method to Color.
  • pitch argument implemented in image.tobytes().
  • Rect() and FRect() now support initialization with no arguments.

What's Changed

New Contributors

Full Changelog: 2.4.1...2.5.0.dev2

2.4.1

20 Feb 06:40
Compare
Choose a tag to compare

🎩⚓📺💽🦾🎩⚓📺💽🦾🎩⚓📺💽🦾
pip uninstall pygame (if previously installed, to avoid package conflicts)
pip install pygame-ce --upgrade
🎩⚓📺💽🦾🎩⚓📺💽🦾🎩⚓📺💽🦾

Hello! This is a smaller release focused on bugfixes and small updates that we've developed on the course to 2.5.0. Rather than waiting for 2.5.0 to get these out into the world, we're doing this release to get bugfixes and small updates out into the world as soon as possible.

Special thanks to all our contributors and reviewers. Check out the changes!

Bugfixes

  • @Starbuck5 Fixed a 2.3.0 regression where sysfont wouldn't provide real bold/italic fonts. (Thanks @RasmusTufvesson for reporting this). #2678
  • @Starbuck5 Fixed a rare bug involving libpng16-16.dll. #2674
  • @Matiiss Fixed a segfault that could be triggered in Surface.fblits. #2667
  • @gresm Changed local docs viewing (python -m pygame.docs) to launch a webserver on Linux, to get around permissions issues with some Linux environments. This can be accessed explicitly as python -m pygame.docs.serve. #2676
  • @pmp-p Fixed the webassembly build setup. #2653
  • @Matiiss Fixed a memory leak in Renderer.to_surface. #2665

Dependencies

  • @Matiiss updated the build to SDL_ttf 2.22.0 (fixing an issue where "\n\n" would segfault multiline-rendering). #2688
  • @ankith26 updated the build to SDL_mixer 2.8.0 (adding support for wavpack music/sound). #2703
  • @Starbuck5 updated the build to SDL_image 2.8.2 (also fixing a rare bug involving libpng, mentioned earlier). #2674

Documentation and examples

CI and tests

New contributors

Community showcase

Clear Code released a new pygame tutorial meant specifically for pygame-ce, check it out: https://www.youtube.com/watch?v=WViyCAa6yLI

Full Changelog: 2.4.0...2.4.1