]> 4ch.mooo.com Git - 16.git/commitdiff
====scroll.exe coverted and bakapi.exe converted!! this is a major commit!
authorsparky4 <sparky4@cock.li>
Fri, 24 Jul 2015 21:35:17 +0000 (16:35 -0500)
committersparky4 <sparky4@cock.li>
Fri, 24 Jul 2015 21:35:17 +0000 (16:35 -0500)
modified:   16.exe
modified:   16.hed
renamed:    scroll.exe -> _scroll.exe
modified:   bakapi.exe
modified:   exmmtest.exe
modified:   fontgfx.exe
modified:   inputest.exe
modified:   makefile
modified:   maptest.exe
modified:   palettec.exe
modified:   pcxtest.exe
modified:   scroll.exe
modified:   sountest.exe
modified:   src/bakapi.c
modified:   src/lib/16_head.h
modified:   src/lib/16_in.h
modified:   src/lib/bakapee.c
modified:   src/lib/bakapee.h
modified:   src/lib/modex16.c
modified:   src/lib/modex16.h
modified:   src/lib/scroll.c
modified:   src/lib/scroll16.c
modified:   src/lib/scroll16.h
modified:   src/scroll.c
modified:   test.exe
modified:   test2.exe
modified:   tsthimem.exe

27 files changed:
16.exe
16.hed
_scroll.exe [new file with mode: 0644]
bakapi.exe
exmmtest.exe
fontgfx.exe
inputest.exe
makefile
maptest.exe
palettec.exe
pcxtest.exe
scroll.exe
sountest.exe
src/bakapi.c
src/lib/16_head.h
src/lib/16_in.h
src/lib/bakapee.c
src/lib/bakapee.h
src/lib/modex16.c
src/lib/modex16.h
src/lib/scroll.c
src/lib/scroll16.c
src/lib/scroll16.h
src/scroll.c
test.exe
test2.exe
tsthimem.exe

diff --git a/16.exe b/16.exe
index 755921db3d47f760caced6e0e3fdd6b3e4873b61..1d6be61bdb079cdf0d9ed689ca069bfa75ad1770 100644 (file)
Binary files a/16.exe and b/16.exe differ
diff --git a/16.hed b/16.hed
index 26b5fb214798342a809f230fb39294b76b86ddab..f138c24b9b9152b8569a5c11dfb70cefe4418a4c 100644 (file)
Binary files a/16.hed and b/16.hed differ
diff --git a/_scroll.exe b/_scroll.exe
new file mode 100644 (file)
index 0000000..4052f6d
Binary files /dev/null and b/_scroll.exe differ
index 901f024c8fb8db7477a12a7a384ff0de23651f43..4feb24163e7542a0f6b72ccb656cbeb4fb307170 100644 (file)
Binary files a/bakapi.exe and b/bakapi.exe differ
index 16ed980b19f1d063710781e4ba5114af58e3bd97..a180d7a4cae0046b7ef1a1685eabd81b28ad7ef6 100644 (file)
Binary files a/exmmtest.exe and b/exmmtest.exe differ
index 3d7992f0efd3f03d7c5fe4600a641bd4f7c3e314..633fbcac1da478fcccf92bca05b23db469d865fd 100644 (file)
Binary files a/fontgfx.exe and b/fontgfx.exe differ
index 842c7b7d133ac68ec7877ac2deb9fc9ce917212b..37ca5d823869cfdf803993b7316680097cf0e00f 100644 (file)
Binary files a/inputest.exe and b/inputest.exe differ
index abbbd750a28253d47572079173f05d96441f8cdc..822004493d8e8929c012e8c5f4665cd6a4893755 100644 (file)
--- a/makefile
+++ b/makefile
@@ -30,7 +30,7 @@ DOSLIBOBJ = adlib.$(OBJ) midi.$(OBJ) 8254.$(OBJ) 8259.$(OBJ) dos.$(OBJ) cpu.$(OB
 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)
 
@@ -47,10 +47,11 @@ bakapi.exe: bakapi.$(OBJ) 16.lib
 #
 #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
