DEADSOFTWARE

save: move save code to separated file
[flatwaifu.git] / src / player.c
index f593f3071d19b0fa691ed3302f4b12d3a17a6c76..79a5a98968cbd0b2009b80dab942b99362dd2403 100644 (file)
@@ -23,7 +23,6 @@
 #include "glob.h"
 #include <stdlib.h>
 #include <string.h>
-#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<<p->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<<p->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.xv<PL_RUN && keys[p->kr]) {p->o.xv+=PL_RUN>>3;p->d=1;}
+         if(p->o.xv<PL_RUN && I_pressed(p->kr)) {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;}