- //modexClearRegion(bg->page, player.x, player.y, 16, 16, 4); //currently the over scan color!\r
- /*#define INC_PER_FRAME_NPC if(npc0.q&1) persist_aniframe++; if(persist_aniframe>4) persist_aniframe = 1;\r
-\r
- if(npc0.d == 0 && npc0.q == 1) npc0.d =rand()%8;\r
- if(npc0.d>4)\r
- npc0.d=0;\r
-\r
- //right movement\r
- if(npc0.d == 2)\r
- {\r
- if(npc0.tx < map.width && !(npc0.tx+1 == TRIGGX && npc0.ty == TRIGGY) && !(npc0.tx+1 == player.tx && npc0.ty == player.ty))\r
- {\r
- if(npc0.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME_NPC;\r
- npc0.x+=SPEED;\r
- //animatePlayer(bg, spri, mask, 1, 0, npc0.x, npc0.y, persist_aniframe, q, &npctmp);\r
- animatePlayer(bg, spri, npc0.d-1, 0, npc0.x, npc0.y, persist_aniframe, npc0.q, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.q++;\r
- } else { npc0.q = 1; npc0.d = 0; npc0.tx++; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, npc0.x-4, npc0.y-TILEWH, npc0.x-4, npc0.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 32, 24, 32, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.d = 0;\r
- }\r
- npc0.triggerx = npc0.tx+1;\r
- npc0.triggery = npc0.ty;\r
- }\r
-\r
- //left movement\r
- if(npc0.d == 4)\r
- {\r
- if(npc0.tx > 1 && !(npc0.tx-1 == TRIGGX && npc0.ty == TRIGGY) && !(npc0.tx-1 == player.tx && npc0.ty == player.ty))\r
- {\r
- if(npc0.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME_NPC;\r
- npc0.x-=SPEED;\r
- //animatePlayer(bg, spri, mask, 3, 0, npc0.x, npc0.y, persist_aniframe, q, &npctmp);\r
- animatePlayer(bg, spri, npc0.d-1, 0, npc0.x, npc0.y, persist_aniframe, npc0.q, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.q++;\r
- } else { npc0.q = 1; npc0.d = 0; npc0.tx--; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, npc0.x-4, npc0.y-TILEWH, npc0.x-4, npc0.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 96, 24, 32, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.d = 0;\r
- }\r
- npc0.triggerx = npc0.tx-1;\r
- npc0.triggery = npc0.ty;\r
- }\r
-\r
- //down movement\r
- if(npc0.d == 3)\r
- {\r
- if(npc0.ty < map.height && !(npc0.tx == TRIGGX && npc0.ty+1 == TRIGGY) && !(npc0.tx == player.tx && npc0.ty == player.ty+1))\r
- {\r
- if(npc0.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME_NPC;\r
- npc0.y+=SPEED;\r
- //animatePlayer(bg, spri, mask, 2, 0, npc0.x, npc0.y, persist_aniframe, q, &npctmp);\r
- animatePlayer(bg, spri, npc0.d-1, 0, npc0.x, npc0.y, persist_aniframe, npc0.q, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.q++;\r
- } else { npc0.q = 1; npc0.d = 0; npc0.ty++; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, npc0.x-4, npc0.y-TILEWH, npc0.x-4, npc0.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 64, 24, 32, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.d = 0;\r
- }\r
- npc0.triggerx = npc0.tx;\r
- npc0.triggery = npc0.ty+1;\r
- }\r
-\r
- //up movement\r
- if(npc0.d == 1)\r
- {\r
- if(npc0.ty > 1 && !(npc0.tx == TRIGGX && npc0.ty-1 == TRIGGY) && !(npc0.tx+1 == player.tx && npc0.ty == player.ty-1))\r
- {\r
- if(npc0.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME_NPC;\r
- npc0.y-=SPEED;\r
- //animatePlayer(bg, spri, mask, 0, 0, npc0.x, npc0.y, persist_aniframe, q, &npctmp);\r
- modexShowPage(spri->page);\r
- animatePlayer(bg, spri, npc0.d-1, 0, npc0.x, npc0.y, persist_aniframe, npc0.q, &npctmp);\r
- npc0.q++;\r
- } else { npc0.q = 1; npc0.d = 0; npc0.ty--; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, npc0.x-4, npc0.y-TILEWH, npc0.x-4, npc0.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 0, 24, 32, &npctmp);\r
- modexShowPage(spri->page);\r
- npc0.d = 0;\r
- }\r
- npc0.triggerx = npc0.tx;\r
- npc0.triggery = npc0.ty-1;\r
- }\r
-\r
- if((npc0.triggery == player.ty && npc0.triggerx == player.tx) || (npc0.ty == player.ty && npc0.tx == player.tx)){ player.hp--; }\r
-*/\r
-\r
- //player movement\r
- //TODO: make movement into a function!
- if(!panswitch){\r
- //right movement\r
- if((keyp(77) && !keyp(75) && player.d == 0) || player.d == 2)\r
- {\r
- if(player.d == 0){ player.d = 2; }\r
- 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!\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- //animatePlayer(bg, spri, mask, 1, 1, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- mapScrollRight(bg, SPEED);\r
- mapScrollRight(spri, SPEED);\r
- //mapScrollRight(mask, SPEED);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.tx++; }\r
- }\r
- else if(player.tx < map.width && !(bg->map->data[(player.tx)+(map.width*(player.ty-1))] == 0))//!(player.tx+1 == TRIGGX && player.ty == TRIGGY))\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- player.x+=SPEED;\r
- //animatePlayer(bg, spri, mask, 1, 0, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.tx++; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 32, 24, 32, &ptmp);\r
- modexShowPage(spri->page);\r
- player.d = 0;\r
- }\r
- player.triggerx = player.tx+1;\r
- player.triggery = player.ty;\r
- }\r
-\r
- //left movement\r
- if((keyp(75) && !keyp(77) && player.d == 0) || player.d == 4)\r
- {\r
- if(player.d == 0){ player.d = 4; }\r
- 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!\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- //animatePlayer(bg, spri, mask, 3, 1, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- mapScrollLeft(bg, SPEED);\r
- mapScrollLeft(spri, SPEED);\r
- //mapScrollLeft(mask, SPEED);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.tx--; }\r
- }\r
- else if(player.tx > 1 && !(bg->map->data[(player.tx-2)+(map.width*(player.ty-1))] == 0))//!(player.tx-1 == TRIGGX && player.ty == TRIGGY))\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- player.x-=SPEED;\r
- //animatePlayer(bg, spri, mask, 3, 0, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.tx--; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 96, 24, 32, &ptmp);\r
- modexShowPage(spri->page);\r
- player.d = 0;\r
- }\r
- player.triggerx = player.tx-1;\r
- player.triggery = player.ty;\r
- }\r
-\r
- //down movement\r
- if((keyp(80) && !keyp(72) && player.d == 0) || player.d == 3)\r
- {\r
- if(player.d == 0){ player.d = 3; }\r
- 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!\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- //animatePlayer(bg, spri, mask, 2, 1, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- mapScrollDown(bg, SPEED);\r
- mapScrollDown(spri, SPEED);\r
- //mapScrollDown(mask, SPEED);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.ty++; }\r
- }\r
- else if(player.ty < map.height && !(bg->map->data[(player.tx-1)+(map.width*(player.ty))] == 0))//!(player.tx == TRIGGX && player.ty+1 == TRIGGY))\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- player.y+=SPEED;\r
- //animatePlayer(bg, spri, mask, 2, 0, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.ty++; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 64, 24, 32, &ptmp);\r
- modexShowPage(spri->page);\r
- player.d = 0;\r
- }\r
- player.triggerx = player.tx;\r
- player.triggery = player.ty+1;\r
- }\r
-\r
- //up movement\r
- if((keyp(72) && !keyp(80) && player.d == 0) || player.d == 1)\r
- {\r
- if(player.d == 0){ player.d = 1; }\r
- 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!\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- //animatePlayer(bg, spri, mask, 0, 1, player.x, player.y, persist_aniframe, q, &ptmp);\r
- animatePlayer(bg, spri, player.d-1, 1, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- mapScrollUp(bg, SPEED);\r
- mapScrollUp(spri, SPEED);\r
- //mapScrollUp(mask, SPEED);\r
- modexShowPage(spri->page);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.ty--; }\r
- }\r
- else if(player.ty > 1 && !(bg->map->data[(player.tx-1)+(map.width*(player.ty-2))] == 0))//!(player.tx == TRIGGX && player.ty-1 == TRIGGY))\r
- {\r
- if(player.q<=(TILEWH/SPEED))\r
- {\r
- INC_PER_FRAME;\r
- player.y-=SPEED;\r
- //animatePlayer(bg, spri, mask, 0, 0, player.x, player.y, persist_aniframe, q, &ptmp);\r
- modexShowPage(spri->page);\r
- animatePlayer(bg, spri, player.d-1, 0, player.x, player.y, persist_aniframe, player.q, &ptmp);\r
- player.q++;\r
- } else { player.q = 1; player.d = 0; player.ty--; }\r
- }\r
- else\r
- {\r
- modexCopyPageRegion(spri->page, bg->page, player.x-4, player.y-TILEWH, player.x-4, player.y-TILEWH, 24, 32);\r
- modexDrawSpriteRegion(spri->page, player.x-4, player.y-TILEWH, 24, 0, 24, 32, &ptmp);\r
- modexShowPage(spri->page);\r
- player.d = 0;\r
- }\r
- player.triggerx = player.tx;\r
- player.triggery = player.ty-1;\r
- }\r
-}else{
+#include "src/lib/scroll16.h"
+//#include "src/lib/mapread.h"
+#include "src/lib/wcpu/wcpu.h"
+
+//#define FADE
+//#define SPRITE
+
+//word far *clock= (word far*) 0x046C; /* 18.2hz clock */
+
+void main()
+{
+// word panswitch=0, panq=1, pand=0;
+ global_game_variables_t gvar;
+ word panpagenum=0; //for panning!
+ int i;
+ static word paloffset=0;
+ 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 */
+ page_t screen, screen2, screen3;
+ static map_t map;
+ map_view_t mv[3];
+ map_view_t *bg, *spri, *mask;//, *tmp;
+ //map_view_db_t pgid[4];
+#ifdef FADE
+ byte *dpal, *gpal;
+#endif
+ byte *ptr;
+ byte *mappalptr;
+ byte *mesg=malloc(sizeof(dword));
+ player_t player[MaxPlayers];
+
+ player[0].persist_aniframe=0;
+ player[0].speed=4;
+ //0000printf("starting timer\n");
+//++++
+ start_timer(&gvar);
+//++++ gvar.frames_per_second = 60;
+//0000 printf("ok\n");
+ //extern struct inconfig inpu;
+
+// atexit(qclean());
+
+ /* create the map */
+ //0000printf("Total used @ before map load: %zu\n", oldfreemem-GetFreeSize());
+//0000 printf("Total free @ before map load: %zu\n", GetFreeSize());
+//0000 printf("Total near free @ before map load: %zu\n", GetNearFreeSize());
+//0000 printf("Total far free @ before map load: %zu\n", GetFarFreeSize());
+// getch();
+//0000 fprintf(stderr, "testing~\n");
+//++++ loadmap("data/test.map", &map);
+ map.width=0;
+ map.height=0;
+ chkmap(&map, 1);
+// printf("chkmap ok\n");
+//0000 fprintf(stderr, "yay map loaded~~\n");
+ mv[0].map = ↦
+ mv[1].map = ↦
+ mv[2].map = ↦
+
+ /* draw the tiles */
+ ptr = map.data;
+ mappalptr = map.tiles->data->palette;
+ /* data */
+//0000 printf("Total used @ before image loading: %zu\n", oldfreemem-GetFreeSize());
+ 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(&player[0].data);
+//0000 printf("planar buffer ok\n");
+//0000 printf("Total used @ after planar buffer creation: %zu\n", oldfreemem-GetFreeSize());
+
+ /* input! */
+//0000 getch();
+ IN_Startup();
+ IN_Default(0,&player,ctrl_Joystick);
+
+ /* save the palette */
+#ifdef FADE
+ dpal = modexNewPal();
+ modexPalSave(dpal);
+ modexFadeOff(4, dpal);
+#endif
+
+ textInit();
+ VGAmodeX(1, &gvar);
+#ifdef FADE
+ modexPalBlack(); //reset the palette~
+#endif
+// printf("Total used @ before palette initiation: %zu\n", oldfreemem-GetFreeSize());
+//++++ 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);
+// printf("\n====\n");
+// printf("0 paloffset= %d\n", paloffset/3);
+// printf("====\n\n");
+#ifdef FADE
+ gpal = modexNewPal();
+ modexPalSave(gpal);
+ modexSavePalFile("data/g.pal", gpal);
+ modexPalBlack(); //so player will not see loadings~
+#endif
+
+ /* setup camera and screen~ */
+ screen = modexDefaultPage();
+ screen.width += (TILEWH*2);
+ screen.height += (TILEWH*2);//+QUADWH;
+ mv[0].page = &screen;
+ screen2 = modexNextPage(mv[0].page);
+ mv[1].page = &screen2;
+ screen3 = modexNextPage0(mv[1].page, 320, 240); //(352*176)+1024 is the remaining amount of memory left wwww
+ //screen3 = modexNextPage0(mv2.page, 320, 192); //(352*176)+1024 is the remaining amount of memory left wwww
+ mv[2].page = &screen3;
+
+ /* set up paging */
+ bg = &mv[0];
+ spri = &mv[1];
+ mask = &mv[2];
+
+//TODO: LOAD map data and position the map in the middle of the screen if smaller then screen
+ mapGoTo(bg, 0, 0);
+ mapGoTo(spri, 0, 0);
+ //mapGoTo(mask, 0, 0);
+
+ //TODO: put player in starting position of spot
+ //default player position on the viewable map
+ 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].info.x = player[0].tx;
+ player[0].info.xaxis = player[0].tx*TILEWH;
+ player[0].info.y = player[0].ty;
+ player[0].info.yaxis = player[0].ty*TILEWH;*/
+ player[0].q=1;
+ player[0].d=2;
+ player[0].hp=4;
+// player[0].persist_aniframe=0;
+ //npc
+ /*npc0.tx = bg->tx + 1;
+ npc0.ty = bg->ty + 1;
+ npc0.x = npc0.tx*TILEWH;
+ npc0.y = npc0.ty*TILEWH;
+ npc0.triggerx = npc0.tx;
+ npc0.triggery = npc0.ty+1;
+ npc0.q=1;
+ npc0.d=0;
+ modexDrawSpriteRegion(spri->page, npc0.x-4, npc0.y-TILEWH, 24, 64, 24, 32, &npctmp);*/
+#ifdef SPRITE
+ modexDrawSpriteRegion(spri->page, player[0].x-4, player[0].y-TILEWH, 24, 64, 24, 32, &player[0].data);
+#else
+ modexClearRegion(mv[1].page, player[0].x-4, player[0].y-TILEWH, 24, 32, 15);
+#endif
+
+ 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);
+#ifdef FADE
+ modexFadeOn(4, gpal);
+#endif
+ while(!IN_KeyDown(sc_Escape) && player[0].hp>0)
+ {
+ sprintf(mesg, "%lu", gvar.tiku);
+//++++ modexprint(mv[1].page, 16, 16, 1, 15, 0, mesg);
+ shinku(mv[1].page, &gvar);
+ 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[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
+ //if(!panswitch){
+ walk(mv, player, 0);
+ /*}else{