rubygame 2.5.3 → 2.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (88) hide show
  1. data/CREDITS +6 -4
  2. data/NEWS +79 -0
  3. data/README +55 -72
  4. data/ROADMAP +20 -13
  5. data/doc/custom_sdl_load_paths.rdoc +79 -0
  6. data/doc/getting_started.rdoc +65 -36
  7. data/doc/keyboard_symbols.rdoc +243 -0
  8. data/doc/macosx_install.rdoc +49 -35
  9. data/doc/windows_install.rdoc +36 -108
  10. data/lib/rubygame.rb +62 -24
  11. data/lib/rubygame/audio.rb +147 -0
  12. data/lib/rubygame/clock.rb +164 -1
  13. data/lib/rubygame/color.rb +40 -7
  14. data/lib/rubygame/color/models/hsl.rb +1 -1
  15. data/lib/rubygame/color/models/hsv.rb +1 -1
  16. data/lib/rubygame/color/models/rgb.rb +1 -1
  17. data/lib/rubygame/color/palettes/css.rb +1 -3
  18. data/lib/rubygame/color/palettes/x11.rb +1 -2
  19. data/lib/rubygame/constants.rb +297 -0
  20. data/lib/rubygame/deprecated_mixer.rb +555 -0
  21. data/lib/rubygame/event.rb +122 -6
  22. data/lib/rubygame/event_handler.rb +3 -1
  23. data/lib/rubygame/event_hook.rb +6 -2
  24. data/lib/rubygame/event_triggers.rb +1 -1
  25. data/lib/rubygame/events.rb +416 -1
  26. data/lib/rubygame/ftor.rb +1 -7
  27. data/lib/rubygame/gfx.rb +583 -0
  28. data/lib/rubygame/gl.rb +107 -0
  29. data/lib/rubygame/image.rb +140 -0
  30. data/lib/rubygame/joystick.rb +184 -0
  31. data/lib/rubygame/main.rb +82 -0
  32. data/lib/rubygame/mediabag.rb +1 -1
  33. data/lib/rubygame/mixer.rb +30 -0
  34. data/lib/rubygame/music.rb +493 -0
  35. data/lib/rubygame/queue.rb +3 -1
  36. data/lib/rubygame/rect.rb +9 -9
  37. data/lib/rubygame/screen.rb +357 -0
  38. data/lib/rubygame/shared.rb +40 -4
  39. data/lib/rubygame/sound.rb +428 -0
  40. data/lib/rubygame/surface.rb +626 -0
  41. data/lib/rubygame/ttf.rb +311 -0
  42. data/samples/FreeSans.ttf +0 -0
  43. data/samples/README +6 -5
  44. data/samples/demo_draw.rb +1 -1
  45. data/samples/demo_gl.rb +3 -1
  46. data/samples/demo_gl_tex.rb +4 -2
  47. data/samples/demo_rubygame.rb +114 -105
  48. data/samples/demo_sfont.rb +1 -1
  49. data/samples/demo_ttf.rb +3 -1
  50. data/samples/demo_utf8.rb +1 -1
  51. data/samples/image_viewer.rb +118 -0
  52. data/samples/load_and_blit.rb +1 -1
  53. data/samples/rubygame.png +0 -0
  54. metadata +34 -40
  55. data/Rakefile +0 -537
  56. data/doc/extended_readme.rdoc +0 -49
  57. data/ext/body/rubygame_body.so +0 -0
  58. data/ext/rubygame/rubygame_clock.c +0 -301
  59. data/ext/rubygame/rubygame_clock.h +0 -32
  60. data/ext/rubygame/rubygame_event.c +0 -760
  61. data/ext/rubygame/rubygame_event.h +0 -48
  62. data/ext/rubygame/rubygame_event2.c +0 -661
  63. data/ext/rubygame/rubygame_event2.h +0 -29
  64. data/ext/rubygame/rubygame_gfx.c +0 -942
  65. data/ext/rubygame/rubygame_gfx.h +0 -101
  66. data/ext/rubygame/rubygame_gl.c +0 -154
  67. data/ext/rubygame/rubygame_gl.h +0 -32
  68. data/ext/rubygame/rubygame_image.c +0 -252
  69. data/ext/rubygame/rubygame_image.h +0 -41
  70. data/ext/rubygame/rubygame_joystick.c +0 -336
  71. data/ext/rubygame/rubygame_joystick.h +0 -41
  72. data/ext/rubygame/rubygame_main.c +0 -158
  73. data/ext/rubygame/rubygame_main.h +0 -36
  74. data/ext/rubygame/rubygame_mixer.c +0 -1024
  75. data/ext/rubygame/rubygame_mixer.h +0 -36
  76. data/ext/rubygame/rubygame_music.c +0 -1017
  77. data/ext/rubygame/rubygame_music.h +0 -29
  78. data/ext/rubygame/rubygame_screen.c +0 -572
  79. data/ext/rubygame/rubygame_screen.h +0 -45
  80. data/ext/rubygame/rubygame_shared.c +0 -269
  81. data/ext/rubygame/rubygame_shared.h +0 -69
  82. data/ext/rubygame/rubygame_sound.c +0 -863
  83. data/ext/rubygame/rubygame_sound.h +0 -29
  84. data/ext/rubygame/rubygame_surface.c +0 -1153
  85. data/ext/rubygame/rubygame_surface.h +0 -62
  86. data/ext/rubygame/rubygame_ttf.c +0 -599
  87. data/ext/rubygame/rubygame_ttf.h +0 -69
  88. data/samples/keys.rb +0 -52
