diff options
author | Carsten Teibes | 2013-09-17 14:10:51 +0200 |
---|---|---|
committer | Carsten Teibes | 2013-09-17 14:10:51 +0200 |
commit | 207e45d2de038b4efe711ba5afc7a54c044e2aea (patch) | |
tree | 31036f16f70605fd2ee6db62111729471217f2fb | |
download | aur-207e45d2de038b4efe711ba5afc7a54c044e2aea.tar.gz |
[add] alex4 1.1
-rw-r--r-- | .SRCINFO | 31 | ||||
-rw-r--r-- | PKGBUILD | 55 | ||||
-rw-r--r-- | alex4.desktop | 10 | ||||
-rw-r--r-- | alex4.install | 9 | ||||
-rw-r--r-- | alex4.png | bin | 0 -> 283 bytes | |||
-rw-r--r-- | allegro-4.2.patch | 298 | ||||
-rw-r--r-- | unix-port.patch | 781 |
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 Binary files differnew file mode 100644 index 000000000000..0ced62e368b8 --- /dev/null +++ b/alex4.png 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 |