summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorCarsten Teibes2013-09-17 14:10:51 +0200
committerCarsten Teibes2013-09-17 14:10:51 +0200
commit207e45d2de038b4efe711ba5afc7a54c044e2aea (patch)
tree31036f16f70605fd2ee6db62111729471217f2fb
downloadaur-207e45d2de038b4efe711ba5afc7a54c044e2aea.tar.gz
[add] alex4 1.1
-rw-r--r--.SRCINFO31
-rw-r--r--PKGBUILD55
-rw-r--r--alex4.desktop10
-rw-r--r--alex4.install9
-rw-r--r--alex4.pngbin0 -> 283 bytes
-rw-r--r--allegro-4.2.patch298
-rw-r--r--unix-port.patch781
7 files changed, 1184 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO
new file mode 100644
index 000000000000..ca86b0967eaf
--- /dev/null
+++ b/.SRCINFO
@@ -0,0 +1,31 @@
+pkgbase = alex4
+ pkgdesc = Help Alex the Allegator rescue Lola before the humans make a pair of shoes out of her!
+ pkgver = 1.1
+ pkgrel = 4
+ url = http://allegator.sourceforge.net
+ install = alex4.install
+ arch = i686
+ arch = x86_64
+ license = GPL2
+ depends = dumb
+ source = http://downloads.sourceforge.net/project/allegator/Alex4/source%20and%20data/alex4src_data.zip
+ source = unix-port.patch
+ source = allegro-4.2.patch
+ source = alex4.png
+ source = alex4.desktop
+ source = alex4.install
+ md5sums = c81b8e3813300a0cfbe828bcdff60fda
+ md5sums = 8dcafad79e34fc9adb78a49b6933e10c
+ md5sums = f9ccd450934d346deec450e91ecfc42e
+ md5sums = 1c21affded614148ad06deb1bb59086c
+ md5sums = 96f6ee8ce4fc268d5161e5294cfe565e
+ md5sums = f5bfcc2b2378cf34ab0491e8a8da6c23
+ sha256sums = d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103
+ sha256sums = 5bb70ca82bcd0df0ed72eccada0c9ccb37a570d7c62ea8a076bdf2169a15c2e5
+ sha256sums = ea3e6ffd558cbdb6c392d598499f0780de8c0e456da554531c5c975fe8688d28
+ sha256sums = 236a8d163ee8aa94073aa1ec969a85e887b3c70fefbcd03b1f41b93b09fa32c6
+ sha256sums = b7fc0854e9a07f08bd90f59aaf99011afc3c6c2a0ad0b244ec04694ce0ff19dd
+ sha256sums = 9a9589ca7ab7792cadeb6529141b9d719356d989a7393d7eab322b88c6f27965
+
+pkgname = alex4
+
diff --git a/PKGBUILD b/PKGBUILD
new file mode 100644
index 000000000000..f4fea1bb5059
--- /dev/null
+++ b/PKGBUILD
@@ -0,0 +1,55 @@
+# Maintainer: carstene1ns <arch carsten-teibes de>
+# Contributor: megadriver <megadriver at gmx dot com>
+
+pkgname=alex4
+pkgver=1.1
+pkgrel=4
+pkgdesc="Help Alex the Allegator rescue Lola before the humans make a pair of shoes out of her!"
+url="http://allegator.sourceforge.net"
+arch=('i686' 'x86_64')
+license=('GPL2')
+depends=('dumb')
+install="$pkgname.install"
+source=("http://downloads.sourceforge.net/project/allegator/Alex4/source%20and%20data/alex4src_data.zip"
+ "unix-port.patch"
+ "allegro-4.2.patch"
+ "$pkgname.png"
+ "$pkgname.desktop"
+ "$pkgname.install")
+md5sums=('c81b8e3813300a0cfbe828bcdff60fda'
+ '8dcafad79e34fc9adb78a49b6933e10c'
+ 'f9ccd450934d346deec450e91ecfc42e'
+ '1c21affded614148ad06deb1bb59086c'
+ '96f6ee8ce4fc268d5161e5294cfe565e'
+ 'f5bfcc2b2378cf34ab0491e8a8da6c23')
+sha256sums=('d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103'
+ '5bb70ca82bcd0df0ed72eccada0c9ccb37a570d7c62ea8a076bdf2169a15c2e5'
+ 'ea3e6ffd558cbdb6c392d598499f0780de8c0e456da554531c5c975fe8688d28'
+ '236a8d163ee8aa94073aa1ec969a85e887b3c70fefbcd03b1f41b93b09fa32c6'
+ 'b7fc0854e9a07f08bd90f59aaf99011afc3c6c2a0ad0b244ec04694ce0ff19dd'
+ '9a9589ca7ab7792cadeb6529141b9d719356d989a7393d7eab322b88c6f27965')
+
+prepare() {
+ cd $srcdir/alex4src
+
+ patch -p1 -N -i $srcdir/unix-port.patch
+ patch -p1 -N -i $srcdir/allegro-4.2.patch
+}
+
+build() {
+ cd $srcdir/alex4src/src
+
+ LDFLAGS=-lm make PREFIX=/usr
+}
+
+package() {
+ cd $srcdir/alex4src/src
+
+ make PREFIX=$pkgdir/usr install
+
+ install -Dm644 ../$pkgname.ini $pkgdir/usr/share/$pkgname
+
+ # install desktop entry
+ install -Dm644 $srcdir/$pkgname.png $pkgdir/usr/share/icons/$pkgname.png
+ install -Dm644 $srcdir/$pkgname.desktop $pkgdir/usr/share/applications/$pkgname.desktop
+}
diff --git a/alex4.desktop b/alex4.desktop
new file mode 100644
index 000000000000..b4d13044be32
--- /dev/null
+++ b/alex4.desktop
@@ -0,0 +1,10 @@
+[Desktop Entry]
+Type=Application
+Version=1.0
+Name=Alex the Allegator 4
+Comment=Retro platform game
+Icon=alex4
+Exec=alex4
+Terminal=false
+Categories=Game;ActionGame;
+StartupNotify=false
diff --git a/alex4.install b/alex4.install
new file mode 100644
index 000000000000..b3acef513622
--- /dev/null
+++ b/alex4.install
@@ -0,0 +1,9 @@
+
+post_install() {
+ echo "Copy /usr/share/alex4/alex4.ini to \$HOME/.alex4 directory."
+ echo "You can then edit it to configure game options."
+}
+
+post_upgrade() {
+ post_install
+}
diff --git a/alex4.png b/alex4.png
new file mode 100644
index 000000000000..0ced62e368b8
--- /dev/null
+++ b/alex4.png
Binary files differ
diff --git a/allegro-4.2.patch b/allegro-4.2.patch
new file mode 100644
index 000000000000..a5f869091ac1
--- /dev/null
+++ b/allegro-4.2.patch
@@ -0,0 +1,298 @@
+Description: Get rid of deprecated Allegro functions.
+Forwarded: yes
+Author: Peter De Wachter <pdewacht@gmail.com>
+Last-Update: 2009-05-07
+
+--- a/src/edit.c
++++ b/src/edit.c
+@@ -69,8 +69,8 @@
+ }
+
+ // show stuff
+- textprintf(bmp, data[THE_FONT].dat, 1, 1, 0, "TILE: %d,%d", tx, ty);
+- textprintf(bmp, data[THE_FONT].dat, 1, 11, 0, "SIZE: %d,%d", map->width, map->height);
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, 1, 0, -1, "TILE: %d,%d", tx, ty);
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, 11, 0, -1, "SIZE: %d,%d", map->width, map->height);
+
+ // show start pos
+ x = (ABS(map->start_x) << 4) - map->offset_x;
+@@ -80,7 +80,7 @@
+
+ // draw status bar
+ rectfill(bmp, 0, 110, 159, 119, 1);
+- textprintf(bmp, data[THE_FONT].dat, 1, 111, 4, "EDITING: %s", get_filename(edit_path_and_file));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, 111, 4, -1, "EDITING: %s", get_filename(edit_path_and_file));
+ }
+ else if (edit_mode == EDIT_MODE_SELECT) { // draw tile palette
+ // calculate offset depending on mouse pointer
+@@ -104,16 +104,16 @@
+ else if (edit_mode == EDIT_MODE_STATS) { // draw map properties
+ int ty = 16;
+ clear_to_color(bmp, 3);
+- textprintf(bmp, data[THE_FONT].dat, 1, 1, 1, "%s (props)", get_filename(edit_path_and_file));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, 1, 1, -1, "%s (props)", get_filename(edit_path_and_file));
+ line(bmp, 0, 10, 159, 10, 1);
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "Win by:");
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " "));
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " "));
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " "));
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "4) Boss level: (%s)", (map->boss_level ? "X" : " "));
+- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "5) Name: %s", map->name);
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "Win by:");
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " "));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " "));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " "));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "4) Boss level: (%s)", (map->boss_level ? "X" : " "));
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, ty+=10, 1, -1, "5) Name: %s", map->name);
+
+- textprintf(bmp, data[THE_FONT].dat, 1, 110, 1, "F1: back to editor");
++ textprintf_ex(bmp, data[THE_FONT].dat, 1, 110, 1, -1, "F1: back to editor");
+ }
+
+ if (edit_mode != EDIT_MODE_STATS) {
+--- a/src/hisc.c
++++ b/src/hisc.c
+@@ -153,9 +153,9 @@
+
+ // draws a single hisc post
+ void draw_hisc_post(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level) {
+- textprintf(bmp, fnt, x, y, color, "%s", table->name);
+- if (show_level) textprintf_right(bmp, fnt, x+80, y, color, "%2d", table->level);
+- textprintf_right(bmp, fnt, x+140, y, color, "%d", table->score);
++ textprintf_ex(bmp, fnt, x, y, color, -1, "%s", table->name);
++ if (show_level) textprintf_right_ex(bmp, fnt, x+80, y, color, -1, "%2d", table->level);
++ textprintf_right_ex(bmp, fnt, x+140, y, color, -1, "%d", table->score);
+ }
+
+ // draws the entire table
+--- a/src/main.c
++++ b/src/main.c
+@@ -496,15 +496,15 @@
+
+ rectfill(bmp, 0, y, 159, y+9, 1);
+ draw_sprite_h_flip(bmp, data[HERO_NORM].dat, 0, y+1);
+- textprintf(bmp, data[THE_FONT].dat, 9, y+1, 4, " :%d", player.lives);
++ textprintf_ex(bmp, data[THE_FONT].dat, 9, y+1, 4, -1, " :%d", player.lives);
+
+ for(i = 0; i < player.health; i ++)
+ draw_sprite(bmp, data[HEART2].dat, 40 + 10 * i, y-3);
+
+ draw_sprite(bmp, data[EGG].dat, 80, y-5);
+- textprintf(bmp, data[THE_FONT].dat, 85, y+1, 4, " :%d", player.ammo);
++ textprintf_ex(bmp, data[THE_FONT].dat, 85, y+1, 4, -1, " :%d", player.ammo);
+
+- textprintf_right(bmp, data[THE_FONT].dat, 158, y+1, 4, "%d", player.score);
++ textprintf_right_ex(bmp, data[THE_FONT].dat, 158, y+1, 4, -1, "%d", player.score);
+ }
+
+
+@@ -626,7 +626,6 @@
+
+ // various allegro things
+ log2file(" initializing allegro");
+- text_mode(-1);
+ garble_string(init_string, 53);
+ #ifdef __unix__
+ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.ini",
+@@ -635,7 +634,6 @@
+ #else
+ set_config_file("alex4.ini");
+ #endif
+- set_window_close_button(FALSE);
+
+ // install timers
+ log2file(" installing timers");
+@@ -701,7 +699,7 @@
+
+ // show initial loading screen
+ clear(swap_screen);
+- textout_centre(swap_screen, font, "loading...", 320, 200, 1);
++ textout_centre_ex(swap_screen, font, "loading...", 320, 200, 1, -1);
+ blit_to_screen(swap_screen);
+
+ #ifndef __unix__
+@@ -788,8 +786,8 @@
+ clear_to_color(swap_screen, 3);
+
+ bmp = data[FLD_LOGO].dat;
+- draw_character(swap_screen, bmp, 80 - bmp->w / 2 + 0, 50 + 1, 1);
+- draw_character(swap_screen, bmp, 80 - bmp->w / 2, 50, 4);
++ draw_character_ex(swap_screen, bmp, 80 - bmp->w / 2 + 0, 50 + 1, 1, -1);
++ draw_character_ex(swap_screen, bmp, 80 - bmp->w / 2, 50, 4, -1);
+
+ blit_to_screen(swap_screen);
+
+@@ -1100,11 +1098,11 @@
+
+ // draws text with an outline
+ void textout_outline(BITMAP *bmp, const char *txt, int x, int y) {
+- textout(bmp, data[THE_FONT].dat, txt, x+1, y, 1);
+- textout(bmp, data[THE_FONT].dat, txt, x-1, y, 1);
+- textout(bmp, data[THE_FONT].dat, txt, x, y+1, 1);
+- textout(bmp, data[THE_FONT].dat, txt, x, y-1, 1);
+- textout(bmp, data[THE_FONT].dat, txt, x, y, 4);
++ textout_ex(bmp, data[THE_FONT].dat, txt, x+1, y, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, txt, x-1, y, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, txt, x, y+1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, txt, x, y-1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, txt, x, y, 4, -1);
+ }
+
+
+@@ -1451,12 +1449,12 @@
+
+ sprintf(buf, "%s %d %s", (level > min ? "<" : " "), level, (level < max ? ">" : " "));
+ clear_bitmap(stuff);
+- textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2);
+- textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2, 0, 1);
++ textout_centre_ex(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2, -1);
++ textout_centre_ex(stuff, data[THE_FONT].dat, buf, stuff->w/2, 0, 1, -1);
+ stretch_sprite(bmp, stuff, 80 - 4*stuff->w/2, 30, 4*stuff->w, 4*stuff->h);
+
+- textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1);
+- textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4);
++ textout_centre_ex(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1, -1);
++ textout_centre_ex(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4, -1);
+
+ if (options.one_hundred) {
+ if (game_count & 32 || game_count & 16) draw_sprite(bmp, data[SHIP100].dat, xpos, 2);
+@@ -2532,20 +2530,20 @@
+
+ y = 60;
+ x = 50;
+- textout(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1);
+- textout(bmp, data[THE_FONT].dat, start_string, x, y, 4);
++ textout_ex(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, start_string, x, y, 4, -1);
+
+ y += step;
+- textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1);
+- textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x, y, 4);
++ textout_ex(bmp, data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, "HIGH SCORES", x, y, 4, -1);
+
+ y += step;
+- textout(bmp, data[THE_FONT].dat, "EDITOR", x+1, y+1, 1);
+- textout(bmp, data[THE_FONT].dat, "EDITOR", x, y, 4);
++ textout_ex(bmp, data[THE_FONT].dat, "EDITOR", x+1, y+1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, "EDITOR", x, y, 4, -1);
+
+ y += step;
+- textout(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1);
+- textout(bmp, data[THE_FONT].dat, "QUIT", x, y, 4);
++ textout_ex(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1, -1);
++ textout_ex(bmp, data[THE_FONT].dat, "QUIT", x, y, 4, -1);
+
+ draw_sprite(bmp, data[POINTER].dat, x - 25 + fixtoi(3 * fcos(itofix(tick << 2))), 44 + menu_choice * step);
+ }
+@@ -2597,7 +2595,7 @@
+ string[i] = letters[current_letter];
+ string[i + 1] = '\0';
+ blit(block, bmp, 0, 0, pos_x - 1, pos_y - 1, block->w, block->h);
+- textout(bmp, f, string, pos_x, pos_y, colour);
++ textout_ex(bmp, f, string, pos_x, pos_y, colour, -1);
+ blit_to_screen(bmp);
+
+ if (pad != NULL) {
+--- a/src/map.c
++++ b/src/map.c
+@@ -280,7 +280,7 @@
+
+ if (sm == NULL) return;
+
+- set_clip(bmp, dx, dy, dx+w-1, dy+h-1);
++ set_clip_rect(bmp, dx, dy, dx+w-1, dy+h-1);
+
+ for(y=0;y<7;y++) {
+ for(x=0;x<11;x++) {
+@@ -330,13 +330,13 @@
+
+ if (edit) {
+ if (sm->dat[pos].type == MAP_DEAD) {
+- textout(bmp, font, "D", dx + x*16 + ax, dy + y*16 + ay, 0);
++ textout_ex(bmp, font, "D", dx + x*16 + ax, dy + y*16 + ay, 0, -1);
+ }
+ if (sm->dat[pos].type == MAP_EXIT) {
+- textout(bmp, font, "XT", dx + x*16 + ax, dy + y*16 + ay, 255);
++ textout_ex(bmp, font, "XT", dx + x*16 + ax, dy + y*16 + ay, 255, -1);
+ }
+ if (sm->dat[pos].type == MAP_BRK) {
+- textout(bmp, font, "GL", dx + x*16 + ax, dy + y*16 + ay, 255);
++ textout_ex(bmp, font, "GL", dx + x*16 + ax, dy + y*16 + ay, 255, -1);
+ }
+ if (sm->dat[pos].type == MAP_ENEMY1) {
+ draw_sprite(bmp, sm->data[ENEMY1_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay);
+@@ -367,7 +367,7 @@
+ }
+ }
+
+- set_clip(bmp, 0, 0, SCREEN_W - 1, SCREEN_H - 1);
++ set_clip_rect(bmp, 0, 0, SCREEN_W - 1, SCREEN_H - 1);
+
+ }
+
+--- a/src/script.c
++++ b/src/script.c
+@@ -89,7 +89,7 @@
+
+ // draw text
+ for(i = 0; i < lines; i ++) {
+- textout(bmp, d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1);
++ textout_ex(bmp, d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1, -1);
+ }
+ }
+
+--- a/src/scroller.c
++++ b/src/scroller.c
+@@ -65,22 +65,22 @@
+ if (sc->horizontal) {
+ if (sc->offset < -sc->length) return;
+ if (sc->offset > sc->width) return;
+- set_clip(bmp, x, y, x + sc->width, y + sc->height);
+- textout(bmp, sc->fnt, sc->text, x + sc->offset + 1, y + 1, 1);
+- textout(bmp, sc->fnt, sc->text, x + sc->offset, y, 3);
+- set_clip(bmp, 0, 0, bmp->w-1, bmp->h-1);
++ set_clip_rect(bmp, x, y, x + sc->width, y + sc->height);
++ textout_ex(bmp, sc->fnt, sc->text, x + sc->offset + 1, y + 1, 1, -1);
++ textout_ex(bmp, sc->fnt, sc->text, x + sc->offset, y, 3, -1);
++ set_clip_rect(bmp, 0, 0, bmp->w-1, bmp->h-1);
+ }
+ else {
+ int i;
+ if (sc->offset < -sc->rows * sc->font_height) return;
+ if (sc->offset > sc->height) return;
+- set_clip(bmp, x, y, x + sc->width, y + sc->height);
++ set_clip_rect(bmp, x, y, x + sc->width, y + sc->height);
+ for(i=0;i<sc->rows;i++) {
+ if (i * sc->font_height + sc->offset <= sc->height)
+ if ((i+1) * sc->font_height + sc->offset >= 0)
+- textout_centre(bmp, sc->fnt, sc->lines[i], x+(sc->width>>1) , i * sc->font_height + y + sc->offset, -1);
++ textout_centre_ex(bmp, sc->fnt, sc->lines[i], x+(sc->width>>1) , i * sc->font_height + y + sc->offset, -1, -1);
+ }
+- set_clip(bmp, 0, 0, bmp->w-1, bmp->h-1);
++ set_clip_rect(bmp, 0, 0, bmp->w-1, bmp->h-1);
+ }
+ }
+
+--- a/src/shooter.c
++++ b/src/shooter.c
+@@ -341,7 +341,7 @@
+ if (!o->hit || o->type == SO_PLAYER_BULLET)
+ draw_sprite(bmp, s_data[o->image].dat, (int)o->x, (int)o->y);
+ else
+- draw_character(bmp, s_data[o->image].dat, (int)o->x, (int)o->y, 4);
++ draw_character_ex(bmp, s_data[o->image].dat, (int)o->x, (int)o->y, 4, -1);
+ }
+ else {
+ int c = (o->energy + 8) >> 3;
+@@ -379,8 +379,8 @@
+ padding_str[i] = '0';
+ padding_str[i] = '\0';
+ strcat(padding_str, score_str);
+- textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 3, "%s", padding_str);
+- if (s_var.score) textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 4, "%s", score_str);
++ textprintf_right_ex(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 3, -1, "%s", padding_str);
++ if (s_var.score) textprintf_right_ex(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 4, -1, "%s", score_str);
+ }
+
+
diff --git a/unix-port.patch b/unix-port.patch
new file mode 100644
index 000000000000..ed960b0b1f99
--- /dev/null
+++ b/unix-port.patch
@@ -0,0 +1,781 @@
+Description: Support Unix-like operating systems.
+ Based on Hans de Goede's patch for Fedora.
+Author: Hans de Goede <hdegoede@redhat.com>
+ Peter de Wachter <pdewacht@gmail.com>,
+ Peter Pentchev <roam@ringlet.net>
+Forwarded: yes
+Last-Update: 2011-03-09
+
+--- a/src/main.c
++++ b/src/main.c
+@@ -38,6 +38,7 @@
+ #include "main.h"
+ #include "edit.h"
+ #include "shooter.h"
++#include "unix.h"
+
+ #include "../data/data.h"
+
+@@ -66,7 +67,6 @@
+ Tscroller hscroll;
+ Thisc *hisc_table;
+ Thisc *hisc_table_space;
+-char working_directory[1024];
+
+ // the map
+ Tmap *map = NULL;
+@@ -126,6 +126,7 @@
+ int playing_original_game = 1;
+ int init_ok = 0;
+
++static FILE* log_fp = NULL;
+
+
+ // // // // // // // // // // // // // // // // // // // // //
+@@ -154,20 +155,18 @@
+ // loggs the text to the text file
+ void log2file(char *format, ...) {
+ va_list ptr; /* get an arg pointer */
+- FILE *fp;
+
+- fp = fopen("log.txt", "at");
+- if (fp) {
++ if (log_fp) {
+ /* initialize ptr to point to the first argument after the format string */
+ va_start(ptr, format);
+
+ /* Write to logfile. */
+- vfprintf(fp, format, ptr); // Write passed text.
+- fprintf(fp, "\n"); // New line..
++ vfprintf(log_fp, format, ptr); // Write passed text.
++ fprintf(log_fp, "\n"); // New line..
+
+ va_end(ptr);
+
+- fclose(fp);
++ fflush(log_fp);
+ }
+
+ }
+@@ -618,6 +617,10 @@
+ BITMAP *bmp;
+ int i;
+ int w, h;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+
+ log2file("\nInit routines:");
+
+@@ -625,7 +628,13 @@
+ log2file(" initializing allegro");
+ text_mode(-1);
+ garble_string(init_string, 53);
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.ini",
++ homedir? homedir:".");
++ override_config_file(filename);
++#else
+ set_config_file("alex4.ini");
++#endif
+ set_window_close_button(FALSE);
+
+ // install timers
+@@ -695,6 +704,7 @@
+ textout_centre(swap_screen, font, "loading...", 320, 200, 1);
+ blit_to_screen(swap_screen);
+
++#ifndef __unix__
+ // set switch modes and callbacks
+ if (set_display_switch_mode(SWITCH_PAUSE) < 0)
+ log2file(" * display switch mode failed");
+@@ -702,6 +712,7 @@
+ log2file(" * display switch in failed");
+ if (set_display_switch_callback(SWITCH_OUT, display_switch_out) < 0)
+ log2file(" * display switch out failed");
++#endif
+
+
+ // set win title (no! really???)
+@@ -718,7 +729,7 @@
+ // load data
+ log2file(" loading data");
+ packfile_password(init_string);
+- data = load_datafile("data/data.dat");
++ data = load_datafile(DATADIR "data.dat");
+ packfile_password(NULL);
+ if (data == NULL) {
+ log2file(" *** failed");
+@@ -728,7 +739,13 @@
+
+ // load options
+ log2file(" loading options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "rp");
++#else
+ pf = pack_fopen("alex4.sav", "rp");
++#endif
+ if (pf) {
+ load_options(&options, pf);
+ pack_fclose(pf);
+@@ -740,7 +757,13 @@
+
+ // loading highscores
+ log2file(" loading hiscores");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "rp");
++#else
+ pf = pack_fopen("alex4.hi", "rp");
++#endif
+ if (pf) {
+ load_hisc_table(hisc_table, pf);
+ load_hisc_table(hisc_table_space, pf);
+@@ -776,7 +799,7 @@
+ log2file(" loading original maps");
+ packfile_password(init_string);
+ num_levels = -1; // skip end object when counting
+- maps = load_datafile_callback("data/maps.dat", count_maps_callback);
++ maps = load_datafile_callback(DATADIR "maps.dat", count_maps_callback);
+ packfile_password(NULL);
+ if (maps == NULL) {
+ log2file(" *** failed");
+@@ -835,11 +858,12 @@
+ // install sound
+ log2file(" installing sound");
+ set_volume_per_voice(0);
+- switch(get_config_int("sound", "sound_device", 0)) {
++ switch(get_config_int("sound", "sound_device", 1)) {
+ case 1:
+ i = DIGI_AUTODETECT;
+ log2file(" DIGI_AUTODETECT selected (%d)", i);
+ break;
++#ifdef ALLEGRO_WINDOWS
+ case 2:
+ i = DIGI_DIRECTX(0);
+ log2file(" DIGI_DIRECTX(0) selected (%d)", i);
+@@ -848,6 +872,20 @@
+ i = DIGI_DIRECTAMX(0);
+ log2file(" DIGI_DIRECTAMX(0) selected (%d)", i);
+ break;
++#elif defined ALLEGRO_UNIX
++#ifdef DIGI_OSS
++ case 2:
++ i = DIGI_OSS;
++ log2file(" DIGI_OSS selected (%d)", i);
++ break;
++#endif
++#ifdef DIGI_ALSA
++ case 3:
++ i = DIGI_ALSA;
++ log2file(" DIGI_ALSA selected (%d)", i);
++ break;
++#endif
++#endif
+ default:
+ i = -770405; // dummy number
+ got_sound = 0;
+@@ -870,9 +908,9 @@
+ if (get_config_int("sound", "use_sound_datafile", 1)) {
+ log2file(" loading sound datafile");
+ packfile_password(init_string);
+- sfx_data = load_datafile("data/sfx_44.dat");
++ sfx_data = load_datafile(DATADIR "sfx_44.dat");
+ if (sfx_data == NULL) {
+- sfx_data = load_datafile("data/sfx_22.dat");
++ sfx_data = load_datafile(DATADIR "sfx_22.dat");
+ log2file(" sfx_44.dat not found");
+ s = 0;
+ }
+@@ -971,6 +1009,10 @@
+ void uninit_game() {
+ int i;
+ PACKFILE *pf;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+
+ log2file("\nExit routines:");
+
+@@ -989,14 +1031,26 @@
+ // only save if everything was inited ok!
+ if (init_ok) {
+ log2file(" saving options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.sav", "wp");
++#endif
+ if (pf) {
+ save_options(&options, pf);
+ pack_fclose(pf);
+ }
+
+ log2file(" saving highscores");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename), "%s/.alex4/alex4.hi",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.hi", "wp");
++#endif
+ if (pf) {
+ save_hisc_table(hisc_table, pf);
+ save_hisc_table(hisc_table_space, pf);
+@@ -1289,7 +1343,7 @@
+ // poll music machine
+ if (got_sound) al_poll_duh(dp);
+
+- if (mode == 1 && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl) ) || my_counter > 200) {
++ if (((mode == 1) && (keypressed() || is_fire(&ctrl) || is_jump(&ctrl))) || (my_counter > 200)) {
+ mode = 2;
+ }
+
+@@ -1343,7 +1397,7 @@
+ if (space) {
+ // get space bg
+ packfile_password(init_string);
+- df = load_datafile_object("data/a45.dat", "BG1");
++ df = load_datafile_object(DATADIR "a45.dat", "BG1");
+ packfile_password(NULL);
+ if (df != NULL) {
+ bg = df->dat;
+@@ -2149,7 +2203,7 @@
+
+ // calculates camera pos for map m considering player p
+ void calculate_camera_pos(Tplayer *p, Tmap *m) {
+- static camera_type = 1;
++ static int camera_type = 1;
+
+ if (p->actor->status == AC_BALL) {
+ camera_type = 2;
+@@ -2841,6 +2895,10 @@
+ }
+ else {
+ PACKFILE *pf;
++#ifdef __unix__
++ char filename[512];
++ char *homedir = get_homedir();
++#endif
+ log2file(" level complete");
+ if (got_sound) stop_music();
+ if (level < MAX_LEVELS && playing_original_game) {
+@@ -2875,7 +2933,14 @@
+
+ // save options
+ log2file(" saving options");
++#ifdef __unix__
++ snprintf(filename, sizeof(filename),
++ "%s/.alex4/alex4.sav",
++ homedir? homedir:".");
++ pf = pack_fopen(filename, "wp");
++#else
+ pf = pack_fopen("alex4.sav", "wp");
++#endif
+ if (pf) {
+ save_options(&options, pf);
+ pack_fclose(pf);
+@@ -2969,24 +3034,36 @@
+
+ // main
+ int main(int argc, char **argv) {
+- FILE *fp;
+ int i;
+ char full_path[1024];
++#ifndef __unix__
++ char working_directory[1024];
++#else
++ char *homedir = get_homedir();
++#endif
+
+ // init allegro
+ allegro_init();
+
++#ifdef __unix__
++ // start logfile
++ snprintf(full_path, sizeof(full_path), "%s/.alex4",
++ homedir? homedir:".");
++ check_and_create_dir(full_path);
++ snprintf(full_path, sizeof(full_path), "%s/.alex4/log.txt",
++ homedir? homedir:".");
++ log_fp = fopen(full_path, "wt");
++#else
+ // get working directory
+ get_executable_name(full_path, 1024);
+ replace_filename(working_directory, full_path, "", 1024);
+ chdir(working_directory);
+
+-
+ // start logfile
+- fp = fopen("log.txt", "wt");
+- if (fp) {
+- fprintf(fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
+- fclose(fp);
++ log_fp = fopen("log.txt", "wt");
++#endif
++ if (log_fp) {
++ fprintf(log_fp, "Alex 4 (%s) - log file\n-------------------\n", GAME_VERSION_STR);
+ }
+
+ // log program arguments
+@@ -2994,7 +3071,9 @@
+ for(i = 0; i < argc; i ++) {
+ log2file(" %s", argv[i]);
+ }
++#ifndef __unix__
+ log2file("Working directory is:\n %s", working_directory);
++#endif
+
+ // test wether to play real game
+ // or custom levels
+@@ -3022,6 +3101,8 @@
+ uninit_game();
+ allegro_exit();
+ log2file("\nDone...\n");
++ if (log_fp)
++ fclose(log_fp);
+
+ return 0;
+ } END_OF_MAIN();
+--- a/src/player.h
++++ b/src/player.h
+@@ -60,4 +60,4 @@
+ void wound_player(Tplayer *p);
+ void kill_player(Tplayer *p);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/map.h
++++ b/src/map.h
+@@ -111,4 +111,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- /dev/null
++++ b/src/unix.c
+@@ -0,0 +1,87 @@
++#ifdef __unix__
++#include <stdio.h>
++#include <stdlib.h>
++#include <unistd.h>
++#include <pwd.h>
++#include <errno.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++#if defined(__DECC) && defined(VMS)
++#include <unixlib.h>
++static char *vms_to_unix_buffer = NULL;
++static int convert_vms_to_unix(char *vms_dir_name)
++{
++ vms_to_unix_buffer = vms_dir_name;
++}
++#endif
++
++char *get_homedir(void)
++{
++ struct passwd *pw;
++ char *home;
++
++ home = getenv("HOME");
++ if (home)
++ return home;
++
++ if (!(pw = getpwuid(getuid())))
++ {
++ fprintf(stderr, "Who are you? Not found in passwd database!!\n");
++ return NULL;
++ }
++
++#if defined(__DECC) && defined(VMS)
++ /* Convert The OpenVMS Formatted "$HOME" Directory Path Into Unix
++ Format. */
++ decc$from_vms(pw->pw_dir, convert_vms_to_unix, 1);
++ return vms_to_unix_buffer;
++#else
++ return pw->pw_dir;
++#endif
++}
++//-----------------------------------------------------------------------------
++int check_and_create_dir(const char *name)
++{
++ struct stat stat_buffer;
++
++ if (stat(name, &stat_buffer))
++ {
++ /* error check if it doesn't exist or something else is wrong */
++ if (errno == ENOENT)
++ {
++ /* doesn't exist letts create it ;) */
++#ifdef BSD43
++ if (mkdir(name, 0775))
++#else
++ if (mkdir(name, S_IRWXU|S_IRWXG|S_IROTH|S_IXOTH))
++#endif
++ {
++ fprintf(stderr, "Error creating dir %s", name);
++ perror(" ");
++ return -1;
++ }
++ }
++ else
++ {
++ /* something else went wrong yell about it */
++ fprintf(stderr, "Error opening %s", name);
++ perror(" ");
++ return -1;
++ }
++ }
++ else
++ {
++ /* file exists check it's a dir otherwise yell about it */
++#ifdef BSD43
++ if (!(S_IFDIR & stat_buffer.st_mode))
++#else
++ if (!S_ISDIR(stat_buffer.st_mode))
++#endif
++ {
++ fprintf(stderr,"Error %s exists but isn't a dir\n", name);
++ return -1;
++ }
++ }
++ return 0;
++}
++#endif
+--- /dev/null
++++ b/src/Makefile
+@@ -0,0 +1,24 @@
++PREFIX = /usr/local
++DATADIR = $(PREFIX)/share/$(TARGET)
++CFLAGS ?= -g -Wall -Wno-deprecated-declarations -O2
++LIBS = -laldmb -ldumb `allegro-config --libs`
++DEFINES = -DDATADIR=\"$(DATADIR)/\"
++OBJS = actor.o edit.o map.o player.o shooter.o unix.o \
++ bullet.o hisc.o options.o script.o timer.o \
++ control.o main.o particle.o scroller.o token.o
++TARGET = alex4
++
++$(TARGET): $(OBJS)
++ $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
++
++%.o: %.c
++ $(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -o $@ -c $<
++
++install: $(TARGET)
++ mkdir -p $(PREFIX)/bin
++ mkdir -p $(DATADIR)
++ install -p -m 755 $(TARGET) $(PREFIX)/bin
++ install -p -m 644 ../data/*.dat $(DATADIR)
++
++clean:
++ rm -f $(OBJS) $(TARGET) *~
+--- a/src/token.h
++++ b/src/token.h
+@@ -41,4 +41,4 @@
+ Ttoken *tokenize(char *str);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/shooter.c
++++ b/src/shooter.c
+@@ -1372,7 +1372,7 @@
+ // load data
+ log2file(" loading shooter data");
+ packfile_password(get_init_string());
+- s_data = load_datafile("data/a45.dat");
++ s_data = load_datafile(DATADIR "a45.dat");
+ if (!s_data) {
+ log2file(" *** failed");
+ return -1;
+--- a/src/particle.h
++++ b/src/particle.h
+@@ -54,4 +54,4 @@
+ void update_particle_with_map(Tparticle *p, Tmap *m);
+ void create_burst(Tparticle *ps, int x, int y, int spread, int num, int life, int bmp);
+
+-#endif
+\ No newline at end of file
++#endif
+--- /dev/null
++++ b/src/unix.h
+@@ -0,0 +1,6 @@
++#ifdef __unix__
++
++char *get_homedir();
++int check_and_create_dir(const char *name);
++
++#endif
+--- a/src/scroller.h
++++ b/src/scroller.h
+@@ -51,4 +51,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/map.c
++++ b/src/map.c
+@@ -24,6 +24,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <endian.h>
+ #include "allegro.h"
+ #include "map.h"
+ #include "timer.h"
+@@ -64,7 +65,41 @@
+
+ return m;
+ }
+-
++
++static void mem_to_int(int *dest, unsigned char *mem)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ memcpy(dest, mem, 4);
++#else
++ *dest = mem[0] | (((int)mem[1]) << 8) | (((int)mem[2]) << 16) |
++ (((int)mem[3]) << 24);
++#endif
++}
++
++static void fread_int(int *dest, FILE *fp)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ fread(dest, 4, 1, fp);
++#else
++ unsigned char buf[4];
++ fread(buf, 1, 4, fp);
++ mem_to_int(dest, buf);
++#endif
++}
++
++static void fwrite_int(const int *src, FILE *fp)
++{
++#if __BYTE_ORDER == __LITTLE_ENDIAN
++ fwrite(src, 4, 1, fp);
++#else
++ unsigned char buf[4];
++ buf[0] = *src;
++ buf[1] = *src >> 8;
++ buf[2] = *src >> 16;
++ buf[3] = *src >> 24;
++ fwrite(buf, 1, 4, fp);
++#endif
++}
+
+ // loads one splendind map from disk
+ Tmap *load_map(char *fname) {
+@@ -93,7 +128,19 @@
+ }
+
+ // read datastruct
+- fread(m, sizeof(Tmap), 1, fp);
++ // a mapfile contain a raw dump of the Tmap struct made on an i386
++ // the code below reads these struct dumps in an arch neutral manner
++ // Note this dumps contains pointers, these are not used because these
++ // ofcourse point to some no longer valid address.
++ fread(m, 64, 1, fp); // first 64 bytes data
++ fread_int(&(m->width), fp);
++ fread_int(&(m->height), fp);
++ fread(header, 4, 1, fp); // skip the first pointer
++ fread_int(&(m->offset_x), fp);
++ fread_int(&(m->offset_y), fp);
++ fread(header, 4, 1, fp); // skip the second pointer
++ fread_int(&(m->start_x), fp);
++ fread_int(&(m->start_y), fp);
+
+ // read map data
+ m->dat = malloc(m->width * m->height * sizeof(Tmappos));
+@@ -116,8 +163,8 @@
+ // loads one splendind map from memory
+ Tmap *load_map_from_memory(void *mem) {
+ Tmap *m;
+- char header[6];
+- char *c = (char *)mem;
++ unsigned char header[6];
++ unsigned char *c = (unsigned char *)mem;
+
+
+ // does the header match?
+@@ -137,9 +184,19 @@
+ }
+
+ // read datastruct
+- // fread(m, sizeof(Tmap), 1, fp);
+- memcpy(m, c, sizeof(Tmap));
+- c += sizeof(Tmap);
++ // a mapfile contain a raw dump of the Tmap struct made on an i386
++ // the code below reads these struct dumps in an arch neutral manner
++ // Note this dumps contains pointers, these are not used because these
++ // ofcourse point to some no longer valid address.
++ memcpy(m, c, 64); c += 64; // first 64 bytes data
++ mem_to_int(&(m->width), c); c += 4;
++ mem_to_int(&(m->height), c); c += 4;
++ c += 4; // skip the first pointer
++ mem_to_int(&(m->offset_x), c); c += 4;
++ mem_to_int(&(m->offset_y), c); c += 4;
++ c += 4; // skip the second pointer
++ mem_to_int(&(m->start_x), c); c+= 4;
++ mem_to_int(&(m->start_y), c); c+= 4;
+
+ // read map data
+ m->dat = malloc(m->width * m->height * sizeof(Tmappos));
+@@ -174,7 +231,18 @@
+ fwrite(header, 6, 1, fp);
+
+ // write datastruct
+- fwrite(m, sizeof(Tmap), 1, fp);
++ // a mapfile should contain a raw dump of the Tmap struct as made on an
++ // i386 the code below writes a struct dump as an i386 in an arch
++ // neutral manner
++ fwrite(m, 64, 1, fp); // first 64 bytes data
++ fwrite_int(&(m->width), fp);
++ fwrite_int(&(m->height), fp);
++ fwrite(header, 4, 1, fp); // skip the first pointer
++ fwrite_int(&(m->offset_x), fp);
++ fwrite_int(&(m->offset_y), fp);
++ fwrite(header, 4, 1, fp); // skip the second pointer
++ fwrite_int(&(m->start_x), fp);
++ fwrite_int(&(m->start_y), fp);
+
+ // write map data
+ fwrite(m->dat, sizeof(Tmappos), m->width * m->height, fp);
+@@ -409,7 +477,7 @@
+ }
+
+ if (mask == 5 && oy > 31 - ox) return mask; // 45 degree slope /
+- if (mask == 6 && oy > ox) return mask; // 45 degree slope \
++ if (mask == 6 && oy > ox) return mask; // 45 degree slope \ .
+
+ // the not so simple ones
+ if (mask == 3 && oy > 31 - ox / 2) return mask; // 22 degree slope / (low)
+--- a/src/shooter.h
++++ b/src/shooter.h
+@@ -83,8 +83,8 @@
+ int difficulty;
+
+ // player related
+- long unsigned int score;
+- long unsigned int show_score;
++ unsigned int score;
++ unsigned int show_score;
+ int lives;
+ int power_gauge;
+ int power_level;
+@@ -118,4 +118,4 @@
+ int start_shooter(Tcontrol *c, int with_sound);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/timer.h
++++ b/src/timer.h
+@@ -37,4 +37,4 @@
+ void fps_counter(void);
+ void cycle_counter(void);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/main.h
++++ b/src/main.h
+@@ -93,5 +93,8 @@
+ #define check_bb_collision(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || \
+ ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) ))
+
++#ifndef DATADIR
++#define DATADIR "data/"
++#endif
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/script.h
++++ b/src/script.h
+@@ -51,4 +51,4 @@
+
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/edit.h
++++ b/src/edit.h
+@@ -37,4 +37,4 @@
+ void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my);
+ void update_edit_mode(Tmap *map, BITMAP *bmp, int mx, int my, int mb);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/token.c
++++ b/src/token.c
+@@ -67,7 +67,7 @@
+
+ // tokenizes the string str
+ Ttoken *tokenize(char *str) {
+- Ttoken *tok_list, *tok_tmp;
++ Ttoken *tok_list, *tok_tmp = NULL;
+ char word[256];
+ int a, b, c;
+ int i = 0;
+--- a/src/hisc.h
++++ b/src/hisc.h
+@@ -48,4 +48,4 @@
+ void draw_hisc_post(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
+ void draw_hisc_table(Thisc *table, BITMAP *bmp, FONT *fnt, int x, int y, int color, int show_level);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/options.h
++++ b/src/options.h
+@@ -43,4 +43,4 @@
+ void load_options(Toptions *o, PACKFILE *fp);
+ void reset_options(Toptions *o);
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/timer.c
++++ b/src/timer.c
+@@ -60,4 +60,4 @@
+ game_count ++;
+
+ return TRUE;
+-}
+\ No newline at end of file
++}
+--- a/src/actor.h
++++ b/src/actor.h
+@@ -91,4 +91,4 @@
+ void kill_actor(Tactor *a);
+
+
+-#endif
+\ No newline at end of file
++#endif
+--- a/src/bullet.h
++++ b/src/bullet.h
+@@ -52,4 +52,4 @@
+ void update_bullet(Tbullet *b);
+ void update_bullet_with_map(Tbullet *b, Tmap *m);
+
+-#endif
+\ No newline at end of file
++#endif