diff --git a/games-arcade/alex4/alex4-1.0.recipe b/games-arcade/alex4/alex4-1.0.recipe index 74b178c95..58ce28f3f 100644 --- a/games-arcade/alex4/alex4-1.0.recipe +++ b/games-arcade/alex4/alex4-1.0.recipe @@ -5,14 +5,15 @@ Lola from evil humans who want to make a bag of her." HOMEPAGE="https://sourceforge.net/projects/allegator/files/Alex4/" COPYRIGHT="2003 Johan Peitz" LICENSE="GNU GPL v2" -REVISION="2" +REVISION="3" SOURCE_URI="http://downloads.sourceforge.net/allegator/alex4src_data.zip" CHECKSUM_SHA256="d266d7fba64fbfedf13240d3d0eb21b8bacbedeaa5f22b26a27d472c8d23f103" SOURCE_URI_2="http://downloads.sourceforge.net/allegator/alex4_beos_src.zip" CHECKSUM_SHA256_2="b5333034638c19643a7bd8f6e54033b10b354bbcd4e8771b4ac7cd4a33c9e7cf" SOURCE_DIR="alex4src" SOURCE_DIR_2="alex4_BeOS_src" -PATCHES_2="alex4-$portVersion.patch" +PATCHES="alex4-$portVersion.patchset" +PATCHES_2="alex4-$portVersion-source2.patchset" # TODO: Check if it would be OK to also import the patches in: # http://data.gpo.zugaina.org/gamerlay/games-arcade/alex4/files/ # and sync with alex4-1.1 in http://gpo.zugaina.org/games-arcade/alex4 @@ -42,15 +43,10 @@ BUILD_PREREQUIRES=" cmd:patch " -PATCH() -{ - patch -p6 -u -i $sourceDir2/alex4_BeOS.diff -} - BUILD() { cp $sourceDir2/Makefile src - cp $sourceDir2/alex4.rsrc . + cp $sourceDir2/alex4.rsrc src make -C src $jobArgs } diff --git a/games-arcade/alex4/patches/alex4-1.0.patch b/games-arcade/alex4/patches/alex4-1.0-source2.patchset similarity index 51% rename from games-arcade/alex4/patches/alex4-1.0.patch rename to games-arcade/alex4/patches/alex4-1.0-source2.patchset index c314c9317..d04751b16 100644 --- a/games-arcade/alex4/patches/alex4-1.0.patch +++ b/games-arcade/alex4/patches/alex4-1.0-source2.patchset @@ -1,6 +1,14 @@ ---- alex4_BeOS_src/Makefile.orig 2003-08-07 22:25:19.000000000 +0000 -+++ alex4_BeOS_src/Makefile -@@ -1,11 +1,11 @@ +From aa5038994a06c9c957e1e9a86c8986b3faf8c74c Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Sun, 12 May 2019 15:15:15 +0200 +Subject: link against libaldmb.so + + +diff --git a/Makefile b/Makefile +index d10a6e5..6c802bc 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,6 +1,6 @@ CC=g++ CFLAGS=-c -O1 -c `allegro-config --cflags` -LDFLAGS=`allegro-config --libs` -ldumb @@ -8,9 +16,6 @@ SOURCES=actor.c edit.c map.c player.c shooter.c bullet.c hisc.c options.c script.c timer.c control.c main.c particle.c scroller.c token.c OBJECTS :=$(SOURCES:%.c=%.o) all: clean compile - strip --strip-all alex4 -- xres -o alex4 alex4.rsrc -+ xres -o alex4 ../alex4.rsrc - mimeset -f alex4 - mv alex4 ../alex4 - +-- +2.21.0 + diff --git a/games-arcade/alex4/patches/alex4-1.0.patchset b/games-arcade/alex4/patches/alex4-1.0.patchset new file mode 100644 index 000000000..6be4fc5f6 --- /dev/null +++ b/games-arcade/alex4/patches/alex4-1.0.patchset @@ -0,0 +1,1636 @@ +From 9fdd88ae4724145d90c8ac5ba82a519a6c9e0d71 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Sun, 12 May 2019 13:04:42 +0200 +Subject: Patch from + http://downloads.sourceforge.net/allegator/alex4_beos_src.zip + + +diff --git a/src/actor.c b/src/actor.c +index c6348c2..e9d31f8 100644 +--- a/src/actor.c ++++ b/src/actor.c +@@ -43,23 +43,23 @@ void draw_actor(BITMAP *bmp, Tactor *a, int x, int y) { + if (a->status == AC_NORM) { + // normal drawing, just select direction + if (a->direction) +- draw_sprite_h_flip(bmp, a->data[a->frames[a->frame] + (a->is_hit ? a->hit_offset : 0)].dat, x, y - a->h - a->oy); ++ draw_sprite_h_flip(bmp, (BITMAP*)a->data[a->frames[a->frame] + (a->is_hit ? a->hit_offset : 0)].dat, x, y - a->h - a->oy); + else +- draw_sprite(bmp, a->data[a->frames[a->frame] + (a->is_hit ? a->hit_offset : 0)].dat, x, y - a->h - a->oy); ++ draw_sprite(bmp, (BITMAP*)a->data[a->frames[a->frame] + (a->is_hit ? a->hit_offset : 0)].dat, x, y - a->h - a->oy); + } + else if (a->status == AC_DEAD) { + // draw dead frame, check for direction + if (a->direction) +- draw_sprite_vh_flip(bmp, a->data[a->frames[a->frame]].dat, x, y - a->h - a->oy); ++ draw_sprite_vh_flip(bmp, (BITMAP*)a->data[a->frames[a->frame]].dat, x, y - a->h - a->oy); + else +- draw_sprite_v_flip(bmp, a->data[a->frames[a->frame]].dat, x, y - a->h - a->oy); ++ draw_sprite_v_flip(bmp, (BITMAP*)a->data[a->frames[a->frame]].dat, x, y - a->h - a->oy); + } + else if (a->status == AC_FLAT) { + // draw flat frame, check for direction + if (a->direction) +- draw_sprite_h_flip(bmp, a->data[a->flat_frame].dat, x, y - a->h - a->oy); ++ draw_sprite_h_flip(bmp, (BITMAP*)a->data[a->flat_frame].dat, x, y - a->h - a->oy); + else +- draw_sprite(bmp, a->data[a->flat_frame].dat, x, y - a->h - a->oy); ++ draw_sprite(bmp, (BITMAP*)a->data[a->flat_frame].dat, x, y - a->h - a->oy); + } + } + +@@ -271,7 +271,7 @@ void update_actor_with_map(Tactor *a, Tmap *m) { + Tbullet *b = get_free_bullet(bullet, MAX_BULLETS); + if (b != NULL) { + int diff = (player.actor->x + 8) - (a->x + 8); +- set_bullet(b, a->x + (diff > 0 ? 8 : -12), a->y - 16, (diff > 0 ? 3 : -3), 0, data[ENEMY6].dat, 1); ++ set_bullet(b, a->x + (diff > 0 ? 8 : -12), a->y - 16, (diff > 0 ? 3 : -3), 0, (BITMAP*)data[ENEMY6].dat, 1); + create_burst(particle, a->x + (diff > 0 ? 18 : -2), a->y - 8, 8, 8, 25, PARTICLE_DUST); + a->mode = 0; + play_sound_id(SMPL_SHOOT); +@@ -422,9 +422,9 @@ void update_actor_with_map(Tactor *a, Tmap *m) { + for(i = 0; i < 3; i ++) { + b = get_free_bullet(bullet, MAX_BULLETS); + if (b != NULL) { +- set_bullet(b, a->x + 16, a->y - 32, rand()%5 - 2, -(rand()%5 + 2), data[BULLET_1].dat, 1); ++ set_bullet(b, a->x + 16, a->y - 32, rand()%5 - 2, -(rand()%5 + 2), (BITMAP*)data[BULLET_1].dat, 1); + b->animate = b->gravity = 1; +- b->bmp2 = data[BULLET_2].dat; ++ b->bmp2 = (BITMAP*)data[BULLET_2].dat; + } + } + a->mode ++; +diff --git a/src/actor.h b/src/actor.h +index 5ab9458..8e14fff 100644 +--- a/src/actor.h ++++ b/src/actor.h +@@ -91,4 +91,4 @@ void update_actor_with_map(Tactor *a, Tmap *m); + void kill_actor(Tactor *a); + + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/bullet.c b/src/bullet.c +index d389a51..4d65906 100644 +--- a/src/bullet.c ++++ b/src/bullet.c +@@ -26,6 +26,8 @@ + #include "timer.h" + #include "../data/data.h" + ++// the bullets themselves ++Tbullet bullet[MAX_BULLETS]; + + // sets values on a bullet + void set_bullet(Tbullet *b, int x, int y, double dx, double dy, BITMAP *bmp, int bad) { +@@ -44,8 +46,8 @@ void set_bullet(Tbullet *b, int x, int y, double dx, double dy, BITMAP *bmp, int + // draws the bukllet on specified bitmap + // pass along the map offset to get it right + void draw_bullet(BITMAP *bmp, Tbullet *b, int ox, int oy) { +- int x = b->x - ox; +- int y = b->y - oy; ++ int x = (int)(b->x - ox); ++ int y = (int)(b->y - oy); + + // is the bullet inside the screen + if (x < -b->bmp->w || x > bmp->w + b->bmp->w || y < -b->bmp->h || y > bmp->h + b->bmp->h) return; +diff --git a/src/bullet.h b/src/bullet.h +index c5d1ead..53bcbc6 100644 +--- a/src/bullet.h ++++ b/src/bullet.h +@@ -27,7 +27,7 @@ + #include "particle.h" + + // the bullet struct +-typedef struct { ++typedef struct Tbullet { + double x, y; + double dx, dy; + int exist; +@@ -36,13 +36,13 @@ typedef struct { + int bad; + int animate; + int gravity; +-} Tbullet; ++}; + + // max bullets at any time + #define MAX_BULLETS 64 + + // the bullets themselves +-Tbullet bullet[MAX_BULLETS]; ++extern Tbullet bullet[MAX_BULLETS]; + + // functions + void reset_bullets(Tbullet *b, int max); +@@ -52,4 +52,4 @@ void draw_bullet(BITMAP *bmp, Tbullet *b, int ox, int oy); + 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/src/edit.c b/src/edit.c +index c87fa03..8c66cb5 100644 +--- a/src/edit.c ++++ b/src/edit.c +@@ -33,8 +33,7 @@ + int edit_tile = 0; + // path to current map + char edit_path_and_file[1024]; +-// datafile to use +-DATAFILE *data; ++ + // current edit mode + int edit_mode; + +@@ -64,28 +63,28 @@ void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my) { + + // blit mouse tile + if (tx < map->width && ty < map->height) { +- if (edit_tile) draw_sprite(bmp, data[TILE000 + edit_tile - 1].dat, (tx << 4) - map->offset_x, ty << 4); ++ if (edit_tile) draw_sprite(bmp, (BITMAP*)data[TILE000 + edit_tile - 1].dat, (tx << 4) - map->offset_x, ty << 4); + rect(bmp, (tx << 4) - map->offset_x - 1, (ty << 4) - 1, (tx << 4)+16 - map->offset_x, (ty << 4)+16, gui_bg_color); + } +- ++ + // show stuff +- textprintf(bmp, data[THE_FONT].dat, 1, 1, 0, "TILE: %d,%d", tx, ty); +- textprintf(bmp, data[THE_FONT].dat, 1, 11, 0, "SIZE: %d,%d", map->width, map->height); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, 1, 0, "TILE: %d,%d", tx, ty); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, 11, 0, "SIZE: %d,%d", map->width, map->height); + + // show start pos + x = (ABS(map->start_x) << 4) - map->offset_x; + y = (map->start_y << 4) - map->offset_y; + rect(bmp, x+5, y+5, x+10, y+10, gui_bg_color); + line(bmp, x+8, y+8, x+8+SGN(map->start_x)*6, y+8, gui_bg_color); +- ++ + // draw status bar + rectfill(bmp, 0, 110, 159, 119, 1); +- textprintf(bmp, data[THE_FONT].dat, 1, 111, 4, "EDITING: %s", get_filename(edit_path_and_file)); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, 111, 4, "EDITING: %s", get_filename(edit_path_and_file)); + } + else if (edit_mode == EDIT_MODE_SELECT) { // draw tile palette + // calculate offset depending on mouse pointer +- int ox = (32.0 * mx) / 160.0; +- int oy = ( 8.0 * my) / 120.0; ++ int ox = (int)((32.0 * mx) / 160.0); ++ int oy = (int)((8.0 * my) / 120.0); + int tx = (mx + ox) / 16; + int ty = (my + oy) / 16; + +@@ -93,7 +92,7 @@ void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my) { + clear_to_color(bmp, gui_bg_color); + for(y = 0; y < 8; y ++) { + for(x = 0; x < 12; x ++) { +- draw_sprite(bmp, data[TILE000 + x + y * 12].dat, x * 16 - ox, y * 16 - oy); ++ draw_sprite(bmp, (BITMAP*)data[TILE000 + x + y * 12].dat, x * 16 - ox, y * 16 - oy); + } + } + +@@ -104,16 +103,16 @@ void draw_edit_mode(BITMAP *bmp, Tmap *map, int mx, int my) { + else if (edit_mode == EDIT_MODE_STATS) { // draw map properties + int ty = 16; + clear_to_color(bmp, 3); +- textprintf(bmp, data[THE_FONT].dat, 1, 1, 1, "%s (props)", get_filename(edit_path_and_file)); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, 1, 1, "%s (props)", get_filename(edit_path_and_file)); + line(bmp, 0, 10, 159, 10, 1); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "Win by:"); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " ")); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " ")); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " ")); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "4) Boss level: (%s)", (map->boss_level ? "X" : " ")); +- textprintf(bmp, data[THE_FONT].dat, 1, ty+=10, 1, "5) Name: %s", map->name); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, "Win by:"); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, " 1) reach exit (%s)", (map->win_conditions & MAP_WIN_EXIT ? "X" : " ")); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, " 2) kill boss (%s)", (map->win_conditions & MAP_WIN_KILL_GUARDIAN ? "X" : " ")); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, " 3) kill all (%s)", (map->win_conditions & MAP_WIN_KILL_ALL ? "X" : " ")); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, "4) Boss level: (%s)", (map->boss_level ? "X" : " ")); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, ty+=10, 1, "5) Name: %s", map->name); + +- textprintf(bmp, data[THE_FONT].dat, 1, 110, 1, "F1: back to editor"); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 1, 110, 1, "F1: back to editor"); + } + + if (edit_mode != EDIT_MODE_STATS) { +@@ -342,8 +341,8 @@ void update_edit_mode(Tmap *map, BITMAP *bmp, int mx, int my, int mb) { + + } + else if (edit_mode == EDIT_MODE_SELECT) { +- int ox = (32.0 * mx) / 160.0; +- int oy = ( 8.0 * my) / 120.0; ++ int ox = (int)((32.0 * mx) / 160.0); ++ int oy = (int)((8.0 * my) / 120.0); + int tx = (mx + ox) / 16; + int ty = (my + oy) / 16; + +@@ -364,7 +363,7 @@ void update_edit_mode(Tmap *map, BITMAP *bmp, int mx, int my, int mb) { + if (kb == '3') map->win_conditions ^= MAP_WIN_KILL_ALL; + + if (kb == '4') map->boss_level ^= 1; +- if (kb == '5') get_string(bmp, map->name, 32, data[THE_FONT].dat, 8, 90, gui_fg_color, NULL); ++ if (kb == '5') get_string(bmp, map->name, 32, (FONT*)data[THE_FONT].dat, 8, 90, gui_fg_color, NULL); + } + + if (key[KEY_F1]) { +diff --git a/src/edit.h b/src/edit.h +index 7bbcacf..c9d739e 100644 +--- a/src/edit.h ++++ b/src/edit.h +@@ -37,4 +37,4 @@ void set_edit_path_and_file(char *str); + 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 +diff --git a/src/hisc.c b/src/hisc.c +index b8a4452..cef0aca 100644 +--- a/src/hisc.c ++++ b/src/hisc.c +@@ -28,7 +28,7 @@ + Thisc* make_hisc_table() { + Thisc *tmp; + +- tmp = malloc(MAX_SCORES*sizeof(Thisc)); ++ tmp = (Thisc*)malloc(MAX_SCORES*sizeof(Thisc)); + if (!tmp) return NULL; + + return tmp; +diff --git a/src/hisc.h b/src/hisc.h +index c4e9c07..962f4ed 100644 +--- a/src/hisc.h ++++ b/src/hisc.h +@@ -48,4 +48,4 @@ void save_hisc_table(Thisc *table, PACKFILE *fp); + 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 +diff --git a/src/main.c b/src/main.c +index 8c29ccc..cec8bc6 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -132,12 +132,12 @@ int init_ok = 0; + + // returns pointer to the game over bitmap + BITMAP *get_gameover_sign() { +- return data[GAME_OVER].dat; ++ return (BITMAP*)data[GAME_OVER].dat; + } + + // returns pointer to the lets go bitmap + BITMAP *get_letsgo_sign() { +- return data[LETSGO].dat; ++ return (BITMAP*)data[LETSGO].dat; + } + + // returns pointer to the space highscore table +@@ -225,7 +225,7 @@ void play_sound_id(int id) { + // plays a sample using user settings + void play_sound_ex(SAMPLE *s, int vol, int freq, int loop) { + if (got_sound && s != NULL) { +- int v = (get_config_int("sound", "sample_volume", 100) * (float)(vol))/100.0; ++ int v = (int)((get_config_int("sound", "sample_volume", 100) * (float)(vol))/100.0); + play_sample(s, v, 128, freq, loop); + } + } +@@ -245,7 +245,7 @@ void stop_sound_id(int id) { + void adjust_sound_id_ex(int id, int x) { + if (got_sound) { + int vol = MAX(100 - ABS(player.actor->x - x) / 2, 0); +- int v = get_config_int("sound", "sample_volume", 100) * (float)(vol)/100.0; ++ int v = (int)(get_config_int("sound", "sample_volume", 100) * (float)(vol)/100.0); + int pan = MID(0, 128 + x - player.actor->x, 255); + if (sfx[id] != NULL) { + adjust_sample(sfx[id], v, pan, 1000, 1); +@@ -496,16 +496,16 @@ void draw_status_bar(BITMAP *bmp, int y) { + int i; + + rectfill(bmp, 0, y, 159, y+9, 1); +- draw_sprite_h_flip(bmp, data[HERO_NORM].dat, 0, y+1); +- textprintf(bmp, data[THE_FONT].dat, 9, y+1, 4, " :%d", player.lives); ++ draw_sprite_h_flip(bmp, (BITMAP*)data[HERO_NORM].dat, 0, y+1); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 9, y+1, 4, " :%d", player.lives); + + for(i = 0; i < player.health; i ++) +- draw_sprite(bmp, data[HEART2].dat, 40 + 10 * i, y-3); ++ draw_sprite(bmp, (BITMAP*)data[HEART2].dat, 40 + 10 * i, y-3); + +- draw_sprite(bmp, data[EGG].dat, 80, y-5); +- textprintf(bmp, data[THE_FONT].dat, 85, y+1, 4, " :%d", player.ammo); ++ draw_sprite(bmp, (BITMAP*)data[EGG].dat, 80, y-5); ++ textprintf(bmp, (FONT*)data[THE_FONT].dat, 85, y+1, 4, " :%d", player.ammo); + +- textprintf_right(bmp, data[THE_FONT].dat, 158, y+1, 4, "%d", player.score); ++ textprintf_right(bmp, (FONT*)data[THE_FONT].dat, 158, y+1, 4, "%d", player.score); + } + + +@@ -521,12 +521,12 @@ void draw_frame(BITMAP *bmp, int _status_bar) { + x2 = (-ox % 320) >> 1; + + // draw backgrounds +- blit(data[BG0].dat, bmp, 0, 0, x0, 0, 160, 120); +- blit(data[BG0].dat, bmp, 0, 0, x0 + 160, 0, 160, 120); +- draw_sprite(bmp, data[BG1].dat, x1, 120 - ((BITMAP *)data[BG1].dat)->h); +- draw_sprite(bmp, data[BG1].dat, x1 + 160, 120 - ((BITMAP *)data[BG1].dat)->h); +- draw_sprite(bmp, data[BG2].dat, x2, 120 - ((BITMAP *)data[BG2].dat)->h); +- draw_sprite(bmp, data[BG2].dat, x2 + 160, 120 - ((BITMAP *)data[BG2].dat)->h); ++ blit((BITMAP*)data[BG0].dat, bmp, 0, 0, x0, 0, 160, 120); ++ blit((BITMAP*)data[BG0].dat, bmp, 0, 0, x0 + 160, 0, 160, 120); ++ draw_sprite(bmp, (BITMAP*)data[BG1].dat, x1, 120 - ((BITMAP *)data[BG1].dat)->h); ++ draw_sprite(bmp, (BITMAP*)data[BG1].dat, x1 + 160, 120 - ((BITMAP *)data[BG1].dat)->h); ++ draw_sprite(bmp, (BITMAP*)data[BG2].dat, x2, 120 - ((BITMAP *)data[BG2].dat)->h); ++ draw_sprite(bmp, (BITMAP*)data[BG2].dat, x2 + 160, 120 - ((BITMAP *)data[BG2].dat)->h); + + // draw frame + draw_map(bmp, map, 0, 0, 160, 120, editing); +@@ -536,16 +536,16 @@ void draw_frame(BITMAP *bmp, int _status_bar) { + for(i = 1; i < MAX_ACTORS; i ++) + if (actor[i].active) + draw_actor(bmp, &actor[i], actor[i].x - ox, actor[i].y); +- ++ + // draw particles +- for(i = 0; i < MAX_PARTICLES; i ++) ++ for(i = 0; i < MAX_PARTICLES; i ++) + if (particle[i].life) + draw_particle(bmp, &particle[i], ox, 0); + } + + // draw player + draw_player(bmp, &player, player.actor->x - ox, player.actor->y); +- ++ + // draw bullets + for(i = 0; i < MAX_BULLETS; i ++) + if (bullet[i].exist) +@@ -555,11 +555,10 @@ void draw_frame(BITMAP *bmp, int _status_bar) { + if (!editing) { + if (_status_bar) draw_status_bar(bmp, 110); + else rectfill(bmp, 0, 110, 159, 119, 1); +- + } + else { /////////////// EDIT stats +- int mx = mouse_x / (SCREEN_W / 160); +- int my = mouse_y / (SCREEN_H / 120); ++ int mx = (int)(mouse_x / (SCREEN_W / 160)); ++ int my = (int)(mouse_y / (SCREEN_H / 120)); + draw_edit_mode(bmp, map, mx, my); + } + } +@@ -759,12 +758,12 @@ int init_game(const char *map_file) { + ((RGB *)data[0].dat)[0].g = 0; + ((RGB *)data[0].dat)[0].b = 0; + fix_gui_colors(); +- set_palette(data[0].dat); ++ set_palette((RGB*)data[0].dat); + + // show splash screen + clear_to_color(swap_screen, 3); + +- bmp = data[FLD_LOGO].dat; ++ bmp = (BITMAP*)data[FLD_LOGO].dat; + draw_character(swap_screen, bmp, 80 - bmp->w / 2 + 0, 50 + 1, 1); + draw_character(swap_screen, bmp, 80 - bmp->w / 2, 50, 4); + +@@ -841,6 +840,10 @@ int init_game(const char *map_file) { + log2file(" DIGI_AUTODETECT selected (%d)", i); + break; + case 2: ++ i = DIGI_BEOS; ++ log2file(" DIGI_BEOS selected (%d)",i); ++ break; ++/* case 2: + i = DIGI_DIRECTX(0); + log2file(" DIGI_DIRECTX(0) selected (%d)", i); + break; +@@ -848,7 +851,7 @@ int init_game(const char *map_file) { + i = DIGI_DIRECTAMX(0); + log2file(" DIGI_DIRECTAMX(0) selected (%d)", i); + break; +- default: ++*/ default: + i = -770405; // dummy number + got_sound = 0; + log2file(" NO_SOUND selected"); +@@ -889,31 +892,31 @@ int init_game(const char *map_file) { + if (!s) log2file(" sfx_22.dat will be used"); + + // assign samples +- sfx[SMPL_CHERRY] = sfx_data[0].dat; +- sfx[SMPL_CHOPPER] = sfx_data[1].dat; +- sfx[SMPL_CRUSH] = sfx_data[2].dat; +- sfx[SMPL_A_DIE] = sfx_data[3].dat; +- sfx[SMPL_EAT] = sfx_data[4].dat; +- sfx[SMPL_BEAM] = sfx_data[5].dat; +- sfx[SMPL_ENGINE] = sfx_data[6].dat; +- sfx[SMPL_HEART] = sfx_data[7].dat; +- sfx[SMPL_HIT] = sfx_data[8].dat; +- sfx[SMPL_HURT] = sfx_data[9].dat; +- sfx[SMPL_CRUSH_LAND] = sfx_data[10].dat; +- sfx[SMPL_JUMP] = sfx_data[11].dat; +- sfx[SMPL_E_DIE] = sfx_data[12].dat; +- sfx[SMPL_MENU] = sfx_data[13].dat; +- sfx[SMPL_PAUSE] = sfx_data[14].dat; +- sfx[SMPL_POINT] = sfx_data[15].dat; +- sfx[SMPL_SHIP] = sfx_data[16].dat; +- sfx[SMPL_SHOOT] = sfx_data[17].dat; +- sfx[SMPL_SPIT] = sfx_data[18].dat; +- sfx[SMPL_STAR] = sfx_data[19].dat; +- sfx[SMPL_STARTUP] = sfx_data[20].dat; +- sfx[SMPL_MASH] = sfx_data[21].dat; +- sfx[SMPL_TALK] = sfx_data[22].dat; +- sfx[SMPL_SPIN] = sfx_data[23].dat; +- sfx[SMPL_XTRALIFE] = sfx_data[24].dat; ++ sfx[SMPL_CHERRY] = (SAMPLE*)sfx_data[0].dat; ++ sfx[SMPL_CHOPPER] = (SAMPLE*)sfx_data[1].dat; ++ sfx[SMPL_CRUSH] = (SAMPLE*)sfx_data[2].dat; ++ sfx[SMPL_A_DIE] = (SAMPLE*)sfx_data[3].dat; ++ sfx[SMPL_EAT] = (SAMPLE*)sfx_data[4].dat; ++ sfx[SMPL_BEAM] = (SAMPLE*)sfx_data[5].dat; ++ sfx[SMPL_ENGINE] = (SAMPLE*)sfx_data[6].dat; ++ sfx[SMPL_HEART] = (SAMPLE*)sfx_data[7].dat; ++ sfx[SMPL_HIT] = (SAMPLE*)sfx_data[8].dat; ++ sfx[SMPL_HURT] = (SAMPLE*)sfx_data[9].dat; ++ sfx[SMPL_CRUSH_LAND] = (SAMPLE*)sfx_data[10].dat; ++ sfx[SMPL_JUMP] = (SAMPLE*)sfx_data[11].dat; ++ sfx[SMPL_E_DIE] = (SAMPLE*)sfx_data[12].dat; ++ sfx[SMPL_MENU] = (SAMPLE*)sfx_data[13].dat; ++ sfx[SMPL_PAUSE] = (SAMPLE*)sfx_data[14].dat; ++ sfx[SMPL_POINT] = (SAMPLE*)sfx_data[15].dat; ++ sfx[SMPL_SHIP] = (SAMPLE*)sfx_data[16].dat; ++ sfx[SMPL_SHOOT] = (SAMPLE*)sfx_data[17].dat; ++ sfx[SMPL_SPIT] = (SAMPLE*)sfx_data[18].dat; ++ sfx[SMPL_STAR] = (SAMPLE*)sfx_data[19].dat; ++ sfx[SMPL_STARTUP] = (SAMPLE*)sfx_data[20].dat; ++ sfx[SMPL_MASH] = (SAMPLE*)sfx_data[21].dat; ++ sfx[SMPL_TALK] = (SAMPLE*)sfx_data[22].dat; ++ sfx[SMPL_SPIN] = (SAMPLE*)sfx_data[23].dat; ++ sfx[SMPL_XTRALIFE] = (SAMPLE*)sfx_data[24].dat; + } + } + else { +@@ -950,7 +953,7 @@ int init_game(const char *map_file) { + + // misc + log2file(" initializing scroller"); +- init_scroller(&hscroll, data[THE_FONT].dat, scroller_message, 160, 10, TRUE); ++ init_scroller(&hscroll, (FONT*)data[THE_FONT].dat, scroller_message, 160, 10, TRUE); + + options.use_vsync = get_config_int("graphics", "vsync", 0); + log2file(" vsync set to %s", (options.use_vsync ? "ON" : "OFF")); +@@ -1046,17 +1049,17 @@ void init_player(Tplayer *p, Tmap *m) { + + // draws text with an outline + void textout_outline(BITMAP *bmp, const char *txt, int x, int y) { +- textout(bmp, data[THE_FONT].dat, txt, x+1, y, 1); +- textout(bmp, data[THE_FONT].dat, txt, x-1, y, 1); +- textout(bmp, data[THE_FONT].dat, txt, x, y+1, 1); +- textout(bmp, data[THE_FONT].dat, txt, x, y-1, 1); +- textout(bmp, data[THE_FONT].dat, txt, x, y, 4); ++ textout(bmp, (FONT*)data[THE_FONT].dat, txt, x+1, y, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, txt, x-1, y, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, txt, x, y+1, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, txt, x, y-1, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, txt, x, y, 4); + } + + + // draws centered text with an outline + void textout_outline_center(BITMAP *bmp, const char *txt, int cx, int y) { +- int x = cx - text_length(data[THE_FONT].dat, txt) / 2; ++ int x = cx - text_length((FONT*)data[THE_FONT].dat, txt) / 2; + textout_outline(bmp, txt, x, y); + } + +@@ -1064,7 +1067,7 @@ void textout_outline_center(BITMAP *bmp, const char *txt, int cx, int y) { + + // plays the let's go sequence + void show_lets_go() { +- BITMAP *go = data[LETSGO].dat; ++ BITMAP *go = (BITMAP*)data[LETSGO].dat; + int x = -go->w; + int mode = 0; + int wait = 0; +@@ -1112,7 +1115,7 @@ void show_lets_go() { + + // shows the game over sign sequence + void show_game_over() { +- BITMAP *go = data[GAME_OVER].dat; ++ BITMAP *go = (BITMAP*)data[GAME_OVER].dat; + + int x = -go->w; + int mode = 0; +@@ -1154,16 +1157,16 @@ void show_game_over() { + // show_custom_ending() + void draw_custom_ending(BITMAP *bmp) { + int i, r; +- BITMAP *head = data[FLD_HEAD].dat; ++ BITMAP *head = (BITMAP*)data[FLD_HEAD].dat; + +- blit(data[INTRO_BG].dat, bmp, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)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))) ); + 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_h_flip(bmp, data[ALEX].dat, 60, 40); +- draw_sprite(bmp, data[LOLA].dat, 84, 40); ++ draw_sprite_h_flip(bmp, (BITMAP*)data[ALEX].dat, 60, 40); ++ draw_sprite(bmp, (BITMAP*)data[LOLA].dat, 84, 40); + + textout_outline_center(bmp, "Congratulations!", 80, 60); + textout_outline_center(bmp, "A winner is you!", 80, 80); +@@ -1229,7 +1232,7 @@ void transform_bitmap(BITMAP *bmp, int steps) { + // draws the scoring sequence at end of level + // used by show_cutscene(..) + void draw_cutscene(BITMAP *bmp, int org_level, int _level, int _lives, int _stars, int _cherries) { +- BITMAP *go = data[LEVELCOMPLETE].dat; ++ BITMAP *go = (BITMAP*)data[LEVELCOMPLETE].dat; + char buf[80]; + + clear_bitmap(bmp); +@@ -1346,14 +1349,14 @@ void show_scores(int space, Thisc *table) { + df = load_datafile_object("data/a45.dat", "BG1"); + packfile_password(NULL); + if (df != NULL) { +- bg = df->dat; ++ bg = (BITMAP*)df->dat; + } + else + msg_box("ooga"); + } + + if (bg == NULL || !space) +- blit(data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); + else { + clear_to_color(swap_screen, 1); + blit(bg, swap_screen, 0, 0, 0, 0, 160, 120); +@@ -1362,7 +1365,7 @@ void show_scores(int space, Thisc *table) { + + textout_outline_center(swap_screen, "High scores", 80, 8); + textout_outline_center(swap_screen, "Press any key", 80, 100); +- draw_hisc_table(table, swap_screen, data[THE_FONT].dat, 10, 30, (space ? 4 : 1), !space); ++ draw_hisc_table(table, swap_screen, (FONT*)data[THE_FONT].dat, 10, 30, (space ? 4 : 1), !space); + + blit_to_screen(swap_screen); + fade_in_pal(100); +@@ -1388,30 +1391,30 @@ void draw_select_starting_level(BITMAP *bmp, int level, int min, int max) { + char buf[80]; + int xpos = 2; + +- blit(data[ALEX_BG].dat, bmp, 0, 0, 0, 0, 160, 112); ++ blit((BITMAP*)data[ALEX_BG].dat, bmp, 0, 0, 0, 0, 160, 112); + rectfill(bmp, 0, 112, 160, 120, 2); + + sprintf(buf, "%s %d %s", (level > min ? "<" : " "), level, (level < max ? ">" : " ")); + clear_bitmap(stuff); +- textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2); +- textout_centre(stuff, data[THE_FONT].dat, buf, stuff->w/2, 0, 1); ++ textout_centre(stuff, (FONT*)data[THE_FONT].dat, buf, stuff->w/2 + 1, 1, 2); ++ textout_centre(stuff, (FONT*)data[THE_FONT].dat, buf, stuff->w/2, 0, 1); + stretch_sprite(bmp, stuff, 80 - 4*stuff->w/2, 30, 4*stuff->w, 4*stuff->h); + +- textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1); +- textout_centre(bmp, data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4); ++ textout_centre(bmp, (FONT*)data[THE_FONT].dat, "SELECT START LEVEL", 80, 90, 1); ++ textout_centre(bmp, (FONT*)data[THE_FONT].dat, "SELECT START LEVEL", 79, 89, 4); + + if (options.one_hundred) { +- if (game_count & 32 || game_count & 16) draw_sprite(bmp, data[SHIP100].dat, xpos, 2); ++ if (game_count & 32 || game_count & 16) draw_sprite(bmp, (BITMAP*)data[SHIP100].dat, xpos, 2); + } + else { + if (options.stars[level - 1]) { +- draw_sprite(bmp, data[STAR].dat, xpos, 2); +- draw_sprite(bmp, data[ALL100].dat, xpos + 4, 14); ++ draw_sprite(bmp, (BITMAP*)data[STAR].dat, xpos, 2); ++ draw_sprite(bmp, (BITMAP*)data[ALL100].dat, xpos + 4, 14); + xpos += 20; + } + if (options.cherries[level - 1]) { +- draw_sprite(bmp, data[CHERRY].dat, xpos, 2); +- draw_sprite(bmp, data[ALL100].dat, xpos + 4, 14); ++ draw_sprite(bmp, (BITMAP*)data[CHERRY].dat, xpos, 2); ++ draw_sprite(bmp, (BITMAP*)data[ALL100].dat, xpos + 4, 14); + } + } + +@@ -1773,7 +1776,7 @@ void update_player() { + if (player.ammo) { + Tbullet *b = get_free_bullet(bullet, MAX_BULLETS); + if (b != NULL) { +- set_bullet(b, (int)player.actor->x + 7, (int)player.actor->y - 14, (player.actor->direction ? 4 : -4), 0, data[EGG2].dat, 0); ++ set_bullet(b, (int)player.actor->x + 7, (int)player.actor->y - 14, (player.actor->direction ? 4 : -4), 0, (BITMAP*)data[EGG2].dat, 0); + player.ammo --; + play_sound(sfx[SMPL_SPIT]); + } +@@ -2149,7 +2152,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; +@@ -2459,33 +2462,33 @@ void draw_title(BITMAP *bmp, int tick) { + + if (!playing_original_game) strcpy(start_string, "CUSTOM GAME"); + +- blit(data[ALEX_BG].dat, bmp, 0, 0, 0, 0, 160, 112); ++ blit((BITMAP*)data[ALEX_BG].dat, bmp, 0, 0, 0, 0, 160, 112); + rectfill(bmp, 0, 112, 160, 120, 2); + + w = ((BITMAP *)data[ALEX_LOGO].dat)->w; + h = ((BITMAP *)data[ALEX_LOGO].dat)->h; +- draw_sprite(bmp, data[ALEX_LOGO].dat, 80 - w/2, 30 - h/2); ++ draw_sprite(bmp, (BITMAP*)data[ALEX_LOGO].dat, 80 - w/2, 30 - h/2); + + draw_scroller(&hscroll, bmp, 0, 110); + + y = 60; + x = 50; +- textout(bmp, data[THE_FONT].dat, start_string, x+1, y+1, 1); +- textout(bmp, data[THE_FONT].dat, start_string, x, y, 4); ++ textout(bmp, (FONT*)data[THE_FONT].dat, start_string, x+1, y+1, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, start_string, x, y, 4); + + y += step; +- textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1); +- textout(bmp, data[THE_FONT].dat, "HIGH SCORES", x, y, 4); ++ textout(bmp, (FONT*)data[THE_FONT].dat, "HIGH SCORES", x+1, y+1, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, "HIGH SCORES", x, y, 4); + + y += step; +- textout(bmp, data[THE_FONT].dat, "EDITOR", x+1, y+1, 1); +- textout(bmp, data[THE_FONT].dat, "EDITOR", x, y, 4); ++ textout(bmp, (FONT*)data[THE_FONT].dat, "EDITOR", x+1, y+1, 1); ++ textout(bmp, (FONT*)data[THE_FONT].dat, "EDITOR", x, y, 4); + + y += step; +- textout(bmp, data[THE_FONT].dat, "QUIT", x+1, y+1, 1); +- textout(bmp, data[THE_FONT].dat, "QUIT", x, y, 4); ++ textout(bmp, (FONT*)data[THE_FONT].dat, "QUIT", x+1, y+1, 1); ++ textout(bmp, (FONT*)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, (BITMAP*)data[POINTER].dat, x - 25 + fixtoi(3 * fcos(itofix(tick << 2))), 44 + menu_choice * step); + } + + +@@ -2508,7 +2511,7 @@ void switch_gfx_mode(int mode, int w, int h) { + } + } + +- set_palette(data[0].dat); ++ set_palette((RGB*)data[0].dat); + } + + +@@ -2612,7 +2615,7 @@ int get_string(BITMAP *bmp, char *string, int max_size, FONT *f, int pos_x, int + + // lets the player enter a name for highscore use (or what ever) + void get_player_name(char *name) { +- blit(data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); + transform_bitmap(swap_screen, -1); + textout_outline_center(swap_screen, "Congratulations,", 80, 8); + textout_outline_center(swap_screen, "You've got", 80, 19); +@@ -2620,7 +2623,7 @@ void get_player_name(char *name) { + textout_outline_center(swap_screen, "Enter your name:", 80, 55); + blit_to_screen(swap_screen); + fade_in_pal(100); +- get_string(swap_screen, name, 10, data[THE_FONT].dat, 50, 80, 4, &ctrl); ++ get_string(swap_screen, name, 10, (FONT*)data[THE_FONT].dat, 50, 80, 4, &ctrl); + } + + +@@ -2756,7 +2759,7 @@ int do_main_menu() { + set_edit_mode(EDIT_MODE_DRAW); + set_edit_path_and_file("new.map"); + +- draw_frame(swap_screen, 1); ++ draw_frame(swap_screen, 1);printf("drawed frame\n"); + blit_to_screen(swap_screen); + fade_in_pal(100); + status = play(-1); +@@ -2946,7 +2949,7 @@ int do_main_menu() { + stop_music(); + fade_out_pal(100); + // show bye bye screen +- blit(data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)data[INTRO_BG].dat, swap_screen, 0, 0, 0, 0, 160, 120); + transform_bitmap(swap_screen, -1); + textout_outline_center(swap_screen, "Thanks for playing!", 80, 20); + textout_outline_center(swap_screen, "Design, Code, GFX:", 80, 48); +diff --git a/src/main.h b/src/main.h +index 290a453..2082430 100644 +--- a/src/main.h ++++ b/src/main.h +@@ -59,6 +59,7 @@ + #define SMPL_TALK 24 + #define SMPL_BEAM 25 + ++extern DATAFILE *data; + + // functions + char *get_init_string(); +@@ -90,8 +91,6 @@ void poll_music(); + + + // 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 ++#endif +diff --git a/src/map.c b/src/map.c +index 284445a..5d10c23 100644 +--- a/src/map.c ++++ b/src/map.c +@@ -35,7 +35,7 @@ + Tmap *create_map(int w, int h) { + Tmap *m; + +- m = malloc(sizeof(Tmap)); ++ m = (Tmap*)malloc(sizeof(Tmap)); + if (m == NULL) return NULL; + + strcpy(m->name, "noname"); +@@ -52,7 +52,7 @@ Tmap *create_map(int w, int h) { + m->offset_y = 0; + m->width = w; + m->height = h; +- m->dat = malloc(w * h * sizeof(Tmappos)); ++ m->dat = (Tmappos*)malloc(w * h * sizeof(Tmappos)); + + if (m->dat == NULL) { + free(m); +@@ -86,7 +86,7 @@ Tmap *load_map(char *fname) { + } + + // get memory +- m = malloc(sizeof(Tmap)); ++ m = (Tmap*)malloc(sizeof(Tmap)); + if (m == NULL) { + fclose(fp); + return NULL; +@@ -96,7 +96,7 @@ Tmap *load_map(char *fname) { + fread(m, sizeof(Tmap), 1, fp); + + // read map data +- m->dat = malloc(m->width * m->height * sizeof(Tmappos)); ++ m->dat = (Tmappos*)malloc(m->width * m->height * sizeof(Tmappos)); + if (m->dat == NULL) { + free(m); + return NULL; +@@ -130,7 +130,7 @@ Tmap *load_map_from_memory(void *mem) { + c += 6; + + // get memory +- m = malloc(sizeof(Tmap)); ++ m = (Tmap*)malloc(sizeof(Tmap)); + if (m == NULL) { + //fclose(fp); + return NULL; +@@ -142,7 +142,7 @@ Tmap *load_map_from_memory(void *mem) { + c += sizeof(Tmap); + + // read map data +- m->dat = malloc(m->width * m->height * sizeof(Tmappos)); ++ m->dat = (Tmappos*)malloc(m->width * m->height * sizeof(Tmappos)); + if (m->dat == NULL) { + free(m); + return NULL; +@@ -164,7 +164,7 @@ Tmap *load_map_from_memory(void *mem) { + // saves a map to file + int save_map(Tmap *m, char *fname) { + FILE *fp; +- char header[6] = "AX4MAP"; ++ char header[7] = "AX4MAP"; + + // open file + fp = fopen(fname, "wb"); +@@ -222,41 +222,41 @@ void draw_map(BITMAP *bmp, Tmap *sm, int dx, int dy, int w, int h, int edit) { + pos = tx + ty * sm->width; + + if (sm->dat[pos].tile) { +- draw_sprite(bmp, sm->data[sm->dat[pos].tile + TILE000 - 1].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[sm->dat[pos].tile + TILE000 - 1].dat, dx + x*16 + ax, dy + y*16 + ay); + } + + + if (sm->dat[pos].item) { + if (sm->dat[pos].item == MAP_EGG) { +- draw_sprite(bmp, sm->data[EGG].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[EGG].dat, dx + x*16 + ax, dy + y*16 + ay); + } + else if (sm->dat[pos].item == MAP_1UP) { +- draw_sprite(bmp, sm->data[ONEUP].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[ONEUP].dat, dx + x*16 + ax, dy + y*16 + ay); + } + else if (sm->dat[pos].item == MAP_STAR) { +- draw_sprite(bmp, sm->data[STAR].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[STAR].dat, dx + x*16 + ax, dy + y*16 + ay); + } + else if (sm->dat[pos].item == MAP_HEART) { +- draw_sprite(bmp, sm->data[HEART].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[HEART].dat, dx + x*16 + ax, dy + y*16 + ay); + } + else if (sm->dat[pos].item == MAP_CHERRY) { +- draw_sprite(bmp, sm->data[CHERRY].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[CHERRY].dat, dx + x*16 + ax, dy + y*16 + ay); + } + else if (sm->dat[pos].item == MAP_LOLA) { +- draw_sprite(bmp, sm->data[LOLA].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[LOLA].dat, dx + x*16 + ax, dy + y*16 + ay); + } + } + + + if (sm->dat[pos].type) { + if (sm->dat[pos].type == MAP_SPIN) { +- draw_sprite(bmp, sm->data[SPIN1 + ((ABS(game_count) >> 2) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[SPIN1 + ((ABS(game_count) >> 2) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay); + } + if (sm->dat[pos].type == MAP_WATER) { +- blit(sm->data[WATER].dat, bmp, ((ABS(game_count) >> 2) % 4) << 4, 0, dx + x*16 + ax, dy + y*16 + ay, 16, 16); ++ blit((BITMAP*)sm->data[WATER].dat, bmp, ((ABS(game_count) >> 2) % 4) << 4, 0, dx + x*16 + ax, dy + y*16 + ay, 16, 16); + } + if (sm->dat[pos].type == MAP_SURFACE) { +- masked_blit(sm->data[WATER_SURFACE].dat, bmp, ((ABS(game_count) >> 2) % 8) << 4, 0, dx + x*16 + ax, dy + y*16 + ay, 16, 16); ++ masked_blit((BITMAP*)sm->data[WATER_SURFACE].dat, bmp, ((ABS(game_count) >> 2) % 8) << 4, 0, dx + x*16 + ax, dy + y*16 + ay, 16, 16); + } + } + +@@ -271,28 +271,28 @@ void draw_map(BITMAP *bmp, Tmap *sm, int dx, int dy, int w, int h, int edit) { + textout(bmp, font, "GL", dx + x*16 + ax, dy + y*16 + ay, 255); + } + if (sm->dat[pos].type == MAP_ENEMY1) { +- draw_sprite(bmp, sm->data[ENEMY1_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY1_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay); + } + if (sm->dat[pos].type == MAP_ENEMY2) { +- draw_sprite(bmp, sm->data[ENEMY2_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay - 8); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY2_01 + ((ABS(game_count) >> 3) % 4)].dat, dx + x*16 + ax, dy + y*16 + ay - 8); + } + if (sm->dat[pos].type == MAP_ENEMY3) { +- draw_sprite(bmp, sm->data[ENEMY3].dat, dx + x*16 + ax, dy + y*16 + ay - 96); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY3].dat, dx + x*16 + ax, dy + y*16 + ay - 96); + } + if (sm->dat[pos].type == MAP_ENEMY4) { +- draw_sprite(bmp, sm->data[ENEMY4].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY4].dat, dx + x*16 + ax, dy + y*16 + ay); + } + if (sm->dat[pos].type == MAP_ENEMY5) { +- draw_sprite(bmp, sm->data[ENEMY5_01].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY5_01].dat, dx + x*16 + ax, dy + y*16 + ay); + } + if (sm->dat[pos].type == MAP_ENEMY6) { +- draw_sprite(bmp, sm->data[ENEMY6].dat, dx + x*16 + ax, dy + y*16 + ay); ++ draw_sprite(bmp, (BITMAP*)sm->data[ENEMY6].dat, dx + x*16 + ax, dy + y*16 + ay); + } + if (sm->dat[pos].type == MAP_GUARD1) { +- draw_sprite(bmp, sm->data[GUARD1_1].dat, dx + x*16 + ax, dy + y*16 + ay - 16); ++ draw_sprite(bmp, (BITMAP*)sm->data[GUARD1_1].dat, dx + x*16 + ax, dy + y*16 + ay - 16); + } + if (sm->dat[pos].type == MAP_GUARD2) { +- draw_sprite(bmp, sm->data[GUARD2_1a].dat, dx + x*16 + ax, dy + y*16 + ay - 32); ++ draw_sprite(bmp, (BITMAP*)sm->data[GUARD2_1a].dat, dx + x*16 + ax, dy + y*16 + ay - 32); + } + } + } +@@ -339,7 +339,7 @@ void change_map_size(Tmap *sm, int dw, int dh, int dir_flags) { + tsm.width = sm->width; + tsm.height = sm->height; + sm->height += dh; +- sm->dat = malloc(sm->width * sm->height * sizeof(Tmappos)); ++ sm->dat = (Tmappos*)malloc(sm->width * sm->height * sizeof(Tmappos)); + for(i=0;iwidth*sm->height;i++) sm->dat[i].tile = sm->dat[i].mask = sm->dat[i].type = sm->dat[i].item = 0; + + // copy relevant parts +@@ -361,7 +361,7 @@ void change_map_size(Tmap *sm, int dw, int dh, int dir_flags) { + tsm.width = sm->width; + tsm.height = sm->height; + sm->width += dw; +- sm->dat = malloc(sm->width * sm->height * sizeof(Tmappos)); ++ sm->dat = (Tmappos*)malloc(sm->width * sm->height * sizeof(Tmappos)); + for(i=0;iwidth*sm->height;i++) sm->dat[i].tile = sm->dat[i].mask = sm->dat[i].type = sm->dat[i].item = 0; + + // copy relevant parts +diff --git a/src/map.h b/src/map.h +index 5dfb974..b204cc6 100644 +--- a/src/map.h ++++ b/src/map.h +@@ -72,7 +72,7 @@ typedef struct { + } Tmappos; + + // map header (overall stuff) +-typedef struct { ++typedef struct Tmap { + char name[32]; + char dummy[27]; + char map_data_needs_to_be_destroyed; +@@ -87,7 +87,7 @@ typedef struct { + DATAFILE *data; + int start_x; + int start_y; +-} Tmap; ++}; + + + // functions +@@ -111,4 +111,4 @@ int adjust_xpos (Tmap *m, int x, int y, int ground, int dx); + + + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/options.h b/src/options.h +index b1e3c55..83041af 100644 +--- a/src/options.h ++++ b/src/options.h +@@ -43,4 +43,4 @@ void save_options(Toptions *o, PACKFILE *fp); + void load_options(Toptions *o, PACKFILE *fp); + void reset_options(Toptions *o); + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/particle.c b/src/particle.c +index 5435d58..1e28c5e 100644 +--- a/src/particle.c ++++ b/src/particle.c +@@ -20,18 +20,11 @@ + + + +- ++#include "main.h" + #include "particle.h" + +-// pointer to datafile +-DATAFILE *data; +- +- +-// set datafile to use +-void set_datafile(DATAFILE *d) { +- data = d; +-} +- ++// the particles themselves ++Tparticle particle[MAX_PARTICLES]; + + // inits variables in a particle + void set_particle(Tparticle *p, int x, int y, double dx, double dy, int color, int life, int bmp) { +@@ -47,8 +40,8 @@ void set_particle(Tparticle *p, int x, int y, double dx, double dy, int color, i + + // draws particle depending on map offset (ox and oy) + void draw_particle(BITMAP *bmp, Tparticle*p, int ox, int oy) { +- int x = p->x - ox; +- int y = p->y - oy; ++ int x = (int)(p->x - ox); ++ int y = (int)(p->y - oy); + + // is the particle inside the screen + if (x < -16 || x > bmp->w + 16 || y < -16 || y > bmp->h +16) return; +@@ -57,12 +50,12 @@ void draw_particle(BITMAP *bmp, Tparticle*p, int ox, int oy) { + if (p->bmp == -1) + putpixel(bmp, x, y, p->color); + else { +- BITMAP *b = data[p->bmp + (p->color == -1 ? p->count>>1 : 0)].dat; ++ BITMAP *b = (BITMAP*)data[p->bmp + (p->color == -1 ? p->count>>1 : 0)].dat; + draw_sprite(bmp, b, x - b->w/2, y - b->h/2); + } + } + +-// updates the particle data (position etc) ++// updates the particle particledata (position etc) + void update_particle(Tparticle* p) { + p->x += p->dx; + p->y += p->dy; +diff --git a/src/particle.h b/src/particle.h +index f81ee87..9e27a5b 100644 +--- a/src/particle.h ++++ b/src/particle.h +@@ -31,21 +31,20 @@ + + + // the particle struct +-typedef struct { ++typedef struct Tparticle { + double x, y; + double dx, dy; + int color; + int life; + int count; + int bmp; +-} Tparticle; ++}; + + + // the particles themselves +-Tparticle particle[MAX_PARTICLES]; ++extern Tparticle particle[MAX_PARTICLES]; + + // functions +-void set_datafile(DATAFILE *d); + void reset_particles(Tparticle *p, int max); + Tparticle *get_free_particle(Tparticle *p, int max); + void set_particle(Tparticle *p, int x, int y, double dx, double dy, int color, int life, int bmp); +@@ -54,4 +53,4 @@ void update_particle(Tparticle *p); + 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 +diff --git a/src/player.c b/src/player.c +index a608281..edd1671 100644 +--- a/src/player.c ++++ b/src/player.c +@@ -25,6 +25,8 @@ + #include "timer.h" + #include "../data/data.h" + ++Tplayer player; ++ + // draws the player depending on his state + void draw_player(BITMAP *bmp, Tplayer *p, int x, int y) { + BITMAP *head, *body; +@@ -33,26 +35,26 @@ void draw_player(BITMAP *bmp, Tplayer *p, int x, int y) { + if (p->wounded && (game_count % 2)) return; + + if (p->actor->status == AC_DEAD) { +- head = p->actor->data[HERO_NORM].dat; +- body = p->actor->data[HERO_JUMP].dat; ++ head = (BITMAP*)p->actor->data[HERO_NORM].dat; ++ body = (BITMAP*)p->actor->data[HERO_JUMP].dat; + draw_sprite_v_flip(bmp, body, x, y - 32); + draw_sprite_v_flip(bmp, head, x, y - 16); + } + else if (p->actor->status == AC_BALL) { + if (!p->actor->direction) +- rotate_sprite(bmp, p->actor->data[HERO_BALL].dat, x, y-16, itofix(p->angle)); ++ rotate_sprite(bmp, (BITMAP*)p->actor->data[HERO_BALL].dat, x, y-16, itofix(p->angle)); + else +- rotate_sprite_v_flip(bmp, p->actor->data[HERO_BALL].dat, x, y-16, itofix(p->angle + 128)); ++ rotate_sprite_v_flip(bmp, (BITMAP*)p->actor->data[HERO_BALL].dat, x, y-16, itofix(p->angle + 128)); + } + else if (p->actor->status != AC_EAT) { +- if (p->actor->status == AC_FULL) head = p->actor->data[HERO_FULL].dat; +- else if (p->actor->status == AC_SPIT) head = p->actor->data[HERO_SPIT].dat; +- else head = p->actor->data[HERO_NORM].dat; ++ if (p->actor->status == AC_FULL) head = (BITMAP*)p->actor->data[HERO_FULL].dat; ++ else if (p->actor->status == AC_SPIT) head = (BITMAP*)p->actor->data[HERO_SPIT].dat; ++ else head = (BITMAP*)p->actor->data[HERO_NORM].dat; + + if (p->jumping) +- body = p->actor->data[HERO_JUMP].dat; ++ body = (BITMAP*)p->actor->data[HERO_JUMP].dat; + else +- body = p->actor->data[p->actor->frames[p->actor->frame]].dat; ++ body = (BITMAP*)p->actor->data[p->actor->frames[p->actor->frame]].dat; + + if (p->actor->direction) { + draw_sprite_h_flip(bmp, body, x, y - 16); +@@ -66,15 +68,15 @@ void draw_player(BITMAP *bmp, Tplayer *p, int x, int y) { + else { + if (!p->jumping) { + if (p->actor->direction) { +- draw_sprite_h_flip(bmp, p->actor->data[HERO_EAT].dat, x, y - 16); ++ draw_sprite_h_flip(bmp, (BITMAP*)p->actor->data[HERO_EAT].dat, x, y - 16); + } + else { +- draw_sprite(bmp, p->actor->data[HERO_EAT].dat, x - 16, y - 16); ++ draw_sprite(bmp, (BITMAP*)p->actor->data[HERO_EAT].dat, x - 16, y - 16); + } + } + else { +- head = p->actor->data[HERO_SPIT].dat; +- body = p->actor->data[HERO_JUMP].dat; ++ head = (BITMAP*)p->actor->data[HERO_SPIT].dat; ++ body = (BITMAP*)p->actor->data[HERO_JUMP].dat; + if (p->actor->direction) { + draw_sprite_h_flip(bmp, body, x, y - 16); + draw_sprite_h_flip(bmp, head, x, y - 16); +diff --git a/src/player.h b/src/player.h +index 0f19f95..cccb21d 100644 +--- a/src/player.h ++++ b/src/player.h +@@ -26,7 +26,7 @@ + + + // struct for the player +-typedef struct { ++typedef struct Tplayer { + Tactor *actor; + + int score; +@@ -49,15 +49,14 @@ typedef struct { + int stars; + int cherries_taken; + int stars_taken; +-} Tplayer; +- ++}; + + // the player +-Tplayer player; ++extern Tplayer player; + + // functions + void draw_player(BITMAP *bmp, Tplayer *p, int x, int y); + void wound_player(Tplayer *p); + void kill_player(Tplayer *p); + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/script.c b/src/script.c +index 5efb139..8ef1d51 100644 +--- a/src/script.c ++++ b/src/script.c +@@ -33,9 +33,11 @@ + // silly value + #define NO_CHANGE -3249587 + ++// array holding the sounds ids ++int active_sounds[MAX_SCRIPT_SOUNDS]; + +-// datafile to use +-DATAFILE *data; ++// scriptdatafile to use ++DATAFILE *scriptdata; + // internal buffers + BITMAP *buffer; + BITMAP *swap_buffer; +@@ -55,7 +57,7 @@ void draw_speak_bulb(BITMAP *bmp, DATAFILE *d, int src_x, int src_y, int up, int + + // get max text length + for(i = 0; i < lines; i ++) { +- int len = text_length(d[THE_FONT].dat, rows[i]); ++ int len = text_length((FONT*)d[THE_FONT].dat, rows[i]); + if (max_w < len) max_w = len; + } + +@@ -80,16 +82,16 @@ void draw_speak_bulb(BITMAP *bmp, DATAFILE *d, int src_x, int src_y, int up, int + line(bmp, x1 + 4, y2, x2 - 4, y2, 1); + line(bmp, x2+1, y1 + 4, x2+1, y2 - 4, 1); + line(bmp, x1 + 4, y2+1, x2 - 4, y2+1, 1); +- draw_sprite(bmp, d[BULB_TL].dat, x1, y1); +- draw_sprite(bmp, d[BULB_BL].dat, x1, y2 - 5); +- draw_sprite(bmp, d[BULB_TR].dat, x2 - 5, y1); +- draw_sprite(bmp, d[BULB_BR].dat, x2 - 5, y2 - 5); ++ draw_sprite(bmp, (BITMAP*)d[BULB_TL].dat, x1, y1); ++ draw_sprite(bmp, (BITMAP*)d[BULB_BL].dat, x1, y2 - 5); ++ draw_sprite(bmp, (BITMAP*)d[BULB_TR].dat, x2 - 5, y1); ++ draw_sprite(bmp, (BITMAP*)d[BULB_BR].dat, x2 - 5, y2 - 5); + if (arrow) +- draw_sprite(bmp, d[(left ? (up ? BULBA_TL : BULBA_BL) : (up ? BULBA_TR : BULBA_BR))].dat, xa, ya); ++ draw_sprite(bmp, (BITMAP*)d[(left ? (up ? BULBA_TL : BULBA_BL) : (up ? BULBA_TR : BULBA_BR))].dat, xa, ya); + + // draw text + for(i = 0; i < lines; i ++) { +- textout(bmp, d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1); ++ textout(bmp, (FONT*)d[THE_FONT].dat, rows[i], x1 + 4, y1 + 5 + i * 9, 1); + } + } + +@@ -144,7 +146,7 @@ int set_object(char *name, int x, int y, int dir) { + + // create new if not found + if (o == NULL) { +- o = malloc(sizeof(Tscript_object)); ++ o = (Tscript_object*)malloc(sizeof(Tscript_object)); + if (o == NULL) return 0; + new_object = 1; + o->x = 0; +@@ -162,31 +164,31 @@ int set_object(char *name, int x, int y, int dir) { + + // set bitmap + if (!stricmp(name, "helicopter")) { +- o->bmp[0] = data[CHOPPER1].dat; +- o->bmp[1] = data[CHOPPER2].dat; +- o->bmp[2] = data[CHOPPER3].dat; +- o->bmp[3] = data[CHOPPER4].dat; ++ o->bmp[0] = (BITMAP*)scriptdata[CHOPPER1].dat; ++ o->bmp[1] = (BITMAP*)scriptdata[CHOPPER2].dat; ++ o->bmp[2] = (BITMAP*)scriptdata[CHOPPER3].dat; ++ o->bmp[3] = (BITMAP*)scriptdata[CHOPPER4].dat; + o->frames = 4; + } +- else if (!stricmp(name, "cage1")) o->bmp[0] = data[CAGE_SML1].dat; +- else if (!stricmp(name, "cage2")) o->bmp[0] = data[CAGE_BIG].dat; +- else if (!stricmp(name, "cage3")) o->bmp[0] = data[CAGE_SML2].dat; +- else if (!stricmp(name, "chain")) o->bmp[0] = data[CHAIN].dat; +- else if (!stricmp(name, "lola")) o->bmp[0] = data[LOLA].dat; +- else if (!stricmp(name, "alex")) o->bmp[0] = data[ALEX].dat; +- else if (!stricmp(name, "ufo")) o->bmp[0] = data[UFO_BIG].dat; +- else if (!stricmp(name, "ufo0")) o->bmp[0] = data[UFO0].dat; +- else if (!stricmp(name, "ufo1")) o->bmp[0] = data[UFO1].dat; +- else if (!stricmp(name, "beam")) o->bmp[0] = data[UFOBEAM].dat; +- else if (!stricmp(name, "ship0")) o->bmp[0] = data[SHIP0].dat; +- else if (!stricmp(name, "ship1")) o->bmp[0] = data[SHIP1].dat; +- else if (!stricmp(name, "ball")) o->bmp[0] = data[HERO_BALL].dat; +- else if (!strncmp(name, "drumcan", 7)) o->bmp[0] = data[DRUMCAN].dat; ++ else if (!stricmp(name, "cage1")) o->bmp[0] = (BITMAP*)scriptdata[CAGE_SML1].dat; ++ else if (!stricmp(name, "cage2")) o->bmp[0] = (BITMAP*)scriptdata[CAGE_BIG].dat; ++ else if (!stricmp(name, "cage3")) o->bmp[0] = (BITMAP*)scriptdata[CAGE_SML2].dat; ++ else if (!stricmp(name, "chain")) o->bmp[0] = (BITMAP*)scriptdata[CHAIN].dat; ++ else if (!stricmp(name, "lola")) o->bmp[0] = (BITMAP*)scriptdata[LOLA].dat; ++ else if (!stricmp(name, "alex")) o->bmp[0] = (BITMAP*)scriptdata[ALEX].dat; ++ else if (!stricmp(name, "ufo")) o->bmp[0] = (BITMAP*)scriptdata[UFO_BIG].dat; ++ else if (!stricmp(name, "ufo0")) o->bmp[0] = (BITMAP*)scriptdata[UFO0].dat; ++ else if (!stricmp(name, "ufo1")) o->bmp[0] = (BITMAP*)scriptdata[UFO1].dat; ++ else if (!stricmp(name, "beam")) o->bmp[0] = (BITMAP*)scriptdata[UFOBEAM].dat; ++ else if (!stricmp(name, "ship0")) o->bmp[0] = (BITMAP*)scriptdata[SHIP0].dat; ++ else if (!stricmp(name, "ship1")) o->bmp[0] = (BITMAP*)scriptdata[SHIP1].dat; ++ else if (!stricmp(name, "ball")) o->bmp[0] = (BITMAP*)scriptdata[HERO_BALL].dat; ++ else if (!strncmp(name, "drumcan", 7)) o->bmp[0] = (BITMAP*)scriptdata[DRUMCAN].dat; + else o->bmp[0] = NULL; + + // rearrange pointers + if (new_object) { +- o->next = (struct Tscript_object *)objects; ++ o->next = (Tscript_object *)objects; + objects = o; + } + +@@ -202,7 +204,7 @@ int set_line(char *name, Tscript_object *src, int sx, int sy, Tscript_object *ds + + // create new if not found + if (o == NULL) { +- o = malloc(sizeof(Tscript_object)); ++ o = (Tscript_object*)malloc(sizeof(Tscript_object)); + if (o == NULL) return 0; + new_object = 1; + o->line = 1; +@@ -289,7 +291,7 @@ void cmd_showbmp(char *name) { + blit(buffer, swap_buffer, 0, 0, 0, 0, 160, 120); + } + else if (!stricmp(name, "treetops")) { +- blit(data[INTRO_BG].dat, swap_buffer, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)scriptdata[INTRO_BG].dat, swap_buffer, 0, 0, 0, 0, 160, 120); + } + else if (!stricmp(name, "darkness")) { + clear_to_color(swap_buffer, 2); +@@ -340,7 +342,7 @@ void cmd_speak(Ttoken *t, int arrow) { + t = (Ttoken *)t->next; + } + +- draw_speak_bulb(swap_buffer, data, sx, sy, up, left, lines, rows, arrow); ++ draw_speak_bulb(swap_buffer, scriptdata, sx, sy, up, left, lines, rows, arrow); + } + + +@@ -581,8 +583,8 @@ int run_script(char *script, DATAFILE *d) { + Ttoken *token; + int i; + +- // set datafile +- data = d; ++ // set scriptdatafile ++ scriptdata = d; + + clear_keybuf(); + +diff --git a/src/script.h b/src/script.h +index d025b6c..b1d1d0e 100644 +--- a/src/script.h ++++ b/src/script.h +@@ -26,7 +26,7 @@ + + + // struct holding script data +-typedef struct { ++typedef struct Tscript_object { + char name[16]; + int x, y, vx, vy; // position and velocity + BITMAP *bmp[4]; +@@ -37,12 +37,12 @@ typedef struct { + struct Tscript_object *line_to; + + struct Tscript_object *next; +-} Tscript_object; ++}; + + // max number of sounds played by the script + #define MAX_SCRIPT_SOUNDS 16 + // array holding the sounds ids +-int active_sounds[MAX_SCRIPT_SOUNDS]; ++extern int active_sounds[MAX_SCRIPT_SOUNDS]; + + + // functions +@@ -51,4 +51,4 @@ void draw_speak_bulb(BITMAP *bmp, DATAFILE *d, int src_x, int src_y, int up, int + + + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/scroller.h b/src/scroller.h +index b31e521..b5144f7 100644 +--- a/src/scroller.h ++++ b/src/scroller.h +@@ -51,4 +51,4 @@ void restart_scroller(Tscroller *sc); + + + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/shooter.c b/src/shooter.c +index 3193d5d..e906823 100644 +--- a/src/shooter.c ++++ b/src/shooter.c +@@ -239,8 +239,7 @@ Tshooter_event s_level[] = { + + // 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) { +@@ -339,9 +338,9 @@ static void s_start_music(int startorder) { + void s_draw_object(BITMAP *bmp, Tspace_object *o) { + if (o->type != SO_EXPLOSION) { + if (!o->hit || o->type == SO_PLAYER_BULLET) +- draw_sprite(bmp, s_data[o->image].dat, (int)o->x, (int)o->y); ++ draw_sprite(bmp, (BITMAP*)s_data[o->image].dat, (int)o->x, (int)o->y); + else +- draw_character(bmp, s_data[o->image].dat, (int)o->x, (int)o->y, 4); ++ draw_character(bmp, (BITMAP*)s_data[o->image].dat, (int)o->x, (int)o->y, 4); + } + else { + int c = (o->energy + 8) >> 3; +@@ -362,15 +361,15 @@ void s_draw_status_bar(BITMAP *bmp, int x, int y) { + int padding; + + // draw bar +- blit(s_data[STATUSBAR].dat, bmp, 0, 0, 0, 109, 160, 11); ++ blit((BITMAP*)s_data[STATUSBAR].dat, bmp, 0, 0, 0, 109, 160, 11); + + // draw lives + for(i = 0; i < s_var.lives; i ++) +- draw_sprite(bmp, s_data[ST_LIFE].dat, x + 3 + i * 8, y + 3); ++ draw_sprite(bmp, (BITMAP*)s_data[ST_LIFE].dat, x + 3 + i * 8, y + 3); + + // draw stars + for(i = 0; i < 5; i ++) +- draw_sprite(bmp, s_data[(i < s_var.power_gauge ? ST_STAR_ON : ST_STAR_OFF)].dat, x + 36 + i * 8, y + 3); ++ draw_sprite(bmp, (BITMAP*)s_data[(i < s_var.power_gauge ? ST_STAR_ON : ST_STAR_OFF)].dat, x + 36 + i * 8, y + 3); + + // draw score + sprintf(score_str, "%d", s_var.show_score); +@@ -379,8 +378,8 @@ void s_draw_status_bar(BITMAP *bmp, int x, int y) { + padding_str[i] = '0'; + padding_str[i] = '\0'; + strcat(padding_str, score_str); +- textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 3, "%s", padding_str); +- if (s_var.score) textprintf_right(bmp, s_data[SPACE_FONT].dat, x + 160, y + 2, 4, "%s", score_str); ++ textprintf_right(bmp, (FONT*)s_data[SPACE_FONT].dat, x + 160, y + 2, 3, "%s", padding_str); ++ if (s_var.score) textprintf_right(bmp, (FONT*)s_data[SPACE_FONT].dat, x + 160, y + 2, 4, "%s", score_str); + } + + +@@ -388,8 +387,8 @@ void s_draw_frame(BITMAP *bmp) { + int i; + + // blit bg +- blit(s_data[BG1].dat, bmp, 0, 0, -(game_count % 160), 0, 160, 120); +- blit(s_data[BG1].dat, bmp, 0, 0, 160 - (game_count % 160), 0, 160, 120); ++ blit((BITMAP*)s_data[BG1].dat, bmp, 0, 0, -(game_count % 160), 0, 160, 120); ++ blit((BITMAP*)s_data[BG1].dat, bmp, 0, 0, 160 - (game_count % 160), 0, 160, 120); + + // draw stars + for(i = 0; i < 64; i ++) +@@ -512,8 +511,8 @@ void s_update_object(Tspace_object *o) { + if (o->x > o->d1) { + o->x += o->vx; + o->t = 0; +- o->ty = o->y; +- o->tx = o->x; ++ o->ty = (int)o->y; ++ o->tx = (int)o->x; + } + else { + o->y = o->ty + fixtoi(fmul(ftofix(o->vy), fsin(itofix(o->t)))); +@@ -826,7 +825,7 @@ void s_check_collision(Tspace_object *array_a, int num_a, Tspace_object *array_b + for(b = 0; b < num_b; b ++) { + if (array_b[b].alive && !array_b[b].hit) { + // do bb collision +- if (s_check_pp_collision(s_data[array_a[a].image].dat, s_data[array_b[b].image].dat, ++ if (s_check_pp_collision((BITMAP*)s_data[array_a[a].image].dat, (BITMAP*)s_data[array_b[b].image].dat, + (int)array_a[a].x, (int)array_a[a].y, + (int)array_b[b].x, (int)array_b[b].y)) { + +@@ -1097,14 +1096,14 @@ void s_activate_sign(int game_over, double vy) { + // the player can enter his/hers name + void s_get_player_name(char *name) { + clear_to_color(s_buffer, 1); +- blit(s_data[BG1].dat, s_buffer, 0, 0, 0, 0, 160, 120); ++ blit((BITMAP*)s_data[BG1].dat, s_buffer, 0, 0, 0, 0, 160, 120); + textout_outline_center(s_buffer, "Congratulations,", 80, 8); + textout_outline_center(s_buffer, "You've got", 80, 19); + textout_outline_center(s_buffer, "a high score!", 80, 30); + textout_outline_center(s_buffer, "Enter your name:", 80, 55); + blit_to_screen(s_buffer); + fade_in_pal_black(100, s_dp); +- get_string(s_buffer, name, 10, s_data[SPACE_FONT].dat, 50, 80, 4, s_var.ctrl); ++ get_string(s_buffer, name, 10, (FONT*)s_data[SPACE_FONT].dat, 50, 80, 4, s_var.ctrl); + } + + // runs the shooter +diff --git a/src/shooter.h b/src/shooter.h +index 41a07a6..b8025bf 100644 +--- a/src/shooter.h ++++ b/src/shooter.h +@@ -118,4 +118,4 @@ typedef struct { + int start_shooter(Tcontrol *c, int with_sound); + + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/timer.c b/src/timer.c +index 8bade02..bad6514 100644 +--- a/src/timer.c ++++ b/src/timer.c +@@ -23,6 +23,13 @@ + #include "allegro.h" + #include "timer.h" + ++volatile int frame_count; ++volatile int fps; ++volatile int logic_count; ++volatile int lps; ++volatile int cycle_count; ++volatile int game_count; ++ + // keeps track of frames each second + void fps_counter(void) { + fps = frame_count; +@@ -60,4 +67,4 @@ int install_timers() { + game_count ++; + + return TRUE; +-} +\ No newline at end of file ++} +diff --git a/src/timer.h b/src/timer.h +index 4fcc481..5bf7ab5 100644 +--- a/src/timer.h ++++ b/src/timer.h +@@ -24,12 +24,12 @@ + #define _TIMERS_H_ + + // the variables used by the timers +-volatile int frame_count; +-volatile int fps; +-volatile int logic_count; +-volatile int lps; +-volatile int cycle_count; +-volatile int game_count; ++extern volatile int frame_count; ++extern volatile int fps; ++extern volatile int logic_count; ++extern volatile int lps; ++extern volatile int cycle_count; ++extern volatile int game_count; + + + // functions +@@ -37,4 +37,4 @@ int install_timers(); + void fps_counter(void); + void cycle_counter(void); + +-#endif +\ No newline at end of file ++#endif +diff --git a/src/token.c b/src/token.c +index 1d95975..e2528d7 100644 +--- a/src/token.c ++++ b/src/token.c +@@ -33,7 +33,7 @@ + + // creates a new token + Ttoken *create_token(char *word) { +- Ttoken *tok = malloc(sizeof(Ttoken)); ++ Ttoken *tok = (Ttoken*)malloc(sizeof(Ttoken)); + if (tok != NULL) { + tok->word = strdup(word); + tok->next = NULL; +diff --git a/src/token.h b/src/token.h +index d8634f1..707855e 100644 +--- a/src/token.h ++++ b/src/token.h +@@ -25,7 +25,7 @@ + + + // the struct for a token +-typedef struct { ++typedef struct Ttoken { + char *word; + struct Ttoken *next; + } Ttoken; +@@ -41,4 +41,4 @@ char *get_next_word(Ttoken *t); + Ttoken *tokenize(char *str); + + +-#endif +\ No newline at end of file ++#endif +-- +2.21.0 + + +From 773d561c9d3d89448631ae6f853bb67cc28c34e3 Mon Sep 17 00:00:00 2001 +From: Jerome Duval +Date: Sun, 12 May 2019 15:14:44 +0200 +Subject: replace fsin,fmul,fcos with fixsin,fixmul,fixcos + + +diff --git a/src/main.c b/src/main.c +index cec8bc6..662f9d1 100644 +--- a/src/main.c ++++ b/src/main.c +@@ -1161,9 +1161,9 @@ void draw_custom_ending(BITMAP *bmp) { + + blit((BITMAP*)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, (BITMAP*)data[ALEX].dat, 60, 40); + draw_sprite(bmp, (BITMAP*)data[LOLA].dat, 84, 40); +@@ -2488,7 +2488,7 @@ void draw_title(BITMAP *bmp, int tick) { + textout(bmp, (FONT*)data[THE_FONT].dat, "QUIT", x+1, y+1, 1); + textout(bmp, (FONT*)data[THE_FONT].dat, "QUIT", x, y, 4); + +- draw_sprite(bmp, (BITMAP*)data[POINTER].dat, x - 25 + fixtoi(3 * fcos(itofix(tick << 2))), 44 + menu_choice * step); ++ draw_sprite(bmp, (BITMAP*)data[POINTER].dat, x - 25 + fixtoi(3 * fixcos(itofix(tick << 2))), 44 + menu_choice * step); + } + + +diff --git a/src/shooter.c b/src/shooter.c +index e906823..6005406 100644 +--- a/src/shooter.c ++++ b/src/shooter.c +@@ -499,12 +499,12 @@ void s_update_object(Tspace_object *o) { + break; + case SM_SIN_WAVE: + o->x += o->vx; +- o->y = o->d2 + fixtoi(fmul(ftofix(o->vy), fsin(itofix(o->t)))); ++ o->y = o->d2 + fixtoi(fixmul(ftofix(o->vy), fixsin(itofix(o->t)))); + o->t += o->d1; + break; + case SM_COS_WAVE: + o->x += o->vx; +- o->y = o->d2 + fixtoi(fmul(ftofix(o->vy), fcos(itofix(o->t)))); ++ o->y = o->d2 + fixtoi(fixmul(ftofix(o->vy), fixcos(itofix(o->t)))); + o->t += o->d1; + break; + case SM_BOSS_1: +@@ -515,8 +515,8 @@ void s_update_object(Tspace_object *o) { + o->tx = (int)o->x; + } + else { +- o->y = o->ty + fixtoi(fmul(ftofix(o->vy), fsin(itofix(o->t)))); +- o->x = o->tx - fixtoi(10 * fsin(itofix(o->t >> 1))); ++ o->y = o->ty + fixtoi(fixmul(ftofix(o->vy), fixsin(itofix(o->t)))); ++ o->x = o->tx - fixtoi(10 * fixsin(itofix(o->t >> 1))); + o->t ++; + } + break; +@@ -572,7 +572,7 @@ void s_update_object(Tspace_object *o) { + else if (o->image == ENEMY15) { + int i; + for(i = 0; i < 256; i += 32) +- s_make_enemy_bullet((int)o->x + o->bw / 2, (int)o->y + o->bh, fixtof(1 * fcos(itofix(i - 6))), fixtof(1 * fsin(itofix(i - 6)))); ++ s_make_enemy_bullet((int)o->x + o->bw / 2, (int)o->y + o->bh, fixtof(1 * fixcos(itofix(i - 6))), fixtof(1 * fixsin(itofix(i - 6)))); + o->fire_counter = 200 + rand()%50; + } + +-- +2.21.0 +