diff --git a/.cvsignore b/.cvsignore index e69de29..b313cf7 100644 --- a/.cvsignore +++ b/.cvsignore @@ -0,0 +1 @@ +alex4src_data.zip diff --git a/alex4-unix.patch b/alex4-unix.patch new file mode 100644 index 0000000..0de8031 --- /dev/null +++ b/alex4-unix.patch @@ -0,0 +1,790 @@ +--- alex4src/src/main.c.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/main.c 2006-11-03 13:26:37.000000000 +0100 +@@ -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 +@@ -663,7 +672,7 @@ + + + // init gfx +- if (get_config_int("graphics", "fullscreen", 0)) { ++ if (get_config_int("graphics", "fullscreen", 1)) { + w = get_config_int("graphics", "f_width", 640); + h = get_config_int("graphics", "f_height", 480); + } +@@ -672,10 +681,10 @@ + h = get_config_int("graphics", "w_height", 480); + } + +- log2file(" entering gfx mode set in alex4.ini (%dx%d %s)", w, h, (get_config_int("graphics", "fullscreen", 0) ? "full" : "win")); ++ log2file(" entering gfx mode set in alex4.ini (%dx%d %s)", w, h, (get_config_int("graphics", "fullscreen", 1) ? "full" : "win")); + + if (set_gfx_mode( +- (get_config_int("graphics", "fullscreen", 0) ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED), ++ (get_config_int("graphics", "fullscreen", 1) ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED), + w, h, 0, 0)) { + log2file(" *** failed"); + log2file(" entering gfx mode (640x480 windowed)"); +@@ -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(); +--- alex4src/src/player.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/player.h 2006-11-03 13:26:37.000000000 +0100 +@@ -60,4 +60,4 @@ + void wound_player(Tplayer *p); + void kill_player(Tplayer *p); + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/map.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/map.h 2006-11-03 13:26:37.000000000 +0100 +@@ -111,4 +111,4 @@ + + + +-#endif +\ No newline at end of file ++#endif +--- /dev/null 2006-11-03 08:26:09.036129000 +0100 ++++ alex4src/src/unix.c 2006-11-03 13:26:37.000000000 +0100 +@@ -0,0 +1,82 @@ ++#ifdef __unix__ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if defined(__DECC) && defined(VMS) ++#include ++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; ++ ++ if (!(pw = getpwuid(getuid()))) ++ { ++ fprintf(stderr, "Who are you? Not found in passwd database!!\n"); ++ return getenv("HOME"); ++ } ++ ++#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 2006-11-03 08:26:09.036129000 +0100 ++++ alex4src/src/Makefile 2006-11-03 13:26:37.000000000 +0100 +@@ -0,0 +1,24 @@ ++PREFIX = /usr/local ++DATADIR = $(PREFIX)/share/$(TARGET) ++CFLAGS = -g -Wall -Wno-deprecated-declarations -O2 ++LDFLAGS = `allegro-config --libs` -laldmb -ldumb ++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 $@ $^ ++ ++%.o: %.c ++ $(CC) $(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) *~ +--- alex4src/src/token.h.unix 2003-07-26 12:53:54.000000000 +0200 ++++ alex4src/src/token.h 2006-11-03 13:26:37.000000000 +0100 +@@ -41,4 +41,4 @@ + Ttoken *tokenize(char *str); + + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/shooter.c.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/shooter.c 2006-11-03 13:26:37.000000000 +0100 +@@ -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; +--- alex4src/src/particle.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/particle.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 2006-11-03 08:26:09.036129000 +0100 ++++ alex4src/src/unix.h 2006-11-03 13:26:37.000000000 +0100 +@@ -0,0 +1,6 @@ ++#ifdef __unix__ ++ ++char *get_homedir(); ++int check_and_create_dir(const char *name); ++ ++#endif +--- alex4src/src/scroller.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/scroller.h 2006-11-03 13:26:37.000000000 +0100 +@@ -51,4 +51,4 @@ + + + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/map.c.unix 2003-07-28 18:50:36.000000000 +0200 ++++ alex4src/src/map.c 2006-11-03 14:17:51.000000000 +0100 +@@ -24,6 +24,7 @@ + #include + #include + #include ++#include + #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) +--- alex4src/src/shooter.h.unix 2003-07-26 12:53:54.000000000 +0200 ++++ alex4src/src/shooter.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 +--- alex4src/src/timer.h.unix 2003-07-26 12:53:54.000000000 +0200 ++++ alex4src/src/timer.h 2006-11-03 13:26:37.000000000 +0100 +@@ -37,4 +37,4 @@ + void fps_counter(void); + void cycle_counter(void); + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/main.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/main.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 +--- alex4src/src/script.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/script.h 2006-11-03 13:26:37.000000000 +0100 +@@ -51,4 +51,4 @@ + + + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/edit.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/edit.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 +--- alex4src/src/token.c.unix 2003-07-26 18:50:40.000000000 +0200 ++++ alex4src/src/token.c 2006-11-03 13:26:37.000000000 +0100 +@@ -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; +--- alex4src/src/hisc.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/hisc.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 +--- alex4src/src/options.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/options.h 2006-11-03 13:26:37.000000000 +0100 +@@ -43,4 +43,4 @@ + void load_options(Toptions *o, PACKFILE *fp); + void reset_options(Toptions *o); + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/timer.c.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/timer.c 2006-11-03 13:26:37.000000000 +0100 +@@ -60,4 +60,4 @@ + game_count ++; + + return TRUE; +-} +\ No newline at end of file ++} +--- alex4src/src/actor.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/actor.h 2006-11-03 13:26:37.000000000 +0100 +@@ -91,4 +91,4 @@ + void kill_actor(Tactor *a); + + +-#endif +\ No newline at end of file ++#endif +--- alex4src/src/bullet.h.unix 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/bullet.h 2006-11-03 13:26:37.000000000 +0100 +@@ -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 diff --git a/alex4.desktop b/alex4.desktop new file mode 100644 index 0000000..955ac77 --- /dev/null +++ b/alex4.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Encoding=UTF-8 +Name=Alex the Allegator 4 +Comment=Old school platform game +Exec=alex4 +Icon=alex4.png +Terminal=false +StartupNotify=false +Type=Application +Categories=Application;Game;ArcadeGame; diff --git a/alex4.png b/alex4.png new file mode 100644 index 0000000..2c8807a Binary files /dev/null and b/alex4.png differ diff --git a/alex4.spec b/alex4.spec new file mode 100644 index 0000000..140f1b0 --- /dev/null +++ b/alex4.spec @@ -0,0 +1,84 @@ +Name: alex4 +Version: 1.0 +Release: 2%{?dist} +Summary: Alex the Allegator 4 - Platform game +Group: Amusements/Games +License: GPL +URL: http://allegator.sourceforge.net/ +Source0: http://dl.sf.net/sourceforge/allegator/alex4src_data.zip +Source1: alex4.desktop +Source2: alex4.png +Patch0: alex4-unix.patch +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) +BuildRequires: allegro-devel dumb-devel desktop-file-utils ImageMagick +Requires: hicolor-icon-theme + +%description +In the latest installment of the series Alex travels through the jungle in +search of his kidnapped girlfriend. Plenty of classic platforming in four +nice colors guaranteed! + + +%prep +%setup -q -n alex4src +%patch0 -p1 -z .unix +sed -i 's/\r//' *.txt + + +%build +pushd src +make %{?_smp_mflags} PREFIX=%{_prefix} \ + CFLAGS="$RPM_OPT_FLAGS -Wno-deprecated-declarations" +popd + + +%install +rm -rf $RPM_BUILD_ROOT +pushd src +make install PREFIX=$RPM_BUILD_ROOT%{_prefix} +popd + +# below is the desktop file and icon stuff. +mkdir -p $RPM_BUILD_ROOT%{_datadir}/applications +desktop-file-install --vendor fedora \ + --dir $RPM_BUILD_ROOT%{_datadir}/applications \ + --add-category X-Fedora \ + %{SOURCE1} +mkdir -p $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps +install -p -m 644 %{SOURCE2} \ + $RPM_BUILD_ROOT%{_datadir}/icons/hicolor/32x32/apps + + +%clean +rm -rf $RPM_BUILD_ROOT + + +%post +touch --no-create %{_datadir}/icons/hicolor || : +if [ -x %{_bindir}/gtk-update-icon-cache ]; then + %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : +fi + +%postun +touch --no-create %{_datadir}/icons/hicolor || : +if [ -x %{_bindir}/gtk-update-icon-cache ]; then + %{_bindir}/gtk-update-icon-cache --quiet %{_datadir}/icons/hicolor || : +fi + + +%files +%defattr(-,root,root,-) +%doc license.txt readme.txt +%{_bindir}/%{name} +%{_datadir}/%{name} +%{_datadir}/applications/fedora-%{name}.desktop +%{_datadir}/icons/hicolor/32x32/apps/%{name}.png + + +%changelog +* Fri Nov 3 2006 Hans de Goede 1.0-2 +- Updated alex4-unix.patch to take big endian machines into account when + loading maps + +* Thu Nov 2 2006 Hans de Goede 1.0-1 +- Initial Fedora Extras package diff --git a/sources b/sources index e69de29..dd7aba7 100644 --- a/sources +++ b/sources @@ -0,0 +1 @@ +c81b8e3813300a0cfbe828bcdff60fda alex4src_data.zip