mirror of
https://github.com/jmarshall23/Hellfire.git
synced 2026-08-11 23:40:51 +02:00
124 lines
3.5 KiB
C++
124 lines
3.5 KiB
C++
/*-----------------------------------------------------------------------**
|
|
** Diablo
|
|
**
|
|
** Dead file
|
|
**
|
|
** (C)1995 Condor, Inc. All rights reserved.
|
|
**
|
|
**-----------------------------------------------------------------------**
|
|
** $Header: /Diablo/DEAD.CPP 1 1/22/97 2:06p Dgartner $
|
|
**-----------------------------------------------------------------------**
|
|
**
|
|
** File Routines
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
#include "diablo.h"
|
|
#pragma hdrstop
|
|
#include "sound.h"
|
|
#include "dead.h"
|
|
#include "monster.h"
|
|
#include "monstint.h"
|
|
#include "missiles.h"
|
|
#include "misdat.h"
|
|
#include "gendung.h"
|
|
#include "lighting.h"
|
|
|
|
/*-----------------------------------------------------------------------*
|
|
** Global Variables
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
DeadStruct dead[MAXDEAD];
|
|
int spurtndx;
|
|
int stonendx;
|
|
|
|
/*-----------------------------------------------------------------------*
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void InitDead ()
|
|
{
|
|
int nd,i,j,mi;
|
|
int mtypes[MONSTERTYPES];
|
|
|
|
for (i = 0; i < MONSTERTYPES; i++) mtypes[i] = 0;
|
|
|
|
nd = 0;
|
|
for (i = 0; i < nummtypes; i++) {
|
|
if (mtypes[Monsters[i].mtype] == 0) {
|
|
for (j = 0; j < 8; j++) dead[nd]._deadData[j] = Monsters[i].Anims[MA_DEATH].Cels[j];
|
|
dead[nd]._deadFrame = Monsters[i].Anims[MA_DEATH].Frames;
|
|
dead[nd]._deadWidth = Monsters[i].mAnimWidth;
|
|
dead[nd]._deadWidth2 = Monsters[i].mAnimWidth2;
|
|
dead[nd]._deadtrans = 0;
|
|
Monsters[i].mdeadval = nd + 1;
|
|
mtypes[Monsters[i].mtype] = nd + 1;
|
|
nd++;
|
|
}
|
|
}
|
|
|
|
// set blood burst dead frames
|
|
for (j = 0; j < 8; j++) dead[nd]._deadData[j] = misfiledata[MF_SPURT].mAnimData[0];
|
|
dead[nd]._deadFrame = 8;
|
|
dead[nd]._deadWidth = 128;
|
|
dead[nd]._deadWidth2 = (128 - 64) >> 1;
|
|
dead[nd]._deadtrans = 0;
|
|
spurtndx = nd + 1;
|
|
nd++;
|
|
// set stone dead frames
|
|
for (j = 0; j < 8; j++) dead[nd]._deadData[j] = misfiledata[MF_STONE].mAnimData[0];
|
|
dead[nd]._deadFrame = 12;
|
|
dead[nd]._deadWidth = 128;
|
|
dead[nd]._deadWidth2 = (128 - 64) >> 1;
|
|
dead[nd]._deadtrans = 0;
|
|
stonendx = nd + 1;
|
|
nd++;
|
|
|
|
// set unique monster dead frames
|
|
for (i = 0; i < nummonsters; i++) {
|
|
mi = monstactive[i];
|
|
if (monster[mi]._uniqtype != 0) {
|
|
for (j = 0; j < 8; j++) dead[nd]._deadData[j] = monster[mi].MType->Anims[MA_DEATH].Cels[j];
|
|
dead[nd]._deadFrame = monster[mi].MType->Anims[MA_DEATH].Frames;
|
|
dead[nd]._deadWidth = monster[mi].MType->mAnimWidth;
|
|
dead[nd]._deadWidth2 = monster[mi].MType->mAnimWidth2;
|
|
dead[nd]._deadtrans = LIGHT_U + monster[mi]._uniqtrans;
|
|
monster[mi]._udeadval = nd + 1;
|
|
nd++;
|
|
}
|
|
}
|
|
app_assert(nd <= MAXDEAD);
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------*
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void AddDead(int dx, int dy, char dv, int ddir)
|
|
{
|
|
char tdv;
|
|
|
|
tdv = (dv & 0x1f) + ((ddir & 0x7) << 5);
|
|
dDead[dx][dy] = tdv;
|
|
}
|
|
|
|
/*-----------------------------------------------------------------------*
|
|
**-----------------------------------------------------------------------*/
|
|
|
|
void SyncUniqDead()
|
|
{
|
|
int i,mi;
|
|
int x,y;
|
|
|
|
// See function InitDead() to understand what this is all about
|
|
|
|
for (i = 0; i < nummonsters; i++) {
|
|
mi = monstactive[i];
|
|
if (monster[mi]._uniqtype != 0) {
|
|
|
|
// Search dDead array for this dead type, and place a light source there
|
|
for(x=0; x < DMAXX; x++)
|
|
for(y=0; y < DMAXY; y++)
|
|
if((dDead[x][y] & 0x1f) == monster[mi]._udeadval)
|
|
ChangeLightXY(monster[mi].mlid, x, y);
|
|
}
|
|
}
|
|
}
|