map_t allocMap(int w, int h);
void initMap(map_t *map);
-void mapScrollRight(map_view_t *mv, byte offset);
-void mapScrollLeft(map_view_t *mv, byte offest);
-void mapScrollUp(map_view_t *mv, byte offset);
-void mapScrollDown(map_view_t *mv, byte offset);
+void mapScrollRight(map_view_t *mv, byte offset, short lp);
+void mapScrollLeft(map_view_t *mv, byte offest, short lp);
+void mapScrollUp(map_view_t *mv, byte offset, short lp);
+void mapScrollDown(map_view_t *mv, byte offset, short lp);
void mapGoTo(map_view_t *mv, int tx, int ty);
void mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y);
-void mapDrawRow(map_view_t *mv, int tx, int ty, word y);
-void mapDrawCol(map_view_t *mv, int tx, int ty, word x);
+void mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset);
+void mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset);
+void mapDrawWRow(map_view_t *mv, int tx, int ty, word y);
+void mapDrawWCol(map_view_t *mv, int tx, int ty, word x);
void animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp);
#define TILEWH 16
//TODO: erase player initial draw
modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
//temp draw trigger box
- modexClearRegion(spri->page, player.triggerx*16, player.triggery*16, 16, 16, 0);
- modexClearRegion(bg->page, player.triggerx*16, player.triggery*16, 16, 16, 0);
+ modexClearRegion(spri->page, player.triggerx*16, player.triggery*16, 16, 16, 1);
+ modexClearRegion(bg->page, player.triggerx*16, player.triggery*16, 16, 16, 1);
modexShowPage(spri->page);
while(!keyp(1))//!keyp(1))
{
INC_PER_FRAME;
//animatePlayer(bg, spri, mask, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
animatePlayer(bg, spri, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- mapScrollRight(bg, SPEED);
- mapScrollRight(spri, SPEED);
+ mapScrollRight(bg, SPEED, q);
+ mapScrollRight(spri, SPEED, q);
//mapScrollRight(mask, SPEED);
modexShowPage(spri->page);
}
INC_PER_FRAME;
//animatePlayer(bg, spri, mask, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);
animatePlayer(bg, spri, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- mapScrollLeft(bg, SPEED);
- mapScrollLeft(spri, SPEED);
+ mapScrollLeft(bg, SPEED, q);
+ mapScrollLeft(spri, SPEED, q);
//mapScrollLeft(mask, SPEED);
modexShowPage(spri->page);
}
INC_PER_FRAME;
//animatePlayer(bg, spri, mask, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);
animatePlayer(bg, spri, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- mapScrollDown(bg, SPEED);
- mapScrollDown(spri, SPEED);
+ mapScrollDown(bg, SPEED, q);
+ mapScrollDown(spri, SPEED, q);
//mapScrollDown(mask, SPEED);
modexShowPage(spri->page);
}
INC_PER_FRAME;
//animatePlayer(bg, spri, mask, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
animatePlayer(bg, spri, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- mapScrollUp(bg, SPEED);
- mapScrollUp(spri, SPEED);
+ mapScrollUp(bg, SPEED, q);
+ mapScrollUp(spri, SPEED, q);
//mapScrollUp(mask, SPEED);
modexShowPage(spri->page);
}
printf("player.triggy: %d\n", player.triggery);
printf("dxThresh: %d\n", bg->dxThresh);
printf("dyThresh: %d\n", bg->dyThresh);
- printf("temporary player sprite http://www.pixiv.net/member_illust.php?mode=medium&illust_id=45556867\n");
+ printf("temporary player sprite 0: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=45556867\n");
+ printf("temporary player sprite 1: http://www.pixiv.net/member_illust.php?mode=medium&illust_id=44606385\n");
+ printf("\n");
switch(detectcpu())
{
case 0: cpus = "8086/8088 or 186/88"; break;
for(y=0; y<TILEWH; y++) {
for(x=0; x<(TILEWH*2); x++) {
if(x<TILEWH)
- map->tiles->data->data[i] = 0x24;
+ map->tiles->data->data[i] = 28;//0x24;
else
- map->tiles->data->data[i] = 0x34;
+ map->tiles->data->data[i] = 0;//0x34;
i++;
}
}
void
-mapScrollRight(map_view_t *mv, byte offset) {
+mapScrollRight(map_view_t *mv, byte offset, short lp) {
word x, y; /* coordinate for drawing */
/* increment the pixel position and update the page */
/* Snap the origin forward */
mv->page->data += 4;
mv->page->dx = mv->map->tiles->tileWidth;
-
+ }
/* draw the next column */
x= SCREEN_WIDTH + mv->map->tiles->tileWidth;
- mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x);
- }
+ if(lp%2)
+ mapDrawCol(mv, mv->tx + 20 , mv->ty-1, x, mv->page->dx);
+ //}
}
void
-mapScrollLeft(map_view_t *mv, byte offset) {
+mapScrollLeft(map_view_t *mv, byte offset, short lp) {
word x, y; /* coordinate for drawing */
/* increment the pixel position and update the page */
/* Snap the origin backward */
mv->page->data -= 4;
mv->page->dx = mv->map->tiles->tileWidth;
-
- /* draw the next column */
- mapDrawCol(mv, mv->tx-1, mv->ty-1, 0);
}
+ /* draw the next column */
+ if(lp%2)
+ mapDrawCol(mv, mv->tx-1, mv->ty-1, 0, mv->page->dx);
+ //}
}
void
-mapScrollUp(map_view_t *mv, byte offset) {
+mapScrollUp(map_view_t *mv, byte offset, short lp) {
word x, y; /* coordinate for drawing */
/* increment the pixel position and update the page */
/* Snap the origin downward */
mv->page->data -= mv->page->width*4;
mv->page->dy = mv->map->tiles->tileHeight;
-
+ }
/* draw the next row */
y= 0;
- mapDrawRow(mv, mv->tx-1 , mv->ty-1, y);
- }
+ if(lp%3)
+ mapDrawRow(mv, mv->tx-1 , mv->ty-1, y, mv->page->dy);
+ //}
}
void
-mapScrollDown(map_view_t *mv, byte offset) {
+mapScrollDown(map_view_t *mv, byte offset, short lp) {
word x, y; /* coordinate for drawing */
/* increment the pixel position and update the page */
/* Snap the origin downward */
mv->page->data += mv->page->width*4;
mv->page->dy = mv->map->tiles->tileHeight;
-
+ }
/* draw the next row */
y= SCREEN_HEIGHT + mv->map->tiles->tileHeight;
- mapDrawRow(mv, mv->tx-1 , mv->ty+15, y);
- }
+ if(lp%3)
+ mapDrawRow(mv, mv->tx-1 , mv->ty+15, y, mv->page->dy);
+ //}
}
py=0;
i=mv->ty * mv->map->width + mv->tx;
for(ty=mv->ty-1; py < SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; ty++, py+=mv->map->tiles->tileHeight) {
- mapDrawRow(mv, tx-1, ty, py);
+ mapDrawWRow(mv, tx-1, ty, py);
i+=mv->map->width - tx;
}
}
void
-mapDrawRow(map_view_t *mv, int tx, int ty, word y) {
+mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset) {
word x;
int i;
+ poopoffset%=6;
/* the position within the map array */
i=ty * mv->map->width + tx;
- for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
+ for(x=poopoffset*TILEWH; x<(SCREEN_WIDTH+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
if(i>=0) {
/* we are in the map, so copy! */
mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
void
-mapDrawCol(map_view_t *mv, int tx, int ty, word x) {
+mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
+ int y;
+ int i;
+ poopoffset%=4;
+
+ /* location in the map array */
+ i=ty * mv->map->width + tx;
+
+ /* We'll copy all of the columns in the screen,
+ i + 1 row above and one below */
+ for(y=poopoffset*TILEWH; y<(SCREEN_HEIGHT+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
+ if(i>=0) {
+ /* we are in the map, so copy away! */
+ mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
+ }
+ i += mv->map->width;
+ }
+}
+
+void
+mapDrawWRow(map_view_t *mv, int tx, int ty, word y) {
+ word x;
+ int i;
+
+ /* the position within the map array */
+ i=ty * mv->map->width + tx;
+ for(x=0; x<SCREEN_WIDTH+mv->dxThresh && tx < mv->map->width; x+=mv->map->tiles->tileWidth, tx++) {
+ if(i>=0) {
+ /* we are in the map, so copy! */
+ mapDrawTile(mv->map->tiles, mv->map->data[i], mv->page, x, y);
+ }
+ i++; /* next! */
+ }
+}
+
+void
+mapDrawWCol(map_view_t *mv, int tx, int ty, word x) {
int y;
int i;