Commits

Anonymous committed 4c398dd

doc cleanups

Comments (0)

Files changed (67)

 # BREAK = change breaks existing code
 # BUG	= fixed a bug that was (or could have been) crashing
 
+June 7, 2003
+        Font() no longer segfaults on bad filename [BUG]
+        add color module for simple color manipulations
+
+June 6, 2003
+	set_palette_at() index 0 fix
+        draw.arc() (thanks Lalo Martins)
+        Rects are pickleable
+
 May 12, 2003
 	Brett Calcott's quick fix for 'trunc' on visualc
 
 || <a href=ref/Rect.html>Rect</a> || 
 <a href=ref/Sound.html>Sound</a> || 
 <a href=ref/Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=ref/pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=ref/pygame_color.html>color</a> || 
+<a href=ref/pygame_cursors.html>cursors</a> || 
 <a href=ref/pygame_sprite.html>sprite</a> ||<br>
 
 
 
 <hr>
 
-<font size=+1><b>Basic Documentation</b></font><br><li><a href=../readme.html>Readme</a> - Pygame Readme Information
-</li>
-<li><a href=../install.html>Install</a> - Install Information
-</li>
-<li><a href=LGPL>LGPL</a> - Gnu lesser general public license</li>
-<li><a href=logos.html>Logos</a> - Pygame Logos
-</li><br>&nbsp;<br><font size=+1><b>Tutorials / Introductions</b></font><br><li><a href=tut/ChimpLineByLine.html>ChimpLineByLine</a> - Line by Line Descriptions of the Chimp Example
-</li>
-<li><a href=tut/DisplayModes.html>DisplayModes</a> - Choosing and Configuring Display Modes
+<font size=+2><b>Tutorials</b></font><br><li><a href=tut/DisplayModes.html>DisplayModes</a> - Choosing and Configuring Display Modes
 </li>
 <li><a href=tut/Executable.html>Executable</a> - Creating a Standalone Windows Executable
 </li>
 </li>
 <li><a href=tut/SpriteIntro.html>SpriteIntro</a> - Sprite Module Introduction
 </li>
-<li><a href=tut/SurfarrayIntro.html>SurfarrayIntro</a> - Introduction to the surfarray module
+<li><a href=tut/chimp/ChimpLineByLine.html>ChimpLineByLine</a> - Line by Line Descriptions of the Chimp Example
 </li>
-<li><a href=tut/newbieguide.html>Newbieguide</a> - A Newbie Guide To Pygame
+<li><a href=tut/newbieguide.html>Newbieguide</a> - David Clark's Newbie Guide To Pygame
+</li>
+<li><a href=tut/surfarray/SurfarrayIntro.html>SurfarrayIntro</a> - Introduction to the surfarray module
 </li>
 <li><a href=tut/tom/MakeGames.html>MakeGames</a> - Tom Chance's Making Games Tutorial
+</li><br>&nbsp;<br><font size=+1><b>Included With Pygame</b></font><br><li><a href=../readme.html>Readme</a> - Pygame Readme Information
+</li>
+<li><a href=../install.html>Install</a> - Install Information
+</li>
+<li><a href=LGPL>LGPL</a> - Gnu lesser general public license</li>
+<li><a href=logos.html>Logos</a> - Pygame Logos
 </li>
 <br><hr><br><font size=+1><b>Full Index</b></font><ul>
 <!--FULLINDEX-->
 <a href=ref/pygame.html#init>pygame.init</a> - autoinitialize all imported pygame modules<br>
 <a href=ref/pygame.html#quit>pygame.quit</a> - uninitialize all pygame modules<br>
 <a href=ref/pygame.html#register_quit>pygame.register_quit</a> - routine to call when pygame quits<br>