index 72086a5f57dedae6146bfc9c8b73cf35ce613e4e..bd0d285281175a072347d82735e8ec8213879dee 100644 (file)
Binary files a/maptest.exe and b/maptest.exe differ
index 44c1f7319a341d2b069f4b066d46c5871346f40c..7cf347c9313f47a034a621f7e13bb1a7c37e518c 100644 (file)
Binary files a/palettec.exe and b/palettec.exe differ
index e011ca41aa52de723298e74db53f2cf7aa05f417..3490160171380fc045c89ab835887a2e85bcf48b 100644 (file)
Binary files a/pcxtest.exe and b/pcxtest.exe differ
index 4052f6dbe08b677ea81542545d14bee2f251ef86..49eb80da641948bbb8dab64657b398e9b1a18fa7 100644 (file)
Binary files a/scroll.exe and b/scroll.exe differ
index 87ad9cd7303eb775bc218eb5ed2388de893edaf4..4aa8c2b33238a5231c406fb52ebe8fdffe89c431 100644 (file)
Binary files a/sountest.exe and b/sountest.exe differ
index 16ef895697092062038821f41f4869855b9a5c24..073ff6765d5b783b087f7b473e202acbd38d7e3b 100644 (file)
@@ -1,4 +1,4 @@
-/* Project 16 Source Code
+/* Project 16 Source Code~
  * Copyright (C) 2012-2015 sparky4 & pngwen & andrius4669
  *
  * This file is part of Project 16.
@@ -28,8 +28,7 @@
 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;
@@ -42,13 +41,15 @@ main(int argc, char *argv[])
        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);
@@ -58,6 +59,9 @@ main(int argc, char *argv[])
        //modexDrawBmp(VGA, 0, 0, &bmp, 0); //____
        //getch(); //____
 
+       VGAmodeX(1);
+       modexShowPage(&screen);
+
 // screen savers
 #ifdef BOINK
        while(d!=0)     // on!
@@ -68,17 +72,22 @@ main(int argc, char *argv[])
                }
                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())
@@ -118,7 +127,7 @@ main(int argc, char *argv[])
                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();++++*/
@@ -151,8 +160,8 @@ main(int argc, char *argv[])
        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!
index c0bc4cfbcbf57c83558e4506c331f549120de042..4a923a8c2c8873c72d05d825621707caeee69534 100644 (file)
 
 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)
 
@@ -154,6 +154,10 @@ typedef    enum    {false,true}    boolean;
 //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);
index bb0e8e61929f64fe674f30e8104d8f056d2034d5..8008ab8641cda8756977fee740dd95f9533e0cdd 100644 (file)
@@ -28,7 +28,8 @@
 #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
@@ -215,12 +216,13 @@ typedef   struct
        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
index 8dbca62beddf2a8969dc55ed9edcd385eb6dfbf8..90ff502d6882e8c17a2cb95db5cae7be0f7e268a 100644 (file)
 
 #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);
@@ -141,7 +114,7 @@ void dingo(bakapee_t *pee)
 
 void dingas(bakapee_t *pee)
 {
-       if(pee->gq == BONK) dingu(pee);
+       if(pee->qq == BONK) dingu(pee);
        if(!pee->bakax)
        {
                #ifdef TILE
@@ -181,8 +154,10 @@ void dingu(bakapee_t *pee)
        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;
        }
 }
@@ -196,32 +171,33 @@ void ding(page_t *page, bakapee_t *pee, word q)
        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)
                                {
@@ -251,18 +227,19 @@ void ding(page_t *page, bakapee_t *pee, word q)
                                {
                                        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);
@@ -297,31 +274,29 @@ void ding(page_t *page, bakapee_t *pee, word q)
                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++;
 }
index 672d80463d888289f60a5aaf6824c0f06c652cdc..fd0a1a0a595c1a2d8630383b7b6cc1d2c913688f 100644 (file)
 #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);
index 2bb0a34842ef6a5390c8f41b23c740d3f59e9a11..a0ffccb4b9f29e8acc25208507311f059bea6cc7 100644 (file)
 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
@@ -647,7 +677,7 @@ modexPalWhite() {
 }\r
 \r
 \r