data/CREDITS CHANGED
@@ -5,25 +5,27 @@
5
5
  Role:: Creator; primary developer
6
6
  Date:: 2004 - present
7
7
 
8
+ == Past Developers
9
+
8
10
  - <b>Ash Wilson</b> / smashwilson
9
11
  Email:: smashwilson at gmail.com
10
12
  Role:: Assistant developer
11
- Date:: 2007 - present
13
+ Date:: 2007 - 2008
12
14
 
13
15
  - <b>Roger Ostrander</b> / denor
14
16
  Email:: atiaxi at gmail.com
15
17
  Role:: Assistant developer
16
- Date:: 2007 - present
18
+ Date:: 2007 - 2008
17
19
 
18
20
  - <b>Rusterholz Stefan</b> / apeiros
19
21
  Email:: apeiros at gmx.net
20
22
  Role:: Assistant developer
21
- Date:: 2007 - present
23
+ Date:: 2007 - 2008
22
24
 
23
25
  - <b>Bjorn De Meyer</b> / beoran
24
26
  Email:: beoran at gmail.com
25
27
  Role:: Assistant developer
26
- Date:: Nov 2007 - present
28
+ Date:: Nov 2007 - 2008
27
29
 
28
30
  == Other Source Contributors
29
31
 
data/NEWS CHANGED
@@ -1,5 +1,84 @@
1
1
  = NEWS
2
2
 