-<a href=ref/pygame_cdrom.html#CD>pygame.cdrom.CD</a> - create new CD object<br>
-<a href=ref/pygame_cdrom.html#get_count>pygame.cdrom.get_count</a> - query number of cdroms on system<br>
-<a href=ref/pygame_cdrom.html#get_init>pygame.cdrom.get_init</a> - query init of cdrom module<br>
-<a href=ref/pygame_cdrom.html#init>pygame.cdrom.init</a> - initialize the cdrom subsystem<br>
-<a href=ref/pygame_cdrom.html#quit>pygame.cdrom.quit</a> - uninitialize the cdrom subsystem<br>
-<a href=ref/pygame_constants.html#display >pygame.constants.display </a> - The following constants are used by the display module and Surfaces<br>
-<a href=ref/pygame_constants.html#events >pygame.constants.events </a> - These constants define the various event types<br>
-<a href=ref/pygame_constants.html#keyboard >pygame.constants.keyboard </a> - These constants represent the keys on the keyboard.<br>
-<a href=ref/pygame_constants.html#modifiers >pygame.constants.modifiers </a> - These constants represent the modifier keys on the keyboard.<br>
-<a href=ref/pygame_constants.html#zdepracated >pygame.constants.zdepracated </a> - The following constants are made available, but generally not needed<br>
-<a href=ref/pygame_cursors.html#compile>pygame.cursors.compile</a> - compile cursor strings into cursor data<br>
-<a href=ref/pygame_cursors.html#load_xbm>pygame.cursors.load_xbm</a> - reads a pair of XBM files into set_cursor arguments<br>
-<a href=ref/pygame_display.html#Info>pygame.display.Info</a> - get display capabilities and settings<br>
-<a href=ref/pygame_display.html#flip>pygame.display.flip</a> - update the display<br>
-<a href=ref/pygame_display.html#get_active>pygame.display.get_active</a> - get state of display mode<br>
-<a href=ref/pygame_display.html#get_caption>pygame.display.get_caption</a> - get the current title of the window<br>
-<a href=ref/pygame_display.html#get_driver>pygame.display.get_driver</a> - get the current sdl video driver<br>
-<a href=ref/pygame_display.html#get_init>pygame.display.get_init</a> - get status of display module initialization<br>
-<a href=ref/pygame_display.html#get_surface>pygame.display.get_surface</a> - get current display surface<br>
-<a href=ref/pygame_display.html#gl_get_attribute>pygame.display.gl_get_attribute</a> - get special OPENGL attributes<br>
-<a href=ref/pygame_display.html#gl_set_attribute>pygame.display.gl_set_attribute</a> - set special OPENGL attributes<br>
-<a href=ref/pygame_display.html#iconify>pygame.display.iconify</a> - minimize the display window<br>
-<a href=ref/pygame_display.html#init>pygame.display.init</a> - initialize the display module<br>
-<a href=ref/pygame_display.html#list_modes>pygame.display.list_modes</a> - query all resolutions for requested mode<br>
-<a href=ref/pygame_display.html#mode_ok>pygame.display.mode_ok</a> - query a specific display mode<br>
-<a href=ref/pygame_display.html#quit>pygame.display.quit</a> - uninitialize the display module<br>
-<a href=ref/pygame_display.html#set_caption>pygame.display.set_caption</a> - changes the title of the window<br>
-<a href=ref/pygame_display.html#set_gamma>pygame.display.set_gamma</a> - change the brightness of the display<br>
-<a href=ref/pygame_display.html#set_gamma_ramp>pygame.display.set_gamma_ramp</a> - advanced control over the display gamma ramps<br>
-<a href=ref/pygame_display.html#set_icon>pygame.display.set_icon</a> - changes the window manager icon for the window<br>
-<a href=ref/pygame_display.html#set_mode>pygame.display.set_mode</a> - set the display mode<br>
-<a href=ref/pygame_display.html#set_palette>pygame.display.set_palette</a> - set the palette<br>
-<a href=ref/pygame_display.html#toggle_fullscreen>pygame.display.toggle_fullscreen</a> - switch the display fullscreen mode<br>
-<a href=ref/pygame_display.html#update>pygame.display.update</a> - update an area of the display<br>
-<a href=ref/pygame_draw.html#aaline>pygame.draw.aaline</a> - draw a line on a surface<br>
-<a href=ref/pygame_draw.html#aalines>pygame.draw.aalines</a> - draw multiple connected anti-aliased lines on a surface<br>
-<a href=ref/pygame_draw.html#arc>pygame.draw.arc</a> - draw an elliptic arc on a surface<br>
-<a href=ref/pygame_draw.html#circle>pygame.draw.circle</a> - draw a circle on a surface<br>
-<a href=ref/pygame_draw.html#ellipse>pygame.draw.ellipse</a> - draw an ellipse on a surface<br>
-<a href=ref/pygame_draw.html#line>pygame.draw.line</a> - draw a line on a surface<br>
-<a href=ref/pygame_draw.html#lines>pygame.draw.lines</a> - draw multiple connected lines on a surface<br>
-<a href=ref/pygame_draw.html#polygon>pygame.draw.polygon</a> - draws a polygon on a surface<br>
-<a href=ref/pygame_draw.html#rect>pygame.draw.rect</a> - draws a rectangle on a surface<br>
-<a href=ref/pygame_event.html#Event>pygame.event.Event</a> - create new event object<br>
-<a href=ref/pygame_event.html#clear>pygame.event.clear</a> - remove all of an event type from the queue<br>
-<a href=ref/pygame_event.html#event_name>pygame.event.event_name</a> - name for event type<br>
-<a href=ref/pygame_event.html#get>pygame.event.get</a> - get all of an event type from the queue<br>
-<a href=ref/pygame_event.html#get_blocked>pygame.event.get_blocked</a> - checks if an event is being blocked<br>
-<a href=ref/pygame_event.html#get_grab>pygame.event.get_grab</a> - query the state of input grabbing<br>
-<a href=ref/pygame_event.html#peek>pygame.event.peek</a> - query if any of event types are waiting<br>
-<a href=ref/pygame_event.html#poll>pygame.event.poll</a> - get an available event<br>
-<a href=ref/pygame_event.html#post>pygame.event.post</a> - place an event on the queue<br>
-<a href=ref/pygame_event.html#pump>pygame.event.pump</a> - update the internal messages<br>
-<a href=ref/pygame_event.html#set_allowed>pygame.event.set_allowed</a> - allows certain events onto the queue<br>
-<a href=ref/pygame_event.html#set_blocked>pygame.event.set_blocked</a> - blocks certain events from the queue<br>
-<a href=ref/pygame_event.html#set_grab>pygame.event.set_grab</a> - grab all input events<br>
-<a href=ref/pygame_event.html#wait>pygame.event.wait</a> - wait for an event<br>
-<a href=ref/pygame_font.html#Font>pygame.font.Font</a> - create a new font object<br>
-<a href=ref/pygame_font.html#get_default_font>pygame.font.get_default_font</a> - get the name of the default font<br>
-<a href=ref/pygame_font.html#get_init>pygame.font.get_init</a> - get status of font module initialization<br>
-<a href=ref/pygame_font.html#init>pygame.font.init</a> - initialize the display module<br>
-<a href=ref/pygame_font.html#quit>pygame.font.quit</a> - uninitialize the font module<br>
-<a href=ref/pygame_image.html#fromstring>pygame.image.fromstring</a> - create a surface from a raw string buffer<br>
-<a href=ref/pygame_image.html#get_extended>pygame.image.get_extended</a> - returns true if SDL_image formats are available<br>
-<a href=ref/pygame_image.html#load>pygame.image.load</a> - load an image to a new Surface<br>
-<a href=ref/pygame_image.html#save>pygame.image.save</a> - save surface data<br>
-<a href=ref/pygame_image.html#tostring>pygame.image.tostring</a> - create a raw string buffer of the surface data<br>
-<a href=ref/pygame_joystick.html#Joystick>pygame.joystick.Joystick</a> - create new joystick object<br>
-<a href=ref/pygame_joystick.html#get_count>pygame.joystick.get_count</a> - query number of joysticks on system<br>
-<a href=ref/pygame_joystick.html#get_init>pygame.joystick.get_init</a> - query initialization of joystick module<br>
-<a href=ref/pygame_joystick.html#init>pygame.joystick.init</a> - initialize joystick module<br>
-<a href=ref/pygame_joystick.html#quit>pygame.joystick.quit</a> - uninitialize joystick module<br>
-<a href=ref/pygame_key.html#get_focused>pygame.key.get_focused</a> - state of keyboard focus<br>
-<a href=ref/pygame_key.html#get_mods>pygame.key.get_mods</a> - get current state of modifier keys<br>
-<a href=ref/pygame_key.html#get_pressed>pygame.key.get_pressed</a> - get the pressed state for all keys<br>
-<a href=ref/pygame_key.html#name>pygame.key.name</a> - get the name of a key<br>
-<a href=ref/pygame_key.html#set_mods>pygame.key.set_mods</a> - set the state of the modifier keys<br>
-<a href=ref/pygame_key.html#set_repeat>pygame.key.set_repeat</a> - change the keyboard repeat<br>
-<a href=ref/pygame_mixer.html#Channel>pygame.mixer.Channel</a> - get channel object<br>
-<a href=ref/pygame_mixer.html#Sound>pygame.mixer.Sound</a> - load a new soundfile<br>
-<a href=ref/pygame_mixer.html#fadeout>pygame.mixer.fadeout</a> - fadeout all channels<br>
-<a href=ref/pygame_mixer.html#find_channel>pygame.mixer.find_channel</a> - find an available sound channel<br>
-<a href=ref/pygame_mixer.html#get_busy>pygame.mixer.get_busy</a> - query busy channels<br>
-<a href=ref/pygame_mixer.html#get_init>pygame.mixer.get_init</a> - query initialization for the mixer<br>
-<a href=ref/pygame_mixer.html#get_num_channels>pygame.mixer.get_num_channels</a> - query the number of channels<br>
-<a href=ref/pygame_mixer.html#init>pygame.mixer.init</a> - initialize mixer module<br>
-<a href=ref/pygame_mixer.html#pause>pygame.mixer.pause</a> - pause all channels<br>
-<a href=ref/pygame_mixer.html#pre_init>pygame.mixer.pre_init</a> - presets the init default values<br>
-<a href=ref/pygame_mixer.html#quit>pygame.mixer.quit</a> - unitializes the mixer<br>
-<a href=ref/pygame_mixer.html#set_num_channels>pygame.mixer.set_num_channels</a> - sets the number of available channels<br>
-<a href=ref/pygame_mixer.html#set_reserved>pygame.mixer.set_reserved</a> - reserves first given channels<br>
-<a href=ref/pygame_mixer.html#stop>pygame.mixer.stop</a> - stop all channels<br>
-<a href=ref/pygame_mixer.html#unpause>pygame.mixer.unpause</a> - restart any pause channels<br>
-<a href=ref/pygame_mixer_music.html#fadeout>pygame.mixer.music.fadeout</a> - fadeout current music<br>
-<a href=ref/pygame_mixer_music.html#get_busy>pygame.mixer.music.get_busy</a> - query state of the music<br>
-<a href=ref/pygame_mixer_music.html#get_endevent>pygame.mixer.music.get_endevent</a> - query the current music finished event<br>
-<a href=ref/pygame_mixer_music.html#get_pos>pygame.mixer.music.get_pos</a> - query music position<br>
-<a href=ref/pygame_mixer_music.html#get_volume>pygame.mixer.music.get_volume</a> - query music volume<br>
-<a href=ref/pygame_mixer_music.html#load>pygame.mixer.music.load</a> - load current music<br>
-<a href=ref/pygame_mixer_music.html#pause>pygame.mixer.music.pause</a> - pause the playing music<br>
-<a href=ref/pygame_mixer_music.html#play>pygame.mixer.music.play</a> - play the current loaded music<br>
-<a href=ref/pygame_mixer_music.html#queue>pygame.mixer.music.queue</a> - preload and queue a music file<br>
-<a href=ref/pygame_mixer_music.html#rewind>pygame.mixer.music.rewind</a> - restarts music<br>
-<a href=ref/pygame_mixer_music.html#set_endevent>pygame.mixer.music.set_endevent</a> - sets music finished event<br>
-<a href=ref/pygame_mixer_music.html#set_volume>pygame.mixer.music.set_volume</a> - set music volume<br>
-<a href=ref/pygame_mixer_music.html#stop>pygame.mixer.music.stop</a> - stop the playing music<br>
-<a href=ref/pygame_mixer_music.html#unpause>pygame.mixer.music.unpause</a> - restarts the paused music<br>
-<a href=ref/pygame_mouse.html#get_cursor>pygame.mouse.get_cursor</a> - get mouse cursor data<br>
-<a href=ref/pygame_mouse.html#get_focused>pygame.mouse.get_focused</a> - state of mouse input focus<br>
-<a href=ref/pygame_mouse.html#get_pos>pygame.mouse.get_pos</a> - gets the cursor position<br>
-<a href=ref/pygame_mouse.html#get_pressed>pygame.mouse.get_pressed</a> - state of the mouse buttons<br>
-<a href=ref/pygame_mouse.html#get_rel>pygame.mouse.get_rel</a> - gets the movement of the mouse<br>
-<a href=ref/pygame_mouse.html#set_cursor>pygame.mouse.set_cursor</a> - state of shape of the mouse cursor<br>
-<a href=ref/pygame_mouse.html#set_pos>pygame.mouse.set_pos</a> - moves the cursor position<br>
-<a href=ref/pygame_mouse.html#set_visible>pygame.mouse.set_visible</a> - show or hide the mouse cursor<br>
-<a href=ref/pygame_movie.html#Movie>pygame.movie.Movie</a> - load a new MPEG stream<br>
-<a href=ref/pygame_sndarray.html#array>pygame.sndarray.array</a> - get an array copied from a sound<br>
-<a href=ref/pygame_sndarray.html#make_sound>pygame.sndarray.make_sound</a> - create a new Sound object from array data<br>
-<a href=ref/pygame_sndarray.html#samples>pygame.sndarray.samples</a> - get a reference to the sound samples<br>
-<a href=ref/pygame_sprite.html#Group.add>pygame.sprite.Group.add</a> -            add sprite to group<br>
-<a href=ref/pygame_sprite.html#Group.copy>pygame.sprite.Group.copy</a> -            copy a group with all the same sprites<br>
-<a href=ref/pygame_sprite.html#Group.empty>pygame.sprite.Group.empty</a> -            remove all sprites<br>
-<a href=ref/pygame_sprite.html#Group.has>pygame.sprite.Group.has</a> -            ask if group has sprite<br>
-<a href=ref/pygame_sprite.html#Group.remove>pygame.sprite.Group.remove</a> -            remove sprite from group<br>
-<a href=ref/pygame_sprite.html#Group.sprites>pygame.sprite.Group.sprites</a> -            return an object to loop over each sprite<br>
-<a href=ref/pygame_sprite.html#Group.update>pygame.sprite.Group.update</a> -            call update for all member sprites<br>
-<a href=ref/pygame_sprite.html#Group>pygame.sprite.Group</a> - <b>(class)</b> - the Group class is a container for sprites<br>
-<a href=ref/pygame_sprite.html#GroupSingle>pygame.sprite.GroupSingle</a> - <b>(class)</b> - a group container that holds a single most recent item<br>
-<a href=ref/pygame_sprite.html#RenderClear.clear>pygame.sprite.RenderClear.clear</a> -            erase the previous position of all sprites<br>
-<a href=ref/pygame_sprite.html#RenderClear.draw>pygame.sprite.RenderClear.draw</a> -            draw all sprites onto a surface<br>
-<a href=ref/pygame_sprite.html#RenderClear>pygame.sprite.RenderClear</a> - <b>(class)</b> - a group container that can draw and clear its sprites<br>
-<a href=ref/pygame_sprite.html#RenderPlain.draw>pygame.sprite.RenderPlain.draw</a> -            draw all sprites onto a surface<br>
-<a href=ref/pygame_sprite.html#RenderPlain>pygame.sprite.RenderPlain</a> - <b>(class)</b> - a sprite group that can draw all its sprites<br>
-<a href=ref/pygame_sprite.html#RenderUpdates.draw>pygame.sprite.RenderUpdates.draw</a> -            draw all sprites onto the surface<br>
-<a href=ref/pygame_sprite.html#RenderUpdates>pygame.sprite.RenderUpdates</a> - <b>(class)</b> - a sprite group that can draw and clear with update rectangles<br>
-<a href=ref/pygame_sprite.html#Sprite.add>pygame.sprite.Sprite.add</a> -            add a sprite to container<br>
-<a href=ref/pygame_sprite.html#Sprite.alive>pygame.sprite.Sprite.alive</a> -            ask the life of a sprite<br>
-<a href=ref/pygame_sprite.html#Sprite.groups>pygame.sprite.Sprite.groups</a> -            list used sprite containers<br>
-<a href=ref/pygame_sprite.html#Sprite.kill>pygame.sprite.Sprite.kill</a> -            end life of sprite, remove from all groups<br>
-<a href=ref/pygame_sprite.html#Sprite.remove>pygame.sprite.Sprite.remove</a> -            remove a sprite from container<br>
-<a href=ref/pygame_sprite.html#Sprite>pygame.sprite.Sprite</a> - <b>(class)</b> - the base class for your visible game objects.<br>
-<a href=ref/pygame_sprite.html#groupcollide>pygame.sprite.groupcollide</a> -        collision detection between group and group<br>
-<a href=ref/pygame_sprite.html#spritecollide>pygame.sprite.spritecollide</a> -        collision detection between sprite and group<br>
-<a href=ref/pygame_sprite.html#spritecollideany>pygame.sprite.spritecollideany</a> -        finds any sprites that collide<br>
-<a href=ref/pygame_surfarray.html#array2d>pygame.surfarray.array2d</a> - get a 2d array copied from a surface<br>
-<a href=ref/pygame_surfarray.html#array3d>pygame.surfarray.array3d</a> - get a 3d array copied from a surface<br>
-<a href=ref/pygame_surfarray.html#array_alpha>pygame.surfarray.array_alpha</a> - get an array with a surface pixel alpha values<br>
-<a href=ref/pygame_surfarray.html#array_colorkey>pygame.surfarray.array_colorkey</a> - get an array with a surface colorkey values<br>
-<a href=ref/pygame_surfarray.html#blit_array>pygame.surfarray.blit_array</a> - quickly transfer an array to a Surface<br>
-<a href=ref/pygame_surfarray.html#make_surface>pygame.surfarray.make_surface</a> - create a new Surface from array data<br>
-<a href=ref/pygame_surfarray.html#map_array>pygame.surfarray.map_array</a> - map an array with RGB values into mapped colors<br>
-<a href=ref/pygame_surfarray.html#pixels2d>pygame.surfarray.pixels2d</a> - get a 2d reference array to a surface<br>
-<a href=ref/pygame_surfarray.html#pixels3d>pygame.surfarray.pixels3d</a> - get a 3d reference array to a surface<br>
-<a href=ref/pygame_surfarray.html#pixels_alpha>pygame.surfarray.pixels_alpha</a> - get a reference array to a surface alpha data<br>
-<a href=ref/pygame_time.html#Clock>pygame.time.Clock</a> - create a new clock<br>
-<a href=ref/pygame_time.html#delay>pygame.time.delay</a> - accurately delay for a number of milliseconds<br>
-<a href=ref/pygame_time.html#get_ticks>pygame.time.get_ticks</a> - milliseconds since initialization<br>
-<a href=ref/pygame_time.html#set_timer>pygame.time.set_timer</a> - control timer events<br>
-<a href=ref/pygame_time.html#wait>pygame.time.wait</a> - yielding delay for a number of milliseconds<br>
-<a href=ref/pygame_transform.html#flip>pygame.transform.flip</a> - flips a surface on either axis<br>
-<a href=ref/pygame_transform.html#rotate>pygame.transform.rotate</a> - rotate a Surface<br>
-<a href=ref/pygame_transform.html#rotozoom>pygame.transform.rotozoom</a> - smoothly scale and/or rotate an image<br>
-<a href=ref/pygame_transform.html#scale2x>pygame.transform.scale2x</a> - doubles the size of the image with advanced scaling<br>
-<a href=ref/pygame_transform.html#scale>pygame.transform.scale</a> - scale a Surface to an arbitrary size<br>
+<a href=ref/pygame_cdrom.html#CD>cdrom.CD</a> - create new CD object<br>
+<a href=ref/pygame_cdrom.html#get_count>cdrom.get_count</a> - query number of cdroms on system<br>
+<a href=ref/pygame_cdrom.html#get_init>cdrom.get_init</a> - query init of cdrom module<br>
+<a href=ref/pygame_cdrom.html#init>cdrom.init</a> - initialize the cdrom subsystem<br>
+<a href=ref/pygame_cdrom.html#quit>cdrom.quit</a> - uninitialize the cdrom subsystem<br>
+<a href=ref/pygame_color.html#Color>color.Color</a> -        Get RGB values from common color names<br>
+<a href=ref/pygame_color.html#add>color.add</a> -        add two colors<br>
+<a href=ref/pygame_color.html#multiply>color.multiply</a> -        multiply two colors<br>
+<a href=ref/pygame_color.html#subtract>color.subtract</a> -        subtract two colors<br>
+<a href=ref/pygame_constants.html#display >constants.display </a> - The following constants are used by the display module and Surfaces<br>
+<a href=ref/pygame_constants.html#events >constants.events </a> - These constants define the various event types<br>
+<a href=ref/pygame_constants.html#keyboard >constants.keyboard </a> - These constants represent the keys on the keyboard.<br>
+<a href=ref/pygame_constants.html#modifiers >constants.modifiers </a> - These constants represent the modifier keys on the keyboard.<br>
+<a href=ref/pygame_constants.html#zdepracated >constants.zdepracated </a> - The following constants are made available, but generally not needed<br>
+<a href=ref/pygame_cursors.html#compile>cursors.compile</a> - compile cursor strings into cursor data<br>
+<a href=ref/pygame_cursors.html#load_xbm>cursors.load_xbm</a> - reads a pair of XBM files into set_cursor arguments<br>
+<a href=ref/pygame_display.html#Info>display.Info</a> - get display capabilities and settings<br>
+<a href=ref/pygame_display.html#flip>display.flip</a> - update the display<br>
+<a href=ref/pygame_display.html#get_active>display.get_active</a> - get state of display mode<br>
+<a href=ref/pygame_display.html#get_caption>display.get_caption</a> - get the current title of the window<br>
+<a href=ref/pygame_display.html#get_driver>display.get_driver</a> - get the current sdl video driver<br>
+<a href=ref/pygame_display.html#get_init>display.get_init</a> - get status of display module initialization<br>
+<a href=ref/pygame_display.html#get_surface>display.get_surface</a> - get current display surface<br>
+<a href=ref/pygame_display.html#gl_get_attribute>display.gl_get_attribute</a> - get special OPENGL attributes<br>
+<a href=ref/pygame_display.html#gl_set_attribute>display.gl_set_attribute</a> - set special OPENGL attributes<br>
+<a href=ref/pygame_display.html#iconify>display.iconify</a> - minimize the display window<br>
+<a href=ref/pygame_display.html#init>display.init</a> - initialize the display module<br>
+<a href=ref/pygame_display.html#list_modes>display.list_modes</a> - query all resolutions for requested mode<br>
+<a href=ref/pygame_display.html#mode_ok>display.mode_ok</a> - query a specific display mode<br>
+<a href=ref/pygame_display.html#quit>display.quit</a> - uninitialize the display module<br>
+<a href=ref/pygame_display.html#set_caption>display.set_caption</a> - changes the title of the window<br>
+<a href=ref/pygame_display.html#set_gamma>display.set_gamma</a> - change the brightness of the display<br>
+<a href=ref/pygame_display.html#set_gamma_ramp>display.set_gamma_ramp</a> - advanced control over the display gamma ramps<br>
+<a href=ref/pygame_display.html#set_icon>display.set_icon</a> - changes the window manager icon for the window<br>
+<a href=ref/pygame_display.html#set_mode>display.set_mode</a> - set the display mode<br>
+<a href=ref/pygame_display.html#set_palette>display.set_palette</a> - set the palette<br>
+<a href=ref/pygame_display.html#toggle_fullscreen>display.toggle_fullscreen</a> - switch the display fullscreen mode<br>
+<a href=ref/pygame_display.html#update>display.update</a> - update an area of the display<br>
+<a href=ref/pygame_draw.html#aaline>draw.aaline</a> - draw a line on a surface<br>
+<a href=ref/pygame_draw.html#aalines>draw.aalines</a> - draw multiple connected anti-aliased lines on a surface<br>
+<a href=ref/pygame_draw.html#arc>draw.arc</a> - draw an elliptic arc on a surface<br>
+<a href=ref/pygame_draw.html#circle>draw.circle</a> - draw a circle on a surface<br>
+<a href=ref/pygame_draw.html#ellipse>draw.ellipse</a> - draw an ellipse on a surface<br>
+<a href=ref/pygame_draw.html#line>draw.line</a> - draw a line on a surface<br>
+<a href=ref/pygame_draw.html#lines>draw.lines</a> - draw multiple connected lines on a surface<br>
+<a href=ref/pygame_draw.html#polygon>draw.polygon</a> - draws a polygon on a surface<br>
+<a href=ref/pygame_draw.html#rect>draw.rect</a> - draws a rectangle on a surface<br>
+<a href=ref/pygame_event.html#Event>event.Event</a> - create new event object<br>
+<a href=ref/pygame_event.html#clear>event.clear</a> - remove all of an event type from the queue<br>
+<a href=ref/pygame_event.html#event_name>event.event_name</a> - name for event type<br>
+<a href=ref/pygame_event.html#get>event.get</a> - get all of an event type from the queue<br>
+<a href=ref/pygame_event.html#get_blocked>event.get_blocked</a> - checks if an event is being blocked<br>
+<a href=ref/pygame_event.html#get_grab>event.get_grab</a> - query the state of input grabbing<br>
+<a href=ref/pygame_event.html#peek>event.peek</a> - query if any of event types are waiting<br>
+<a href=ref/pygame_event.html#poll>event.poll</a> - get an available event<br>
+<a href=ref/pygame_event.html#post>event.post</a> - place an event on the queue<br>
+<a href=ref/pygame_event.html#pump>event.pump</a> - update the internal messages<br>
+<a href=ref/pygame_event.html#set_allowed>event.set_allowed</a> - allows certain events onto the queue<br>
+<a href=ref/pygame_event.html#set_blocked>event.set_blocked</a> - blocks certain events from the queue<br>
+<a href=ref/pygame_event.html#set_grab>event.set_grab</a> - grab all input events<br>
+<a href=ref/pygame_event.html#wait>event.wait</a> - wait for an event<br>
+<a href=ref/pygame_font.html#Font>font.Font</a> - create a new font object<br>
+<a href=ref/pygame_font.html#get_default_font>font.get_default_font</a> - get the name of the default font<br>
+<a href=ref/pygame_font.html#get_init>font.get_init</a> - get status of font module initialization<br>
+<a href=ref/pygame_font.html#init>font.init</a> - initialize the display module<br>
+<a href=ref/pygame_font.html#quit>font.quit</a> - uninitialize the font module<br>
+<a href=ref/pygame_image.html#fromstring>image.fromstring</a> - create a surface from a raw string buffer<br>
+<a href=ref/pygame_image.html#get_extended>image.get_extended</a> - returns true if SDL_image formats are available<br>
+<a href=ref/pygame_image.html#load>image.load</a> - load an image to a new Surface<br>
+<a href=ref/pygame_image.html#save>image.save</a> - save surface data<br>
+<a href=ref/pygame_image.html#tostring>image.tostring</a> - create a raw string buffer of the surface data<br>
+<a href=ref/pygame_joystick.html#Joystick>joystick.Joystick</a> - create new joystick object<br>
+<a href=ref/pygame_joystick.html#get_count>joystick.get_count</a> - query number of joysticks on system<br>
+<a href=ref/pygame_joystick.html#get_init>joystick.get_init</a> - query initialization of joystick module<br>
+<a href=ref/pygame_joystick.html#init>joystick.init</a> - initialize joystick module<br>
+<a href=ref/pygame_joystick.html#quit>joystick.quit</a> - uninitialize joystick module<br>
+<a href=ref/pygame_key.html#get_focused>key.get_focused</a> - state of keyboard focus<br>
+<a href=ref/pygame_key.html#get_mods>key.get_mods</a> - get current state of modifier keys<br>
+<a href=ref/pygame_key.html#get_pressed>key.get_pressed</a> - get the pressed state for all keys<br>
+<a href=ref/pygame_key.html#name>key.name</a> - get the name of a key<br>
+<a href=ref/pygame_key.html#set_mods>key.set_mods</a> - set the state of the modifier keys<br>
+<a href=ref/pygame_key.html#set_repeat>key.set_repeat</a> - change the keyboard repeat<br>
+<a href=ref/pygame_mixer.html#Channel>mixer.Channel</a> - get channel object<br>
+<a href=ref/pygame_mixer.html#Sound>mixer.Sound</a> - load a new soundfile<br>
+<a href=ref/pygame_mixer.html#fadeout>mixer.fadeout</a> - fadeout all channels<br>
+<a href=ref/pygame_mixer.html#find_channel>mixer.find_channel</a> - find an available sound channel<br>
+<a href=ref/pygame_mixer.html#get_busy>mixer.get_busy</a> - query busy channels<br>
+<a href=ref/pygame_mixer.html#get_init>mixer.get_init</a> - query initialization for the mixer<br>
+<a href=ref/pygame_mixer.html#get_num_channels>mixer.get_num_channels</a> - query the number of channels<br>
+<a href=ref/pygame_mixer.html#init>mixer.init</a> - initialize mixer module<br>
+<a href=ref/pygame_mixer.html#pause>mixer.pause</a> - pause all channels<br>
+<a href=ref/pygame_mixer.html#pre_init>mixer.pre_init</a> - presets the init default values<br>
+<a href=ref/pygame_mixer.html#quit>mixer.quit</a> - unitializes the mixer<br>
+<a href=ref/pygame_mixer.html#set_num_channels>mixer.set_num_channels</a> - sets the number of available channels<br>
+<a href=ref/pygame_mixer.html#set_reserved>mixer.set_reserved</a> - reserves first given channels<br>
+<a href=ref/pygame_mixer.html#stop>mixer.stop</a> - stop all channels<br>
+<a href=ref/pygame_mixer.html#unpause>mixer.unpause</a> - restart any pause channels<br>
+<a href=ref/pygame_mixer_music.html#fadeout>mixer.music.fadeout</a> - fadeout current music<br>
+<a href=ref/pygame_mixer_music.html#get_busy>mixer.music.get_busy</a> - query state of the music<br>
+<a href=ref/pygame_mixer_music.html#get_endevent>mixer.music.get_endevent</a> - query the current music finished event<br>
+<a href=ref/pygame_mixer_music.html#get_pos>mixer.music.get_pos</a> - query music position<br>
+<a href=ref/pygame_mixer_music.html#get_volume>mixer.music.get_volume</a> - query music volume<br>
+<a href=ref/pygame_mixer_music.html#load>mixer.music.load</a> - load current music<br>
+<a href=ref/pygame_mixer_music.html#pause>mixer.music.pause</a> - pause the playing music<br>
+<a href=ref/pygame_mixer_music.html#play>mixer.music.play</a> - play the current loaded music<br>
+<a href=ref/pygame_mixer_music.html#queue>mixer.music.queue</a> - preload and queue a music file<br>
+<a href=ref/pygame_mixer_music.html#rewind>mixer.music.rewind</a> - restarts music<br>
+<a href=ref/pygame_mixer_music.html#set_endevent>mixer.music.set_endevent</a> - sets music finished event<br>
+<a href=ref/pygame_mixer_music.html#set_volume>mixer.music.set_volume</a> - set music volume<br>
+<a href=ref/pygame_mixer_music.html#stop>mixer.music.stop</a> - stop the playing music<br>
+<a href=ref/pygame_mixer_music.html#unpause>mixer.music.unpause</a> - restarts the paused music<br>
+<a href=ref/pygame_mouse.html#get_cursor>mouse.get_cursor</a> - get mouse cursor data<br>
+<a href=ref/pygame_mouse.html#get_focused>mouse.get_focused</a> - state of mouse input focus<br>
+<a href=ref/pygame_mouse.html#get_pos>mouse.get_pos</a> - gets the cursor position<br>
+<a href=ref/pygame_mouse.html#get_pressed>mouse.get_pressed</a> - state of the mouse buttons<br>
+<a href=ref/pygame_mouse.html#get_rel>mouse.get_rel</a> - gets the movement of the mouse<br>
+<a href=ref/pygame_mouse.html#set_cursor>mouse.set_cursor</a> - state of shape of the mouse cursor<br>
+<a href=ref/pygame_mouse.html#set_pos>mouse.set_pos</a> - moves the cursor position<br>
+<a href=ref/pygame_mouse.html#set_visible>mouse.set_visible</a> - show or hide the mouse cursor<br>
+<a href=ref/pygame_movie.html#Movie>movie.Movie</a> - load a new MPEG stream<br>
+<a href=ref/pygame_sndarray.html#array>sndarray.array</a> - get an array copied from a sound<br>
+<a href=ref/pygame_sndarray.html#make_sound>sndarray.make_sound</a> - create a new Sound object from array data<br>
+<a href=ref/pygame_sndarray.html#samples>sndarray.samples</a> - get a reference to the sound samples<br>
+<a href=ref/pygame_sprite.html#Group.add>sprite.Group.add</a> -            add sprite to group<br>
+<a href=ref/pygame_sprite.html#Group.copy>sprite.Group.copy</a> -            copy a group with all the same sprites<br>
+<a href=ref/pygame_sprite.html#Group.empty>sprite.Group.empty</a> -            remove all sprites<br>
+<a href=ref/pygame_sprite.html#Group.has>sprite.Group.has</a> -            ask if group has sprite<br>
+<a href=ref/pygame_sprite.html#Group.remove>sprite.Group.remove</a> -            remove sprite from group<br>
+<a href=ref/pygame_sprite.html#Group.sprites>sprite.Group.sprites</a> -            return an object to loop over each sprite<br>
+<a href=ref/pygame_sprite.html#Group.update>sprite.Group.update</a> -            call update for all member sprites<br>
+<a href=ref/pygame_sprite.html#Group>sprite.Group</a> - <b>(class)</b> - the Group class is a container for sprites<br>
+<a href=ref/pygame_sprite.html#GroupSingle>sprite.GroupSingle</a> - <b>(class)</b> - a group container that holds a single most recent item<br>
+<a href=ref/pygame_sprite.html#RenderClear.clear>sprite.RenderClear.clear</a> -            erase the previous position of all sprites<br>
+<a href=ref/pygame_sprite.html#RenderClear.draw>sprite.RenderClear.draw</a> -            draw all sprites onto a surface<br>
+<a href=ref/pygame_sprite.html#RenderClear>sprite.RenderClear</a> - <b>(class)</b> - a group container that can draw and clear its sprites<br>
+<a href=ref/pygame_sprite.html#RenderPlain.draw>sprite.RenderPlain.draw</a> -            draw all sprites onto a surface<br>
+<a href=ref/pygame_sprite.html#RenderPlain>sprite.RenderPlain</a> - <b>(class)</b> - a sprite group that can draw all its sprites<br>
+<a href=ref/pygame_sprite.html#RenderUpdates.draw>sprite.RenderUpdates.draw</a> -            draw all sprites onto the surface<br>
+<a href=ref/pygame_sprite.html#RenderUpdates>sprite.RenderUpdates</a> - <b>(class)</b> - a sprite group that can draw and clear with update rectangles<br>
+<a href=ref/pygame_sprite.html#Sprite.add>sprite.Sprite.add</a> -            add a sprite to container<br>
+<a href=ref/pygame_sprite.html#Sprite.alive>sprite.Sprite.alive</a> -            ask the life of a sprite<br>
+<a href=ref/pygame_sprite.html#Sprite.groups>sprite.Sprite.groups</a> -            list used sprite containers<br>
+<a href=ref/pygame_sprite.html#Sprite.kill>sprite.Sprite.kill</a> -            end life of sprite, remove from all groups<br>
+<a href=ref/pygame_sprite.html#Sprite.remove>sprite.Sprite.remove</a> -            remove a sprite from container<br>
+<a href=ref/pygame_sprite.html#Sprite>sprite.Sprite</a> - <b>(class)</b> - the base class for your visible game objects.<br>
+<a href=ref/pygame_sprite.html#groupcollide>sprite.groupcollide</a> -        collision detection between group and group<br>
+<a href=ref/pygame_sprite.html#spritecollide>sprite.spritecollide</a> -        collision detection between sprite and group<br>
+<a href=ref/pygame_sprite.html#spritecollideany>sprite.spritecollideany</a> -        finds any sprites that collide<br>
+<a href=ref/pygame_surfarray.html#array2d>surfarray.array2d</a> - get a 2d array copied from a surface<br>
+<a href=ref/pygame_surfarray.html#array3d>surfarray.array3d</a> - get a 3d array copied from a surface<br>
+<a href=ref/pygame_surfarray.html#array_alpha>surfarray.array_alpha</a> - get an array with a surface pixel alpha values<br>
+<a href=ref/pygame_surfarray.html#array_colorkey>surfarray.array_colorkey</a> - get an array with a surface colorkey values<br>
+<a href=ref/pygame_surfarray.html#blit_array>surfarray.blit_array</a> - quickly transfer an array to a Surface<br>
+<a href=ref/pygame_surfarray.html#make_surface>surfarray.make_surface</a> - create a new Surface from array data<br>
+<a href=ref/pygame_surfarray.html#map_array>surfarray.map_array</a> - map an array with RGB values into mapped colors<br>
+<a href=ref/pygame_surfarray.html#pixels2d>surfarray.pixels2d</a> - get a 2d reference array to a surface<br>
+<a href=ref/pygame_surfarray.html#pixels3d>surfarray.pixels3d</a> - get a 3d reference array to a surface<br>
+<a href=ref/pygame_surfarray.html#pixels_alpha>surfarray.pixels_alpha</a> - get a reference array to a surface alpha data<br>
+<a href=ref/pygame_time.html#Clock>time.Clock</a> - create a new clock<br>
+<a href=ref/pygame_time.html#delay>time.delay</a> - accurately delay for a number of milliseconds<br>
+<a href=ref/pygame_time.html#get_ticks>time.get_ticks</a> - milliseconds since initialization<br>
+<a href=ref/pygame_time.html#set_timer>time.set_timer</a> - control timer events<br>
+<a href=ref/pygame_time.html#wait>time.wait</a> - yielding delay for a number of milliseconds<br>
+<a href=ref/pygame_transform.html#flip>transform.flip</a> - flips a surface on either axis<br>
+<a href=ref/pygame_transform.html#rotate>transform.rotate</a> - rotate a Surface<br>
+<a href=ref/pygame_transform.html#rotozoom>transform.rotozoom</a> - smoothly scale and/or rotate an image<br>
+<a href=ref/pygame_transform.html#scale2x>transform.scale2x</a> - doubles the size of the image with advanced scaling<br>
+<a href=ref/pygame_transform.html#scale>transform.scale</a> - scale a Surface to an arbitrary size<br>
 <!--ENDINDEX-->
 </ul>
 
 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Channel.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Clock.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Font.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Joystick.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Movie.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Rect.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Sound.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/Surface.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_cdrom.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_constants.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_cursors.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_display.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_draw.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_event.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_font.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_image.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_joystick.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_key.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_mixer.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_mixer_music.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_mouse.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_movie.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_sndarray.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_sprite.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 
 <br>&nbsp;<br>
 You can manage the relationship between groups and sprites
 from both the groups and the actual sprite classes. Both
