allegro4r 0.0.1-x86-mswin32-60
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +4 -0
- data/Manifest.txt +59 -0
- data/README.txt +94 -0
- data/examples/exdbuf.rb +58 -0
- data/examples/exfixed.rb +46 -0
- data/examples/exflame.rb +200 -0
- data/examples/exflip.rb +87 -0
- data/examples/exfont.rb +70 -0
- data/examples/exhello.rb +46 -0
- data/examples/exjoy.rb +206 -0
- data/examples/exkeys.rb +216 -0
- data/examples/exmem.rb +50 -0
- data/examples/exmidi.rb +97 -0
- data/examples/exmouse.rb +149 -0
- data/examples/expal.rb +70 -0
- data/examples/expat.rb +62 -0
- data/examples/exsample.rb +89 -0
- data/examples/extimer.rb +84 -0
- data/examples/unifont.dat +0 -0
- data/ext/a4r_API_BITMAP.c +27 -0
- data/ext/a4r_API_DIGI_DRIVER.c +14 -0
- data/ext/a4r_API_GFX_DRIVER.c +14 -0
- data/ext/a4r_API_JOYSTICK_AXIS_INFO.c +53 -0
- data/ext/a4r_API_JOYSTICK_BUTTON_INFO.c +27 -0
- data/ext/a4r_API_JOYSTICK_DRIVER.c +14 -0
- data/ext/a4r_API_JOYSTICK_INFO.c +84 -0
- data/ext/a4r_API_JOYSTICK_STICK_INFO.c +62 -0
- data/ext/a4r_API_KEYBOARD_DRIVER.c +14 -0
- data/ext/a4r_API_MIDI_DRIVER.c +14 -0
- data/ext/a4r_API_MOUSE_DRIVER.c +14 -0
- data/ext/a4r_API_PALETTE.c +63 -0
- data/ext/a4r_API_RGB.c +118 -0
- data/ext/a4r_API_TIMER_DRIVER.c +14 -0
- data/ext/a4r_API_bitmap_objects.c +310 -0
- data/ext/a4r_API_blitting_and_sprites.c +86 -0
- data/ext/a4r_API_digital_sample_routines.c +83 -0
- data/ext/a4r_API_direct_access_to_video_memory.c +102 -0
- data/ext/a4r_API_drawing_primitives.c +114 -0
- data/ext/a4r_API_file_and_compression_routines.c +27 -0
- data/ext/a4r_API_fixed_point_math_routines.c +98 -0
- data/ext/a4r_API_fonts.c +147 -0
- data/ext/a4r_API_graphics_modes.c +155 -0
- data/ext/a4r_API_joystick_routines.c +213 -0
- data/ext/a4r_API_keyboard_routines.c +420 -0
- data/ext/a4r_API_misc.c +133 -0
- data/ext/a4r_API_mouse_routines.c +220 -0
- data/ext/a4r_API_music_routines_midi.c +147 -0
- data/ext/a4r_API_palette_routines.c +112 -0
- data/ext/a4r_API_sound_init_routines.c +29 -0
- data/ext/a4r_API_text_output.c +178 -0
- data/ext/a4r_API_timer_routines.c +250 -0
- data/ext/a4r_API_transparency_and_patterned_drawing.c +87 -0
- data/ext/a4r_API_truecolor_pixel_formats.c +44 -0
- data/ext/a4r_API_unicode_routines.c +53 -0
- data/ext/a4r_API_using_allegro.c +98 -0
- data/ext/allegro4r.c +866 -0
- data/ext/allegro4r.h +311 -0
- data/ext/allegro4r.so +0 -0
- data/ext/extconf.rb +11 -0
- metadata +113 -0
data/History.txt
ADDED
data/Manifest.txt
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
ext/a4r_API_BITMAP.c
|
2
|
+
ext/a4r_API_bitmap_objects.c
|
3
|
+
ext/a4r_API_blitting_and_sprites.c
|
4
|
+
ext/a4r_API_digital_sample_routines.c
|
5
|
+
ext/a4r_API_DIGI_DRIVER.c
|
6
|
+
ext/a4r_API_direct_access_to_video_memory.c
|
7
|
+
ext/a4r_API_drawing_primitives.c
|
8
|
+
ext/a4r_API_file_and_compression_routines.c
|
9
|
+
ext/a4r_API_fixed_point_math_routines.c
|
10
|
+
ext/a4r_API_fonts.c
|
11
|
+
ext/a4r_API_GFX_DRIVER.c
|
12
|
+
ext/a4r_API_graphics_modes.c
|
13
|
+
ext/a4r_API_JOYSTICK_AXIS_INFO.c
|
14
|
+
ext/a4r_API_JOYSTICK_BUTTON_INFO.c
|
15
|
+
ext/a4r_API_JOYSTICK_DRIVER.c
|
16
|
+
ext/a4r_API_JOYSTICK_INFO.c
|
17
|
+
ext/a4r_API_joystick_routines.c
|
18
|
+
ext/a4r_API_JOYSTICK_STICK_INFO.c
|
19
|
+
ext/a4r_API_KEYBOARD_DRIVER.c
|
20
|
+
ext/a4r_API_keyboard_routines.c
|
21
|
+
ext/a4r_API_MIDI_DRIVER.c
|
22
|
+
ext/a4r_API_misc.c
|
23
|
+
ext/a4r_API_MOUSE_DRIVER.c
|
24
|
+
ext/a4r_API_mouse_routines.c
|
25
|
+
ext/a4r_API_music_routines_midi.c
|
26
|
+
ext/a4r_API_PALETTE.c
|
27
|
+
ext/a4r_API_palette_routines.c
|
28
|
+
ext/a4r_API_RGB.c
|
29
|
+
ext/a4r_API_sound_init_routines.c
|
30
|
+
ext/a4r_API_text_output.c
|
31
|
+
ext/a4r_API_TIMER_DRIVER.c
|
32
|
+
ext/a4r_API_timer_routines.c
|
33
|
+
ext/a4r_API_transparency_and_patterned_drawing.c
|
34
|
+
ext/a4r_API_truecolor_pixel_formats.c
|
35
|
+
ext/a4r_API_unicode_routines.c
|
36
|
+
ext/a4r_API_using_allegro.c
|
37
|
+
ext/allegro4r.c
|
38
|
+
ext/allegro4r.h
|
39
|
+
ext/extconf.rb
|
40
|
+
examples/exdbuf.rb
|
41
|
+
examples/exfixed.rb
|
42
|
+
examples/exflame.rb
|
43
|
+
examples/exflip.rb
|
44
|
+
examples/exfont.rb
|
45
|
+
examples/exhello.rb
|
46
|
+
examples/exjoy.rb
|
47
|
+
examples/exkeys.rb
|
48
|
+
examples/exmem.rb
|
49
|
+
examples/exmidi.rb
|
50
|
+
examples/exmouse.rb
|
51
|
+
examples/expal.rb
|
52
|
+
examples/expat.rb
|
53
|
+
examples/exsample.rb
|
54
|
+
examples/extimer.rb
|
55
|
+
examples/unifont.dat
|
56
|
+
Manifest.txt
|
57
|
+
README.txt
|
58
|
+
History.txt
|
59
|
+
ext/allegro4r.so
|
data/README.txt
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
______ ___ ___ __ __
|
2
|
+
/\ _ \ /\_ \ /\_ \ /\ \\ \
|
3
|
+
\ \ \L\ \\//\ \ \//\ \ __ __ _ __ ___\ \ \\ \ _ __
|
4
|
+
\ \ __ \ \ \ \ \ \ \ /'__`\ /'_ `\/\`'__\/ __`\ \ \\ \_ /\`'__\
|
5
|
+
\ \ \/\ \ \_\ \_ \_\ \_/\ __//\ \L\ \ \ \//\ \L\ \ \__ ,__\ \ \/
|
6
|
+
\ \_\ \_\/\____\/\____\ \____\ \____ \ \_\\ \____/\/_/\_\_/\ \_\
|
7
|
+
\/_/\/_/\/____/\/____/\/____/\/___L\ \/_/ \/___/ \/_/ \/_/
|
8
|
+
/\____/
|
9
|
+
\_/__/ Version 0.0.1
|
10
|
+
|
11
|
+
= Allegro4r
|
12
|
+
|
13
|
+
http://allegro4r.rubyforge.org
|
14
|
+
|
15
|
+
Ruby binding to the Allegro game programming library. <http://alleg.sourceforge.net>
|
16
|
+
|
17
|
+
== REQUIREMENTS:
|
18
|
+
|
19
|
+
* Allegro 4.2.2 <http://alleg.sourceforge.net/wip.html>
|
20
|
+
|
21
|
+
== INSTALL:
|
22
|
+
|
23
|
+
* Install Allegro 4.2.2
|
24
|
+
|
25
|
+
Windows:: The easiest way to install Allegro is to download the precompiled binaries found here[http://www.allegro.cc/files/].
|
26
|
+
Download the MinGW binary version. For 32 bit Windows, put the files in the System32 directory. For 64 bit Windows, put the files in the SysWOW64 directory.
|
27
|
+
|
28
|
+
Linux:: For Debian based Linux (e.g. Ubuntu), install the allegro4.2 or liballegro4.2 package: <tt>sudo apt-get install allegro4.2</tt>
|
29
|
+
More package information can be found here[http://packages.debian.org/source/lenny/allegro4.2].
|
30
|
+
|
31
|
+
* <tt>gem install allegro4r</tt>
|
32
|
+
|
33
|
+
== EXAMPLES:
|
34
|
+
|
35
|
+
See code examples in the examples directory.
|
36
|
+
|
37
|
+
== HISTORY:
|
38
|
+
|
39
|
+
See History.txt
|
40
|
+
|
41
|
+
== LICENSE:
|
42
|
+
|
43
|
+
(The MIT License)
|
44
|
+
|
45
|
+
Copyright (c) 2009 Jason Frey
|
46
|
+
|
47
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
48
|
+
a copy of this software and associated documentation files (the
|
49
|
+
'Software'), to deal in the Software without restriction, including
|
50
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
51
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
52
|
+
permit persons to whom the Software is furnished to do so, subject to
|
53
|
+
the following conditions:
|
54
|
+
|
55
|
+
The above copyright notice and this permission notice shall be
|
56
|
+
included in all copies or substantial portions of the Software.
|
57
|
+
|
58
|
+
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
59
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
60
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
61
|
+
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
62
|
+
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
63
|
+
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
64
|
+
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
65
|
+
|
66
|
+
Except as contained in this notice, the name(s) of the above copyright
|
67
|
+
holders shall not be used in advertising or otherwise to promote the
|
68
|
+
sale, use, or other dealings in this Software without prior written
|
69
|
+
authorization.
|
70
|
+
|
71
|
+
== ALLEGRO LICENSE:
|
72
|
+
|
73
|
+
Allegro is gift-ware. It was created by a number of people working in
|
74
|
+
cooperation, and is given to you freely as a gift. You may use, modify,
|
75
|
+
redistribute, and generally hack it about in any way you like, and you do not
|
76
|
+
have to give us anything in return.
|
77
|
+
|
78
|
+
However, if you like this product you are encouraged to thank us by making a
|
79
|
+
return gift to the Allegro community. This could be by writing an add-on
|
80
|
+
package, providing a useful bug report, making an improvement to the library,
|
81
|
+
or perhaps just releasing the sources of your program so that other people can
|
82
|
+
learn from them. If you redistribute parts of this code or make a game using
|
83
|
+
it, it would be nice if you mentioned Allegro somewhere in the credits, but
|
84
|
+
you are not required to do this. We trust you not to abuse our generosity.
|
85
|
+
|
86
|
+
By Shawn Hargreaves, 18 October 1998.
|
87
|
+
|
88
|
+
DISCLAIMER: THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
89
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
90
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT.
|
91
|
+
IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE
|
92
|
+
LIABLE FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR
|
93
|
+
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
|
94
|
+
OR OTHER DEALINGS IN THE SOFTWARE.
|
data/examples/exdbuf.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C Version) for the Allegro library, by Shawn Hargreaves.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This program demonstrates the use of double buffering.
|
6
|
+
# It moves a circle across the screen, first just erasing and
|
7
|
+
# redrawing directly to the screen, then with a double buffer.
|
8
|
+
#
|
9
|
+
|
10
|
+
require 'rubygems'
|
11
|
+
require 'allegro4r'
|
12
|
+
include Allegro4r::API
|
13
|
+
|
14
|
+
exit 1 if allegro_init != 0
|
15
|
+
install_timer
|
16
|
+
install_keyboard
|
17
|
+
|
18
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
|
19
|
+
if set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0
|
20
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
21
|
+
allegro_message("Unable to set any graphic mode\n%s\n" % allegro_error)
|
22
|
+
exit 1
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
set_palette(desktop_palette)
|
27
|
+
|
28
|
+
# allocate the memory buffer
|
29
|
+
buffer = create_bitmap(SCREEN_W(), SCREEN_H())
|
30
|
+
|
31
|
+
# First without any buffering...
|
32
|
+
# Note use of the global retrace_counter to control the speed. We also
|
33
|
+
# compensate screen size (GFX_SAFE) with a virtual 320 screen width.
|
34
|
+
clear_keybuf
|
35
|
+
c = retrace_count + 32
|
36
|
+
while retrace_count - c <= 320 + 32
|
37
|
+
acquire_screen
|
38
|
+
clear_to_color(screen, makecol(255, 255, 255))
|
39
|
+
circlefill(screen, (retrace_count - c) * SCREEN_W()/320, SCREEN_H()/2, 32, makecol(0, 0, 0))
|
40
|
+
textprintf_ex(screen, font, 0, 0, makecol(0, 0, 0), -1, "No buffering (%s)" % gfx_driver.name)
|
41
|
+
release_screen
|
42
|
+
|
43
|
+
break if keypressed
|
44
|
+
end
|
45
|
+
|
46
|
+
# and now with a double buffer...
|
47
|
+
clear_keybuf
|
48
|
+
c = retrace_count + 32;
|
49
|
+
while retrace_count - c <= 320 + 32
|
50
|
+
clear_to_color(buffer, makecol(255, 255, 255))
|
51
|
+
circlefill(buffer, (retrace_count - c) * SCREEN_W()/320, SCREEN_H()/2, 32, makecol(0, 0, 0))
|
52
|
+
textprintf_ex(buffer, font, 0, 0, makecol(0, 0, 0), -1, "Double buffered (%s)" % gfx_driver.name)
|
53
|
+
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W(), SCREEN_H())
|
54
|
+
|
55
|
+
break if keypressed
|
56
|
+
end
|
57
|
+
|
58
|
+
destroy_bitmap(buffer)
|
data/examples/exfixed.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C Version) for the Allegro library, by Shawn Hargreaves.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This program demonstrates how to use fixed point numbers, which
|
6
|
+
# are signed 32-bit integers storing the integer part in the
|
7
|
+
# upper 16 bits and the decimal part in the 16 lower bits. This
|
8
|
+
# example also uses the unusual approach of communicating with
|
9
|
+
# the user exclusively via the allegro_message() function.
|
10
|
+
#
|
11
|
+
|
12
|
+
require 'rubygems'
|
13
|
+
require 'allegro4r'
|
14
|
+
include Allegro4r::API
|
15
|
+
|
16
|
+
exit 1 if allegro_init != 0
|
17
|
+
|
18
|
+
# convert integers to fixed point like this
|
19
|
+
x = itofix(10)
|
20
|
+
|
21
|
+
# convert floating point to fixed point like this
|
22
|
+
y = ftofix(3.14)
|
23
|
+
|
24
|
+
# fixed point variables can be assigned, added, subtracted, negated,
|
25
|
+
# and compared just like integers, eg:
|
26
|
+
z = x + y
|
27
|
+
allegro_message("%f + %f = %f\n" % [fixtof(x), fixtof(y), fixtof(z)])
|
28
|
+
|
29
|
+
# you can't add integers or floating point to fixed point, though:
|
30
|
+
# z = x + 3
|
31
|
+
# would give the wrong result.
|
32
|
+
|
33
|
+
# fixed point variables can be multiplied or divided by integers or
|
34
|
+
# floating point numbers, eg:
|
35
|
+
z = y * 2
|
36
|
+
allegro_message("%f * 2 = %f\n" % [fixtof(y), fixtof(z)])
|
37
|
+
|
38
|
+
# you can't multiply or divide two fixed point numbers, though:
|
39
|
+
# z = x * y;
|
40
|
+
# would give the wrong result. Use fixmul() and fixdiv() instead, eg:
|
41
|
+
z = fixmul(x, y)
|
42
|
+
allegro_message("%f * %f = %f\n" % [fixtof(x), fixtof(y), fixtof(z)])
|
43
|
+
|
44
|
+
# fixed point trig and square root are also available, eg:
|
45
|
+
z = fixsqrt(x)
|
46
|
+
allegro_message("fixsqrt(%f) = %f\n" % [fixtof(x), fixtof(z)])
|
data/examples/exflame.rb
ADDED
@@ -0,0 +1,200 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C Version) for the Allegro library, by Shawn Hargreaves.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This program demonstrates how to write directly to video memory.
|
6
|
+
# It implements a simple fire effect, first by calling getpixel() and
|
7
|
+
# putpixel(), then by accessing video memory directly a byte at a
|
8
|
+
# time, and finally using block memory copy operations.
|
9
|
+
#
|
10
|
+
|
11
|
+
require 'rubygems'
|
12
|
+
require 'allegro4r'
|
13
|
+
include Allegro4r::API
|
14
|
+
|
15
|
+
# The fire is formed from several 'hotspots' which are moved randomly
|
16
|
+
# across the bottom of the screen.
|
17
|
+
FIRE_HOTSPOTS = 48
|
18
|
+
$hotspot = Array.new(FIRE_HOTSPOTS, 0)
|
19
|
+
|
20
|
+
# This function updates the bottom line of the screen with a pattern
|
21
|
+
# of varying intensities which are then moved upwards and faded out
|
22
|
+
# by the code in main.
|
23
|
+
def draw_bottom_line_of_fire
|
24
|
+
# zero the buffer
|
25
|
+
(0...SCREEN_W()).each do |c|
|
26
|
+
$temp[c] = 0
|
27
|
+
end
|
28
|
+
|
29
|
+
(0...FIRE_HOTSPOTS).each do |c|
|
30
|
+
($hotspot[c] - 20...$hotspot[c] + 20).each do |c2|
|
31
|
+
if c2 >= 0 && c2 < SCREEN_W()
|
32
|
+
$temp[c2] = MIN($temp[c2] + 20 - ABS($hotspot[c] - c2), 192)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# move the hotspots
|
37
|
+
$hotspot[c] += (AL_RAND() & 7) - 3
|
38
|
+
if $hotspot[c] < 0
|
39
|
+
$hotspot[c] += SCREEN_W()
|
40
|
+
elsif $hotspot[c] >= SCREEN_W()
|
41
|
+
$hotspot[c] -= SCREEN_W()
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
# display the buffer
|
46
|
+
(0...SCREEN_W()).each do |c|
|
47
|
+
putpixel(screen, c, SCREEN_H() - 1, $temp[c])
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
palette = PALETTE.new
|
52
|
+
|
53
|
+
exit 1 if allegro_init != 0
|
54
|
+
install_keyboard
|
55
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
|
56
|
+
if set_gfx_mode(GFX_AUTODETECT, 640, 480, 0, 0) != 0
|
57
|
+
allegro_message("Error setting graphics mode\n%s\n" % allegro_error)
|
58
|
+
exit 1
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
begin
|
63
|
+
$temp = "\0" * SCREEN_W()
|
64
|
+
rescue NoMemoryError
|
65
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
66
|
+
allegro_message("Not enough memory? This is a joke right!?!\n")
|
67
|
+
exit 0
|
68
|
+
end
|
69
|
+
|
70
|
+
(0...FIRE_HOTSPOTS).each do |c|
|
71
|
+
$hotspot[c] = AL_RAND() % SCREEN_W()
|
72
|
+
end
|
73
|
+
|
74
|
+
# fill our palette with a gradually altering sequence of colors
|
75
|
+
(0...64).each do |c|
|
76
|
+
palette[c].r = c;
|
77
|
+
palette[c].g = 0;
|
78
|
+
palette[c].b = 0;
|
79
|
+
end
|
80
|
+
(64...128).each do |c|
|
81
|
+
palette[c].r = 63;
|
82
|
+
palette[c].g = c - 64;
|
83
|
+
palette[c].b = 0;
|
84
|
+
end
|
85
|
+
(128...192).each do |c|
|
86
|
+
palette[c].r = 63;
|
87
|
+
palette[c].g = 63;
|
88
|
+
palette[c].b = c - 128;
|
89
|
+
end
|
90
|
+
(192...256).each do |c|
|
91
|
+
palette[c].r = 63;
|
92
|
+
palette[c].g = 63;
|
93
|
+
palette[c].b = 63;
|
94
|
+
end
|
95
|
+
|
96
|
+
set_palette(palette)
|
97
|
+
|
98
|
+
textout_ex(screen, font, "Using get/putpixel", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
|
99
|
+
|
100
|
+
# using getpixel and putpixel is slow :-)
|
101
|
+
while !keypressed
|
102
|
+
acquire_screen
|
103
|
+
|
104
|
+
draw_bottom_line_of_fire
|
105
|
+
|
106
|
+
(64...SCREEN_H() - 1).each do |y|
|
107
|
+
# read line
|
108
|
+
(0...SCREEN_W()).each do |x|
|
109
|
+
c = getpixel(screen, x, y + 1)
|
110
|
+
|
111
|
+
c -= 1 if c > 0
|
112
|
+
|
113
|
+
putpixel(screen, x, y, c)
|
114
|
+
end
|
115
|
+
end
|
116
|
+
release_screen
|
117
|
+
end
|
118
|
+
|
119
|
+
clear_keybuf
|
120
|
+
textout_ex(screen, font, "Using direct memory writes", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
|
121
|
+
|
122
|
+
# It is much faster if we access the screen memory directly. This
|
123
|
+
# time we read an entire line of the screen into our own buffer,
|
124
|
+
# modify it there, and then write the whole line back in one go.
|
125
|
+
# That is to avoid having to keep switching back and forth between
|
126
|
+
# different scanlines: if we only copied one pixel at a time, we
|
127
|
+
# would have to call bmp_write_line for every single pixel rather
|
128
|
+
# than just twice per line.
|
129
|
+
while !keypressed
|
130
|
+
acquire_screen
|
131
|
+
draw_bottom_line_of_fire
|
132
|
+
|
133
|
+
bmp_select(screen)
|
134
|
+
|
135
|
+
(64...SCREEN_H() - 1).each do |y|
|
136
|
+
# get an address for reading line y+1
|
137
|
+
address = bmp_read_line(screen, y + 1)
|
138
|
+
|
139
|
+
# read line with farptr functions
|
140
|
+
(0...SCREEN_W()).each do |x|
|
141
|
+
$temp[x] = bmp_read8(address + x)
|
142
|
+
end
|
143
|
+
|
144
|
+
# adjust it
|
145
|
+
(0...SCREEN_W()).each do |x|
|
146
|
+
$temp[x] -= 1 if $temp[x] > 0
|
147
|
+
end
|
148
|
+
|
149
|
+
# get an address for writing line y
|
150
|
+
address = bmp_write_line(screen, y)
|
151
|
+
|
152
|
+
# write line with farptr functions
|
153
|
+
(0...SCREEN_W()).each do |x|
|
154
|
+
bmp_write8(address + x, $temp[x,1])
|
155
|
+
end
|
156
|
+
end
|
157
|
+
|
158
|
+
bmp_unwrite_line(screen)
|
159
|
+
release_screen
|
160
|
+
end
|
161
|
+
|
162
|
+
clear_keybuf
|
163
|
+
textout_ex(screen, font, "Using block data transfers", 0, 0, makecol(255,255,255), makecol(0, 0, 0))
|
164
|
+
|
165
|
+
# It is even faster if we transfer the data in 32 bit chunks, rather
|
166
|
+
# than only one pixel at a time. This method may not work on really
|
167
|
+
# unusual machine architectures, but should be ok on just about
|
168
|
+
# anything that you are practically likely to come across.
|
169
|
+
while !keypressed
|
170
|
+
acquire_screen
|
171
|
+
draw_bottom_line_of_fire
|
172
|
+
|
173
|
+
bmp_select(screen)
|
174
|
+
|
175
|
+
(64...SCREEN_H() - 1).each do |y|
|
176
|
+
# get an address for reading line y+1
|
177
|
+
address = bmp_read_line(screen, y + 1)
|
178
|
+
|
179
|
+
# read line in 32 bit chunks
|
180
|
+
(0...SCREEN_W()).step(4) do |x| # JF - sizeof(uint32_t)
|
181
|
+
$temp[x...x + 4] = bmp_read32(address + x)
|
182
|
+
end
|
183
|
+
|
184
|
+
# adjust it
|
185
|
+
(0...SCREEN_W()).each do |x|
|
186
|
+
$temp[x] -= 1 if $temp[x] > 0
|
187
|
+
end
|
188
|
+
|
189
|
+
# get an address for writing line y
|
190
|
+
address = bmp_write_line(screen, y)
|
191
|
+
|
192
|
+
# write line in 32 bit chunks
|
193
|
+
(0...SCREEN_W()).step(4) do |x| # JF - sizeof(uint32_t)
|
194
|
+
bmp_write32(address + x, $temp[x...x + 4])
|
195
|
+
end
|
196
|
+
end
|
197
|
+
|
198
|
+
bmp_unwrite_line(screen)
|
199
|
+
release_screen
|
200
|
+
end
|
data/examples/exflip.rb
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C Version) for the Allegro library, by Shawn Hargreaves.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This program moves a circle across the screen, first with a
|
6
|
+
# double buffer and then using page flips.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'rubygems'
|
10
|
+
require 'allegro4r'
|
11
|
+
include Allegro4r::API
|
12
|
+
|
13
|
+
exit 1 if allegro_init != 0
|
14
|
+
install_timer
|
15
|
+
install_keyboard
|
16
|
+
|
17
|
+
# Some platforms do page flipping by making one large screen that you
|
18
|
+
# can then scroll, while others give you several smaller, unique
|
19
|
+
# surfaces. If you use the create_video_bitmap() function, the same
|
20
|
+
# code can work on either kind of platform, but you have to be careful
|
21
|
+
# how you set the video mode in the first place. We want two pages of
|
22
|
+
# 320x200 video memory, but if we just ask for that, on DOS Allegro
|
23
|
+
# might use a VGA driver that won't later be able to give us a second
|
24
|
+
# page of vram. But if we ask for the full 320x400 virtual screen that
|
25
|
+
# we want, the call will fail when using DirectX drivers that can't do
|
26
|
+
# this. So we try two different mode sets, first asking for the 320x400
|
27
|
+
# size, and if that doesn't work, for 320x200.
|
28
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 400) != 0
|
29
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
|
30
|
+
if set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0
|
31
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
32
|
+
allegro_message("Unable to set any graphic mode\n%s\n" % allegro_error)
|
33
|
+
exit 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
set_palette(desktop_palette)
|
39
|
+
|
40
|
+
# allocate the memory buffer
|
41
|
+
buffer = create_bitmap(SCREEN_W(), SCREEN_H())
|
42
|
+
|
43
|
+
# first with a double buffer...
|
44
|
+
clear_keybuf
|
45
|
+
c = retrace_count + 32
|
46
|
+
while retrace_count - c <= SCREEN_W() + 32
|
47
|
+
clear_to_color(buffer, makecol(255, 255, 255))
|
48
|
+
circlefill(buffer, retrace_count - c, SCREEN_H()/2, 32, makecol(0, 0, 0))
|
49
|
+
textprintf_ex(buffer, font, 0, 0, makecol(0, 0, 0), -1, "Double buffered (%s)" % gfx_driver.name)
|
50
|
+
blit(buffer, screen, 0, 0, 0, 0, SCREEN_W(), SCREEN_H())
|
51
|
+
|
52
|
+
break if keypressed
|
53
|
+
end
|
54
|
+
|
55
|
+
destroy_bitmap(buffer)
|
56
|
+
|
57
|
+
# now create two video memory bitmaps for the page flipping
|
58
|
+
page1 = create_video_bitmap(SCREEN_W(), SCREEN_H())
|
59
|
+
page2 = create_video_bitmap(SCREEN_W(), SCREEN_H())
|
60
|
+
|
61
|
+
if page1.nil? || page2.nil?
|
62
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
63
|
+
allegro_message("Unable to create two video memory pages\n")
|
64
|
+
exit 1
|
65
|
+
end
|
66
|
+
|
67
|
+
active_page = page2
|
68
|
+
|
69
|
+
# do the animation using page flips...
|
70
|
+
clear_keybuf
|
71
|
+
(-32..SCREEN_W() + 32).each do |c|
|
72
|
+
clear_to_color(active_page, makecol(255, 255, 255))
|
73
|
+
circlefill(active_page, c, SCREEN_H()/2, 32, makecol(0, 0, 0))
|
74
|
+
textprintf_ex(active_page, font, 0, 0, makecol(0, 0, 0), -1, "Page flipping (%s)" % gfx_driver.name)
|
75
|
+
show_video_bitmap(active_page)
|
76
|
+
|
77
|
+
if (active_page == page1)
|
78
|
+
active_page = page2
|
79
|
+
else
|
80
|
+
active_page = page1
|
81
|
+
end
|
82
|
+
|
83
|
+
break if keypressed
|
84
|
+
end
|
85
|
+
|
86
|
+
destroy_bitmap(page1)
|
87
|
+
destroy_bitmap(page2)
|
data/examples/exfont.rb
ADDED
@@ -0,0 +1,70 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C version) for the Allegro library, by Evert Glebbeek.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This is a very simple program showing how to load and manipulate fonts.
|
6
|
+
#
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'allegro4r'
|
10
|
+
include Allegro4r::API
|
11
|
+
|
12
|
+
# you should always do this at the start of Allegro programs
|
13
|
+
exit 1 if allegro_init != 0
|
14
|
+
|
15
|
+
# set up the keyboard handler
|
16
|
+
install_keyboard
|
17
|
+
|
18
|
+
# set a graphics mode sized 320x200
|
19
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
|
20
|
+
if set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0
|
21
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
22
|
+
allegro_message("Unable to set any graphic mode\n%s\n" % allegro_error)
|
23
|
+
exit 1
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# set the color palette
|
28
|
+
set_palette(desktop_palette)
|
29
|
+
|
30
|
+
# clear the screen to white
|
31
|
+
clear_to_color(screen, makecol(255, 255, 255))
|
32
|
+
|
33
|
+
# We will use the lower case letters from Allegro's normal font and the
|
34
|
+
# uppercase letters from the font in unifont.dat
|
35
|
+
f1 = load_font("unifont.dat", nil, nil)
|
36
|
+
if f1.nil?
|
37
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
38
|
+
allegro_message("Cannot find unifont.dat in current directory.\n")
|
39
|
+
exit 1
|
40
|
+
end
|
41
|
+
|
42
|
+
# Extract character ranges
|
43
|
+
f2 = extract_font_range(font, ' '[0], ?A - 1)
|
44
|
+
f3 = extract_font_range(f1, ?A, ?Z);
|
45
|
+
f4 = extract_font_range(font, ?Z + 1, ?z)
|
46
|
+
|
47
|
+
# Merge fonts
|
48
|
+
Allegro4r::API.font = merge_fonts(f4, f5 = merge_fonts(f2, f3))
|
49
|
+
|
50
|
+
# Destroy temporary fonts
|
51
|
+
destroy_font(f1)
|
52
|
+
destroy_font(f2)
|
53
|
+
destroy_font(f3)
|
54
|
+
destroy_font(f4)
|
55
|
+
destroy_font(f5)
|
56
|
+
|
57
|
+
# you don't need to do this, but on some platforms (eg. Windows) things
|
58
|
+
# will be drawn more quickly if you always acquire the screen before
|
59
|
+
# trying to draw onto it.
|
60
|
+
acquire_screen
|
61
|
+
|
62
|
+
# write some text to the screen with black letters and transparent
|
63
|
+
# background
|
64
|
+
textout_centre_ex(screen, font, "Hello, world!", SCREEN_W()/2, SCREEN_H()/2, makecol(0, 0, 0), -1)
|
65
|
+
|
66
|
+
# you must always release bitmaps before calling any input functions
|
67
|
+
release_screen
|
68
|
+
|
69
|
+
# wait for a key press
|
70
|
+
readkey
|
data/examples/exhello.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
#
|
2
|
+
# Example program (C version) for the Allegro library, by Shawn Hargreaves.
|
3
|
+
# (Ruby port by Jason Frey)
|
4
|
+
#
|
5
|
+
# This is a very simple program showing how to get into graphics
|
6
|
+
# mode and draw text onto the screen.
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'rubygems'
|
10
|
+
require 'allegro4r'
|
11
|
+
include Allegro4r::API
|
12
|
+
|
13
|
+
# you should always do this at the start of Allegro programs
|
14
|
+
exit 1 if allegro_init != 0
|
15
|
+
|
16
|
+
# set up the keyboard handler
|
17
|
+
install_keyboard
|
18
|
+
|
19
|
+
# set a graphics mode sized 320x200
|
20
|
+
if set_gfx_mode(GFX_AUTODETECT, 320, 200, 0, 0) != 0
|
21
|
+
if set_gfx_mode(GFX_SAFE, 320, 200, 0, 0) != 0
|
22
|
+
set_gfx_mode(GFX_TEXT, 0, 0, 0, 0)
|
23
|
+
allegro_message("Unable to set any graphic mode\n%s\n" % allegro_error)
|
24
|
+
exit 1
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# set the color palette
|
29
|
+
set_palette(desktop_palette)
|
30
|
+
|
31
|
+
# clear the screen to white
|
32
|
+
clear_to_color(screen, makecol(255, 255, 255))
|
33
|
+
|
34
|
+
# you don't need to do this, but on some platforms (eg. Windows) things
|
35
|
+
# will be drawn more quickly if you always acquire the screen before
|
36
|
+
# trying to draw onto it.
|
37
|
+
acquire_screen
|
38
|
+
|
39
|
+
# write some text to the screen with black letters and transparent background
|
40
|
+
textout_centre_ex(screen, font, "Hello, world!", SCREEN_W()/2, SCREEN_H()/2, makecol(0, 0, 0), -1)
|
41
|
+
|
42
|
+
# you must always release bitmaps before calling any input functions
|
43
|
+
release_screen
|
44
|
+
|
45
|
+
# wait for a key press
|
46
|
+
readkey
|