From: Holger Schemel Date: Sun, 16 Feb 2020 20:58:41 +0000 (+0100) Subject: cleanup of some source files and functions for EM engine X-Git-Tag: 4.2.0.0~108 X-Git-Url: https://git.artsoft.org/?p=rocksndiamonds.git;a=commitdiff_plain;h=41759a7c6f2280ab6895fbee41d616a2864c9a18 cleanup of some source files and functions for EM engine --- diff --git a/src/Android.mk b/src/Android.mk index 89a7e34f..7d5c7bdc 100644 --- a/src/Android.mk +++ b/src/Android.mk @@ -55,7 +55,7 @@ LOCAL_SRC_FILES := $(SDL_PATH)/src/main/android/SDL_android_main.c \ game_em/convert.c \ game_em/graphics.c \ game_em/init.c \ - game_em/input.c \ + game_em/game.c \ game_em/logic.c \ game_em/reademc.c \ game_sp/init.c \ diff --git a/src/game_em/Makefile b/src/game_em/Makefile index c8080a51..4c4c9808 100644 --- a/src/game_em/Makefile +++ b/src/game_em/Makefile @@ -20,7 +20,7 @@ SRCS = cave.c \ convert.c \ graphics.c \ init.c \ - input.c \ + game.c \ logic.c \ reademc.c @@ -28,7 +28,7 @@ OBJS = cave.o \ convert.o \ graphics.o \ init.o \ - input.o \ + game.o \ logic.o \ reademc.o diff --git a/src/game_em/game.c b/src/game_em/game.c new file mode 100644 index 00000000..fd344add --- /dev/null +++ b/src/game_em/game.c @@ -0,0 +1,151 @@ +/* 2007-11-06 03:39:32 + * + * handle interaction between screen and cave + */ + +#include "main_em.h" + + +struct CAVE cav; +struct LOGIC lev; +struct PLAYER ply[MAX_PLAYERS]; + +struct EngineSnapshotInfo_EM engine_snapshot_em; + +/* handle input actions for players */ + +static void readjoy(byte action, struct PLAYER *ply) +{ + int north = 0, east = 0, south = 0, west = 0; + int snap = 0, drop = 0; + + if (game_em.use_single_button && action & (JOY_BUTTON_1 | JOY_BUTTON_2)) + action |= JOY_BUTTON_1 | JOY_BUTTON_2; + + if (action & JOY_LEFT) + west = 1; + + if (action & JOY_RIGHT) + east = 1; + + if (action & JOY_UP) + north = 1; + + if (action & JOY_DOWN) + south = 1; + + if (action & JOY_BUTTON_1) + snap = 1; + + if (action & JOY_BUTTON_2) + drop = 1; + + /* always update drop action */ + ply->joy_drop = drop; + + if (ply->joy_stick || (north | east | south | west)) /* (no "| snap"!) */ + { + ply->joy_n = north; + ply->joy_e = east; + ply->joy_s = south; + ply->joy_w = west; + + /* when storing last action, only update snap action with direction */ + /* (prevents clearing direction if snapping stopped before frame 7) */ + ply->joy_snap = snap; + } + + /* if no direction was stored before, allow setting snap to current state */ + if (!ply->joy_n && + !ply->joy_e && + !ply->joy_s && + !ply->joy_w) + ply->joy_snap = snap; + + /* use bug with snap key (mainly TAS keys) sometimes moving the player */ + if (game_em.use_snap_key_bug) + ply->joy_snap = snap; +} + +void InitGameEngine_EM(void) +{ + prepare_em_level(); + + game_initscreen(); + + RedrawPlayfield_EM(FALSE); +} + +static void UpdateGameDoorValues_EM(void) +{ +} + +void GameActions_EM(byte action[MAX_PLAYERS], boolean warp_mode) +{ + int i; + boolean any_player_dropping = FALSE; + + game_em.random = game_em.random * 129 + 1; + + frame = (frame - 1) & 7; + + for (i = 0; i < MAX_PLAYERS; i++) + readjoy(action[i], &ply[i]); + + UpdateEngineValues(screen_x / TILEX, screen_y / TILEY, ply[0].x, ply[0].y); + + if (frame == 7) + { + logic_players(); + logic_objects(); + } + + if (frame == 6) + { + logic_globals(); + + UpdateGameDoorValues_EM(); + } + + for (i = 0; i < MAX_PLAYERS; i++) + if (ply[i].joy_drop && + ply[i].dynamite && + ply[i].dynamite_cnt > 0 && + ply[i].dynamite_cnt < 5) + any_player_dropping = TRUE; + + CheckSingleStepMode_EM(action, frame, game_em.any_player_moving, + game_em.any_player_snapping, any_player_dropping); + + RedrawPlayfield_EM(FALSE); +} + +void SaveEngineSnapshotValues_EM(void) +{ + int i; + + engine_snapshot_em.game_em = game_em; + engine_snapshot_em.lev = lev; + + engine_snapshot_em.frame = frame; + engine_snapshot_em.screen_x = screen_x; + engine_snapshot_em.screen_y = screen_y; + + for (i = 0; i < 4; i++) + engine_snapshot_em.ply[i] = ply[i]; +} + +void LoadEngineSnapshotValues_EM(void) +{ + int i; + + game_em = engine_snapshot_em.game_em; + lev = engine_snapshot_em.lev; + + frame = engine_snapshot_em.frame; + screen_x = engine_snapshot_em.screen_x; + screen_y = engine_snapshot_em.screen_y; + + for (i = 0; i < 4; i++) + ply[i] = engine_snapshot_em.ply[i]; +} diff --git a/src/game_em/global.h b/src/game_em/global.h index 00b190c6..34238421 100644 --- a/src/game_em/global.h +++ b/src/game_em/global.h @@ -12,8 +12,6 @@ extern int screen_x, screen_y; /* global function prototypes */ -void readjoy(byte, struct PLAYER *); - void game_initscreen(void); void game_init_random(void); void game_init_cave_buffers(void); diff --git a/src/game_em/init.c b/src/game_em/init.c index 8be34d40..d08d8db1 100644 --- a/src/game_em/init.c +++ b/src/game_em/init.c @@ -1,6 +1,6 @@ -/* 2000-08-10T18:03:54Z +/* 2000-01-06 06:43:39 * - * open X11 display and sound + * set everything up and close everything down */ #include "main_em.h" @@ -18,6 +18,37 @@ void InitGfxBuffers_EM(void) global_em_info.screenbuffer = screenBitmap; } +void game_init_random(void) +{ + game_em.random = 1684108901; /* what a nice seed */ +} + +void game_init_cave_buffers(void) +{ + int x, y; + + for (x = 0; x < CAVE_BUFFER_WIDTH; x++) + { + for (y = 0; y < CAVE_BUFFER_HEIGHT; y++) + { + lev.cavebuf[x][y] = Zborder; + lev.nextbuf[x][y] = Zborder; + lev.drawbuf[x][y] = Zborder; + lev.boombuf[x][y] = Xblank; + } + + lev.cavecol[x] = lev.cavebuf[x]; + lev.nextcol[x] = lev.nextbuf[x]; + lev.drawcol[x] = lev.drawbuf[x]; + lev.boomcol[x] = lev.boombuf[x]; + } + + lev.cave = lev.cavecol; + lev.next = lev.nextcol; + lev.draw = lev.drawcol; + lev.boom = lev.boomcol; +} + void em_open_all(void) { InitGraphicInfo_EM(); @@ -30,8 +61,6 @@ void em_close_all(void) { } -/* ---------------------------------------------------------------------- */ - void play_element_sound(int x, int y, int sample, int element) { PlayLevelSound_EM(x, y, element, sample); diff --git a/src/game_em/input.c b/src/game_em/input.c deleted file mode 100644 index 6eadbbdf..00000000 --- a/src/game_em/input.c +++ /dev/null @@ -1,188 +0,0 @@ -/* 2000-08-13T15:29:40Z - * - * handle input from x11 and keyboard and joystick - */ - -#include "main_em.h" - - -struct CAVE cav; -struct LOGIC lev; -struct PLAYER ply[MAX_PLAYERS]; - -struct EngineSnapshotInfo_EM engine_snapshot_em; - -void game_init_random(void) -{ - game_em.random = 1684108901; -} - -void game_init_cave_buffers(void) -{ - int x, y; - - for (y = 0; y < CAVE_BUFFER_HEIGHT; y++) - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.cavebuf[x][y] = Zborder; - for (y = 0; y < CAVE_BUFFER_HEIGHT; y++) - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.nextbuf[x][y] = Zborder; - for (y = 0; y < CAVE_BUFFER_HEIGHT; y++) - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.drawbuf[x][y] = Zborder; - for (y = 0; y < CAVE_BUFFER_HEIGHT; y++) - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.boombuf[x][y] = Xblank; - - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.cavecol[x] = lev.cavebuf[x]; - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.nextcol[x] = lev.nextbuf[x]; - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.drawcol[x] = lev.drawbuf[x]; - for (x = 0; x < CAVE_BUFFER_WIDTH; x++) - lev.boomcol[x] = lev.boombuf[x]; - - lev.cave = lev.cavecol; - lev.next = lev.nextcol; - lev.draw = lev.drawcol; - lev.boom = lev.boomcol; -} - -void InitGameEngine_EM(void) -{ - prepare_em_level(); - - game_initscreen(); - - RedrawPlayfield_EM(FALSE); -} - -static void UpdateGameDoorValues_EM(void) -{ -} - -void GameActions_EM(byte action[MAX_PLAYERS], boolean warp_mode) -{ - int i; - boolean any_player_dropping = FALSE; - - game_em.random = game_em.random * 129 + 1; - - frame = (frame - 1) & 7; - - for (i = 0; i < MAX_PLAYERS; i++) - readjoy(action[i], &ply[i]); - - UpdateEngineValues(screen_x / TILEX, screen_y / TILEY, ply[0].x, ply[0].y); - - if (frame == 7) - { - logic_players(); - logic_objects(); - } - - if (frame == 6) - { - logic_globals(); - - UpdateGameDoorValues_EM(); - } - - for (i = 0; i < MAX_PLAYERS; i++) - if (ply[i].joy_drop && - ply[i].dynamite && - ply[i].dynamite_cnt > 0 && - ply[i].dynamite_cnt < 5) - any_player_dropping = TRUE; - - CheckSingleStepMode_EM(action, frame, game_em.any_player_moving, - game_em.any_player_snapping, any_player_dropping); - - RedrawPlayfield_EM(FALSE); -} - -/* read input device for players */ - -void readjoy(byte action, struct PLAYER *ply) -{ - int north = 0, east = 0, south = 0, west = 0; - int snap = 0, drop = 0; - - if (game_em.use_single_button && action & (JOY_BUTTON_1 | JOY_BUTTON_2)) - action |= JOY_BUTTON_1 | JOY_BUTTON_2; - - if (action & JOY_LEFT) - west = 1; - - if (action & JOY_RIGHT) - east = 1; - - if (action & JOY_UP) - north = 1; - - if (action & JOY_DOWN) - south = 1; - - if (action & JOY_BUTTON_1) - snap = 1; - - if (action & JOY_BUTTON_2) - drop = 1; - - /* always update drop action */ - ply->joy_drop = drop; - - if (ply->joy_stick || (north | east | south | west)) /* (no "| snap"!) */ - { - ply->joy_n = north; - ply->joy_e = east; - ply->joy_s = south; - ply->joy_w = west; - - /* when storing last action, only update snap action with direction */ - /* (prevents clearing direction if snapping stopped before frame 7) */ - ply->joy_snap = snap; - } - - /* if no direction was stored before, allow setting snap to current state */ - if (!ply->joy_n && - !ply->joy_e && - !ply->joy_s && - !ply->joy_w) - ply->joy_snap = snap; - - /* use bug with snap key (mainly TAS keys) sometimes moving the player */ - if (game_em.use_snap_key_bug) - ply->joy_snap = snap; -} - -void SaveEngineSnapshotValues_EM(void) -{ - int i; - - engine_snapshot_em.game_em = game_em; - engine_snapshot_em.lev = lev; - - engine_snapshot_em.frame = frame; - engine_snapshot_em.screen_x = screen_x; - engine_snapshot_em.screen_y = screen_y; - - for (i = 0; i < 4; i++) - engine_snapshot_em.ply[i] = ply[i]; -} - -void LoadEngineSnapshotValues_EM(void) -{ - int i; - - game_em = engine_snapshot_em.game_em; - lev = engine_snapshot_em.lev; - - frame = engine_snapshot_em.frame; - screen_x = engine_snapshot_em.screen_x; - screen_y = engine_snapshot_em.screen_y; - - for (i = 0; i < 4; i++) - ply[i] = engine_snapshot_em.ply[i]; -}