X-Git-Url: https://deadsoftware.ru/gitweb?p=flatwaifu.git;a=blobdiff_plain;f=src%2Fplayer.c;h=79a5a98968cbd0b2009b80dab942b99362dd2403;hp=f593f3071d19b0fa691ed3302f4b12d3a17a6c76;hb=563dffaf02ff36da4054f937fcc9f99a072e15bf;hpb=2bb81ea2565c3627c954b5c37326db89b0048472 diff --git a/src/player.c b/src/player.c index f593f30..79a5a98 100644 --- a/src/player.c +++ b/src/player.c @@ -23,7 +23,6 @@ #include "glob.h" #include #include -#include "keyb.h" #include "view.h" #include "dots.h" #include "smoke.h" @@ -36,6 +35,7 @@ #include "misc.h" #include "my.h" #include "game.h" +#include "input.h" #define PL_RAD 8 #define PL_HT 26 @@ -68,121 +68,6 @@ byte plr_goanim[]="BDACDA"; byte plr_dieanim[]="HHHHIIIIJJJJKKKKLLLLMMMM"; byte plr_slopanim[]="OOPPQQRRSSTTUUVVWW"; - -#pragma pack(1) -struct { - int ku,kd,kl,kr,kf,kj,kwl,kwr,kp; -} _keys; -#pragma pack() - -static void PL_save_player (player_t *p, FILE *h) { - myfwrite32(p->o.x, h); - myfwrite32(p->o.y, h); - myfwrite32(p->o.xv, h); - myfwrite32(p->o.yv, h); - myfwrite32(p->o.vx, h); - myfwrite32(p->o.vy, h); - myfwrite32(p->o.r, h); - myfwrite32(p->o.h, h); - myfwrite32(p->looky, h); - myfwrite32(p->st, h); - myfwrite32(p->s, h); - myfwrite32(p->life, h); - myfwrite32(p->armor, h); - myfwrite32(p->hit, h); - myfwrite32(p->hito, h); - myfwrite32(p->pain, h); - myfwrite32(p->air, h); - myfwrite32(p->invl, h); - myfwrite32(p->suit, h); - myfwrite8(p->d, h); - myfwrite32(p->frag, h); - myfwrite32(p->ammo, h); - myfwrite32(p->shel, h); - myfwrite32(p->rock, h); - myfwrite32(p->cell, h); - myfwrite32(p->fuel, h); - myfwrite32(p->kills, h); - myfwrite32(p->secrets, h); - myfwrite8(p->fire, h); - myfwrite8(p->cwpn, h); - myfwrite8(p->csnd, h); - myfwrite8(p->amul, h); - myfwrite16(p->wpns, h); - myfwrite8(p->wpn, h); - myfwrite8(p->f, h); - myfwrite8(p->drawst, h); - myfwrite8(p->color, h); - myfwrite32(p->id, h); - myfwrite8(p->keys, h); - myfwrite8(p->lives, h); - // k* not saved -} - -void PL_savegame (FILE *h) { - PL_save_player(&pl1, h); - if (_2pl) { - PL_save_player(&pl2, h); - } - myfwrite32(PL_JUMP, h); - myfwrite32(PL_RUN, h); - myfwrite8(p_immortal, h); -} - -static void PL_load_player (player_t *p, FILE *h) { - p->o.x = myfread32(h); - p->o.y = myfread32(h); - p->o.xv = myfread32(h); - p->o.yv = myfread32(h); - p->o.vx = myfread32(h); - p->o.vy = myfread32(h); - p->o.r = myfread32(h); - p->o.h = myfread32(h); - p->looky = myfread32(h); - p->st = myfread32(h); - p->s = myfread32(h); - p->life = myfread32(h); - p->armor = myfread32(h); - p->hit = myfread32(h); - p->hito = myfread32(h); - p->pain = myfread32(h); - p->air = myfread32(h); - p->invl = myfread32(h); - p->suit = myfread32(h); - p->d = myfread8(h); - p->frag = myfread32(h); - p->ammo = myfread32(h); - p->shel = myfread32(h); - p->rock = myfread32(h); - p->cell = myfread32(h); - p->fuel = myfread32(h); - p->kills = myfread32(h); - p->secrets = myfread32(h); - p->fire = myfread8(h); - p->cwpn = myfread8(h); - p->csnd = myfread8(h); - p->amul = myfread8(h); - p->wpns = myfread16(h); - p->wpn = myfread8(h); - p->f = myfread8(h); - p->drawst = myfread8(h); - p->color = myfread8(h); - p->id = myfread32(h); - p->keys = myfread8(h); - p->lives = myfread8(h); - // k* not saved -} - -void PL_loadgame (FILE *h) { - PL_load_player(&pl1, h); - if (_2pl) { - PL_load_player(&pl2, h); - } - PL_JUMP = myfread32(h); - PL_RUN = myfread32(h); - p_immortal = myfread8(h); -} - static int nonz (int a) { return a ? a : 1; } @@ -202,22 +87,22 @@ static void fire(player_t *p) { if(p->cwpn) return; if(p->wpn==8) { if(!p->fire) - if(keys[p->kf] && p->cell>=40) + if(I_pressed(p->kf) && p->cell>=40) {Z_sound(snd[5],128);p->fire=21;p->cell-=40;p->drawst|=PL_DRAWWPN;return;} else return; if(p->fire==1) p->cwpn=12; else return; }else if(p->wpn==1) { if(!p->csnd) { - if(!keys[p->kf]) {Z_sound(snd[7],128);p->csnd=13;return;} + if(!I_pressed(p->kf)) {Z_sound(snd[7],128);p->csnd=13;return;} } - if(keys[p->kf] && !p->fire) { + if(I_pressed(p->kf) && !p->fire) { p->fire=2; WP_chainsaw(p->o.x+((p->d)?4:-4),p->o.y,(g_dm)?9:3,p->id); if(!p->csnd) {Z_sound(snd[8],128);p->csnd=29;} }return; }else if(p->fire) return; - if(keys[p->kf] || p->wpn==8) { + if(I_pressed(p->kf) || p->wpn==8) { switch(p->wpn) { case 2: case 5: if(!p->ammo) return; @@ -252,10 +137,10 @@ static void fire(player_t *p) { static void chgwpn(player_t *p) { if(p->cwpn) return; if(p->fire && p->wpn!=1) return; - if(keys[p->kwl]) { + if(I_pressed(p->kwl)) { do{ if(--p->wpn<0) p->wpn=10; }while(!(p->wpns&(1<wpn))); p->cwpn=3; - }else if(keys[p->kwr]) { + }else if(I_pressed(p->kwr)) { do{ if(++p->wpn>10) p->wpn=0; }while(!(p->wpns&(1<wpn))); p->cwpn=3; } @@ -277,7 +162,7 @@ static void jump(player_t *p,int st) { } p->drawst|=PL_DRAWAIR; } - if(keys[p->kj]) { + if(I_pressed(p->kj)) { if(p_fly) { p->o.yv=-PL_FLYUP; }else{ @@ -297,9 +182,12 @@ int PL_isdead (player_t *p) { } void PL_init (void) { - p_immortal=0; - PL_JUMP=10;PL_RUN=8; - aitime=0; + pl1.id = -1; + pl2.id = -2; + p_immortal = 0; + PL_JUMP = 10; + PL_RUN = 8; + aitime = 0; } void PL_alloc(void) { @@ -577,14 +465,14 @@ void PL_act (player_t *p) { }else st=0; if(st&Z_HITWATER) Z_splash(&p->o,PL_RAD+PL_HT); if(p->f&PLF_FIRE) if(p->fire!=2) p->f-=PLF_FIRE; - if(keys[p->ku]) {p->f|=PLF_UP;p->looky-=5;} + if(I_pressed(p->ku)) {p->f|=PLF_UP;p->looky-=5;} else{ p->f&=0xFFFF-PLF_UP; - if(keys[p->kd]) + if(I_pressed(p->kd)) {p->f|=PLF_DOWN;p->looky+=5;} else {p->f&=0xFFFF-PLF_DOWN;p->looky=Z_dec(p->looky,5);} } - if(keys[p->kp]) SW_press(p->o.x,p->o.y,p->o.r,p->o.h,1|p->keys,p->id); + if(I_pressed(p->kp)) SW_press(p->o.x,p->o.y,p->o.r,p->o.h,1|p->keys,p->id); if(p->fire) --p->fire; if(p->cwpn) --p->cwpn; if(p->csnd) --p->csnd; @@ -606,15 +494,15 @@ void PL_act (player_t *p) { if(p_fly) SMK_gas(p->o.x,p->o.y-2,2,3,p->o.xv+p->o.vx,p->o.yv+p->o.vy,128); if((p->s+=abs(p->o.xv)/2) >= 24) p->s%=24; - if(!keys[p->kl] && !keys[p->kr]) { + if(!I_pressed(p->kl) && !I_pressed(p->kr)) { if(p->o.xv) p->o.xv=Z_dec(p->o.xv,1); else p->st=STAND; break; } - if(p->o.xvkr]) {p->o.xv+=PL_RUN>>3;p->d=1;} + if(p->o.xvkr)) {p->o.xv+=PL_RUN>>3;p->d=1;} else if(PL_RUN>8) SMK_gas(p->o.x,p->o.y-2,2,3,p->o.xv+p->o.vx,p->o.yv+p->o.vy,32); - if(p->o.xv>-PL_RUN && keys[p->kl]) {p->o.xv-=PL_RUN>>3;p->d=0;} + if(p->o.xv>-PL_RUN && I_pressed(p->kl)) {p->o.xv-=PL_RUN>>3;p->d=0;} else if(PL_RUN>8) SMK_gas(p->o.x,p->o.y-2,2,3,p->o.xv+p->o.vx,p->o.yv+p->o.vy,32); break; @@ -622,15 +510,15 @@ void PL_act (player_t *p) { chgwpn(p);fire(p);jump(p,st); if(p_fly) SMK_gas(p->o.x,p->o.y-2,2,3,p->o.xv+p->o.vx,p->o.yv+p->o.vy,128); - if(keys[p->kl]) {p->st=GO;p->s=0;p->d=0;} - else if(keys[p->kr]) {p->st=GO;p->s=0;p->d=1;} + if(I_pressed(p->kl)) {p->st=GO;p->s=0;p->d=0;} + else if(I_pressed(p->kr)) {p->st=GO;p->s=0;p->d=1;} break; case DEAD: case MESS: case OUT: p->o.xv=Z_dec(p->o.xv,1); - if(keys[p->ku] || keys[p->kd] || keys[p->kl] || keys[p->kr] || - keys[p->kf] || keys[p->kj] || keys[p->kp] || keys[p->kwl] || keys[p->kwr]) { + if(I_pressed(p->ku) || I_pressed(p->kd) || I_pressed(p->kl) || I_pressed(p->kr) || + I_pressed(p->kf) || I_pressed(p->kj) || I_pressed(p->kp) || I_pressed(p->kwl) || I_pressed(p->kwr)) { if(p->st!=OUT) MN_spawn_deadpl(&p->o,p->color,(p->st==MESS)?1:0); PL_restore(p); if(g_dm) {G_respawn_player(p);break;}