diff --git a/bin/Murk.exe b/bin/Murk.exe index 6b9f72f..ffb7b85 100644 Binary files a/bin/Murk.exe and b/bin/Murk.exe differ diff --git a/src/Murk.cpp b/src/Murk.cpp index 8dad250..2588a10 100644 --- a/src/Murk.cpp +++ b/src/Murk.cpp @@ -43,6 +43,8 @@ int mousestate; char serverscreen[100]; +int mademove = 0; + BOOL check_joystick(int fire); void check_input(); void check_keys(); @@ -835,42 +837,7 @@ void OnTimer() { // /////////////////////////////////////////////////////////// -inline void display_dungeon(int player) { - CONST int XADJUST = 49; - CONST int YADJUST = 25; - - int x, y, startxreset, startyreset; - - BOOL mademove = FALSE; - - int level; - int i; - int work1; - int work2; - int lvlnum; - char response[10]; - int final; - int monstershoot; - int restmonster; - int loop; - int rand; - BOOL endgame; - int recu1, recu2, recl1, recl2; - int savecurrent; - BOOL resultOK; - - endgame = FALSE; - - startx = 930; - starty = -200; - startxreset = startx; - startyreset = starty - 100; - - startx = 530; - starty = -100; - startxreset = 530; - startyreset = -200; - +BOOL check_game_status() { if (!networkserver) { pDirDraw->ClearSurface(BACKBUFFERNUM); if (sharewarelevel >= 6 && shareware) { @@ -881,7 +848,7 @@ inline void display_dungeon(int player) { pDirDraw->FlipToGDISurface(); UINT resultclick = MessageBox(hWindow, "Thank You for Playing Murk Shareware.\nPlease Register at http://www.murk.on.ca", "Murk Shareware", MB_OK); PostMessage(hWindow, WM_CLOSE, 0, 0L); - return; + return FALSE; } } @@ -893,16 +860,19 @@ inline void display_dungeon(int player) { pDirDraw->FlipToGDISurface(); UINT resultclick = MessageBox(hWindow, "You are running an OLD version.\nPlease Vist http://www.murk.on.ca\nFor the latest Version.", "Update Your Version\nA purchased Registration key will work on Updates.", MB_OK); PostMessage(hWindow, WM_CLOSE, 0, 0L); - return; + return FALSE; } - level = PlayerLocation[camera].level; - for (i = 1; i <= NumPlayers; i++) - PlayerLocation[i].moved = 0; + return TRUE; +} - for (y = 0; y < DUNGEONY + 1; y++) { - for (x = 0; x < DUNGEONX + 1; x++) { - if (dungeon[x][y][level].type == 'f' && dungeon[x][y][level].explored == 1 || dungeon[x][y][level].type == 's' && dungeon[x][y][level].explored == 1) { +void draw_dungeon_cell(int x, int y, int level, int startx, int starty) { + int lvlnum; + char response[10]; + int final; + int recu1, recu2, recl1, recl2; + BOOL resultOK; + if (dungeon[x][y][level].type == 'f' && dungeon[x][y][level].explored == 1 || dungeon[x][y][level].type == 's' && dungeon[x][y][level].explored == 1) { lvlnum = level; strcpy(response, ""); if (dungeon[x - 1][y][lvlnum].type == 'f' || dungeon[x - 1][y][lvlnum].type == 's') { @@ -1034,94 +1004,126 @@ inline void display_dungeon(int player) { break; } } - } - if (dungeon[x][y][level].type == 's' && dungeon[x][y][level].explored == 1) { - if (dungeon[x][y][level].item == 1) { - if (!networkserver) - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), - partsBSurfaceNum, &CRect(224, 0, 336, 97)); - } else { - /*down*/ - if (!networkserver) - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), - partsBSurfaceNum, &CRect(112, 0, 224, 97)); - } - } - if (dungeon[x][y][level].item == 'c' && dungeon[x][y][level].explored == 1 && !networkserver) { - if (dungeon[x][y][level].image == 0) { - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(113, 294, 225, 391)); - } else if (dungeon[x][y][level].image == 1) { - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(113 + 112 + 112, 294, 225 + 112 + 112, 391)); - } else if (dungeon[x][y][level].image == 2) { - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(113 + 112 + 112 + 112, 294, 225 + 112 + 112 + 112, 391)); - } else if (dungeon[x][y][level].image == 3) { - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(113 + 112 + 112 + 112 + 112, 294, 225 + 112 + 112 + 112 + 112, 391)); - } else if (dungeon[x][y][level].image == 4) { - resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(224, 294, 337, 391)); - } - } + } + if (dungeon[x][y][level].type == 's' && dungeon[x][y][level].explored == 1) { + if (dungeon[x][y][level].item == 1) { + if (!networkserver) + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), + partsBSurfaceNum, &CRect(224, 0, 336, 97)); + } else { + /*down*/ + if (!networkserver) + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), + partsBSurfaceNum, &CRect(112, 0, 224, 97)); + } + } +} - if (dungeon[x][y][level].item == 'e' && dungeon[x][y][level].explored == 1) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(226, 490, 338, 587)); - } - if (dungeon[x][y][level].item == 's' && dungeon[x][y][level].explored == 1) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, - &CRect(565, 0, 565 + 113, 97)); - } - if (dungeon[x][y][level].item == 'r' && dungeon[x][y][level].explored == 1) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, - &CRect(678, 0, 678 + 113, 97)); - } - if (dungeon[x][y][level].item == 'a' && dungeon[x][y][level].explored == 1) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, - &CRect(224 + 113 + 113, 0, 449 + 113, 97)); - } - if (x == treasurex && y == treasurey && level == treasurelvl && dungeon[x][y][level].explored == 1 && foundtreasure == 0) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(0, 294, 112, 391)); - } - if (x == treasurex2 && y == treasurey2 && level == treasurelvl2 && dungeon[x][y][level].explored == 1 && foundtreasure2 == 0) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(678, 294, 790, 391)); - } - for (i = 1; i <= 48; i++) { - - if (dungeon[x][y][level].explored) { - if (pits[i].x == x && - pits[i].y == y && - pits[i].lvl == level && - pits[i].frame != 0) { - if (pits[i].frame <= 6 || pits[i].frame >= 30) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(452, 490, 452 + 113, 490 + 98)); - } else if (pits[i].frame <= 12 || pits[i].frame >= 24) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(452 + 113, 490, 452 + 113 + 113, 490 + 98)); - - } else if (pits[i].frame <= 18 || pits[i].frame > 18) { - if (!networkserver) - BOOL resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, - &CRect(452 + 113 + 113, 490, 452 + 113 + 113 + 113, 490 + 98)); - } +void draw_dungeon_items(int x, int y, int level, int startx, int starty) { + BOOL resultOK; + int i; + if (dungeon[x][y][level].item == 'c' && dungeon[x][y][level].explored == 1 && !networkserver) { + if (dungeon[x][y][level].image == 0) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(113, 294, 225, 391)); + (void)resultOK2; + } else if (dungeon[x][y][level].image == 1) { + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(113 + 112 + 112, 294, 225 + 112 + 112, 391)); + } else if (dungeon[x][y][level].image == 2) { + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(113 + 112 + 112 + 112, 294, 225 + 112 + 112 + 112, 391)); + } else if (dungeon[x][y][level].image == 3) { + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(113 + 112 + 112 + 112 + 112, 294, 225 + 112 + 112 + 112 + 112, 391)); + } else if (dungeon[x][y][level].image == 4) { + resultOK = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(224, 294, 337, 391)); + } + } + + if (dungeon[x][y][level].item == 'e' && dungeon[x][y][level].explored == 1) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(226, 490, 338, 587)); + (void)resultOK2; + } + } + if (dungeon[x][y][level].item == 's' && dungeon[x][y][level].explored == 1) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, + &CRect(565, 0, 565 + 113, 97)); + (void)resultOK2; + } + } + if (dungeon[x][y][level].item == 'r' && dungeon[x][y][level].explored == 1) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, + &CRect(678, 0, 678 + 113, 97)); + (void)resultOK2; + } + } + if (dungeon[x][y][level].item == 'a' && dungeon[x][y][level].explored == 1) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty), partsBSurfaceNum, + &CRect(224 + 113 + 113, 0, 449 + 113, 97)); + (void)resultOK2; + } + } + if (x == treasurex && y == treasurey && level == treasurelvl && dungeon[x][y][level].explored == 1 && foundtreasure == 0) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(0, 294, 112, 391)); + (void)resultOK2; + } + } + if (x == treasurex2 && y == treasurey2 && level == treasurelvl2 && dungeon[x][y][level].explored == 1 && foundtreasure2 == 0) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(678, 294, 790, 391)); + (void)resultOK2; + } + } + for (i = 1; i <= 48; i++) { + + if (dungeon[x][y][level].explored) { + if (pits[i].x == x && + pits[i].y == y && + pits[i].lvl == level && + pits[i].frame != 0) { + if (pits[i].frame <= 6 || pits[i].frame >= 30) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(452, 490, 452 + 113, 490 + 98)); + (void)resultOK2; } - } + } else if (pits[i].frame <= 12 || pits[i].frame >= 24) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(452 + 113, 490, 452 + 113 + 113, 490 + 98)); + (void)resultOK2; + } + + } else if (pits[i].frame <= 18 || pits[i].frame > 18) { + if (!networkserver) { + BOOL resultOK2 = pDirDraw->BlitImage(&CPoint(startx, starty + 20), partsBSurfaceNum, + &CRect(452 + 113 + 113, 490, 452 + 113 + 113 + 113, 490 + 98)); + (void)resultOK2; + } + } } - savecurrent = CurrentPlayer; - savelevel = level; + } + } +} + +void handle_players_in_cell(int x, int y, int level, int startx, int starty, BOOL &endgame) { + int savecurrent = CurrentPlayer; + int savelevel = level; + int i; + int rand; + int monstershoot; + int restmonster; + BOOL resultOK; for (i = NumPlayers; i > 0; i--) { CurrentPlayer = i; if (foundtreasure != 0 && CurrentPlayer == foundtreasure && ishost) { @@ -1502,17 +1504,12 @@ inline void display_dungeon(int player) { } } } - CurrentPlayer = savecurrent; - level = PlayerLocation[camera].level; - - startx = startx + XADJUST; - starty = starty + YADJUST; - } - startx = startxreset - ((y + 1) * 48); - starty = startyreset + ((y + 1) * 24); - } + CurrentPlayer = savecurrent; +} +void update_dungeon_state(int level) { + int loop, i, rand, work1, work2; startgame = 0; show_missle(); @@ -1571,6 +1568,10 @@ inline void display_dungeon(int player) { if (rand == 1 && gamedef.pits == 1 && ishost) { assign_pit(level); } +} + +void draw_panel_and_flip(int player, BOOL endgame) { + BOOL resultOK; if (!networkserver) { if (endgame) { @@ -1585,6 +1586,9 @@ inline void display_dungeon(int player) { pDirDraw->ClearSurface(BACKBUFFERNUM); } +} + +void process_endgame(BOOL endgame) { if (endgame) { if (ishost) { @@ -1619,6 +1623,10 @@ inline void display_dungeon(int player) { } } +} + +void network_ping() { + int loop; cronit++; if (cronit > 20) { cronit = 0; @@ -1698,10 +1706,55 @@ inline void display_dungeon(int player) { reset_networkserver(); } +} + + +inline void display_dungeon(int player) { + CONST int XADJUST = 49; + CONST int YADJUST = 25; + + int x, y, startxreset, startyreset; + int level; + int i; + BOOL endgame = FALSE; + + startx = 530; + starty = -100; + startxreset = 530; + startyreset = -200; + + if (!check_game_status()) + return; + + level = PlayerLocation[camera].level; + for (i = 1; i <= NumPlayers; i++) + PlayerLocation[i].moved = 0; + + for (y = 0; y < DUNGEONY + 1; y++) { + for (x = 0; x < DUNGEONX + 1; x++) { + draw_dungeon_cell(x, y, level, startx, starty); + draw_dungeon_items(x, y, level, startx, starty); + handle_players_in_cell(x, y, level, startx, starty, endgame); + + level = PlayerLocation[camera].level; + + startx = startx + XADJUST; + starty = starty + YADJUST; + } + startx = startxreset - ((y + 1) * 48); + starty = startyreset + ((y + 1) * 24); + } + + update_dungeon_state(level); + draw_panel_and_flip(player, endgame); + process_endgame(endgame); + network_ping(); + keyboardlock = 0; hitkeyboard = 0; } + /////////////////////////////////////////////////////////// // /////////////////////////////////////////////////////////// @@ -1897,10 +1950,6 @@ void start_missle(int x, int y, int dir, int lvl, int sx, int sy, int owner) { // /////////////////////////////////////////////////////////// -/////////////////////////////////////////////////////////// -// -/////////////////////////////////////////////////////////// - int monster_shoot(void) { int t, i;