X-Git-Url: http://4ch.mooo.com/gitweb/?a=blobdiff_plain;f=src%2Flib%2F16_enti.c;h=6d8fd2d37efb2449ca93e7937d155cb0a6c2a8ae;hb=a565be31ce92d6168ae6983042da75b0b683e52b;hp=088701d780637eeb7bb57c26ddf8070afd983983;hpb=cfba60702c8aa81180bb10781950ad7eab914bcc;p=16.git diff --git a/src/lib/16_enti.c b/src/lib/16_enti.c index 088701d7..6d8fd2d3 100755 --- a/src/lib/16_enti.c +++ b/src/lib/16_enti.c @@ -1,5 +1,5 @@ /* Project 16 Source Code~ - * Copyright (C) 2012-2017 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover + * Copyright (C) 2012-2019 sparky4 & pngwen & andrius4669 & joncampbell123 & yakui-lover * * This file is part of Project 16. * @@ -22,28 +22,63 @@ #include "src/lib/16_enti.h" -void EN_initentity(entity_t *enti) +void EN_initentity(entity_t *enti, video_t *video) { + unsigned int i,o,o2,w,h; //tx and ty inited by map enti->x = enti->tx*TILEWH; enti->y = enti->ty*TILEWH; enti->triggerx = enti->tx; - enti->triggery = enti->ty+1; - enti->q = 1; - enti->d =2; - enti->hp=4; - enti->speed=4; - enti->persist_aniframe= enti->q; - enti->spt=(TILEWH/(enti->speed)); //speed per tile wwww - enti->spri->delay=1; - enti->invq=1; - enti->pred = enti->d; + enti->triggery = enti->ty+1; //south + + enti->q = 1;//loop var + enti->d = 2;//dir var + enti->pred = 4;//previous dir + enti->hp = 4;//hit points + enti->spt = 4;//walkspeed + enti->persist_aniframe = enti->q; + enti->spt=(TILEWH/(enti->spt)); //speed per tile wwww + enti->overdraww = 0; + enti->overdrawh = 4; + + VL_Initofs(video); + +// modexClearRegion(&video->page[0], enti->x, enti->y, 16, 16, 2); +// modexClearRegion(&video->page[2], 0, 0, video->page[2].sw, video->page[2].sh, 45); +// modexClearRegion(&video->page[3], 0, 0, video->page[3].sw, video->page[3].sh, 47); + if(!video->vga_state.bgps){ + //video->ofs.pattern_ofs=(uint16_t)video->page[0].data; + //video->ofs.offscreen_ofs=(uint16_t)video->page[3].data; + w = (enti->x + 24) & (~3); + h = enti->y + 32; + + // block copy pattern to where we will draw the sprite + vga_setup_wm1_block_copy(); + o2 = video->ofs.offscreen_ofs; //dest + o = video->ofs.pattern_ofs + (enti->y * video->page[0].stridew) + (enti->x >> 2); // source + for (i=0;i < h;i++,o += video->page[0].stridew,o2 += (w >> 2)) vga_wm1_mem_block_copy(o2,o,w >> 2); + // must restore Write Mode 0/Read Mode 0 for this code to continue drawing normally + vga_restore_rm0wm0(); + }//else{ + //w=h=o=i=o2=0; + //modexCopyPageRegion(&video->page[2], &video->page[0], enti->x, enti->y, 0, 0, 24, 32); + //} } //init player! -void EN_initplayer(player_t *player, word pn) +void EN_initPlayer(player_t *player, video_t *video) { - EN_initentity(&player[pn].enti); + EN_initentity(&player->enti, video); + player->enti.spri.x = player[0].enti.x-4; + player->enti.spri.y = player[0].enti.y-16; + player->walktype=0; + player->enti.dire=30; + vga_state.vga_draw_stride_limit = vga_state.vga_draw_stride = video->page[0].stridew;//skewing bug + + video->sprifilei = set_anim_by_id(&player->enti.spri, player->enti.dire); + animate_spri(&player->enti, video); + + //print_anim_ids(player[0].enti.spri); /* player[0].info.x = player[0].tx; player[0].info.xaxis = player[0].tx*TILEWH; player[0].info.y = player[0].ty;