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 //printf("pip[0].page->tilesw=%d\n", pip[0].page->tilesw);
35 if(pip[0].tx >= 0 && pip[0].tx+pip[0].page->tilesw < pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
36 !(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!
38 if(player[pn].q<=(TILEWH/(player[pn].speed)))
41 animatePlayer(pip, player, pn, 1);
42 mapScrollRight(pip, player, 0, pn);
43 mapScrollRight(pip, player, 1, pn);
44 modexShowPage(pip[1].page);
46 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
48 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))
50 if(player[pn].q<=(TILEWH/(player[pn].speed)))
53 player[pn].x+=(player[pn].speed);
54 animatePlayer(pip, player, pn, 0);
55 modexShowPage(pip[1].page);
57 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx++; }
61 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);
64 modexDrawPBufRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 24, 32, &player[pn].data, 1);
66 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 24, 32, &player[pn].data);
68 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 14);
70 modexShowPage(pip[1].page);
73 player[pn].triggerx = player[pn].tx+1;
74 player[pn].triggery = player[pn].ty;
79 if(pip[0].tx > 0 && pip[0].tx+pip[0].page->tilesw <= pip[0].map->width && player[pn].tx == pip[0].tx+pip[0].page->tilemidposscreenx &&
80 !(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!
82 if(player[pn].q<=(TILEWH/(player[pn].speed)))
85 animatePlayer(pip, player, pn, 1);
86 mapScrollLeft(pip, player, 0, pn);
87 mapScrollLeft(pip, player, 1, pn);
88 modexShowPage(pip[1].page);
90 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
92 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))
94 if(player[pn].q<=(TILEWH/(player[pn].speed)))
97 player[pn].x-=(player[pn].speed);
98 animatePlayer(pip, player, pn, 0);
99 modexShowPage(pip[1].page);
101 } else { player[pn].q = 1; player[pn].d = 2; player[pn].tx--; }
105 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);
108 modexDrawPBufRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 96, 24, 32, &player[pn].data, 1);
110 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 96, 24, 32, &player[pn].data);
113 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 10);
115 modexShowPage(pip[1].page);
118 player[pn].triggerx = player[pn].tx-1;
119 player[pn].triggery = player[pn].ty;
124 if(pip[0].ty >= 0 && pip[0].ty+pip[0].page->tilesh < pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
125 !(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!
127 if(player[pn].q<=(TILEWH/(player[pn].speed)))
130 animatePlayer(pip, player, pn, 1);
131 mapScrollDown(pip, player, 0, pn);
132 mapScrollDown(pip, player, 1, pn);
133 modexShowPage(pip[1].page);
135 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
137 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))
139 if(player[pn].q<=(TILEWH/(player[pn].speed)))
142 player[pn].y+=(player[pn].speed);
143 animatePlayer(pip, player, pn, 0);
144 modexShowPage(pip[1].page);
146 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty++; }
150 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);
153 modexDrawPBufRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 64, 24, 32, &player[pn].data, 1);
155 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 64, 24, 32, &player[pn].data);
158 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 9);
160 modexShowPage(pip[1].page);
163 player[pn].triggerx = player[pn].tx;
164 player[pn].triggery = player[pn].ty+1;
169 if(pip[0].ty > 0 && pip[0].ty+pip[0].page->tilesh <= pip[0].map->height && player[pn].ty == pip[0].ty+pip[0].page->tilemidposscreeny &&
170 !(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!
172 if(player[pn].q<=(TILEWH/(player[pn].speed)))
175 animatePlayer(pip, player, pn, 1);
176 mapScrollUp(pip, player, 0, pn);
177 mapScrollUp(pip, player, 1, pn);
178 modexShowPage(pip[1].page);
180 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
182 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))
184 if(player[pn].q<=(TILEWH/(player[pn].speed)))
187 player[pn].y-=(player[pn].speed);
188 animatePlayer(pip, player, 0, pn);
189 modexShowPage(pip[1].page);
191 } else { player[pn].q = 1; player[pn].d = 2; player[pn].ty--; }
195 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);
198 modexDrawPBufRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 0, 24, 32, &player[pn].data, 1);
200 modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 0, 24, 32, &player[pn].data);
203 modexClearRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 12);
205 modexShowPage(pip[1].page);
208 player[pn].triggerx = player[pn].tx;
209 player[pn].triggery = player[pn].ty-1;
215 allocMap(int w, int h) {
220 result.data = malloc(sizeof(byte) * w * h);
221 //result.data = (byte *)alloc_emem(((int)sizeof(byte) * w * h)/1024);
222 if(isEMS() || checkEMS())
225 //emmhandle = mallocEMS(coretotalEMS());//alloc_emem((int)sizeof(map))
226 mm.length=sizeof(result);
228 mm.sourceOff=ptr2long(&result);
231 ist = move_emem(&mm);
232 if(!ist){ dealloc_emem(emmhandle); exit(5); }
233 printf("%d\n", coretotalEMS());
240 initMap(map_t *map) {
241 // just a place holder to fill out an alternating pattern
245 //if(!isEMS() || !checkEMS())
246 // map->tiles = malloc(sizeof(tiles_t));
248 // map->tiles = (tiles_t *)alloc_emem(sizeof(tiles_t));
250 //create the tile set
251 //if(!isEMS() || !checkEMS())
252 // map->tiles->data = malloc(sizeof(bitmap_t));
254 // map->tiles->data = (bitmap_t *)alloc_emem(sizeof(bitmap_t));
255 // map->tiles->data->width = (TILEWH);
256 // map->tiles->data->height= TILEWH;
257 //if(!isEMS() || !checkEMS())
258 // map->tiles->data->data = malloc((TILEWH*2)*TILEWH);
260 // map->tiles->data->data = (byte *)alloc_emem((TILEWH*2)*TILEWH);
261 // map->tiles->tileHeight = TILEWH;
262 // map->tiles->tileWidth =TILEWH;
263 // map->tiles->rows = 1;
264 // map->tiles->cols = 1;//2;
267 //for(y=0; y<map->height; y++) {
268 //for(x=0; x<map->width; x++) {
270 for(yy=0; yy<TILEWH; yy++) {
271 for(xx=0; xx<(TILEWH); xx++) {
273 map->tiles->data->data[i+1] = map->data[q];//28;//0x24;
274 // printf("[%d]", map->tiles->data->data[i]);
276 //map->tiles->data->data[i] = map->data[q];//0;//0x34;
277 //printf("]%d[==[%d]", i, map->tiles->data->data[i]);
283 // printf("[%d]", map->data[q]);
290 for(y=0; y<map->height; y++) {
291 for(x=0; x<map->width; x++) {
293 printf("[%d]", map->data[i]);
294 //tile = tile ? 0 : 1;
297 //tile = tile ? 0 : 1;
301 void near mapScrollRight(map_view_t *mv, player_t *player, word id, word plid)
303 word x, y; /* coordinate for drawing */
305 /* increment the pixel position and update the page */
306 mv[id].page->dx += player[plid].speed;
308 /* check to see if this changes the tile */
309 if(mv[id].page->dx >= mv[id].dxThresh )
311 /* go forward one tile */
313 /* Snap the origin forward */
314 mv[id].page->data += 4;
315 mv[id].page->dx = mv[id].map->tiles->tileWidth;
318 /* draw the next column */
319 x= mv[0].page->sw + mv[id].map->tiles->tileWidth;
322 mapDrawCol(&mv[0], mv[0].tx + mv[0].page->tilesw, mv[0].ty-1, x, player, mv->page->dx);
324 modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->tilesh+2));
329 void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
331 word x, y; /* coordinate for drawing */
333 /* increment the pixel position and update the page */
334 mv[id].page->dx -= player[plid].speed;
336 /* check to see if this changes the tile */
337 if(mv[id].page->dx == 0)
339 /* go backward one tile */
342 /* Snap the origin backward */
343 mv[id].page->data -= 4;
344 mv[id].page->dx = mv[id].map->tiles->tileWidth;
347 /* draw the next column */
351 mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
353 modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*(mv[0].page->tilesh+2));
358 void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)
360 word x, y; /* coordinate for drawing */
362 /* increment the pixel position and update the page */
363 mv[id].page->dy -= player[plid].speed;
365 /* check to see if this changes the tile */
366 if(mv[id].page->dy == 0 )
368 /* go down one tile */
370 /* Snap the origin downward */
371 mv[id].page->data -= mv[id].page->width*4;
372 mv[id].page->dy = mv[id].map->tiles->tileHeight;
375 /* draw the next row */
379 mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
381 modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tilesw+2), mv[id].map->tiles->tileHeight);
385 void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
387 word x, y; /* coordinate for drawing */
389 /* increment the pixel position and update the page */
390 mv[id].page->dy += player[plid].speed;
392 /* check to see if this changes the tile */
393 if(mv[id].page->dy >= mv[id].dyThresh )
395 /* go down one tile */
397 /* Snap the origin downward */
398 mv[id].page->data += mv[id].page->width*4;
399 mv[id].page->dy = mv[id].map->tiles->tileHeight;
402 /* draw the next row */
403 y= mv[0].page->sh + mv[id].map->tiles->tileHeight;
406 mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+mv[0].page->tilesh, y, player, mv->page->dy);
408 modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*(mv[0].page->tilesw+2), mv[id].map->tiles->tileHeight);
412 sword chkmap(map_t *map, word q)
415 static byte x[(MAPW*MAPH)+1] =
416 { 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 };
417 /*1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, \
418 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
419 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
420 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, \
421 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 1, 11, 11, 3, 1, 1, 1, 1, 1, 1, \
422 1, 1, 1, 1, 0, 0, 0, 0, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
423 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
424 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
425 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
426 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
427 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
428 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
429 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, \
430 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, \
431 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 4 };*/
432 //check for failed to load map
433 if((map->width == map->height == 0) && (q>0))
435 //initiate a null map!
436 map->width=MAPW;///2;
437 map->height=MAPH;///2;
438 // map->data = malloc(((map->width*map->height)+1)*sizeof(byte));
440 map->tiles = malloc(sizeof(tiles_t));
441 //fix this to be far~
442 // bp = bitmapLoadPcx("data/ed.pcx");
443 // map->tiles->data = &bp;
444 map->tiles->debug_data = map->data;
445 map->tiles->tileHeight = 16;
446 map->tiles->tileWidth = 16;
447 map->tiles->rows = 1;
448 map->tiles->cols = 1;
449 map->tiles->debug_text = true;
451 else map->tiles->debug_text = false;
455 void mapGoTo(map_view_t *mv, int tx, int ty)
460 /* set up the coordinates */
463 mv->page->dx = mv->map->tiles->tileWidth;
464 mv->page->dy = mv->map->tiles->tileHeight;
466 /* set up the thresholds */
467 mv->dxThresh = mv->map->tiles->tileWidth * 2;
468 mv->dyThresh = mv->map->tiles->tileHeight * 2;
471 modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
473 i=mv->ty * mv->map->width + mv->tx;
474 for(ty=mv->ty-1; py < mv->page->sh+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
475 mapDrawWRow(mv, tx-1, ty, py);
476 i+=mv->map->width - tx;
482 mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)
492 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color!
496 rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth);
497 ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight);
498 ////0000printf("i=%d\n", i);
499 switch(t->debug_text)
503 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((t->debug_data[i])+1)*2);
504 //cannot print number value du to it being slow as bakapee
507 //modexDrawPBufRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data), 0);
509 modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
514 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (t->debug_data[i])+1);
515 //modexprintbig(page, x, y, 1, 15, 0, (t->debug_data));
516 /*for(texty=0; texty<2; texty++)
518 for(textx=0; textx<2; textx++)
520 // modexprint(page, x+(textx*8), y+(texty*8), 1, (word)(t->debug_data), 0, (t->debug_data));
528 void near mapDrawRow(map_view_t *mv, int tx, int ty, word y, player_t *p, word poopoffset)
532 poopoffset%=p[0].speed;
533 //printf("y: %d\n", poopoffset);
534 /* the position within the map array */
535 i=ty * mv->map->width + tx;
536 for(x=poopoffset; x<(mv->page->sw+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
538 /* we are in the map, so copy! */
539 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
545 void near mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *p, word poopoffset)
549 poopoffset%=p[0].speed;
550 //printf("x: %d\n", poopoffset);
551 /* location in the map array */
552 i=ty * mv->map->width + tx;
554 /* We'll copy all of the columns in the screen,
555 i + 1 row above and one below */
556 for(y=poopoffset; y<(mv->page->sh+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
558 /* we are in the map, so copy away! */
559 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
565 void mapDrawWRow(map_view_t *mv, int tx, int ty, word y)
570 /* the position within the map array */
571 i=ty * mv->map->width + tx;
572 for(x=0; x<mv->page->sw+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
574 /* we are in the map, so copy! */
575 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
581 void mapDrawWCol(map_view_t *mv, int tx, int ty, word x)
586 /* location in the map array */
587 i=ty * mv->map->width + tx;
589 /* We'll copy all of the columns in the screen,
590 i + 1 row above and one below */
591 for(y=0; y<mv->page->sh+mv->dyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
593 /* we are in the map, so copy away! */
594 mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
606 void shinku(map_view_t *pip, global_game_variables_t *gv)
609 //modexCopyPageRegion(pip[1].page, pip[2].page, 16, 16, 16, 16, (14*8)+4, 8+4);
610 if(elapsed_timer(gv) >= (1.0 / gv->kurokku.frames_per_second))
617 //t=(((*(gv->clock))-gv->clock_start) /18.2);
618 sprintf(gv->pee, "%f fps", (double)gv->kurokku.tiku/ticktock(gv));
619 modexprint(pip[1].page, 16, 16, 1, 15, 0, gv->pee);
620 //(gv->clock_start)=*(gv->clock);
623 //modexprint(page, 16, 16, 1, 15, 0, pee);
625 switch(gv->kurokku.fpscap)
628 //modexprint(page, 16, 32, 1, 15, 0, "sanic!");
629 gv->kurokku.frames_per_second=1;
632 //turn this off if XT
634 gv->kurokku.frames_per_second=60;
639 void near animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch)
641 sword x = player[playnum].x;
642 sword y = player[playnum].y;
644 word dire=32; //direction
646 word dire=8; //direction
648 sword qq; //scroll offset
649 word ls = player[playnum].persist_aniframe;
651 if(scrollswitch==0) qq = 0;
652 else qq = ((player[playnum].q)*(player[playnum].speed));
655 switch (player[playnum].d)
659 dire*=player[playnum].d;
664 dire*=(player[playnum].d-2);
671 dire*=(player[playnum].d-2);
676 dire*=(player[playnum].d+2);
683 #define FRAME1 modexDrawPBufRegion(pip[1].page, x, y, 48, dire, 24, 32, &player[playnum].data, 1);
684 #define FRAME2 modexDrawPBufRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data, 1);
685 #define FRAME3 modexDrawPBufRegion(pip[1].page, x, y, 0, dire, 24, 32, &player[playnum].data, 1);
686 #define FRAME4 modexDrawPBufRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data, 1);
688 #define FRAME1 modexDrawSpriteRegion(pip[1].page, x, y, 48, dire, 24, 32, &player[playnum].data);
689 #define FRAME2 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
690 #define FRAME3 modexDrawSpriteRegion(pip[1].page, x, y, 0, dire, 24, 32, &player[playnum].data);
691 #define FRAME4 modexDrawSpriteRegion(pip[1].page, x, y, 24, dire, 24, 32, &player[playnum].data);
694 #define FRAME1 modexClearRegion(pip[1].page, x, y, 24, 32, 2+dire);
695 #define FRAME2 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
696 #define FRAME3 modexClearRegion(pip[1].page, x, y, 24, 32, dire);
697 #define FRAME4 modexClearRegion(pip[1].page, x, y, 24, 32, 1+dire);
699 modexCopyPageRegion(pip[1].page, pip[0].page, x-4, y-4, x-4, y-4, 28, 40);
700 //modexCopyPageRegion(pip[2].page, pip[1].page, 16, 16, 16, 16, (14*8)+4, 8+4);
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);