Allegro 4.4.3 removed aliases for fsin, fcos, etc. They are also available as fixsin, fixcos, etc., so use them instead. PR: 235477
359 lines
10 KiB
C
359 lines
10 KiB
C
--- main.c.orig 2019-02-04 06:12:31 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);
|
|
@@ -1158,9 +1212,9 @@ void draw_custom_ending(BITMAP *bmp) {
|
|
|
|
blit(data[INTRO_BG].dat, bmp, 0, 0, 0, 0, 160, 120);
|
|
|
|
- r = 70 + fixtoi(20 * fcos(itofix(game_count >> 1)) + 20 * fsin(itofix((int)(game_count / 2.7))) );
|
|
+ r = 70 + fixtoi(20 * fixcos(itofix(game_count >> 1)) + 20 * fixsin(itofix((int)(game_count / 2.7))) );
|
|
for(i = 0; i < 256; i += 32)
|
|
- draw_sprite(bmp, head, 80 - head->w/2 + fixtoi(r * fcos(itofix(game_count + i))), 60 - head->h/2 + fixtoi(r * fsin(itofix(game_count + i))));
|
|
+ draw_sprite(bmp, head, 80 - head->w/2 + fixtoi(r * fixcos(itofix(game_count + i))), 60 - head->h/2 + fixtoi(r * fixsin(itofix(game_count + i))));
|
|
|
|
draw_sprite_h_flip(bmp, data[ALEX].dat, 60, 40);
|
|
draw_sprite(bmp, data[LOLA].dat, 84, 40);
|
|
@@ -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;
|
|
@@ -2485,7 +2539,7 @@ void draw_title(BITMAP *bmp, int tick) {
|
|
textout(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1);
|
|
textout(bmp, data[THE_FONT].dat, "QUIT", x, y, 4);
|
|
|
|
- draw_sprite(bmp, data[POINTER].dat, x - 25 + fixtoi(3 * fcos(itofix(tick << 2))), 44 + menu_choice * step);
|
|
+ draw_sprite(bmp, data[POINTER].dat, x - 25 + fixtoi(3 * fixcos(itofix(tick << 2))), 44 + menu_choice * step);
|
|
}
|
|
|
|
|
|
@@ -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();
|