+\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