- mp3 via smpeg was missing in manylinux builds.
- mixer thread deadlock issue when controlling it from different threads.
- pygame.version.vernum now has major, minor, and patch attributes.
TLDR; Some highlights.
Every single source file has been heavily modified and moved in this release. Initial (source code only) support for SDL2 has been merged in. We also support compiling with SDL1 in the same code base, so the migration to pygame 2 is easier. pygame 2 will be released with SDL2 being the default backend when some remaining issues are ironed out. The 1.9.x releases will continue with SDL1 until then. Also, the C API of pygame is undergoing a transformation with lots of cleanups. Then there have been plenty of other cleanups all throughout the python code as well. There's still lots to clean up, but things should be significantly easier for people to contribute (👋 hello and thanks new contributors!). The documentation has been improved with better examples links, search functionality, and improved navigation. Support for older Macs, and newer Macs has been improved. The mask, midi, draw, and math modules have gotten lots of polish with rough edges removed.
A very special thanks to the people who have volunteered commits to pygame since the last release. In alphabetical order...
(@alphaCTzo7G) | Amos Bastian (@amosbastian) | Andrey Lopukhov (@andreyx86) | Augusto Noronha (@augusto2112) | Bernardo Sulzbach (@bernardosulzbach) | (@Bottersnike) | Cai Q.T. (@CAIQT) | (@Cerealdragon) | Charles (@charlesej) | (@ChrisWeissNike) | (@cmtrapp02) | Daniel Molina (@daniel-molina) | David Caughell (@DavidCaughell) | David Lönnhager (@dlon) | (@dr0id) | burmer (@dtschirmer) | (@e1000) | xFly_Dragon (@husano896) | (@IchMageBaume) | René Dudfield (@illume) | (@LambdaGoblin) | Lenard Lindstrom (@llindstrom) | François Magimel (@Linkid) | (@LiquidFenrir) | Mark Hurley (@markph0204) | Marius Gedminas (@mgedmin) | (@metulburr) | Michael Farrell (@micolous) | Dominik George (@Natureshadow) | Nik (@nikolas) | Nunu-Willump (@Nunu-Willump) | (@pleboulanger) | Rebecca Chen (@rchen152) | (@robertpfeiffer) | Sett (@sw00) |
Quite a few new people have helped out with this release 🤗
An equally special thanks to everyone else who has contributed in other ways. Thanks to claudeb, imallet, and deshipu for moderating the discord chat to keep it friendly. Thanks to the twitter folk, and the stackoverflow Q&A people. Thanks to everyone who puts their game up on the pygame website for others to look at. Thanks to people making tutorials and sharing articles & books they've written. Thanks to the r/pygame mods and community. Thanks to pyladies groups for running fun sessions, and for making things better. Thanks to the teachers providing feedback, and for doing something fun with their students. Thanks to Debian, Raspberrypi, Arch, Fedora, and all the other community groups. 🖤
#945 Vector: Explain slices and swizzling
#944 Update surface documentation
#937 Make mask offset boundary checking consistent
#936 Update midi documentation
#931 Fix drawing 1 pixel wide off-surface ellipses
#929 Use SDL_RWops instead of pg_FopenUTF8.
#928 Fix LayeredDirty's inconsistent use of its source rect
#927 Workaround for locale errors with PyPy
#926 Update dependencies for manylinux builds.
#924 Upload .whl binaries to a github draft release when creating tag.
#923 Update scrap documentation
#922 #881 #879 Fix zero-sized mask segfaults
#920 Fix the SystemError when no type specific clipboard content exists.
#917 Update scrap tests
#914 Update freetype tests
#911 #893 #889 #876 #874 #844 #840 #831 #819 Improved mask tests
#900 Add sprite tests
#899 bugfix for dirty sprite when using a source rect
#891 Add missing Vector2.magnitude()
#873 Fix mask index out of bounds segmentation fault
#806 Mask constructor 'fill' argument
#807 Use version directives consistently in documentation and update style
#805 Event functions: pump parameter and keyword arguments
#803 Add customized repr()/str() output for Mask objects
#802 Fix aaline()/aalines() not drawing on a surface's border
#797 Keep surface alpha value for copied surfaces with SRCALPHA flag
#760 #707 Load images on multiple threads properly
#783 Fix overlap_mask() making incorrect mask
#751 #749 #748 #746 #745 Added get_init() to all modules with an init() function
#725 Allow camera module to be used on Windows
#722 API version macros
#698 Use pre styles in docs
#670 Converting between ANSI notes and MIDI notes or frequencies
#663 Compile for PyPy 3 and PyPy fixes
#665 Chimp tutorial: reindent and clean some code
#664 Chimp tutorial: fix reST syntax
#656 #649 Handle Unicode objects and paths properly
#631 Fix failing tests test_aapolygon and test_pie
#630 Fix freetype rotation rendering
#596 aaline cleanup
#582 draw.aaline: blend correctly
#577 #573 Fixed FreeType memory leaks
#571 Fix surface.blits() bugs
#560 Added math.Vector2 subclass test for issue
#558 Raise TypeError on invalid point arguments
#557 Update typecheck to allow subtypes
#545 update system font lists in sysfont.py
#538 Mac fonts support using system_profiler
#559 Allow clean silencing of support prompt
#553 Fix homebrew travis mac builds
#551 Fixed freezing while playing music from file objects
#550 updated for python 3
#546 Improve message on failed imports & cleanup
#544 Spelling fix in examples/glcube.py
#540 DirtySprite subclass allow other _layer values
#536 dependency version into README & Cleanup SDL1.2
#534 More test cleanups.
#535 draw_py for Python algos & aaline testing
#534 More Test cleanup
#518 Organise the docs modules by usage, add search form.
#517 Test cleanup n+1 : yet another test cleanup branch
#516 PY_VERSION_HEX < 0x02070000 : cleanup
#515 Fix draw polygon ; tests & code cleanup
#514 Cleanup Python < 2.7 references
#511 Fix odd-width ellipses not drawing correctly
#510 Update unit tests draw.ellipse, add unit tests draw.(aa)line(s)
#509 Midi tests : add, refactor, cleanup
#508 More test method cleanup
#507 Improve mac compile times on travis.
#505 Remove "if 1:" pattern in tests
#504 Cleanup mixer test
#503 Clang format all the src_c/.c files
#502 Cleanup some test methods & test/sndarray_test.py
#501 Add draw_ellipse unit test
#500 Test for overlap mask
#499 Remove boilerplate imports from top of test files
#498 Adding a test for Thick Line Bug
#493 0 sized masks are now possible
#489 transform.scale does not crash for zero sized surfaces
#488 Added unit test 'test_zero_surface_transform' for issue 411
#486 Moved jquery.plugin.docscomments.js into pygameweb.
#485 Repo cleanup. 8 things in top level. Rest in buildconfig/. Old stuff removed.
#484 Added mac sdl2 support. Changed config.py -sdl2
#483 Support older mac core duo 2 cpus
#482 The giant SDL2_patches merging PR.
#476 Do not try to add portmidi on freebsd. It does not exist.
#475 Resurrect Python 3.4 builds on Appveyor
🐱🏍 stuntcat is our open source mini-game we worked on in order to drive pygame 2 development forward. We wanted to make a real mini-game and try to release it for sale on as many platforms as possible. So that other people can look at the source code and distribute their game on more platforms too.
We only had 4 days... but during that time more than 14 people got involved. We learnt a lot during this. The compilation instructions for pygame 2 were improved so that more people could build development versions. We automated the installer generation for Windows, Mac, and pypi on github (so other projects can copy this base-code and do it too). Gif animation saving was started (because when you release your game you want a gif right?). Missing features and areas where documentation could be improved were identified (animated sprites, and scenes anyone?). Fixes to pymunk (a great 2D physics engine) were made so distributing physics games to end users is now easier. There's also an example of using the tile map loader (PyTMX) with the physics engine. More than a month after the game jam finished we are working on issues discovered during the making of 🐱🏍 stuntcat.
We want to make distributing pygame apps easier for people. You made your game, now you want to share it with your friends or even sell it right? The first place we made a release was on itch.io, a platform for selling games and apps. There we uploaded the Mac, Windows, and source for people to download with a pay-what-you-feel option.
Next step is to release the game on Steam (another popular games platform). For the next step we need to raise $100 for the Steam App fee. We also have to make the game better! It's already a pretty fun mini game, but requires more mini games and more polish. We also need to make pygame 2 pre-release binaries so that we can actually publish on Steam.
Thanks to the makers of stuntcat: bitcraft, blubberquark, Bottersnake, claudeb, illume, Kuba | ThePolish, TJWhale, hfoxp, xeno, M, CaptHurls, dlon, dirk0, viblo, and kleines filmröllchen.
day 0: $0 of $100 raised for Steam app fee.
day 1: $5 of $100
day 2: $57 of $100
day 3: $100 of $113.20
day 14: $107 of $113.20
day 20: $127 of $113.20
If you ever wanted to support pygame development financially and you can afford it, this is how you can by purchasing stuntcat on itch.io for $2 or what ever you feel.
update: we raised enough to make a steam release. Thanks to everyone who chipped in!
See the post on the PyPy blog: "PyPy for low latency systems",
and also this post: Experiments with new low latency PyPy garbage collector in a thread.
Josh Bartlett has made a video for his pygame Artist in Residence exhibit. It's a timelapse of Trosnoth development in October.
ps. if you want to see the text more clearly you'll need to watch it fullscreen in 1080p.
Trosnoth is a networked multi player game originally developed as part of a computing class.
- pygame now compiles with SDL2 from source on at least Mac, Linux, and Windows.
- SDL2 now does batching with the existing API. Should be in the next release. So no need to integrate SDL_gpu, or to change how we submit surfaces for rendering.
- Many things are working with SDL2, there are dozens of known issues and test failures however. The main one is color keyed surfaces not working properly. The other big piece of work is getting it to compile on the build bots (travis, appveyor), and making pre releases available.
- There have been a few more developers contributing (10 in the last month).
- Work continues on cleanups, making it more developer friendly, and developer out reach. The repo has been cleaned up, removing the clutter, and beginning an internal CAPI refactor. Unit tests have also undergone some cleanups using newer features. python 2.4/2.5/2.6 support has been removed in the code. The contribution guide has been improved. https://www.pygame.org/wiki/
- If anyone using pygame in Berlin wants to come along and help talk with people interested in contributing, I am presenting here: https://www.meetup.com/
- We're working toward the 1.9.5 release (the refactor release).
- There could be 'one more SDL 1.2' release, and we may use that SDL1.2 branch for a 1.9.6 release.
The 1.9.5 release is the 'refactor' release, with the SDL2 branch merged and many cleanups. Being able to compile SDL2 support in is possible from source, but there are known issues with it. Binaries (on pypi and otherwise) should be distributed with SDL 1.2.
(@alphaCTzo7G) | Amos Bastian (@amosbastian) | Andrey Lopukhov (@andreyx86) | Augusto Noronha (@augusto2112) | (@Bottersnike) | (@Cerealdragon) | (@cmtrapp02) | Daniel Molina (@daniel-molina) | David Caughell (@DavidCaughell) | David L (@dlon) | burmer (@dtschirmer) | René Dudfield (@illume) | (@LambdaGoblin) | Lenard Lindstrom (@llindstrom) | Marius Gedminas (@mgedmin) | (@metulburr) | Dominik George (@Natureshadow) | Nunu-Willump (@Nunu-Willump) | Nik (@nikolas) | Sett (@sw00) |
Super Potato Bruh is a difficult platformer that uses some elements of the bullet hell genre to create an intense platforming experience. (And it uses python and pygame :) Also... the source is available on itch.io. (https://cmlsc.itch.io/super-potato-bruh)
The pygame Artist in Residence grant celebrates the Python arts community and lends a tiny bit of support to someones art practice. Josh Bartlett is the first recipient.
An artist residency usually works something like; a person spends some time in either a gallery making something to present or in a music club doing a weekly spot. The pygame artist in residence will do it in their own space, but be present on the top of the pygame website in the form of a thumbnail and a link to their patreon/blog/artist statement/website/whatever.
Josh Bartlett who has shared with us some things of what he's been up to. Please see the pygame artist in residence profile page for more info.
Also, Josh is blogging, so you can read about him and some updates on his work there.
ps. Thank you to everyone who applied, and those who helped with selection. Hopefully the next one will go more smoothly as the process is improved.