Subversion Repositories Kolibri OS

Rev

Rev 5297 | Rev 5333 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5297 Rev 5331
Line 85... Line 85...
85
RGBA img_explosion[8064];
85
RGBA img_explosion[8064];
86
RGBA img_gun[576];
86
RGBA img_gun[576];
87
RGB img_gamebg[9216];
87
RGB img_gamebg[9216];
88
RGBA img_black[576];
88
RGBA img_black[576];
Line -... Line 89...
-
 
89
 
-
 
90
RGB img_pandus[3][12];
89
 
91
 
90
RGBA img_number_box[2550];
92
RGBA img_number_box[2550];
91
RGBA img_numbers[3500];
93
RGBA img_numbers[3500];
92
RGBA img_button1[3249];
94
RGBA img_button1[3249];
Line 103... Line 105...
103
CKosRender* renderPlayer;
105
CKosRender* renderPlayer;
104
CKosImage* objPlayer;
106
CKosImage* objPlayer;
105
CKosImage* objPlayer1;
107
CKosImage* objPlayer1;
Line 106... Line 108...
106
 
108
 
-
 
109
CKosRender* renderBox;
Line 107... Line 110...
107
CKosRender* renderBox;
110
CKosRender* renderWater;
108
 
111
 
109
CKosImage* objLaser;
112
CKosImage* objLaser;
110
CKosImage* objLaser1;
113
CKosImage* objLaser1;
Line 159... Line 162...
159
 
162
 
Line 160... Line 163...
160
LvlItem level[16][16];
163
LvlItem level[16][16];
161
 
164
 
-
 
165
char GetField(Point position, bool din)
-
 
