From d03215b6373268416dd879c8bb5b0b1f0c8e9309 Mon Sep 17 00:00:00 2001 From: sparky4 Date: Tue, 24 Jan 2017 15:21:06 -0600 Subject: [PATCH] animation fixed and sprite rendering is more flexible with overdraww and overdrawh --- data/spri/PRSBACW0.VRL | Bin 0 -> 438 bytes data/spri/PRSBACW1.VRL | Bin 0 -> 448 bytes data/spri/PRSBACW2.VRL | Bin 0 -> 441 bytes data/spri/PRSBFCW0.VRL | Bin 0 -> 496 bytes data/spri/PRSBFCW1.VRL | Bin 0 -> 491 bytes data/spri/PRSBFCW2.VRL | Bin 0 -> 485 bytes data/spri/PRSBLCW0.VRL | Bin 0 -> 441 bytes data/spri/PRSBLCW1.VRL | Bin 0 -> 448 bytes data/spri/PRSBLCW2.VRL | Bin 0 -> 437 bytes data/spri/PRSBRCW0.VRL | Bin 0 -> 490 bytes data/spri/PRSBRCW1.VRL | Bin 0 -> 494 bytes data/spri/PRSBRCW2.VRL | Bin 0 -> 492 bytes data/spri/ptmp.sht | 80 +++++++++++++++++++++++++++++++++++++++++ data/spri/ptmp.vrs | Bin 5867 -> 6215 bytes src/lib/16_enti.c | 2 ++ src/lib/16_sprit.c | 11 +++--- src/lib/16_tdef.h | 2 ++ src/zcroll.c | 4 +++ 18 files changed, 93 insertions(+), 6 deletions(-) create mode 100755 data/spri/PRSBACW0.VRL create mode 100755 data/spri/PRSBACW1.VRL create mode 100755 data/spri/PRSBACW2.VRL create mode 100755 data/spri/PRSBFCW0.VRL create mode 100755 data/spri/PRSBFCW1.VRL create mode 100755 data/spri/PRSBFCW2.VRL create mode 100755 data/spri/PRSBLCW0.VRL create mode 100755 data/spri/PRSBLCW1.VRL create mode 100755 data/spri/PRSBLCW2.VRL create mode 100755 data/spri/PRSBRCW0.VRL create mode 100755 data/spri/PRSBRCW1.VRL create mode 100755 data/spri/PRSBRCW2.VRL diff --git a/data/spri/PRSBACW0.VRL b/data/spri/PRSBACW0.VRL new file mode 100755 index 0000000000000000000000000000000000000000..2c93df941710e8159e19f574925b3229bbe647a6 GIT binary patch literal 438 zcmXw$&2qvp41^_n71?3Z;)0t?Q}<2WkDC$myzVqsx_njOlNvDUlrU?@|WoVKBI3rEQkk%^9} zl#(swWL@lj*gfzZdx#SQIa`dKQ-9l)gw{D{FB2GUnL7jh?-=AYc6-$V=NY7AiP-Tc z9d0^QLWSm>))rm;H$Y_|T_P6IEQMe2_?XUM_l{l|(mnZL+tNZCYIsOc>vpu*G#Y8_ N<8ZAj$oBDb{sDIhDdzwH literal 0 HcmV?d00001 diff --git a/data/spri/PRSBACW1.VRL b/data/spri/PRSBACW1.VRL new file mode 100755 index 0000000000000000000000000000000000000000..fb3c7cf277534bd9b782e44c646081e0b483c634 GIT binary patch literal 448 zcmXw0K~lpo43uOkvdo0Wl(ePkp4<8QLspNU>+4S zD7C!+GIM3+KtC+le?^%bt3Rhc4oJo&W5V4~{ZI5kYiH4gY MdTm^k=IuBA0U${y%K!iX literal 0 HcmV?d00001 diff --git a/data/spri/PRSBACW2.VRL b/data/spri/PRSBACW2.VRL new file mode 100755 index 0000000000000000000000000000000000000000..65fc4bf6043d003123de1daeea056a4447c34e15 GIT binary patch literal 441 zcmYk3OK!t33`9j~Xps)wMo5*Pv&a>Cgs!^js*9la$-&iO&;T`T(B$(BDf;&P^?v*O z__?NIdR*6$o_DSl=`c!V%wm>y!)l!?+_#?Em?toWoArHRc}it$CV(~bep>e>i{PGX zNtmXT$8kanGtaNPwO`KjEVN@G;7OO(7ABexm$f3${Ere6(>Zr@g+y;+fZ8)aM16HN zH>Enpc;dAnj2by-S1sWV^k^OO;GCblL6zrGA*!cN{ID-<29X7!x2-Gffwi*<&%7&) zBGLrhlB$&|Rr8*o1b$(BP!XqEX+k@KC8m@X)XcZpS;e^1oNMD#JiU&rd@0Piec2$r H{r#U`n#w1I literal 0 HcmV?d00001 diff --git a/data/spri/PRSBFCW0.VRL b/data/spri/PRSBFCW0.VRL new file mode 100755 index 0000000000000000000000000000000000000000..e2d1e1ffa12e2050f2b9295897295fcf7e78b430 GIT binary patch literal 496 zcmYL`%}xU`4211uTsvD9sV%!uex$wvkHCowCk_?wL*F}$Qv|D(HtYF3@g(QZkJt12 z+t*1RWIU%Xr(U*z9QtK~?7KCEd#;KB->Ov{P()E(N`;H{0}@d_0HQTjKQ3fg74&1J z!{jNm)GXY6T~bW-xgn9<^w@NE*8f(OZMhXwbzTBL(-ImIKB<_~tzy+*Y7H;~$o#3;@)u(y#R zQ?bO1wO=T{>WeZx?vY*RcjGBl0U7Z4JnONU{^FwtV807qqiYVJnYaC brSdAuxC)LjO)g8X&ZVrq@GJLut$cp~u@@&` literal 0 HcmV?d00001 diff --git a/data/spri/PRSBFCW1.VRL b/data/spri/PRSBFCW1.VRL new file mode 100755 index 0000000000000000000000000000000000000000..6473a1693700db775c10c0c415747934be47caa2 GIT binary patch literal 491 zcmYjOL2kn^43iuxvb|J8m0$U_aO1}MEKX2b( zzZW@5|1M1~Emc5X+g2bi&9cHhcB|_k4(L$Qpi4?{8QThMqN`w%TnwsyS}1U__Lg{Z z*Z6>9aqzCg5*3N@}a(T`CPQhlk}t zLbwFwIT+^q>$cf6FscK_pNb{S;M(7k3}@Nn?%a2h&cnt;7o z4*5N!-!pE&A~P7Wbn}2CQ*ZHLm?rKcdVY+j50A49mTR`17B!{Fp3S$RKM*)qZJF zHv}O5Bz;Sem{neeSc|&|H;JN9{^7OqJcl_j%m)nj+;2&aRI9Os0jn2ahIcrCpVBxC z$>6T;g9D4~DD``im4F|-l%jw7-9+3^8Qn)L!h6X5-v!TcV8ac-^DMH*+r$4+F?$Mr zS7|hhF_)MOl5j(d6Ruw-2$4tUMUfoZkjHGwG>#d&PRTLSwdHsYkXsB*96M0#04-t% SiekmyUVC<{MlBZk_`U&NBPYB7 literal 0 HcmV?d00001 diff --git a/data/spri/PRSBLCW0.VRL b/data/spri/PRSBLCW0.VRL new file mode 100755 index 0000000000000000000000000000000000000000..161753b422cfe0bd24bf715faf2e780ee746e63d GIT binary patch literal 441 zcmYk3!EVDK42A*Q0aLLCWu#5gLtbHzu+uI*?NIG~`rzz$DowM9Wc=B`vGe%8e>}cE ze|C3uhwa_%-JjUK_aNRAd1g2Dr+D^o5m9&Uh0U*aPf5q1F*@#VYyn^KscI6A%mCCU zf^!f?zDT0zql6jxhF3xwDhmowH!7OJw)Vmsan6xzErmrC0zSf)26=X&8^^uWYULsX zEue5}pMNVMxC4B2Wh8q@g7h(DkQ zx4CgH-CerR>}n_WJ_OI~Ui+OrBDNddp+8&N7mHJhF;P@?g0y9P!9{WrR%QU)kA%lS z*aRX$z5bwpGqe#{5YFI76Gpg0ni=$VqpHKV0J^(J!xof937 zt?uWX{U|@0e-g}+VO-zZ8VCy%0t$?K#)g0`QR+&V5G#xmyg4mN+)ED=h=g5Y%?N1% KWwRgj|NR1R+9%5Z literal 0 HcmV?d00001 diff --git a/data/spri/PRSBLCW2.VRL b/data/spri/PRSBLCW2.VRL new file mode 100755 index 0000000000000000000000000000000000000000..7872c41acf8413fc09b12af3f079487eeed5058a GIT binary patch literal 437 zcmX|8%TmKI43umsvfK&86gQ;lp})W2oQ*w|dVm44{ z#|VJq0;zkNG#cAC5+Dq%c6RqP2vgF8D3c!&kZY8jP0EN9Rre|NPHa%1+MUNx3K}6Y zMmT}GzX1N+JIGkd=$bsCQ>T_w*MnXZ)@3wF9%^!hxA0p3*iB2N5rc;LvUX{E(s~M5jijLw0CuCN7WdWq P7gQ=OKtyx@EC2T|wGSz9 literal 0 HcmV?d00001 diff --git a/data/spri/PRSBRCW0.VRL b/data/spri/PRSBRCW0.VRL new file mode 100755 index 0000000000000000000000000000000000000000..b0a21ae5600fafb752b324000d8bb2fdacf417d3 GIT binary patch literal 490 zcmYk3L2|<&3`HgQSct@}nc8k#yvP-Lgs!^js*6nTliZsM(wTiuC|+<4FkDa0CUK~adNNwoP^n4PR;gsAg;TINFGN(qkDeY z1e{=krg&s5H0f5#Y5!NW2=|jj~1a;008@C3ySzC=*I)?GhGiO_7A7b#K*I$hH&K6 zzaQMrUCyDnLxGCh7O#nJEEGy2yt;>?EyW%|)wdYDCtZ8}l%O%J5kWxaLBya?#=y*k zJ~kRjh{$M=RA?gEb%LnTZ-U?o*Sgj}3zIx?!i zf1HF!G=ed>u7oofthhd!OWuFqh7%Nk_5|}gC_i>u%-SUU9cVZr49=|orMKy8J zc!Iemtc6YZzfBkg<`XuE%^7d!oII>PSB;>dx!KXG0lL~g#HLvz{9f)y3pxff_mjoh U7Ue9gXknd|ZYYQ~L<`mKC(7(Avj6}9 literal 0 HcmV?d00001 diff --git a/data/spri/PRSBRCW2.VRL b/data/spri/PRSBRCW2.VRL new file mode 100755 index 0000000000000000000000000000000000000000..354fd6eb2bc3725e0d35aba6f8d84f565ab85d6e GIT binary patch literal 492 zcmY*WK~BRk5cJyPtnJniizYNpkopClz=;bd4i*0i|2AWn14LGAX=Z00gWH;Nd{V zi*1f`$s%L?dr{fF{TYq?}@#u|+_Mq1jlR2t5dU_~7sHOv2H6J_iQbCST#u5V%wA_ih3H?;?FcM@Udwo;xS#&j#N literal 0 HcmV?d00001 diff --git a/data/spri/ptmp.sht b/data/spri/ptmp.sht index 8d9e5761..0b2d3f96 100755 --- a/data/spri/ptmp.sht +++ b/data/spri/ptmp.sht @@ -71,3 +71,83 @@ wh=24,32 +PRSBACW2@42 xy=48,96 wh=24,32 + +# begin animation list section. must come after sprite sheet +*animation + +# Chikyuu, forward, standing and walking animation cycles ++PRSBFCW_STANDING@10 +sprite=PRSBFCW1 + ++PRSBFCW_WALKING@11 +sprite=PRSBFCW0 +delay=3 +-newframe +sprite=PRSBFCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" +-newframe +sprite=PRSBFCW2 +delay=3 +-newframe +sprite=PRSBFCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" + +# Chikyuu, left, standing and walking animation cycles ++PRSBLCW_STANDING@20 +sprite=PRSBLCW1 + ++PRSBLCW_WALKING@21 +sprite=PRSBLCW0 +delay=3 +-newframe +sprite=PRSBLCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" +-newframe +sprite=PRSBLCW2 +delay=3 +-newframe +sprite=PRSBLCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" + +# Chikyuu, right, standing and walking animation cycles ++PRSBRCW_STANDING@30 +sprite=PRSBRCW1 + ++PRSBRCW_WALKING@31 +sprite=PRSBRCW0 +delay=3 +-newframe +sprite=PRSBRCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" +-newframe +sprite=PRSBRCW2 +delay=3 +-newframe +sprite=PRSBRCW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" + +# Chikyuu, away, standing and walking animation cycles ++PRSBACW_STANDING@40 +sprite=PRSBACW1 + ++PRSBACW_WALKING@41 +sprite=PRSBACW0 +delay=3 +-newframe +sprite=PRSBACW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" +-newframe +sprite=PRSBACW2 +delay=3 +-newframe +sprite=PRSBACW1 +delay=3 +event=@100 # in this example, signal the game engine the frame is one that can immediately transition to "standing" + diff --git a/data/spri/ptmp.vrs b/data/spri/ptmp.vrs index 3bff7ff61034fe555f411bd8b88f6a28d7e2ef94..996844b8a1b84bb79f0e1fea06c67c5ef65fa763 100755 GIT binary patch delta 400 zcmaE@d)z=SEGXE}U4nr@Q;dNj7KqD%xJR6UVFM5!5}&B3zR`8QSUoob0&p=f13BD4 zGKGN$i49R9icrWP0+tm8s}w_GLzKuPsgwiD%7axZAh97zH0zO+YJjCR!AiA|*bpU8 zfX@E_#C$;KO98P35W4_z5)kJBF$i!09WTNl${@!e&!EAe2^0wk3U+dH4v!BGarATX p^mB&`ggg3p1No_70UvY~AOWZfu!10T1t0-r1&-(nKmsrY3;=3fI-&po delta 50 ucmX?Z@LE?cEGXFUwHO0~CJ@I0aXAn_0pb@x{7P)1qWVVH`C{x05C8y5tP33g diff --git a/src/lib/16_enti.c b/src/lib/16_enti.c index a6b42b67..d0a3de51 100755 --- a/src/lib/16_enti.c +++ b/src/lib/16_enti.c @@ -37,6 +37,8 @@ void EN_initentity(entity_t *enti) enti->spt=(TILEWH/(enti->speed)); //speed per tile wwww enti->invq=1; enti->pred = enti->d; + enti->overdraww=0; + enti->overdrawh=4; } //init player! diff --git a/src/lib/16_sprit.c b/src/lib/16_sprit.c index f797f23b..189c3cf4 100755 --- a/src/lib/16_sprit.c +++ b/src/lib/16_sprit.c @@ -103,8 +103,7 @@ void animate_spri(entity_t *enti, video_t *video) #define VMEMPAGEDATA2 GVARVIDEO->page[2].data unsigned int i,o,o2; int j; int x,y,rx,ry,w,h; - int overdraww = 0, overdrawh = 4; // how many pixels to "overdraw" so that moving sprites with edge pixels don't leave streaks. - // if the sprite's edge pixels are clear anyway, you can set this to 0. + VGA_RAM_PTR omemptr; // Depending on delay, update indices @@ -159,12 +158,12 @@ void animate_spri(entity_t *enti, video_t *video) // render box bounds. y does not need modification, but x and width must be multiple of 4 if(!GVARVIDEO->rss){ - if (x >= overdraww) rx = (x - overdraww) & (~3); + if (x >= enti->overdraww) rx = (x - enti->overdraww) & (~3); else rx = -(GVARVIDEO->page[0].dx); - if (y >= overdrawh) ry = (y - overdrawh); + if (y >= enti->overdrawh) ry = (y - enti->overdrawh); else ry = -(GVARVIDEO->page[0].dy); - h = enti->spri->sprite_vrl_cont->vrl_header->height + overdrawh + y - ry; - w = (x + enti->spri->sprite_vrl_cont->vrl_header->width + (overdraww*2) + 3 - rx) & (~3) - overdraww;//round up + h = enti->spri->sprite_vrl_cont->vrl_header->height + enti->overdrawh + y - ry; + w = (x + enti->spri->sprite_vrl_cont->vrl_header->width + (enti->overdraww*2) + 3 - rx) & (~3) - enti->overdraww;//round up if ((rx+w) > GVARVIDEO->page[0].width) w = GVARVIDEO->page[0].width-rx; if ((ry+h) > GVARVIDEO->page[0].height) h = GVARVIDEO->page[0].height-ry; diff --git a/src/lib/16_tdef.h b/src/lib/16_tdef.h index d45433ac..9ddb4581 100755 --- a/src/lib/16_tdef.h +++ b/src/lib/16_tdef.h @@ -146,6 +146,8 @@ typedef struct word spt; //speed per tile struct sprite *spri; // sprite used by entity sword hp; //hitpoints of the entity + nibble overdraww, overdrawh; // how many pixels to "overdraw" so that moving sprites with edge pixels don't leave streaks. + // if the sprite's edge pixels are clear anyway, you can set this to 0. int persist_aniframe; // gonna be increased to 1 before being used, so 0 is ok for default } entity_t; diff --git a/src/zcroll.c b/src/zcroll.c index 1f5200da..147555b8 100755 --- a/src/zcroll.c +++ b/src/zcroll.c @@ -43,6 +43,8 @@ byte *gpal; byte *ptr; memptr pal; +bitmap_t *ptmpdata; + void main(int argc, char *argv[]) { static global_game_variables_t gvar; @@ -202,6 +204,8 @@ void main(int argc, char *argv[]) } FUNCTIONKEYFUNCTIONS; if(IN_KeyDown(sc_L)){ modexClearRegion(&gvar.video.page[0], player[0].enti.x, player[0].enti.y, 16, 16, 1); } + if(IN_KeyDown(sc_J)){ read_vrs(&gvar, "data/spri/ptmp.vrs", player[0].enti.spri->spritesheet); *ptmpdata = bitmapLoadPcx("data/ptmp.pcx", &gvar); modexPalUpdate1(ptmpdata->palette); } + if(IN_KeyDown(sc_K)){ read_vrs(&gvar, "data/spri/chikyuu.vrs", player[0].enti.spri->spritesheet); PCXBMP = bitmapLoadPcx("data/chikyuu.pcx", &gvar); modexPalUpdate1(&PCXBMP->palette); } //9 #ifdef FADE -- 2.39.2