mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-12-01 00:21:35 +00:00
- Made texture indices in FSwitchDef full integers. Since that required
some data restructuring I also eliminated the MAX_FRAMES limit of 128 per switch. SVN r828 (trunk)
This commit is contained in:
parent
d3e34d1edd
commit
064f64e3a7
2 changed files with 33 additions and 34 deletions
|
@ -1,3 +1,8 @@
|
||||||
|
March 21, 2008 (Changes by Graf Zahl)
|
||||||
|
- Made texture indices in FSwitchDef full integers. Since that required
|
||||||
|
some data restructuring I also eliminated the MAX_FRAMES limit of 128
|
||||||
|
per switch.
|
||||||
|
|
||||||
March 20, 2008
|
March 20, 2008
|
||||||
- Removed some debug output from SBarInfo::ParseSBarInfo().
|
- Removed some debug output from SBarInfo::ParseSBarInfo().
|
||||||
- Fixed: Heretic linetype translations included the wrong file.
|
- Fixed: Heretic linetype translations included the wrong file.
|
||||||
|
|
|
@ -95,16 +95,16 @@ protected:
|
||||||
|
|
||||||
struct FSwitchDef
|
struct FSwitchDef
|
||||||
{
|
{
|
||||||
SWORD PreTexture; // texture to switch from
|
int PreTexture; // texture to switch from
|
||||||
WORD PairIndex; // switch def to use to return to PreTexture
|
WORD PairIndex; // switch def to use to return to PreTexture
|
||||||
SWORD Sound; // sound to play at start of animation
|
SWORD Sound; // sound to play at start of animation
|
||||||
WORD NumFrames; // # of animation frames
|
WORD NumFrames; // # of animation frames
|
||||||
bool QuestPanel; // Special texture for Strife mission
|
bool QuestPanel; // Special texture for Strife mission
|
||||||
union // Array of times followed by array of textures
|
struct frame // Array of times followed by array of textures
|
||||||
{ // actual length of each array is <NumFrames>
|
{ // actual length of each array is <NumFrames>
|
||||||
DWORD Times[1];
|
DWORD Time;
|
||||||
SWORD Textures[3];
|
int Texture;
|
||||||
} u;
|
} u[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
static int STACK_ARGS SortSwitchDefs (const void *a, const void *b);
|
static int STACK_ARGS SortSwitchDefs (const void *a, const void *b);
|
||||||
|
@ -167,11 +167,11 @@ void P_InitSwitchList ()
|
||||||
{
|
{
|
||||||
def1 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
def1 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
||||||
def2 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
def2 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
||||||
def1->PreTexture = def2->u.Textures[2] = TexMan.CheckForTexture (list_p /* .name1 */, FTexture::TEX_Wall, texflags);
|
def1->PreTexture = def2->u[0].Texture = TexMan.CheckForTexture (list_p /* .name1 */, FTexture::TEX_Wall, texflags);
|
||||||
def2->PreTexture = def1->u.Textures[2] = TexMan.CheckForTexture (list_p + 9, FTexture::TEX_Wall, texflags);
|
def2->PreTexture = def1->u[0].Texture = TexMan.CheckForTexture (list_p + 9, FTexture::TEX_Wall, texflags);
|
||||||
def1->Sound = def2->Sound = 0;
|
def1->Sound = def2->Sound = 0;
|
||||||
def1->NumFrames = def2->NumFrames = 1;
|
def1->NumFrames = def2->NumFrames = 1;
|
||||||
def1->u.Times[0] = def2->u.Times[0] = 0;
|
def1->u[0].Time = def2->u[0].Time = 0;
|
||||||
def2->PairIndex = AddSwitchDef (def1);
|
def2->PairIndex = AddSwitchDef (def1);
|
||||||
def1->PairIndex = AddSwitchDef (def2);
|
def1->PairIndex = AddSwitchDef (def2);
|
||||||
}
|
}
|
||||||
|
@ -317,12 +317,12 @@ void P_ProcessSwitchDef (FScanner &sc)
|
||||||
def2 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
def2 = (FSwitchDef *)M_Malloc (sizeof(FSwitchDef));
|
||||||
def2->Sound = def1->Sound;
|
def2->Sound = def1->Sound;
|
||||||
def2->NumFrames = 1;
|
def2->NumFrames = 1;
|
||||||
def2->u.Times[0] = 0;
|
def2->u[0].Time = 0;
|
||||||
def2->u.Textures[2] = picnum;
|
def2->u[0].Texture = picnum;
|
||||||
}
|
}
|
||||||
|
|
||||||
def1->PreTexture = picnum;
|
def1->PreTexture = picnum;
|
||||||
def2->PreTexture = def1->u.Textures[def1->NumFrames*2+def1->NumFrames-1];
|
def2->PreTexture = def1->u[def1->NumFrames-1].Texture;
|
||||||
if (def1->PreTexture == def2->PreTexture)
|
if (def1->PreTexture == def2->PreTexture)
|
||||||
{
|
{
|
||||||
sc.ScriptError ("The on state for switch %s must end with a texture other than %s", picname.GetChars(), picname.GetChars());
|
sc.ScriptError ("The on state for switch %s must end with a texture other than %s", picname.GetChars(), picname.GetChars());
|
||||||
|
@ -336,14 +336,12 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
{
|
{
|
||||||
const BITFIELD texflags = FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny;
|
const BITFIELD texflags = FTextureManager::TEXMAN_Overridable | FTextureManager::TEXMAN_TryAny;
|
||||||
FSwitchDef *def;
|
FSwitchDef *def;
|
||||||
SWORD pics[MAX_FRAMES];
|
TArray<FSwitchDef::frame> frames;
|
||||||
DWORD times[MAX_FRAMES];
|
FSwitchDef::frame thisframe;
|
||||||
int numframes;
|
|
||||||
int picnum;
|
int picnum;
|
||||||
bool bad;
|
bool bad;
|
||||||
SWORD sound;
|
SWORD sound;
|
||||||
|
|
||||||
numframes = 0;
|
|
||||||
sound = 0;
|
sound = 0;
|
||||||
bad = false;
|
bad = false;
|
||||||
|
|
||||||
|
@ -360,10 +358,6 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
}
|
}
|
||||||
else if (sc.Compare ("pic"))
|
else if (sc.Compare ("pic"))
|
||||||
{
|
{
|
||||||
if (numframes == MAX_FRAMES)
|
|
||||||
{
|
|
||||||
sc.ScriptError ("Switch has too many frames");
|
|
||||||
}
|
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
picnum = TexMan.CheckForTexture (sc.String, FTexture::TEX_Wall, texflags);
|
picnum = TexMan.CheckForTexture (sc.String, FTexture::TEX_Wall, texflags);
|
||||||
if (picnum < 0 && !ignoreBad)
|
if (picnum < 0 && !ignoreBad)
|
||||||
|
@ -371,12 +365,12 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
//Printf ("Unknown switch texture %s\n", sc.String);
|
//Printf ("Unknown switch texture %s\n", sc.String);
|
||||||
bad = true;
|
bad = true;
|
||||||
}
|
}
|
||||||
pics[numframes] = picnum;
|
thisframe.Texture = picnum;
|
||||||
sc.MustGetString ();
|
sc.MustGetString ();
|
||||||
if (sc.Compare ("tics"))
|
if (sc.Compare ("tics"))
|
||||||
{
|
{
|
||||||
sc.MustGetNumber ();
|
sc.MustGetNumber ();
|
||||||
times[numframes] = sc.Number & 65535;
|
thisframe.Time = sc.Number & 65535;
|
||||||
}
|
}
|
||||||
else if (sc.Compare ("rand"))
|
else if (sc.Compare ("rand"))
|
||||||
{
|
{
|
||||||
|
@ -390,13 +384,13 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
{
|
{
|
||||||
swap (min, max);
|
swap (min, max);
|
||||||
}
|
}
|
||||||
times[numframes] = ((max - min + 1) << 16) | min;
|
thisframe.Time = ((max - min + 1) << 16) | min;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptError ("Must specify a duration for switch frame");
|
sc.ScriptError ("Must specify a duration for switch frame");
|
||||||
}
|
}
|
||||||
numframes++;
|
frames.Push(thisframe);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -404,7 +398,7 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (numframes == 0)
|
if (frames.Size() == 0)
|
||||||
{
|
{
|
||||||
sc.ScriptError ("Switch state needs at least one frame");
|
sc.ScriptError ("Switch state needs at least one frame");
|
||||||
}
|
}
|
||||||
|
@ -412,11 +406,11 @@ FSwitchDef *ParseSwitchDef (FScanner &sc, bool ignoreBad)
|
||||||
{
|
{
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
def = (FSwitchDef *)M_Malloc (myoffsetof (FSwitchDef, u.Times[0]) + numframes * 6);
|
|
||||||
|
def = (FSwitchDef *)M_Malloc (myoffsetof (FSwitchDef, u[0]) + frames.Size()*sizeof(frames[0]));
|
||||||
def->Sound = sound;
|
def->Sound = sound;
|
||||||
def->NumFrames = numframes;
|
def->NumFrames = frames.Size();
|
||||||
memcpy (&def->u.Times[0], times, numframes * 4);
|
memcpy (&def->u[0], &frames[0], frames.Size() * sizeof(frames[0]));
|
||||||
memcpy (&def->u.Textures[numframes*2], pics, numframes * 2);
|
|
||||||
def->PairIndex = 65535;
|
def->PairIndex = 65535;
|
||||||
return def;
|
return def;
|
||||||
}
|
}
|
||||||
|
@ -606,7 +600,7 @@ bool P_ChangeSwitchTexture (side_t *side, int useAgain, BYTE special, bool *ques
|
||||||
|
|
||||||
pt[0] = line->v1->x + (line->dx >> 1);
|
pt[0] = line->v1->x + (line->dx >> 1);
|
||||||
pt[1] = line->v1->y + (line->dy >> 1);
|
pt[1] = line->v1->y + (line->dy >> 1);
|
||||||
*texture = SwitchList[i]->u.Textures[SwitchList[i]->NumFrames*2];
|
*texture = SwitchList[i]->u[0].Texture;
|
||||||
if (useAgain || SwitchList[i]->NumFrames > 1)
|
if (useAgain || SwitchList[i]->NumFrames > 1)
|
||||||
playsound = P_StartButton (side, Where, i, pt[0], pt[1], !!useAgain);
|
playsound = P_StartButton (side, Where, i, pt[0], pt[1], !!useAgain);
|
||||||
else
|
else
|
||||||
|
@ -691,7 +685,7 @@ void DActiveButton::Tick ()
|
||||||
}
|
}
|
||||||
bool killme = AdvanceFrame ();
|
bool killme = AdvanceFrame ();
|
||||||
|
|
||||||
StoreTexture (def->u.Textures[def->NumFrames*2+m_Frame]);
|
StoreTexture (def->u[m_Frame].Texture);
|
||||||
|
|
||||||
if (killme)
|
if (killme)
|
||||||
{
|
{
|
||||||
|
@ -718,17 +712,17 @@ bool DActiveButton::AdvanceFrame ()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (def->u.Times[m_Frame] & 0xffff0000)
|
if (def->u[m_Frame].Time & 0xffff0000)
|
||||||
{
|
{
|
||||||
int t = pr_switchanim();
|
int t = pr_switchanim();
|
||||||
|
|
||||||
m_Timer = (WORD)((((t | (pr_switchanim() << 8))
|
m_Timer = (WORD)((((t | (pr_switchanim() << 8))
|
||||||
% def->u.Times[m_Frame]) >> 16)
|
% def->u[m_Frame].Time) >> 16)
|
||||||
+ (def->u.Times[m_Frame] & 0xffff));
|
+ (def->u[m_Frame].Time & 0xffff));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_Timer = (WORD)def->u.Times[m_Frame];
|
m_Timer = (WORD)def->u[m_Frame].Time;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
|
Loading…
Reference in a new issue