-/* utility */\r
+/* utility */
 void\r
 modexPalUpdate(bitmap_t *bmp, word *i, word qp, word aqoffset)\r
 {\r
index 30802c9a076d75e34f2bcf190cc1f8c3317a79e5..4426f7337feee16e9b8944b6a3c706bdfa7a97e6 100644 (file)
@@ -55,6 +55,7 @@ typedef union
 
 /* -============================ Functions =============================- */
 /* mode switching, page, and plane functions */
+void VGAmodeX(sword vq);
 void modexEnter();
 void modexLeave();
 page_t modexDefaultPage();
@@ -102,6 +103,7 @@ void modexWaitBorder();
 
 /* -======================= 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
index bf2f41436bd8a80b863a98da3deb1fc841775c86..6246059376c073914daf5746f43147662b5aa45c 100644 (file)
@@ -56,7 +56,7 @@ void mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset);
 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)
@@ -72,7 +72,7 @@ void main() {
        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;
@@ -132,7 +132,7 @@ void main() {
        //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)
@@ -442,7 +442,7 @@ mapScrollLeft(map_view_t *mv, byte offset, short lp) {
        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;
@@ -539,7 +539,7 @@ mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y) {
 }
 
 
-void 
+void
 mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset) {
        word x;
        int i;
@@ -557,7 +557,7 @@ mapDrawRow(map_view_t *mv, int tx, int ty, word y, word poopoffset) {
 }
 
 
-void 
+void
 mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
        int y;
        int i;
@@ -566,7 +566,7 @@ mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
        /* 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) {
@@ -577,7 +577,7 @@ mapDrawCol(map_view_t *mv, int tx, int ty, word x, word poopoffset) {
        }
 }
 
-void 
+void
 mapDrawWRow(map_view_t *mv, int tx, int ty, word y) {
        word x;
        int i;
@@ -593,7 +593,7 @@ mapDrawWRow(map_view_t *mv, int tx, int ty, word y) {
        }
 }
 
-void 
+void
 mapDrawWCol(map_view_t *mv, int tx, int ty, word x) {
        int y;
        int i;
@@ -601,7 +601,7 @@ mapDrawWCol(map_view_t *mv, int tx, int ty, word x) {
        /* 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) {
@@ -612,8 +612,11 @@ 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)
+//             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
index 40acf484e58b9cf82166540325cd6c3058075a4b..9ddbe90b124eeaa5449b7758aa40a38a49d312f0 100644 (file)
 */
 #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();
+}
index 71a0cbf35e24708122656d19a5a52f5bc84ebded..f4e0b9cbe61ed80abc29fdd5b939bb4cce953014 100644 (file)
 #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_*/
index 30032eefd1e096d8e032802359de8f30775f4519..03411b3c0788fb3dbfe20e5b251f75e30b34cde9 100644 (file)
  *
  */
 
-#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())
@@ -151,12 +96,12 @@ void main() {
        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())
@@ -190,18 +135,21 @@ void main() {
        }
 */
 
+       /*      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);
@@ -236,15 +184,15 @@ void main() {
 
        //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;
@@ -255,196 +203,29 @@ void main() {
        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)
                                {
@@ -468,10 +249,10 @@ void main() {
                        } 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)
                                {
@@ -495,10 +276,10 @@ void main() {
                        } 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)
                                {
@@ -522,10 +303,10 @@ void main() {
                        } 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)
                                {
@@ -548,12 +329,13 @@ void main() {
                                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--)
@@ -562,27 +344,27 @@ void main() {
                }
                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
@@ -590,7 +372,7 @@ void main() {
                }
        }
 
-       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!
 
        }
 
@@ -599,18 +381,18 @@ void main() {
        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());
@@ -635,343 +417,3 @@ void main() {
        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();
-}
index 9bb2f6aee3ec6282c50778ab515f80e5c9230e29..030e3f27cfcf6fe3f940440b4f8c408b40a980de 100644 (file)
Binary files a/test.exe and b/test.exe differ
index 69f2adc9f1b437636e585e436ea9ab9579787605..af316409c44682cd4a427bf2dcb79a931f0ffdbe 100644 (file)
Binary files a/test2.exe and b/test2.exe differ
index 465bcca1d9b8121d47379774845a6ef5f63c98f1..99f79a9e23d792f4cbddd7adac227b9001828856 100644 (file)
Binary files a/tsthimem.exe and b/tsthimem.exe differ