166
{
-
 
167
	if (position.X < 0 || position.Y < 0 || position.X > 15 || position.Y > 15)
162
char GetField(Point position, bool din)
168
		return FIELD_WALL;
163
{
169
 
164
	if (din && level[position.Y][position.X].d != FIELD_NONE)
170
	if (din && level[position.Y][position.X].d != FIELD_NONE)
165
		return level[position.Y][position.X].d;
171
		return level[position.Y][position.X].d;
Line 170... Line 176...
170
{
176
{
171
	gameMode = mode;
177
	gameMode = mode;
172
	draw_window();
178
	draw_window();
173
}
179
}
Line -... Line 180...
-
 
180
 
-
 
181
bool IsWater(Point pos)
-
 
182
{
-
 
183
	if (pos.X < 0 || pos.Y < 0 || pos.X > 15 || pos.Y > 15)
-
 
184
		return true;
-
 
185
 
-
 
186
	Byte code = GetField(pos, false);
-
 
187
	return (code == FIELD_WATER || code == FIELD_BOX_WATER);
-
 
188
}
-
 
189
 
-
 
190
void RenderPandus(Point pos)
-
 
191
{
-
 
192
	bool is[10];
-
 
193
	for (int y = 0; y < 3; ++y)
-
 
194
		for (int x = 0; x < 3; ++x)
-
 
195
			is[y * 3 + x + 1] = IsWater(pos + Point(x-1, y-1));
-
 
196
	
-
 
197
	if (!is[6])
-
 
198
	{
-
 
199
		if (!is[2] || is[3])
-
 
200
			renderWater->RenderImg((RGB*)img_pandus[0], Point(23, 0), 1, 12);
-
 
201
		else
-
 
202
			renderWater->RenderImg((RGB*)img_pandus[1], Point(23, 0), 1, 12);
-
 
203
		
-
 
204
		if (!is[8] || is[9])
-
 
205
			renderWater->RenderImg((RGB*)img_pandus[2], Point(23, 12), 1, 12);
-
 
206
		else
-
 
207
			renderWater->RenderImg((RGB*)img_pandus[1], Point(23, 12), 1, 12);
-
 
208
	}
-
 
209
 
-
 
210
	if (!is[2])
-
 
211
	{
-
 
212
		if (!is[4] || is[1])
-
 
213
			renderWater->RenderImg((RGB*)img_pandus[0], Point(0, 0), 12, 1);
-
 
214
		else
-
 
215
			renderWater->RenderImg((RGB*)img_pandus[1], Point(0, 0), 12, 1);
-
 
216
 
-
 
217
		if (!is[6] || is[3])
-
 
218
			renderWater->RenderImg((RGB*)img_pandus[2], Point(12, 0), 12, 1);
-
 
219
		else
-
 
220
			renderWater->RenderImg((RGB*)img_pandus[1], Point(12, 0), 12, 1);
-
 
221
	}
-
 
222
	
-
 
223
	if (!is[4])
-
 
224
	{
-
 
225
		if (!is[8] || is[7])
-
 
226
			renderWater->RenderImg((RGB*)img_pandus[2], Point(0, 12), 1, 12);
-
 
227
		else
-
 
228
			renderWater->RenderImg((RGB*)img_pandus[1], Point(0, 12), 1, 12);
-
 
229
 
-
 
230
		if (!is[2] || is[1])
-
 
231
			renderWater->RenderImg((RGB*)img_pandus[0], Point(0, 0), 1, 12);
-
 
232
		else
-
 
233
			renderWater->RenderImg((RGB*)img_pandus[1], Point(0, 0), 1, 12);
-
 
234
	}
-
 
235
 
-
 
236
	if (!is[8])
-
 
237
	{
-
 
238
		if (!is[6] || is[9])
-
 
239
			renderWater->RenderImg((RGB*)img_pandus[0], Point(12, 23), 12, 1);
-
 
240
		else
-
 
241
			renderWater->RenderImg((RGB*)img_pandus[1], Point(12, 23), 12, 1);
-
 
242
 
-
 
243
		if (!is[4] || is[7])
-
 
244
			renderWater->RenderImg((RGB*)img_pandus[2], Point(0, 23), 12, 1);
-
 
245
		else
-
 
246
			renderWater->RenderImg((RGB*)img_pandus[1], Point(0, 23), 12, 1);
-
 
247
	}
-
 
248
}
174
 
249
 
175
RGB* GetImg(Point position, bool din)
250
RGB* GetImg(Point position, bool din)
176
{
251
{
177
	switch (GetField(position, din))
252
	switch (GetField(position, din))
178
	{
253
	{
Line 234... Line 309...
234
		return renderBox->buffer;
309
		return renderBox->buffer;
235
	case FIELD_FINISH:
310
	case FIELD_FINISH:
236
		return (RGB*)img_finish;
311
		return (RGB*)img_finish;
237
	case FIELD_BRICK:
312
	case FIELD_BRICK:
238
		return (RGB*)img_brick[level[position.Y][position.X].l];
313
		return (RGB*)img_brick[level[position.Y][position.X].l];
239
	case FIELD_WATER:
-
 
240
		return (RGB*)img_water;
-
 
241
	case FIELD_BOX_WATER:
-
 
242
		return (RGB*)img_waterbox;
-
 
243
	case FIELD_BRICK_DES:
314
	case FIELD_BRICK_DES:
244
		return (RGB*)img_brick1;
315
		return (RGB*)img_brick1;
-
 
316
	case FIELD_BOX_WATER:
-
 
317
	//	return (RGB*)img_waterbox;
-
 
318
		renderWater->RenderImg((RGB*)img_waterbox, Point(0, 0), 24, 24);
-
 
319
		RenderPandus(position);
-
 
320
		return renderWater->buffer;
-
 
321
	case FIELD_WATER:
-
 
322
		renderWater->RenderImg((RGB*)img_water, Point(0, 0), 24, 24);
-
 
323
		RenderPandus(position);
-
 
324
		return renderWater->buffer;
-
 
325
	//	return (RGB*)img_water;
245
	}
326
	}
246
	return NULL;
327
	return NULL;
247
}
328
}
Line 248... Line 329...
248
 
329
 
Line 600... Line 681...
600
				else
681
				else
601
					DrawLaser(position, (vector.X != 0) ? 1 : 2, color);
682
					DrawLaser(position, (vector.X != 0) ? 1 : 2, color);
602
			}
683
			}
