- //player_t npc0;
-
-// atexit(qclean());
- /*if(!emmtest())
- {
- printf("Expanded memory is not present\n");
- exit(0);
- }
-
- if(!emmok())
- {
- printf("Expanded memory manager is not present\n");
- exit(0);
- }
-
- emsavail = emmavail();
- if(emsavail == -1)
- {
- printf("Expanded memory manager error\n");
- exit(0);
- }
- printf("There are %ld pages available\n",emsavail);
-
- if((emmhandle = emmalloc(emsavail)) < 0)
- {
- printf("Insufficient pages available\n");
- exit(0);
- }*/
-
- /* create the map */
-//0000 printf("Total used @ before map load: %zu\n", oldfreemem-GetFreeSize());
-//0000 fprintf(stderr, "testing~\n");
- loadmap("data/test.map", &map);
-//0000 fprintf(stderr, "yay map loaded~~\n");
-//---- map = allocMap(map.width,map.height); //20x15 is the resolution of the screen you can make maps smaller than 20x15 but the null space needs to be drawn properly
- //if(isEMS()) printf("%d tesuto\n", coretotalEMS());
-//---- initMap(&map);
- 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("Total used @ after planar buffer creation: %zu\n", oldfreemem-GetFreeSize());
-
- /*if(isEMS())
- {
- XMOVE mm;
- mm.length=sizeof(map);
- mm.sourceH=0;
- mm.sourceOff=(long)↦
- mm.destH=emmhandle;
- mm.destOff=1;
- //halp!
- ist = move_emem(&mm);
- printf("%d\n", coretotalEMS());
- if(!ist){ dealloc_emem(emmhandle); exit(5); }
- //printf("%d\n", emmhandle);
- }
-
- if(isEMS())
- {
- XMOVE mm;
- mm.length=emmhandle;
- mm.sourceH=0;
- mm.sourceOff=(long)&ptmp;
- mm.destH=emmhandle;
- mm.destOff=0;
- //halp!
- ist = move_emem(&mm);
- printf("%d\n", coretotalEMS());
- if(!ist){ dealloc_emem(emmhandle); exit(5); }
- //printf("%d\n", emmhandle);
- }
-*/
-
- /* input! */
- IN_Startup();
- IN_Default(0,&player,ctrl_Joystick);
-
- /* save the palette */
- dpal = modexNewPal();
- modexPalSave(dpal);
- modexFadeOff(4, dpal);
-
- VGAmodeX(1);
- modexPalBlack(); //reset the palette~
-// 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");
- gpal = modexNewPal();
- modexPalSave(gpal);
- modexSavePalFile("data/g.pal", gpal);
- modexPalBlack(); //so player will not see loadings~
-
- /* 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].q=1;
- player[0].info.dir=2;
- player[0].hp=4;
- //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);*/
- 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);
+#include "src/lib/scroll16.h"\r
+#include "src/lib/16_timer.h"\r
+#include "src/lib/wcpu/wcpu.h"\r
+#include "src/lib/mapread.h"\r
+\r
+//#define FADE\r
+#define MODEX //this is for mode x initiating\r
+\r
+//word far *clock= (word far*) 0x046C; /* 18.2hz clock */\r
+//bitmap_t *p;\r
+global_game_variables_t gvar;\r
+static map_t map;\r
+player_t player[MaxPlayers];\r
+map_view_t mv[4];\r
+//word pn=0; //i forgot ww\r
+float t;\r
+sword bakapee;\r
+pan_t pan;\r
+//debugswitches\r
+boolean panswitch=0;\r
+//extern boolean pageflipflop=1;\r
+ unsigned int i;\r
+ const char *cpus;\r
+ //static int persist_aniframe = 0; /* gonna be increased to 1 before being used, so 0 is ok for default */\r
+\r
+ //map_view_db_t pgid[4];\r
+ word pg;\r
+//#ifdef FADE\r
+ //static word paloffset=0;\r
+ byte *dpal;\r
+//#endif\r
+ byte *gpal;\r
+ byte *ptr;\r
+ byte *mappalptr;\r
+\r
+void main(int argc, char *argv[])\r
+{\r
+ //byte *mesg=malloc(sizeof(dword));\r
+\r
+ if(argv[1]) bakapee = atoi(argv[1]);\r
+ else bakapee = 1;\r
+\r
+ // DOSLIB: check our environment\r
+ probe_dos();\r
+\r
+ // DOSLIB: what CPU are we using?\r
+ // NTS: I can see from the makefile Sparky4 intends this to run on 8088 by the -0 switch in CFLAGS.\r
+ // So this code by itself shouldn't care too much what CPU it's running on. Except that other\r
+ // parts of this project (DOSLIB itself) rely on CPU detection to know what is appropriate for\r
+ // the CPU to carry out tasks. --J.C.\r
+ cpu_probe();\r
+\r
+ // DOSLIB: check for VGA\r
+ if (!probe_vga()) {\r
+ printf("VGA probe failed\n");\r
+ return;\r
+ }\r
+ // hardware must be VGA or higher!\r
+ if (!(vga_state.vga_flags & VGA_IS_VGA)) {\r
+ printf("This program requires VGA or higher graphics hardware\n");\r
+ return;\r
+ }\r
+\r
+ if (_DEBUG_INIT() == 0) {\r
+#ifdef DEBUGSERIAL\r
+ printf("WARNING: Failed to initialize DEBUG output\n");\r
+#endif\r
+ }\r
+ _DEBUG("Serial debug output started\n"); // NTS: All serial output must end messages with newline, or DOSBox-X will not emit text to log\r
+ _DEBUGF("Serial debug output printf test %u %u %u\n",1U,2U,3U);\r
+\r
+ pan.pn=1;\r
+\r
+ start_timer(&gvar);\r
+\r
+ /* create the map */\r
+ fprintf(stderr, "testing map load~ ");\r
+ loadmap("data/test.map", &map);\r
+ chkmap(&map, 0);\r
+ printf("chkmap ok ");\r
+ fprintf(stderr, "yay map loaded~~\n");\r
+\r
+ /* draw the tiles */\r
+#ifdef MODEX\r
+ ptr = map.data;\r
+ //mappalptr = map.tiles->btdata->palette;\r
+\r
+ /* data */\r
+ player[0].data = malloc(48*128); //TODO use exmm\r
+ *player[0].data = bitmapLoadPcx("data/chikyuu.pcx"); // load sprite\r
+\r
+ /* create the planar buffer */\r
+////++++ (player[0].data) = *planar_buf_from_bitmap(&p);\r
+ /*++++printf("load pee!! ");\r
+ pp = planar_buf_from_bitmap(&p);\r
+ printf("done!\n");*/\r
+\r
+#endif\r
+ /* input! */\r
+ IN_Startup();\r
+ IN_Default(0,&player,ctrl_Joystick);\r
+ //IN_Default(1,&player,ctrl_Joystick);\r
+\r
+ /* save the palette */\r
+#ifdef MODEX\r
+#ifdef FADE\r
+ dpal = modexNewPal();\r
+ modexPalSave(dpal);\r
+ modexFadeOff(4, dpal);\r
+#endif\r
+\r
+ textInit();\r
+ VGAmodeX(bakapee, 1, &gvar);\r
+// printf("%dx%d\n", gvar.video.page[0].sw, gvar.video.page[0].sh);\r
+#ifdef FADE\r
+ modexPalBlack(); //reset the palette~\r
+#endif\r
+#endif\r
+// printf("Total used @ before palette initiation: %zu\n", oldfreemem-GetFreeSize());\r
+//++++ player[0].data.offset=(paloffset/3);\r
+//++++ modexPalUpdate1(&player[0].data, &paloffset, 0, 0);\r
+ modexPalUpdate1(player[0].data->palette);\r
+//++++0000 modexPalUpdate1(map.tiles->btdata->palette);\r
+ //printf(" %d\n", sizeof(ptmp->data));\r
+ //printf("1: %d\n", paloffset);\r
+//++++ map.tiles->data->offset=(paloffset/3);\r
+ //XTmodexPalUpdate(map.tiles->data, &paloffset, 0, 0);\r
+// printf("\n====\n");\r
+// printf("0 paloffset= %d\n", paloffset/3);\r
+// printf("====\n\n");\r
+#ifdef MODEX\r
+#ifdef FADE\r
+ gpal = modexNewPal();\r
+ modexPalSave(gpal);\r
+ modexSavePalFile("data/g.pal", gpal);\r
+ modexPalBlack(); //so player will not see loadings~\r
+#endif\r
+#endif\r
+\r
+ /* setup camera and screen~ */\r
+ modexHiganbanaPageSetup(&gvar.video);\r
+ for(i=0;i<gvar.video.num_of_pages;i++)\r
+ {\r
+ mv[i].page = &gvar.video.page[i];\r
+ mv[i].map = ↦\r
+ mv[i].video = &gvar.video;\r
+ mv[i].pan = &pan;\r
+ }\r
+\r
+ /* set up paging */\r
+ //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen\r
+ mapGoTo(mv, 0, 0);\r
+ //_fmemcpy(mv[1].page->data, mv[0].page->data, mv[0].page->pagesize);\r
+\r
+ //TODO: put player in starting position of spot\r
+ //default player position on the viewable map\r
+ player[0].tx = mv[0].tx + mv[0].page->tilemidposscreenx;\r
+ player[0].ty = mv[0].ty + mv[0].page->tilemidposscreeny;\r
+ IN_initplayer(&player);//, 0);\r
+ //IN_initplayer(&player, 1);\r
+\r
+#ifndef SPRITE\r
+ modexClearRegion(mv[0].page, player[0].x, player[0].y-TILEWH, 16, 32, 15);\r
+ //modexClearRegion(mv[1].page, player[0].x, player[0].y-TILEWH, 16, 32, 15);\r
+#else\r
+ //PBUFSFUN(mv[1].page, player[0].x, player[0].y-TILEWH, 16, 64, 24, 32, PLAYERBMPDATA);\r
+ PBUFSFUN(mv[0].page, player[0].x, player[0].y-TILEWH, 16, 64, 16, 32, player[0].data);\r
+#endif\r
+\r
+ if(!pageflipflop) modexShowPage(mv[1].page);\r
+ else modexShowPage(mv[0].page);//!(gvar.video.p)\r
+ shinku_fps_indicator_page = 0; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
+\r
+ /* buffer pages */\r
+// modexClearRegion(mv[2].page, 0, 0, mv[2].page->width, mv[2].page->height, 47);\r
+// modexClearRegion(mv[3].page, 0, 0, mv[3].page->width, mv[3].page->height, 45);\r
+// {\r
+// unsigned int k,j,o;\r
+// /* fill screen with a distinctive pattern */\r
+// for (k=0;k < vga_state.vga_width;k++) {\r
+// o = k >> 2;\r
+// vga_write_sequencer(0x02/*map mask*/,1 << (k&3));\r
+// for (j=0;j < vga_state.vga_height;j++,o += vga_state.vga_stride)\r
+// vga_state.vga_graphics_ram[o] = (k^j)&15; // VRL samples put all colors in first 15!\r
+// }\r
+// }\r
+ modexClearRegion(mv[3].page, 0, 128, 24, 36, 15);\r
+\r
+#ifdef MODEX\r
+#ifdef FADE\r
+ modexFadeOn(4, gpal);\r
+#endif\r
+#endif\r