From e50692b6cda246cd1f4d679846f7fdd8699101c5 Mon Sep 17 00:00:00 2001 From: Andriy Shinkarchuck Date: Sun, 24 Jul 2011 19:39:18 +0300 Subject: [PATCH] fx.c fx.h moved to repo. Added license notification --- fx.c | 217 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ fx.h | 33 +++++++++ 2 files changed, 250 insertions(+) create mode 100755 fx.c create mode 100755 fx.h diff --git a/fx.c b/fx.c new file mode 100755 index 0000000..a6b3f06 --- /dev/null +++ b/fx.c @@ -0,0 +1,217 @@ +/* + Copyright (C) Prikol Software 1996-1997 + Copyright (C) Aleksey Volynskov 1996-1997 + Copyright (C) 2011 + + This file is part of the Doom2D:Rembo project. + + Doom2D:Rembo is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + Doom2D:Rembo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see or + write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +#include "glob.h" +//#include +#include +#include +#include +#include "vga.h" +#include "error.h" +#include "view.h" +#include "fx.h" +#include "misc.h" + +enum{NONE,TFOG,IFOG,BUBL}; + +#pragma pack(1) +typedef struct{ + int x,y,xv,yv; + char t,s; +}fx_t; +#pragma pack() + +static void *spr[15],*bsnd[2]; +static char sprd[15]; +static fx_t fx[MAXFX]; +static char bubsn; +static int last; + +unsigned char fx_scr1[64000],fx_scr2[64000]; + +#define SINP 256 +#define SINPM (SINP-1) +#define W (SINP/100) + +static int stdsin[SINP]={ +#include "fx1sin.dat" +}; +static int sintab[SINP]; + +static unsigned char dmap[32*32]; + +static int isin(int a) { + return sintab[a&SINPM]; +} + +static void setamp(int a) { + int i; + + for(i=0;i=k) { + u=x+((isin(y+t))>>16); + v=y+((isin(u+t))>>16); + if(u<0 || u>=320 || v<0 || v>=200) scra[p]=0; + else scra[p]=fx_scr1[v*320+u]; + }else scra[p]=fx_scr2[p]; + } + +} + +static void init_fx1sin(void) { + int j,r,l,rr; + unsigned i; + + memset(dmap,0,32*32); + for(i=1,rr=32*32;i<64;++i) { + for(l=32*32/64;l;--l,--rr) { + r=rand()%rr; + for(j=0;r;--r,++j) { + for(;dmap[j];++j); + } + for(;dmap[j];++j); + dmap[j]=i; + } + } +} + +void FX_savegame(FILE* h) { + int i,n; + + for(i=n=0;i=20) fx[i].t=0; + break; + case IFOG: + if(++fx[i].s>=10) fx[i].t=0; + break; + case BUBL: + fx[i].yv-=5; + fx[i].xv=Z_dec(fx[i].xv,20); + fx[i].x+=fx[i].xv; + fx[i].y+=fx[i].yv; + if((b=fld[fx[i].y>>11][fx[i].x>>11]) < 5 || b>7) fx[i].t=0; + break; + } +} + +void FX_draw(void) { + int i,s; + + for(i=0;i>8)-w_x+WD/2,(fx[i].y>>8)-w_y+HT/2+1+w_o,0xC0+fx[i].s);//V_dot((fx[i].x>>8)-w_x+100,(fx[i].y>>8)-w_y+50+w_o,0xC0+fx[i].s); + continue; + } + if(s>=0) Z_drawspr(fx[i].x,fx[i].y,spr[s],sprd[s]); + } +} + +static int findfree(void) { + int i; + + for(i=0;i=MAXFX) last=0; + return last; +} + +void FX_tfog(int x,int y) { + int i; + + i=findfree(); + fx[i].t=TFOG;fx[i].s=0; + fx[i].x=x;fx[i].y=y; +} + +void FX_ifog(int x,int y) { + int i; + + i=findfree(); + fx[i].t=IFOG;fx[i].s=0; + fx[i].x=x;fx[i].y=y; +} + +void FX_bubble(int x,int y,int xv,int yv,int n) { + int i; + + if(!bubsn) {Z_sound(bsnd[rand()&1],128);bubsn=1;} + for(;n>0;--n) { + i=findfree(); + fx[i].t=BUBL;fx[i].s=rand()&3; + fx[i].x=(x<<8)+myrand(513)-256;fx[i].y=(y<<8)+myrand(513)-256; + fx[i].xv=xv;fx[i].yv=yv-myrand(256)-768; + } +} + diff --git a/fx.h b/fx.h new file mode 100755 index 0000000..784844a --- /dev/null +++ b/fx.h @@ -0,0 +1,33 @@ +/* + Copyright (C) Prikol Software 1996-1997 + Copyright (C) Aleksey Volynskov 1996-1997 + Copyright (C) 2011 + + This file is part of the Doom2D:Rembo project. + + Doom2D:Rembo is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License version 2 as + published by the Free Software Foundation. + + Doom2D:Rembo is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, see or + write to the Free Software Foundation, Inc., + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +*/ + +// Effects + +#define MAXFX 300 + +void FX_init(void); +void FX_alloc(void); +void FX_act(void); +void FX_draw(void); +void FX_tfog(int,int); +void FX_ifog(int,int); +void FX_bubble(int x,int y,int xv,int yv,int n); -- 2.29.2