603
			break;
684
			break;
604
		case FIELD_BOX_MISSLE_0:
685
		case FIELD_BOX_MISSLE_0:
605
			rtlDebugOutString("FIELD_BOX_MISSLE_0");
-
 
606
			if (vector == Point(-1, 0) || vector == Point(0, -1))
686
			if (vector == Point(-1, 0) || vector == Point(0, -1))
607
			{
687
			{
608
				vector = (vector.Y == -1) ? Point(1, 0) : Point(0, 1);
688
				vector = (vector.Y == -1) ? Point(1, 0) : Point(0, 1);
609
				DrawLaser(position, 0, color);
689
				DrawLaser(position, 0, color);
610
			}
690
			}
Line 619... Line 699...
619
					LaserGun = true;
699
					LaserGun = true;
620
				en = false;
700
				en = false;
621
			}
701
			}
622
			break;
702
			break;
623
		case FIELD_BOX_MISSLE_1:
703
		case FIELD_BOX_MISSLE_1:
624
			rtlDebugOutString("FIELD_BOX_MISSLE_1");
-
 
625
			if (vector == Point(0, -1) || vector == Point(1, 0))
704
			if (vector == Point(0, -1) || vector == Point(1, 0))
626
			{
705
			{
627
				vector = (vector.Y == -1) ? Point(-1, 0) : Point(0, 1);
706
				vector = (vector.Y == -1) ? Point(-1, 0) : Point(0, 1);
628
				DrawLaser(position, 90, color);
707
				DrawLaser(position, 90, color);
629
			}
708
			}
Line 638... Line 717...
638
					LaserGun = true;
717
					LaserGun = true;
639
				en = false;
718
				en = false;
640
			}
719
			}
641
			break;
720
			break;
642
		case FIELD_BOX_MISSLE_2:
721
		case FIELD_BOX_MISSLE_2:
643
			rtlDebugOutString("FIELD_BOX_MISSLE_2");
-
 
644
			if (vector == Point(1, 0) || vector == Point(0, 1))
722
			if (vector == Point(1, 0) || vector == Point(0, 1))
645
			{
723
			{
646
				vector = (vector.Y == 1) ? Point(-1, 0) : Point(0, -1);
724
				vector = (vector.Y == 1) ? Point(-1, 0) : Point(0, -1);
647
				DrawLaser(position, 180, color);
725
				DrawLaser(position, 180, color);
648
			}
726
			}
Line 657... Line 735...
657
					LaserGun = true;
735
					LaserGun = true;
658
				en = false;
736
				en = false;
659
			}
737
			}
660
			break;
738
			break;
661
		case FIELD_BOX_MISSLE_3:
739
		case FIELD_BOX_MISSLE_3:
662
			rtlDebugOutString("FIELD_BOX_MISSLE_3");
-
 
663
			if (vector == Point(-1, 0) || vector == Point(0, 1))
740
			if (vector == Point(-1, 0) || vector == Point(0, 1))
664
			{
741
			{
665
				vector = (vector.Y == 1) ? Point(1, 0) : Point(0, -1);
742
				vector = (vector.Y == 1) ? Point(1, 0) : Point(0, -1);
666
				DrawLaser(position, 270, color);
743
				DrawLaser(position, 270, color);
667
			}
744
			}
Line 889... Line 966...
889
		case 32: // Space
966
		case 32: // Space
890
			if (gameStatus == GAME_NONE)
967
			if (gameStatus == GAME_NONE)
891
				Laser(player.position, player.vector, (RGB)0x00FF00);
968
				Laser(player.position, player.vector, (RGB)0x00FF00);
892
			break;
969
			break;
893
		case 13:
970
		case 13:
894
			rtlDebugOutString(ftoa(rtlRand()));
