rnd-20100216-1-src
[rocksndiamonds.git] / src / game_sp / main.c
1
2 #include "main_sp.h"
3 #include "global.h"
4
5
6 struct GameInfo_SP game_sp_info;
7 struct LevelInfo_SP native_sp_level;
8
9
10 int GfxElementLast[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
11 int GfxGraphicLast[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
12 int GfxGraphic[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
13 int GfxFrame[SP_MAX_PLAYFIELD_WIDTH][SP_MAX_PLAYFIELD_HEIGHT];
14
15
16 void InitGameEngine_SP()
17 {
18   int x, y;
19
20   gfx.anim_random_frame = -1;   // (use simple, ad-hoc random numbers)
21
22   game_sp_info.LevelSolved = FALSE;
23   game_sp_info.GameOver = FALSE;
24
25   menBorder.Checked = setup.sp_show_border_elements;
26
27   for (x = 0; x < SP_MAX_PLAYFIELD_WIDTH; x++)
28   {
29     for (y = 0; y < SP_MAX_PLAYFIELD_HEIGHT; y++)
30     {
31       GfxElementLast[x][y] = -1;
32       GfxGraphicLast[x][y] = -1;
33       GfxGraphic[x][y] = -1;
34       GfxFrame[x][y] = 0;
35     }
36   }
37
38   InitScrollPlayfield();
39
40 #if 0
41   printf(":A: %d, %d [%d, %d]\n",
42          mScrollX, mScrollY, mScrollX_last, mScrollY_last);
43 #endif
44
45 #if 1
46   menPlay_Click();
47 #else
48   menPlayDemo_Click();
49 #endif
50
51 #if 0
52   printf(":B: %d, %d [%d, %d]\n",
53          mScrollX, mScrollY, mScrollX_last, mScrollY_last);
54 #endif
55 }
56
57 #if 0
58 void BlitScreenToBitmap_SP(Bitmap *target_bitmap)
59 {
60   DDScrollBuffer_Blt_Ext(target_bitmap);
61 }
62 #endif
63
64 void RedrawPlayfield_SP(boolean force_redraw)
65 {
66   // subDisplayLevel();
67
68   UpdatePlayfield();
69
70   BackToFront_SP();
71 }
72
73 void GameActions_SP(byte action[MAX_PLAYERS], boolean warp_mode)
74 {
75   byte single_player_action = action[0];
76   int x, y;
77
78   subMainGameLoop_Main(single_player_action, warp_mode);
79
80   RedrawPlayfield_SP(FALSE);
81
82   for (x = DisplayMinX; x <= DisplayMaxX; x++)
83     for (y = DisplayMinY; y <= DisplayMaxY; y++)
84       GfxFrame[x][y]++;
85 }