X-Git-Url: http://deadsoftware.ru/gitweb?a=blobdiff_plain;f=src%2Fmonster.c;h=77a161df669ab9f8dd217f37b42d6d7f0e255e97;hb=HEAD;hp=ed7604e99f89dcc3f708f19e33675c3f3261e3f7;hpb=a2115940e7643dcb1b87286f3d19fe95f7b79bd3;p=flatwaifu.git diff --git a/src/monster.c b/src/monster.c index ed7604e..77a161d 100644 --- a/src/monster.c +++ b/src/monster.c @@ -1,32 +1,24 @@ -/* - 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 -*/ +/* Copyright (C) 1996-1997 Aleksey Volynskov + * Copyright (C) 2011 Rambo + * Copyright (C) 2020 SovietPony + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, version 3 of the License ONLY. + * + * This program 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 . + */ #include "glob.h" -//#include #include #include -#include "vga.h" #include "files.h" -#include "error.h" #include "view.h" #include "bmap.h" #include "dots.h" @@ -38,36 +30,21 @@ #include "misc.h" #include "fx.h" #include "smoke.h" - -#define MANCOLOR 0xD0 +#include "player.h" +#include "error.h" +#include "game.h" #define MAX_ATM 90 -#define MN_TN (MN__LAST-MN_DEMON) - -extern byte z_mon; - enum{ SLEEP,GO,RUN,CLIMB,DIE,DEAD,ATTACK,SHOOT,PAIN,WAIT,REVIVE,RUNOUT }; -#pragma pack(1) -typedef struct{ - obj_t o; - byte t,d,st,ftime; - int fobj; - int s; - char *ap; - int aim,life,pain,ac,tx,ty,ammo; - short atm; -}mn_t; -#pragma pack(0) +typedef struct { + int r, h, l, mp, rv, jv, sp, minp; +} mnsz_t; -typedef struct{ - int r,h,l,mp,rv,jv,sp,minp; -}mnsz_t; - -byte nomon=1; +byte nomon = 1; static char *sleepanim[MN_TN]={ "AAABBB","AAABBB","AAABBB","AAABBB","AAABBB","AAABBB","AAABBB","AAABBB", @@ -105,65 +82,84 @@ static char *sleepanim[MN_TN]={ "","U","U","U","","T","","","","","","","","","","","","","","W" }; -int hit_xv,hit_yv; +int hit_xv, hit_yv; +mn_t mn[MAXMN]; +int mnum, gsndt; -static void *spr[MN_TN][29*2],*fspr[8],*fsnd,*pauksnd,*trupsnd,*sgun[2]; -static char sprd[MN_TN][29*2]; +static void *fsnd,*pauksnd,*trupsnd; static void *snd[MN_TN][5],*impsitsnd[2],*impdthsnd[2],*firsnd,*slopsnd,*gsnd[4]; -static void *swgsnd,*pchsnd,*pl_spr[2],*telesnd; +static void *swgsnd,*pchsnd,*telesnd; static void *positsnd[3],*podthsnd[3]; -static mn_t mn[MAXMN]; -static int mnum,gsndt; static mnsz_t mnsz[MN_TN+1]={ -//rad ht life pain rv jv slop min_pn - 0, 0, 0, 0, 0, 0, 0, 0, // none - 15, 28, 60, 20, 7,10, 0, 10, // demon - 10, 28, 25, 15, 3,10, 30, 0, // imp - 10, 28, 15, 10, 3,10, 30, 0, // zomby - 10, 28, 20, 10, 3,10, 30, 0, // sergeant - 20, 55, 500, 70, 5,10, 0, 50, // cyberdemon - 12, 28, 60, 20, 3,10, 30, 10, // chaingunner - 12, 32, 150, 40, 3,10, 0, 30, // baron of hell - 12, 32, 75, 40, 3,10, 0, 30, // hell knight - 15, 28, 100, 10, 4, 4, 0, 0, // cacodemon - 8, 18, 60, 10, 4, 4, 0, 0, // lost soul - 15, 28, 100, 10, 4, 4, 0, 0, // pain elemental - 64, 50, 500, 70, 4,10, 0, 50, // spider mastermind - 25, 27, 150, 20, 4,10, 0, 0, // arachnotron - 18, 30, 200, 40, 3, 7, 0, 20, // mancubus - 17, 36, 200, 40, 6,11, 0, 20, // revenant - 17, 36, 150, 30, 7,12, 0, 10, // archvile - 5, 5, 35, 20,14, 6, 0, 10, // fish - 5, 17, 20, 0, 7, 6, 0, 0, // barrel - 17, 38, 20, 40, 3, 6, 0, 20, // robot - 8, 26, 400, 70, 8,10, 30, 50 // man + /* rad ht life pain rv jv slop min_pn */ + { 0, 0, 0, 0, 0, 0, 0, 0 }, // none + { 15, 28, 60, 20, 7, 10, 0, 10 }, // demon + { 10, 28, 25, 15, 3, 10, 30, 0 }, // imp + { 10, 28, 15, 10, 3, 10, 30, 0 }, // zomby + { 10, 28, 20, 10, 3, 10, 30, 0 }, // sergeant + { 20, 55, 500, 70, 5, 10, 0, 50 }, // cyberdemon + { 12, 28, 60, 20, 3, 10, 30, 10 }, // chaingunner + { 12, 32, 150, 40, 3, 10, 0, 30 }, // baron of hell + { 12, 32, 75, 40, 3, 10, 0, 30 }, // hell knight + { 15, 28, 100, 10, 4, 4, 0, 0 }, // cacodemon + { 8, 18, 60, 10, 4, 4, 0, 0 }, // lost soul + { 15, 28, 100, 10, 4, 4, 0, 0 }, // pain elemental + { 64, 50, 500, 70, 4, 10, 0, 50 }, // spider mastermind + { 25, 27, 150, 20, 4, 10, 0, 0 }, // arachnotron + { 18, 30, 200, 40, 3, 7, 0, 20 }, // mancubus + { 17, 36, 200, 40, 6, 11, 0, 20 }, // revenant + { 17, 36, 150, 30, 7, 12, 0, 10 }, // archvile + { 5, 5, 35, 20, 14, 6, 0, 10 }, // fish + { 5, 17, 20, 0, 7, 6, 0, 0 }, // barrel + { 17, 38, 20, 40, 3, 6, 0, 20 }, // robot + { 8, 26, 400, 70, 8, 10, 30, 50 } // man }; -void MN_savegame(FILE* h) { - int n; - - for(n=MAXMN;--n;) if(mn[n].t) break; - ++n;myfwrite(&n,1,4,h); - myfwrite(mn,1,n*sizeof(mn[0]),h); - myfwrite(&mnum,1,4,h);myfwrite(&gsndt,1,4,h); -} - -static void setst(int,int); - -void MN_loadgame(FILE* h) { - int n,c; +void setst (int i, int st) { + char *a; + int t; - myfread(&n,1,4,h); - myfread(mn,1,n*sizeof(mn[0]),h); - myfread(&mnum,1,4,h);myfread(&gsndt,1,4,h); - for(n=0;nx,o->y,c,t+MN_PL_DEAD))==-1) return -1; @@ -349,7 +288,7 @@ static int MN_findnewprey(int i) { return 1; } -int Z_getobjpos(int i,obj_t *o) { +int Z_getobjpos (int i, obj_t *o) { if(i==-1) {*o=pl1.o;return !PL_isdead(&pl1);} if(_2pl) if(i==-2) {*o=pl2.o;return !PL_isdead(&pl2);} if(i>=0 && i=MAXMN) return 0; + if(mn[obj].t) return MN_hit(obj,d,own,t); + return 0; +} + +void MN_act (void) { int i,st,sx,sy,t; static obj_t o; static int pt_x=0,pt_xs=1,pt_y=0,pt_ys=1; @@ -760,39 +708,11 @@ void MN_act(void) { } } -void MN_mark(void) { +void MN_mark (void) { int i; for(i=0;i=MN_PL_DEAD) { - Z_drawmanspr(mn[i].o.x,mn[i].o.y,pl_spr[mn[i].t-MN_PL_DEAD],0,mn[i].d); - continue; - } - if((mn[i].t!=MN_SOUL && mn[i].t!=MN_PAIN) || mn[i].st!=DEAD) { - if(mn[i].t!=MN_MAN) - Z_drawspr(mn[i].o.x,mn[i].o.y, - spr[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d], - sprd[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d]); - else{ - if(mn[i].ap[mn[i].ac]=='E' || mn[i].ap[mn[i].ac]=='F') - Z_drawspr(mn[i].o.x,mn[i].o.y,sgun[mn[i].ap[mn[i].ac]-'E'],mn[i].d); - Z_drawmanspr(mn[i].o.x,mn[i].o.y, - spr[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d], - sprd[mn[i].t-1][(mn[i].ap[mn[i].ac]-'A')*2+mn[i].d],MANCOLOR); - } - } - if(mn[i].t==MN_VILE && mn[i].st==SHOOT) { - Z_drawspr(mn[i].tx,mn[i].ty,fspr[mn[i].ac/3],0); - } - } -} - int MN_hit(int n,int d,int o,int t) { int i; @@ -859,7 +779,7 @@ int MN_hit(int n,int d,int o,int t) { #define hit(o,x,y) (y<=o.y && y>o.y-o.h && x>=o.x-o.r && x<=o.x+o.r) -int Z_gunhit(int x,int y,int o,int xv,int yv) { +int Z_gunhit (int x, int y, int o, int xv, int yv) { int i; if(o!=-1) if(hit(pl1.o,x,y)) if(PL_hit(&pl1,3,o,HIT_SOME)) @@ -878,7 +798,7 @@ static void goodsnd(void) { gsndt=18; } -int Z_hit(obj_t *o,int d,int own,int t) { +int Z_hit (obj_t *o, int d, int own, int t) { int i; hit_xv=o->xv+o->vx; @@ -905,24 +825,14 @@ int Z_hit(obj_t *o,int d,int own,int t) { return 0; } -void MN_killedp(void) { +void MN_killedp (void) { int i; - for(i=0;i=MAXMN) return 0; - if(mn[obj].t) return MN_hit(obj,d,own,t); - return 0; -} - -void Z_explode(int x,int y,int rad,int own) { +void Z_explode (int x,int y,int rad,int own) { long r; int dx,dy,m,i; @@ -956,7 +866,7 @@ void Z_explode(int x,int y,int rad,int own) { } } -void Z_bfg9000(int x,int y,int own) { +void Z_bfg9000 (int x,int y,int own) { int dx,dy,i; hit_xv=hit_yv=0; @@ -986,7 +896,7 @@ void Z_bfg9000(int x,int y,int own) { } } -int Z_chktrap(int t,int d,int o,int ht) { +int Z_chktrap (int t, int d, int o, int ht) { int i,s; hit_xv=hit_yv=0; @@ -1007,7 +917,7 @@ int Z_chktrap(int t,int d,int o,int ht) { return s; } -void Z_teleobj(int o,int x,int y) { +void Z_teleobj (int o, int x, int y) { obj_t *p; if(o==-1) p=&pl1.o; @@ -1018,7 +928,7 @@ void Z_teleobj(int o,int x,int y) { Z_sound(telesnd,128); } -void MN_warning(int l,int t,int r,int b) { +void MN_warning (int l,int t,int r,int b) { int i; for(i=0;i