rubygame 2.5.3 → 2.6.0

Sign up to get free protection for your applications and to get access to all the features.
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.