#include "src/lib/scroll16.h"\r
#include "src/lib/16_timer.h"\r
//#include "src/lib/16_dbg.h"\r
-//HC_heapdump\r
\r
+//#define FADE\r
+\r
+//#define NOMAPLOAD\r
+//#define OLDPLAYERSPRITESTUFF\r
+#define XC_CTRLTYPE ctrl_Joystick1//ctrl_Mouse//ctrl_Keyboard\r
+//Mouse\r
#ifdef __DEBUG__\r
#define SCROLLEXEDEBUG\r
boolean\r
- dbg_nointest=1;\r
+ dbg_nointest=0,\r
+ dbg_joymousedelta=0;\r
#endif\r
\r
-#define FADE\r
-//#define NOMAPLOAD\r
-\r
-static map_t map;\r
+//static map_t map;\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+#include "src/lib/bitmapl.h"\r
+static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */\r
+#define INC_PER_FRAME if(gvar->player[pn].enti.q&1) persist_aniframe++; if(persist_aniframe>4) persist_aniframe = 1;\r
+\r
+void modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp);\r
+void modexDrawSpriteRegion(page_t *page, int x, int y, int rx, int ry, int rw, int rh, bitmap_t *bmp);\r
+boolean ZCL_ScreenMidPosChk(map_view_t *map_v, nibble dir, int tx, int ty);\r
+boolean ZCL_CollCheck(map_view_t *map_v, nibble dir, int tx, int ty);\r
+boolean ZCL_mapEdgeChk(map_view_t *map_v, nibble dir, int tx, int ty, boolean pansw, boolean noscrollsw);\r
+void oldwalk(global_game_variables_t *gvar, word pn, bitmap_t *pbmp);\r
+void animatePlayer(global_game_variables_t *gvar, /*map_view_t *top, */short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp);\r
+#endif\r
float t;\r
\r
//debugswitches\r
\r
void main(int argc, char *argv[])\r
{\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+ bitmap_t ptmp; // player sprite\r
+#endif\r
static global_game_variables_t gvar;\r
struct glob_game_vars *ggvv;\r
\r
\r
// create the map\r
#ifdef SCROLLEXEDEBUG\r
- strcpy(gvar.handle.datadumpfilename, "xcroll1.16w"); MM_DumpData (&gvar);\r
- fprintf(stderr, "testing map load~ ");\r
+ //strcpy(gvar.handle.datadumpfilename, "mmdump1.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.heapdumpfilename, "heap1.16w"); HC_heapdump(&gvar);\r
+ //fprintf(stderr, "testing map load~ ");\r
#endif\r
- CA_loadmap("data/test.map", &map, &gvar);\r
#ifndef NOMAPLOAD\r
- chkmap(&map, 0);\r
+ CA_loadmap("data/test.map", &gvar.map, &gvar);\r
+ chkmap(&gvar.map, 0);\r
#else\r
- chkmap(&map, 1);\r
+ chkmap(&gvar.map, 1);\r
#endif\r
- //initMap(&map);\r
+ //initMap(&gvar.map);\r
#ifdef SCROLLEXEDEBUG\r
printf("chkmap ok\n");\r
// fprintf(stderr, "yay map loaded~~\n");\r
- strcpy(gvar.handle.datadumpfilename, "xcroll2.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.datadumpfilename, "mmdump2.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.heapdumpfilename, "heap2.16w"); HC_heapdump(&gvar);\r
#endif\r
\r
// data\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+ ptmp = bitmapLoadPcx("data/chikyuu.pcx"); // load sprite\r
+ modexPalUpdate(ptmp.palette);\r
+#else\r
#ifdef SCROLLEXEDEBUG\r
fprintf(stderr, "VRS_LoadVRS~ ");\r
- strcpy(gvar.handle.datadumpfilename, "xcroll3.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.datadumpfilename, "mmdump3.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.heapdumpfilename, "heap3.16w"); HC_heapdump(&gvar);\r
#endif\r
VRS_LoadVRS(bakapee, &gvar.player[0].enti, &gvar);\r
#ifdef SCROLLEXEDEBUG\r
printf("VRS load OK~\n");\r
- strcpy(gvar.handle.datadumpfilename, "xcroll4.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.datadumpfilename, "mmdump4.16w"); MM_DumpData (&gvar);\r
+ //strcpy(gvar.handle.heapdumpfilename, "heap4.16w"); HC_heapdump(&gvar);\r
#endif\r
- strcpy(gvar.handle.datadumpfilename, "xcroll.16w");\r
+#endif\r
\r
// input!\r
- IN_Default(0, &gvar.player[0],ctrl_Keyboard1, &gvar);\r
+ IN_Default(0, &gvar.player[0],XC_CTRLTYPE, &gvar);\r
+ IN_SetControlType(&gvar.player[0],XC_CTRLTYPE);\r
\r
// save the palette\r
#ifdef FADE\r
\r
// setup camera and screen~\r
modexHiganbanaPageSetup(&gvar);\r
- ZC_MVSetup(&gvar.mv, &map, &gvar);\r
+ ZC_MVSetup(&gvar.mv, &gvar.map, &gvar);\r
\r
#ifdef FADE\r
modexFadeOn(4, &gvar.video.palette);\r
\r
ZC_PlayerXYpos(0, 0, &gvar.player[0], &gvar.mv, 1);\r
EN_initPlayer(&gvar.player[0], &gvar.video);\r
+#ifdef SPRITE\r
+#ifndef OLDPLAYERSPRITESTUFF\r
//print_anim_ids(gvar.player[0].enti.spri);\r
if (gvar.video.sprifilei == -1)\r
{\r
modexFadeOn(4, &gvar.video.dpal);\r
#endif\r
}\r
+#endif\r
+#endif\r
\r
// while(!gvar.in.inst->Keyboard[sc_Escape) && !gvar.in.inst->Keyboard[sc_Space) && !gvar.in.inst->Keyboard[sc_Enter]){ FUNCTIONKEYSHOWMV }\r
gvar.video.page[0].tlx=gvar.mv[0].tx*TILEWH;\r
if(!panswitch){\r
//ZC_walk2(gvar.player[0].ent, mv);\r
//ZC_walk(&gvar.mv, &gvar.player, 0);\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+ oldwalk(&gvar, 0, &ptmp);\r
+#else\r
ZC_walk(&gvar, 0);\r
+#endif\r
}else{\r
TAIL_PANKEYFUNZC;\r
//printf(" gvar.player[0].enti.q: %d", gvar.player[0].enti.q); printf(" gvar.player[0].d: %d\n", gvar.player[0].d);\r
\r
//the scripting stuff....\r
//if(((gvar.player[0].enti.triggerx == TRIGGX && gvar.player[0].enti.triggery == TRIGGY) && gvar.in.inst->Keyboard[0x1C))||(gvar.player[0].enti.tx == 5 && gvar.player[0].enti.ty == 5))\r
- if(((gvar.mv[0].map->layerdata[0].data[(gvar.player[0].enti.triggerx-1)+(map.width*(gvar.player[0].enti.triggery-1))] == 0) && gvar.in.inst->Keyboard[0x1C])||(gvar.player[0].enti.tx == 5 && gvar.player[0].enti.ty == 5))\r
+ if(((gvar.mv[0].map->layerdata[0].data[(gvar.player[0].enti.triggerx-1)+(gvar.map.width*(gvar.player[0].enti.triggery-1))] == 0) && gvar.in.inst->Keyboard[0x1C])||(gvar.player[0].enti.tx == 5 && gvar.player[0].enti.ty == 5))\r
{\r
short i;\r
for(i=800; i>=400; i--)\r
}\r
nosound();\r
}\r
- if(gvar.player[0].enti.q == (TILEWH/(gvar.player[0].enti.speed))+1 && gvar.player[0].info.dir != 2 && (gvar.player[0].enti.triggerx == 5 && gvar.player[0].enti.triggery == 5)){ gvar.player[0].enti.hp--; }\r
+ if(gvar.player[0].enti.q == (TILEWH/(gvar.player[0].enti.spt))+1 && gvar.player[0].info.dir != 2 && (gvar.player[0].enti.triggerx == 5 && gvar.player[0].enti.triggery == 5)){ gvar.player[0].enti.hp--; }\r
//debugging binds!\r
// if(gvar.in.inst->Keyboard[24]){ VL_modexPalScramble(&gvar.video.palette); /*paloffset=0;*/ VL_LoadPalFileCore(&gvar.video.palette, &gvar); modexpdump(gvar.mv[0].page); IN_UserInput(1, &gvar); } //o\r
+ if(gvar.in.inst->Keyboard[sc_O]){ VL_LoadPalFileCore(&gvar.video.palette, &gvar); modexpdump(gvar.video.sp, &gvar); IN_UserInput(1, &gvar); } //o\r
if(gvar.in.inst->Keyboard[22]){ VL_modexPalScramble(&gvar.video.palette); VL_LoadPalFileCore(&gvar.video.palette, &gvar); } //u\r
\r
TAIL_FUNCTIONKEYFUNCTIONS\r
#endif\r
//===============================================================================\r
\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+ if(gvar.in.inst->Keyboard[sc_J])// || gvar.in.inst->Keyboard[sc_K])\r
+ {\r
+// sprintf(global_temp_status_text2, "%Fp", &ptmp.data);\r
+// modexprint(&(gvar.video.page[0]), gvar.video.page[0].sw/2, gvar.video.page[0].sh/2, 1, 1, 3/*ccolor*/, 8, gvar.video.VL_Started, global_temp_status_text2);\r
+ modexDrawSprite(&gvar.video.page[0], 16, 16, &ptmp);\r
+ }\r
+ if(gvar.in.inst->Keyboard[sc_K])\r
+ {\r
+ _fmemset(ptmp.data, 4, (ptmp.width)*ptmp.height);\r
+ }\r
+#else\r
if(gvar.in.inst->Keyboard[sc_J])// || gvar.in.inst->Keyboard[sc_K])\r
{\r
if(spriteswitch)//gvar.in.inst->Keyboard[sc_J])\r
ZC_animatePlayer(&gvar.mv, &gvar.player, 0);\r
IN_UserInput(1, &gvar);\r
}//JK\r
+#endif\r
//#ifdef FADE\r
// if(gvar.in.inst->Keyboard[10]){ modexPalOverscan(rand()%56); modexPalUpdate(gvar.video.dpal); IN_UserInput(1, &gvar); }\r
//#endif\r
if(gvar.in.inst->Keyboard[sc_R]){ VL_modexPalOverscan(&gvar.video.palette, rand()%32); } //r\r
+ if(gvar.in.inst->Keyboard[sc_F]){ VL_SetPalette(&gamepal, &gvar.video); } //f\r
\r
\r
//if((gvar.player[0].enti.q==1) && !(gvar.player[0].enti.x%TILEWH==0 && gvar.player[0].enti.y%TILEWH==0)) Quit (&gvar, "PLAYER OFF THE RAILS!");//break; //incase things go out of sync!\r
modexFadeOff(4, &gvar.video.palette);\r
#endif\r
#ifdef SCROLLEXEDEBUG\r
- MM_Reset(&gvar); MM_DumpData (&gvar);\r
+ MM_DumpData (&gvar);\r
HC_heapdump (&gvar);\r
#endif\r
Shutdown16(&gvar);\r
modexFadeOn(4, gvar.video.dpal);\r
#endif\r
}\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+\r
+#ifdef OLDPLAYERSPRITESTUFF\r
+void\r
+modexDrawSprite(page_t *page, int x, int y, bitmap_t *bmp) {\r
+ /* draw the whole sprite */\r
+ modexDrawSpriteRegion(page, x, y, 0, 0, bmp->width, bmp->height, bmp);\r
+// sprintf(global_temp_status_text2, "%Fp", &bmp->data);\r
+// modexprint(page, page->sw/2, (page->sh/2)+8, 1, 1, 3/*ccolor*/, 8, gvar->video.VL_Started, global_temp_status_text2);\r
+}\r
+\r
+void\r
+modexDrawSpriteRegion(page_t *page, int x, int y,\r
+ int rx, int ry, int rw, int rh, bitmap_t *bmp) {\r
+ word poffset = (word)page->data + y*(page->width/4) + x/4;\r
+ byte *data = bmp->data;\r
+ word bmpOffset = (word) data + ry * bmp->width + rx;\r
+ word width = rw;\r
+ word height = rh;\r
+ byte plane = 1 << ((byte) x & 0x03);\r
+ word scanCount = width/4 + (width%4 ? 1 :0);\r
+ word nextPageRow = page->width/4 - scanCount;\r
+ word nextBmpRow = (word) bmp->width - width;\r
+ word rowCounter=0;\r
+ byte planeCounter = 4;\r
+\r
+// sprintf(global_temp_status_text2, "%Fp", bmp->data);\r
+// modexprint(page, page->sw/2, (page->sh/2)+8, 1, 1, 3/*ccolor*/, 8, ggvv->video.VL_Started, global_temp_status_text2);\r
+// sprintf(global_temp_status_text2, "%Fp", data);\r
+// modexprint(page, page->sw/2, (page->sh/2)+16, 1, 1, 3/*ccolor*/, 8, ggvv->video.VL_Started, global_temp_status_text2);\r
+\r
+ __asm {\r
+ MOV AX, SCREEN_SEG ; go to the VGA memory\r
+ MOV ES, AX\r
+\r
+ MOV DX, SC_INDEX ; point at the map mask register\r
+ MOV AL, SC_MAPMASK ;\r
+ OUT DX, AL ;\r
+\r
+ PLANE_LOOP:\r
+ MOV DX, SC_DATA ; select the current plane\r
+ MOV AL, plane ;\r
+ OUT DX, AL ;\r
+\r
+ ;-- begin plane painting\r
+ MOV AX, height ; start the row counter\r
+ MOV rowCounter, AX ;\r
+ MOV DI, poffset ; go to the first pixel\r
+ MOV SI, bmpOffset ; go to the bmp pixel\r
+ ROW_LOOP:\r
+ MOV CX, width ; count the columns\r
+ SCAN_LOOP:\r
+ LODSB\r
+ DEC SI\r
+ CMP AL, 0\r
+ JNE DRAW_PIXEL ; draw non-zero pixels\r
+\r
+ INC DI ; skip the transparent pixel\r
+ ADD SI, 1\r
+ JMP NEXT_PIXEL\r
+ DRAW_PIXEL:\r
+ MOVSB ; copy the pixel\r
+ NEXT_PIXEL:\r
+ SUB CX, 3 ; we skip the next 3\r
+ ADD SI, 3 ; skip the bmp pixels\r
+ LOOP SCAN_LOOP ; finish the scan\r
+\r
+ MOV AX, nextPageRow\r
+ ADD DI, AX ; go to the next row on screen\r
+ MOV AX, nextBmpRow\r
+ ADD SI, AX ; go to the next row on bmp\r
+\r
+ DEC rowCounter\r
+ JNZ ROW_LOOP ; do all the rows\r
+ ;-- end plane painting\r
+\r
+ MOV AL, plane ; advance to the next plane\r
+ SHL AL, 1 ;\r
+ AND AL, 0x0f ; mask the plane properly\r
+ MOV plane, AL ; store the plane\r
+\r
+ INC bmpOffset ; start bmp at the right spot\r
+\r
+ DEC planeCounter\r
+ JNZ PLANE_LOOP ; do all 4 planes\r
+ }\r
+}\r
+\r
+void oldwalk(global_game_variables_t *gvar, word pn, bitmap_t *pbmp)\r
+{\r
+ switch(gvar->player[pn].enti.d)\r
+ {\r
+ //no direction\r
+ case 2:\r
+ //0000gvar->mv[0].video->startclk = (*clockw);\r
+ break;\r
+ //right movement\r
+ case 3:\r
+ if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx+1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY)) //collision detection!\r
+ {\r
+ gvar->player[pn].walktype=2;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ animatePlayer(gvar, 1, 1, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ ZC_mapScroll(gvar->mv, gvar->player, pn);\r
+ gvar->player[pn].enti.q++;\r
+ //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx++; }\r
+ }\r
+ else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx+1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))\r
+ {\r
+ gvar->player[pn].walktype=1;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ gvar->player[pn].enti.x+=(gvar->player[pn].enti.spt);\r
+ animatePlayer(gvar, 1, 0, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ gvar->player[pn].enti.q++;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx++; }\r
+ }\r
+ else\r
+ {\r
+ gvar->player[pn].walktype=0;\r
+ //ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
+ modexShowPage(&gvar->video.page[0]);\r
+ gvar->player[pn].enti.d = 2;\r
+ }\r
+ gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx+1;\r
+ gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty;\r
+ break;\r
+ //left movement\r
+ case 1:\r
+ if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx-1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY)) //collision detection!\r
+ {\r
+ gvar->player[pn].walktype=2;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ animatePlayer(gvar, 1, 1, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ ZC_mapScroll(gvar->mv, gvar->player, pn);\r
+ gvar->player[pn].enti.q++;\r
+ //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx--; }\r
+ }\r
+ else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx-1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))\r
+ {\r
+ gvar->player[pn].walktype=1;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ gvar->player[pn].enti.x-=(gvar->player[pn].enti.spt);\r
+ animatePlayer(gvar, 1, 0, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ gvar->player[pn].enti.q++;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx--; }\r
+ }\r
+ else\r
+ {\r
+ gvar->player[pn].walktype=0;\r
+ //ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
+ modexShowPage(&gvar->video.page[0]);\r
+ gvar->player[pn].enti.d = 2;\r
+ }\r
+ gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx-1;\r
+ gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty;\r
+ break;\r
+ //down movement\r
+ case 4:\r
+ if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty+1 == TRIGGY)) //collision detection!\r
+ {\r
+ gvar->player[pn].walktype=2;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ animatePlayer(gvar, 1, 1, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ ZC_mapScroll(gvar->mv, gvar->player, pn);\r
+ gvar->player[pn].enti.q++;\r
+ //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty++; }\r
+ }\r
+ else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty+1 == TRIGGY))\r
+ {\r
+ gvar->player[pn].walktype=1;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ gvar->player[pn].enti.y+=(gvar->player[pn].enti.spt);\r
+ animatePlayer(gvar, 1, 0, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ gvar->player[pn].enti.q++;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty++; }\r
+ }\r
+ else\r
+ {\r
+ gvar->player[pn].walktype=0;\r
+ //ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
+ modexShowPage(&gvar->video.page[0]);\r
+ gvar->player[pn].enti.d = 2;\r
+ }\r
+ gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx;\r
+ gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty+1;\r
+ break;\r
+ //up movement\r
+ case 0:\r
+ if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty-1 == TRIGGY)) //collision detection!\r
+ {\r
+ gvar->player[pn].walktype=2;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ animatePlayer(gvar, 1, 1, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ ZC_mapScroll(gvar->mv, gvar->player, pn);\r
+ gvar->player[pn].enti.q++;\r
+ //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty--; }\r
+ }\r
+ else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
+ ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty-1 == TRIGGY))\r
+ {\r
+ gvar->player[pn].walktype=1;\r
+ if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
+ {\r
+ INC_PER_FRAME;\r
+ gvar->player[pn].enti.y-=(gvar->player[pn].enti.spt);\r
+ animatePlayer(gvar, 1, 0, gvar->player[pn].enti.x, gvar->player[pn].enti.y, persist_aniframe, gvar->player[pn].enti.q, pbmp);\r
+ gvar->player[pn].enti.q++;\r
+ modexShowPage(&gvar->video.page[0]);\r
+ } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty--; }\r
+ }\r
+ else\r
+ {\r
+ gvar->player[pn].walktype=0;\r
+ //ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
+ modexShowPage(&gvar->video.page[0]);\r
+ gvar->player[pn].enti.d = 2;\r
+ }\r
+ gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx;\r
+ gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty-1;\r
+ break;\r
+ }\r
+}\r
+\r
+void animatePlayer(global_game_variables_t *gvar, /*map_view_t *top, */short d1, short d2, int x, int y, int ls, int lp, bitmap_t *bmp)\r
+{\r
+ short dire=32*d1; //direction\r
+ short qq; //scroll offset\r
+\r
+ if(d2==0) qq = 0;\r
+ else qq = ((lp)*gvar->player[0].enti.spt);\r
+ switch (d1)\r
+ {\r
+ case 0:\r
+ //up\r
+ x=x-4;\r
+ y=y-qq-TILEWH;\r
+ break;\r
+ case 1:\r
+ // right\r
+ x=x+qq-4;\r
+ y=y-TILEWH;\r
+ break;\r
+ case 2:\r
+ //down\r
+ x=x-4;\r
+ y=y+qq-TILEWH;\r
+ break;\r
+ case 3:\r
+ //left\r
+ x=x-qq-4;\r
+ y=y-TILEWH;\r
+ break;\r
+ }\r
+ modexCopyPageRegion(gvar->mv[0].page, gvar->mv[1].page, x-4, y-4, x-4, y-4, 28, 40);\r
+ if(2>ls && ls>=1) { modexDrawSpriteRegion(gvar->mv[0].page, x, y, 48, dire, 24, 32, bmp); }else\r
+ if(3>ls && ls>=2) { modexDrawSpriteRegion(gvar->mv[0].page, x, y, 24, dire, 24, 32, bmp); }else\r
+ if(4>ls && ls>=3) { modexDrawSpriteRegion(gvar->mv[0].page, x, y, 0, dire, 24, 32, bmp); }else\r
+ if(5>ls && ls>=4) { modexDrawSpriteRegion(gvar->mv[0].page, x, y, 24, dire, 24, 32, bmp); }\r
+ //TODO: mask copy //modexCopyPageRegion(gvar->mv[0].page, gvar->mv[0].page, x-4, y-4, x-4, y-4, 28, 40);\r
+ //modexClearRegion(top->page, 66, 66, 2, 40, 0);\r
+ //modexCopyPageRegion(gvar->mv[0].page, top->page, 66, 66, 66, 66, 2, 40);\r
+ //turn this off if XT\r
+ //if(detectcpu() > 0) modexWaitBorder();\r
+ switch(gvar->kurokku.fpscap)\r
+ {\r
+ case 0: //turn this off if XT\r
+ //modexprint(&(gv->video.page[0]), x, y+8, type, 1, col, bgcol, "sanic!");\r
+ gvar->kurokku.frames_per_second=1;\r
+ break;\r
+ case 1:\r
+ modexWaitBorder();\r
+ gvar->kurokku.frames_per_second=FPSVALUE;\r
+ break;\r
+ }\r
+ PM_NextFrame(gvar);\r
+}\r
+#endif\r