]> 4ch.mooo.com Git - 16.git/blob - src/zcroll.c
reverted input and stuff back... walk() is broken badly
[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[MaxPlayers];\r
36 map_view_t mv[4];\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[0].ent = malloc(sizeof(entity_t));\r
68         player[0].ent->spri = malloc(sizeof(struct sprite));\r
69         player[0].ent->spri->spritesheet = malloc(sizeof(struct vrs_container));\r
70 \r
71         // create the map\r
72         fprintf(stderr, "testing map load~      ");\r
73         loadmap("data/test.map", &map);\r
74         chkmap(&map, 0);\r
75         printf("chkmap ok       ");\r
76         fprintf(stderr, "yay map loaded~~\n");\r
77 \r
78         // data\r
79         printf("loading sprite\n");\r
80         read_vrs(&gvar, "data/spri/chikyuu.vrs", player[0].ent->spri->spritesheet); printf("sprite loaded\n");\r
81 \r
82         //      input!\r
83 if(!dbg_noplayerinpu)\r
84 {\r
85         IN_Default(0, &player,ctrl_Keyboard1); printf("IN_defaulted\n");\r
86 }\r
87 \r
88         // save the palette\r
89 #ifdef FADE\r
90         dpal = modexNewPal();\r
91         modexPalSave(dpal);\r
92         modexFadeOff(4, dpal);\r
93 #endif\r
94         textInit();\r
95         VGAmodeX(bakapee, 1, &gvar);\r
96 #ifdef MODEXZ\r
97 #ifdef FADE\r
98         modexPalBlack();        //reset the palette~\r
99                 printf("VGA\n");\r
100         CA_LoadFile("data/spri/chikyuu.pal", &pal, &gvar);\r
101         modexPalUpdate1(pal);\r
102                 printf("pallette\n");\r
103         gpal = modexNewPal();\r
104         modexPalSave(gpal);\r
105         modexSavePalFile("data/g.pal", gpal);\r
106         modexPalBlack();        //so player will not see loadings~\r
107 #endif\r
108 \r
109         // setup camera and screen~\r
110 if(dbg_noplayerinpu)\r
111 {\r
112         //sprintf(&gvar.pee, "press a key for video setup");\r
113         strcpy(global_temp_status_text, "press a key for video setup");\r
114         modexprint(mv[0].page, 0, 64, 1, 7, 0, global_temp_status_text);\r
115         getch();\r
116 }\r
117         modexHiganbanaPageSetup(&gvar.video);\r
118         mv[0].page = &gvar.video.page[0];\r
119         mv[0].map = &map;\r
120         mv[0].video = &gvar.video;\r
121         mv[0].pan       = &pan;\r
122         player[0].ent->spri->x = player[0].ent->spri->y = 20;\r
123 \r
124         // set up paging\r
125         //TODO: LOAD map data and position the map in the middle of the screen if smaller then screen\r
126         mapGoTo(&mv, 0, 0);\r
127 #endif\r
128 \r
129         //TODO: put player in starting position of spot\r
130         //default player position on the viewable map\r
131         player[0].tx = mv[0].tx + mv[0].page->tilemidposscreenx;\r
132         player[0].ty = mv[0].ty + mv[0].page->tilemidposscreeny;\r
133         IN_initplayer(&player, 0);      printf("player inited\n");\r
134 \r
135         i = set_anim_by_id(player[0].ent->spri, 11);\r
136         print_anim_ids(player[0].ent->spri);\r
137         if (i == -1)\r
138         {\r
139 #ifdef FADE\r
140                 modexFadeOff(4, gpal);\r
141 #endif\r
142         VGAmodeX(0, 1, &gvar);\r
143         Shutdown16(&gvar);\r
144         printf("Wrong");\r
145 #ifdef FADE\r
146                 modexFadeOn(4, dpal);\r
147 #endif\r
148         exit(-4);\r
149         }\r
150         //animate_spri(&(player[0].ent->spri));\r
151         printf("spri ok\n");\r
152 \r
153         modexShowPage(mv[0].page);//!(gvar.video.p)\r
154         shinku_fps_indicator_page = 0; // we're on page 1 now, shinku(). follow along please or it will not be visible.\r
155 #ifdef FADE\r
156         modexFadeOn(4, gpal);\r
157 #endif\r
158         printf("LOOP\n");\r
159         if(!dbg_noplayerinpu)\r
160         while(!IN_KeyDown(sc_Escape) && player[0].hp>0)\r
161         {\r
162                 shinku(&gvar);\r
163                 //top left corner & bottem right corner of map veiw be set as map edge trigger since maps are actually square\r
164                 //to stop scrolling and have the player position data move to the edge of the screen with respect to the direction\r
165                 //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\r
166 \r
167                 //player movement\r
168                 IN_ReadControl(0, &player);\r
169                 if(!panswitch){\r
170                         walk(player[0].ent, mv);\r
171                         //walk(mv, &player, 0);\r
172                 }\r
173 \r
174                 //the scripting stuff....\r
175 /*              if(((mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].triggery-1))] == 0) && IN_KeyDown(0x1C))||(player[0].tx == 5 && player[0].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[0].q == (TILEWH/(player[0].speed))+1 && player[0].info.dir != 2 && (player[0].triggerx == 5 && player[0].triggery == 5)){ player[0].hp--; }\r
185 */              //debugging binds!\r
186                 if(IN_KeyDown(2)){ modexShowPage(mv[0].page); pan.pn=0; }\r
187                 if(IN_KeyDown(25)){ modexpdump(mv[0].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[0].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[0].page, 0, 0, mv[0].page->width, mv[0].page->height, 2);\r
213                 }\r
214                 if(IN_KeyDown(66))      //f8\r
215                 {\r
216         //              modexDrawSprite(mv[0].page, 16, 16, p);\r
217                         modexDrawSprite(mv[0].page, 32+48, 16, (player[0].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[0].q==1) && !(player[0].x%TILEWH==0 && player[0].y%TILEWH==0)) break;        //incase things go out of sync!\r
233                 player[0].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[0].tx);\r
254         printf("ty: %d\n", mv[0].ty);\r
255         printf("\n");\r
256         printf("player vars:\n");\r
257         printf("        x: %d", player[0].x); printf("  y: %d\n", player[0].y);\r
258         //if(player[0].hp==0) printf("%d wwww\n", player[0].y+8);\r
259         //else printf("\nplayer[0].y: %d\n", player[0].y);\r
260         printf("        tx: %d", player[0].tx); printf("        ty: %d\n", player[0].ty);\r
261         printf("        triggx: %d", player[0].triggerx); printf("      triggy: %d\n", player[0].triggery);\r
262         printf("        hp: %d", (player[0].hp));       printf("        q: %d", player[0].q);   printf("        player.info.dir: %d", player[0].info.dir);      printf("        player.d: %d ", player[0].d);\r
263                 printf("        pdir=%d\n", player[0].pdir);\r
264         printf("        tile data value at player trigger position: %d\n\n", mv[0].map->data[(player[0].triggerx-1)+(map.width*(player[0].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[0].map->width, mv[0].map->height, mv[0].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