-have add() and remove() functions that let you add sprites
+have <a href=pygame_color.html#add>add()</a> and remove() functions that let you add sprites
 to groups and groups to sprites. Both have initializing
 functions that can accept a list of containers or sprites.
 <br>&nbsp;<br>
        return return any single sprite that collides with
        with the given sprite. If there are no collisions
        this returns None.
-       
+<br>&nbsp;<br>
        if you don't need all the features of the
        spritecollide function, this function will be a
        bit quicker.
-       
+<br>&nbsp;<br>
        all sprites must have a "rect" value, which is a
        rectangle of the sprite area.
 </ul><br>&nbsp;<br>

docs/ref/pygame_surfarray.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_time.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/ref/pygame_transform.html

 || <a href=Rect.html>Rect</a> || 
 <a href=Sound.html>Sound</a> || 
 <a href=Surface.html>Surface</a> ||<br>
-&nbsp;<br>|| <a href=pygame_cursors.html>cursors</a> || 
+&nbsp;<br>|| <a href=pygame_color.html>color</a> || 
+<a href=pygame_cursors.html>cursors</a> || 
 <a href=pygame_sprite.html>sprite</a> ||<br>
 
 

docs/tut/ChimpLineByLine.html

-<html><head><!--
-TUTORIAL:Line by Line Descriptions of the Chimp Example
--->
-  <title>Pygame Tutorials - Line By Line Chimp Example</title>
-</head>
-  <body>
-             
-<h1 align="center"><font size="-1">Pygame Tutorials</font><br>
-     Line By Line Chimp</h1>
-           
-<h2 align="center">by Pete Shinners<br>
-     <font size="-1">pete@shinners.org</font></h2>
-           
-<h3 align="center">Revision 2.1, January 9, 2001</h3>
-      <br>
-     <br>
-             
-<h2>Introduction</h2>
-       In the <i>pygame</i> examples there is a simple example named, "chimp". 
-  This example simulates a punchable monkey moving around a small screen with
-  promises of riches and reward. The example itself is very simple, and a
-bit thin on errorchecking code. This example program demonstrates many of
-pygame's abilities, like creating a graphics window, loading images and sound
-files, rendering TTF text, and basic event and mouse handling. <br>
-     &nbsp;<br>
-    The program and images can be found inside the standard source distribution
-  of pygame. For version 1.3 of pygame, this example was completely rewritten
-  to add a couple more features and correct error checking. This about doubled
-  the size of the original example, but now gives us much more to look at,
- as well as code the I can recommend reusing for your own projects.<br>
-    <br>
-      This tutorial will go through the code block by block. Explaining how 
- the  code works. There will also be mention of how the code could be improved 
- and what errorchecking could help out. <br>
-     &nbsp;<br>
-      This is an exellent tutorial for people getting their first look at 
-the  <i> pygame</i> code. Once <i>pygame</i> is fully installed, you can find
-and run the chimp demo for yourself in the examples directory.        
-<p align="center">     
-<table border="1" bgcolor="#ddcc88" cellpadding="8">
-       <tbody>
-         <tr>
-           <td align="center"> <font size="-1">(no, this is not a banner
-ad,   its the screenshot)</font><br>
-      <img src="chimpshot.gif" alt="Chimp Screenshot" width="468" height="60">
-           <br>
-      <a href="chimp.py.html">Full Source</a> </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     </p>
-        <br>
-           
-<h2>Import Modules</h2>
-       This is the code that imports all the needed modules into your program.
-  It also checks for the availability of some of the optional pygame modules.<br>
-    <br>
-            
-<table border="1" bgcolor="#ddcc88">
-      <tbody>
-        <tr>
-          <td>              
-<pre>import os, sys
-import pygame
-from pygame.locals import *
-
-if not pygame.font: print 'Warning, fonts disabled'
-if not pygame.mixer: print 'Warning, sound disabled'
-</pre>
-        </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-    First, we import the standard "os" and "sys" python modules. These allow
-  us to do things like create platform independent file paths.<br>
-      <br>
-    In the next line, we import the pygame package. When pygame is imported
-it imports all the modules belonging to pygame. Some pygame modules are optional,
-and if they aren't found, their value is set to "None".<br>
-      <br>
-      There is a special <i>pygame</i> module named "locals". This module 
- contains  a subset of <i>pygame</i>. The members of this module are commonly
- used constants  and functions that have proven useful to put into your program's 
- global namespace.  This locals module includes functions like "Rect" to create
- a rectangle object,  and many constants like "QUIT, HWSURFACE" that are
-used  to interact with the rest of <i>pygame</i>. Importing the locals module
-into  the global namespace  like this is entirely optional. If you choose
-not to  import it, all the members  of locals are always available in the
-<i>pygame</i>   module.<br>
-      <br>
-    Lastly, we decide to print a nice warning message if the font or sound
-modules in pygame are not available.<br>
-       <br>
-           
-<h2>Loading Resources</h2>
-    Here we have two functions we can use to load images and sounds. We will
-  look at each function individually in this section.<br>
-    <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>        
-<pre>def load_image(name, colorkey=None):
-    fullname = os.path.join('data', name)
-    try:
-        image = pygame.image.load(fullname)
-    except pygame.error, message:
-        print 'Cannot load image:', name
-        raise SystemExit, message
-    image = image.convert()
-    if colorkey is not None:
-        if colorkey is -1:
-            colorkey = image.get_at((0,0))
-        image.set_colorkey(colorkey, RLEACCEL)
-    return image, image.get_rect()
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-      This function takes the name of an image to load. It also optionally
- takes  an argument it can use to set a colorkey for the image. A colorkey
- is used  in graphics to represent a color of the image that is transparent.<br>
-    <br>
-    The first thing this function does is create a full pathname to the file.
-  In this example all the resources are in a "data" subdirectory. By using
- the os.path.join function, a pathname will be created that works for whatever
-  platform the game is running on.<br>
-    <br>
-    Next we load the image using the pygame.image.load function. We wrap
-this   function in a try/except block, so if there is a problem loading the
-image,   we can exit gracefully. After the image is loaded, we make an important
-call  to the convert() function. This makes a new copy of a Surface and converts
-  its color format and depth to match the display. This means blitting the
- image to the screen will happen as quickly as possible.<br>
-    <br>
-    Last, we set the colorkey for the image. If the user supplied an argument
-  for the colorkey argument we use that value as the colorkey for the image.
-  This would usually just be a color RGB value, like (255, 255, 255) for
-white.   You can also pass a value of -1 as the colorkey. In this case the
-function   will lookup the color at the topleft pixel of the image, and use
-that color   for the colorkey.<br>
-        <br>
-       
-<table border="1" bgcolor="#ddcc88">
-      <tbody>
-        <tr><td>
-<pre>def load_sound(name):
-    class NoneSound:
-        def play(self): pass
-    if not pygame.mixer:
-        return NoneSound()
-    fullname = os.path.join('data', name)
-    try:
-        sound = pygame.mixer.Sound(fullname)
-    except pygame.error, message:
-        print 'Cannot load sound:', wav
-        raise SystemExit, message
-    return sound</pre>
-          </td>
-        </tr>
-               
-  </tbody>    
-</table>
-    <br>
-    Next is the function to load a sound file. The first thing this function
-  does is check to see if the pygame.mixer module was imported correctly.
-If  not, it returns a small class instance that has a dummy play method.
-This  will act enough like a normal Sound object for this game to run without
-any  extra error checking.<br>
-    <br>
-    This function is similar to the image loading function, but handles some
-  different problems. First we create a full path to the sound image, and
-load  the sound file inside a try/except block. Then we simply return the
-loaded  Sound object.<br>
-    <br>
-       
-<h2>Game Object Classes</h2>
-    Here we create two classes to represent the objects in our game. Almost 
- all the logic for the game goes into these two classes. We will look over 
- them one at a time here.<br>
-    <br>
-       
-<table border="1" bgcolor="#ddcc88">
-      <tbody>
-        <tr>
-          <td>                            
-<pre>class Fist(pygame.sprite.Sprite):
-    """moves a clenched fist on the screen, following the mouse"""
-    def __init__(self):
-        pygame.sprite.Sprite.__init__(self) #call Sprite initializer
-        self.image, self.rect = load_image('fist.bmp', -1)
-        self.punching = 0
-
-    def update(self):
-        "move the fist based on the mouse position"
-        pos = pygame.mouse.get_pos()
-        self.rect.midtop = pos
-        if self.punching:
-            self.rect.move_ip(5, 10)
-
-    def punch(self, target):
-        "returns true if the fist collides with the target"
-        if not self.punching:
-            self.punching = 1
-            hitbox = self.rect.inflate(-5, -5)
-            return hitbox.colliderect(target.rect)
-
-    def unpunch(self):
-        "called to pull the fist back"
-        self.punching = 0</pre>
-          </td>
-        </tr>
-               
-  </tbody>    
-</table>
-    <br>
-    Here we create a class to represent the players fist. It is derived from
-  the Sprite class included in the pygame.sprite module. The __init__ function
-  is called when new instances of this class are created. The first thing
-we  do is be sure to call the __init__ function for our base class. This
-allows  the Sprite's __init__ function to prepare our object for use as a
-sprite.  This game uses one of the sprite drawing Group classes. These classes
-can  draw sprites that have an "image" and "rect" attribute. By simply changing
-  these two attributes, the renderer will draw the current image at the current
-  position.<br>
-    <br>
-    All sprites have an update() method. This function is typically called
- once  per frame. It is where you should put code that moves and updates
-the  variables  for the sprite. The update() method for the fist moves the
-fist  to the location  of the mouse pointer. It also offsets the fist position
-slightly if the fist  is in the "punching" state.<br>
-    <br>
-    The following two functions punch() and unpunch() change the punching 
-state  for the fist. The punch() method also returns a true value if the fist
-is  colliding with the given target sprite.<br>
-    <br>
-       
-<table border="1" bgcolor="#ddcc88">
-      <tbody>
-        <tr>
-          <td>
-<pre>class Chimp(pygame.sprite.Sprite):
-    """moves a monkey critter across the screen. it can spin the
-       monkey when it is punched."""
-    def __init__(self):
-        pygame.sprite.Sprite.__init__(self) #call Sprite intializer
-        self.image, self.rect = load_image('chimp.bmp', -1)
-        screen = pygame.display.get_surface()
-        self.area = screen.get_rect()
-        self.rect.topleft = 10, 10
-        self.move = 9
-        self.dizzy = 0
-
-    def update(self):
-        "walk or spin, depending on the monkeys state"
-        if self.dizzy:
-            self._spin()
-        else:
-            self._walk()
-
-    def _walk(self):
-        "move the monkey across the screen, and turn at the ends"
-        newpos = self.rect.move((self.move, 0))
-        if not self.area.contains(newpos):
-	if self.rect.left < self.area.left or \
-		self.rect.right > self.area.right:
-            self.move = -self.move
-            newpos = self.rect.move((self.move, 0))
-            self.image = pygame.transform.flip(self.image, 1, 0)
-        self.rect = newpos
-
-    def _spin(self):
-        "spin the monkey image"
-        center = self.rect.center
-        self.dizzy += 12
-        if self.dizzy >= 360:
-            self.dizzy = 0
-            self.image = self.original
-        else:
-            rotate = pygame.transform.rotate
-            self.image = rotate(self.original, self.dizzy)
-        self.rect = self.image.get_rect()
-        self.rect.center = center
-
-    def punched(self):
-        "this will cause the monkey to start spinning"
-        if not self.dizzy:
-            self.dizzy = 1
-            self.original = self.image</pre>
-      </td>
-        </tr>
-               
-  </tbody>    
-</table>
-    <br>
-    The chimp class is doing a little more work than the fist, but nothing
- more  complex. This class will move the chimp back and forth across the
-screen.   When the monkey is punched, he will spin around to exciting effect.
-This  class is also derived from the base Sprite class, and is initialized
-the same as the fist. While initializing, the class also sets the attribute
-"area"  to be the size of the display screen.<br>
-    <br>
-    The update function for the chimp simply looks at the current "dizzy" 
-state,  which is true when the monkey is spinning from a punch. It calls either
-the  _spin or _walk method. These functions are prefixed with an underscore.
- This  is just a standard python idiom which suggests these methods should
- only be used by the Chimp class. We could go so far as to give them a double
- underscore,  which would tell python to really try to make them private
-methods,  but we  don't need such protection. :)<br>
-    <br>
-    The walk method creates a new position for the monkey by moving the current
-  rect by a given offset. If this new position crosses outside the display
- area of the screen, it reverses the movement offset. It also mirrors the
-image using the pygame.transform.flip function. This is a crude effect that
-makes the monkey look like he's turning the direction he is moving.<br>
-    <br>
-    The spin method is called when the monkey is currently "dizzy". The dizzy
-  attribute is used to store the current amount of rotation. When the monkey
-  has rotated all the way around (360 degrees) it resets the monkey image
-back  to the original unrotated version. Before calling the transform.rotate
-function,  you'll see the code makes a local reference to the function simply
-named "rotate". There is no need to do that for this example, it is just
-done here to keep the following line's length a little shorter. Note that
-when calling the rotate function, we are always rotating from the original
-monkey image. When rotating, there is a slight loss of quality. Repeatedly
-rotating the same image and the quality would get worse each time. Also,
-when rotating an image, the size of the image will actually change. This
-is because the corners of the image will be rotated out, making the image
-bigger. We make sure the center of the new image matches the center of the
-old image, so it rotates without moving.<br>
-    <br>
-    The last method is punched() which tells the sprite to enter its dizzy
- state.  This will cause the image to start spinning. It also makes a copy
- of the current image named "original".<br>
-           
-<h2>Initialize Everything</h2>
-       Before we can do much with pygame, we need to make sure its modules
- are  initialized. In this case we will also open a simple graphics window.
- Now  we are in the main() function of the program, which actually runs everything.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-      <pre>pygame.init()
-screen = pygame.display.set_mode((468, 60))
-pygame.display.set_caption('Monkey Fever')
-pygame.mouse.set_visible(0)</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-       The first line to initialize <i>pygame</i> takes care of a bit of
-work   for us. It checks through the imported <i>pygame</i> modules and attempts 
-  to initialize each one of them. It is possible to go back and check if modules
-  failed to initialize, but we won't bother here. It is also possible to
-take   a lot more control and initialize each specific module by hand. That
-type   of control is generally not needed, but is available if you desire.<br>
-      <br>
-      Next we set up the display graphics mode. Note that the pygame.display
-  module is used to control all the display settings. In this case we are
-asking  for a simple skinny window. There is an entire separate tutorial
-on setting  up the graphics mode, but if we really don't care, <i>pygame</i>
-  will do a good job of getting us something that works. Pygame will pick
-the best color depth, since we haven't provided one.<br>
-      <br>
-      Last we set the window title and turn off the mouse cursor for our
-window.   Very basic to do, and now we have a small black window ready to
-do our bidding.  Usually the cursor defaults to visible, so there is no need
-to really set  the state unless we want to hide it.<br>
-      <br>
-       <br>
-           
-<h2>Create The Background</h2>
-       Our program is going to have text message in the background. It would
-  be nice for us to create a single surface to represent the background and
-  repeatedly use that. The first step is to create the surface.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-      <pre>background = pygame.Surface(screen.get_size())
-background = background.convert()
-background.fill((250, 250, 250))</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-       This creates a new surface for us that is the same size as the display
-  window. Note the extra call to convert() after creating the Surface. The
- convert with no arguments will make sure our background is the same format
- as the display window, which will give us the fastest results.<br>
-      <br>
-      We also fill the entire background with a solid white-ish color. Fill 
- takes  an RGB triplet as the color argument.<br>
-      <br>
-       <br>
-           
-<h2>Put Text On The Background, Centered</h2>
-       Now that we have a background surface, lets get the text rendered
-to  it. We only do this if we see the pygame.font module has imported properly. 
- If not, we just skip this section.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-      <tbody>
-        <tr>
-          <td>                            
-<pre>if pygame.font:
-    font = pygame.font.Font(None, 36)
-    text = font.render("Pummel The Chimp, And Win $$$", 1, (10, 10, 10))
-    textpos = text.get_rect()
-    textpos.centerx = background.get_rect().centerx
-    background.blit(text, textpos)</pre>
-</td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-       As you see, there are a couple steps to getting this done. First we
- must  create the font object and render it into a new surface. We then find
- the  center of that new surface and blit (paste) it onto the background.<br>
-      <br>
-      The font is created with the font module's Font() constructor. Usually
-  you will pass the name of a truetype font file to this function, but we
-can  also pass None, which will use a default font. The Font constructor
-also needs to know the size of font we want to create.<br>
-      <br>
-      We then render that font into a new surface. The render function creates
-   a new surface that is the appropriate size for our text. In this case
-we   are also telling render to create antialiased text (for a nice smooth
-look)   and to use a dark grey color.<br>
-      <br>
-      Next we need to find the centered position of the text on our display.
-  We create a "Rect" object from the text dimensions, which allows us to
-easily   assign it to the screen center.<br>
-      <br>
-      Finally we blit (blit is like a copy or paste) the text onto the background
-   image.<br>
-      <br>
-       <br>
-           
-<h2>Display The Background While Setup Finishes</h2>
-       We still have a black window on the screen. Lets show our background 
- while  we wait for the other resources to load.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-      <pre>screen.blit(background, (0, 0))
-pygame.display.flip()<br></pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-       This will blit our entire background onto the display window. The
-blit   is self explanatory, but what about this flip routine?<br>
-      <br>
-      In pygame, changes to the display surface are not immediately visible.
-  Normally, a display must be updated in areas that have changed for them
-to  be visible to the user. With double buffered displays the display must
-be  swapped (or flipped) for the changes to become visible. In this case
-the flip() function works nicely because it simply handles the entire window
-area and handles both singlebuffered and doublebufferes surfaces.<br>
-      <br>
-       <br>
-           
-<h2>Prepare Game Object</h2>
-    Here we create all the objects that the game is going to need.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-<pre>whiff_sound = load_sound('whiff.wav')
-punch_sound = load_sound('punch.wav')
-chimp = Chimp()
-fist = Fist()
-allsprites = pygame.sprite.RenderPlain((fist, chimp))
-clock = pygame.time.Clock()</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-    First we load two sound effects using the load_sound function we defined
-  above. Then we create an instance of each of our sprite classes. And lastly
-  we create a sprite Group which will contain all our sprites.<br>
-      <br>
-    We actually use a special sprite group named RenderPlain. This sprite 
-group  can draw all the sprites it contains to the screen. It is called RenderPlain
-  because there are actually more advanced Render groups. But for our game,
-  we just need simple drawing. We create the group named "allsprites" by
-passing   a list with all the sprites that should belong in the group. We
-could later   on add or remove sprites from this group, but in this game
-we won't need  to.<br>
-      <br>
-    The clock object we create will be used to help control our game's framerate.
-we will use it in the main loop of our game to make sure it doesn't run too fast.
-    <br>
-       <br>
-              
-<h2>Main Loop</h2>
-       Nothing much here, just an infinite loop.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-      <pre>while 1:
-    clock.tick(60)</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-       All games run in some sort of loop. The usual order of things is to
- check  on the state of the computer and user input, move and update the
-state  of  all the objects, and then draw them to the screen. You'll see
-that this  example  is no different.<br>
-      <br>
-  We also make a call to our clock object, which will make sure our game
-doesn't run faster than 60 frames per second.<br>
-      <br>
-       <br>
-           
-<h2>Handle All Input Events</h2>
-       This is an extremely simple case of working the event queue.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-<pre>for event in pygame.event.get():
-    if event.type == QUIT:
-        return
-    elif event.type == KEYDOWN and event.key == K_ESCAPE:
-        return
-    elif event.type == MOUSEBUTTONDOWN:
-        if fist.punch(chimp):
-            punch_sound.play() #punch
-            chimp.punched()
-        else:
-            whiff_sound.play() #miss
-    elif event.type == MOUSEBUTTONUP:
-        fist.unpunch()</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-   First we get all the available Events from pygame and loop through each
- of them. The first two tests see if the user has quit our game, or pressed
- the escape key. In these cases we just return from the main() function and
- the program cleanly ends.<br>
-      <br>
-   Next we just check to see if the mouse button was pressed or released. 
-If  the button was pressed, we ask the fist object if it has collided with 
-the  chimp. We play the appropriate sound effect, and if the monkey was hit, 
-we  tell him to start spinning (by calling his punched() method).<br>
-      <br>
-       <br>
-           
-<h2>Update the Sprites</h2>
-   <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-      <pre>allsprites.update()</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-   Sprite groups have an update() method, which simply calls the update method 
- for all the sprites it contains. Each of the objects will move around, depending 
- on which state they are in. This is where the chimp will move one step side 
- to side, or spin a little farther if he was recently punched.<br>
-      <br>
-       <br>
-   <br>
-                
-<h2>Draw The Entire Scene</h2>
-   Now that all the objects are in the right place, time to draw them.<br>
-       <br>
-         
-<table border="1" bgcolor="#ddcc88">
-       <tbody>
-         <tr>
-           <td>                                   
-<pre>screen.blit(background, (0, 0))
-allsprites.draw(screen)
-pygame.display.flip()</pre>
-           </td>
-         </tr>
-                   
-  </tbody>     
-</table>
-     <br>
-   The first blit call will draw the background onto the entire screen. This 
- erases everything we saw from the previous frame (slightly inefficient, but
- good enough for this game). Next we call the draw() method of the sprite 
-container. Since this sprite container is really an instance of the "DrawPlain" 
-sprite group, it knows how to draw our sprites. Lastly, we flip() the contents 
-of pygame's software double buffer to the screen. This makes everything we've 
- drawn visible all at once.<br>
-   <br>
-      <br>
-           
-<h2>Game Over</h2>
-       User has quit, time to clean up<br>
-      <br>
-      Cleaning up the running game in <i>pygame</i> is extremely simple.
-In  fact  since all variables are automatically destructed, we really don't 
-have  to  do anything.<br>
-      <br>
-         
-</body>
-</html>

