From 9da109784b07c519b919cb0def22009ba796e727 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Mon, 23 Mar 2015 12:21:36 -0500 Subject: [PATCH] FINALLY I CAN READ MAP FILES AND LOAD VALUES OFF OF THEM AND SUCH! code is a bit messy but it works~ ^^ modified: README modified: scroll.exe modified: src/lib/jsmn/example/MAPTEST2.EXE modified: src/lib/jsmn/example/maptest2 modified: src/lib/jsmn/example/maptest2.c modified: src/lib/lib_head.h new file: src/lib/mapread.c new file: src/lib/mapread.h modified: src/scroll.c --- README | 5 +- scroll.exe | Bin 51279 -> 59274 bytes src/lib/jsmn/example/MAPTEST2.EXE | Bin 14072 -> 15196 bytes src/lib/jsmn/example/maptest2 | Bin 10280 -> 10845 bytes src/lib/jsmn/example/maptest2.c | 84 +++++++++++++----- src/lib/lib_head.h | 2 +- src/lib/mapread.c | 142 ++++++++++++++++++++++++++++++ src/lib/mapread.h | 30 +++++++ src/scroll.c | 40 ++++----- 9 files changed, 258 insertions(+), 45 deletions(-) create mode 100644 src/lib/mapread.c create mode 100644 src/lib/mapread.h diff --git a/README b/README index 975e8913..e7b058c5 100644 --- a/README +++ b/README @@ -2,6 +2,7 @@ Open watcom to compile the code of project 16 / = copy of pngwen's code 16/ = the current code sparky4 is working with 16/modex16/ = pngwen's code archived +src/ = source of project~ TODO not in particular order~: DONE 1. SCROLLING!!!!!!! @@ -11,7 +12,7 @@ DONE 4. movement and player movement when reaching edge of map DONE 5. sprite rendering 6. text box rendering 7. text rendering -8. map loading +DONE! YAY! 8. map loading 9. map rendering~ 10. map and item interation 11. item inventory~ @@ -21,7 +22,7 @@ DONE 5. sprite rendering DONE 15. 8088 detection to turn off vsync! 16. (very important!) optoimize draw row and draw col -17. merge map system and interperator from verge 2 +not needed ... really... 17. merge map system and interperator from verge 2 18. save feature! 19. (also important) interperator! and possibly custom map system 20. (also important) lua scripting system! diff --git a/scroll.exe b/scroll.exe index fb9baa11cd93e38102e8be5321ba2e8beaf6020d..bd790fef504bb6c2264cea72ba06782fcbccdcf8 100644 GIT binary patch delta 28967 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 diff --git a/src/lib/jsmn/example/MAPTEST2.EXE b/src/lib/jsmn/example/MAPTEST2.EXE index af8cb79d15f86e3094b4cd0047a84c6da54fcec5..df045463757b24b4e9c512b18318774448d3465b 100644 GIT binary patch delta 4710 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 Vl-x8+eQ%8PtWSdal>KIe{ue6m2>k#6 delta 3617 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 literal 10280 zcmb_i4{%h+dEb)`IIz$iSaxJX<1-dUq;MdtQ2yApgmi#0U|Aqim%!sBoj76Xblkm1 zP>d|dlWbqkvNg8rG?}Eu(}|rX_6#%ixQy#M!UD_AbXvt>QqPo*$yBCy(KS_o*yl#^ z_4nJocY1e*8N1Vkz1`pUef#aV-+sGq-&^(jw{Lbh9KuQ^qErwa7<9U7Q69ZRacYHE zxJ0%1vREW$gG65KamXOc252-3G$(Q?dBC+Nz(>9jn3+84W|oOtfm zm%u}AM1$?f?3er!6lut(!DCJWGn3Cgn72ZHEBa<`1ZK8)O&{v*r*0DB)L%GV%w6Cy zTl@#X2mDN;esnKZb#=C`>S|xv)fqO9`eHr4HL5Ln9NU(iE%;S-vW*v+x+{?B8}cu` zczEQQn`?r9Z6;dwP5kr+f4|_ac8<%9OdZk}-jXG#O4_>1iN&wn{~sg7_N3duLex8o zaCZ@2SA_qp2oKq?7xg+Drv68YaI6U5T7*{@;VnhDx(IuVum)W9w@w%Rw?Nz?Zb11@ z&srGX!d$d*4%Q0oz6Z3J-rgD3j99Q;bo4}mVG+}#;kNFGDkHrjV(4w5KvYD7fv&Ee zHqyHwrfI=wG~A{l{41CA}=*AF|7}A*r^eTIf_sv@hOQpnvj?Hq{JLm zsG4|KVva6E$ES`<%u$B83{nw^IoePi@d1fB>d;o=CW$%vP!n;T#PmXl%OWBy%OSpQXb%%|Jon_l{qohw7WTU3UM2%!_R|zLjN<2eX9ooS38F7{}PLEKA7?1m>6aMM3Iu{yeQA;$r@EdP(N-6>mvE`qBcNB`LqopkFk)=n9fKU-<3)fhk zl-)-`Gc9EVbf=z{3ShnL&Hb8izd2%NyzYVTfPqT?O=f29u|GC5^W0AjNYZ@0e{zwT z*`OcAPyZYynu6Jl?5#aM%;tVXfWv*Hv1}sQ6c4qn&1`cf)+9PVAiP28WmZ?m3#)u&9h~3 zf5z;~2*aK4l#ZONmW`XT#`GbPH8RP6l+wyA1uCUyXB?Kvb*d~)oyGzuB|qLL{2w3h z`*?}bDovaxtxCNKsTspQ`9sdIDYI`%&>K{W5zw&IGdYcd^Pe$C9L-IKO0&jPa*?u7 zY3za&`uVzhaJeN9QTWVlR$2tRJM;E&c9ToY%r5uiAJFg4!Evm;?8Sm%jrphP%~YHc z_R-zFs(3cnKf0$-qOMqC^P{ze5(kPUIv$@Yi8!V2U;MCO8){gIoHfM+>ien?9{!Iie|ubHSE2 z`_jUgr-E!l&ip!TpjrJEj-<|&+jA-$|is!$Ng#a zg8h-UZIo4-X{=@y`@)nyPi-7JbU{ykZ^W*FML;uPmkV1`w~QLmdlIpe#n@$V{V7^a ze)al2-aOOe4YaZao2^~hxzqrLVtLq;HOjc#{HyeHMckh>`;wv;J8m*{p0kFDkzX>t^PzMOo3iz=9fR4q2;@oJ7K^#3ETW){ zek?Win`wlJC;6?9IC@X~3^{x*m%*pY--?f~KVxhtrpXfk_>^`z-Z9h8X6R^2zM_;2 zj$l=>U#uz^srD!wJ1fjS4_7)_sXOHwffbNmuey`#)PYq}me^`pa3(I*H-)@-^-CW6 zowQOe+0=xL#@skQkBX&KvEHuYg&7qN_u#+5F1X{+yyUA&Xv{xFTgUuYS)^W&^)%~~ z3n(}@nNWhJKaItd-srD5_MZuV1y4)ZNm@M1F_nBy7(FyN z{y{d|lpM$E!yF|16PO;*o09u1F}YV7)yX$NNO)e52YLi~XeX34C66ev(|A^i)b|lW zS>s|zz@S5pp}`AM_m#_1ciex$?7JX(tCP_gO;{@zLakEMikv3s5UFPTQrf67`>qN+ zOF$HT3CjX?n5#}sfnXoY zGtz<|=TynDjHAPZ|3YF1VmIyh8P;`EZa~e+GfEI_hd&K(WsQlfk<1!tbY^+<@W&jr z*BbRsj3#UJ{yaEg`Ix39lb3#*bB=QJ(qzjuO>^5!n_M@UNDQ8bZx0FT;0RxmPc{z* z3@bt}(J^0Fni0p+qwPE`?U;UdC@?Kw(}r8VR+HVcE9r;k6Qe`;sAQ%WC%URu5B*&k z)=KhMQ`zj0$rqaCZ=d+0bj8g+yc3y7-E!cw?0d)moI!>~sG>L37Np{$t|< z^X%fi`?YB?yCeft+M?8N9I_Q)4(dYj)3-j6$7?|#Aje`)hY`}qHszn;y- z^kQ6WM={^REU!G_bS?FLB_@{fcbVAW6?0dLsPOq#<^Q(_^uQ`T7}I^-fk^JFQT6f- zUimrco~7;c)JG$dmbS0B7TE{~k4A!Rda&K=e_-=G>&sN3lD+ewY9Hr#QRzm0Tqr{x z`As&<_tc*t$bN*y(^%#ZTRgK$4AI~&HIB_L z^_759f3ATZ5n>&(4*8cc9|6>rP4(qvkC!%-dmeMvmsgmxc9yR$*;-yvKU(gof4jV_ zeyrS8f3Do=f%qx3y@D~{@th9o+t4g9iI%v$hYvV5#=dhd>Ry|koirP{bMhZiF?ue`07SGBFK!R1<3eh zFV34z7wczH@_RDd@os8PFxKahUqpTl`EBH1 zB40xO2zfT{I&Mb36L~H2X5>A{R{Jdt4I8}GjltH=K-gRBTkoq`S+jn*s)-`zI$!O| z8uCyP!WZl9)&s35^{6UCRt=w!gVBiag?sd%uYS{gEA_y^96A^_e62<&ZWub-g^wr{ zh=qi&y*CVfs?@O!k#i&%jq!W69cbW1gI$zYl}MK^e4XJ={OZA@`0W4ytB1Rn@C8F! zM>NnK)I#lOX(81@3q+%VUe&^?A8Labln1&y+t6_j6ynDxdr=x&V=>`t>*?+ehIPw} zg(dHWNKv;<>aIp%6}_Q6pV1@)<4^G!kt+TaW>l)URG86;xXZ;&so;lgAsAOIOJ$^~ z_){1kx{(-{3NxzJ`cRnB4Sk3cg}Hi!ydP7Tt4OUQh4Dcg=^d;qg?Xa`dvTahm=TZt z^LYz%HK_H+vQ%(YsP)IPRIUzu%g@DgX>M1x;=44r>UamBfeF>+2UkweUym#!UsHV!}Y+{o19KlIrkz$|e_sOO!gnlt7Ko+5c7Is1EGf@^ zt?>!izX{lyF9+u9eqd{S#2@UDO>VIl0{M;I%4Q8@`b41aSaEG(HX zUIVt~*DET;8Jj$#=@-D9Z_4uy?ZX@f#Qs|;(!hKU5HA$v;&M@Yr&^L^gO7b4xZ>M* zen27Z^A_>%D#CtX%RctkY~y>OF97V##p8mKN)ZOO-|_X?umE^XD zW^Ma@yLM}uz+GnWU}p>u9!>Ao+PZqe!5Ge)pCM^ldyjUotEV;4rM2rl(U=x6jtcDO zk**-lslK&q{$xEgUqeXalSMrzH0=G+UL1e&=1F=D%sv$B z4r}rXR?~YP#s#e;baZxg*>NNgjRiGa$98w>okxO7ND=Xv?F=6T1!Fuc(0v5GZ*H#N z;n(~-8{rG(7^_}jOS{k-AKF>Juwjs|*rcc8T^2-&0S*7^FDKW%5rt7g6W+xsOVxFyjYJG z3WVD^n!;;$b)jCUspy{E&dgn=+etQ8()sEle@39jy2GC#triG2%v#YUzFh!jh1(*% zc2dsS(lN3lts|m^z5z8jzT}wdT7TOStvRs@VM?t~;#^zHs9>gLuicS? zUS(HYs-G+IOwR3?Tax^H8UUV`tz>Q0cYwf?4&~(Ey@26G-Adexm}-zMIi9ij9#|zg z>c^661jM)39_r)S>&cv)I&G=<0?O`0<_U>%d?(;LhzFUcFck9rfhV3l$lSIl$9ISk zR8FC8CCW1GN9OsTay-Lv?^}Yp)i3GH45}Locuc|yu5W;LMSb{S8Z}Uvo6N*^6WMAy$Ly*4Y$d&4gY@2(g9Mw{xj5hBBmVA zNE6qQ`z847hH^Y>C9fmLFYKHP%JGcFzY9y|XeeaAoZks#OCQh5=Wz@!wvRYvljE7} zeaJO}W+lonUq-g{@ocjghhq5v&IwY6DT7Qp?c*7s>N;|N0H69+BQsHMy{gJz@|gLy wKwVba2f5i~Y;Vxv_$Jk=b+x4BlO^Cm-5iEWG3#a=kxc~qF diff --git a/src/lib/jsmn/example/maptest2.c b/src/lib/jsmn/example/maptest2.c index 8d4fec24..017fbf85 100644 --- a/src/lib/jsmn/example/maptest2.c +++ b/src/lib/jsmn/example/maptest2.c @@ -3,11 +3,30 @@ #include #include #include "../jsmn.c" +#include "../../../lib/types.h" /* * An example of reading JSON from stdin and printing its content to stdout. * The output looks like YAML, but I'm not sure if it's really compatible. - */ + */ + +char *js_sv; + +typedef struct { + //bitmap_t *data; + byte *data; + word tileHeight; + word tileWidth; + unsigned int rows; + unsigned int cols; +} tiles_t; + +typedef struct { + byte *data; + tiles_t *tiles; + int width; + int height; +} map_t; static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start && @@ -17,47 +36,63 @@ static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { return -1; } -static int dump(const char *js, jsmntok_t *t, size_t count, int indent) { +static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map) { int i, j, k; if (count == 0) { return 0; } + /* We may want to do strtol() here to get numeric value */ if (t->type == JSMN_PRIMITIVE) { - printf("%.*s", t->end - t->start, js+t->start); + if(js_sv == "height") + { + map->height = (int)strtol(js+t->start, (char **)js+t->end, 10); + printf("h:[%d]\n", map->height); + }else if(js_sv == "width") + { + map->width = (int)strtol(js+t->start, (char **)js+t->end, 10); + printf("w:[%d]\n", map->width); + } return 1; + /* We may use strndup() to fetch string value */ } else if (t->type == JSMN_STRING) { - printf("'%.*s'", t->end - t->start, js+t->start); - /*if (jsoneq(js, t, "image") == 0) { - printf("- image: %.*s\n", t->end-t->start, - js + t->start); - }*/ + //printf("'%.*s'", t->end - t->start, js+t->start); + if (jsoneq(js, t, "height") == 0 && indent==1) + { + js_sv="height";//strdup(js+t->start);//, t->end - t->start); + printf("%s\n", js_sv); + }else if (jsoneq(js, t, "width") == 0 && indent==1) + { + js_sv="width";//strdup(js+t->start);//, t->end - t->start); + printf("%s\n", js_sv); + }else js_sv=NULL; return 1; } else if (t->type == JSMN_OBJECT) { - printf("\n"); + //printf("\n"); j = 0; for (i = 0; i < t->size; i++) { //for (k = 0; k < indent; k++) printf("\t"); - j += dump(js, t+1+j, count-j, indent+1); - printf(": "); - j += dump(js, t+1+j, count-j, indent+1); - printf("\n"); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf(": "); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf("\n"); } return j+1; } else if (t->type == JSMN_ARRAY) { j = 0; - printf("\n"); + //printf("==\n"); for (i = 0; i < t->size; i++) { //for (k = 0; k < indent-1; k++) printf("\t"); - printf("\t-"); - j += dump(js, t+1+j, count-j, indent+1); - printf("\n"); + //printf("\t-"); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf("==\n"); } return j+1; } return 0; } -int main() { +int loadmap(char *mn, map_t *map) +{ int r; int eof_expected = 0; char *js = NULL; @@ -68,7 +103,7 @@ int main() { jsmntok_t *tok; size_t tokcount = 2; - FILE *fh = fopen("../../../../data/test.map", "r"); + FILE *fh = fopen(mn, "r"); /* Prepare parser */ jsmn_init(&p); @@ -117,12 +152,19 @@ again: goto again; } } else { - dump(js, tok, p.toknext, 0); + dump(js, tok, p.toknext, 0, map); //fprintf(stdout, "[[[[%d]]]]\n", sizeof(tok)); - printf("[\n%d\n]", jslen); + //printf("[\n%d\n]", jslen); eof_expected = 1; } } return 0; } + +int main() +{ + map_t map; + loadmap("../../../../data/test.map", &map); + return 0; +} diff --git a/src/lib/lib_head.h b/src/lib/lib_head.h index 560ea8ad..dcd85470 100644 --- a/src/lib/lib_head.h +++ b/src/lib/lib_head.h @@ -4,7 +4,7 @@ #include #include // just for wait #include // just for wait -#include "src\lib\types.h" +#include "src/lib/types.h" /* Control codes for all keys on the keyboard */ //here temperarly diff --git a/src/lib/mapread.c b/src/lib/mapread.c new file mode 100644 index 00000000..3e2f96e9 --- /dev/null +++ b/src/lib/mapread.c @@ -0,0 +1,142 @@ +#include "src/lib/mapread.h" + +static int jsoneq(const char *json, jsmntok_t *tok, const char *s) { + if (tok->type == JSMN_STRING && (int) strlen(s) == tok->end - tok->start && + strncmp(json + tok->start, s, tok->end - tok->start) == 0) { + return 0; + } + return -1; +} + +static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map) { + int i, j, k; + if (count == 0) { + return 0; + } + /* We may want to do strtol() here to get numeric value */ + if (t->type == JSMN_PRIMITIVE) { + if(js_sv == "height") + { + map->height = (int)strtol(js+t->start, (char **)js+t->end, 10); + printf("h:[%d]\n", map->height); + }else if(js_sv == "width") + { + map->width = (int)strtol(js+t->start, (char **)js+t->end, 10); + printf("w:[%d]\n", map->width); + } + return 1; + /* We may use strndup() to fetch string value */ + } else if (t->type == JSMN_STRING) { + //printf("'%.*s'", t->end - t->start, js+t->start); + if (jsoneq(js, t, "height") == 0 && indent==1) + { + js_sv="height";//strdup(js+t->start);//, t->end - t->start); + printf("%s\n", js_sv); + }else if (jsoneq(js, t, "width") == 0 && indent==1) + { + js_sv="width";//strdup(js+t->start);//, t->end - t->start); + printf("%s\n", js_sv); + }else js_sv=NULL; + return 1; + } else if (t->type == JSMN_OBJECT) { + //printf("\n"); + j = 0; + for (i = 0; i < t->size; i++) { + //for (k = 0; k < indent; k++) printf("\t"); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf(": "); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf("\n"); + } + return j+1; + } else if (t->type == JSMN_ARRAY) { + j = 0; + //printf("==\n"); + for (i = 0; i < t->size; i++) { + //for (k = 0; k < indent-1; k++) printf("\t"); + //printf("\t-"); + j += dump(js, t+1+j, count-j, indent+1, map); + //printf("==\n"); + } + return j+1; + } + return 0; +} + +int loadmap(char *mn, map_t *map) +{ + int r; + int eof_expected = 0; + char *js = NULL; + size_t jslen = 0; + char buf[BUFSIZ]; + + jsmn_parser p; + jsmntok_t *tok; + size_t tokcount = 2; + + FILE *fh = fopen(mn, "r"); + + /* Prepare parser */ + jsmn_init(&p); + + /* Allocate some tokens as a start */ + tok = malloc(sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "malloc(): errno=%d\n", errno); + return 3; + } + + for (;;) { + /* Read another chunk */ + r = fread(buf, 1, sizeof(buf), fh); + if (r < 0) { + fprintf(stderr, "fread(): %d, errno=%d\n", r, errno); + return 1; + } + if (r == 0) { + if (eof_expected != 0) { + return 0; + } else { + fprintf(stderr, "fread(): unexpected EOF\n"); + return 2; + } + } + + js = realloc(js, jslen + r + 1); + if (js == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + strncpy(js + jslen, buf, r); + jslen = jslen + r; + +again: + r = jsmn_parse(&p, js, jslen, tok, tokcount); + if (r < 0) { + if (r == JSMN_ERROR_NOMEM) { + tokcount = tokcount * 2; + tok = realloc(tok, sizeof(*tok) * tokcount); + if (tok == NULL) { + fprintf(stderr, "realloc(): errno=%d\n", errno); + return 3; + } + goto again; + } + } else { + dump(js, tok, p.toknext, 0, map); + //fprintf(stdout, "[[[[%d]]]]\n", sizeof(tok)); + //printf("[\n%d\n]", jslen); + eof_expected = 1; + } + } + + return 0; +} + +/*int main() +{ + map_t map; + loadmap("../../../../data/test.map", &map); + return 0; +}*/ diff --git a/src/lib/mapread.h b/src/lib/mapread.h new file mode 100644 index 00000000..ac210743 --- /dev/null +++ b/src/lib/mapread.h @@ -0,0 +1,30 @@ +#ifndef _LIBMAPREAD_H_ +#define _LIBMAPREAD_H_ +#include +#include +#include +#include "src/lib/jsmn/jsmn.c" +#include "src/lib/modex16.h" + +char *js_sv; + +typedef struct { + bitmap_t *data; + word tileHeight; + word tileWidth; + unsigned int rows; + unsigned int cols; +} tiles_t; + +typedef struct { + byte *data; + tiles_t *tiles; + int width; + int height; +} map_t; + +static int jsoneq(const char *json, jsmntok_t *tok, const char *s); +static int dump(const char *js, jsmntok_t *t, size_t count, int indent, /*char *js_sv,*/ map_t *map); +int loadmap(char *mn, map_t *map); + +#endif/*_LIBMAPREAD_H_*/ diff --git a/src/scroll.c b/src/scroll.c index 8f485f90..0d7d021d 100644 --- a/src/scroll.c +++ b/src/scroll.c @@ -1,16 +1,13 @@ -#include "src\lib\modex16.h" -#include -#include -#include -#include "src\lib\dos_kb.h" -#include "16\lib\x\modex.h" +#include "src\lib\dos_kb.h" +#include "src\lib\mapread.c" +//#include "16\lib\x\modex.h" #include "src\lib\wtest\wtest.c" -#include "src\lib\planar.c" +#include "src\lib\planar.c" //====#include "src\lib\ems.c" //word far *clock= (word far*) 0x046C; /* 18.2hz clock */ -typedef struct { +/*typedef struct { bitmap_t *data; word tileHeight; word tileWidth; @@ -24,7 +21,7 @@ typedef struct { tiles_t *tiles; int width; int height; -} map_t; +} map_t;*/ typedef struct { @@ -70,8 +67,8 @@ void animatePlayer(map_view_t *src, map_view_t *dest, /*map_view_t *top, */sword //#define LOOPMAX (TILEWH/SPEED) //place holder definitions -#define MAPX 200 -#define MAPY 150 +//#define MAPX 200 +//#define MAPY 150 #define TRIGGX 10 #define TRIGGY 9 @@ -120,8 +117,9 @@ void main() { exit(0); }*/ - /* create the map */ - map = allocMap(MAPX,MAPY); //20x15 is the resolution of the screen you can make maps smaller than 20x15 but the null space needs to be drawn properly + /* create the map */ + loadmap("data/test.map", &map); + map = allocMap(map.width,map.height); //20x15 is the resolution of the screen you can make maps smaller than 20x15 but the null space needs to be drawn properly //if(isEMS()) printf("%d tesuto\n", coretotalEMS()); initMap(&map); mv.map = ↦ @@ -242,7 +240,7 @@ void main() { //right movement if(npc0.d == 2) { - if(npc0.tx < MAPX && !(npc0.tx+1 == TRIGGX && npc0.ty == TRIGGY) && !(npc0.tx+1 == player.tx && npc0.ty == player.ty)) + if(npc0.tx < map.width && !(npc0.tx+1 == TRIGGX && npc0.ty == TRIGGY) && !(npc0.tx+1 == player.tx && npc0.ty == player.ty)) { if(npc0.q<=(TILEWH/SPEED)) { @@ -294,7 +292,7 @@ void main() { //down movement if(npc0.d == 3) { - if(npc0.ty < MAPY && !(npc0.tx == TRIGGX && npc0.ty+1 == TRIGGY) && !(npc0.tx == player.tx && npc0.ty == player.ty+1)) + if(npc0.ty < map.height && !(npc0.tx == TRIGGX && npc0.ty+1 == TRIGGY) && !(npc0.tx == player.tx && npc0.ty == player.ty+1)) { if(npc0.q<=(TILEWH/SPEED)) { @@ -352,7 +350,7 @@ void main() { 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 < MAPX && player.tx == bg->tx + 10 && !(player.tx+1 == TRIGGX && player.ty == TRIGGY)) + if(bg->tx >= 0 && bg->tx+20 < map.width && player.tx == bg->tx + 10 && !(player.tx+1 == TRIGGX && player.ty == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { @@ -366,7 +364,7 @@ void main() { player.q++; } else { player.q = 1; player.d = 0; player.tx++; } } - else if(player.tx < MAPX && !(player.tx+1 == TRIGGX && player.ty == TRIGGY)) + else if(player.tx < map.width && !(player.tx+1 == TRIGGX && player.ty == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { @@ -393,7 +391,7 @@ void main() { 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 <= MAPX && player.tx == bg->tx + 10 && !(player.tx-1 == TRIGGX && player.ty == TRIGGY)) + if(bg->tx > 0 && bg->tx+20 <= map.width && player.tx == bg->tx + 10 && !(player.tx-1 == TRIGGX && player.ty == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { @@ -434,7 +432,7 @@ void main() { 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 < MAPY && player.ty == bg->ty + 8 && !(player.tx == TRIGGX && player.ty+1 == TRIGGY)) + if(bg->ty >= 0 && bg->ty+15 < map.height && player.ty == bg->ty + 8 && !(player.tx == TRIGGX && player.ty+1 == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { @@ -448,7 +446,7 @@ void main() { player.q++; } else { player.q = 1; player.d = 0; player.ty++; } } - else if(player.ty < MAPY && !(player.tx == TRIGGX && player.ty+1 == TRIGGY)) + else if(player.ty < map.height && !(player.tx == TRIGGX && player.ty+1 == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { @@ -475,7 +473,7 @@ void main() { 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 <= MAPY && player.ty == bg->ty + 8 && !(player.tx == TRIGGX && player.ty-1 == TRIGGY)) + if(bg->ty > 0 && bg->ty+15 <= map.height && player.ty == bg->ty + 8 && !(player.tx == TRIGGX && player.ty-1 == TRIGGY)) { if(player.q<=(TILEWH/SPEED)) { -- 2.39.5