]> 4ch.mooo.com Git - 16.git/blob - src/lib/scroll16.c
f3f054d1edc7ea1fdcb5269b2e780a86a92dfc01
[16.git] / src / lib / scroll16.c
1 /* Project 16 Source Code~\r
2  * Copyright (C) 2012-2017 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         scroll16 library~\r
24 */\r
25 #include "src/lib/scroll16.h"\r
26 \r
27 //check map edge\r
28 boolean ZCL_mapEdgeChk(map_view_t *map_v, nibble dir, int tx, int ty, boolean pansw, boolean noscrollsw)\r
29 {\r
30         int     w,h;\r
31 \r
32         switch (pansw)\r
33         {\r
34                 case 0:\r
35                         w = map_v[0].map->width;\r
36                         h = map_v[0].map->height;\r
37                 break;\r
38                 case 1:\r
39                         w = map_v[0].page->ti.tilesw;\r
40                         h = map_v[0].page->ti.tilesh;\r
41                 break;\r
42         }\r
43 \r
44         switch(dir)\r
45         {\r
46                 default://no direction\r
47                 case 2:\r
48                         //0000pip[0].video->startclk = (*clockw);\r
49                         return false;\r
50                 break;\r
51                 //right movement\r
52                 case 3:\r
53                         if(noscrollsw) return tx < map_v[0].map->width;\r
54                         else return (map_v[0].tx >= 0 && map_v[0].tx+map_v[0].page->ti.tw < w);\r
55                 break;\r
56                 //left movement\r
57                 case 1:\r
58                         if(noscrollsw) return tx > 1;\r
59                         else return (map_v[0].tx > 0 && map_v[0].tx+map_v[0].page->ti.tw <= w);\r
60                 break;\r
61                 //down movement\r
62                 case 4:\r
63                         if(noscrollsw) return ty < map_v[0].map->height;\r
64                         else return (map_v[0].ty >= 0 && map_v[0].ty+map_v[0].page->ti.th < h);\r
65                 break;\r
66                 //up movement\r
67                 case 0:\r
68                         if(noscrollsw) return ty > 1;\r
69                         else return (map_v[0].ty > 0 && map_v[0].ty+map_v[0].page->ti.th <= h);\r
70                 break;\r
71         }\r
72         return false;\r
73 }\r
74 \r
75 boolean ZCL_CollCheck(map_view_t *map_v, nibble dir, int tx, int ty)\r
76 {\r
77         switch (dir)\r
78         {\r
79                 default://no direction\r
80                 case 2:\r
81                 break;\r
82                 case 3://right\r
83                         return !(map_v[0].map->layerdata[0].data[(tx)+(map_v[0].map->width*(ty-1))] == 0);\r
84                 break;\r
85                 case 1://left\r
86                         return !(map_v[0].map->layerdata[0].data[(tx-2)+(map_v[0].map->width*(ty-1))] == 0);\r
87                 break;\r
88                 case 4://down\r
89                         return !(map_v[0].map->layerdata[0].data[(tx-1)+(map_v[0].map->width*(ty))] == 0);\r
90                 break;\r
91                 case 0://up\r
92                         return !(map_v[0].map->layerdata[0].data[(tx-1)+(map_v[0].map->width*(ty-2))] == 0);\r
93                 break;\r
94         }\r
95         return false;\r
96 }\r
97 \r
98 boolean ZCL_ScreenMidPosChk(map_view_t *map_v, nibble dir, int tx, int ty)\r
99 {\r
100         if(ZCL_mapEdgeChk(map_v, dir, 0, 0, 0, 0))\r
101                 switch(dir)\r
102                 {\r
103                         default://no direction\r
104                         case 2:\r
105                                 //0000map_v[0].video->startclk = (*clockw);\r
106                                 return false;\r
107                         break;\r
108                         //right movement\r
109                         case 3:\r
110                                 return tx == map_v[0].tx+map_v[0].page->ti.tilemidposscreenx;\r
111                         break;\r
112                         //left movement\r
113                         case 1:\r
114                                 return tx == map_v[0].tx+map_v[0].page->ti.tilemidposscreenx;\r
115                         break;\r
116                         //down movement\r
117                         case 4:\r
118                                 return ty == map_v[0].ty+map_v[0].page->ti.tilemidposscreeny;\r
119                         break;\r
120                         //up movement\r
121                         case 0:\r
122                                 return ty == map_v[0].ty+map_v[0].page->ti.tilemidposscreeny;\r
123                         break;\r
124                 }\r
125         return false;\r
126 }\r
127 \r
128 //#define INC_PER_FRAME if(gvar->player[pn].enti.q&1) gvar->player[pn].enti.persist_aniframe++; if(gvar->player[pn].enti.persist_aniframe>4) gvar->player[pn].enti.persist_aniframe = 1;\r
129 #ifdef OLDWALKSHOWPAGESTUFF\r
130 #define SHOWMVFUN__ VL_ShowPage(&gvar->video.page[0], 1, 0);//modexShowPage(&gvar->video.page);\r
131 //ZC_ShowMV(gvar->mv, 1, 0);\r
132 #endif\r
133 \r
134 void ZC_walk(global_game_variables_t *gvar, word pn)\r
135 {\r
136         switch(gvar->player[pn].enti.d)\r
137         {\r
138                 //no direction\r
139                 case 2:\r
140                         //0000gvar->mv[0].video->startclk = (*clockw);\r
141                 break;\r
142                 //right movement\r
143                 case 3:\r
144                         if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
145                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx+1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))   //collision detection!\r
146                         {\r
147                                 gvar->player[pn].walktype=2;\r
148                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
149                                 {\r
150                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
151                                         ZC_mapScroll(gvar->mv, gvar->player, pn);\r
152                                         gvar->player[pn].enti.q++;\r
153                                         //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
154 #ifdef OLDWALKSHOWPAGESTUFF\r
155                                         SHOWMVFUN__\r
156 #endif\r
157                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx++; }\r
158                         }\r
159                         else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
160                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx+1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))\r
161                         {\r
162                                 gvar->player[pn].walktype=1;\r
163                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
164                                 {\r
165                                         gvar->player[pn].enti.x+=(gvar->player[pn].enti.spt);\r
166                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
167                                         gvar->player[pn].enti.q++;\r
168 #ifdef OLDWALKSHOWPAGESTUFF\r
169                                         SHOWMVFUN__\r
170 #endif\r
171                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx++; }\r
172                         }\r
173                         else\r
174                         {\r
175                                 gvar->player[pn].walktype=0;\r
176                                 ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
177                                 gvar->player[pn].enti.d = 2;\r
178 #ifdef OLDWALKSHOWPAGESTUFF\r
179                                 SHOWMVFUN__\r
180 #endif\r
181                         }\r
182                         gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx+1;\r
183                         gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty;\r
184                 break;\r
185                 //left movement\r
186                 case 1:\r
187                         if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
188                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx-1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))   //collision detection!\r
189                         {\r
190                                 gvar->player[pn].walktype=2;\r
191                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
192                                 {\r
193                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
194                                         ZC_mapScroll(gvar->mv, gvar->player, pn);\r
195                                         gvar->player[pn].enti.q++;\r
196                                         //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
197 #ifdef OLDWALKSHOWPAGESTUFF\r
198                                         SHOWMVFUN__\r
199 #endif\r
200                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx--; }\r
201                         }\r
202                         else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
203                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx-1 == TRIGGX && gvar->player[pn].enti.ty == TRIGGY))\r
204                         {\r
205                                 gvar->player[pn].walktype=1;\r
206                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
207                                 {\r
208                                         gvar->player[pn].enti.x-=(gvar->player[pn].enti.spt);\r
209                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
210                                         gvar->player[pn].enti.q++;\r
211 #ifdef OLDWALKSHOWPAGESTUFF\r
212                                         SHOWMVFUN__\r
213 #endif\r
214                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.tx--; }\r
215                         }\r
216                         else\r
217                         {\r
218                                 gvar->player[pn].walktype=0;\r
219                                 ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
220                                 gvar->player[pn].enti.d = 2;\r
221 #ifdef OLDWALKSHOWPAGESTUFF\r
222                                 SHOWMVFUN__\r
223 #endif\r
224                         }\r
225                         gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx-1;\r
226                         gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty;\r
227                 break;\r
228                 //down movement\r
229                 case 4:\r
230                         if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
231                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty+1 == TRIGGY))   //collision detection!\r
232                         {\r
233                                 gvar->player[pn].walktype=2;\r
234                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
235                                 {\r
236                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
237                                         ZC_mapScroll(gvar->mv, gvar->player, pn);\r
238                                         gvar->player[pn].enti.q++;\r
239                                         //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
240 #ifdef OLDWALKSHOWPAGESTUFF\r
241                                         SHOWMVFUN__\r
242 #endif\r
243                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty++; }\r
244                         }\r
245                         else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
246                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty+1 == TRIGGY))\r
247                         {\r
248                                 gvar->player[pn].walktype=1;\r
249                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
250                                 {\r
251                                         gvar->player[pn].enti.y+=(gvar->player[pn].enti.spt);\r
252                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
253                                         gvar->player[pn].enti.q++;\r
254 #ifdef OLDWALKSHOWPAGESTUFF\r
255                                         SHOWMVFUN__\r
256 #endif\r
257                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty++; }\r
258                         }\r
259                         else\r
260                         {\r
261                                 gvar->player[pn].walktype=0;\r
262                                 ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
263                                 gvar->player[pn].enti.d = 2;\r
264 #ifdef OLDWALKSHOWPAGESTUFF\r
265                                 SHOWMVFUN__\r
266 #endif\r
267                         }\r
268                         gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx;\r
269                         gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty+1;\r
270                 break;\r
271                 //up movement\r
272                 case 0:\r
273                         if(ZCL_ScreenMidPosChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty) &&\r
274                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX && gvar->player[pn].enti.ty-1 == TRIGGY))   //collision detection!\r
275                         {\r
276                                 gvar->player[pn].walktype=2;\r
277                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
278                                 {\r
279                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
280                                         ZC_mapScroll(gvar->mv, gvar->player, pn);\r
281                                         gvar->player[pn].enti.q++;\r
282                                         //0000gvar->mv[0].video->clk = ((*clockw)-gvar->mv[0].video->startclk)/18.2;\r
283 #ifdef OLDWALKSHOWPAGESTUFF\r
284                                         SHOWMVFUN__\r
285 #endif\r
286                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty--; }\r
287                         }\r
288                         else if(ZCL_mapEdgeChk(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty, 0, 1) &&\r
289                         ZCL_CollCheck(gvar->mv, gvar->player[pn].enti.d, gvar->player[pn].enti.tx, gvar->player[pn].enti.ty))//!(gvar->player[pn].enti.tx == TRIGGX &&  gvar->player[pn].enti.ty-1 == TRIGGY))\r
290                         {\r
291                                 gvar->player[pn].walktype=1;\r
292                                 if(gvar->player[pn].enti.q<=gvar->player[pn].enti.spt)\r
293                                 {\r
294                                         gvar->player[pn].enti.y-=(gvar->player[pn].enti.spt);\r
295                                         ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
296                                         gvar->player[pn].enti.q++;\r
297 #ifdef OLDWALKSHOWPAGESTUFF\r
298                                         SHOWMVFUN__\r
299 #endif\r
300                                 } else { gvar->player[pn].enti.q = 1; gvar->player[pn].enti.d = 2; gvar->player[pn].enti.ty--; }\r
301                         }\r
302                         else\r
303                         {\r
304                                 gvar->player[pn].walktype=0;\r
305                                 ZC_animatePlayer(gvar->mv, gvar->player, pn);\r
306                                 gvar->player[pn].enti.d = 2;\r
307 #ifdef OLDWALKSHOWPAGESTUFF\r
308                                 SHOWMVFUN__\r
309 #endif\r
310                         }\r
311                         gvar->player[pn].enti.triggerx = gvar->player[pn].enti.tx;\r
312                         gvar->player[pn].enti.triggery = gvar->player[pn].enti.ty-1;\r
313                 break;\r
314         }\r
315 }\r
316 \r
317 \r
318 //panning page\r
319 void ZC_panPageManual(map_view_t *pip, player_t *player, word pn)\r
320 {\r
321 #define SHOWMVFUN_ VL_ShowPage(pip[0].page, 0, 0);//ZC_ShowMV(pip, 0, 0);\r
322         switch(player[pn].enti.d)\r
323         {\r
324                 //right movement\r
325                 case 3:\r
326                         if(ZCL_mapEdgeChk(pip, player[pn].enti.d, player[pn].enti.tx, player[pn].enti.ty, 1, 0))\r
327                         {\r
328                                 if(player[pn].enti.q<=player[pn].enti.spt)\r
329                                 {\r
330                                         pip[0].page->dx+=4;\r
331                                         SHOWMVFUN_;\r
332                                         player[pn].enti.q++;\r
333                                 } else { player[pn].enti.q = 1; player[pn].enti.d = 2; pip[0].tx++; }\r
334                         }\r
335                 break;\r
336 \r
337                 //left movement\r
338                 case 1:\r
339                         if(ZCL_mapEdgeChk(pip, player[pn].enti.d, player[pn].enti.tx, player[pn].enti.ty, 1, 0))\r
340                         {\r
341                                 if(player[pn].enti.q<=player[pn].enti.spt)\r
342                                 {\r
343                                         pip[0].page->dx-=4;\r
344                                         SHOWMVFUN_;\r
345                                         player[pn].enti.q++;\r
346                                 } else { player[pn].enti.q = 1; player[pn].enti.d = 2; pip[0].tx--; }\r
347                         }\r
348                 break;\r
349 \r
350                 //down movement\r
351                 case 4:\r
352                         if(ZCL_mapEdgeChk(pip, player[pn].enti.d, player[pn].enti.tx, player[pn].enti.ty, 1, 0))\r
353                         {\r
354                                 if(player[pn].enti.q<=player[pn].enti.spt)\r
355                                 {\r
356                                         pip[0].page->dy+=4;\r
357                                         SHOWMVFUN_;\r
358                                         player[pn].enti.q++;\r
359                                 } else { player[pn].enti.q = 1; player[pn].enti.d = 2; pip[0].ty++; }\r
360                         }\r
361                 break;\r
362 \r
363                 //up movement\r
364                 case 0:\r
365                         if(ZCL_mapEdgeChk(pip, player[pn].enti.d, player[pn].enti.tx, player[pn].enti.ty, 1, 0))\r
366                         {\r
367                                 if(player[pn].enti.q<=player[pn].enti.spt)\r
368                                 {\r
369                                         pip[0].page->dy-=4;\r
370                                         SHOWMVFUN_;\r
371                                         player[pn].enti.q++;\r
372                                 } else { player[pn].enti.q = 1; player[pn].enti.d = 2; pip[0].ty--; }\r
373                         }\r
374                 break;\r
375         }\r
376 }\r
377 \r
378 /*\r
379  * modex mv setup\r
380 */\r
381 void ZC_MVSetup(map_view_t *pip, map_t *map, global_game_variables_t *gv)\r
382 {\r
383 #define ZC_MVI 1\r
384         nibble i;\r
385         // 1st page\r
386         pip[0].page             = &gv->video.page[0];\r
387         pip[0].map              = map;\r
388         pip[0].video            = &gv->video;\r
389         pip[0].kurokku  = &gv->kurokku;\r
390         pip[0].p                = &gv->video.p;\r
391         pip[0].sp               = &gv->video.sp;\r
392         ZC_MVInit(pip, 1, 1);\r
393 \r
394         for(i=ZC_MVI;i<gv->video.num_of_pages;i++)\r
395         {\r
396                 pip[i].page     =       &gv->video.page[i];\r
397                 pip[i].map      =       pip[0].map;\r
398                 pip[i].video    =       pip[0].video;\r
399                 pip[i].p        =       pip[0].p;\r
400                 pip[i].sp       =       pip[0].sp;\r
401 //              if(i>ZC_MVI) {\r
402                 pip[i].tx =     1;\r
403                 pip[i].ty =     1;\r
404 //              }\r
405         }\r
406 }\r
407 \r
408 void ZC_MVInit(map_view_t *pip, int tx, int ty)\r
409 {\r
410         pip[0].tx = tx;\r
411         pip[0].ty = ty;\r
412         //pip[0].tx = pip[1].tx = tx;\r
413         //pip[0].ty = pip[1].ty = ty;\r
414 }\r
415 \r
416 //#if 0\r
417 //for backwards compatibility with code i am lazy ww\r
418 void ZC_ShowMV(map_view_t *moo, boolean vsync, boolean sr)\r
419 {\r
420         VL_ShowPage(moo[0].page, vsync, sr);\r
421 }\r
422 \r
423 #if 0\r
424 void\r
425 initMap(map_t *map) {\r
426         // just a place holder to fill out an alternating pattern\r
427         int x, y;\r
428         int i;\r
429         int tile = 1;\r
430 \r
431         i=0;\r
432         for(y=0; y<map->height; y++) {\r
433                 for(x=0; x<map->width; x++) {\r
434                         map->layerdata[0].data[i]=255;\r
435 //                      printf("[%d]", map->layerdata[0].data[i]);\r
436                         tile = tile ? 0 : 1;\r
437                         i++;\r
438                 }\r
439                 tile = tile ? 0 : 1;\r
440         }\r
441 }\r
442 \r
443 void\r
444 initMap(map_t *map) {\r
445         /* just a place holder to fill out an alternating pattern */\r
446         int x, y;\r
447         int i;\r
448         int tile = 1;\r
449         map->tiles = malloc(sizeof(tiles_t));\r
450         map->width=20;\r
451         map->height=15;\r
452 \r
453         /* create the tile set */\r
454         map->tiles->spri = malloc(sizeof(sprite_t));\r
455         map->tiles->spri->sprite_vrl_cont.vrl_header->width = (TILEWH*2);\r
456         map->tiles->spri->sprite_vrl_cont.vrl_header->height= TILEWH;\r
457         map->tiles->spri->sprite_vrl_cont.buffer = malloc((TILEWH*2)*TILEWH);\r
458         map->tiles->tileHeight = TILEWH;\r
459         map->tiles->tileWidth =TILEWH*2;\r
460         map->tiles->rows = 1;\r
461         map->tiles->cols = 2;\r
462 //#if 0\r
463         i=0;\r
464         for(y=0; y<TILEWH; y++) {\r
465         for(x=0; x<(TILEWH*2); x++) {\r
466                 if(x<TILEWH)\r
467                         map->tiles->spri->sprite_vrl_cont.buffer[i] = 28;//0x24;\r
468                 else\r
469                         map->tiles->spri->sprite_vrl_cont.buffer[i] = 0;//0x34;\r
470                 i++;\r
471         }\r
472         }\r
473 //#endif\r
474         i=0;\r
475         printf("pee\n");\r
476         for(y=0; y<map->height; y++) {\r
477                 for(x=0; x<map->width; x++) {\r
478                         map->layerdata[0].data[i] = tile;\r
479 //                      printf("%u ", map->layerdata[0].data[i]);\r
480                         tile = tile ? 0 : 1;\r
481                         i++;\r
482                 }\r
483 //              printf("\n");\r
484                 tile = tile ? 0 : 1;\r
485         }\r
486 }\r
487 #endif\r
488 //===========================================================================//\r
489 \r
490 \r
491 void near mapScrollRight(map_view_t *mv, player_t *player, word id, word plid)\r
492 {\r
493         word x;//, y;  /* coordinate for drawing */\r
494 \r
495         ScrollRight(mv, player, id, plid);\r
496 \r
497         /* draw the next column */\r
498         x= mv[0].page->sw + mv[0].map->tiles->tileWidth;\r
499         if(ZCL_mapEdgeChk(mv, player[plid].enti.d, player[plid].enti.tx, player[plid].enti.ty, 0, 0))\r
500 #ifndef FULLRCREND\r
501         if(player[plid].enti.q%4)\r
502 #else\r
503         if(player[plid].enti.q==4)\r
504 #endif\r
505 //              if(id==0)\r
506                         mapDrawCol(&mv[id], mv[0].tx + mv[0].page->ti.tw, mv[0].ty-1, x, player, DRAWCOLNUM);\r
507 //              else\r
508 //                      if(mv[0].video->vga_state.bgps)\r
509 //                              modexCopyPageRegion(mv->page, mv[0].page, x, 0, x, 0, mv[0].map->tiles->tileWidth, mv[0].page->height);\r
510         //mv[0].video->dorender=1;//ScrollRight\r
511 }\r
512 \r
513 \r
514 void near mapScrollLeft(map_view_t *mv, player_t *player, word id, word plid)\r
515 {\r
516         word x;//,y;  /* coordinate for drawing */\r
517 \r
518         ScrollLeft(mv, player, id, plid);\r
519 \r
520         /* draw the next column */\r
521         x= 0;\r
522         if(ZCL_mapEdgeChk(mv, player[plid].enti.d, player[plid].enti.tx, player[plid].enti.ty, 0, 0))\r
523 #ifndef FULLRCREND\r
524         if(player[plid].enti.q%4)\r
525 #else\r
526         if(player[plid].enti.q==4)\r
527 #endif\r
528 //              if(id==0)\r
529                         mapDrawCol(&mv[id], mv[0].tx - 1, mv[0].ty-1, x, player, DRAWCOLNUM);\r
530 //              else\r
531 //                      if(mv[0].video->vga_state.bgps)\r
532 //                              modexCopyPageRegion(mv->page, mv[0].page, x, 0, x, 0, mv[0].map->tiles->tileWidth, mv[0].page->height);\r
533         //mv[0].video->dorender=1;//ScrollLeft\r
534 }\r
535 \r
536 \r
537 void near mapScrollUp(map_view_t *mv, player_t *player, word id, word plid)\r
538 {\r
539         word y;//x,  /* coordinate for drawing */\r
540 \r
541         ScrollUp(mv, player, id, plid);\r
542 \r
543         /* draw the next row */\r
544         y= 0;\r
545         if(ZCL_mapEdgeChk(mv, player[plid].enti.d, player[plid].enti.tx, player[plid].enti.ty, 0, 0))\r
546 #ifndef FULLRCREND\r
547         if(player[plid].enti.q%3)\r
548 #else\r
549         if(player[plid].enti.q==4)\r
550 #endif\r
551 //              if(id==0)\r
552                         mapDrawRow(&mv[id], mv[0].tx - 1, mv[0].ty-1, y, player, DRAWROWNUM);\r
553 //              else\r
554 //                      if(mv[0].video->vga_state.bgps)\r
555 //                              modexCopyPageRegion(mv->page, mv[0].page, 0, y, 0, y, mv[0].page->width, mv[0].map->tiles->tileHeight);\r
556         //mv[0].video->dorender=1;//ScrollUp\r
557 }\r
558 \r
559 \r
560 void near mapScrollDown(map_view_t *mv, player_t *player, word id, word plid)\r
561 {\r
562         word y;//x,  /* coordinate for drawing */\r
563 \r
564         ScrollDown(mv, player, id, plid);\r
565 \r
566         /* draw the next row */\r
567         y= mv[0].page->sh + mv[0].map->tiles->tileHeight;\r
568         if(ZCL_mapEdgeChk(mv, player[plid].enti.d, player[plid].enti.tx, player[plid].enti.ty, 0, 0))\r
569 #ifndef FULLRCREND\r
570         if(player[plid].enti.q%3)\r
571 #else\r
572         if(player[plid].enti.q==4)\r
573 #endif\r
574 //              if(id==0)\r
575                         mapDrawRow(&mv[id], mv[0].tx - 1, mv[0].ty+mv[0].page->ti.th, y, player, DRAWROWNUM);\r
576 //              else\r
577 //                      if(mv[0].video->vga_state.bgps)\r
578 //                              modexCopyPageRegion(mv->page, mv[0].page, 0, y, 0, y, mv[0].page->width, mv[0].map->tiles->tileHeight);\r
579         //mv[0].video->dorender=1;//ScrollDown\r
580 }\r
581 \r
582 void ZC_mapScroll(map_view_t *mv, player_t *player, word pn)\r
583 {\r
584         word b = mv[0].video->vga_state.bgps;\r
585         switch(player[pn].enti.d)\r
586         {\r
587                 case 2://none\r
588                 break;\r
589                 case 3://right\r
590                                 ScrollRight(mv, player, 3, pn);\r
591                                 ScrollRight(mv, player, 2, pn);\r
592                                 mapScrollRight(mv, player, (0), pn);\r
593                         if(b)   mapScrollRight(mv, player, (1), pn);\r
594                 break;\r
595                 case 1://left\r
596                                 ScrollLeft(mv, player, 3, pn);\r
597                                 ScrollLeft(mv, player, 2, pn);\r
598                                 mapScrollLeft(mv, player, (0), pn);\r
599                         if(b)   mapScrollLeft(mv, player, (1), pn);\r
600                 break;\r
601                 case 4://down\r
602                                 ScrollDown(mv, player, 3, pn);\r
603                                 ScrollDown(mv, player, 2, pn);\r
604                                 mapScrollDown(mv, player, (0), pn);\r
605                         if(b)   mapScrollDown(mv, player, (1), pn);\r
606                 break;\r
607                 case 0://up\r
608                                 ScrollUp(mv, player, 3, pn);\r
609                                 ScrollUp(mv, player, 2, pn);\r
610                                 mapScrollUp(mv, player, (0), pn);\r
611                         if(b)   mapScrollUp(mv, player, (1), pn);\r
612                 break;\r
613         }\r
614         //mv[0].video->dorender=1;//ZC_mapScroll\r
615 }\r
616 \r
617 //===========================================================================\r
618 //TODO: put player in starting position of assigned spot on map\r
619 //default player position on the viewable map\r
620 void ZC_PlayerXYpos(int x, int y, player_t *player, map_view_t *pip, boolean defaultsw)\r
621 {\r
622         player->enti.tx = x + pip[0].tx;\r
623         player->enti.ty = y + pip[0].ty;\r
624 \r
625         switch(defaultsw)\r
626         {\r
627                 case 1:\r
628                         player->enti.tx += pip[0].page->ti.tilemidposscreenx;\r
629                         player->enti.ty += pip[0].page->ti.tilemidposscreeny;\r
630                 break;\r
631                 case 0:\r
632                 break;\r
633         }\r
634 }\r
635 //===========================================================================\r
636 \r
637 void ZC_checkardmap(map_t *map)\r
638 {\r
639         // just a place holder to fill out an alternating pattern\r
640         int x, y;\r
641         int i;\r
642         static byte z[(MAPW*MAPH)];//map->width*map->height];\r
643         byte tile = 1;\r
644 \r
645         i=0;\r
646         for(y=0; y<map->height; y++) {\r
647                 for(x=0; x<map->width; x++) {\r
648                         z[i]=tile+1;\r
649                         tile = tile ? 0 : 1;\r
650                         i++;\r
651                 }\r
652                 tile = tile ? 0 : 1;\r
653         }\r
654         map->layerdata[0].data = &z;\r
655 }\r
656 \r
657 sword chkmap(map_t *map, word q)\r
658 {\r
659 //      bitmap_t bp;\r
660 //      static byte x[(MAPW*MAPH)+1] =\r
661 //{ 1, 2, 3, 4, 0, 3, 3, 3, 3, 3, 3, 3, 3, 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5, 6, 7, 8, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 9, 10, 11, 12, 4, 1, 0, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 0, 1, 1, 1, 5, 8, 1, 11, 11, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 4, 0, 0, 0, 0, 0, 8, 8, 1, 11, 11, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 8, 8, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 1, 2, 3, 4, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 5, 6, 7, 8, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 9, 10, 11, 12, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 13, 14, 15, 16, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 6, 6, 6, 6, 6, 6, 6, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 10, 10 };\r
662 //1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1 };\r
663 //1,    2,      3,      4,      0,      3,      3,      3,      3,      3,      3,      3,      3,      4,      1,      1,      1,      1,      1,      1,      5,      6,      7,      8,      0,      1,      0,      1,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      9,      10,     11,     12,     4,      1,      0,      1,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      13,     14,     15,     16,     0,      1,      1,      1,      5,      8,      1,      11,     11,     1,      1,      1,      1,      1,      1,      1,      0,      0,      4,      0,      0,      0,      0,      0,      8,      8,      1,      11,     11,     3,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      0,      0,      0,      0,      8,      8,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      0,      0,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      0,      0,      0,      0,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      1,      3,      3,      3,      3,      1,      2,      3,      4 };\r
664         //check for failed to load map\r
665         if((!map->width || !map->height) && (q>0))\r
666         {\r
667                 //initiate a null map!\r
668                 map->width=MAPW;\r
669                 map->height=MAPH;\r
670 //              map->layerdata[0].data = fmfaflflfofcf(((map->width*map->height)+1)*sizeof(byte));\r
671                 ZC_checkardmap(map);//map->layerdata[0].data = &x;\r
672                 //fix this to be far~\r
673 //              bp = bitmapLoadPcx("data/ed.pcx");\r
674 //              map->tiles->data = &bp;\r
675                 map->tiles->tileHeight = 16;\r
676                 map->tiles->tileWidth = 16;\r
677                 map->tiles->rows = 1;\r
678                 map->tiles->cols = 1;\r
679         }\r
680         return 0;\r
681 }\r
682 \r
683 //TODO: player position here\r
684 void mapGoTo(map_view_t *mv, int tx, int ty)\r
685 {\r
686         ZC_mapinitMV(mv, tx, ty);\r
687 \r
688         /* draw the tiles */\r
689         modexClearRegion(mv[0].page, 0, 0, mv[0].page->width, mv[0].page->height, 0);\r
690         ZC_mapredraw(mv, tx, ty);\r
691 \r
692         //if(mv[0].video->vga_state.bgps) modexCopyPageRegion(mv[1].page, mv[0].page, 0, 0, 0, 0, mv[0].page->width, mv[0].page->height);\r
693 }\r
694 \r
695 void ZC_mapinitMV(map_view_t *mv, int tx, int ty)\r
696 {\r
697         /* set up the coordinates */\r
698         mv[0].tx = mv[1].tx = tx;\r
699         mv[0].ty = mv[1].ty = ty;\r
700         mv[0].page->dx = mv[1].page->dx = mv[2].page->dx = mv[3].page->dx = mv->map->tiles->tileWidth;\r
701         mv[0].page->dy = mv[1].page->dy = mv[2].page->dy = mv[3].page->dy = mv->map->tiles->tileHeight;\r
702 \r
703         /* set up the thresholds */\r
704         mv[0].dxThresh = mv[1].dxThresh = mv[2].dxThresh = mv[3].dxThresh = mv->map->tiles->tileWidth * 2;\r
705         mv[0].dyThresh = mv[1].dyThresh = mv[2].dyThresh = mv[3].dyThresh = mv->map->tiles->tileHeight * 2;\r
706 }\r
707 \r
708 void ZC_mapredraw(map_view_t *mv, int tx, int ty)\r
709 {\r
710         int py;//px,\r
711         unsigned int i;\r
712 \r
713         py=0;\r
714         i=mv[0].ty * mv[0].map->width + mv[0].tx;\r
715         for(ty=mv[0].ty-1; py < mv[0].page->sh+mv->dyThresh && ty < mv[0].map->height; ty++, py+=mv[0].map->tiles->tileHeight) {\r
716                 mapDrawWRow(&mv[0], tx-1, ty, py);\r
717                 mapDrawWRow(&mv[1], tx-1, ty, py);\r
718                 i+=mv->map->width - tx;\r
719         }\r
720 }\r
721 \r
722 void near\r
723 mapDrawTile(tiles_t *t, word i, page_t *page, word x, word y)\r
724 {\r
725         word rx, ry;\r
726 //      printf("%02d ", i); if(x >= page->width - t->tileWidth) printf("\n");\r
727         switch(i)\r
728         {\r
729                 case 0:\r
730                         //wwww\r
731                         modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, 1); //currently the over scan color!\r
732                 break;\r
733                 default:\r
734                         rx = (((i-1) % ((t->spri->sprite_vrl_cont.vrl_header->width)/t->tileWidth)) * t->tileWidth);\r
735                         ry = (((i-1) / ((t->spri->sprite_vrl_cont.vrl_header->height)/t->tileHeight)) * t->tileHeight);\r
736 #ifndef TILERENDER\r
737 #ifdef __DEBUG_RF__\r
738                         if(!dbg_pagenorendermap)\r
739 #endif\r
740                                 modexClearRegion(page, x, y, t->tileWidth, t->tileHeight, i+1);\r
741 #else\r
742                         modexDrawBmpRegion              (page, x, y, rx, ry, t->tileWidth, t->tileHeight, i);\r
743                         //draw_vrl1_vgax_modex(x-rx,y-ry,vrl_header,vrl_lineoffs,buffer+sizeof(*vrl_header),bufsz-sizeof(*vrl_header));\r
744                         //modexDrawBmpRegion    (page, x, y, rx, ry, t->tileWidth, t->tileHeight, (t->data));\r
745 #endif\r
746 #ifdef __DEBUG_MAP__\r
747                         if(dbg_maptext){ sprintf(global_temp_status_text2, "%u", i); modexprint(page, x, y, 1, 0, 1, 2, 1, global_temp_status_text2); }\r
748 #endif\r
749                 break;\r
750         }\r
751 }\r
752 #define PALMAPDRAWW 13\r
753 void near mapDrawRow(map_view_t *mv, int tx, int ty, word y, player_t *player, word poopoffset)\r
754 {\r
755         int i; nibble z;\r
756 #ifdef __DEBUG_RF__\r
757 if(dbg_pagedelayrendermap)              if(!y)  y+=TILEWH;      else    y-=TILEWH;\r
758 #endif\r
759         poopoffset%=player[0].enti.spt;\r
760 //printf("y: %d\n", poopoffset);\r
761 #ifdef __DEBUG_RF__\r
762 if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", poopoffset); modexprint(mv->page, player[0].enti.x, player[0].enti.y-28-(poopoffset*8) , 1, 0, PALMAPDRAWW, 1, 1, global_temp_status_text); }\r
763 #endif\r
764         /* the position within the map array */\r
765         i=ty * mv->map->width + tx;\r
766         for(    mv->dx=poopoffset;      mv->dx<(mv->page->sw+mv->dxThresh)/(poopoffset+1) && tx < mv->map->width;       mv->dx+=mv->map->tiles->tileWidth, tx++) {\r
767                 if(i>=0){\r
768                         mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, mv->dx, y);\r
769                         for(z=1;z<=2;z++)\r
770                                 if(mv->map->layerdata[z].data[i]){\r
771                                         sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2);\r
772                                         //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, mv->dx, y);\r
773                                 }\r
774                 }\r
775                 i++; /* next! */\r
776         }\r
777 #ifdef __DEBUG_RF__\r
778 if(dbg_pagedelayrendermap) DBG_RFDELAYMETHOD;\r
779 #endif\r
780 }\r
781 \r
782 void near mapDrawCol(map_view_t *mv, int tx, int ty, word x, player_t *player, word poopoffset)\r
783 {\r
784         int i; nibble z;\r
785 #ifdef __DEBUG_RF__\r
786 if(dbg_pagedelayrendermap)              if(!x)  x+=TILEWH;              else    x-=TILEWH;\r
787 #endif\r
788         poopoffset%=player[0].enti.spt;\r
789 //printf("x: %d\n", poopoffset);\r
790 #ifdef __DEBUG_RF__\r
791 if(dbg_pagedelayrendermap){ sprintf(global_temp_status_text, "%-3u", poopoffset); modexprint(mv->page, player[0].enti.x, player[0].enti.y-28-(poopoffset*8) , 1, 0, PALMAPDRAWW, 1, 1, global_temp_status_text); }\r
792 #endif\r
793         /* location in the map array */\r
794         i=ty * mv->map->width + tx;\r
795         /* We'll copy all of the columns in the screen,\r
796            i + 1 row above and one below */\r
797         for(    mv->dy=poopoffset;      mv->dy<(mv->page->sh+mv->dyThresh)/(poopoffset+1) && ty < mv->map->height;      mv->dy+=mv->map->tiles->tileHeight, ty++) {\r
798                 if(i>=0){\r
799                         mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, x, mv->dy);\r
800                         for(z=1;z<=2;z++)\r
801                                 if(mv->map->layerdata[z].data[i]){\r
802                                         sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2);\r
803                                         //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, x, mv->dy);\r
804                                 }\r
805                 }\r
806                 i += mv->map->width;\r
807         }\r
808 #ifdef __DEBUG_RF__\r
809 if(dbg_pagedelayrendermap) DBG_RFDELAYMETHOD;\r
810 #endif\r
811 }\r
812 \r
813 void mapDrawWRow(map_view_t *mv, int tx, int ty, word y)\r
814 {\r
815         int i; nibble z;\r
816 \r
817         /* the position within the map array */\r
818         i=ty * mv->map->width + tx;\r
819         for(mv->dx=0; mv->dx<mv->page->sw+mv->dxThresh && tx < mv->map->width; mv->dx+=mv->map->tiles->tileWidth, tx++) {\r
820                 if(i>=0){       /* we are in the map, so copy! */\r
821                         mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, mv->dx, y);\r
822                         for(z=1;z<=2;z++)\r
823                                 if(mv->map->layerdata[z].data[i]){\r
824                                         sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, mv->dx, y, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2);\r
825                                         //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, mv->dx, y);\r
826                                 }\r
827                 }\r
828                 i++; /* next! */\r
829         }\r
830 }\r
831 \r
832 void mapDrawWCol(map_view_t *mv, int tx, int ty, word x)\r
833 {\r
834         int i; nibble z;\r
835 \r
836         /* location in the map array */\r
837         i=ty * mv->map->width + tx;\r
838 \r
839         /* We'll copy all of the columns in the screen,\r
840            i + 1 row above and one below */\r
841         for(mv->dy=0; mv->dy<mv->page->sh+mv->dyThresh && ty < mv->map->height; mv->dy+=mv->map->tiles->tileHeight, ty++) {\r
842                 if(i>=0){       /* we are in the map, so copy away! */\r
843                         mapDrawTile(mv->map->tiles, mv->map->layerdata[0].data[i], mv->page, x, mv->dy);\r
844                         for(z=1;z<=2;z++)\r
845                                 if(mv->map->layerdata[z].data[i]){\r
846                                         sprintf(global_temp_status_text2, "%u", mv->map->layerdata[z].data[i]); modexprint(mv->page, x, mv->dy, 1, 0, PALMAPDRAWW, z+2, 1, global_temp_status_text2);\r
847                                         //mapDrawTile(mv->map->tiles, mv->map->layerdata[z].data[i], mv->page, x, mv->dy);\r
848                                 }\r
849                 }\r
850                 i += mv->map->width;\r
851         }\r
852 }\r
853 \r
854 \r
855 /*      sync    */\r
856 void shinku(global_game_variables_t *gv)\r
857 {\r
858 #ifdef SHOWFPS\r
859         word x = gv->video.page[/*!*/(gv->video.p)].dx; //(gv->video.page[(gv->video.p)].tlx) - // follow the screen\r
860         word y = gv->video.page[/*!*/(gv->video.p)].dy; //(gv->video.page[(gv->video.p)].tly) - // follow the screen\r
861         word col = 2, bgcol = 1, type = 1;//w = 64, h = 8,\r
862 #endif\r
863         if(elapsed_timer(gv) >= (1.0 / gv->kurokku.frames_per_second))\r
864         {\r
865 #ifdef SHOWFPS\r
866         // NTS: For some bizarre reason, gv->pee is not initialized, but the pointer is not NULL even\r
867         //      though it should be. Instead it's NULL as a neAr pointer but contains a non-null\r
868         //      segment value, so testing against NULL doesn't work. It is initialized properly if\r
869         //      you call start_timer() though which uses neAr mAlloc. Rather than fight with that,\r
870         //      I decided it would be better to declare a temp buffer statically and sprintf to that.\r
871         //\r
872         //      This fixes *** Null pointer assignment detected error message in ZCROLL.EXE on exit.\r
873                 sprintf(global_temp_status_text, "%.0f fps", (double)gv->kurokku.tiku/ticktock(gv));\r
874                 //modexprint(&(gv->video.page[/*!*/(gv->video.p)]), x, y, type, 1, col, bgcol, global_temp_status_text);\r
875                 if(gv->kurokku.wcpu)\r
876                 {\r
877                         modexCopyPageRegion(&gv->video.page[0], &gv->video.page[1],\r
878                                 gv->video.page[/*!*/(gv->video.p)].dx,\r
879                                 gv->video.page[/*!*/(gv->video.p)].dy,\r
880                                 gv->video.page[/*!*/(gv->video.p)].dx,\r
881                                 gv->video.page[/*!*/(gv->video.p)].dy,\r
882                                 96, 16);\r
883                         modexprint(&(gv->video.page[/*!*/(gv->video.p)]), x, y, type, 1, col, bgcol, 1, global_temp_status_text);\r
884 //0000printf("dx=%u     dy=%u\n", gv->video.page[/*!*/(gv->video.p)].dx, gv->video.page[/*!*/(gv->video.p)].dy);\r
885                 }\r
886 #endif\r
887                 gv->kurokku.tiku=0;\r
888         }else //copy dat sheet\r
889         gv->kurokku.tiku++;\r
890 \r
891         //render!!\r
892         if(gv->video.dorender)\r
893         {//r=1\r
894                 /*if(video->bgp s)\r
895                 {\r
896                         modexCopyPageRegion(&(gv->video.page[ ]), &(gv->video.page[ ]), 0, 0, 0, 0, gv->video.page[ ].width, gv->video.page[ ].height);\r
897                 }else{\r
898                         //modexCopyPageRegion(&video->page[0], &video->page[1], enti->x, enti->y, 0, 0, 24, 32);\r
899                 }*/\r
900 #ifndef OLDWALKSHOWPAGESTUFF\r
901                 VL_ShowPage(&(gv->video.page[gv->video.sp]), gv->kurokku.fpscap, 0);\r
902 #endif\r
903                 gv->video.dorender =!gv->video.dorender;\r
904                 //0000gv->video.tickclk = ((*clockw)-gv->video.startclk)/18.2;\r
905         }\r
906 \r
907         switch(gv->kurokku.fpscap)\r
908         {\r
909                 case 0: //turn this off if XT\r
910                         //modexprint(&(gv->video.page[0]), x, y+8, type, 1, col, bgcol, "sanic!");\r
911                         gv->kurokku.frames_per_second=1;\r
912                 break;\r
913                 case 1:\r
914 //#ifndef OLDWALKSHOWPAGESTUFF\r
915                         //vga_wait_for_vsync();\r
916                         vga_wait_for_vsync_end();\r
917 //#else\r
918                         //modexWaitBorder();\r
919 //#endif\r
920                         gv->kurokku.frames_per_second=FPSVALUE;\r
921                 break;\r
922         }\r
923         PM_NextFrame(gv);\r
924 }\r
925 \r
926 void near ZC_animatePlayer(map_view_t *pip, player_t *player, word pn)\r
927 {\r
928         sword x = player[pn].enti.x;\r
929         sword y = player[pn].enti.y;\r
930         sword qq,dd; //scroll offset\r
931         player[pn].enti.dire=10; //direction\r
932 \r
933         switch(player[pn].walktype)\r
934         {\r
935                 case 0:\r
936                         dd = 0;\r
937                         qq = 0;\r
938                 break;\r
939                 case 1:\r
940                         dd = 1;\r
941                         qq = 0;\r
942                 break;\r
943                 case 2:\r
944                         dd = 1;\r
945                         qq = player[pn].enti.q*player[pn].enti.spt;\r
946                 break;\r
947         }\r
948         x-=4;\r
949         y-=pip[0].map->tiles->tileHeight;\r
950         switch (player[pn].enti.d)\r
951         {\r
952                 case 0:\r
953                         //up\r
954                         player[pn].enti.dire*=player[pn].enti.d+1;\r
955                         y-=qq;\r
956                 break;\r
957                 case 3:\r
958                         // right\r
959                         player[pn].enti.dire*=(player[pn].enti.d-1);\r
960                         x+=qq;\r
961                 break;\r
962                 case 2:\r
963                 break;\r
964                 case 4:\r
965                         //down\r
966                         player[pn].enti.dire*=(player[pn].enti.d-1);\r
967                         y+=qq;\r
968                 break;\r
969                 case 1:\r
970                         //left\r
971                         player[pn].enti.dire*=(player[pn].enti.d+3);\r
972                         x-=qq;\r
973                 break;\r
974         }\r
975         player[pn].enti.dire+=dd;\r
976         //setting xy position\r
977         player[pn].enti.spri.x = x;\r
978         player[pn].enti.spri.y = y;\r
979 \r
980         if((player[pn].enti.q==1 && player[pn].enti.pred != player[pn].enti.d) || !dd)//when dir changed OR when player change face direction\r
981         {\r
982                 //0000printf("  q=%u    pred=%u d=%u    dd=%u\n", player[pn].enti.q, player[pn].enti.pred, player[pn].enti.d, dd);\r
983                 set_anim_by_id(&player[pn].enti.spri, player[pn].enti.dire); //pip->video->sprifilei = set_anim_by_id(player[pn].enti.spri, player[pn].enti.dire);      if(pip->video->sprifilei == -1){ printf("ERROR! %u\n", player[pn].enti.dire); return; }\r
984                 player[pn].enti.pred = player[pn].enti.d;\r
985                 if(!dd)//changed direction while NOT moving!\r
986                 {\r
987                         modexCopyPageRegion(pip[0].page, pip[1].page, x-4, y-4, x-4, y-4, 28, 40);\r
988                         animate_spri(&player[pn].enti, pip[0].video);\r
989                 }\r
990         }\r
991 \r
992         if(pip[0].video->vga_state.bgps && dd)//if moving wwww\r
993         {\r
994                 modexCopyPageRegion(pip[0].page, pip[1].page, x-4, y-4, x-4, y-4, 28, 40);\r
995 \r
996                 //draw sprite\r
997                 animate_spri(&player[pn].enti, pip[0].video);\r
998         }\r
999 //0000if(player[pn].enti.q<4) delay(200);\r
1000 #ifdef OLDWALKSHOWPAGESTUFF\r
1001         modexWaitBorder();\r
1002 #endif\r
1003 }\r
1004 \r
1005 /*\r
1006  * from zcroll16.c\r
1007 */\r
1008 \r
1009 boolean boundary_check(int x, int y, int dx, int dy, int h, int w)\r
1010 {\r
1011         return (dx > 0 && (x + dx) < w) || (dx < 0 && (x + dx) >= 0) || (dy > 0 && (y + dy) < h) || (dy < 0 && (y + dy) >= 0) || (dx == dy && dx == 0);\r
1012 }\r
1013 \r
1014 boolean coll_check(int x, int y, int dx, int dy, map_view_t *map_v)\r
1015 {\r
1016         // Assume everything crosses at most 1 tile at once\r
1017         return dx && 1;//crossable_tile(x + dx, map_v) || dy && crossable_tile(y + dy, map_v);\r
1018 }\r
1019 \r
1020 boolean ZC_walk2(entity_t *enti, map_view_t *map_v)\r
1021 {\r
1022         //return 1;\r
1023         int dx = 1;\r
1024         int dy = 1;\r
1025         switch(enti->d)\r
1026         {\r
1027                 case 2:\r
1028                         return 0;\r
1029                 case 1:\r
1030                         dx = -dx;\r
1031                 case 3:\r
1032                         dy = 0;\r
1033                         break;\r
1034                 case 0:\r
1035                         dy = -dy;\r
1036                 case 4:\r
1037                         dx = 0;\r
1038                         break;\r
1039         }\r
1040         if(coll_check(enti->x, enti->y, dx, dy,  map_v))\r
1041         {\r
1042                 // Allow movement\r
1043                 // Set speed\r
1044                 // Start animation\r
1045                 // Mark next tile as occupied\r
1046                 // Mark this tile as vacant\r
1047                 return 1;\r
1048         }\r
1049         return 0;\r
1050 }\r
1051 \r
1052 void player_walk(player_t *player, map_view_t *map_v){\r
1053         int dx=16, dy=16;\r
1054         if(ZC_walk2(&(player->enti), map_v) && boundary_check(map_v->tx, map_v->ty, dx, dy, map_v->map->width - 2*map_v->page->ti.tilesw, map_v->map->height - 2*map_v->page->ti.tilesh))\r
1055         {\r
1056                 mapScroll(map_v, player);\r
1057                 // (Un)load stuff?\r
1058         }\r
1059 }\r
1060 \r
1061 /*\r
1062  *      end\r
1063  */\r
1064 \r
1065 \r
1066 void mapScroll(map_view_t *mv, player_t *player)\r
1067 {\r
1068         //word x, y;  /* coordinate for drawing */\r
1069         int c = 1;\r
1070         int delta;\r
1071         mv->delta += player->dx | player->dy;\r
1072         delta = mv->delta;\r
1073         mv->d = (player->dx) ? (player->dx > 0) ? 3 : 1 : (player->dy) ? (player->dy > 0) ? 4 : 0 : 2;\r
1074         switch(mv->d){\r
1075                 case 4:\r
1076                         c = -1;\r
1077                         delta = -delta;\r
1078                 case 0:\r
1079                         if(!(delta + mv->dxThresh))\r
1080                         {\r
1081                                 mv->delta = 0;\r
1082                                 mv->ty += c;\r
1083                         }\r
1084                         break;\r
1085                 case 3:\r
1086                         c = -1;\r
1087                         delta = -delta;\r
1088                 case 1:\r
1089                         if(!(delta + mv->dyThresh))\r
1090                         {\r
1091                                 mv->delta = 0;\r
1092                                 mv->tx += c;\r
1093                         }\r
1094                         break;\r
1095                 default:\r
1096                         break;\r
1097         }\r
1098 }\r
1099 \r
1100 void ZC_GirdChk (global_game_variables_t *gvar, player_t *player)\r
1101 {\r
1102         if((player->enti.q==1) &&\r
1103                 !(player->enti.x%gvar->mv[0].map->tiles->tileWidth==0 && player->enti.y%gvar->mv[0].map->tiles->tileHeight==0))\r
1104                 ZC_PlayerXYpos(0, 0, player, gvar->mv, 1);\r
1105                 //TODO: MAKE SURE TO RESYNC PLAYER IN WALKABLE SPOT\r
1106 }\r