From 825e44f7e2255268fedd03109c29a35ff1243c16 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Fri, 9 Dec 2016 08:46:50 -0600 Subject: [PATCH] zcroll16 merged with scroll16 --- MEMINFO.16W | 0 src/lib/16_mm.c | 4 - src/lib/doslib | 2 +- src/lib/scroll16.c | 92 +++++++++++++++ src/lib/scroll16.h | 26 ++++- src/lib/zcroll16.c | 276 --------------------------------------------- src/lib/zcroll16.h | 95 ---------------- src/scroll.c | 1 + src/zcroll.c | 4 +- 9 files changed, 120 insertions(+), 380 deletions(-) delete mode 100755 MEMINFO.16W delete mode 100755 src/lib/zcroll16.c delete mode 100755 src/lib/zcroll16.h diff --git a/MEMINFO.16W b/MEMINFO.16W deleted file mode 100755 index e69de29b..00000000 diff --git a/src/lib/16_mm.c b/src/lib/16_mm.c index df1dd7f7..5bbad2b1 100755 --- a/src/lib/16_mm.c +++ b/src/lib/16_mm.c @@ -756,7 +756,6 @@ void MM_Startup(global_game_variables_t *gvar) //huge void huge *start; void far *start; word segstart;//,endfree; - //memptr *peeonself; if(gvar->mm.mmstarted) MM_Shutdown(gvar); @@ -782,11 +781,8 @@ void MM_Startup(global_game_variables_t *gvar) gvar->mm.mmnew->length = 0xffff; gvar->mm.mmnew->attributes = LOCKBIT; gvar->mm.mmnew->next = NULL; - //gvar->mm.mmnew->useptr = peeonself; gvar->mm.mmrover = gvar->mm.mmhead; - //printf(" %x\n", peeonself); - //printf(" %x\n", *peeonself); // // get all available near conventional memory segments // diff --git a/src/lib/doslib b/src/lib/doslib index e3437c72..b3d96d39 160000 --- a/src/lib/doslib +++ b/src/lib/doslib @@ -1 +1 @@ -Subproject commit e3437c7296b618a363f5452ebf90a8c5cf0558fa +Subproject commit b3d96d397ed4006afe4e4273b00db366dc53fd0d diff --git a/src/lib/scroll16.c b/src/lib/scroll16.c index 06c7fe95..d6b1a06a 100755 --- a/src/lib/scroll16.c +++ b/src/lib/scroll16.c @@ -924,3 +924,95 @@ void near animatePlayer(map_view_t *pip, player_t *player, word pn, sword scroll //printf("x=%d y=%d bx=%d by=%d\n", x, y, bx, by); pip->video->r=1; } + +/* + * from zcroll16.c +*/ + +boolean boundary_check(int x, int y, int dx, int dy, int h, int w) +{ + return (dx > 0 && (x + dx) < w) || (dx < 0 && (x + dx) >= 0) || (dy > 0 && (y + dy) < h) || (dy < 0 && (y + dy) >= 0) || (dx == dy && dx == 0); +} + +boolean coll_check(int x, int y, int dx, int dy, map_view_t *map_v) +{ + // Assume everything crosses at most 1 tile at once + return dx && 1;//crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v); +} + +boolean ZC_walk(entity_t *ent, map_view_t *map_v) +{ + //return 1; + int dx = 1; + int dy = 1; + switch(ent->d) + { + case 2: + return 0; + case 1: + dx = -dx; + case 3: + dy = 0; + break; + case 0: + dy = -dy; + case 4: + dx = 0; + break; + } + if(coll_check(ent->x, ent->y, dx, dy, map_v)) + { + // Allow movement + // Set speed + // Start animation + // Mark next tile as occupied + // Mark this tile as vacant + return 1; + } + return 0; +} + +void player_walk(player_t *player, map_view_t *map_v){ + int dx=16, dy=16; + if(ZC_walk(player->ent, map_v) && boundary_check(map_v->tx, map_v->ty, dx, dy, map_v->map->width - 2*map_v->page->tilesw, map_v->map->height - 2*map_v->page->tilesh)) + { + mapScroll(map_v, player); + // (Un)load stuff? + } +} + +void near mapScroll(map_view_t *mv, player_t *player) +{ + //word x, y; /* coordinate for drawing */ + int c = 1; + int delta; + mv->delta += player->dx | player->dy; + delta = mv->delta; + mv->d = (player->dx) ? (player->dx > 0) ? 3 : 1 : (player->dy) ? (player->dy > 0) ? 4 : 0 : 2; + switch(mv->d){ + case 4: + c = -1; + delta = -delta; + case 0: + if(!(delta + mv->dxThresh)) + { + mv->delta = 0; + mv->ty += c; + } + break; + case 3: + c = -1; + delta = -delta; + case 1: + if(!(delta + mv->dyThresh)) + { + mv->delta = 0; + mv->tx += c; + } + break; + default: + break; + } + + mv->video->r=1; +} diff --git a/src/lib/scroll16.h b/src/lib/scroll16.h index a7c4d4b3..4f1b539f 100755 --- a/src/lib/scroll16.h +++ b/src/lib/scroll16.h @@ -56,11 +56,24 @@ typedef struct { page_t *page; int tx; //appears to be the top left tile position on the viewable screen map int ty; //appears to be the top left tile position on the viewable screen map - word dxThresh; //???? - word dyThresh; //???? + word dxThresh; //Threshold for physical tile switch + word dyThresh; //Threshold for physical tile switch video_t *video; //pointer to game variables of the video pan_t *pan; //pointer the the page panning debug system + int dx, dy, delta, d; } map_view_t; +/* Map is presumed to: + * 1. Have all the required layers and tilesets within itself + * 2. Have a 'fence' around accessible blocks to simplify boundary logic + * 3. Have a persistent map and tile size among the layers + * Map view is presumed to: + * 1. Calculate, store and update a panning info, which includes, but not limited to: + * combined layer information, actual map representation (reflecting real state of the game), + * pixel shift for smooth tile scrolling. + * 2. Provide ways to draw a visible part of map. For simplicity with smooth scrolling, + * additional row/column is always drawn at the each side of the map. This implies that 'fence' + * should have a sprite too. Map is drawn left-to-right, top-to-bottom. + */ typedef struct { @@ -99,4 +112,13 @@ void mapDrawWCol(map_view_t *mv, int tx, int ty, word x); void shinku(global_game_variables_t *gv); void near animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch); +// Move an entity around. Should actually be in 16_entity +boolean ZC_walk(entity_t *ent, map_view_t *map_v); + +// Move player around and call map scrolling if required/possible +void walk_player(player_t *player, map_view_t *map_v); + +// Scroll map in one direction (assumed from player's movement) +void near mapScroll(map_view_t *mv, player_t *player); + #endif /*__SCROLL16_H_*/ diff --git a/src/lib/zcroll16.c b/src/lib/zcroll16.c deleted file mode 100755 index a58dfad1..00000000 --- a/src/lib/zcroll16.c +++ /dev/null @@ -1,276 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ -/* - scroll16 library~ -*/ -#include "src/lib/zcroll16.h" - -boolean boundary_check(int x, int y, int dx, int dy, int h, int w){ - return (dx > 0 && (x + dx) < w) || (dx < 0 && (x + dx) >= 0) || (dy > 0 && (y + dy) < h) || (dy < 0 && (y + dy) >= 0) || (dx == dy && dx == 0); -} - -boolean coll_check(int x, int y, int dx, int dy, map_view_t *map_v){ - // Assume everything crosses at most 1 tile at once - return dx && 1;//crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v); -} - -boolean walk(entity_t *ent, map_view_t *map_v){ - return 1; - int dx = 1; - int dy = 1; - switch(ent->d){ - case STOP: - return 0; - case LEFT: - dx = -dx; - case RIGHT: - dy = 0; - break; - case UP: - dy = -dy; - case DOWN: - dx = 0; - break; - } - if(coll_check(ent->x, ent->y, dx, dy, map_v)){ - // Allow movement - // Set speed - // Start animation - // Mark next tile as occupied - // Mark this tile as vacant - return 1; - } - return 0; -} - -void player_walk(player_t *player, map_view_t *map_v){ - int dx, dy; - if(walk(player->ent, map_v) && boundary_check(map_v->tx, map_v->ty, dx, dy, map_v->map->width - 2*map_v->page->tilesw, map_v->map->height - 2*map_v->page->tilesh)){ - mapScroll(map_v, player); - // (Un)load stuff? - } -} - -void mapGoTo(map_view_t *mv, int tx, int ty) -{ - return; -} - -void near mapScroll(map_view_t *mv, player_t *player){ - word x, y; /* coordinate for drawing */ - int c = 1; - int delta; - mv->delta += player->dx | player->dy; - delta = mv->delta; - mv->d = (player->dx) ? (player->dx > 0) ? RIGHT : LEFT : (player->dy) ? (player->dy > 0) ? DOWN : UP : STOP; - switch(mv->d){ - case DOWN: - c = -1; - delta = -delta; - case UP: - if(!(delta + mv->dxThresh)){ - mv->delta = 0; - mv->ty += c; - } - break; - case RIGHT: - c = -1; - delta = -delta; - case LEFT: - if(!(delta + mv->dyThresh)){ - mv->delta = 0; - mv->tx += c; - } - break; - default: - break; - } - - mv->video->r=1; -} - -sword chkmap(map_t *map, word q) -{ - /* -// bitmap_t bp; - static byte x[(MAPW*MAPH)+1] = -{ 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 }; - //check for failed to load map - if((map->width == map->height == 0) && (q>0)) - { - //initiate a null map! - map->width=MAPW;///2; - map->height=MAPH;///2; -// map->data = malloc(((map->width*map->height)+1)*sizeof(byte)); - map->data = &x; - map->tiles = malloc(sizeof(tiles_t)); - //fix this to be far~ -// bp = bitmapLoadPcx("data/ed.pcx"); -// map->tiles->data = &bp; - map->tiles->debug_data = map->data; - map->tiles->tileHeight = 16; - map->tiles->tileWidth = 16; - map->tiles->rows = 1; - map->tiles->cols = 1; - map->tiles->debug_text = true; - } - else map->tiles->debug_text = false;*/ - return 0; -} - -//TODO: player position here - -void near -mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) -{ - word rx; - word ry; - word textx=0; - word texty=0; - //if(i==0) i=2; - if(i==0) - { - //wwww - modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 0); //currently the over scan color! - } - else - { - rx = (((i-1) % ((t->data->width)/t->tileWidth)) * t->tileWidth); - ry = (((i-1) / ((t->data->height)/t->tileHeight)) * t->tileHeight); -////0000printf("i=%d\n", i); - switch(t->debug_text) - { - case 0: -#ifndef TILERENDER - modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, ((t->debug_data[i])+1)); - //modexprint(page, x, y, 1, 15, 0, (char const *)(t->debug_data[i])); -#else - PBUFBFUN (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data)); - /* then the sprite. note modding ram ptr means we just draw to (x&3,0) */ - //draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header)); - //modexDrawBmpRegion (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data)); -#endif - break; - case 1: - modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, (t->debug_data[i])+1); - //modexprintbig(page, x, y, 1, 15, 0, (t->debug_data)); - /*for(texty=0; texty<2; texty++) - { - for(textx=0; textx<2; textx++) - {*/ -// modexprint(page, x+(textx*8), y+(texty*8), 1, (word)(t->debug_data), 0, (t->debug_data)); -/* } - }*/ - break; - } - } -} - -boolean pageflipflop = 1; - -void near animatePlayer(map_view_t *pip, player_t *player, sword scrollswitch) -{ - sword x = player->x; - sword y = player->y; - sword bx = x+16; //buffer's x - sword by = y+16; //buffer's y - word dire=32; //direction - sword qq; //scroll offset - word ls = player->persist_aniframe; - - switch(scrollswitch) - { - case 0: - qq = 0; - break; - default: - qq = ((player->q)*(player->speed)); - break; - } - //x-=4; - //y-=pip->map->tiles->tileHeight; - switch (player->d) - { - case 0: - //up - dire*=player->d; - y-=qq; - by-=4; - break; - case 3: - // right - dire*=(player->d-2); - x+=qq; - bx+=4; - break; - case 2: - break; - case 4: - //down - dire*=(player->d-2); - y+=qq; - by+=4; - break; - case 1: - //left - dire*=(player->d+2); - x-=qq; - bx-=4; - break; - } - -#ifdef SPRITE -#define FRAME1 PBUFSFUN(pip[/*!*/(pip->video->p)].page, x, y, 48, dire, 24, 32, PLAYERBMPDATA); -#define FRAME2 PBUFSFUN(pip[/*!*/(pip->video->p)].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA); -#define FRAME3 PBUFSFUN(pip[/*!*/(pip->video->p)].page, x, y, 0, dire, 24, 32, PLAYERBMPDATA); -#define FRAME4 PBUFSFUN(pip[/*!*/(pip->video->p)].page, x, y, 24, dire, 24, 32, PLAYERBMPDATA); -#else -#define FRAME1 modexClearRegion(pip[/*!*/(pip->video->p)].page, x, y, 24, 32, 2+dire); -#define FRAME2 modexClearRegion(pip[/*!*/(pip->video->p)].page, x, y, 24, 32, 1+dire); -#define FRAME3 modexClearRegion(pip[/*!*/(pip->video->p)].page, x, y, 24, 32, dire); -#define FRAME4 modexClearRegion(pip[/*!*/(pip->video->p)].page, x, y, 24, 32, 1+dire); -#endif - if(!pageflipflop) - modexCopyPageRegion(pip->page, pip->page, x-4, y-4, x-4, y-4, 28, 36); - else{ - //copy old bg to page0 - //modexCopyPageRegion(pip[3].page, pip[0].page, bx, by, 0, 0, 20, 36); - //update buffer - //modexCopyPageRegion(pip[0].page, pip[3].page, 0, 0, x, y, 20, 36); - } - switch(ls) - { - case 1: - FRAME1 - break; - case 2: - FRAME2 - break; - case 3: - FRAME3 - break; - case 4: - FRAME4 - break; - } - pip->video->r=1; -} diff --git a/src/lib/zcroll16.h b/src/lib/zcroll16.h deleted file mode 100755 index 0c351801..00000000 --- a/src/lib/zcroll16.h +++ /dev/null @@ -1,95 +0,0 @@ -/* Project 16 Source Code~ - * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover - * - * This file is part of Project 16. - * - * Project 16 is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. - * - * Project 16 is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see , or - * write to the Free Software Foundation, Inc., 51 Franklin Street, - * Fifth Floor, Boston, MA 02110-1301 USA. - * - */ - -#ifndef __ZCROLL16_H_ -#define __ZCROLL16_H_ - -#include "src/lib/16_head.h" -//#include "src/lib/bakapee.h" -#include "src/lib/16_vl.h" -#include "src/lib/16_in.h" -#include "src/lib/bitmap.h" -#include "src/lib/16_map.h" //map is loaded here www -#include "src/lib/16_timer.h" -#include "src/lib/wcpu/wcpu.h" - -#include -#include -#include -#include - -#define SPRITE -//#define TILERENDER - -//modexDrawSpritePBufRegion -//modexDrawBmpPBufRegion -#define PBUFSFUN modexDrawSpriteRegion -#define PBUFBFUN modexDrawBmpRegion -#define PLAYERBMPDATA player->data - - -#define MAPW 40 -#define MAPH 30 - -extern boolean pageflipflop, pageploop; -extern unsigned char shinku_fps_indicator_page; - -typedef struct { - map_t *map; - page_t *page; - int tx; //appears to be the top left tile position on the viewable screen map - int ty; //appears to be the top left tile position on the viewable screen map - word dxThresh; //Threshold for physical tile switch - word dyThresh; //Threshold for physical tile switch - video_t *video; //pointer to game variables of the video - pan_t *pan; //pointer the the page panning debug system - int dx, dy, delta, d; -} map_view_t; -/* Map is presumed to: - * 1. Have all the required layers and tilesets within itself - * 2. Have a 'fence' around accessible blocks to simplify boundary logic - * 3. Have a persistent map and tile size among the layers - * Map view is presumed to: - * 1. Calculate, store and update a panning info, which includes, but not limited to: - * combined layer information, actual map representation (reflecting real state of the game), - * pixel shift for smooth tile scrolling. - * 2. Provide ways to draw a visible part of map. For simplicity with smooth scrolling, - * additional row/column is always drawn at the each side of the map. This implies that 'fence' - * should have a sprite too. Map is drawn left-to-right, top-to-bottom. - */ - -// Move an entity around. Should actually be in 16_entity -boolean walk(entity_t *ent, map_view_t *map_v); - -// Move player around and call map scrolling if required/possible -void walk_player(player_t *player, map_view_t *map_v); - -// Scroll map in one direction (assumed from player's movement) -void near mapScroll(map_view_t *mv, player_t *player); -sword chkmap(map_t *map, word q); -void mapGoTo(map_view_t *mv, int tx, int ty); -void near mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y); -//void qclean(); -void shinku(global_game_variables_t *gv); -void near animatePlayer(map_view_t *pip, player_t *player, sword scrollswitch); - -#endif /*__ZCROLL16_H_*/ diff --git a/src/scroll.c b/src/scroll.c index bb086304..14761936 100755 --- a/src/scroll.c +++ b/src/scroll.c @@ -327,6 +327,7 @@ void main(int argc, char *argv[]) printf("gvar.video.p=%u ", gvar.video.p); printf("gvar.video.r=%u ", gvar.video.r); printf("pageflipflop=%u\n", pageflipflop); //printf("gvar.kurokku: "); printf("%.0f ", clock()); printf("tiku=%lu ", gvar.kurokku.tiku); printf("t=%.0f ", gvar.kurokku.t); printf("ticktock()=%f ", ticktock(&gvar)); printf("%.0f fps", (double)gvar.kurokku.tiku/ticktock(&gvar)); + printf("&global_temp_status_text = %Fp\n", &global_temp_status_text); printf("\n"); //printf("map.width=%d map.height=%d map.data[0]=%d\n", mv[0].map->width, mv[0].map->height, mv[0].map->data[0]); diff --git a/src/zcroll.c b/src/zcroll.c index 066759cf..f9ef8382 100755 --- a/src/zcroll.c +++ b/src/zcroll.c @@ -20,7 +20,7 @@ * */ -#include "src/lib/zcroll16.h" +#include "src/lib/scroll16.h" #include "src/lib/16_timer.h" #include "src/lib/wcpu/wcpu.h" #include "src/lib/16render.h" @@ -156,7 +156,7 @@ if(!dbg_noplayerinpu) //player movement IN_ReadControl(0, &player); if(!panswitch){ - walk(player[0].ent, mv); + ZC_walk(player[0].ent, mv); //walk(mv, &player, 0); } -- 2.39.2