16LIBOBJS = bakapee.$(OBJ) 16_in.$(OBJ) 16_mm.$(OBJ) wcpu.$(OBJ) 16_head.$(OBJ) scroll16.$(OBJ) 16_ca.$(OBJ)
GFXLIBOBJS = modex16.$(OBJ) bitmap.$(OBJ) planar.$(OBJ) 16text.$(OBJ)
-TESTEXEC = exmmtest.exe test.exe pcxtest.exe test2.exe palettec.exe maptest.exe fmemtest.exe fonttest.exe fontgfx.exe sountest.exe tsthimem.exe inputest.exe
+TESTEXEC = exmmtest.exe test.exe pcxtest.exe test2.exe palettec.exe maptest.exe fmemtest.exe fonttest.exe fontgfx.exe sountest.exe tsthimem.exe inputest.exe scroll.exe
#testemm.exe testemm0.exe fonttes0.exe miditest.exe
EXEC = 16.exe bakapi.exe $(TESTEXEC)
#
#Test Executables!
#
-scroll.exe: scroll.$(OBJ) 16.lib mapread.$(OBJ) jsmn.$(OBJ)# dos_kb.$(OBJ)
- wcl $(FLAGS) scroll.$(OBJ) 16.lib mapread.$(OBJ) jsmn.$(OBJ)# dos_kb.$(OBJ)
+scroll.exe: scroll.$(OBJ) 16.lib mapread.$(OBJ) jsmn.$(OBJ)
+ wcl $(FLAGS) scroll.$(OBJ) 16.lib mapread.$(OBJ) jsmn.$(OBJ)
scroll.$(OBJ): $(SRC)scroll.c
wcl $(FLAGS) -c $(SRC)scroll.c
+
sega.exe: sega.$(OBJ)
wcl $(FLAGS) -c sega.$(OBJ)
sega.$(OBJ): $(SRC)sega.c
-/* Project 16 Source Code‾
+/* Project 16 Source Code~
* Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669
*
* This file is part of Project 16.
void
main(int argc, char *argv[])
{
- global_game_variables_t gamevars;
- bakapee_t bakapee;
+ static bakapee_t bakapee;
page_t screen;
word key,d,xpos,ypos,xdir,ydir;
int ch=0x0;
ydir=1;
bakapee.xx = rand()&0%SCREEN_WIDTH;
bakapee.yy = rand()&0%SCREEN_HEIGHT;
- bakapee.gq = LGQ;
+ bakapee.qq = 0;
+ bakapee.gq = 0;
bakapee.sx=0;
bakapee.sy=0;
bakapee.bakax=0;
bakapee.bakay=0;
+ bakapee.coor=0;
- /* setup camera and screen‾ */
+ /* setup camera and screen~ */
screen = modexDefaultPage();
screen.width += (TILEWH*2);
screen.height += (TILEWH*2);
//modexDrawBmp(VGA, 0, 0, &bmp, 0); //____
//getch(); //____
+ VGAmodeX(1);
+ modexShowPage(&screen);
+
// screen savers
#ifdef BOINK
while(d!=0) // on!
}
else
{
- setVGAmodeX(&gamevars, 0);
+ VGAmodeX(0);
+ //modexLeave();
// user imput switch
- printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 0 to quit.¥n", getch()); // prompt the user
+ printf("Enter 1, 2, 3, 4, or 6 to run a screensaver, or enter 0 to quit.\n", getch()); // prompt the user
scanf("%d", &key);
//if(key==3){xx=yy=0;} // crazy screen saver wwww
- if(key==0) d=0;
- setVGAmodeX(&gamevars, 1);
+ if(key==0){ d=0; }else{
+ screen = modexDefaultPage();
+ screen.width += (TILEWH*2);
+ screen.height += (TILEWH*2);
+ VGAmodeX(1);
+ modexShowPage(&screen);
+ }
}
}
#else
- setVGAmodeX(&gamevars, 1);
while(1)
{ // conditions of screen saver
while(!kbhit())
mxOutText(xpos+1, ypos+SCREEN_HEIGHT-24, "| |$line3");
mxOutText(xpos+1, ypos+SCREEN_HEIGHT-16, "| |$line4");
mxOutText(xpos+1, ypos+SCREEN_HEIGHT-8, "========================================");
- mxFillBox(xpos+QUADWH, ypos+QUADWH+(TILEWH*12), TILEWH*2, TILEWH*2, 9, OP_SET); //portriat‾
+ mxFillBox(xpos+QUADWH, ypos+QUADWH+(TILEWH*12), TILEWH*2, TILEWH*2, 9, OP_SET); //portriat~
getch();
mxBitBlt(0, BS, SCREEN_WIDTH, TILEWH*BUFFMX, xpos, ypos+(TILEWH*12)); //copy background
getch();++++*/
if(ch==0x71)break; // 'q'
if(ch==0x1b)break; // 'ESC'
}
- setVGAmodeX(&gamevars, 0);
+// VGAmodeX(0);
#endif
- printf("bakapi ver. 1.04.13.04¥nis made by sparky4(≧ω≦) feel free to use it ^^¥nLicence: GPL v3¥n");
+ printf("bakapi ver. 1.04.13.04\nis made by sparky4\81i\81\86\83Ö\81\85\81j feel free to use it ^^\nLicence: GPL v3\n");
}
//pee!
static dword far* clockdw= (dword far*) 0x046C; /* 18.2hz clock */
//static dword clockdw=0;
-extern int profilehandle,debughandle;
+extern int profilehandle,debughandle; //make it into game global
#define nil ((void *)0)
//I hope this is correct!
//__self
typedef void __based(__self) * memptr;
+typedef struct
+{\r
+ int old_mode; //old video mode before game!
+} global_game_variables_t;
/* local function */\r
void wait(clock_t wait);
#define __16_IN__\r
\r
#include <string.h>\r
-#include "src/lib/16_head.h"\r
+#include "src/lib/16_head.h"
+#include "src/lib/bitmap.h"\r
\r
#ifdef __DEBUG__\r
//#define __DEBUG_InputMgr__\r
int triggery; //player's trigger box tile position on the viewable map\r
int setx; //NOT USED YET! player sprite sheet set on the image x\r
int sety; //NOT USED YET! player sprite sheet set on the image y\r
- word q; //loop variable\r
-// word d; //direction\r
- //bitmap_t data; //supposively the sprite sheet data\r
- int hp; //hitpoints of the player\r
+ word q; //loop variable
+ word speed; //player speed!\r
+ bitmap_t data; //supposively the sprite sheet data\r
+ int hp; //hitpoints of the player
+ word persist_aniframe; /* gonna be increased to 1 before being used, so 0 is ok for default */\r
CursorInfo info;\r
- ControlType Controls;\r
+ ControlType Controls;
} player_t;\r
\r
/*\r
#include "src/lib/bakapee.h"
-/////////////////////////////////////////////////////////////////////////////
-// //
-// setvideo() - This function Manages the video modes //
-// //
-/////////////////////////////////////////////////////////////////////////////
-void setVGAmodeX(global_game_variables_t *vid, boolean vq)
-{
- union REGS in, out;
-
- if(!vq)
- { // deinit the video
- // change to the video mode we were in before we switched to mode 13h
- modexLeave();
- in.h.ah = 0x00;
- in.h.al = vid->old_mode;
- int86(0x10, &in, &out);
-
- }else if(vq==1){ // init the video
- // get old video mode
- in.h.ah = 0xf;
- int86(0x10, &in, &out);
- vid->old_mode = out.h.al;
- // enter mode
- modexEnter();
- }
-}
-
void pdump(page_t *pee)
{
int mult=(QUADWH);
void dingas(bakapee_t *pee)
{
- if(pee->gq == BONK) dingu(pee);
+ if(pee->qq == BONK) dingu(pee);
if(!pee->bakax)
{
#ifdef TILE
if(pee->coor < HGQ && pee->coor < LGQ) pee->coor = LGQ;
if(pee->coor < HGQ)
{
+ pee->qq++;
pee->coor++;
}else{ pee->coor = LGQ;
+ pee->qq = 0;
pee->bakax = rand()%3; pee->bakay = rand()%3;
}
}
switch(q)
{
case 1:
- if(pee->gq<BONK)
+ if(pee->qq<BONK)
{
if(pee->xx==SCREEN_WIDTH){pee->bakax=0;}
if(pee->xx==0){pee->bakax=1;}
if(pee->yy==SCREEN_HEIGHT){pee->bakay=0;}
if(pee->yy==0){pee->bakay=1;}
- pee->gq++;
- }else pee->gq = LGQ;
+ pee->qq++;
+ }else pee->qq = 0;
break;
case 2:
- if(pee->gq<BONK)
+ if(pee->qq<BONK)
{
+ dingu(pee);
dingas(pee);
dingo(pee);
dingpp(page, pee); //plot the pixel/tile
#ifdef TILE
- modexClearRegion(page, (rand()*TILEWH)%SCREEN_WIDTH, (rand()*TILEWH)%(SCREEN_HEIGHT), TILEWH, TILEWH, 0);
+ modexClearRegion(page, (rand()*TILEWH)%page->width, (rand()*TILEWH)%(page->height), TILEWH, TILEWH, 0);
#else
- modexputPixel(page, rand()%SCREEN_WIDTH, rand()%(SCREEN_HEIGHT), 0);
+ modexputPixel(page, rand()%page->width, rand()%page->height, 0);
#endif
pee->bakax = rand()%3; pee->bakay = rand()%3;
- pee->gq++;
- }else pee->gq = LGQ;
+ pee->qq++;
+ }else pee->qq = 0;
break;
case 3:
- if(pee->gq<BONK)
+ if(pee->qq<BONK)
{
if(pee->xx!=SCREEN_WIDTH||pee->yy!=SCREEN_HEIGHT)
{
{
pee->xx++;
}
- pee->gq++;
- }else pee->gq = LGQ;
+ pee->qq++;
+ }else pee->qq = 0;
break;
case 4:
- if(pee->gq<BONK)
+ if(pee->qq<BONK)
{
+ dingu(pee);
dingas(pee);
dingo(pee);
dingpp(page, pee); //plot the pixel/tile
pee->bakax = rand()%3; pee->bakay = rand()%3;
- pee->gq++;
- }else pee->gq = LGQ;
+ pee->qq++;
+ }else pee->qq = 0;
break;
case 5:
colortest(page, pee);
break;
case 16: //interesting effects
- if(pee->gq<BONK)
+ if(pee->qq<BONK)
{
if(!pee->bakax){ pee->xx--;}
else if(pee->bakax>0){ pee->xx++; }
if(!pee->bakay){ pee->yy--;}
else if(pee->bakay>0){ pee->yy++; }
+ dingu(pee);
dingas(pee);
tx+=pee->xx+TILEWH+4;
ty+=pee->yy+TILEWH+4;
modexClearRegion(page, tx, ty, 4, 4, pee->coor);
#ifdef TILE
- modexClearRegion(page, (rand()*TILEWH)%SCREEN_WIDTH, (rand()*TILEWH)%(SCREEN_HEIGHT), TILEWH, TILEWH, 0);
+ modexClearRegion(page, (rand()*TILEWH)%page->width, (rand()*TILEWH)%(page->height), TILEWH, TILEWH, 0);
#else
- modexputPixel(page, rand()%SCREEN_WIDTH, rand()%(SCREEN_HEIGHT), 0);
+ modexputPixel(page, rand()%page->width, rand()%(page->height), 0);
#endif
pee->bakax = rand()%3; pee->bakay = rand()%3;
//printf("%d %d %d %d %d %d\n", pee->xx, pee->yy, tx, ty, TILEWH);
- pee->gq++;
- }else pee->gq = LGQ;
- break;
- case 0:
- return;
+ pee->qq++;
+ }else pee->qq = 0;
break;
default:
- return;
break;
}
+ //pee->coor++;
}
#define LGQ 32\r
#define HGQ 55
+#define TILE
+
typedef struct {\r
- word gq;\r
+ word gq;
+ word qq;\r
sword bakax, bakay;\r
sword xx, yy, sx, sy;\r
byte coor;
} bakapee_t;
-typedef struct
-{\r
- int old_mode; //old video mode before game!
-} global_game_variables_t;
-
-void setVGAmodeX(global_game_variables_t *vid, boolean vq);
void pdump(page_t *pee);
void cls(page_t *page, byte color, byte *Where);
void colortest(page_t *page, bakapee_t *pee);
byte far* VGA=(byte far*) 0xA0000000; /* this points to video memory. */\r
\r
static void fadePalette(sbyte fade, sbyte start, word iter, byte *palette);\r
-static byte tmppal[PAL_SIZE];\r
+static byte tmppal[PAL_SIZE];
+int old_mode;\r
+
+/////////////////////////////////////////////////////////////////////////////
+// //
+// setvideo() - This function Manages the video modes //
+// //
+/////////////////////////////////////////////////////////////////////////////
+void VGAmodeX(sword vq)
+{
+ union REGS in, out;
+
+ if(!vq)
+ { // deinit the video
+ // change to the video mode we were in before we switched to mode 13h
+ modexLeave();
+ //in.h.ah = 0x00;
+ //in.h.al = old_mode;
+ //int86(0x10, &in, &out);
+
+ }
+ else if(vq==1)
+ { // init the video
+ // get old video mode
+ //in.h.ah = 0xf;
+ //int86(0x10, &in, &out);
+ //old_mode = out.h.al;
+ // enter mode
+ modexEnter();
+ }
+}
\r
static void\r
vgaSetMode(byte mode)\r
}\r
\r
\r
-/* utility */\r
+/* utility */
void\r
modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset)\r
{\r
/* -============================ Functions =============================- */
/* mode switching, page, and plane functions */
+void VGAmodeX(sword vq);
void modexEnter();
void modexLeave();
page_t modexDefaultPage();
/* -======================= Constants & Vars ==========================- */
extern byte far* VGA; /* The VGA Memory */
+extern int old_mode;
#define SCREEN_SEG 0xa000
#define VIDEO_INT 0x10
#define SET_MODE 0x00
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);
+void animatePlayer(map_view_t *src, map_view_t *dest, short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp);
#define TILEWH 16
#define QUADWH (TILEWH/4)
bitmap_t ptmp; // player sprite
word q=1;
const char *cpus;
- static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */
+ //static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */
page_t screen, screen2, screen3;
map_t map;
map_view_t mv, mv2, mv3;
//to stop scrolling and have the player position data move to the edge of the screen with respect to the direction
//when player.tx or player.ty == 0 or player.tx == 20 or player.ty == 15 then stop because that is edge of map and you do not want to walk of the map
- #define INC_PER_FRAME if(q&1) persist_aniframe++; if(persist_aniframe>4) persist_aniframe = 1;
+ #define INC_PER_FRAME if(q&1) persist_aniframe++; if(persist_aniframe>4) persist_aniframe = 1;
//temp testing
/*if(bg->tx >= 0 && bg->tx+20 < MAPX && player.tx == bg->tx + 10)
if(mv->page->dx == 0) {
/* go backward one tile */
mv->tx--;
-
+
/* Snap the origin backward */
mv->page->data -= 4;
mv->page->dx = mv->map->tiles->tileWidth;
}
-void
+void
mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset) {
word x;
int i;
}
-void
+void
mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
int y;
int i;
/* location in the map array */
i=ty * mv->map->width + tx;
- /* We'll copy all of the columns in the screen,
+ /* We'll copy all of the columns in the screen,
i + 1 row above and one below */
for(y=poopoffset; y<(SCREEN_HEIGHT+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
if(i>=0) {
}
}
-void
+void
mapDrawWRow(map_view_t *mv, int tx, int ty, word y) {
word x;
int i;
}
}
-void
+void
mapDrawWCol(map_view_t *mv, int tx, int ty, word x) {
int y;
int i;
/* location in the map array */
i=ty * mv->map->width + tx;
- /* We'll copy all of the columns in the screen,
+ /* We'll copy all of the columns in the screen,
i + 1 row above and one below */
for(y=0; y<SCREEN_HEIGHT+mv->dyThresh && ty < mv->map->height; y+=mv->map->tiles->tileHeight, ty++) {
if(i>=0) {
}
}
-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)
+// animatePlayer(map_view_t *src, map_view_t *dest, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
+// animatePlayer(bg, spri, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
+// animatePlayer(bg, spri, 0, 0, player.x, player.y, persist_aniframe, q, &ptmp);
+// animatePlayer(map_view_t *src, map_view_t *dest, player_t *player, word playnum, sword scrolloffsetswitch, int ls, bitmap_t *bmp)
+void animatePlayer(map_view_t *src, map_view_t *dest, short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp)
{
short dire=32*d1; //direction
short qq; //scroll offset
*/
#include "src/lib/scroll16.h"
-/*void animatePlayer(player_t *player,word playnum, short scrolloffsetswitch, int ls, bitmap_t *bmp)
+void walk(map_view_t *pip, player_t *player, word pn)
+{
+ #define INC_PER_FRAME if(player[pn].q&1) player[pn].persist_aniframe++; if(player[pn].persist_aniframe>4) player[pn].persist_aniframe = 1;
+ //right movement
+ switch(player[pn].info.dir)
+ {
+ case 3:
+ if(pip[0].tx >= 0 && pip[0].tx+20 < pip[0].map->width && player[pn].tx == pip[0].tx + 10 &&
+ !(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!
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ animatePlayer(pip, player, pn, 1);
+ mapScrollRight(pip, player, 0, pn);
+ mapScrollRight(pip, player, 1, pn);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].tx++; }
+ }
+ 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))
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ player[pn].x+=(player[pn].speed);
+ animatePlayer(pip, player, pn, 0);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].tx++; }
+ }
+ else
+ {
+ 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);
+ modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 32, 24, 32, &player[pn].data);
+ modexShowPage(pip[1].page);
+ player[pn].info.dir = 0;
+ }
+ player[pn].triggerx = player[pn].tx+1;
+ player[pn].triggery = player[pn].ty;
+ break;
+
+ //left movement
+ case 1:
+ if(pip[0].tx > 0 && pip[0].tx+20 <= pip[0].map->width && player[pn].tx == pip[0].tx + 10 &&
+ !(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!
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ animatePlayer(pip, player, pn, 1);
+ mapScrollLeft(pip, player, 0, pn);
+ mapScrollLeft(pip, player, 1, pn);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].tx--; }
+ }
+ 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))
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ player[pn].x-=(player[pn].speed);
+ animatePlayer(pip, player, pn, 0);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].tx--; }
+ }
+ else
+ {
+ 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);
+ modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 96, 24, 32, &player[pn].data);
+ modexShowPage(pip[1].page);
+ player[pn].info.dir = 0;
+ }
+ player[pn].triggerx = player[pn].tx-1;
+ player[pn].triggery = player[pn].ty;
+ break;
+
+ //down movement
+ case 4:
+ if(pip[0].ty >= 0 && pip[0].ty+15 < pip[0].map->height && player[pn].ty == pip[0].ty + 8 &&
+ !(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!
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ animatePlayer(pip, player, pn, 1);
+ mapScrollDown(pip, player, 0, pn);
+ mapScrollDown(pip, player, 1, pn);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].ty++; }
+ }
+ 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))
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ player[pn].y+=(player[pn].speed);
+ animatePlayer(pip, player, pn, 0);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].ty++; }
+ }
+ else
+ {
+ 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);
+ modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 64, 24, 32, &player[pn].data);
+ modexShowPage(pip[1].page);
+ player[pn].info.dir = 0;
+ }
+ player[pn].triggerx = player[pn].tx;
+ player[pn].triggery = player[pn].ty+1;
+ break;
+
+ //up movement
+ case 0:
+ if(pip[0].ty > 0 && pip[0].ty+15 <= pip[0].map->height && player[pn].ty == pip[0].ty + 8 &&
+ !(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!
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ animatePlayer(pip, player, pn, 1);
+ mapScrollUp(pip, player, 0, pn);
+ mapScrollUp(pip, player, 1, pn);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].ty--; }
+ }
+ 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))
+ {
+ if(player[pn].q<=(TILEWH/(player[pn].speed)))
+ {
+ INC_PER_FRAME;
+ player[pn].y-=(player[pn].speed);
+ animatePlayer(pip, player, 0, pn);
+ modexShowPage(pip[1].page);
+ player[pn].q++;
+ } else { player[pn].q = 1; player[pn].info.dir = 0; player[pn].ty--; }
+ }
+ else
+ {
+ 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);
+ modexDrawSpriteRegion(pip[1].page, player[pn].x-4, player[pn].y-TILEWH, 24, 0, 24, 32, &player[pn].data);
+ modexShowPage(pip[1].page);
+ player[pn].info.dir = 0;
+ }
+ player[pn].triggerx = player[pn].tx;
+ player[pn].triggery = player[pn].ty-1;
+ break;
+ }
+}
+
+/*map_t
+allocMap(int w, int h) {
+ map_t result;
+
+ result.width =w;
+ result.height=h;
+ result.data = malloc(sizeof(byte) * w * h);
+ //result.data = (byte *)alloc_emem(((int)sizeof(byte) * w * h)/1024);
+ if(isEMS() || checkEMS())
+ {
+ XMOVE mm;
+ //emmhandle = mallocEMS(coretotalEMS());//alloc_emem((int)sizeof(map))
+ mm.length=sizeof(result);
+ mm.sourceH=0;
+ mm.sourceOff=ptr2long(&result);
+ mm.destH=emmhandle;
+ mm.destOff=0;
+ ist = move_emem(&mm);
+ if(!ist){ dealloc_emem(emmhandle); exit(5); }
+ printf("%d\n", coretotalEMS());
+ }
+
+ return result;
+}*/
+
+/*void
+initMap(map_t *map) {
+ // just a place holder to fill out an alternating pattern
+ int x, y, xx, yy;
+ int i, q;
+// int tile = 1;
+ //if(!isEMS() || !checkEMS())
+// map->tiles = malloc(sizeof(tiles_t));
+ //else
+ // map->tiles = (tiles_t *)alloc_emem(sizeof(tiles_t));
+
+ //create the tile set
+ //if(!isEMS() || !checkEMS())
+// map->tiles->data = malloc(sizeof(bitmap_t));
+ //else
+ // map->tiles->data = (bitmap_t *)alloc_emem(sizeof(bitmap_t));
+// map->tiles->data->width = (TILEWH);
+// map->tiles->data->height= TILEWH;
+ //if(!isEMS() || !checkEMS())
+// map->tiles->data->data = malloc((TILEWH*2)*TILEWH);
+ //else
+ // map->tiles->data->data = (byte *)alloc_emem((TILEWH*2)*TILEWH);
+// map->tiles->tileHeight = TILEWH;
+// map->tiles->tileWidth =TILEWH;
+// map->tiles->rows = 1;
+// map->tiles->cols = 1;//2;
+
+ q=0;
+ //for(y=0; y<map->height; y++) {
+ //for(x=0; x<map->width; x++) {
+ i=0;
+ for(yy=0; yy<TILEWH; yy++) {
+ for(xx=0; xx<(TILEWH); xx++) {
+ //if(x<TILEWH){
+ map->tiles->data->data[i+1] = map->data[q];//28;//0x24;
+// printf("[%d]", map->tiles->data->data[i]);
+ //}else{
+ //map->tiles->data->data[i] = map->data[q];//0;//0x34;
+ //printf("]%d[==[%d]", i, map->tiles->data->data[i]);
+ //}
+ i++;
+ }
+// printf("\n");
+ }
+// printf("[%d]", map->data[q]);
+ q++;
+// }
+ //printf("\n\n");
+// }
+
+ i=0;
+ for(y=0; y<map->height; y++) {
+ for(x=0; x<map->width; x++) {
+// map->data[i]=255;
+ printf("[%d]", map->data[i]);
+ //tile = tile ? 0 : 1;
+ i++;
+ }
+ //tile = tile ? 0 : 1;
+ }
+}*/
+
+void mapScrollRight(map_view_t *mv, player_t *player, word id, word plid)
+{
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dx += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dx >= mv[id].dxThresh )
+ {
+ /* go forward one tile */
+ mv[id].tx++;
+ /* Snap the origin forward */
+ mv[id].page->data += 4;
+ mv[id].page->dx = mv[id].map->tiles->tileWidth;
+ }
+
+ /* draw the next column */
+ x= SCREEN_WIDTH + mv[id].map->tiles->tileWidth;
+ if(player[plid].q%4)
+ if(id==0)
+ mapDrawCol(&mv[0], mv[0].tx + 20 , mv[0].ty-1, x, player, mv->page->dx);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
+ //}
+}
+
+
+void mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)
+{
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dx -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dx == 0)
+ {
+ /* go backward one tile */
+ mv[id].tx--;
+
+ /* Snap the origin backward */
+ mv[id].page->data -= 4;
+ mv[id].page->dx = mv[id].map->tiles->tileWidth;
+ }
+
+ /* draw the next column */
+ x= 0;
+ if(player[plid].q%4)
+ if(id==0)
+ mapDrawCol(&mv[0], mv[0].tx - 1, mv[0].ty-1, x, player, mv->page->dx);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
+ //}
+}
+
+
+void mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)
+{
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dy -= player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dy == 0 )
+ {
+ /* go down one tile */
+ mv[id].ty--;
+ /* Snap the origin downward */
+ mv[id].page->data -= mv[id].page->width*4;
+ mv[id].page->dy = mv[id].map->tiles->tileHeight;
+ }
+
+ /* draw the next row */
+ y= 0;
+ if(player[plid].q%3)
+ if(id==0)
+ mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty-1, y, player, mv->page->dy);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
+ //}
+}
+
+void mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)
+{
+ word x, y; /* coordinate for drawing */
+
+ /* increment the pixel position and update the page */
+ mv[id].page->dy += player[plid].speed;
+
+ /* check to see if this changes the tile */
+ if(mv[id].page->dy >= mv[id].dyThresh )
+ {
+ /* go down one tile */
+ mv[id].ty++;
+ /* Snap the origin downward */
+ mv[id].page->data += mv[id].page->width*4;
+ mv[id].page->dy = mv[id].map->tiles->tileHeight;
+ }
+
+ /* draw the next row */
+ y= SCREEN_HEIGHT + mv[id].map->tiles->tileHeight;
+ if(player[plid].q%3)
+ if(id==0)
+ mapDrawRow(&mv[0], mv[0].tx - 1, mv[0].ty+15, y, player, mv->page->dy);
+ else
+ modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
+ //}
+}
+
+
+void mapGoTo(map_view_t *mv, int tx, int ty)
+{
+ int px, py;
+ unsigned int i;
+
+ /* set up the coordinates */
+ mv->tx = tx;
+ mv->ty = ty;
+ mv->page->dx = mv->map->tiles->tileWidth;
+ mv->page->dy = mv->map->tiles->tileHeight;
+
+ /* set up the thresholds */
+ mv->dxThresh = mv->map->tiles->tileWidth * 2;
+ mv->dyThresh = mv->map->tiles->tileHeight * 2;
+
+ /* draw the tiles */
+ modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
+ 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) {
+ mapDrawWRow(mv, tx-1, ty, py);
+ i+=mv->map->width - tx;
+ }
+}
+
+
+void
+mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)
+{
+ word rx;
+ word ry;
+ //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);
+////0000 printf("i=%d\n", i);
+ //mxPutTile(t->data, x, y, t->tileWidth, t->tileHeight);
+ modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
+ }
+}
+
+void mapDrawRow(map_view_t *mv, int tx, int ty, word y, player_t *p, word poopoffset)
+{
+ word x;
+ int i;
+ poopoffset%=p[0].speed;
+//printf("y: %d\n", poopoffset);
+ /* the position within the map array */
+ i=ty * mv->map->width + tx;
+ for(x=poopoffset; 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);
+ }
+ i++; /* next! */
+ }
+}
+
+void mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *p, word poopoffset)
+{
+ int y;
+ int i;
+ poopoffset%=p[0].speed;
+//printf("x: %d\n", poopoffset);
+ /* 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; 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;
+
+ /* 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=0; y<SCREEN_HEIGHT+mv->dyThresh && 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 qclean()
+{
+ modexLeave();
+ //setkb(0);
+}
+
+void pdump(page_t *pee)
+{
+ int mult=(QUADWH);
+ int palq=(mult)*TILEWH;
+ int palcol=0;
+ int palx, paly;
+ for(paly=0; paly<palq; paly+=mult){
+ for(palx=0; palx<palq; palx+=mult){
+ modexClearRegion(pee, palx+TILEWH, paly+TILEWH, mult, mult, palcol);
+ palcol++;
+ }
+ }
+}
+
+void animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch)
{
sword dire=32; //direction
sword qq; //scroll offset
+ word ls = player[playnum].persist_aniframe;
- if(scrolloffsetswitch==0) qq = 0;
- else qq = ((player[playnum]->p)*player[playnum]->speed);
- switch (player[playnum]->dir)
+ if(scrollswitch==0) qq = 0;
+ else qq = ((player[playnum].persist_aniframe)*player[playnum].speed);
+ switch (player[playnum].info.dir)
{
case 0:
//up
- dire*=player[playnum]->dir;
- player[playnum]->x=player[playnum]->x-4;
- player[playnum]->y=player[playnum]->y-qq-TILEWH;
+ dire*=player[playnum].info.dir;
+ player[playnum].x=player[playnum].x-4;
+ player[playnum].y=player[playnum].y-qq-TILEWH;
break;
case 1:
// right
- dire*=(player[playnum]->dir-2);
- player[playnum]->x=player[playnum]->x+qq-4;
- player[playnum]->y=player[playnum]->y-TILEWH;
+ dire*=(player[playnum].info.dir-2);
+ player[playnum].x=player[playnum].x+qq-4;
+ player[playnum].y=player[playnum].y-TILEWH;
break;
case 2:
break;
case 3:
//down
- dire*=(player[playnum]->dir-2)
- player[playnum]->x=player[playnum]->x-4;
- player[playnum]->y=player[playnum]->y+qq-TILEWH;
+ dire*=(player[playnum].info.dir-2);
+ player[playnum].x=player[playnum].x-4;
+ player[playnum].y=player[playnum].y+qq-TILEWH;
break;
case 4:
//left
- dire*=(player[playnum]->dir+2)
- player[playnum]->x=player[playnum]->x-qq-4;
- player[playnum]->y=player[playnum]->y-TILEWH;
+ dire*=(player[playnum].info.dir+2);
+ player[playnum].x=player[playnum].x-qq-4;
+ player[playnum].y=player[playnum].y-TILEWH;
break;
}
-// modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
-// if(2>ls && ls>=1) { modexDrawSpriteRegion(dest->page, x, y, 48, dire, 24, 32, bmp); }else
-// if(3>ls && ls>=2) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }else
-// if(4>ls && ls>=3) { modexDrawSpriteRegion(dest->page, x, y, 0, dire, 24, 32, bmp); }else
-// if(5>ls && ls>=4) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }
+ modexCopyPageRegion(pip[1].page, pip[0].page, player[playnum].x-4, player[playnum].y-4, player[playnum].x-4, player[playnum].y-4, 28, 40);
+ if(2>ls && ls>=1) { modexDrawSpriteRegion(pip[1].page, player[playnum].x, player[playnum].y, 48, dire, 24, 32, &player[playnum].data); }else
+ if(3>ls && ls>=2) { modexDrawSpriteRegion(pip[1].page, player[playnum].x, player[playnum].y, 24, dire, 24, 32, &player[playnum].data); }else
+ if(4>ls && ls>=3) { modexDrawSpriteRegion(pip[1].page, player[playnum].x, player[playnum].y, 0, dire, 24, 32, &player[playnum].data); }else
+ if(5>ls && ls>=4) { modexDrawSpriteRegion(pip[1].page, player[playnum].x, player[playnum].y, 24, dire, 24, 32, &player[playnum].data); }
//TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
//modexClearRegion(top->page, 66, 66, 2, 40, 0);
//modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
//turn this off if XT
//XTif(detectcpu() > 0)
-// modexWaitBorder();
-}*/
+ modexWaitBorder();
+}
#define __SCROLL16_H_
#include "src/lib/16_head.h"
+#include "src/lib/modex16.h"
#include "src/lib/16_in.h"
+#include "src/lib/bitmap.h"
+#include "src/lib/planar.h"
+#include "src/lib/mapread.h"
-//#define TILEWH 16
-//#define SPEED 4
+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; //????
+ word dyThresh; //????
+} map_view_t;
-//void animatePlayer(player_t *player, short scrolloffsetswitch, int ls, bitmap_t *bmp);
+typedef struct
+{
+ map_view_t *mv;
+} map_view_db_t;
+
+#define TILEWH 16
+#define QUADWH TILEWH/2
+//#define LOOPMAX (TILEWH/(player[0].speed))
+
+//map_t allocMap(int w, int h);
+//void initMap(map_t *map);
+void walk(map_view_t *pip, player_t *player, word pn);
+void mapScrollRight(map_view_t *mv, player_t *player, word id, word plid);
+void mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid);
+void mapScrollUp(map_view_t *mv, player_t *player, word id, word plid);
+void mapScrollDown(map_view_t *mv, player_t *player, word id, word plid);
+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, player_t *p, word poopoffset);
+void mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *p, 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 pdump(page_t *pee);
+void qclean();
+void animatePlayer(map_view_t *pip, player_t *player, word playnum, sword scrollswitch);
#endif /*__SCROLL16_H_*/
*
*/
-#include "src/lib/dos_kb.h"
+#include "src/lib/scroll16.h"
#include "src/lib/mapread.h"
#include "src/lib/wcpu/wcpu.h"
-#include "src/lib/planar.h"
//====#include "src\lib\ems.c"
//word far *clock= (word far*) 0x046C; /* 18.2hz clock */
-//optimize scroll*!!!!
-
-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; //????
- word dyThresh; //????
-} map_view_t;
-
-typedef struct {
- int x; //player exact position on the viewable map
- int y; //player exact position on the viewable map
- int tx; //player tile position on the viewable map
- int ty; //player tile position on the viewable map
- int triggerx; //player's trigger box tile position on the viewable map
- int triggery; //player's trigger box tile position on the viewable map
- int setx; //NOT USED YET! player sprite sheet set on the image x
- int sety; //NOT USED YET! player sprite sheet set on the image y
- word q; //loop variable
- word d; //direction
- bitmap_t data; //supposively the sprite sheet data
- int hp; //hitpoints of the player
-} actor_t;
-
-typedef struct
+void main()
{
- map_view_t *mv;
-} map_view_db_t;
-
-map_t allocMap(int w, int h);
-void initMap(map_t *map);
-void mapScrollRight(map_view_t *mv, byte offset, word id);
-void mapScrollLeft(map_view_t *mv, byte offest, word id);
-void mapScrollUp(map_view_t *mv, byte offset, word id);
-void mapScrollDown(map_view_t *mv, byte offset, word id);
-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 qclean();
-void pdump(map_view_t *pee);
-void animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */sword d, short scrolloffsetswitch, int x, int y, int ls, int lp, bitmap_t *bmp);
-
-#define TILEWH 16
-#define QUADWH TILEWH/2
-#define SPEED 4
-//#define LOOPMAX (TILEWH/SPEED)
-
-//place holder definitions
-//#define MAPX 200
-//#define MAPY 150
-//#define TRIGGX 10
-//#define TRIGGY 9
-
-void main() {
-//++++ size_t oldfreemem=GetFreeSize();
- /*long emmhandle;
- long emsavail;
- char teststr[80];*/
- word panswitch=0, panq=1, pand=0, panpagenum=0; //for panning!
+// word panswitch=0, panq=1, pand=0;
+ word panpagenum=0; //for panning!
int i;
static word paloffset=0;
- bitmap_t ptmp;//, npctmp; // player sprite
planar_buf_t *p;
const char *cpus;
- static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */
+ //static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */
page_t screen, screen2, screen3;
map_t map;
- map_view_t mv[3];//mv, mv2, mv3;
+ map_view_t mv[3];
map_view_t *bg, *spri, *mask;//, *tmp;
//map_view_db_t pgid[4];
byte *dpal, *gpal;
byte *ptr;
byte *mappalptr;
- actor_t player;
- //actor_t npc0;
+ player_t player[MaxPlayers];
+
+ player[0].persist_aniframe=0;
+ player[0].speed=4;
+ //extern struct inconfig inpu;
+\r
+ //player_t npc0;
// atexit(qclean());
/*if(!emmtest())
mappalptr = map.tiles->data->palette;
/* data */
//0000 printf("Total used @ before image loading: %zu\n", oldfreemem-GetFreeSize());
- ptmp = bitmapLoadPcx("data/ptmp.pcx"); // load sprite
+ player[0].data = bitmapLoadPcx("data/ptmp.pcx"); // load sprite
//npctmp = bitmapLoadPcx("ptmp1.pcx"); // load sprite
/* create the planar buffer */
//0000 printf("Total used @ before planar buffer creation: %zu\n", oldfreemem-GetFreeSize());
- p = planar_buf_from_bitmap(&ptmp);
+ p = planar_buf_from_bitmap(&player[0].data);
//0000 printf("Total used @ after planar buffer creation: %zu\n", oldfreemem-GetFreeSize());
/*if(isEMS())
}
*/
+ /* input! */
+ IN_Startup();
+ IN_Default(0,&player,ctrl_Joystick);
+
/* save the palette */
dpal = modexNewPal();
modexPalSave(dpal);
modexFadeOff(4, dpal);
- setkb(1);
- modexEnter();
+ VGAmodeX(1);
modexPalBlack(); //reset the palette~
// printf("Total used @ before palette initiation: %zu\n", oldfreemem-GetFreeSize());
- ptmp.offset=(paloffset/3);
- modexPalUpdate(&ptmp, &paloffset, 0, 0);
- //printf(" %d\n", sizeof(ptmp.data));
+ player[0].data.offset=(paloffset/3);
+ modexPalUpdate(&player[0].data, &paloffset, 0, 0);
+ //printf(" %d\n", sizeof(ptmp->data));
//printf("1: %d\n", paloffset);
map.tiles->data->offset=(paloffset/3);
//XTmodexPalUpdate(map.tiles->data, &paloffset, 0, 0);
//TODO: put player in starting position of spot
//default player position on the viewable map
- player.tx = bg->tx + 10;
- player.ty = bg->ty + 8;
- player.x = player.tx*TILEWH;
- player.y = player.ty*TILEWH;
- player.triggerx = player.tx;
- player.triggery = player.ty+1;
- player.q=1;
- player.d=0;
- player.hp=4;
+ player[0].tx = bg->tx + 10;
+ player[0].ty = bg->ty + 8;
+ player[0].x = player[0].tx*TILEWH;
+ player[0].y = player[0].ty*TILEWH;
+ player[0].triggerx = player[0].tx;
+ player[0].triggery = player[0].ty+1;
+ player[0].q=1;
+ player[0].info.dir=2;
+ player[0].hp=4;
//npc
/*npc0.tx = bg->tx + 1;
npc0.ty = bg->ty + 1;
npc0.q=1;
npc0.d=0;
modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 64, 24, 32, &npctmp);*/
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
+ modexDrawSpriteRegion(spri->page, player[0].x-4, player[0].y-TILEWH, 24, 64, 24, 32, &player[0].data);
modexShowPage(spri->page);
// printf("Total used @ before loop: %zu\n", oldfreemem-GetFreeSize());
modexClearRegion(mv[2].page, 0, 0, mv[2].page->width, mv[2].page->height, 1);
modexFadeOn(4, gpal);
- while(!keyp(1) && player.hp>0)
+ while(!IN_KeyDown(sc_Escape) && player[0].hp>0)\r
{
+ IN_ReadControl(0,&player);
//top left corner & bottem right corner of map veiw be set as map edge trigger since maps are actually square
//to stop scrolling and have the player position data move to the edge of the screen with respect to the direction
- //when player.tx or player.ty == 0 or player.tx == 20 or player.ty == 15 then stop because that is edge of map and you do not want to walk of the map
- #define INC_PER_FRAME if(player.q&1) persist_aniframe++; if(persist_aniframe>4) persist_aniframe = 1;
+ //when player[0].tx or player[0].ty == 0 or player[0].tx == 20 or player[0].ty == 15 then stop because that is edge of map and you do not want to walk of the map
//player movement
- //TODO: make movement into a function!
- if(!panswitch){
- //right movement
- if((keyp(77) && !keyp(75) && player.d == 0) || player.d == 2)
- {
- if(player.d == 0){ player.d = 2; }
- if(bg->tx >= 0 && bg->tx+20 < map.width && player.tx == bg->tx + 10 &&
- !(bg->map->data[(player.tx)+(map.width*(player.ty-1))] == 0))//!(player.tx+1 == TRIGGX && player.ty == TRIGGY)) //collision detection!
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- //animatePlayer(bg, spri, mask, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);
- mapScrollRight(mv, SPEED, 0);
- mapScrollRight(mv, SPEED, 1);
- //mapScrollRight(mask, SPEED);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.tx++; }
- }
- else if(player.tx < map.width && !(bg->map->data[(player.tx)+(map.width*(player.ty-1))] == 0))//!(player.tx+1 == TRIGGX && player.ty == TRIGGY))
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- player.x+=SPEED;
- //animatePlayer(bg, spri, mask, 1, 0, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.tx++; }
- }
- else
- {
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 32, 24, 32, &ptmp);
- modexShowPage(spri->page);
- player.d = 0;
- }
- player.triggerx = player.tx+1;
- player.triggery = player.ty;
- }
-
- //left movement
- if((keyp(75) && !keyp(77) && player.d == 0) || player.d == 4)
- {
- if(player.d == 0){ player.d = 4; }
- if(bg->tx > 0 && bg->tx+20 <= map.width && player.tx == bg->tx + 10 &&
- !(bg->map->data[(player.tx-2)+(map.width*(player.ty-1))] == 0))//!(player.tx-1 == TRIGGX && player.ty == TRIGGY)) //collision detection!
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- //animatePlayer(bg, spri, mask, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);
- mapScrollLeft(mv, SPEED, 0);
- mapScrollLeft(mv, SPEED, 1);
- //mapScrollLeft(mask, SPEED);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.tx--; }
- }
- else if(player.tx > 1 && !(bg->map->data[(player.tx-2)+(map.width*(player.ty-1))] == 0))//!(player.tx-1 == TRIGGX && player.ty == TRIGGY))
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- player.x-=SPEED;
- //animatePlayer(bg, spri, mask, 3, 0, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.tx--; }
- }
- else
- {
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 96, 24, 32, &ptmp);
- modexShowPage(spri->page);
- player.d = 0;
- }
- player.triggerx = player.tx-1;
- player.triggery = player.ty;
- }
-
- //down movement
- if((keyp(80) && !keyp(72) && player.d == 0) || player.d == 3)
- {
- if(player.d == 0){ player.d = 3; }
- if(bg->ty >= 0 && bg->ty+15 < map.height && player.ty == bg->ty + 8 &&
- !(bg->map->data[(player.tx-1)+(map.width*(player.ty))] == 0))//!(player.tx == TRIGGX && player.ty+1 == TRIGGY)) //collision detection!
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- //animatePlayer(bg, spri, mask, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);
- mapScrollDown(mv, SPEED, 0);
- mapScrollDown(mv, SPEED, 1);
- //mapScrollDown(mask, SPEED);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.ty++; }
- }
- else if(player.ty < map.height && !(bg->map->data[(player.tx-1)+(map.width*(player.ty))] == 0))//!(player.tx == TRIGGX && player.ty+1 == TRIGGY))
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- player.y+=SPEED;
- //animatePlayer(bg, spri, mask, 2, 0, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.ty++; }
- }
- else
- {
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);
- modexShowPage(spri->page);
- player.d = 0;
- }
- player.triggerx = player.tx;
- player.triggery = player.ty+1;
- }
-
- //up movement
- if((keyp(72) && !keyp(80) && player.d == 0) || player.d == 1)
- {
- if(player.d == 0){ player.d = 1; }
- if(bg->ty > 0 && bg->ty+15 <= map.height && player.ty == bg->ty + 8 &&
- !(bg->map->data[(player.tx-1)+(map.width*(player.ty-2))] == 0))//!(player.tx == TRIGGX && player.ty-1 == TRIGGY)) //collision detection!
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- //animatePlayer(bg, spri, mask, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);
- mapScrollUp(mv, SPEED, 0);
- mapScrollUp(mv, SPEED, 1);
- //mapScrollUp(mask, SPEED);
- modexShowPage(spri->page);
- player.q++;
- } else { player.q = 1; player.d = 0; player.ty--; }
- }
- else if(player.ty > 1 && !(bg->map->data[(player.tx-1)+(map.width*(player.ty-2))] == 0))//!(player.tx == TRIGGX && player.ty-1 == TRIGGY))
- {
- if(player.q<=(TILEWH/SPEED))
- {
- INC_PER_FRAME;
- player.y-=SPEED;
- //animatePlayer(bg, spri, mask, 0, 0, player.x, player.y, persist_aniframe, q, &ptmp);
- modexShowPage(spri->page);
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);
- player.q++;
- } else { player.q = 1; player.d = 0; player.ty--; }
- }
- else
- {
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 0, 24, 32, &ptmp);
- modexShowPage(spri->page);
- player.d = 0;
- }
- player.triggerx = player.tx;
- player.triggery = player.ty-1;
- }
-}else{
+ //if(!panswitch){
+ walk(mv, player, 0);
+ /*}else{
//88 switch!
//right movement
- if((keyp(77) && !keyp(75) && pand == 0) || pand == 2)
+ if((IN_KeyDown(77) && !IN_KeyDown(75) && pand == 0) || pand == 2)
{
if(pand == 0){ pand = 2; }
- if(panq<=(TILEWH/SPEED))
+ if(panq<=(TILEWH/(player[0].speed)))
{
switch(panpagenum)
{
} else { panq = 1; pand = 0; }
}
//left movement
- if((keyp(75) && !keyp(77) && pand == 0) || pand == 4)
+ if((IN_KeyDown(75) && !IN_KeyDown(77) && pand == 0) || pand == 4)
{
if(pand == 0){ pand = 4; }
- if(panq<=(TILEWH/SPEED))
+ if(panq<=(TILEWH/(player[0].speed)))
{
switch(panpagenum)
{
} else { panq = 1; pand = 0; }
}
//down movement
- if((keyp(72) && !keyp(80) && pand == 0) || pand == 3)
+ if((IN_KeyDown(72) && !IN_KeyDown(80) && pand == 0) || pand == 3)
{
if(pand == 0){ pand = 3; }
- if(panq<=(TILEWH/SPEED))
+ if(panq<=(TILEWH/(player[0].speed)))
{
switch(panpagenum)
{
} else { panq = 1; pand = 0; }
}
//up movement
- if((keyp(80) && !keyp(72) && pand == 0) || pand == 1)
+ if((IN_KeyDown(80) && !IN_KeyDown(72) && pand == 0) || pand == 1)
{
if(pand == 0){ pand = 1; }
- if(panq<=(TILEWH/SPEED))
+ if(panq<=(TILEWH/(player[0].speed)))
{
switch(panpagenum)
{
panq++;
} else { panq = 1; pand = 0; }
}
-}
+}*/
+
//the scripting stuf....
- //if(((player.triggerx == TRIGGX && player.triggery == TRIGGY) && keyp(0x1C))||(player.tx == 5 && player.ty == 5))
- if(((bg->map->data[(player.triggerx-1)+(map.width*(player.triggery-1))] == 0) && keyp(0x1C))||(player.tx == 5 && player.ty == 5))
+ //if(((player[0].triggerx == TRIGGX && player[0].triggery == TRIGGY) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))
+ if(((bg->map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))] == 0) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].ty == 5))
{
short i;
for(i=800; i>=400; i--)
}
nosound();
}
- if(player.q == (TILEWH/SPEED)+1 && player.d > 0 && (player.triggerx == 5 && player.triggery == 5)){ player.hp--; }
+ if(player[0].q == (TILEWH/(player[0].speed))+1 && player[0].info.dir != 2 && (player[0].triggerx == 5 && player[0].triggery == 5)){ player[0].hp--; }
//debugging binds!
- //if(keyp(0x0E)) while(1){ if(xmsmalloc(24)) break; }
- if(keyp(2)){ modexShowPage(bg->page); panpagenum=0; }
- if(keyp(3)){ modexShowPage(spri->page); panpagenum=1; }
- if(keyp(4)){ modexShowPage(mask->page); panpagenum=2; }
- if(keyp(25)){ pdump(bg); pdump(spri); } //p
- if(keyp(24)){ modexPalUpdate0(gpal); paloffset=0; pdump(bg); pdump(spri); }
- if(keyp(22)){
- paloffset=0; modexPalBlack(); modexPalUpdate(&ptmp, &paloffset, 0, 0);
+ //if(IN_KeyDown(0x0E)) while(1){ if(xmsmalloc(24)) break; }
+ if(IN_KeyDown(2)){ modexShowPage(bg->page); panpagenum=0; }
+ if(IN_KeyDown(3)){ modexShowPage(spri->page); panpagenum=1; }
+ if(IN_KeyDown(4)){ modexShowPage(mask->page); panpagenum=2; }
+ if(IN_KeyDown(25)){ pdump(bg->page); pdump(spri->page); } //p
+ if(IN_KeyDown(24)){ modexPalUpdate0(gpal); paloffset=0; pdump(bg->page); pdump(spri->page); }
+ if(IN_KeyDown(22)){
+ paloffset=0; modexPalBlack(); modexPalUpdate(&player[0].data, &paloffset, 0, 0);
printf("1paloffset = %d\n", paloffset/3);
modexPalUpdate(map.tiles->data, &paloffset, 0, 0);
printf("2paloffset = %d\n", paloffset/3);
- pdump(bg); pdump(spri); }
+ pdump(bg->page); pdump(spri->page); }
//pan switch
- if(keyp(88)){if(!panswitch) panswitch++; else panswitch--; } //f12
+ //if(IN_KeyDown(88)){if(!panswitch) panswitch++; else panswitch--; } //f12
//TSR
- if(keyp(87)) //f11
+ if(IN_KeyDown(87)) //f11
{
- modexLeave();
- setkb(0);
+ VGAmodeX(0);
+ IN_Shutdown();
__asm
{
mov ah,31h
}
}
- if((player.q==1) && !(player.x%TILEWH==0 && player.y%TILEWH==0)) break; //incase things go out of sync!
+ if((player[0].q==1) && !(player[0].x%TILEWH==0 && player[0].y%TILEWH==0)) break; //incase things go out of sync!
}
modexPalSave(gpal);
modexSavePalFile("data/g.pal", gpal);
modexFadeOff(4, gpal);
- modexLeave();
- setkb(0);
+ VGAmodeX(0);
+ IN_Shutdown();
printf("Project 16 scroll.exe\n");
printf("tx: %d\n", bg->tx);
printf("ty: %d\n", bg->ty);
- printf("player.x: %d", player.x); printf(" player.y: %d\n", player.y);
- //if(player.hp==0) printf("%d wwww\n", player.y+8);
- //else printf("\nplayer.y: %d\n", player.y);
- printf("player.tx: %d", player.tx); printf(" player.ty: %d\n", player.ty);
- printf("player.triggx: %d", player.triggerx); printf(" player.triggy: %d\n", player.triggery);
- printf("player.hp: %d", player.hp); printf(" player.q: %d", player.q); printf(" player.d: %d\n", player.d);
- printf("tile data value at player trigger position: %d\n", bg->map->data[(player.triggerx-1)+(map.width*(player.triggery-1))]);
+ printf("player[0].x: %d", player[0].x); printf(" player[0].y: %d\n", player[0].y);
+ //if(player[0].hp==0) printf("%d wwww\n", player[0].y+8);
+ //else printf("\nplayer[0].y: %d\n", player[0].y);
+ printf("player[0].tx: %d", player[0].tx); printf(" player[0].ty: %d\n", player[0].ty);
+ printf("player[0].triggx: %d", player[0].triggerx); printf(" player[0].triggy: %d\n", player[0].triggery);
+ printf("player[0].hp: %d", player[0].hp); printf(" player[0].q: %d", player[0].q); printf(" player[0].info.dir: %d\n", player[0].info.dir);
+ printf("tile data value at player trigger position: %d\n", bg->map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))]);
printf("palette offset: %d\n", paloffset/3);
//++++ printf("Total used: %zu\n", oldfreemem-GetFreeSize());
//++++ printf("Total free: %zu\n", GetFreeSize());
printf("detected CPU type: %s\n", cpus);
modexFadeOn(4, dpal);
}
-
-
-map_t
-allocMap(int w, int h) {
- map_t result;
-
- result.width =w;
- result.height=h;
- result.data = malloc(sizeof(byte) * w * h);
- //result.data = (byte *)alloc_emem(((int)sizeof(byte) * w * h)/1024);
- /*if(isEMS() || checkEMS())
- {
- XMOVE mm;
- //emmhandle = mallocEMS(coretotalEMS());//alloc_emem((int)sizeof(map))
- mm.length=sizeof(result);
- mm.sourceH=0;
- mm.sourceOff=ptr2long(&result);
- mm.destH=emmhandle;
- mm.destOff=0;
- ist = move_emem(&mm);
- if(!ist){ dealloc_emem(emmhandle); exit(5); }
- printf("%d\n", coretotalEMS());
- }*/
-
- return result;
-}
-
-void
-initMap(map_t *map) {
- /* just a place holder to fill out an alternating pattern */
- int x, y, xx, yy;
- int i, q;
-// int tile = 1;
- //if(!isEMS() || !checkEMS())
-// map->tiles = malloc(sizeof(tiles_t));
- //else
- // map->tiles = (tiles_t *)alloc_emem(sizeof(tiles_t));
-
- /* create the tile set */
- //if(!isEMS() || !checkEMS())
-// map->tiles->data = malloc(sizeof(bitmap_t));
- //else
- // map->tiles->data = (bitmap_t *)alloc_emem(sizeof(bitmap_t));
-// map->tiles->data->width = (TILEWH/**2*/);
-// map->tiles->data->height= TILEWH;
- //if(!isEMS() || !checkEMS())
-// map->tiles->data->data = malloc((TILEWH*2)*TILEWH);
- //else
- // map->tiles->data->data = (byte *)alloc_emem((TILEWH*2)*TILEWH);
-// map->tiles->tileHeight = TILEWH;
-// map->tiles->tileWidth =TILEWH;
-// map->tiles->rows = 1;
-// map->tiles->cols = 1;//2;
-
- /*q=0;
- //for(y=0; y<map->height; y++) {
- //for(x=0; x<map->width; x++) {
- i=0;
- for(yy=0; yy<TILEWH; yy++) {
- for(xx=0; xx<(TILEWH); xx++) {
- //if(x<TILEWH){
- map->tiles->data->data[i+1] = map->data[q];//28;//0x24;
-// printf("[%d]", map->tiles->data->data[i]);
- //}else{
- //map->tiles->data->data[i] = map->data[q];//0;//0x34;
- //printf("]%d[==[%d]", i, map->tiles->data->data[i]);
- //}
- i++;
- }
-// printf("\n");
- }
-// printf("[%d]", map->data[q]);
- q++;
-// }
- //printf("\n\n");
-// }*/
-
- /*i=0;
- for(y=0; y<map->height; y++) {
- for(x=0; x<map->width; x++) {
-// map->data[i]=255;
- printf("[%d]", map->data[i]);
- //tile = tile ? 0 : 1;
- i++;
- }
- //tile = tile ? 0 : 1;
- }*/
-}
-
-
-void
-mapScrollRight(map_view_t *mv, byte offset, word id)
-{
- word x, y; /* coordinate for drawing */
-
- /* increment the pixel position and update the page */
- mv[id].page->dx += offset;
-
- /* check to see if this changes the tile */
- if(mv[id].page->dx >= mv[id].dxThresh ) {
- /* go forward one tile */
- mv[id].tx++;
- /* Snap the origin forward */
- mv[id].page->data += 4;
- mv[id].page->dx = mv[id].map->tiles->tileWidth;
-
- /* draw the next column */
- x= SCREEN_WIDTH + mv[id].map->tiles->tileWidth;
- if(id==0)
- mapDrawCol(&mv[0], mv[0].tx + 20 , mv[0].ty-1, x);
- else
- modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
- }
-}
-
-
-void
-mapScrollLeft(map_view_t *mv, byte offset, word id)
-{
- word x, y; /* coordinate for drawing */
-
- /* increment the pixel position and update the page */
- mv[id].page->dx -= offset;
-
- /* check to see if this changes the tile */
- if(mv[id].page->dx == 0) {
- /* go backward one tile */
- mv[id].tx--;
-
- /* Snap the origin backward */
- mv[id].page->data -= 4;
- mv[id].page->dx = mv[id].map->tiles->tileWidth;
-
- /* draw the next column */
- x= 0;
- if(id==0)
- mapDrawCol(&mv[0], mv[0].tx-1, mv[0].ty-1, 0);
- else
- modexCopyPageRegion(mv[id].page, mv[0].page, x, 0, x, 0, mv[id].map->tiles->tileWidth, mv[id].map->tiles->tileHeight*17);
- }
-}
-
-
-void
-mapScrollUp(map_view_t *mv, byte offset, word id)
-{
- word x, y; /* coordinate for drawing */
-
- /* increment the pixel position and update the page */
- mv[id].page->dy -= offset;
-
- /* check to see if this changes the tile */
- if(mv[id].page->dy == 0 ) {
- /* go down one tile */
- mv[id].ty--;
- /* Snap the origin downward */
- mv[id].page->data -= mv[id].page->width*4;
- mv[id].page->dy = mv[id].map->tiles->tileHeight;
-
- /* draw the next row */
- y= 0;
- if(id==0)
- mapDrawRow(&mv[0], mv[0].tx-1 , mv[0].ty-1, 0);
- else
- modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
- }
-}
-
-
-void
-mapScrollDown(map_view_t *mv, byte offset, word id)
-{
- word x, y; /* coordinate for drawing */
-
- /* increment the pixel position and update the page */
- mv[id].page->dy += offset;
-
- /* check to see if this changes the tile */
- if(mv[id].page->dy >= mv[id].dyThresh ) {
- /* go down one tile */
- mv[id].ty++;
- /* Snap the origin downward */
- mv[id].page->data += mv[id].page->width*4;
- mv[id].page->dy = mv[id].map->tiles->tileHeight;
-
- /* draw the next row */
- y= SCREEN_HEIGHT + mv[id].map->tiles->tileHeight;
- if(id==0)
- mapDrawRow(&mv[0], mv[0].tx-1 , mv[0].ty+15, y);
- else
- modexCopyPageRegion(mv[id].page, mv[0].page, 0, y, 0, y, mv[id].map->tiles->tileWidth*22, mv[id].map->tiles->tileHeight);
- }
-}
-
-
-void
-mapGoTo(map_view_t *mv, int tx, int ty) {
- int px, py;
- unsigned int i;
-
- /* set up the coordinates */
- mv->tx = tx;
- mv->ty = ty;
- mv->page->dx = mv->map->tiles->tileWidth;
- mv->page->dy = mv->map->tiles->tileHeight;
-
- /* set up the thresholds */
- mv->dxThresh = mv->map->tiles->tileWidth * 2;
- mv->dyThresh = mv->map->tiles->tileHeight * 2;
-
- /* draw the tiles */
- modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 0);
- 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);
- i+=mv->map->width - tx;
- }
-}
-
-
-void
-mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) {
- word rx;
- word ry;
- //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);
-////0000 printf("i=%d\n", i);
- //mxPutTile(t->data, x, y, t->tileWidth, t->tileHeight);
- modexDrawBmpRegion(page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));
- }
-}
-
-
-void
-mapDrawRow(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
-mapDrawCol(map_view_t *mv, int tx, int ty, word x) {
- int y;
- int i;
-
- /* 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=0; y<SCREEN_HEIGHT+mv->dyThresh && 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 qclean()
-{
- modexLeave();
- setkb(0);
-}
-
-void pdump(map_view_t *pee)
-{
- int mult=(QUADWH);
- int palq=(mult)*TILEWH;
- int palcol=0;
- int palx, paly;
- for(paly=0; paly<palq; paly+=mult){
- for(palx=0; palx<palq; palx+=mult){
- modexClearRegion(pee->page, palx+TILEWH, paly+TILEWH, mult, mult, palcol);
- palcol++;
- }
- }
-}
-
-void
-animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */sword d, short scrolloffsetswitch, int x, int y, int ls, int lp, bitmap_t *bmp)
-{
- sword dire=32*d; //direction
- sword qq; //scroll offset
-
- if(scrolloffsetswitch==0) qq = 0;
- else qq = ((lp)*SPEED);
- switch (d)
- {
- case 0:
- //up
- x=x-4;
- y=y-qq-TILEWH;
- break;
- case 1:
- // right
- x=x+qq-4;
- y=y-TILEWH;
- break;
- case 2:
- //down
- x=x-4;
- y=y+qq-TILEWH;
- break;
- case 3:
- //left
- x=x-qq-4;
- y=y-TILEWH;
- break;
- }
- modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
- if(2>ls && ls>=1) { modexDrawSpriteRegion(dest->page, x, y, 48, dire, 24, 32, bmp); }else
- if(3>ls && ls>=2) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }else
- if(4>ls && ls>=3) { modexDrawSpriteRegion(dest->page, x, y, 0, dire, 24, 32, bmp); }else
- if(5>ls && ls>=4) { modexDrawSpriteRegion(dest->page, x, y, 24, dire, 24, 32, bmp); }
- //TODO: mask copy //modexCopyPageRegion(dest->page, src->page, x-4, y-4, x-4, y-4, 28, 40);
- //modexClearRegion(top->page, 66, 66, 2, 40, 0);
- //modexCopyPageRegion(dest->page, top->page, 66, 66, 66, 66, 2, 40);
- //turn this off if XT
- //XTif(detectcpu() > 0)
- modexWaitBorder();
-}