971
			//rtlDebugOutString(ftoa(rtlRand()));
Line 895... Line 972...
895
			
972
			
896
		//	openLevel(levelIndex + 1);
973
		//	openLevel(levelIndex + 1);
897
			if (gameStatus == GAME_VICTORY)
974
			if (gameStatus == GAME_VICTORY)
898
				openLevel(levelIndex + 1);
975
				openLevel(levelIndex + 1);
Line 1117... Line 1194...
1117
	while (file->Read(block, 256) == 256)
1194
	while (file->Read(block, 256) == 256)
1118
	{
1195
	{
1119
		levelCount++;
1196
		levelCount++;
1120
	}
1197
	}
1121
	//levelCount++;
1198
	//levelCount++;
1122
	rtlDebugOutString(ftoa(levelCount));
1199
	//rtlDebugOutString(ftoa(levelCount));
Line 1123... Line 1200...
1123
 
1200
 
Line 1124... Line 1201...
1124
	levels = new Level[levelCount];
1201
	levels = new Level[levelCount];
1125
 
1202
 
Line 1214... Line 1291...
1214
	file->LoadTex((Byte*)img_menu, 3, 384, 384);
1291
	file->LoadTex((Byte*)img_menu, 3, 384, 384);
1215
	file->LoadTex((Byte*)img_explosion, 4, 24, 336);	
1292
	file->LoadTex((Byte*)img_explosion, 4, 24, 336);	
1216
	file->LoadTex((Byte*)img_gun, 4, 24, 24);	
1293
	file->LoadTex((Byte*)img_gun, 4, 24, 24);	
1217
	file->LoadTex((Byte*)img_gamebg, 3, 96, 96);
1294
	file->LoadTex((Byte*)img_gamebg, 3, 96, 96);
Line -... Line 1295...
-
 
1295
 
1218
	
1296
	
Line 1219... Line 1297...
1219
	delete file;
1297
	delete file;
Line 1220... Line 1298...
1220
 
1298
 
Line 1221... Line 1299...
1221
	strcpy(cPtr + 1, "data02.pak");
1299
	strcpy(cPtr + 1, "data02.pak");
-
 
1300
	
-
 
1301
	file = new CKosFile(kosExePath);
-
 
1302
 
-
 
1303
	file->LoadTex((Byte*)img_levels, 3, 384, 384);
1222
	
1304
 
1223
	file = new CKosFile(kosExePath);
1305
	for (int i = 0; i < 3; ++i)
Line 1224... Line 1306...
1224
 
1306
		file->LoadTex((Byte*)img_pandus[i], 3, 12, 1);
1225
	file->LoadTex((Byte*)img_levels, 3, 384, 384);
1307
 
Line 1238... Line 1320...
1238
	file->LoadTex((Byte*)img_black, 4, 24, 24);
1320
	file->LoadTex((Byte*)img_black, 4, 24, 24);
Line 1239... Line 1321...
1239
 
1321
 
1240
	for (int i = 0; i < 3; ++i)
1322
	for (int i = 0; i < 3; ++i)
Line -... Line 1323...
-
 
1323
		file->LoadTex((Byte*)img_buttons[i], 3, 229, 57);	
1241
		file->LoadTex((Byte*)img_buttons[i], 3, 229, 57);	
1324
 
Line 1242... Line 1325...
1242
 
1325
 
1243
	delete file;
1326
	delete file;
Line -... Line 1327...
-
 
1327
 
-
 
1328
	renderPlayer = new CKosRender(24, 24);
1244
 
1329
	objPlayer = new CKosImage(renderPlayer, (RGBA*)img_tank, 24, 24);
1245
	renderPlayer = new CKosRender(24, 24);
1330
 
1246
	objPlayer = new CKosImage(renderPlayer, (RGBA*)img_tank, 24, 24);
1331
	renderWater = new CKosRender(24, 24);
1247
 
1332
 
1248
	renderBox = new CKosRender(24, 24);
1333
	renderBox = new CKosRender(24, 24);