diff --git a/alex4/Makefile b/alex4/Makefile new file mode 100644 index 0000000..6471af3 --- /dev/null +++ b/alex4/Makefile @@ -0,0 +1,91 @@ +# +# Copyright (C) 2011 David Kuehling +# +# OpenWRT package for Alex the Allegotor v4 -- a game using liballegro +# +# License GPLv2 or later. NO WARRANTY. + +include $(TOPDIR)/rules.mk + +PKG_NAME:=alex4 +PKG_VERSION:=4.0 +PKG_RELEASE:=1 +PKG_SOURCE:=alex4src_data.zip +PKG_SOURCE_URL:=@SF/allegator/Alex4/source%20and%20data/ +PKG_MD5SUM:=c81b8e3813300a0cfbe828bcdff60fda +PKG_BUILD_DIR:=$(BUILD_DIR)/alex4src + + +PKG_BUILD_DEPENDS := libdumb + +include $(INCLUDE_DIR)/package.mk + +define Package/alex4/Default + SECTION:=games + CATEGORY:=Games + URL:=http://alex.sf.net +endef + +define Package/alex4/Default/description +Alex the Allegotor is a series of games. Alex v4 is a jump&n run game. +endef + +define Package/alex4 +$(call Package/alex4/Default) + TITLE += (the game) + DEPENDS:=+liballegro +alex4-data +endef + +define Package/alex4/description +$(call Package/alex4/Default/description) +This package contains the executable files +endef + + +define Package/alex4-data +$(call Package/alex4/Default) + TITLE += (data) + DEPENDS:=+alex4 +endef + +define Package/alex4-data/description + $(call Package/alex4/Default/description) +This package contains the data files for Alex v4. +endef + +#TARGET_LDFLAGS += -Wl,-rpath-link -Wl,$(STAGING_DIR)/usr/lib +#TARGET_CPPFLAGS += + +TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib -laldmb -ldumb -lalleg + + + +define Build/Configure +endef + +define Build/Compile + cd $(PKG_BUILD_DIR)/src && \ + $(TARGET_CC) $(TARGET_CFLAGS) $(EXTRA_CFLAGS) $(TARGET_CPPFLAGS) *.c $(TARGET_LDFLAGS) -o alex4 +endef + +define Package/alex4/install + $(INSTALL_DIR) $(1)/usr/bin + $(INSTALL_DIR) $(1)/etc + $(CP) $(PKG_BUILD_DIR)/src/alex4 $(1)/usr/bin/ + $(CP) ./files/alex4.ini $(1)/etc/ +endef + + +define Package/alex4-data/install + $(INSTALL_DIR) $(1)/usr/share/alex4 + $(CP) $(PKG_BUILD_DIR)/data/*.dat $(1)/usr/share/alex4 +endef + +$(eval $(call BuildPackage,alex4)) +$(eval $(call BuildPackage,alex4-data)) + + +# The following comments configure the Emacs editor. Just ignore them. +# Local Variables: +# compile-command: "make -C ~/h/src/qi/openwrt-xburst package/alex4/compile -j2 V=99" +# End: diff --git a/alex4/files/alex4.ini b/alex4/files/alex4.ini new file mode 100644 index 0000000..284d39f --- /dev/null +++ b/alex4/files/alex4.ini @@ -0,0 +1,92 @@ +############################################################## +# +# Configuration file for Alex 4 (v1.1) +# +############################################################## +# +# If you lose control of the contents of this file +# and wants to restore to the defaults, you will have +# to reinstall the game. Conclusion: Handle with care! +# +############################################################## + +[graphics] +# controls the startup resolution +# Setting lower resolutions than 160x120 might result in +# weird undocumented side affects in the rendering. + +# start in full screen or not (1 = fullscreen, 0 = windowed) +fullscreen = 1 + +# fullscreen width and height (used if fullscreen = 1) +f_width = 320 +f_height = 240 + +# window width and height (used if fullscreen = 0) +w_width = 320 +w_height = 240 + +# turns vertical sync on or off (1 = on, 0 = off) +vsync = 0 + + +[sound] +# these options controls the sound and music + +# controls what sound and mixing device to use +# 0 = no sound whatsoever +# 1 = autodetect sound device +# 2 = use DirectSound device with direct mixing +# 3 = use DirectSound device with Allegro mixing +sound_device = 1 + +# controls the volume of the samples (0-255 (0 = no sound)) +sample_volume = 50 + +# controls the volume of the music (0-255 (0 = no music)) +music_volume = 120 + +# use the sound datafile or not (0 = no, 1 = yes) +use_sound_datafile = 1 + +# if use_sound_datafile is set to 0 +# this should point to where the +# sounds can be loaded from +sfx_path = sfx/22KHz + + + + + + + + + +############################################################## +# DUMB (mod control) +############################################################## +# You can edit this section to control the playback quality of +# the music in Alex 4. + +# dumb_resampling_quality can range from 0 (fastest) to 4 (best). + +# dumb_it_max_to_mix is the maximum number of samples DUMB will render at a +# time. + +# Increase buffer_size to combat stuttering. + +# The module will be rendered at a sampling frequency specified by sound_freq. +# This variable is also used by Allegro for initialising the sound hardware. + +# You can ignore the quality variable. Allegro uses it when relaying the audio +# stream to the sound card. 2 is the maximum, and is only comparable in quality +# to dumb_resampling_quality = 1. Only a masochist would reduce it. + +[dumb] +dumb_resampling_quality = 4 +dumb_it_max_to_mix = 256 +buffer_size = 4096 +sound_freq = 44100 + +quality = 2 + diff --git a/alex4/patches/010-alex4-unix.patch b/alex4/patches/010-alex4-unix.patch new file mode 100644 index 0000000..f04d1c9 --- /dev/null +++ b/alex4/patches/010-alex4-unix.patch @@ -0,0 +1,63 @@ +This is from alex4src_data.zip directory 'extras' +Index: alex4src/src/main.c +=================================================================== +--- alex4src.orig/src/main.c 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/main.c 2011-06-06 22:51:43.000000000 +0200 +@@ -840,6 +840,7 @@ + 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 +849,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; +Index: alex4src/src/main.h +=================================================================== +--- alex4src.orig/src/main.h 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/main.h 2011-06-06 22:51:43.000000000 +0200 +@@ -90,8 +90,7 @@ + + + // a little bounding box quickie +-#define check_bb_collision(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || \ +- ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) )) ++#define check_bb_collision(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) )) + + + #endif +\ No newline at end of file +Index: alex4src/src/shooter.c +=================================================================== +--- alex4src.orig/src/shooter.c 2003-07-26 12:53:52.000000000 +0200 ++++ alex4src/src/shooter.c 2011-06-06 22:51:43.000000000 +0200 +@@ -239,8 +239,7 @@ + + // PIXEL PERFECT COLLISION ROUTINES COURTESY OF IVAN BALDO'S PPCOL + +-#define pp_check_bb_collision_general(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || \ +- ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) )) ++#define pp_check_bb_collision_general(x1,y1,w1,h1,x2,y2,w2,h2) (!( ((x1)>=(x2)+(w2)) || ((x2)>=(x1)+(w1)) || ((y1)>=(y2)+(h2)) || ((y2)>=(y1)+(h1)) )) + #define pp_check_bb_collision(mask1,mask2,x1,y1,x2,y2) pp_check_bb_collision_general(x1,y1,mask1->w,mask1->h,x2,y2,mask2->w,mask2->h) + + int s_check_pp_collision(BITMAP *spr1, BITMAP *spr2, int x1, int y1, int x2, int y2) { diff --git a/alex4/patches/020-gfx-mode.patch b/alex4/patches/020-gfx-mode.patch new file mode 100644 index 0000000..9324245 --- /dev/null +++ b/alex4/patches/020-gfx-mode.patch @@ -0,0 +1,50 @@ +Index: alex4src/src/main.c +=================================================================== +--- alex4src.orig/src/main.c 2011-06-07 11:43:11.000000000 +0200 ++++ alex4src/src/main.c 2011-06-07 11:59:26.000000000 +0200 +@@ -62,6 +62,7 @@ + DATAFILE *maps = NULL; + DATAFILE *sfx_data = NULL; + BITMAP *swap_screen; ++BITMAP *colorconv_screen = 0; + PALETTE org_pal; + Tscroller hscroll; + Thisc *hisc_table; +@@ -484,9 +485,20 @@ + + // blits anything to screen + void blit_to_screen(BITMAP *bmp) { ++ if (!colorconv_screen || ++ colorconv_screen->w != bmp->w || colorconv_screen->h != bmp->h) ++ { ++ if (colorconv_screen) ++ destroy_bitmap(colorconv_screen); ++ ++ colorconv_screen = create_bitmap_ex(bitmap_color_depth(screen), ++ bmp->w, bmp->h); ++ } ++ blit (bmp, colorconv_screen, 0, 0, 0, 0, bmp->w, bmp->h); ++ + acquire_screen(); + if (options.use_vsync) vsync(); +- stretch_blit(bmp, screen, 0, 0, bmp->w, bmp->h, 0, 0, SCREEN_W, SCREEN_H); ++ stretch_blit(colorconv_screen, screen, 0, 0, bmp->w, bmp->h, 0, 0, SCREEN_W, SCREEN_H); + release_screen(); + } + +@@ -674,6 +686,7 @@ + + log2file(" entering gfx mode set in alex4.ini (%dx%d %s)", w, h, (get_config_int("graphics", "fullscreen", 0) ? "full" : "win")); + ++ set_color_depth(32); + if (set_gfx_mode( + (get_config_int("graphics", "fullscreen", 0) ? GFX_AUTODETECT_FULLSCREEN : GFX_AUTODETECT_WINDOWED), + w, h, 0, 0)) { +@@ -689,6 +702,7 @@ + } + } + } ++ set_color_depth(8); + + // show initial loading screen + clear(swap_screen); diff --git a/alex4/patches/030-files-n-paths.patch b/alex4/patches/030-files-n-paths.patch new file mode 100644 index 0000000..ad5404b --- /dev/null +++ b/alex4/patches/030-files-n-paths.patch @@ -0,0 +1,105 @@ +Index: alex4src/src/main.c +=================================================================== +--- alex4src.orig/src/main.c 2011-06-07 12:24:01.000000000 +0200 ++++ alex4src/src/main.c 2011-06-07 13:15:30.000000000 +0200 +@@ -157,7 +157,7 @@ + va_list ptr; /* get an arg pointer */ + FILE *fp; + +- fp = fopen("log.txt", "at"); ++ fp = fopen("/var/log/alex4.log", "at"); + if (fp) { + /* initialize ptr to point to the first argument after the format string */ + va_start(ptr, format); +@@ -637,7 +637,7 @@ + log2file(" initializing allegro"); + text_mode(-1); + garble_string(init_string, 53); +- set_config_file("alex4.ini"); ++ set_config_file("/etc/alex4.ini"); + set_window_close_button(FALSE); + + // install timers +@@ -732,7 +732,7 @@ + // load data + log2file(" loading data"); + packfile_password(init_string); +- data = load_datafile("data/data.dat"); ++ data = load_datafile("/usr/share/alex4/data.dat"); + packfile_password(NULL); + if (data == NULL) { + log2file(" *** failed"); +@@ -742,7 +742,7 @@ + + // load options + log2file(" loading options"); +- pf = pack_fopen("alex4.sav", "rp"); ++ pf = pack_fopen("/var/lib/alex4.sav", "rp"); + if (pf) { + load_options(&options, pf); + pack_fclose(pf); +@@ -754,7 +754,7 @@ + + // loading highscores + log2file(" loading hiscores"); +- pf = pack_fopen("alex4.hi", "rp"); ++ pf = pack_fopen("/var/lib/alex4.hi", "rp"); + if (pf) { + load_hisc_table(hisc_table, pf); + load_hisc_table(hisc_table_space, pf); +@@ -790,7 +790,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("/usr/share/alex4/maps.dat", count_maps_callback); + packfile_password(NULL); + if (maps == NULL) { + log2file(" *** failed"); +@@ -899,9 +899,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("/usr/share/alex4/sfx_44.dat"); + if (sfx_data == NULL) { +- sfx_data = load_datafile("data/sfx_22.dat"); ++ sfx_data = load_datafile("/usr/share/alex4/sfx_22.dat"); + log2file(" sfx_44.dat not found"); + s = 0; + } +@@ -1018,14 +1018,14 @@ + // only save if everything was inited ok! + if (init_ok) { + log2file(" saving options"); +- pf = pack_fopen("alex4.sav", "wp"); ++ pf = pack_fopen("/var/lib/alex4.sav", "wp"); + if (pf) { + save_options(&options, pf); + pack_fclose(pf); + } + + log2file(" saving highscores"); +- pf = pack_fopen("alex4.hi", "wp"); ++ pf = pack_fopen("/var/lib/alex4.hi", "wp"); + if (pf) { + save_hisc_table(hisc_table, pf); + save_hisc_table(hisc_table_space, pf); +@@ -1372,7 +1372,7 @@ + if (space) { + // get space bg + packfile_password(init_string); +- df = load_datafile_object("data/a45.dat", "BG1"); ++ df = load_datafile_object("/usr/share/alex4/a45.dat", "BG1"); + packfile_password(NULL); + if (df != NULL) { + bg = df->dat; +@@ -3008,7 +3008,7 @@ + // get working directory + get_executable_name(full_path, 1024); + replace_filename(working_directory, full_path, "", 1024); +- chdir(working_directory); ++ /* chdir(working_directory); */ + + + // start logfile