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 near 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 near 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 near 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 near 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;
470 map->tiles->debug_text = true;
472 else map->tiles->debug_text = false;
476 void mapGoTo(map_view_t *mv, int tx, int ty)
481 /* set up the coordinates */
484 mv->page->dx = mv->map->tiles->tileWidth;
485 mv->page->dy = mv->map->tiles->tileHeight;
487 /* set up the thresholds */
488 mv->dxThresh = mv->map->tiles->tileWidth * 2;
489 mv->dyThresh = mv->map->tiles->tileHeight * 2;
492 modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
494 i=mv->ty * mv->map->width + mv->tx;
495 for(ty=mv->ty-1; py < SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
496 mapDrawWRow(mv, tx-1, ty, py);
497 i+=mv->map->width - tx;
503 mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)
513 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!
517 rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);
518 ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);
519 ////0000printf("i=%d\n", i);
520 switch(t->debug_text)
523 modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
526 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (t->debug_data[i])+1);
527 //modexprintbig(page, x, y, 1, 15, 0, (t->debug_data));
528 /*for(texty=0; texty<2; texty++)
530 for(textx=0; textx<2; textx++)
532 // modexprint(page, x+(textx*8), y+(texty*8), 1, (word)(t->debug_data), 0, (t->debug_data));
540 void near mapDrawRow(map_view_t *mv, int tx, int ty, word y, player_t *p, word poopoffset)
544 poopoffset%=p[0].speed;
545 //printf("y: %d\n", poopoffset);
546 /* the position within the map array */
547 i=ty * mv->map->width + tx;
548 for(x=poopoffset; x<(SCREEN_WIDTH+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
550 /* we are in the map, so copy! */
551 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
557 void near mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *p, word poopoffset)
561 poopoffset%=p[0].speed;
562 //printf("x: %d\n", poopoffset);
563 /* location in the map array */
564 i=ty * mv->map->width + tx;
566 /* We'll copy all of the columns in the screen,
567 i + 1 row above and one below */
568 for(y=poopoffset; y<(SCREEN_HEIGHT+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
570 /* we are in the map, so copy away! */
571 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
577 void mapDrawWRow(map_view_t *mv, int tx, int ty, word y)
582 /* the position within the map array */
583 i=ty * mv->map->width + tx;
584 for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
586 /* we are in the map, so copy! */
587 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
593 void mapDrawWCol(map_view_t *mv, int tx, int ty, word x)
598 /* location in the map array */
599 i=ty * mv->map->width + tx;
601 /* We'll copy all of the columns in the screen,
602 i + 1 row above and one below */
603 for(y=0; y<SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
605 /* we are in the map, so copy away! */
606 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
619 /*void shinku(page_t *page, global_game_variables_t *gv)
627 //if(elapsed_timer(gv) >= (1.0 / gv->frames_per_second))
629 // pee = malloc(sizeof(double));
630 // sprintf(pee, "%f", ((*gv->clock) /18.2));
631 //++++ modexprint(page, x, y, type, col, bgcol, pee);
632 //sprintf(pee, "%f", *gv->tiku/\*time_in_seconds(gv));
633 //modexprint(page, x, y+8, type, col, bgcol, pee);
637 void near animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch)
639 sword x = player[playnum].x;
640 sword y = player[playnum].y;
642 word dire=32; //direction
644 word dire=8; //direction
646 sword qq; //scroll offset
647 word ls = player[playnum].persist_aniframe;
649 if(scrollswitch==0) qq = 0;
650 else qq = ((player[playnum].q)*(player[playnum].speed));
653 switch (player[playnum].d)
657 dire*=player[playnum].d;
662 dire*=(player[playnum].d-2);
669 dire*=(player[playnum].d-2);
674 dire*=(player[playnum].d+2);
681 #define FRAME1 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
682 #define FRAME2 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
683 #define FRAME3 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
684 #define FRAME4 oldDrawBmp(VGA, x, y, &player[playnum].data, 1);
686 #define FRAME1 modexDrawSpriteRegion(pip[1].page, x, y, 48, dire, 24, 32, &player[playnum].data);
687 #define FRAME2 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
688 #define FRAME3 modexDrawSpriteRegion(pip[1].page, x, y, 0, dire, 24, 32, &player[playnum].data);
689 #define FRAME4 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
692 #define FRAME1 modexClearRegion(pip[1].page, x, y, 24, 32, 2+dire);
693 #define FRAME2 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
694 #define FRAME3 modexClearRegion(pip[1].page, x, y, 24, 32, dire);
695 #define FRAME4 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
697 modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
698 if(2>ls && ls>=1) { FRAME1 }else
699 if(3>ls && ls>=2) { FRAME2 }else
700 if(4>ls && ls>=3) { FRAME3 }else
701 if(5>ls && ls>=4) { FRAME4 }
702 //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
703 //modexClearRegion(top->page, 66, 66, 2, 40, 0);
704 //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
705 //turn this off if XT