mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-12-03 17:32:54 +00:00
- intermission parser complete. The current definitions get parsed without error messages.
SVN r2877 (finale)
This commit is contained in:
parent
854e236c86
commit
a9632c2694
10 changed files with 404 additions and 137 deletions
|
@ -54,6 +54,7 @@ class FScanner;
|
||||||
#define GCC_YSEG __attribute__((section(SECTION_YREG)))
|
#define GCC_YSEG __attribute__((section(SECTION_YREG)))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
struct FIntermissionAction;
|
||||||
|
|
||||||
struct FMapInfoParser
|
struct FMapInfoParser
|
||||||
{
|
{
|
||||||
|
@ -99,6 +100,7 @@ struct FMapInfoParser
|
||||||
void SkipToNext();
|
void SkipToNext();
|
||||||
void CheckEndOfFile(const char *block);
|
void CheckEndOfFile(const char *block);
|
||||||
|
|
||||||
|
FIntermissionAction *ParseIntermissionAction();
|
||||||
void ParseIntermission();
|
void ParseIntermission();
|
||||||
FName CheckEndSequence();
|
FName CheckEndSequence();
|
||||||
FName ParseEndGame();
|
FName ParseEndGame();
|
||||||
|
|
|
@ -37,10 +37,13 @@
|
||||||
#include "w_wad.h"
|
#include "w_wad.h"
|
||||||
#include "intermission/intermission.h"
|
#include "intermission/intermission.h"
|
||||||
|
|
||||||
|
FIntermissionDescriptorList IntermissionDescriptors;
|
||||||
|
|
||||||
IMPLEMENT_CLASS(DIntermissionScreen)
|
IMPLEMENT_CLASS(DIntermissionScreen)
|
||||||
IMPLEMENT_CLASS(DIntermissionScreenFader)
|
IMPLEMENT_CLASS(DIntermissionScreenFader)
|
||||||
IMPLEMENT_CLASS(DIntermissionScreenText)
|
IMPLEMENT_CLASS(DIntermissionScreenText)
|
||||||
IMPLEMENT_CLASS(DIntermissionScreenCast)
|
IMPLEMENT_CLASS(DIntermissionScreenCast)
|
||||||
|
IMPLEMENT_CLASS(DIntermissionScreenScroller)
|
||||||
IMPLEMENT_CLASS(DIntermissionController)
|
IMPLEMENT_CLASS(DIntermissionController)
|
||||||
|
|
||||||
void DIntermissionScreen::Init(FIntermissionDescriptor *desc)
|
void DIntermissionScreen::Init(FIntermissionDescriptor *desc)
|
||||||
|
|
|
@ -39,6 +39,32 @@ struct FICastSound
|
||||||
FSoundID mSound;
|
FSoundID mSound;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum EFadeType
|
||||||
|
{
|
||||||
|
FADE_In,
|
||||||
|
FADE_Out,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum EWipeType
|
||||||
|
{
|
||||||
|
WIPE_Default,
|
||||||
|
WIPE_Cross,
|
||||||
|
WIPE_Melt,
|
||||||
|
WIPE_Burn
|
||||||
|
};
|
||||||
|
|
||||||
|
enum EScrollDir
|
||||||
|
{
|
||||||
|
SCROLL_Left,
|
||||||
|
SCROLL_Right,
|
||||||
|
SCROLL_Up,
|
||||||
|
SCROLL_Down,
|
||||||
|
};
|
||||||
|
|
||||||
|
// actions that don't create objects
|
||||||
|
#define WIPER_ID ((const PClass*)intptr_t(-1))
|
||||||
|
#define TITLE_ID ((const PClass*)intptr_t(-2))
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
struct FIntermissionAction
|
struct FIntermissionAction
|
||||||
|
@ -51,6 +77,7 @@ struct FIntermissionAction
|
||||||
int mCdId;
|
int mCdId;
|
||||||
int mDuration;
|
int mDuration;
|
||||||
FString mBackground;
|
FString mBackground;
|
||||||
|
FString mPalette;
|
||||||
FString mSound;
|
FString mSound;
|
||||||
bool mFlatfill;
|
bool mFlatfill;
|
||||||
TArray<FIntermissionPatch> mOverlays;
|
TArray<FIntermissionPatch> mOverlays;
|
||||||
|
@ -62,16 +89,6 @@ struct FIntermissionAction
|
||||||
|
|
||||||
struct FIntermissionActionFader : public FIntermissionAction
|
struct FIntermissionActionFader : public FIntermissionAction
|
||||||
{
|
{
|
||||||
enum EFadeType
|
|
||||||
{
|
|
||||||
FADE_In,
|
|
||||||
FADE_Out,
|
|
||||||
FADE_Cross,
|
|
||||||
FADE_Melt,
|
|
||||||
FADE_Burn,
|
|
||||||
FADE_Wipe
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef FIntermissionAction Super;
|
typedef FIntermissionAction Super;
|
||||||
|
|
||||||
EFadeType mFadeType;
|
EFadeType mFadeType;
|
||||||
|
@ -80,6 +97,16 @@ struct FIntermissionActionFader : public FIntermissionAction
|
||||||
virtual bool ParseKey(FScanner &sc);
|
virtual bool ParseKey(FScanner &sc);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct FIntermissionActionWiper : public FIntermissionAction
|
||||||
|
{
|
||||||
|
typedef FIntermissionAction Super;
|
||||||
|
|
||||||
|
EWipeType mWipeType;
|
||||||
|
|
||||||
|
FIntermissionActionWiper();
|
||||||
|
virtual bool ParseKey(FScanner &sc);
|
||||||
|
};
|
||||||
|
|
||||||
struct FIntermissionActionTextscreen : public FIntermissionAction
|
struct FIntermissionActionTextscreen : public FIntermissionAction
|
||||||
{
|
{
|
||||||
typedef FIntermissionAction Super;
|
typedef FIntermissionAction Super;
|
||||||
|
@ -96,10 +123,8 @@ struct FIntermissionActionCast : public FIntermissionAction
|
||||||
{
|
{
|
||||||
typedef FIntermissionAction Super;
|
typedef FIntermissionAction Super;
|
||||||
|
|
||||||
FString mWalking;
|
FString mName;
|
||||||
FString mAttacking1;
|
FName mCastClass;
|
||||||
FString mAttacking2;
|
|
||||||
FString mDying;
|
|
||||||
TArray<FCastSound> mCastSounds;
|
TArray<FCastSound> mCastSounds;
|
||||||
|
|
||||||
FIntermissionActionCast();
|
FIntermissionActionCast();
|
||||||
|
@ -158,7 +183,7 @@ class DIntermissionScreenFader : public DIntermissionScreen
|
||||||
|
|
||||||
int mTotalTime;
|
int mTotalTime;
|
||||||
int mCounter;
|
int mCounter;
|
||||||
int mType;
|
EFadeType mType;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
@ -192,10 +217,7 @@ class DIntermissionScreenCast : public DIntermissionScreen
|
||||||
{
|
{
|
||||||
DECLARE_CLASS (DIntermissionScreenCast, DIntermissionScreen)
|
DECLARE_CLASS (DIntermissionScreenCast, DIntermissionScreen)
|
||||||
|
|
||||||
FState *mWalking;
|
FString mName;
|
||||||
FState *mAttacking1;
|
|
||||||
FState *mAttacking2;
|
|
||||||
FState *mDying;
|
|
||||||
TArray<FICastSound> mCastSounds;
|
TArray<FICastSound> mCastSounds;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -89,7 +89,7 @@ bool FIntermissionAction::ParseKey(FScanner &sc)
|
||||||
sc.MustGetToken('=');
|
sc.MustGetToken('=');
|
||||||
if (!sc.CheckToken('-'))
|
if (!sc.CheckToken('-'))
|
||||||
{
|
{
|
||||||
sc.MustGetToken(TK_FloatConst);
|
sc.MustGetFloat();
|
||||||
mDuration = xs_RoundToInt(sc.Float*TICRATE);
|
mDuration = xs_RoundToInt(sc.Float*TICRATE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -109,6 +109,11 @@ bool FIntermissionAction::ParseKey(FScanner &sc)
|
||||||
{
|
{
|
||||||
sc.MustGetToken(TK_IntConst);
|
sc.MustGetToken(TK_IntConst);
|
||||||
mFlatfill = !!sc.Number;
|
mFlatfill = !!sc.Number;
|
||||||
|
if (sc.CheckToken(','))
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_StringConst);
|
||||||
|
mPalette = sc.String;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -151,7 +156,9 @@ bool FIntermissionAction::ParseKey(FScanner &sc)
|
||||||
|
|
||||||
FIntermissionActionFader::FIntermissionActionFader()
|
FIntermissionActionFader::FIntermissionActionFader()
|
||||||
{
|
{
|
||||||
mFadeType = FADE_Cross;
|
mSize = sizeof(FIntermissionActionFader);
|
||||||
|
mClass = RUNTIME_CLASS(DIntermissionScreenFader);
|
||||||
|
mFadeType = FADE_In;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool FIntermissionActionFader::ParseKey(FScanner &sc)
|
bool FIntermissionActionFader::ParseKey(FScanner &sc)
|
||||||
|
@ -164,10 +171,6 @@ bool FIntermissionActionFader::ParseKey(FScanner &sc)
|
||||||
const FT[] = {
|
const FT[] = {
|
||||||
{ "FadeIn", FADE_In },
|
{ "FadeIn", FADE_In },
|
||||||
{ "FadeOut", FADE_Out },
|
{ "FadeOut", FADE_Out },
|
||||||
{ "Crossfade", FADE_Cross },
|
|
||||||
{ "Melt", FADE_Melt },
|
|
||||||
{ "Burn", FADE_Burn },
|
|
||||||
{ "Wipe", FADE_Wipe },
|
|
||||||
{ NULL, FADE_In }
|
{ NULL, FADE_In }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -175,13 +178,52 @@ bool FIntermissionActionFader::ParseKey(FScanner &sc)
|
||||||
{
|
{
|
||||||
sc.MustGetToken('=');
|
sc.MustGetToken('=');
|
||||||
sc.MustGetToken(TK_Identifier);
|
sc.MustGetToken(TK_Identifier);
|
||||||
int v = sc.MustMatchString(&FT[0].Name, sizeof(FT[0]));
|
int v = sc.MatchString(&FT[0].Name, sizeof(FT[0]));
|
||||||
if (v != -1) mFadeType = FT[v].Type;
|
if (v != -1) mFadeType = FT[v].Type;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else return Super::ParseKey(sc);
|
else return Super::ParseKey(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// FIntermissionActionWiper
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FIntermissionActionWiper::FIntermissionActionWiper()
|
||||||
|
{
|
||||||
|
mSize = sizeof(FIntermissionActionWiper);
|
||||||
|
mClass = WIPER_ID;
|
||||||
|
mWipeType = WIPE_Default;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FIntermissionActionWiper::ParseKey(FScanner &sc)
|
||||||
|
{
|
||||||
|
struct WipeType
|
||||||
|
{
|
||||||
|
const char *Name;
|
||||||
|
EWipeType Type;
|
||||||
|
}
|
||||||
|
const FT[] = {
|
||||||
|
{ "Crossfade", WIPE_Cross },
|
||||||
|
{ "Melt", WIPE_Melt },
|
||||||
|
{ "Burn", WIPE_Burn },
|
||||||
|
{ "Default", WIPE_Default },
|
||||||
|
{ NULL, WIPE_Default }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sc.Compare("WipeType"))
|
||||||
|
{
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
int v = sc.MatchString(&FT[0].Name, sizeof(FT[0]));
|
||||||
|
if (v != -1) mWipeType = FT[v].Type;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return Super::ParseKey(sc);
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// FIntermissionActionFader
|
// FIntermissionActionFader
|
||||||
|
@ -190,6 +232,8 @@ bool FIntermissionActionFader::ParseKey(FScanner &sc)
|
||||||
|
|
||||||
FIntermissionActionTextscreen::FIntermissionActionTextscreen()
|
FIntermissionActionTextscreen::FIntermissionActionTextscreen()
|
||||||
{
|
{
|
||||||
|
mSize = sizeof(FIntermissionActionTextscreen);
|
||||||
|
mClass = RUNTIME_CLASS(DIntermissionScreenText);
|
||||||
mTextSpeed = 2;
|
mTextSpeed = 2;
|
||||||
mTextX = -1; // use gameinfo defaults
|
mTextX = -1; // use gameinfo defaults
|
||||||
mTextY = -1;
|
mTextY = -1;
|
||||||
|
@ -218,8 +262,10 @@ bool FIntermissionActionTextscreen::ParseKey(FScanner &sc)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptMessage("Unknown text lump '%s'", sc.String);
|
// only print an error if coming from a PWAD
|
||||||
mText = "(no message)";
|
if (Wads.GetLumpFile(sc.LumpNum) > 1)
|
||||||
|
sc.ScriptMessage("Unknown text lump '%s'", sc.String);
|
||||||
|
mText.Format("Unknown text lump '%s'", sc.String);
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -244,44 +290,226 @@ bool FIntermissionActionTextscreen::ParseKey(FScanner &sc)
|
||||||
else return Super::ParseKey(sc);
|
else return Super::ParseKey(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// FIntermissionAction
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FIntermissionActionCast::FIntermissionActionCast()
|
||||||
void FMapInfoParser::ParseIntermission()
|
|
||||||
{
|
{
|
||||||
FIntermissionAction *desc;
|
mSize = sizeof(FIntermissionActionCast);
|
||||||
|
mClass = RUNTIME_CLASS(DIntermissionScreenCast);
|
||||||
|
}
|
||||||
|
|
||||||
while (!sc.CheckString("}"))
|
bool FIntermissionActionCast::ParseKey(FScanner &sc)
|
||||||
|
{
|
||||||
|
if (sc.Compare("CastName"))
|
||||||
{
|
{
|
||||||
sc.MustGetString();
|
sc.MustGetToken('=');
|
||||||
if (sc.Compare("image"))
|
sc.MustGetToken(TK_StringConst);
|
||||||
{
|
mName = sc.String;
|
||||||
desc = new FIntermissionAction;
|
return true;
|
||||||
}
|
}
|
||||||
else if (sc.Compare("scroller"))
|
else if (sc.Compare("CastClass"))
|
||||||
{
|
{
|
||||||
}
|
sc.MustGetToken('=');
|
||||||
else if (sc.Compare("cast"))
|
sc.MustGetToken(TK_StringConst);
|
||||||
{
|
mCastClass = sc.String;
|
||||||
}
|
return true;
|
||||||
else if (sc.Compare("Fader"))
|
}
|
||||||
{
|
else if (sc.Compare("AttackSound"))
|
||||||
desc = new FIntermissionActionFader;
|
{
|
||||||
}
|
static const char *const seqs[] = {"Missile", "Melee", NULL};
|
||||||
else if (sc.Compare("TextScreen"))
|
FCastSound *cs = &mCastSounds[mCastSounds.Reserve(1)];
|
||||||
{
|
sc.MustGetToken('=');
|
||||||
desc = new FIntermissionActionTextscreen;
|
sc.MustGetToken(TK_StringConst);
|
||||||
}
|
cs->mSequence = (BYTE)sc.MatchString(seqs);
|
||||||
else if (sc.Compare("GotoTitle"))
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
cs->mIndex = (BYTE)sc.Number;
|
||||||
|
sc.MustGetToken(',');
|
||||||
|
sc.MustGetToken(TK_StringConst);
|
||||||
|
cs->mSound = sc.String;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return Super::ParseKey(sc);
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// FIntermissionActionScroller
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FIntermissionActionScroller::FIntermissionActionScroller()
|
||||||
|
{
|
||||||
|
mSize = sizeof(FIntermissionActionScroller);
|
||||||
|
mClass = RUNTIME_CLASS(DIntermissionScreenScroller);
|
||||||
|
mScrollDelay = 0;
|
||||||
|
mScrollTime = 640;
|
||||||
|
mScrollDir = SCROLL_Right;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool FIntermissionActionScroller::ParseKey(FScanner &sc)
|
||||||
|
{
|
||||||
|
struct ScrollType
|
||||||
|
{
|
||||||
|
const char *Name;
|
||||||
|
EScrollDir Type;
|
||||||
|
}
|
||||||
|
const ST[] = {
|
||||||
|
{ "Left", SCROLL_Left },
|
||||||
|
{ "Right", SCROLL_Right },
|
||||||
|
{ "Up", SCROLL_Up },
|
||||||
|
{ "Down", SCROLL_Down },
|
||||||
|
{ NULL, SCROLL_Left }
|
||||||
|
};
|
||||||
|
|
||||||
|
if (sc.Compare("ScrollDirection"))
|
||||||
|
{
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
int v = sc.MatchString(&ST[0].Name, sizeof(ST[0]));
|
||||||
|
if (v != -1) mScrollDir = ST[v].Type;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("InitialDelay"))
|
||||||
|
{
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
if (!sc.CheckToken('-'))
|
||||||
{
|
{
|
||||||
|
sc.MustGetFloat();
|
||||||
|
mScrollDelay = xs_RoundToInt(sc.Float*TICRATE);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
sc.ScriptMessage("Unknown intermission type '%s'", sc.String);
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
mScrollDelay = sc.Number;
|
||||||
}
|
}
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (sc.Compare("ScrollTime"))
|
||||||
|
{
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
if (!sc.CheckToken('-'))
|
||||||
|
{
|
||||||
|
sc.MustGetFloat();
|
||||||
|
mScrollTime = xs_RoundToInt(sc.Float*TICRATE);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_IntConst);
|
||||||
|
mScrollTime = sc.Number;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("Background2"))
|
||||||
|
{
|
||||||
|
sc.MustGetToken('=');
|
||||||
|
sc.MustGetToken(TK_StringConst);
|
||||||
|
mSecondPic = sc.String;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
else return Super::ParseKey(sc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ParseIntermission
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
FIntermissionAction *FMapInfoParser::ParseIntermissionAction()
|
||||||
|
{
|
||||||
|
FIntermissionAction *desc = NULL;
|
||||||
|
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
if (sc.Compare("image"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionAction;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("scroller"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionActionScroller;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("cast"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionActionCast;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("Fader"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionActionFader;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("Wiper"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionActionWiper;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("TextScreen"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionActionTextscreen;
|
||||||
|
}
|
||||||
|
else if (sc.Compare("GotoTitle"))
|
||||||
|
{
|
||||||
|
desc = new FIntermissionAction;
|
||||||
|
desc->mClass = TITLE_ID;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
sc.ScriptMessage("Unknown intermission type '%s'", sc.String);
|
||||||
|
}
|
||||||
|
|
||||||
|
sc.MustGetToken('{');
|
||||||
|
while (!sc.CheckToken('}'))
|
||||||
|
{
|
||||||
|
bool success = false;
|
||||||
|
if (!sc.CheckToken(TK_Sound))
|
||||||
|
{
|
||||||
|
sc.MustGetToken(TK_Identifier);
|
||||||
|
}
|
||||||
|
if (desc != NULL)
|
||||||
|
{
|
||||||
|
success = desc->ParseKey(sc);
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
sc.ScriptMessage("Unknown key name '%s'\n", sc.String);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!success) SkipToNext();
|
||||||
|
}
|
||||||
|
return desc;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// ParseIntermission
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
|
void FMapInfoParser::ParseIntermission()
|
||||||
|
{
|
||||||
|
sc.MustGetString();
|
||||||
|
FName intname = sc.String;
|
||||||
|
|
||||||
|
FIntermissionDescriptor ** pDesc = IntermissionDescriptors.CheckKey(intname);
|
||||||
|
if (pDesc != NULL && *pDesc != NULL) delete *pDesc;
|
||||||
|
|
||||||
|
FIntermissionDescriptor *desc = new FIntermissionDescriptor();
|
||||||
|
IntermissionDescriptors[intname] = desc;
|
||||||
|
|
||||||
|
sc.MustGetToken('{');
|
||||||
|
while (!sc.CheckToken('}'))
|
||||||
|
{
|
||||||
|
FIntermissionAction *ac = ParseIntermissionAction();
|
||||||
|
if (ac != NULL) desc->mActions.Push(ac);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// Parse old style endsequence
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
struct EndSequence
|
struct EndSequence
|
||||||
{
|
{
|
||||||
|
@ -383,6 +611,12 @@ FName FMapInfoParser::ParseEndGame()
|
||||||
return FName(seq);
|
return FName(seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================
|
||||||
|
//
|
||||||
|
// Checks map name for end sequence
|
||||||
|
//
|
||||||
|
//==========================================================================
|
||||||
|
|
||||||
FName FMapInfoParser::CheckEndSequence()
|
FName FMapInfoParser::CheckEndSequence()
|
||||||
{
|
{
|
||||||
const char *seqname = NULL;
|
const char *seqname = NULL;
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// MAPINFO for Chex Quest
|
// MAPINFO for Chex Quest
|
||||||
#include "mapinfo/common.txt"
|
include "mapinfo/common.txt"
|
||||||
|
|
||||||
gameinfo
|
gameinfo
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,7 +27,7 @@ Intermission Inter_Bunny
|
||||||
{
|
{
|
||||||
Scroller
|
Scroller
|
||||||
{
|
{
|
||||||
FadeType = Right
|
ScrollDirection = Right
|
||||||
Background = "PFUB1"
|
Background = "PFUB1"
|
||||||
Background2 = "PFUB2"
|
Background2 = "PFUB2"
|
||||||
Music = "$MUSIC_BUNNY"
|
Music = "$MUSIC_BUNNY"
|
||||||
|
@ -94,8 +94,7 @@ Intermission Inter_Underwater
|
||||||
{
|
{
|
||||||
Image
|
Image
|
||||||
{
|
{
|
||||||
Background = "E2END"
|
Background = "E2END", 0, "E2PAL"
|
||||||
Palette = "E2PAL"
|
|
||||||
Time = 10000000 // advance only manually
|
Time = 10000000 // advance only manually
|
||||||
}
|
}
|
||||||
GotoTitle
|
GotoTitle
|
||||||
|
@ -107,7 +106,7 @@ Intermission Inter_Demonscroll
|
||||||
{
|
{
|
||||||
Scroller
|
Scroller
|
||||||
{
|
{
|
||||||
FadeType = Up
|
ScrollDirection = Up
|
||||||
Background = "FINAL1"
|
Background = "FINAL1"
|
||||||
Background2 = "FINAL2"
|
Background2 = "FINAL2"
|
||||||
InitialDelay = 2
|
InitialDelay = 2
|
||||||
|
@ -119,7 +118,7 @@ Intermission Inter_BuyStrife
|
||||||
{
|
{
|
||||||
Scroller
|
Scroller
|
||||||
{
|
{
|
||||||
FadeType = Right
|
ScrollDirection = Right
|
||||||
Background = "CREDIT"
|
Background = "CREDIT"
|
||||||
Background2 = "VELLOGO"
|
Background2 = "VELLOGO"
|
||||||
InitialDelay = -230
|
InitialDelay = -230
|
||||||
|
@ -131,125 +130,126 @@ Intermission Inter_Cast
|
||||||
{
|
{
|
||||||
Image
|
Image
|
||||||
{
|
{
|
||||||
// This is only here to initialize the background
|
// This is only here to initialize the background and the music
|
||||||
Background = "$bgcastcall"
|
Background = "$bgcastcall"
|
||||||
Time = -1
|
Time = -1
|
||||||
Music = "$MUSIC_EVIL"
|
Music = "$MUSIC_EVIL"
|
||||||
Link = Doom2Cast
|
Link = Doom2Cast
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Intermission Doom2Cast
|
Intermission Doom2Cast
|
||||||
{
|
{
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Zombieman"
|
CastClass = "Zombieman"
|
||||||
Name = "$CC_ZOMBIE"
|
CastName = "$CC_ZOMBIE"
|
||||||
Sound = "Missile", 1, "grunt/attack"
|
AttackSound = "Missile", 1, "grunt/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "ShotgunGuy"
|
CastClass = "ShotgunGuy"
|
||||||
Name = "$CC_SHOTGUN"
|
CastName = "$CC_SHOTGUN"
|
||||||
Sound = "Missile", 1, "shotguy/attack"
|
AttackSound = "Missile", 1, "shotguy/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "ChaingunGuy"
|
CastClass = "ChaingunGuy"
|
||||||
Name = "$CC_HEAVY"
|
CastName = "$CC_HEAVY"
|
||||||
Sound = "Missile", 1, "chainguy/attack"
|
AttackSound = "Missile", 1, "chainguy/attack"
|
||||||
Sound = "Missile", 2, "chainguy/attack"
|
AttackSound = "Missile", 2, "chainguy/attack"
|
||||||
Sound = "Missile", 3, "chainguy/attack"
|
AttackSound = "Missile", 3, "chainguy/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "DoomImp"
|
CastClass = "DoomImp"
|
||||||
Name = "$CC_IMP"
|
CastName = "$CC_IMP"
|
||||||
Sound = "Missile", 2, "imp/attack"
|
AttackSound = "Missile", 2, "imp/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Demon"
|
CastClass = "Demon"
|
||||||
Name = "$CC_DEMON"
|
CastName = "$CC_DEMON"
|
||||||
Sound = "Melee", 1, "demon/melee"
|
AttackSound = "Melee", 1, "demon/melee"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "LostSoul"
|
CastClass = "LostSoul"
|
||||||
Name = "$CC_LOST"
|
CastName = "$CC_LOST"
|
||||||
Sound = "Missile", 1, "grunt/attack"
|
AttackSound = "Missile", 1, "grunt/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Cacodemon"
|
CastClass = "Cacodemon"
|
||||||
Name = "$CC_CACO"
|
CastName = "$CC_CACO"
|
||||||
Sound = "Missile", 1, "caco/attack"
|
AttackSound = "Missile", 1, "caco/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "HellKnight"
|
CastClass = "HellKnight"
|
||||||
Name = "$CC_HELL"
|
CastName = "$CC_HELL"
|
||||||
Sound = "Missile", 1, "baron/attack"
|
AttackSound = "Missile", 1, "baron/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "BaronOfHell"
|
CastClass = "BaronOfHell"
|
||||||
Name = "$CC_BARON"
|
CastName = "$CC_BARON"
|
||||||
Sound = "Missile", 1, "baron/attack"
|
AttackSound = "Missile", 1, "baron/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Arachnotron"
|
CastClass = "Arachnotron"
|
||||||
Name = "$CC_ARACH"
|
CastName = "$CC_ARACH"
|
||||||
Sound = "Missile", 1, "baby/attack"
|
AttackSound = "Missile", 1, "baby/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "PainElemental"
|
CastClass = "PainElemental"
|
||||||
Name = "$CC_PAIN"
|
CastName = "$CC_PAIN"
|
||||||
Sound = "Missile", 2, "skull/melee"
|
AttackSound = "Missile", 2, "skull/melee"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Revenant"
|
CastClass = "Revenant"
|
||||||
Name = "$CC_REVEN"
|
CastName = "$CC_REVEN"
|
||||||
Sound = "Missile", 1, "skeleton/attack"
|
AttackSound = "Missile", 1, "skeleton/attack"
|
||||||
Sound = "Melee", 1, "skeleton/swing"
|
AttackSound = "Melee", 1, "skeleton/swing"
|
||||||
Sound = "Melee", 3, "skeleton/melee"
|
AttackSound = "Melee", 3, "skeleton/melee"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Fatso"
|
CastClass = "Fatso"
|
||||||
Name = "$CC_FATSO"
|
CastName = "$CC_FATSO"
|
||||||
Sound = "Missile", 1, "fatso/attack"
|
AttackSound = "Missile", 1, "fatso/attack"
|
||||||
Sound = "Missile", 4, "fatso/attack"
|
AttackSound = "Missile", 4, "fatso/attack"
|
||||||
Sound = "Missile", 7, "fatso/attack"
|
AttackSound = "Missile", 7, "fatso/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Archvile"
|
CastClass = "Archvile"
|
||||||
Name = "$CC_ARCH"
|
CastName = "$CC_ARCH"
|
||||||
Sound = "Missile", 1, "vile/start"
|
AttackSound = "Missile", 1, "vile/start"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "SpiderMastermind"
|
CastClass = "SpiderMastermind"
|
||||||
Name = "$CC_SPIDER"
|
CastName = "$CC_SPIDER"
|
||||||
Sound = "Missile", 1, "spider/attack"
|
AttackSound = "Missile", 1, "spider/attack"
|
||||||
Sound = "Missile", 2, "spider/attack"
|
AttackSound = "Missile", 2, "spider/attack"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "Cyberdemon"
|
CastClass = "Cyberdemon"
|
||||||
Name = "$CC_CYBER"
|
CastName = "$CC_CYBER"
|
||||||
Sound = "Missile", 1, "weapons/rocklf"
|
AttackSound = "Missile", 1, "weapons/rocklf"
|
||||||
Sound = "Missile", 3, "weapons/rocklf"
|
AttackSound = "Missile", 3, "weapons/rocklf"
|
||||||
Sound = "Missile", 5, "weapons/rocklf"
|
AttackSound = "Missile", 5, "weapons/rocklf"
|
||||||
}
|
}
|
||||||
Cast
|
Cast
|
||||||
{
|
{
|
||||||
Class = "DoomPlayer"
|
CastClass = "DoomPlayer"
|
||||||
Name = "$CC_HERO"
|
CastName = "$CC_HERO"
|
||||||
Sound = "Missile", 0, "weapons/sshotf"
|
AttackSound = "Missile", 0, "weapons/sshotf"
|
||||||
Link = Doom2Cast // restart cast call
|
Link = Doom2Cast // restart cast call
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -338,12 +338,14 @@ Intermission Inter_Strife_Good
|
||||||
Background = "SS4F4"
|
Background = "SS4F4"
|
||||||
Time = 28
|
Time = 28
|
||||||
}
|
}
|
||||||
Fader
|
Wiper
|
||||||
|
{
|
||||||
|
WipeType = Crossfade
|
||||||
|
}
|
||||||
|
Image
|
||||||
{
|
{
|
||||||
Background = "CREDIT"
|
|
||||||
Music = "D_FAST"
|
Music = "D_FAST"
|
||||||
Time = 2
|
Background = "CREDIT"
|
||||||
FadeType = Crossfade
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -369,12 +371,14 @@ Intermission Inter_Strife_Sad
|
||||||
Sound = "svox/ss603a"
|
Sound = "svox/ss603a"
|
||||||
Time = 9
|
Time = 9
|
||||||
}
|
}
|
||||||
Fader
|
Wiper
|
||||||
|
{
|
||||||
|
WipeType = Crossfade
|
||||||
|
}
|
||||||
|
Image
|
||||||
{
|
{
|
||||||
Background = "CREDIT"
|
|
||||||
Music = "D_FAST"
|
Music = "D_FAST"
|
||||||
Time = 2
|
Background = "CREDIT"
|
||||||
FadeType = Crossfade
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -399,12 +403,14 @@ Intermission Inter_Strife_Lose
|
||||||
Sound = "svox/ss503b"
|
Sound = "svox/ss503b"
|
||||||
Time = 11
|
Time = 11
|
||||||
}
|
}
|
||||||
Fader
|
Wiper
|
||||||
|
{
|
||||||
|
WipeType = Crossfade
|
||||||
|
}
|
||||||
|
Image
|
||||||
{
|
{
|
||||||
Background = "CREDIT"
|
|
||||||
Music = "D_FAST"
|
Music = "D_FAST"
|
||||||
Time = 2
|
Background = "CREDIT"
|
||||||
FadeType = Crossfade
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
#include "mapinfo/common.txt"
|
include "mapinfo/common.txt"
|
||||||
|
|
||||||
gameinfo
|
gameinfo
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// MAPINFO for Heretic (Shareware and Retail)
|
// MAPINFO for Heretic (Shareware and Retail)
|
||||||
#include "mapinfo/common.txt"
|
include "mapinfo/common.txt"
|
||||||
|
|
||||||
gameinfo
|
gameinfo
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// A bare-bones MAPINFO for Hexen.
|
// A bare-bones MAPINFO for Hexen.
|
||||||
#include "mapinfo/common.txt"
|
include "mapinfo/common.txt"
|
||||||
|
|
||||||
// Most of the MAPINFO is still in hexen.wad.
|
// Most of the MAPINFO is still in hexen.wad.
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
// MAPINFO for Strife (full version and teaser)
|
// MAPINFO for Strife (full version and teaser)
|
||||||
#include "mapinfo/common.txt"
|
include "mapinfo/common.txt"
|
||||||
|
|
||||||
gameinfo
|
gameinfo
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue