Import blues from aacda169
This commit is contained in:
parent
9d70ca5872
commit
b0274d5ce2
26
Makefile
26
Makefile
|
@ -15,17 +15,29 @@ SRCS := $(BB_SRCS) $(JA_SRCS) $(P2_SRCS)
|
||||||
OBJS := $(SRCS:.c=.o)
|
OBJS := $(SRCS:.c=.o)
|
||||||
DEPS := $(SRCS:.c=.d)
|
DEPS := $(SRCS:.c=.d)
|
||||||
|
|
||||||
CPPFLAGS += -Wall -Wpedantic -MMD $(SDL_CFLAGS) -I. -g
|
CPPFLAGS += -Wall -Wextra -Wno-unused-parameter -Wno-sign-compare -Wpedantic -MMD $(SDL_CFLAGS) -I. -g
|
||||||
|
|
||||||
all: blues bbja pre2
|
all: blues
|
||||||
|
|
||||||
blues: main.o sys_sdl2.o util.o $(BB_SRCS:.c=.o)
|
game_bb.o: CPPFLAGS += -fvisibility=hidden
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(SDL_LIBS) $(MODPLUG_LIBS)
|
|
||||||
|
|
||||||
bbja: main.o sys_sdl2.o util.o $(JA_SRCS:.c=.o)
|
game_bb.o: $(BB_SRCS:.c=.o)
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(SDL_LIBS) $(MODPLUG_LIBS)
|
ld -r -o $@ $^
|
||||||
|
objcopy --localize-hidden $@
|
||||||
|
|
||||||
pre2: main.o sys_sdl2.o util.o $(P2_SRCS:.c=.o)
|
game_ja.o: CPPFLAGS += -fvisibility=hidden
|
||||||
|
|
||||||
|
game_ja.o: $(JA_SRCS:.c=.o)
|
||||||
|
ld -r -o $@ $^
|
||||||
|
objcopy --localize-hidden $@
|
||||||
|
|
||||||
|
game_p2.o: CPPFLAGS += -fvisibility=hidden
|
||||||
|
|
||||||
|
game_p2.o: $(P2_SRCS:.c=.o)
|
||||||
|
ld -r -o $@ $^
|
||||||
|
objcopy --localize-hidden $@
|
||||||
|
|
||||||
|
blues: main.o sys_sdl2.o util.o game_bb.o game_ja.o game_p2.o
|
||||||
$(CC) $(LDFLAGS) -o $@ $^ $(SDL_LIBS) $(MODPLUG_LIBS)
|
$(CC) $(LDFLAGS) -o $@ $^ $(SDL_LIBS) $(MODPLUG_LIBS)
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
|
|
|
@ -63,7 +63,3 @@ Usage: blues [OPTIONS]...
|
||||||
--dosscroll Enable DOS style screen scrolling
|
--dosscroll Enable DOS style screen scrolling
|
||||||
--hybrid Enable fuchsia color as in Hybrid crack
|
--hybrid Enable fuchsia color as in Hybrid crack
|
||||||
```
|
```
|
||||||
|
|
||||||
## Downloads
|
|
||||||
|
|
||||||
[blues-sdl2-win32.zip](https://www.dropbox.com/s/rybnnn4s3rmicva/blues-gh-sdl2-win32.zip?dl=0) - Win32 executable
|
|
||||||
|
|
|
@ -359,7 +359,7 @@ static void game_run(const char *data_path) {
|
||||||
res_fini();
|
res_fini();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct game_t game = {
|
EXPORT_SYMBOL struct game_t game_bb = {
|
||||||
"Blues Brothers",
|
"Blues Brothers",
|
||||||
game_run
|
game_run
|
||||||
};
|
};
|
||||||
|
|
|
@ -315,10 +315,10 @@ void load_img(const char *filename, int screen_w, int dither_pattern) {
|
||||||
}
|
}
|
||||||
assert(size <= 32000);
|
assert(size <= 32000);
|
||||||
load_iff(g_res.tmp, size, g_res.vga, 320, dither_pattern);
|
load_iff(g_res.tmp, size, g_res.vga, 320, dither_pattern);
|
||||||
g_sys.copy_bitmap(g_res.vga, 320, 200);
|
|
||||||
if (dither_pattern < 0) {
|
if (dither_pattern < 0) {
|
||||||
g_sys.set_screen_palette(g_res.palette, 0, 16, 8);
|
g_sys.set_screen_palette(g_res.palette, 0, 16, 8);
|
||||||
}
|
}
|
||||||
|
g_sys.copy_bitmap(g_res.vga, 320, 200);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_m(const char *filename) {
|
void load_m(const char *filename) {
|
||||||
|
|
|
@ -151,7 +151,6 @@ void play_music(int num) {
|
||||||
memcpy(samples[i].name, &buf[offset], 22);
|
memcpy(samples[i].name, &buf[offset], 22);
|
||||||
samples[i].name[22] = 0;
|
samples[i].name[22] = 0;
|
||||||
samples[i].size = READ_BE_UINT16(&buf[offset + 22]) * 2;
|
samples[i].size = READ_BE_UINT16(&buf[offset + 22]) * 2;
|
||||||
string_lower(samples[i].name);
|
|
||||||
samples_size += samples[i].size;
|
samples_size += samples[i].size;
|
||||||
}
|
}
|
||||||
buf = (uint8_t *)realloc(buf, size + samples_size);
|
buf = (uint8_t *)realloc(buf, size + samples_size);
|
||||||
|
|
6
intern.h
6
intern.h
|
@ -66,4 +66,10 @@ struct game_t {
|
||||||
void (*run)(const char *data_path);
|
void (*run)(const char *data_path);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
#define EXPORT_SYMBOL __attribute__((dllexport))
|
||||||
|
#else
|
||||||
|
#define EXPORT_SYMBOL __attribute__((visibility("default")))
|
||||||
|
#endif
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -351,7 +351,7 @@ static void game_run(const char *data_path) {
|
||||||
res_fini();
|
res_fini();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct game_t game = {
|
EXPORT_SYMBOL struct game_t game_ja = {
|
||||||
"Blues Brothers : Jukebox Adventure",
|
"Blues Brothers : Jukebox Adventure",
|
||||||
game_run
|
game_run
|
||||||
};
|
};
|
||||||
|
|
23
main.c
23
main.c
|
@ -28,8 +28,27 @@ static const char *USAGE =
|
||||||
;
|
;
|
||||||
|
|
||||||
static struct game_t *detect_game(const char *data_path) {
|
static struct game_t *detect_game(const char *data_path) {
|
||||||
extern struct game_t game;
|
extern struct game_t game_bb;
|
||||||
return &game;
|
extern struct game_t game_ja;
|
||||||
|
extern struct game_t game_p2;
|
||||||
|
static struct {
|
||||||
|
struct game_t *game;
|
||||||
|
const char *filename;
|
||||||
|
uint16_t size;
|
||||||
|
} games[] = {
|
||||||
|
{ &game_bb, "AVTMAG.SQV", 3069 },
|
||||||
|
{ &game_ja, "JARDIN.EAT", 24876 },
|
||||||
|
{ &game_p2, "MOTIF.SQZ", 9396 },
|
||||||
|
{ 0, 0, 0 }
|
||||||
|
};
|
||||||
|
for (int i = 0; games[i].game; ++i) {
|
||||||
|
FILE *fp = fopen_nocase(data_path, games[i].filename);
|
||||||
|
if (fp) {
|
||||||
|
fclose(fp);
|
||||||
|
return games[i].game;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(PSP)
|
#if defined(PSP)
|
||||||
|
|
|
@ -363,7 +363,7 @@ static void game_run(const char *data_path) {
|
||||||
res_fini();
|
res_fini();
|
||||||
}
|
}
|
||||||
|
|
||||||
struct game_t game = {
|
EXPORT_SYMBOL struct game_t game_p2 = {
|
||||||
"Prehistorik 2",
|
"Prehistorik 2",
|
||||||
game_run
|
game_run
|
||||||
};
|
};
|
||||||
|
|
|
@ -175,7 +175,7 @@ struct vars_t {
|
||||||
uint8_t level_items_count_tbl[140]; /* bonuses and items collected in the level */
|
uint8_t level_items_count_tbl[140]; /* bonuses and items collected in the level */
|
||||||
uint8_t level_items_total_count;
|
uint8_t level_items_total_count;
|
||||||
uint8_t level_bonuses_count_tbl[80];
|
uint8_t level_bonuses_count_tbl[80];
|
||||||
uint8_t bonus_energy_counter;
|
int8_t bonus_energy_counter;
|
||||||
|
|
||||||
int16_t current_platform_dx, current_platform_dy;
|
int16_t current_platform_dx, current_platform_dy;
|
||||||
uint16_t decor_tile0_offset; /* decor tile below the player */
|
uint16_t decor_tile0_offset; /* decor tile below the player */
|
||||||
|
|
9
util.c
9
util.c
|
@ -7,7 +7,7 @@
|
||||||
|
|
||||||
int g_debug_mask = 0;
|
int g_debug_mask = 0;
|
||||||
|
|
||||||
void string_lower(char *p) {
|
static void string_lower(char *p) {
|
||||||
for (; *p; ++p) {
|
for (; *p; ++p) {
|
||||||
if (*p >= 'A' && *p <= 'Z') {
|
if (*p >= 'A' && *p <= 'Z') {
|
||||||
*p += 'a' - 'A';
|
*p += 'a' - 'A';
|
||||||
|
@ -15,7 +15,7 @@ void string_lower(char *p) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void string_upper(char *p) {
|
static void string_upper(char *p) {
|
||||||
for (; *p; ++p) {
|
for (; *p; ++p) {
|
||||||
if (*p >= 'a' && *p <= 'z') {
|
if (*p >= 'a' && *p <= 'z') {
|
||||||
*p += 'A' - 'a';
|
*p += 'A' - 'a';
|
||||||
|
@ -76,6 +76,11 @@ FILE *fopen_nocase(const char *path, const char *filename) {
|
||||||
char *p = buf + strlen(path) + 1;
|
char *p = buf + strlen(path) + 1;
|
||||||
string_upper(p);
|
string_upper(p);
|
||||||
fp = fopen(buf, "rb");
|
fp = fopen(buf, "rb");
|
||||||
|
if (!fp) {
|
||||||
|
char *p = buf + strlen(path) + 1;
|
||||||
|
string_lower(p);
|
||||||
|
fp = fopen(buf, "rb");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return fp;
|
return fp;
|
||||||
}
|
}
|
||||||
|
|
3
util.h
3
util.h
|
@ -14,9 +14,6 @@
|
||||||
|
|
||||||
extern int g_debug_mask;
|
extern int g_debug_mask;
|
||||||
|
|
||||||
extern void string_lower(char *p);
|
|
||||||
extern void string_upper(char *p);
|
|
||||||
|
|
||||||
extern void print_debug(int debug_channel, const char *msg, ...);
|
extern void print_debug(int debug_channel, const char *msg, ...);
|
||||||
extern void print_warning(const char *msg, ...);
|
extern void print_warning(const char *msg, ...);
|
||||||
extern void print_error(const char *msg, ...);
|
extern void print_error(const char *msg, ...);
|
||||||
|
|
Loading…
Reference in New Issue