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); |