diff options
author | Carsten Teibes | 2017-11-01 01:40:59 +0100 |
---|---|---|
committer | Carsten Teibes | 2017-11-01 01:40:59 +0100 |
commit | 64132722ac9b1965822b04922be80f27611a7a07 (patch) | |
tree | 75a4e3796b3a7107b565b4fbf6df4d2b28414ac3 | |
parent | 08b34fb1a1842fecb4306e83064163f383acb90e (diff) | |
download | aur-64132722ac9b1965822b04922be80f27611a7a07.tar.gz |
[upd] 1.1→1.2.alpha
-rw-r--r-- | .SRCINFO | 17 | ||||
-rw-r--r-- | PKGBUILD | 39 | ||||
-rw-r--r-- | alex4.desktop | 1 | ||||
-rw-r--r-- | allegro-4.2.patch | 298 | ||||
-rw-r--r-- | unix-port.patch | 781 |
5 files changed, 20 insertions, 1116 deletions
@@ -1,23 +1,20 @@ pkgbase = alex4 pkgdesc = Help Alex the Allegator rescue Lola before the humans make a pair of shoes out of her! - pkgver = 1.1 - pkgrel = 5 + pkgver = 1.2.alpha + pkgrel = 1 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 + depends = aldumb + depends = allegro4 + source = alex4-1.2.alpha.tar.gz::https://github.com/carstene1ns/alex4/archive/1.2-alpha.tar.gz source = alex4.png - source = unix-port.patch - source = allegro-4.2.patch source = alex4.desktop - sha256sums = d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103 + sha256sums = 0fe6e9341d52623503c87f778926c33e17f393059e8a572e779e1a15f678414a sha256sums = 236a8d163ee8aa94073aa1ec969a85e887b3c70fefbcd03b1f41b93b09fa32c6 - sha256sums = 5bb70ca82bcd0df0ed72eccada0c9ccb37a570d7c62ea8a076bdf2169a15c2e5 - sha256sums = ea3e6ffd558cbdb6c392d598499f0780de8c0e456da554531c5c975fe8688d28 - sha256sums = b7fc0854e9a07f08bd90f59aaf99011afc3c6c2a0ad0b244ec04694ce0ff19dd + sha256sums = 780063f3f8b72f9a4310a4929f9a3b3a229ada199a2175e04b65cd49ff1e2644 pkgname = alex4 @@ -2,45 +2,32 @@ # Contributor: megadriver <megadriver at gmx dot com> pkgname=alex4 -pkgver=1.1 -pkgrel=5 +pkgver=1.2.alpha +pkgrel=1 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') +depends=('aldumb' 'allegro4') install=$pkgname.install -source=("http://downloads.sourceforge.net/project/allegator/Alex4/source%20and%20data/alex4src_data.zip" +source=($pkgname-$pkgver.tar.gz::"https://github.com/carstene1ns/alex4/archive/${pkgver%.*}-alpha.tar.gz" "$pkgname.png" - "unix-port.patch" - "allegro-4.2.patch" "$pkgname.desktop") -sha256sums=('d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103' +sha256sums=('0fe6e9341d52623503c87f778926c33e17f393059e8a572e779e1a15f678414a' '236a8d163ee8aa94073aa1ec969a85e887b3c70fefbcd03b1f41b93b09fa32c6' - '5bb70ca82bcd0df0ed72eccada0c9ccb37a570d7c62ea8a076bdf2169a15c2e5' - 'ea3e6ffd558cbdb6c392d598499f0780de8c0e456da554531c5c975fe8688d28' - 'b7fc0854e9a07f08bd90f59aaf99011afc3c6c2a0ad0b244ec04694ce0ff19dd') - -prepare() { - cd alex4src - - # make compatible with modern environment - patch -Np1 < ../unix-port.patch - patch -Np1 < ../allegro-4.2.patch -} + '780063f3f8b72f9a4310a4929f9a3b3a229ada199a2175e04b65cd49ff1e2644') build() { - cd alex4src/src - - LDFLAGS=-lm make PREFIX=/usr + make -C $pkgname-${pkgver%.*}-alpha/src PREFIX=/usr } package() { - cd alex4src + cd $pkgname-${pkgver%.*}-alpha - make -C src PREFIX="$pkgdir/usr" install - install -Dm644 alex4.ini "$pkgdir"/usr/share/alex4/alex4.ini + make -C src PREFIX=/usr DESTDIR="$pkgdir/" install + # config + install -Dm0644 alex4.ini "$pkgdir"/usr/share/alex4/alex4.ini # desktop entry - install -Dm644 ../$pkgname.png "$pkgdir"/usr/share/pixmaps/$pkgname.png - install -Dm644 ../$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop + install -Dm0644 ../$pkgname.png "$pkgdir"/usr/share/pixmaps/$pkgname.png + install -Dm0644 ../$pkgname.desktop "$pkgdir"/usr/share/applications/$pkgname.desktop } diff --git a/alex4.desktop b/alex4.desktop index b4d13044be32..eedf2587d2da 100644 --- a/alex4.desktop +++ b/alex4.desktop @@ -1,6 +1,5 @@ [Desktop Entry] Type=Application -Version=1.0 Name=Alex the Allegator 4 Comment=Retro platform game Icon=alex4 diff --git a/allegro-4.2.patch b/allegro-4.2.patch deleted file mode 100644 index a5f869091ac1..000000000000 --- a/allegro-4.2.patch +++ /dev/null @@ -1,298 +0,0 @@ -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 deleted file mode 100644 index ed960b0b1f99..000000000000 --- a/unix-port.patch +++ /dev/null @@ -1,781 +0,0 @@ -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 |