]> 4ch.mooo.com Git - 16.git/blob - src/zcroll.c
ok wwwww zscroll and scroll compile disabled due to me being too tired to whack at...
[16.git] / src / zcroll.c
1 /* Project 16 Source Code~\r
2  * Copyright (C) 2012-2016 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover\r
3  *\r
4  * This file is part of Project 16.\r
5  *\r
6  * Project 16 is free software; you can redistribute it and/or modify\r
7  * it under the terms of the GNU General Public License as published by\r
8  * the Free Software Foundation; either version 3 of the License, or\r
9  * (at your option) any later version.\r
10  *\r
11  * Project 16 is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  * GNU General Public License for more details.\r
15  *\r
16  * You should have received a copy of the GNU General Public License\r
17  * along with this program.  If not, see <http://www.gnu.org/licenses/>, or\r
18  * write to the Free Software Foundation, Inc., 51 Franklin Street,\r
19  * Fifth Floor, Boston, MA 02110-1301 USA.\r
20  *\r
21  */\r
22 \r
23 #include "src/lib/zcroll16.h"\r
24 #include "src/lib/16_timer.h"\r
25 #include "src/lib/wcpu/wcpu.h"\r
26 #include "src/lib/16render.h"\r
27 #include "src/lib/16_dbg.h"\r
28 \r
29 #define MODEXZ\r
30 boolean dbg_noplayerinpu=1;\r
31 \r
32 //TODO: known issues the array dependent mv stuff and player arrays\r
33 global_game_variables_t gvar;\r
34 static map_t map;\r
35 player_t *player;\r
36 map_view_t *mv;\r
37 float t;\r
38 sword bakapee;\r
39 pan_t pan;\r
40 //debugswitches\r
41 boolean panswitch=0,baka=0;\r
42 //extern boolean pageflipflop=1;\r
43 unsigned int i;\r
44 const char *cpus;\r
45 //static int persist_aniframe = 0;    /* gonna be increased to 1 before being used, so 0 is ok for default */\r
46 \r
47 //map_view_db_t pgid[4];\r
48 word pg;\r
49 #ifdef FADE\r
50 static word paloffset=0;\r
51 byte *dpal;\r
52 #endif\r
53 byte *gpal;\r
54 byte *ptr;\r
55 memptr pal;\r
56 \r
57 void main(int argc, char *argv[])\r
58 {\r
59         if(argv[1]) bakapee = atoi(argv[1]);\r
60         else bakapee = 1;\r
61 \r
62         Startup16(&gvar);\r
63 \r
64         pan.pn=0;\r
65         // OK, this one takes hellova time and needs to be done in farmalloc or MM_...\r
66         //TODO: USE MM AND CA AND PM WWWWWWWW\r
67         player = malloc(sizeof(player_t));\r
68         player->ent = malloc(sizeof(entity_t));\r
69         player->ent->spri = malloc(sizeof(struct sprite));\r
70         player->ent->spri->spritesheet = malloc(sizeof(struct vrs_container));\r
71 \r
72         // create the map\r
73         fprintf(stderr, "testing map load~      ");\r
74         loadmap("data/test.map", &map);\r
75         chkmap(&map, 0);\r
76         printf("chkmap ok       ");\r
77         fprintf(stderr, "yay map loaded~~\n");\r
78 \r
79         // data\r
80         printf("loading sprite\n");\r
81         read_vrs(&gvar, "data/spri/chikyuu.vrs", player->ent->spri->spritesheet); printf("sprite loaded\n");\r
82 \r
83         //      input!\r
84 if(!dbg_noplayerinpu)\r
85 {\r
86         IN_Default(0, player,ctrl_Joystick); printf("IN_defaulted\n");\r
87 }\r
88 \r
89         // save the palette\r
90 #ifdef FADE\r
91         dpal = modexNewPal();\r
92         modexPalSave(dpal);\r
93         modexFadeOff(4, dpal);\r
94 #endif\r
95         textInit();\r
96         VGAmodeX(bakapee, 1, &gvar);\r
97 #ifdef MODEXZ\r
98 #ifdef FADE\r
99         modexPalBlack();        //reset the palette~\r
100                 printf("VGA\n");\r
101         CA_LoadFile("data/spri/chikyuu.pal", &pal, &gvar);\r
102         modexPalUpdate1(pal);\r
103                 printf("pallette\n");\r
104         gpal = modexNewPal();\r
105         modexPalSave(gpal);\r
106         modexSavePalFile("data/g.pal", gpal);\r
107         modexPalBlack();        //so player will not see loadings~\r
108 #endif\r
109 \r
110         // setup camera and screen~\r
111 if(dbg_noplayerinpu)\r
112 {\r
113         //sprintf(&gvar.pee, "press a key for video setup");\r
114         strcpy(global_temp_status_text, "press a key for video setup");\r
115         modexprint(mv->page, 0, 64, 1, 7, 0, global_temp_status_text);\r
116         getch();\r
117 }\r
118         modexHiganbanaPageSetup(&gvar.video);\r
119         mv->page = &gvar.video.page[0];\r
120         mv->map = &map;\r
121         mv->video = &gvar.video;\r
122         mv->pan = &pan;\r
123         player->ent->spri->x = player->ent->spri->y = 20;\r
124 \r
125         // set up paging\r
126         //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen\r
127         mapGoTo(mv, 0, 0);\r
128 #endif\r
129 \r
130         //TODO: put player in starting position of spot\r
131         //default player position on the viewable map\r
132         player->tx = mv->tx + mv->page->tilemidposscreenx;\r
133         player->ty = mv->ty + mv->page->tilemidposscreeny;\r
134         IN_initplayer(player);  printf("player inited\n");\r
135 \r
136         i = set_anim_by_id(player->ent->spri, 11);\r
137         print_anim_ids(player->ent->spri);\r
138         if (i == -1)\r
139         {\r
140 #ifdef FADE\r
141                 modexFadeOff(4, gpal);\r
142 #endif\r
143         VGAmodeX(0, 1, &gvar);\r
144         Shutdown16(&gvar);\r
145         printf("Wrong");\r
146 #ifdef FADE\r
147                 modexFadeOn(4, dpal);\r
148 #endif\r
149         exit(-4);\r
150         }\r
151         //animate_spri(&(player->ent->spri));\r
152         printf("spri ok\n");\r
153 \r
154         modexShowPage(mv->page);//!(gvar.video.p)\r
155         shinku_fps_indicator_page = 0; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
156 #ifdef FADE\r
157         modexFadeOn(4, gpal);\r
158 #endif\r
159         printf("LOOP\n");\r
160         if(!dbg_noplayerinpu)\r
161         while(!IN_KeyDown(sc_Escape) && player->hp>0)\r
162         {\r
163                 shinku(&gvar);\r
164                 //top left corner & bottem right corner of map veiw be set as map edge trigger since maps are actually square\r
165                 //to stop scrolling and have the player position data move to the edge of the screen with respect to the direction\r
166                 //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\r
167 \r
168                 //player movement\r
169                 IN_ReadControl(player);\r
170                 if(!panswitch){\r
171                         walk(player->ent, mv);\r
172                 }\r
173 \r
174                 //the scripting stuff....\r
175 /*              if(((mv->map->data[(player->triggerx-1)+(map.width*(player->triggery-1))] == 0) && IN_KeyDown(0x1C))||(player->tx == 5 && player->ty == 5))\r
176                 {\r
177                         short i;\r
178                         for(i=800; i>=400; i--)\r
179                         {\r
180                                 sound(i);\r
181                         }\r
182                         nosound();\r
183                 }\r
184                 if(player->q == (TILEWH/(player->speed))+1 && player->info.dir != 2 && (player->triggerx == 5 && player->triggery == 5)){ player->hp--; }\r
185 */              //debugging binds!\r
186                 if(IN_KeyDown(2)){ modexShowPage(mv->page); pan.pn=0; }\r
187                 if(IN_KeyDown(25)){ modexpdump(mv->page);\r
188                          IN_UserInput(1,1);\r
189                 }       //p\r
190 #ifdef FADE\r
191                 if(IN_KeyDown(24)){ modexPalUpdate0(gpal); paloffset=0; modexpdump(mv->page); IN_UserInput(1,1); }\r
192                 if(IN_KeyDown(22)){\r
193                         printf("2paloffset      =       %d\n", paloffset/3);\r
194                         IN_UserInput(1,1);\r
195                 }\r
196 #endif\r
197 \r
198                 //pan switch\r
199                 if(IN_KeyDown(88)){panswitch=!panswitch; IN_UserInput(1,1);}    //f12\r
200                 if(IN_KeyDown(87))      //f11\r
201                 {\r
202                         pageflipflop=!pageflipflop;\r
203                         IN_UserInput(1,1);\r
204                 }\r
205                 if(IN_KeyDown(68))      //f10\r
206                 {\r
207                         gvar.kurokku.fpscap=!gvar.kurokku.fpscap;\r
208                         IN_UserInput(1,1);\r
209                 }\r
210                 if(IN_KeyDown(67))      //f9\r
211                 {\r
212                         modexClearRegion(mv->page, 0, 0, mv->page->width, mv->page->height, 2);\r
213                 }\r
214                 if(IN_KeyDown(66))      //f8\r
215                 {\r
216         //              modexDrawSprite(mv->page, 16, 16, p);\r
217                         modexDrawSprite(mv->page, 32+48, 16, (player->data));\r
218                 }\r
219                 //TODO fmemtest into page\r
220                 /*if(IN_KeyDown(4+1))   //4\r
221                 {\r
222                         pg=1;\r
223                         SELECT_ALL_PLANES();\r
224                         _fmemset(((mv[pg].page->data+4)+(16*(mv[pg].page->width/4))), 15, 4);\r
225                 }*/\r
226 \r
227                 //9\r
228 #ifdef FADE\r
229                 if(IN_KeyDown(10)){ modexPalOverscan(rand()%56); modexPalUpdate1(dpal); IN_UserInput(1,1); }\r
230                 //if(IN_KeyDown(11)){ modexPalOverscan(15); }\r
231 #endif\r
232                 if((player->q==1) && !(player->x%TILEWH==0 && player->y%TILEWH==0)) break;      //incase things go out of sync!\r
233                 player->hp = 0;\r
234         }\r
235 \r
236         else\r
237                 while(!kbhit())\r
238                 {\r
239                         shinku(&gvar);\r
240                 }\r
241 \r
242         /* fade back to text mode */\r
243         /* but 1st lets save the game palette~ */\r
244 #ifdef FADE\r
245         modexPalSave(gpal);\r
246         modexSavePalFile("data/g.pal", gpal);\r
247         modexFadeOff(4, gpal);\r
248 #endif\r
249         VGAmodeX(0, 1, &gvar);\r
250         Shutdown16(&gvar);\r
251         printf("\nProject 16 zcroll.exe. This is just a test file!\n");\r
252         printf("version %s\n", VERSION);\r
253         printf("tx: %d  ", mv->tx);\r
254         printf("ty: %d\n", mv->ty);\r
255         printf("\n");\r
256         printf("player vars:\n");\r
257         printf("        x: %d", player->x); printf("    y: %d\n", player->y);\r
258         //if(player->hp==0) printf("%d wwww\n", player->y+8);\r
259         //else printf("\nplayer->y: %d\n", player->y);\r
260         printf("        tx: %d", player->tx); printf("  ty: %d\n", player->ty);\r
261         printf("        triggx: %d", player->triggerx); printf("        triggy: %d\n", player->triggery);\r
262         printf("        hp: %d", (player->hp)); printf("        q: %d", player->q);     printf("        player.info.dir: %d", player->info.dir);        printf("        player.d: %d ", player->d);\r
263                 printf("        pdir=%d\n", player->pdir);\r
264         printf("        tile data value at player trigger position: %d\n\n", mv->map->data[(player->triggerx-1)+(map.width*(player->triggery-1))]);\r
265         printf("Virtual Screen: %dx", gvar.video.page[0].width);        printf("%d      ", gvar.video.page[0].height);\r
266         printf("Screen: %dx", gvar.video.page[0].sw);   printf("%d\n", gvar.video.page[0].sh);\r
267         printf("virtual tile resolution: %dx", gvar.video.page[0].tilesw);      printf("%d      ", gvar.video.page[0].tilesh);\r
268         printf("tile resolution: %dx", gvar.video.page[0].tw);  printf("%d\n", gvar.video.page[0].th);\r
269         printf("middle tile position: %dx", gvar.video.page[0].tilemidposscreenx);      printf("%d\n", gvar.video.page[0].tilemidposscreeny);\r
270         modexprintmeminfo(&gvar.video);\r
271         //printf("mv[%u].tx: %d", pan.pn, mv[pan.pn].tx); printf("      mv[%u].ty: %d   ", pan.pn, mv[pan.pn].ty);\r
272         printf("gvar.video.p=%u ", gvar.video.p); printf("gvar.video.r=%u ", gvar.video.r);\r
273         printf("pageflipflop=%u\n", pageflipflop);\r
274         //0000printf("\ngvar.video.tickclk=%f\n", gvar.video.tickclk);\r
275         //0000printf("gvar.video.clk=%f", gvar.video.clk);\r
276         printf("\n");\r
277         //printf("map.width=%d  map.height=%d   map.data[0]=%d\n", mv->map->width, mv->map->height, mv->map->data[0]);\r
278 \r
279         printf("\n");\r
280         switch(detectcpu())\r
281         {\r
282                 case 0: cpus = "8086/8088 or 186/88"; break;\r
283                 case 1: cpus = "286"; break;\r
284                 case 2: cpus = "386 or newer"; break;\r
285                 default: cpus = "internal error"; break;\r
286         }\r
287         printf("detected CPU type: %s\n", cpus);\r
288 #ifdef FADE\r
289         modexFadeOn(4, dpal);\r
290 #endif\r
291 }\r