3
+ == Rubygame 2.6.0
4
+
5
+ Release focus: Ported to FFI.
6
+
7
+ === FFI
8
+
9
+ Rubygame is now pure Ruby, with no compiled C code. Instead, it uses
10
+ Ruby-FFI (or compatible FFI implementations) to directly access SDL
11
+ and related libraries. That means:
12
+
13
+ - It is much easier to install. You can install it directly from
14
+ RubyGems (`gem install rubygame`) on any operating system, and you
15
+ don't need a C compiler or SDL headers.
16
+
17
+ - It is now possible to use Rubygame on JRuby, and possibly on
18
+ Rubinius.
19
+
20
+ - Rubygame will be slightly slower than before. But, the hard work is
21
+ still being done by SDL, so the speed decrease is only minor. The
22
+ increased portability and ease of future development greatly
23
+ outweighs the small speed loss.
24
+
25
+ Despite the major architectural change, Rubygame 2.6 API is meant to
26
+ be backwards compatible with Rubygame 2.5 and earlier. If you find an
27
+ API incompatibility, you should report it as a bug.
28
+
29
+ However, there are a few minor incompatibilities that are already known,
30
+ and most likely cannot or will not be fixed:
31
+
32
+ - Surface#flip now needs SDL_gfx to run. Before, it needed only plain
33
+ SDL, but the code for it was too slow when reimplemented in Ruby.
34
+
35
+ - Rubygame::VERSIONS[:sdl_gfx] now reports [0,0,0] when SDL_gfx is
36
+ available, instead of its real version number. SDL_gfx does not
37
+ currently provide any way to detect its version number at run time.
38
+ (VERSIONS still reports nil when SDL_gfx is not available, the same
39
+ as in 2.5 and earlier.)
40
+
41
+ === Fixes
42
+
43
+ - Fixed: Surface#set_at() now correctly sets the pixel's opacity for
44
+ Surfaces with an alpha channel. If no opacity is given for the new
45
+ color (i.e. only RGB), the pixel will be fully opaque.
46
+
47
+ - Note: Due to a long-standing bug, Surface.new cannot create a
48
+ Surface with an alpha channel. Use Surface#to_display_alpha to
49
+ create an alpha-channeled copy of the Surface, or load an image
50
+ file that has an alpha channel already.
51
+
52
+ - Fixed: Music.load now automatically opens audio if needed. MP3s (and
53
+ perhaps other file types) would fail to load in some circumstances
54
+ if audio was not open.
55
+
56
+ === Other Changes
57
+
58
+ - Rubygame now automatically initializes itself when loaded and cleans
59
+ itself up at exit. So, you no longer need to call Rubygame.init or
60
+ Rubygame.quit in your code (but it won't hurt if you do).
61
+
62
+ - Added: New sample application, a basic image viewer.
63
+ See samples/image_viewer.rb.
64
+
65
+ - Added: Documentation listing every keyboard symbol used by Rubygame.
66
+ See doc/keyboard_symbols.rdoc.
67
+
68
+ - Added: Guide to setting custom load parts for SDL libraries.
69
+ See doc/custom_sdl_load_paths.rdoc.
70
+
71
+ - Surface#alpha= is now a true alias for Surface#set_alpha. It was a
72
+ separate method before. It can still be used in the same way as
73
+ before.
74
+
75
+ - Surface#colorkey= is now a true alias for Surface#set_colorkey. It
76
+ was a separate method before. It can still be used in the same way
77
+ as before.
78
+
79
+
80
+
81
+
3
82
  == Rubygame 2.5.3
4
83
 
5
84
  Release focus: Bug fixes.
data/README CHANGED
@@ -2,126 +2,109 @@
2
2
 
3
3
  == What is Rubygame?
4
4
 
5
- Rubygame is a cross-platform game-development extension and library for Ruby,
6
- inspired by Pygame. The purpose of Rubygame is to empower game developers by
7
- providing them with powerful and flexible high-level concepts. Instead of
8
- worrying about low-level technical details, you can focus your energy on
9
- more interesting things (like making a fun game).
10
-
11
- Rubygame's core is written in C to bind low-level SDL functions into Ruby.
12
- On top of that is a pure Ruby library for higher-level behavior like
13
- event and game object management.
5
+ Rubygame is a cross-platform game-development library for Ruby,
6
+ inspired by Pygame. Rubygame strives to empower game developers by
7
+ providing them with powerful and flexible mid-to-high level tools.
8
+ Instead of worrying about low-level technical details, you can focus
9
+ your energy on more interesting things (like making a fun game).
14
10
 
15
11
  === Relevant Links
16
12
  1. Rubygame: http://rubygame.org
17
13
  2. Ruby: http://www.ruby-lang.org
18
14
  3. Pygame: http://www.pygame.org
19
- 4. SDL: http://www.libsdl.org
15
+
20
16
 
21
17
  == Requirements
22
18
 
23
- You will definitely need these software packages to compile Rubygame:
19
+ You will definitely need these software packages to use Rubygame:
24
20
 
25
- * ruby >= 1.8
26
- * SDL >= 1.2.7
27
- * rake >= 0.7.0 (for build/install system)
21
+ * Ruby >= 1.8
22
+ * Ruby-SDL-FFI >= 0.1
23
+ * SDL >= 1.2.7 (1.2.14 on MacOS X 10.6)
24
+ * (MacOS X only): RSDL ( http://github.com/knu/rsdl )
28
25
 
29
26
  It's highly recommended that you have these packages as well, or some
30
27
  cool features won't be available!
31
28
 
32
- * SDL_gfx >= 2.0.10
29
+ * SDL_gfx >= 2.0.13
33
30
  * SDL_image >= 1.2.3
34
31
  * SDL_mixer >= 1.2.7
35
32
  * SDL_ttf >= 2.0.6
36
33
 
37
- (If you don't have some of those, you have to disable those features
38
- by passing some flags to the build process. See "Advanced Install", below.)
39
-
40
- If you are compiling source on a binary-based Linux ditribution,
41
- you will also need the "dev" packages of ruby, SDL, SDL_gfx, SDL_image,
42
- SDL_mixer, and SDL_ttf. (Really, you just need the header files.)
43
-
44
- And of course, if you are compiling the source, you will need a C compiler!
45
- These versions of gcc worked fine when I tried them; other compilers might
46
- work too:
47
-
48
- * gcc 3.3, 3.4, 4.0, 4.1
49
-
50
34
 
51
35
  == Install
52
36
 
53
37
  === Basic Install
54
38
 
55
- Extract the archive and enter its top directory.
56
- Then run ($ indicates as user, # as root):
57
-
58
- $ rake build
59
- # rake install
60
-
61
- === Advanced Install
62
-
63
- The build and install tasks can be configured by providing certain commands
64
- to rake:
65
-
66
- no-sdl-gfx:: do not build modules which depend on SDL_gfx
67
- no-sdl-image:: do not build modules which depend on SDL_image
68
- no-sdl-mixer:: do not build modules which depend on SDL_mixer
69
- no-sdl-ttf:: do not build modules which depend on SDL_ttf
70
- no-opengl:: do not build modules which depend on OpenGL
71
-
72
- no-sdl-config:: do not guess compiler/linker flags using `sdl-config'
73
-
74
- debug:: build modules with debbugging flags enabled
75
- universal:: on MacOS X, try to compile for both PPC and Intel
76
- verbose:: display the build commands as they are run
39
+ The simplest way to install is with RubyGems:
77
40
 
78
- Additionally, the build process respects certain environmental variables.
79
- In particular, CFLAGS and LDFLAGS are important for users compiling with
80
- the no-sdl-config command.
41
+ $ sudo gem install rubygame
81
42
 
82
- CC:: C compiler command
83
- CFLAGS:: flags passed to the C compiler
84
- LDSHARED:: linker command
85
- LDFLAGS:: flags passed to the linker
86
- RUBYARCHDIR:: where to install platform-specific compiled extensions
87
- RUBYLIBDIR:: where to install platform-independent interpreted libs
43
+ Another way is to install directly from the source:
88
44
 
89
- IMPORTANT: if you are missing any optional SDL_* libraries, you must specify
90
- "no-*" flags for those libraries. For example, if you don't have SDL_gfx:
45
+ $ sudo rake install
91
46
 
92
- $ rake no-sdl-gfx build
47
+ Or generate and install a gem from the source:
93
48
 
94
- If you don't disable the features, the compile will probably fail when it
95
- looks for the headers and libraries. (The build system is not smart enough to
96
- automatically disable missing features.)
49
+ $ rake gem
50
+ $ sudo gem install pkg/rubygame-*.gem
97
51
 
98
52
  === Generating documentation
99
53
 
100
54
  You can generate documentation for Rubygame's API by running:
101
55
 
102
- # rake rdoc
56
+ $ rake rdoc
103
57
 
104
58
  Documentation will be generated as HTML in the 'html' directory.
105
59
  Open 'html/index.html' in a web browser to get started.
106
60
 
61
+
107
62
  == Usage
108
63
 
109
64
  See the documentation (online at http://docs.rubygame.org, or
110
65
  generated locally with the 'rake rdoc' command).
111
66
 
112
67
  We also recommend that you take a peek at the demo applications in
113
- the 'samples' directory, especially demo_rubygame.rb and chimp.rb.
68
+ the 'samples' directory, especially image_viewer.rb,
69
+ demo_rubygame.rb, and chimp.rb.
70
+
71
+
72
+ == About the version number
73
+
74
+ The version number of Rubygame has a strict meaning, to help you
75
+ decide whether the new version might break your application. The
76
+ version number has 3 parts: the major number, the minor number, and
77
+ the patch number. For the example of Rubygame 2.6.0:
78
+
79
+ 2 . 6 . 0
80
+ MAJOR . MINOR . PATCH
81
+
82
+ When a new release of Rubygame is made, one of the version numbers
83
+ will go up, and the numbers that come after it will be reset to 0.
84
+ Which number will go up depends on how much the Rubygame API changed:
85
+
86
+ - *MAJOR*: API has changed, and old apps _must_ be updated.
87
+ An example of this is when a class has been significantly changed,
88
+ or a method has renamed/moved to another module and the old name is
89
+ removed.
90
+
91
+ - *MINOR*: API has changed, but old apps will still work.
92
+ An example of this is when a new feature has been added, or a
93
+ method has been renamed but the old name is still supported.
94
+
95
+ - *PATCH*: API has not changed at all.
96
+ An example of this is when a bug has been fixed, or existing code
97
+ has been improved beneath the surface.
98
+
114
99
 
115
100
  == License
116
101
 
117
102
  Rubygame is distributed under the terms of the GNU Lesser GPL.
118
103
  See LICENSE for more details.
119
104
 
120
- The contents of the file 'Rakefile' is licensed under the terms of the
121
- MIT license. See that file for more details.
122
-
123
- Some of the sample files are distributed under licenses other than the
124
- GNU Lesser GPL. See 'samples/README' and 'samples/GPL' for more details.
105
+ Some of the sample files are distributed under licenses other than
106
+ the GNU Lesser GPL. See 'samples/README' and 'samples/GPL' for more
107
+ details.
125
108
 
126
109
 
127
110
  John Croisant (jacius at gmail.com)
data/ROADMAP CHANGED
@@ -1,22 +1,22 @@
1
1
  = ROADMAP
2
2
 
3
3
  This represents the direction Rubygame will be going in, but
4
- keep in mind that specific details may change over time.
4
+ keep in mind that plans and details may change over time.
5
5
 
6
6
 
7
- == 2.X.0 (_possible_ minor releases before 3.0.0)
7
+ == 2.X (_possible_ minor releases before 3.0)
8
8
 
9
9
  === Focus: Surface & Rect
10
10
 
11
11
  - Surface improvements
12
12
  - Make Surface instances copyable and marshalable
13
13
  - Support for palettes on 8-bit Surfaces
14
+ - Export as OpenGL-ready 32bit pixel data.
14
15
  - To Fix: New Surfaces never have alpha channels
15
- - To Fix: Surface#set_at doesn't respect alpha
16
16
  - To Add: Surface#pixels= (set pixel data directly)
17
17
  - To Add: Surface.load_from_pixels (create from pixel data)
18
18
 
19
- - Rewrite Rect class in C for speed
19
+ - Optimize Rect for speed
20
20
 
21
21
 
22
22
  === Focus: Sprites
@@ -24,18 +24,20 @@ keep in mind that specific details may change over time.
24
24
  - New sprite system
25
25
  - New Sprite, Scene, and Camera classes.
26
26
  - More powerful and simpler to use.
27
- - Integration with the Chipmunk physics library.
27
+ - Integration with the Chipmunk physics library?
28
28
 
29
29
 
30
30
 
31
- == 3.0.0 (next major release)
31
+ == 3.0 (next major release)
32
32
 
33
33
  - Backwards compatibility is broken:
34
34
  - Deprecated classes / methods retired:
35
35
  - Rubygame::Mixer module.
36
36
  - Rubygame::Mixer::Sample class. Use Rubygame::Sound.
37
37
  - Rubygame::Mixer::Music class. Use Rubygame::Music.
38
- - Rubygame::Surface.load_image method. User Rubygame::Surface.load.
38
+ - Rubygame::Surface.load_image method. Use Rubygame::Surface.load.
39
+ - Rubygame::Ftor class. An alternative class will be provided.
40
+ - Rubygame::MediaBag class. Use Surface#[], Sound#[], and Music#[].
39
41
  - Surface#get_at
40
42
  - Sprites::Group#collide_group
41
43
 
@@ -44,7 +46,17 @@ keep in mind that specific details may change over time.
44
46
 
45
47
 
46
48
 
47
- == On the horizon...
49
+ == Possible future developments
50
+
51
+ - Switch from SDL_gfx to SPriG for graphics primitives.
52
+ - SPriG provides more functionality and flexibility, and a more
53
+ consistent interface.
54
+ - How does speed compare?
55
+ - Is it buggy?
56
+
57
+ - Alternative back-ends:
58
+ - OpenGL (faster rendering, better Mac support)
59
+ - Allegro?
48
60
 
49
61
  - Polygon, circle, and other geometric primitives
50
62
  - Drawing, with styles?
@@ -65,8 +77,3 @@ keep in mind that specific details may change over time.
65
77
  - E.g. moves a sprite from point A to point B over N seconds.
66
78
  - Many types of effects, easy to define custom ones.
67
79
  - Takes parameters: start/end time, others depending on effect.
68
-
69
- - C equivalent of Rect.new_from_object (see rect.rb)
70
- - Screen#update (cannot pass object with rect attribute)
71
- - Screen#update_rects (same as above)
72
- - Why not just call the ruby function from within C?
@@ -0,0 +1,79 @@
1
+ = Custom SDL Load Paths
2
+
3
+ In Rubygame 2.6 and later, you can tell Rubygame to look in custom
4
+ locations to find the SDL libraries (e.g. DLL files). This is mostly
5
+ intended for when you are packaging your application in a stand-alone
6
+ package (e.g. with RubyScript2Exe), and want to distribute the SDL
7
+ libraries with your application, so that users do not need to install
8
+ SDL.
9
+
10
+ == Setting Load Paths
11
+
12
+ Setting custom load paths is easy: just set the SDL_PATHS constant
13
+ to an Array of directories before you do `require "rubygame"`.
14
+ Note: You really must set SDL_PATHS *before* loading Rubygame!
15
+
16
+ Rubygame will look first in the paths in SDL_PATHS, in the order they
17
+ are given in the array. If Rubygame can't find a SDL library in any of
18
+ the SDL_PATHS directories, Rubygame will then search for the library
19
+ in some common library paths for the current operating system (e.g.
20
+ "C:\windows\system32\" on Windows, "/usr/lib/" on Linux, etc.).
21
+
22
+ For example, if the SDL libraries are in "mygame/libs/", and your
23
+ main script is "mygame/mygame.rb", you could do the following in
24
+ "mygame/mygame.rb":
25
+
26
+ main_dir = File.dirname(__FILE__)
27
+ SDL_PATHS = [ File.join( main_dir, "libs" ) ]
28
+
29
+ require "rubygame"
30
+
31
+ # ... the rest of your code ...
32
+
33
+ == Per-OS Load Paths
34
+
35
+ If you prefer to split the libraries into a separate directory for
36
+ each operating system, you can set SDL_PATHS to a Hash instead. For
37
+ example:
38
+
39
+ main_dir = File.dirname(__FILE__)
40
+ SDL_PATHS = {
41
+ /linux/ => File.join( main_dir, "libs", "linux" ),
42
+ /bsd/ => File.join( main_dir, "libs", "bsd" ),
43
+ /darwin/ => File.join( main_dir, "libs", "mac" ),
44
+ /windows/ => File.join( main_dir, "libs", "windows" ),
45
+ }
46
+
47
+ require "rubygame"
48
+
49
+ # ... the rest of your code ...
50
+
51
+ Each key in the hash should be a Regexp that matches an OS name. As of
52
+ this writing (October 2009), the list of recognized OS names is:
53
+
54
+ * "darwin" (MacOS X)
55
+ * "freebsd"
56
+ * "linux"
57
+ * "openbsd"
58
+ * "solaris"
59
+ * "windows"
60
+
61
+ == Library File Names
62
+
63
+ Rubygame has certain expectations about the names of library files for
64
+ each operating system ("[NAME]" is replaced with e.g. "SDL"):
65
+
66
+ 'Nix:: lib[NAME].so
67
+ Mac:: lib[NAME].dylib or [NAME].framework/[NAME]
68
+ Windows:: [NAME].dll
69
+
70
+ The specific libraries used by Rubygame are:
71
+
72
+ SDL:: libSDL.so; libSDL.dylib or SDL.framework/SDL; SDL.dll
73
+ SDL_gfx:: libSDL_gfx.so; libSDL_gfx.dylib or SDL_gfx.framework/SDL_gfx; SDL_gfx.dll
74
+ SDL_image:: libSDL_image.so; libSDL_image.dylib or SDL_image.framework/SDL_image; SDL_image.dll
75
+ SDL_mixer:: libSDL_mixer.so; libSDL_mixer.dylib or SDL_mixer.framework/SDL_mixer; SDL_mixer.dll
76
+ SDL_ttf:: libSDL_ttf.so; libSDL_ttf.dylib or SDL_ttf.framework/SDL_ttf; SDL_ttf.dll
77
+
78
+ SDL is absolutely required. The others are optional, but strongly
79
+ recommended, because they provide a lot of extra functionality.