docs/tut/SurfarrayIntro.html

-<!--
-TUTORIAL:Introduction to the surfarray module
---><html><head>
-
-<title>Pygame Tutorials - Surfarray Introduction</title>
-</head><body>
- 
-<h1 align=center><font size=-1>Pygame Tutorials</font><br>Surfarray Introduction</h1>
-<h2 align=center>by Pete Shinners<br><font size=-1>pete@shinners.org</font></h2>
-<h3 align=center>Revision 1.02, Sep 7, 2001</h3>
-<br><br>
-
-
-<h2>Introduction</h2>
-
-This tutorial will attempt to introduce users to both Numeric and the pygame
-Surfarray module. To beginners, the code that uses surfarray can be quite
-intimidating. But actually there are only a few concepts to understand and
-you will be up and running. Using the surfarray module, it becomes possible
-to perform pixel level operations from straight python code. The performance
-can become quite close to the level of doing the code in C.
-<br>&nbsp;<br>
-You may just want to jump down to the <i>"Examples"</i> section to get an
-idea of what is possible with this module, then start at the beginning here
-to work your way up.
-<br>&nbsp;<br>
-Now I won't try to fool you into thinking everything is very easy. To get
-more advanced effects by modifying pixel values is very tricky. Just mastering
-Numeric Python takes a lot of learning. In this tutorial I'll be sticking with
-the basics and using a lot of examples in an attempt to plant seeds of wisdom.
-After finishing the tutorial you should have a basic handle on how the surfarray
-works.
-
-
-<br>
-<h2>Numeric Python</h2>
-If you do not have the python Numeric
-package installed, you will need to do that now. You can download the package
-from the <a href=http://sourceforge.net/project/showfiles.php?group_id=1369>
-Numeric Downloads Page</a>.  To make sure Numeric is working for you, you should
-get something like this from the interactive python prompt.
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>from Numeric import *</b>                  <i>#import numeric</i>
->>> <b>a = array((1,2,3,4,5))</b>                 <i>#create an array</i>
->>> <b>a</b>                                      <i>#display the array</i>
-array([1, 2, 3, 4, 5])
->>> <b>a[2]</b>                                   <i>#index into the array</i>
-3
->>> <b>a*2</b>                                    <i>#new array with twiced values</i>
-array([ 2,  4,  6,  8, 10])
-</td></tr></table><br>
-
-As you can see, the Numeric module gives us a new data type, the <i>array</i>.
-This object holds an array of fixed size, and all values inside are of the same
-type. The arrays can also be multidimensional, which is how we will use them
-with images. There's a bit more to it than this, but it is enough to get us
-started.
-<br>&nbsp;<br>
-If you look at the last command above, you'll see that mathematical operations
-on Numeric arrays apply to all values in the array. This is called "elementwise
-operations". These arrays can also be sliced like normal lists. The slicing
-syntax is the same as used on standard python objects. <i>(so study up if you
-need to :] )</i>.
-Here are some more examples of working with arrays.
-
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>len(a)</b>                                 <i>#get array size</i>
-5
->>> <b>a[2:]</b>                                  <i>#elements 2 and up</i>
-array([3, 4, 5])
->>> <b>a[:-2]</b>                                 <i>#all except last 2</i>
-array([1, 2, 3])
->>> <b>a[2:] + a[:-2]</b>                         <i>#add first and last</i>
-array([4, 6, 8])
->>> <b>array((1,2,3)) + array((3,4))</b>          <i>#add arrays of wrong sizes</i>
-Traceback (innermost last):
-  File "&lt;interactive input&gt;", line 1, in ?
-ValueError: frames are not aligned
-</td></tr></table><br>
-
-We get an error on the last commend, because we try add together two arrays
-that are different sizes. In order for two arrays two operate with each other,
-including comparisons and assignment, they must have the same dimensions. It is
-very important to know that the new arrays created from slicing the original all
-reference the same values. So changing the values in a slice also changes the
-original values. It is important how this is done.
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>a</b>                                      <i>#show our starting array</i>
-array([1, 2, 3, 4, 5])
->>> <b>aa = a[1:3]</b>                            <i>#slice middle 2 elements</i>
->>> <b>aa</b>                                     <i>#show the slice</i>
-array([2, 3])
->>> <b>aa[1] = 13</b>                             <i>#chance value in slice</i>
->>> <b>a</b>                                      <i>#show change in original</i>
-array([ 1, 2, 13,  4,  5])
->>> <b>aaa = array(a)</b>                         <i>#make copy of array</i>
->>> <b>aaa</b>                                    <i>#show copy</i>
-array([ 1, 2, 13,  4,  5])
->>> <b>aaa[1:4] = 0</b>                           <i>#set middle values to 0</i>
->>> <b>aaa</b>                                    <i>#show copy</i>
-array([1, 0, 0, 0, 5])
->>> <b>a</b>                                      <i>#show original again</i>
-array([ 1, 2, 13,  4,  5])
-</td></tr></table><br>
-
-
-Now we will look at small arrays with two
-dimensions. Don't be too worried, getting started it is the same as having a
-two dimensional tuple <i>(a tuple inside a tuple)</i>. Let's get started with
-two dimensional arrays.
-
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>row1 = (1,2,3)</b>                         <i>#create a tuple of vals</i>
->>> <b>row2 = (3,4,5)</b>                         <i>#another tuple</i>
->>> <b>(row1,row2)</b>                            <i>#show as a 2D tuple</i>
-((1, 2, 3), (3, 4, 5))
->>> <b>b = array((row1, row2))</b>                <i>#create a 2D array</i>
->>> <b>b</b>                                      <i>#show the array</i>
-array([[1, 2, 3],
-       [3, 4, 5]])
->>> <b>array(((1,2),(3,4),(5,6)))</b>             <i>#show a new 2D array</i>
-array([[1, 2],
-       [3, 4],
-       [5, 6]])
-</td></tr></table><br>
-
-Now with this two
-dimensional array <i>(from now on as "2D")</i> we can index specific values
-and do slicing on both dimensions. Simply using a comma to separate the indices
-allows us to lookup/slice in multiple dimensions. Just using "<b>:</b>" as an
-index <i>(or not supplying enough indices)</i> gives us all the values in
-that dimension. Let's see how this works.
-
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>b</b>                                      <i>#show our array from above</i>
-array([[1, 2, 3],
-       [3, 4, 5]])
->>> <b>b[0,1]</b>                                 <i>#index a single value</i>
-2
->>> <b>b[1,:]</b>                                 <i>#slice second row</i>
-array([3, 4, 5])
->>> <b>b[1]</b>                                   <i>#slice second row (same as above)</i>
-array([3, 4, 5])
->>> <b>b[:,2]</b>                                 <i>#slice last column</i>
-array([3, 5])
->>> <b>b[:,:2]</b>                                <i>#slice into a 2x2 array</i>
-array([[1, 2],
-       [3, 4]])
-</td></tr></table><br>
-
-Ok, stay with me here, this is about as hard as it gets. When using Numeric
-there is one more feature to slicing. Slicing arrays also allow you to specify
-a <i>slice increment</i>. The syntax for a slice with increment is 
-<b>start_index : end_index : increment</b>. 
- 
-<br><table bgcolor=#ddcc88><tr><td><pre>
->>> <b>c = arange(10)</b>                         #like range, but makes an array
->>> <b>c</b>                                      #show the array
-array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
->>> <b>c[1:6:2]</b>                               #slice odd values from 1 to 6
-array([1, 3, 5])
->>> <b>c[4::4]</b>                                #slice every 4th val starting at 4
-array([4, 8])
->>> <b>c[8:1:-1]</b>                              #slice 1 to 8, reversed
-array([8, 7, 6, 5, 4, 3, 2])
-</td></tr></table><br>
-
-Well that is it. There's enough information there to get you started using
-Numeric with the surfarray module. There's certainly a lot more to Numeric, but
-this is only an introduction. Besides, we want to get on to the fun stuff,
-correct?
-
-
-
-
-
-<br>&nbsp;<br>
-<h2>Import Surfarray</h2>
-
-In order to use the surfarray module we need to import it. Since both surfarray
-and Numeric are optional components for pygame, it is nice to make sure they
-import correctly before using them. In these examples I'm going to import
-Numeric into a variable named <i>N</i>. This will let you know which functions
-I'm using are from the Numeric package. <i>(and is a lot shorter than typing
-Numeric before each function)</i> 
-
-
-<br><table bgcolor=#ddcc88><tr><td><pre>
-try:
-    import Numeric as N
-    import pygame.surfarray as surfarray
-except ImportError:
-    raise ImportError, "Numeric and Surfarray are required."
-</td></tr></table><br>
-
-<br>&nbsp;<br>
-<h2>Surfarray Introduction</h2>
-
-There are two main types of functions in surfarray. One set of functions for
-creating an array that is a copy of a surface pixel data. The other functions
-create a referenced copy of the array pixel data, so that changes to the array
-directly affect the original surface. There are other functions that allow you
-to access any per-pixel alpha values as arrays along with a few other helpful
-functions. We will look at these other functions later on.
-<br>&nbsp;<br>
-When working with these surface arrays, there are two ways of representing the
-pixel values. First, they can be represented as mapped integers. This type of
-array is a simple 2D array with a single integer representing the surface's
-mapped color value. This type of array is good for moving parts of an image
-around. The other type of array uses three RGB values to represent each pixel
-color. This type of array makes it extremely simple to do types of effects that
-change the color of each pixel. This type of array is also a little trickier to
-deal with, since it is essentially a 3D numeric array. Still, once you get your
-mind into the right mode, it is not much harder than using the normal 2D arrays.
-<br>&nbsp;<br>
-The Numeric module uses a machine's natural number types to represent the data
-values, so a Numeric array can consist of integers that are 8bits, 16bits, and 32bits.
-<i>(the arrays can also use other types like floats and doubles, but for our image
-manipulation we mainly need to worry about the integer types)</i>.
-Because of this limitation of integer sizes, you must take a little extra care
-that the type of arrays that reference pixel data can be properly mapped to a
-proper type of data. The functions create these arrays from surfaces are:
-<dl>
-<dt><b>surfarray.pixels2d(surface)</b></dt><dd>Creates a 2D array <i>(integer pixel
-values)</i> that reference the original surface data. This will work for all
-surface formats except 24bit.</dd>
-
-<dt><b>surfarray.array2d(surface)</b><dd></dd>Creates a 2D array <i>(integer pixel
-values)</i> that is copied from any type of surface.</dt>
-
-<dt><b>surfarray.pixels3d(surface)</b></dt><dd>Creates a 3D array <i>(RGB pixel
-values)</i> that reference the original surface data. This will only work
-on 24bit and 32bit surfaces that have RGB or BGR formatting.</dd>
-
-<dt><b>surfarray.array3d(surface)</b><dd></dd>Creates a 3D array <i>(RGB pixel
-values)</i> that is copied from any type of surface.</dt>
-
-</dl>
-Here is a small chart that might better illustrate what types of functions
-should be used on which surfaces. As you can see, both the arrayXD functions
-will work with any type of surface.
-<table bgcolor=#ddcc88 cellpadding=8 align=center>
-<tr align=center><td></td><th>32bit</th><th>24bit</th><th>16bit</th><th>8bit(c-map)</th></tr>
-<tr align=center><th>pixel2d</th><td>yes</td><td></td><td>yes</td><td>yes</td></tr>
-<tr align=center><th>array2d</th><td>yes</td><td>yes</td><td>yes</td><td>yes</td></tr>
-<tr align=center><th>pixel3d</th><td>yes</td><td>yes</td><td></td><td></td></tr>
-<tr align=center><th>array3d</th><td>yes</td><td>yes</td><td>yes</td><td>yes</td></tr>
-</table>
-
-
-<br>&nbsp;<br>
-<h2>Examples</h2>
-
-With this information, we are equipped to start trying things with surface
-arrays. The following are short little demonstrations that create a Numeric
-array and display them in pygame. These different tests are found in the
-<i>arraydemo.py</i> example. There is a simple function named <i>surfdemo_show</i>
-that displays an array on the screen.
-
-<br>&nbsp;<br><table border=1 cellpadding=5>
-
-<tr><td><img align=left src=allblack.jpg alt=allblack width=128 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-allblack = N.zeros((128, 128))
-surfdemo_show(allblack, 'allblack')
-</td></tr></table>
-Our first example creates an all black array. Whenever you need
-to create a new numeric array of a specific size, it is best to use the
-<b>zeros</b> function. Here we create a 2D array of all zeros and display
-it.
-</td></tr>
-
-<tr><td><img align=left src=striped.jpg alt=striped width=128 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-striped = N.zeros((128, 128, 3))
-striped[:] = (255, 0, 0)
-striped[:,::3] = (0, 255, 255)
-surfdemo_show(striped, 'striped')
-</td></tr></table>
-Here we are dealing with a 3D array. We start by creating an all red image.
-Then we slice out every third row and assign it to a blue/green color. As you
-can see, we can treat the 3D arrays almost exactly the same as 2D arrays, just
-be sure to assign them 3 values instead of a single mapped integer.
-<i>(grr, jpg kind of wrecked the colors)</i>
-</td></tr>
-
-<tr><td><img align=left src=imgarray.jpg alt=imgarray width=200 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-imgsurface = pygame.image.load('surfarray.jpg')
-imgarray = surfarray.array2d(imgsurface)
-surfdemo_show(imgarray, 'imgarray')
-</td></tr></table>
-Here we load an image with the image module, then convert it to a 2D
-array of integers. We will use this image in the rest of the samples.
-</td></tr>
-
-<tr><td><img align=left src=flipped.jpg alt=flipped width=200 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-flipped = imgarray[:,-1:0:-1]
-surfdemo_show(flipped, 'flipped')
-</td></tr></table>
-Here we flip the image vertically. All we need to do is take the original
-image array and slice it using a negative increment.
-</td></tr>
-
-<tr><td><img align=left src=scaledown.jpg alt=scaledown width=64 height=64>
-<table bgcolor=#ddcc88><tr><td><pre>
-scaledown = imgarray[::2,::2]
-surfdemo_show(scaledown, 'scaledown')
-</td></tr></table>
-Based on the last example, scaling an image down is pretty logical. We just
-slice out all the pixels using an increment of 2 vertically and horizontally.
-</td></tr>
-
-
-<tr><td><img align=left src=scaleup.jpg alt=scaleup width=400 height=256>
-<table bgcolor=#ddcc88><tr><td><pre>
-size = N.array(imgarray.shape)*2
-scaleup = N.zeros(size)
-scaleup[::2,::2] = imgarray
-scaleup[1::2,::2] = imgarray
-scaleup[:,1::2] = scaleup[:,::2]
-surfdemo_show(scaleup, 'scaleup')
-</td></tr></table>
-Scaling the image up is a little more work, but is similar to the previous
-scaling down, we do it all with slicing. First we create an array that is
-double the size of our original. First we copy the original array into every
-other pixel of the new array. Then we do it again for every other pixel doing
-the odd columns. At this point we have the image scaled properly going across,
-but every other row is black, so we simply need to copy each row to the one
-underneath it. Then we have an image doubled in size.
-</td></tr>
-
-
-<tr><td><img align=left src=redimg.jpg alt=redimg width=200 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-rgbarray = surfarray.array3d(imgsurface)
-redimg = N.array(rgbarray)
-redimg[:,:,1:] = 0
-surfdemo_show(redimg, 'redimg')
-</td></tr></table>
-Now we are getting back to using 3D arrays to change the colors. Here we
-simple make a 3D array from the original loaded image and set all the values
-in green and blue to zero. This leaves us with just the red channel.
-</td></tr>
-
-
-<tr><td><img align=left src=soften.jpg alt=soften width=200 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-soften = N.array(rgbarray)
-soften[1:,:]  += rgbarray[:-1,:]*8
-soften[:-1,:] += rgbarray[1:,:]*8
-soften[:,1:]  += rgbarray[:,:-1]*8
-soften[:,:-1] += rgbarray[:,1:]*8
-soften /= 33
-surfdemo_show(soften, 'soften')
-</td></tr></table>
-Here we perform a 3x3 convolution filter that will soften our image.
-It looks like a lot of steps here, but what we are doing is shifting
-the image 1 pixel in each direction and adding them all together (with some
-multiplication for weighting). Then average all the values. It's no gaussian,
-but it's fast.
-</td></tr>
-
-
-<tr><td><img align=left src=xfade.jpg alt=xfade width=200 height=128>
-<table bgcolor=#ddcc88><tr><td><pre>
-src = N.array(rgbarray)
-dest = N.zeros(rgbarray.shape)
-dest[:] = 20, 50, 100
-diff = (dest - src) * 0.50
-xfade = src + diff.astype(N.Int)
-surfdemo_show(xfade, 'xfade')
-</td></tr></table>
-Lastly, we are cross fading between the original image and a solid blue-ish
-image. Not exciting, but the dest image could be anything, and changing the 0.50
-multiplier will let you choose any step in a linear crossfade between two images.
-</td></tr>
-</table><br>
-
-Hopefully by this point you are starting to see how surfarray can be used to
-perform special effects and transformations that are only possible at the pixel
-level. At the very least, you can use the surfarray to do a lot of Surface.set_at()
-Surface.get_at() type operations very quickly. But don't think you are finished
-yet, there is still much to learn.
-
-
-<br>&nbsp;<br>
-<h2>Surface Locking</h2>
-Like the rest of pygame, surfarray will lock any Surfaces it needs to
-automatically when accessing pixel data. There is one extra thing to be aware
-of though. When creating the <i>pixel</i> arrays, the original surface will
-be locked during the lifetime of that pixel array. This is important to remember.
-Be sure to <i>"del"</i> the pixel array or let it go out of scope <i>(ie, when
-the function returns, etc)</i>.
-<br>&nbsp;<br>
-Also be aware that you really don't want to be doing much <i>(if any)</i>
-direct pixel access on hardware surfaces <i>(HWSURFACE)</i>. This is because
-the actual surface data lives on the graphics card, and transferring pixel
-changes over the PCI/AGP bus is not fast.
-
-
-
-<br>&nbsp;<br>
-<h2>Transparency</h2>
-The surfarray module has several methods for accessing a Surface's alpha/colorkey
-values. None of the alpha functions are effected by overal transparency of a
-Surface, just the pixel alpha values. Here's the list of those functions.
-<dl>
-<dt><b>surfarray.pixels_alpha(surface)</b></dt><dd>Creates a 2D array <i>(integer
-pixel values)</i> that references the original surface alpha data. This will only
-work on 32bit images with an 8bit alpha component.</dd>
-
-<dt><b>surfarray.array_alpha(surface)</b><dd></dd>Creates a 2D array <i>(integer pixel
-values)</i> that is copied from any type of surface. If the surface has no alpha
-values, the array will be fully opaque values <i>(255)</i>.</dt>
-
-<dt><b>surfarray.array_colorkey(surface)</b><dd></dd>Creates a 2D array
-<i>(integer pixel values)</i> that is set to transparent <i>(0)</i> wherever
-that pixel color matches the Surface colorkey.</dt>
-
-</dl>
-
-
-<br>&nbsp;<br>
-<h2>Other Surfarray Functions</h2>
-There are only a few other functions available in surfarray. You can get a better
-list with more documentation on the
-<a href=http://pygame.seul.org/docs/ref/pygame_surfarray.html>surfarray
-reference page</a>. There is one very useful function though.
-<dl>
-<dt><b>surfarray.blit_array(surface, array)</b></dt><dd>This will transfer
-any type of 2D or 3D surface array onto a Surface of the same dimensions.
-This surfarray blit will generally be faster than assigning an array to a
-referenced pixel array. Still, it should not be as fast as normal Surface 
-blitting, since those are very optimized.
-</dd>
-</dl>
-
-
-
-<br>&nbsp;<br>
-<h2>More Advanced Numeric</h2>
-There's a couple last things you should know about Numeric arrays. When dealing
-with very large arrays, like the kind that are 640x480 big, there are some extra
-things you should be careful about. Mainly, while using the operators like + and
-* on the arrays makes them easy to use, it is also very expensive on big arrays.
-These operators must make new temporary copies of the array, that are then
-usually copied into another array. This can get very time consuming. Fortunately,
-all the Numeric operators come with special functions that can perform the 
-operation <i>"in place"</i>. For example, you would want to replace
-<b>screen[:] = screen + brightmap</b> with the much faster <b>add(screen, 
-brightmap, screen)</b>. Anyways, you'll want to read up on the Numeric UFunc
-documentation for more about this. It is important when dealing with the arrays.
-<br>&nbsp;<br>
-When dealing with the 16bit pixel arrays, Numeric doesn't offer an unsigned 16bit
-datatype, so some values will be treated as signed. Hopefully this does not 
-present a problem.
-<br>&nbsp;<br>
-Another thing to be aware of when working with Numeric arrays is the datatype
-of the array. Some of the arrays (especially the mapped pixel type) often return
-arrays with an unsigned 8bit value. These arrays will easily overflow if you are
-not careful. Numeric will use the same coercion that you find in C programs, so
-mixing an operation with 8bit numbers and 32bit numbers will give a result as
-32bit numbers. You can convert the datatype of an array, but definitely be
-aware of what types of arrays you have, if Numeric gets in a situation where
-precision would be ruined, it will raise an exception.
-<br>&nbsp;<br>
-Lastly, be aware that when assigning values into the 3D arrays, they must be
-between 0 and 255, or you will get some undefined truncating.
-
-
-<br>&nbsp;<br>
-<h2>Graduation</h2>
-Well there you have it. My quick primer on Numeric python and surfarray.
-Hopefully now you see what is possible, and even if you never use them for
-yourself, you do not have to be afraid when you see code that does. Look into
-the vgrade example for more numeric array action. There are also some <i>"flame"</i>
-demos floating around that use surfarray to create a realtime fire effect.
-<br>&nbsp;<br>
<