svn commit: r417067 - in head/games: . alex4 alex4/files

Matthew Seaman matthew at FreeBSD.org
Sat Jun 18 14:49:54 UTC 2016


Author: matthew
Date: Sat Jun 18 14:49:52 2016
New Revision: 417067
URL: https://svnweb.freebsd.org/changeset/ports/417067

Log:
  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!
  
  WWW: http://allegator.sourceforge.net/
  
  PR:		208664
  Submitted by:	Nikolai Lifanov <lifanov at mail.lifanov.com>

Added:
  head/games/alex4/
  head/games/alex4/Makefile   (contents, props changed)
  head/games/alex4/distinfo   (contents, props changed)
  head/games/alex4/files/
  head/games/alex4/files/patch-Makefile   (contents, props changed)
  head/games/alex4/files/patch-main.c   (contents, props changed)
  head/games/alex4/files/patch-main.h   (contents, props changed)
  head/games/alex4/files/patch-map.c   (contents, props changed)
  head/games/alex4/files/patch-shooter.c   (contents, props changed)
  head/games/alex4/files/patch-shooter.h   (contents, props changed)
  head/games/alex4/files/patch-token.c   (contents, props changed)
  head/games/alex4/files/patch-unix.c   (contents, props changed)
  head/games/alex4/files/patch-unix.h   (contents, props changed)
  head/games/alex4/pkg-descr   (contents, props changed)
  head/games/alex4/pkg-plist   (contents, props changed)
Modified:
  head/games/Makefile

Modified: head/games/Makefile
==============================================================================
--- head/games/Makefile	Sat Jun 18 14:47:02 2016	(r417066)
+++ head/games/Makefile	Sat Jun 18 14:49:52 2016	(r417067)
@@ -32,6 +32,7 @@
     SUBDIR += alephone
     SUBDIR += alephone-data
     SUBDIR += alephone-scenarios
+    SUBDIR += alex4
     SUBDIR += alienblaster
     SUBDIR += alienwave
     SUBDIR += allacrost

Added: head/games/alex4/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/Makefile	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,41 @@
+# Created by: Nikolai Lifanov <lifanov at mail.lifanov.com>
+# $FreeBSD$
+
+PORTNAME=	alex4
+PORTVERSION=	1.1
+CATEGORIES=	games
+MASTER_SITES=	SF/allegator/Alex4/source%20and%20data/ \
+		SF/lifanov-ports-distfiles/games/${PORTNAME}/:icons
+DISTFILES=	alex4src_data.zip ${PORTNAME}.png:icons
+EXTRACT_ONLY=	alex4src_data.zip
+
+MAINTAINER=	lifanov at mail.lifanov.com
+COMMENT=	Classic platformer with Alex the Allegator
+
+LICENSE=	GPLv2
+LICENSE_FILE=	${WRKSRC}/license.txt
+
+BUILD_DEPENDS=	${LOCALBASE}/lib/libaldmb.a:audio/dumb-allegro
+LIB_DEPENDS=	liballeg.so:devel/allegro
+
+DESKTOP_ENTRIES="Alex the Allegator 4" "" "${PORTNAME}" \
+		"${PORTNAME}" "Game;ActionGame;" ""
+
+WRKSRC=		 ${WRKDIR}/alex4src/src
+
+MAKE_JOBS_UNSAFE=yes
+
+USES=	dos2unix gmake zip
+
+post-patch:
+	@${REINPLACE_CMD} \
+		-e 's,%%STAGEDIR%%,${STAGEDIR},g' \
+		-e 's,%%DATADIR%%,${DATADIR},g' \
+			${WRKSRC}/Makefile
+
+pre-install:
+	${STRIP_CMD} ${WRKSRC}/alex4
+	${INSTALL_DATA} ${_DISTDIR}${PORTNAME}.png \
+		${STAGEDIR}${PREFIX}/share/pixmaps
+
+.include <bsd.port.mk>

Added: head/games/alex4/distinfo
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/distinfo	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,4 @@
+SHA256 (alex4src_data.zip) = d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103
+SIZE (alex4src_data.zip) = 664561
+SHA256 (alex4.png) = 236a8d163ee8aa94073aa1ec969a85e887b3c70fefbcd03b1f41b93b09fa32c6
+SIZE (alex4.png) = 283

