1 /* Project 16 Source Code~
2 * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669
4 * This file is part of Project 16.
6 * Project 16 is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * Project 16 is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program. If not, see <http://www.gnu.org/licenses/>, or
18 * write to the Free Software Foundation, Inc., 51 Franklin Street,
19 * Fifth Floor, Boston, MA 02110-1301 USA.
25 #include "src/lib/scroll16.h"
27 void walk(map_view_t *pip, player_t *player, word pn)
29 #define INC_PER_FRAME if(player[pn].q&1) player[pn].persist_aniframe++; if(player[pn].persist_aniframe>4) player[pn].persist_aniframe = 1;
34 if(pip[0].tx >= 0 && pip[0].tx+20 < pip[0].map->width && player[pn].tx == pip[0].tx + 10 &&
35 !(pip[0].map->data[(player[pn].tx)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx+1 == TRIGGX && player[pn].ty == TRIGGY)) //collision detection!
37 if(player[pn].q<=(TILEWH/(player[pn].speed)))
40 animatePlayer(pip, player, pn, 1);
41 mapScrollRight(pip, player, 0, pn);
42 mapScrollRight(pip, player, 1, pn);
43 modexShowPage(pip[1].page);
45 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
47 else if(player[pn].tx < pip[0].map->width && !(pip[0].map->data[(player[pn].tx)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx+1 == TRIGGX && player[pn].ty == TRIGGY))
49 if(player[pn].q<=(TILEWH/(player[pn].speed)))
52 player[pn].x+=(player[pn].speed);
53 animatePlayer(pip, player, pn, 0);
54 modexShowPage(pip[1].page);
56 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
60 modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
62 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 24, 32, &player[pn].data);
64 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 14);
66 modexShowPage(pip[1].page);
69 player[pn].triggerx = player[pn].tx+1;
70 player[pn].triggery = player[pn].ty;
75 if(pip[0].tx > 0 && pip[0].tx+20 <= pip[0].map->width && player[pn].tx == pip[0].tx + 10 &&
76 !(pip[0].map->data[(player[pn].tx-2)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx-1 == TRIGGX && player[pn].ty == TRIGGY)) //collision detection!
78 if(player[pn].q<=(TILEWH/(player[pn].speed)))
81 animatePlayer(pip, player, pn, 1);
82 mapScrollLeft(pip, player, 0, pn);
83 mapScrollLeft(pip, player, 1, pn);
84 modexShowPage(pip[1].page);
86 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
88 else if(player[pn].tx > 1 && !(pip[0].map->data[(player[pn].tx-2)+(pip[0].map->width*(player[pn].ty-1))] == 0))//!(player[pn].tx-1 == TRIGGX && player[pn].ty == TRIGGY))
90 if(player[pn].q<=(TILEWH/(player[pn].speed)))
93 player[pn].x-=(player[pn].speed);
94 animatePlayer(pip, player, pn, 0);
95 modexShowPage(pip[1].page);
97 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
101 modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
103 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 96, 24, 32, &player[pn].data);
105 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 10);
107 modexShowPage(pip[1].page);
110 player[pn].triggerx = player[pn].tx-1;
111 player[pn].triggery = player[pn].ty;
116 if(pip[0].ty >= 0 && pip[0].ty+15 < pip[0].map->height && player[pn].ty == pip[0].ty + 8 &&
117 !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty+1 == TRIGGY)) //collision detection!
119 if(player[pn].q<=(TILEWH/(player[pn].speed)))
122 animatePlayer(pip, player, pn, 1);
123 mapScrollDown(pip, player, 0, pn);
124 mapScrollDown(pip, player, 1, pn);
125 modexShowPage(pip[1].page);
127 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
129 else if(player[pn].ty < pip[0].map->height && !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty+1 == TRIGGY))
131 if(player[pn].q<=(TILEWH/(player[pn].speed)))
134 player[pn].y+=(player[pn].speed);
135 animatePlayer(pip, player, pn, 0);
136 modexShowPage(pip[1].page);
138 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
142 modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
144 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 64, 24, 32, &player[pn].data);
146 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 9);
148 modexShowPage(pip[1].page);
151 player[pn].triggerx = player[pn].tx;
152 player[pn].triggery = player[pn].ty+1;
157 if(pip[0].ty > 0 && pip[0].ty+15 <= pip[0].map->height && player[pn].ty == pip[0].ty + 8 &&
158 !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty-2))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty-1 == TRIGGY)) //collision detection!
160 if(player[pn].q<=(TILEWH/(player[pn].speed)))
163 animatePlayer(pip, player, pn, 1);
164 mapScrollUp(pip, player, 0, pn);
165 mapScrollUp(pip, player, 1, pn);
166 modexShowPage(pip[1].page);
168 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
170 else if(player[pn].ty > 1 && !(pip[0].map->data[(player[pn].tx-1)+(pip[0].map->width*(player[pn].ty-2))] == 0))//!(player[pn].tx == TRIGGX && player[pn].ty-1 == TRIGGY))
172 if(player[pn].q<=(TILEWH/(player[pn].speed)))
175 player[pn].y-=(player[pn].speed);
176 animatePlayer(pip, player, 0, pn);
177 modexShowPage(pip[1].page);
179 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
183 modexCopyPageRegion(pip[1].page, pip[0].page, player[pn].x-4, player[pn].y-TILEWH, player[pn].x-4, player[pn].y-TILEWH, 24, 32);
185 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 0, 24, 32, &player[pn].data);
187 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 12);
189 modexShowPage(pip[1].page);
192 player[pn].triggerx = player[pn].tx;
193 player[pn].triggery = player[pn].ty-1;
199 allocMap(int w, int h) {
204 result.data = malloc(sizeof(byte) * w * h);
205 //result.data = (byte *)alloc_emem(((int)sizeof(byte) * w * h)/1024);
206 if(isEMS() || checkEMS())
209 //emmhandle = mallocEMS(coretotalEMS());//alloc_emem((int)sizeof(map))
210 mm.length=sizeof(result);
212 mm.sourceOff=ptr2long(&result);
215 ist = move_emem(&mm);
216 if(!ist){ dealloc_emem(emmhandle); exit(5); }
217 printf("%d\n", coretotalEMS());
224 initMap(map_t *map) {
225 // just a place holder to fill out an alternating pattern
229 //if(!isEMS() || !checkEMS())
230 // map->tiles = malloc(sizeof(tiles_t));
232 // map->tiles = (tiles_t *)alloc_emem(sizeof(tiles_t));
234 //create the tile set
235 //if(!isEMS() || !checkEMS())
236 // map->tiles->data = malloc(sizeof(bitmap_t));
238 // map->tiles->data = (bitmap_t *)alloc_emem(sizeof(bitmap_t));
239 // map->tiles->data->width = (TILEWH);
240 // map->tiles->data->height= TILEWH;
241 //if(!isEMS() || !checkEMS())
242 // map->tiles->data->data = malloc((TILEWH*2)*TILEWH);
244 // map->tiles->data->data = (byte *)alloc_emem((TILEWH*2)*TILEWH);
245 // map->tiles->tileHeight = TILEWH;
246 // map->tiles->tileWidth =TILEWH;
247 // map->tiles->rows = 1;
248 // map->tiles->cols = 1;//2;
251 //for(y=0; y<map->height; y++) {
252 //for(x=0; x<map->width; x++) {
254 for(yy=0; yy<TILEWH; yy++) {
255 for(xx=0; xx<(TILEWH); xx++) {
257 map->tiles->data->data[i+1] = map->data[q];//28;//0x24;
258 // printf("[%d]", map->tiles->data->data[i]);
260 //map->tiles->data->data[i] = map->data[q];//0;//0x34;
261 //printf("]%d[==[%d]", i, map->tiles->data->data[i]);
267 // printf("[%d]", map->data[q]);
274 for(y=0; y<map->height; y++) {
275 for(x=0; x<map->width; x++) {
277 printf("[%d]", map->data[i]);
278 //tile = tile ? 0 : 1;
281 //tile = tile ? 0 : 1;
285 void mapScrollRight(map_view_t *mv, player_t *player, word id, word plid)
287 word x, y; /* coordinate for drawing */
289 /* increment the pixel position and update the page */
290 mv[id].page->dx += player[plid].speed;
292 /* check to see if this changes the tile */
293 if(mv[id].page->dx >= mv[id].dxThresh )
295 /* go forward one tile */
297 /* Snap the origin forward */
298 mv[id].page->data += 4;
299 mv[id].page->dx = mv[id].map->tiles->tileWidth;
302 /* draw the next column */
303 x= SCREEN_WIDTH + mv[id].map->tiles->tileWidth;
306 mapDrawCol(&mv[0], mv[0].tx + 20 , mv[0].ty-1, x, player, mv->page->dx);
308 modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
313 void mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
315 word x, y; /* coordinate for drawing */
317 /* increment the pixel position and update the page */
318 mv[id].page->dx -= player[plid].speed;
320 /* check to see if this changes the tile */
321 if(mv[id].page->dx == 0)
323 /* go backward one tile */
326 /* Snap the origin backward */
327 mv[id].page->data -= 4;
328 mv[id].page->dx = mv[id].map->tiles->tileWidth;
331 /* draw the next column */
335 mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
337 modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
342 void mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)
344 word x, y; /* coordinate for drawing */
346 /* increment the pixel position and update the page */
347 mv[id].page->dy -= player[plid].speed;
349 /* check to see if this changes the tile */
350 if(mv[id].page->dy == 0 )
352 /* go down one tile */
354 /* Snap the origin downward */
355 mv[id].page->data -= mv[id].page->width*4;
356 mv[id].page->dy = mv[id].map->tiles->tileHeight;
359 /* draw the next row */
363 mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
365 modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
369 void mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
371 word x, y; /* coordinate for drawing */
373 /* increment the pixel position and update the page */
374 mv[id].page->dy += player[plid].speed;
376 /* check to see if this changes the tile */
377 if(mv[id].page->dy >= mv[id].dyThresh )
379 /* go down one tile */
381 /* Snap the origin downward */
382 mv[id].page->data += mv[id].page->width*4;
383 mv[id].page->dy = mv[id].map->tiles->tileHeight;
386 /* draw the next row */
387 y= SCREEN_HEIGHT + mv[id].map->tiles->tileHeight;
390 mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+15, y, player, mv->page->dy);
392 modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
396 sword chkmap(map_t *map, word q)
399 static byte x[(MAPW*MAPH)+1] = /*{
400 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
401 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
402 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
403 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
404 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
405 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
406 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
407 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
408 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
409 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
410 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
411 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
412 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
413 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
414 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60
417 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
418 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 5, 6, 7, 8,
419 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 1, 2, 3, 4,
420 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 5, 6, 7, 8,
421 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
422 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 5, 6, 7, 8,
423 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 1, 2, 3, 4,
424 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 5, 6, 7, 8,
425 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
426 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 5, 6, 7, 8,
427 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 1, 2, 3, 4,
428 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 5, 6, 7, 8,
429 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
430 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 5, 6, 7, 8,
431 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 1, 2, 3, 4,
432 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 5, 6, 7, 8,
433 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1, 2, 3, 4,
434 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 5, 6, 7, 8,
435 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 1, 2, 3, 4
437 { 1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 1, 11, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 5, 6, 7, 8, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 9, 10, 11, 12, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10 };
438 /*1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, \
439 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
440 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
441 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, \
442 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 1, 11, 11, 3, 1, 1, 1, 1, 1, 1, \
443 1, 1, 1, 1, 0, 0, 0, 0, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
444 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
445 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
446 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
447 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
448 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
449 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
450 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
451 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
452 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 4 };*/
453 //check for failed to load map
454 if((map->width == map->height == 0) || (q>0))
456 //initiate a null map!
457 map->width=MAPW;///2;
458 map->height=MAPH;///2;
459 // map->data = malloc(((map->width*map->height)+1)*sizeof(byte));
461 map->tiles = malloc(sizeof(tiles_t));
462 //fix this to be far~
463 // bp = bitmapLoadPcx("data/ed.pcx");
464 // map->tiles->data = &bp;
465 map->tiles->debug_data = map->data;
466 map->tiles->tileHeight = 16;
467 map->tiles->tileWidth = 16;
468 map->tiles->rows = 1;
469 map->tiles->cols = 1;
471 map->tiles->debug_text = true;
473 map->tiles->debug_text = false;
479 void mapGoTo(map_view_t *mv, int tx, int ty)
484 /* set up the coordinates */
487 mv->page->dx = mv->map->tiles->tileWidth;
488 mv->page->dy = mv->map->tiles->tileHeight;
490 /* set up the thresholds */
491 mv->dxThresh = mv->map->tiles->tileWidth * 2;
492 mv->dyThresh = mv->map->tiles->tileHeight * 2;
495 modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
497 i=mv->ty * mv->map->width + mv->tx;
498 for(ty=mv->ty-1; py < SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
499 mapDrawWRow(mv, tx-1, ty, py);
500 i+=mv->map->width - tx;
506 mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)
516 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!
520 rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);
521 ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);
522 ////0000printf("i=%d\n", i);
523 switch(t->debug_text)
526 modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
529 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (t->debug_data[i])+1);
530 //modexprintbig(page, x, y, 1, 15, 0, (t->debug_data));
531 /*for(texty=0; texty<2; texty++)
533 for(textx=0; textx<2; textx++)
535 // modexprint(page, x+(textx*8), y+(texty*8), 1, (word)(t->debug_data), 0, (t->debug_data));
543 void mapDrawRow(map_view_t *mv, int tx, int ty, word y, player_t *p, word poopoffset)
547 poopoffset%=p[0].speed;
548 //printf("y: %d\n", poopoffset);
549 /* the position within the map array */
550 i=ty * mv->map->width + tx;
551 for(x=poopoffset; x<(SCREEN_WIDTH+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
553 /* we are in the map, so copy! */
554 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
560 void mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *p, word poopoffset)
564 poopoffset%=p[0].speed;
565 //printf("x: %d\n", poopoffset);
566 /* location in the map array */
567 i=ty * mv->map->width + tx;
569 /* We'll copy all of the columns in the screen,
570 i + 1 row above and one below */
571 for(y=poopoffset; y<(SCREEN_HEIGHT+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
573 /* we are in the map, so copy away! */
574 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
580 void mapDrawWRow(map_view_t *mv, int tx, int ty, word y)
585 /* the position within the map array */
586 i=ty * mv->map->width + tx;
587 for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
589 /* we are in the map, so copy! */
590 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
596 void mapDrawWCol(map_view_t *mv, int tx, int ty, word x)
601 /* location in the map array */
602 i=ty * mv->map->width + tx;
604 /* We'll copy all of the columns in the screen,
605 i + 1 row above and one below */
606 for(y=0; y<SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
608 /* we are in the map, so copy away! */
609 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
622 /*void shinku(page_t *page, global_game_variables_t *gv)
630 //if(elapsed_timer(gv) >= (1.0 / gv->frames_per_second))
632 // pee = malloc(sizeof(double));
633 // sprintf(pee, "%f", ((*gv->clock) /18.2));
634 //++++ modexprint(page, x, y, type, col, bgcol, pee);
635 //sprintf(pee, "%f", *gv->tiku/\*time_in_seconds(gv));
636 //modexprint(page, x, y+8, type, col, bgcol, pee);
640 void animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch)
642 sword x = player[playnum].x;
643 sword y = player[playnum].y;
645 word dire=32; //direction
647 word dire=8; //direction
649 sword qq; //scroll offset
650 word ls = player[playnum].persist_aniframe;
652 if(scrollswitch==0) qq = 0;
653 else qq = ((player[playnum].q)*(player[playnum].speed));
656 switch (player[playnum].d)
660 dire*=player[playnum].d;
665 dire*=(player[playnum].d-2);
672 dire*=(player[playnum].d-2);
677 dire*=(player[playnum].d+2);
684 #define FRAME1 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
685 #define FRAME2 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
686 #define FRAME3 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
687 #define FRAME4 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
689 #define FRAME1 modexDrawSpriteRegion(pip[1].page, x, y, 48, dire, 24, 32, &player[playnum].data);
690 #define FRAME2 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
691 #define FRAME3 modexDrawSpriteRegion(pip[1].page, x, y, 0, dire, 24, 32, &player[playnum].data);
692 #define FRAME4 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
695 #define FRAME1 modexClearRegion(pip[1].page, x, y, 24, 32, 2+dire);
696 #define FRAME2 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
697 #define FRAME3 modexClearRegion(pip[1].page, x, y, 24, 32, dire);
698 #define FRAME4 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
700 modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
701 if(2>ls && ls>=1) { FRAME1 }else
702 if(3>ls && ls>=2) { FRAME2 }else
703 if(4>ls && ls>=3) { FRAME3 }else
704 if(5>ls && ls>=4) { FRAME4 }
705 //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
706 //modexClearRegion(top->page, 66, 66, 2, 40, 0);
707 //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
708 //turn this off if XT
709 //XTif(detectcpu() > 0)