Added: head/games/alex4/files/patch-Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-Makefile	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,26 @@
+--- Makefile.orig	2016-06-14 16:25:53 UTC
++++ Makefile
+@@ -0,0 +1,23 @@
++CFLAGS += `allegro-config --cflags`
++LIBS = -laldmb -ldumb `allegro-config --libs` -lm
++DEFINES = -DDATADIR=\"/usr/local/share/alex4/\"
++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
++
++all: alex4
++
++alex4: $(OBJS)
++	$(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
++
++%.o: %.c
++	$(CC) $(CPPFLAGS) $(CFLAGS) $(DEFINES) -o $@ -c $<
++
++install: alex4
++	mkdir -p %%STAGEDIR%%$(LOCALBASE)/bin
++	mkdir -p %%STAGEDIR%%%%DATADIR%%
++	install -p -m 755 alex4 %%STAGEDIR%%$(LOCALBASE)/bin
++	install -p -m 644 ../data/*.dat %%STAGEDIR%%%%DATADIR%%
++
++clean:
++	rm -f $(OBJS) $(TARGET) *~

Added: head/games/alex4/files/patch-main.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-main.c	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,338 @@
+--- main.c.orig	2016-06-14 16:25:53 UTC
++++ 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 @@ PALETTE org_pal;
+ Tscroller hscroll;
+ Thisc *hisc_table;
+ Thisc *hisc_table_space;
+-char working_directory[1024];
+ 
+ // the map
+ Tmap *map = NULL;
+@@ -126,6 +126,7 @@ int menu_choice = 1;
+ int playing_original_game = 1;
+ int init_ok = 0;
+ 
++static FILE* log_fp = NULL;
+ 
+ 
+ // // // // // // // // // // // // // // // // // // // // // 
+@@ -154,20 +155,18 @@ char *get_init_string() {
+ // 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 @@ int init_game(const char *map_file) {
+ 	BITMAP *bmp;
+ 	int i;
+ 	int w, h;
++#ifdef __unix__   
++	char filename[512];
++	char *homedir = get_homedir();
++#endif 	
+ 
+ 	log2file("\nInit routines:");
+ 
+@@ -625,7 +628,13 @@ int init_game(const char *map_file) {
+ 	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 @@ int init_game(const char *map_file) {
+ 	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 @@ int init_game(const char *map_file) {
+ 		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 @@ int init_game(const char *map_file) {
+ 	// 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 @@ int init_game(const char *map_file) {
+ 
+ 	// 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 @@ int init_game(const char *map_file) {
+ 
+ 	// 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 @@ int init_game(const char *map_file) {
+ 		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 @@ int init_game(const char *map_file) {
+ 	// 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 @@ int init_game(const char *map_file) {
+ 			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 @@ int init_game(const char *map_file) {
+ 		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 @@ int init_game(const char *map_file) {
+ void uninit_game() {
+ 	int i;
+ 	PACKFILE *pf;
++#ifdef __unix__   
++	char filename[512];
++	char *homedir = get_homedir();
++#endif 	
+ 
+ 	log2file("\nExit routines:");
+ 
+@@ -989,14 +1031,26 @@ void uninit_game() {
+ 	// 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 @@ void show_cutscene(int level) {
+ 			// 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 @@ void show_scores(int space, Thisc *table
+ 	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 @@ void check_alex_with_enemies() {
+ 
+ // 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 @@ int do_main_menu() {
+ 			}
+ 			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 @@ int do_main_menu() {
+ 
+ 				// 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 @@ int do_main_menu() {
+ 
+ // 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 @@ int main(int argc, char **argv) {   
+ 	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 @@ int main(int argc, char **argv) {   
+ 	uninit_game();
+ 	allegro_exit();
+ 	log2file("\nDone...\n");
++	if (log_fp)
++		fclose(log_fp);
+ 
+ 	return 0;
+ } END_OF_MAIN(); 

Added: head/games/alex4/files/patch-main.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-main.h	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,11 @@
+--- main.h.orig	2016-06-14 13:49:42.882747000 -0400
++++ 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

Added: head/games/alex4/files/patch-map.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-map.c	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,137 @@
+--- map.c.orig	2016-06-14 16:25:53 UTC
++++ map.c
+@@ -24,6 +24,7 @@
+ #include <stdlib.h>
+ #include <stdio.h>
+ #include <string.h>
++#include <machine/endian.h>
+ #include "allegro.h"
+ #include "map.h"
+ #include "timer.h"
+@@ -64,7 +65,41 @@ Tmap *create_map(int w, int h) {
+ 
+ 	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 @@ Tmap *load_map(char *fname) {
+ 	}
+ 	
+ 	// 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 @@ Tmap *load_map(char *fname) {
+ // 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 @@ Tmap *load_map_from_memory(void *mem) {
+ 	}
+ 	
+ 	// 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 @@ int save_map(Tmap *m, char *fname) {
+ 	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 @@ int is_ground(Tmap *sm , int x, int y) {
+ 	}
+ 
+ 	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)

Added: head/games/alex4/files/patch-shooter.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-shooter.c	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,11 @@
+--- shooter.c.orig	2016-06-14 16:25:53 UTC
++++ shooter.c
+@@ -1372,7 +1372,7 @@ int s_init_shooter() {
+ 	// 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;

Added: head/games/alex4/files/patch-shooter.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-shooter.h	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,20 @@
+--- shooter.h.orig	2016-06-14 16:25:53 UTC
++++ shooter.h
+@@ -83,8 +83,8 @@ typedef struct {
+ 	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 @@ typedef struct {
+ int start_shooter(Tcontrol *c, int with_sound);
+ 
+ 
+-#endif
+\ No newline at end of file
++#endif

Added: head/games/alex4/files/patch-token.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-token.c	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,11 @@
+--- token.c.orig	2016-06-14 16:25:53 UTC
++++ token.c
+@@ -67,7 +67,7 @@ void insert_token(Ttoken *list, Ttoken *
+ 
+ // 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;

Added: head/games/alex4/files/patch-unix.c
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-unix.c	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,90 @@
+--- unix.c.orig	2016-06-14 16:25:53 UTC
++++ 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

Added: head/games/alex4/files/patch-unix.h
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/files/patch-unix.h	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,9 @@
+--- unix.h.orig	2016-06-14 16:25:53 UTC
++++ unix.h
+@@ -0,0 +1,6 @@
++#ifdef __unix__
++
++char *get_homedir();
++int check_and_create_dir(const char *name);
++
++#endif

Added: head/games/alex4/pkg-descr
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/pkg-descr	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,5 @@
+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! 
+
+WWW: http://allegator.sourceforge.net/

Added: head/games/alex4/pkg-plist
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/games/alex4/pkg-plist	Sat Jun 18 14:49:52 2016	(r417067)
@@ -0,0 +1,6 @@
+bin/alex4
+share/pixmaps/alex4.png
+%%DATADIR%%/a45.dat
+%%DATADIR%%/data.dat
+%%DATADIR%%/maps.dat
+%%DATADIR%%/sfx_22.dat


More information about the svn-ports-head mailing list