Merge branch 'master' into modern

This commit is contained in:
alexey.lysiuk 2018-06-29 17:51:10 +03:00
commit 651e735246
35 changed files with 191 additions and 29 deletions

View file

@ -1567,7 +1567,11 @@ DBaseStatusBar *CreateCustomStatusBar(int scriptno)
auto script = SBarInfoScript[scriptno];
if (script == nullptr) return nullptr;
auto sbar = (DBaseStatusBar*)PClass::FindClass("SBarInfoWrapper")->CreateNew();
PClass *sbarclass = PClass::FindClass("SBarInfoWrapper");
assert(sbarclass != nullptr);
assert(sbarclass->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)));
auto sbar = (DBaseStatusBar*)sbarclass->CreateNew();
auto core = new DSBarInfo(sbar, script);
sbar->PointerVar<DSBarInfo>("core") = core;
sbar->SetSize(script->height, script->_resW, script->_resH);

View file

@ -247,6 +247,31 @@ static void CreateBaseStatusBar()
StatusBar->SetSize(0);
}
static void CreateGameInfoStatusBar(bool &shouldWarn)
{
auto cls = PClass::FindClass(gameinfo.statusbarclass);
if (cls == nullptr)
{
if (shouldWarn)
{
Printf(TEXTCOLOR_RED "Unknown status bar class \"%s\"\n", gameinfo.statusbarclass.GetChars());
shouldWarn = false;
}
}
else
{
if (cls->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)))
{
StatusBar = (DBaseStatusBar *)cls->CreateNew();
}
else if (shouldWarn)
{
Printf(TEXTCOLOR_RED "Status bar class \"%s\" is not derived from BaseStatusBar\n", gameinfo.statusbarclass.GetChars());
shouldWarn = false;
}
}
}
void ST_CreateStatusBar(bool bTitleLevel)
{
if (StatusBar != NULL)
@ -255,6 +280,8 @@ void ST_CreateStatusBar(bool bTitleLevel)
StatusBar = NULL;
}
bool shouldWarn = true;
if (bTitleLevel)
{
CreateBaseStatusBar();
@ -268,11 +295,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
int sbarinfofile = Wads.GetLumpFile(sbarinfolump);
if (gameinfo.statusbarclassfile >= gameinfo.statusbarfile && gameinfo.statusbarclassfile >= sbarinfofile)
{
auto cls = PClass::FindClass(gameinfo.statusbarclass);
if (cls != nullptr)
{
StatusBar = (DBaseStatusBar *)cls->CreateNew();
}
CreateGameInfoStatusBar(shouldWarn);
}
}
if (StatusBar == nullptr && SBarInfoScript[SCRIPT_CUSTOM] != nullptr)
@ -291,11 +314,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
// SBARINFO failed so try the current statusbarclass again.
if (StatusBar == nullptr)
{
auto cls = PClass::FindClass(gameinfo.statusbarclass);
if (cls != nullptr)
{
StatusBar = (DBaseStatusBar *)cls->CreateNew();
}
CreateGameInfoStatusBar(shouldWarn);
}
}
if (StatusBar == nullptr)
@ -311,6 +330,7 @@ void ST_CreateStatusBar(bool bTitleLevel)
auto cls = PClass::FindClass(defname);
if (cls != nullptr)
{
assert(cls->IsDescendantOf(RUNTIME_CLASS(DBaseStatusBar)));
StatusBar = (DBaseStatusBar *)cls->CreateNew();
}
}

View file

@ -555,11 +555,13 @@ void ProcessKeyboardEvent(NSEvent* theEvent)
return;
}
const bool isARepeat = [theEvent isARepeat];
if (k_allowfullscreentoggle
&& (kVK_ANSI_F == keyCode)
&& (NSCommandKeyMask & [theEvent modifierFlags])
&& (NSKeyDown == [theEvent type])
&& ![theEvent isARepeat])
&& !isARepeat)
{
ToggleFullscreen = !ToggleFullscreen;
return;
@ -569,7 +571,7 @@ void ProcessKeyboardEvent(NSEvent* theEvent)
{
ProcessKeyboardEventInMenu(theEvent);
}
else
else if (!isARepeat)
{
event_t event = {};

View file

@ -152,6 +152,7 @@ static void I_DetectOS()
case 11: name = "OS X El Capitan"; break;
case 12: name = "macOS Sierra"; break;
case 13: name = "macOS High Sierra"; break;
case 14: name = "macOS Mojave"; break;
}
char release[16] = "unknown";

View file

@ -65,6 +65,10 @@ void I_ShutdownGraphics ()
void I_InitGraphics ()
{
#ifdef __APPLE__
SDL_SetHint(SDL_HINT_VIDEO_MAC_FULLSCREEN_SPACES, "0");
#endif // __APPLE__
if (SDL_InitSubSystem (SDL_INIT_VIDEO) < 0)
{
I_FatalError ("Could not initialize SDL video:\n%s\n", SDL_GetError());

View file

@ -62,8 +62,6 @@ EXTERN_CVAR (Bool, fullscreen)
extern int WaitingForKey, chatmodeon;
extern constate_e ConsoleState;
static bool DownState[SDL_NUM_SCANCODES];
static const SDL_Keycode DIKToKeySym[256] =
{
0, SDLK_ESCAPE, SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6,
@ -188,10 +186,6 @@ static void I_CheckGUICapture ()
if (wantCapt != GUICapture)
{
GUICapture = wantCapt;
if (wantCapt)
{
memset (DownState, 0, sizeof(DownState));
}
ResetButtonStates();
}
}
@ -393,6 +387,11 @@ void MessagePump (const SDL_Event &sev)
case SDL_KEYUP:
if (!GUICapture)
{
if (sev.key.repeat)
{
break;
}
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
// Try to look up our key mapped key for conversion to DirectInput.
@ -422,17 +421,9 @@ void MessagePump (const SDL_Event &sev)
((kmod & KMOD_CTRL) ? GKM_CTRL : 0) |
((kmod & KMOD_ALT) ? GKM_ALT : 0);
if (event.subtype == EV_GUI_KeyDown)
if (event.subtype == EV_GUI_KeyDown && sev.key.repeat)
{
if (DownState[sev.key.keysym.scancode])
{
event.subtype = EV_GUI_KeyRepeat;
}
DownState[sev.key.keysym.scancode] = 1;
}
else
{
DownState[sev.key.keysym.scancode] = 0;
event.subtype = EV_GUI_KeyRepeat;
}
switch (sev.key.keysym.sym)

View file

@ -188,6 +188,17 @@ bool FWadFile::Open(bool quiet)
Lumps[i].Namespace = ns_global;
Lumps[i].Flags = Lumps[i].Compressed? LUMPF_COMPRESSED : 0;
Lumps[i].FullName = NULL;
// Check if the lump is within the WAD file and print a warning if not.
if (Lumps[i].Position + Lumps[i].LumpSize > wadSize || Lumps[i].Position < 0 || Lumps[i].LumpSize < 0)
{
if (Lumps[i].LumpSize != 0)
{
Printf(PRINT_HIGH, "%s: Lump %s contains invalid positioning info and will be ignored\n", Filename, Lumps[i].Name);
Lumps[i].Name[0] = 0;
}
Lumps[i].LumpSize = Lumps[i].Position = 0;
}
}
delete[] fileinfo;

View file

@ -59,6 +59,7 @@ F84AB4557464A383E93F37CD3A82AC48 // MM2 map03
71C2E6D9CFA3D8750C6A9599FB2453BD // Hacx map03: There are some switches behind
96368EB950E33AF62EA6423434E3CEF7 // HacX map17: shootable covers in these levels
BA530202AF0BA0C6CBAE6A0C7076FB72 // Requiem map04
E2819F69CB79BA66E0ACBCD7DE652F9D // Hell to Pay MAP32: Exit switch pressable through lasers
{
useblocking
}

View file

@ -598,6 +598,27 @@ CC_SPIDER = "THE SPIDER MASTERMIND";
CC_CYBER = "THE CYBERDEMON";
CC_HERO = "OUR HERO";
// Friendly names
FN_ZOMBIE = "Zombieman";
FN_SHOTGUN = "Sergeant";
FN_HEAVY = "Chaingunner";
FN_IMP = "Imp";
FN_DEMON = "Demon";
FN_SPECTRE = "Spectre";
FN_LOST = "Lost Soul";
FN_CACO = "Cacodemon";
FN_HELL = "Hell Knight";
FN_BARON = "Baron of Hell";
FN_ARACH = "Arachnotron";
FN_PAIN = "Pain Elemental";
FN_REVEN = "Revenant";
FN_MANCU = "Mancubus";
FN_ARCH = "Arch-vile";
FN_SPIDER = "Spider Mastermind";
FN_CYBER = "Cyberdemon";
FN_WOLFSS = "Nazi";
FN_DOG = "Dog";
// New strings from BOOM
PD_BLUEC = "You need a blue card to open this door";
PD_REDC = "You need a red card to open this door";
@ -1300,6 +1321,20 @@ TXT_IMTIME = "TIME";
RAVENQUITMSG = "ARE YOU SURE YOU WANT TO QUIT?";
// Friendly names
FN_CHICKEN = "Chicken";
FN_BEAST = "Weredragon";
FN_CLINK = "Sabreclaw";
FN_DSPARIL = "D'Sparil";
FN_HERETICIMP = "Gargoyle";
FN_IRONLICH = "Ironlich";
FN_BONEKNIGHT = "Undead Warrior";
FN_MINOTAUR = "Maulotaur";
FN_MUMMY = "Golem";
FN_MUMMYLEADER = "Nitrogolem";
FN_SNAKE = "Ophidian";
FN_WIZARD = "Wizard";
// Hexen strings
// Mana

View file

@ -21,6 +21,7 @@ class Arachnotron : Actor
DeathSound "baby/death";
ActiveSound "baby/active";
Obituary "$OB_BABY";
Tag "$FN_ARACH";
}
States
{

View file

@ -25,6 +25,7 @@ class Archvile : Actor
ActiveSound "vile/active";
MeleeSound "vile/stop";
Obituary "$OB_VILE";
Tag "$FN_ARCH";
}
States
{

View file

@ -22,6 +22,7 @@ class BaronOfHell : Actor
ActiveSound "baron/active";
Obituary "$OB_BARON";
HitObituary "$OB_BARONHIT";
Tag "$FN_BARON";
}
States
{
@ -72,6 +73,7 @@ class HellKnight : BaronOfHell
DeathSound "knight/death";
HitObituary "$OB_KNIGHTHIT";
Obituary "$OB_KNIGHT";
Tag "$FN_HELL";
}
States
{

View file

@ -21,6 +21,7 @@ class Cacodemon : Actor
ActiveSound "caco/active";
Obituary "$OB_CACO";
HitObituary "$OB_CACOHIT";
Tag "$FN_CACO";
}
States
{

View file

@ -27,6 +27,7 @@ class Cyberdemon : Actor
DeathSound "cyber/death";
ActiveSound "cyber/active";
Obituary "$OB_CYBORG";
Tag "$FN_CYBER";
}
States
{

View file

@ -21,6 +21,7 @@ class Demon : Actor
DeathSound "demon/death";
ActiveSound "demon/active";
Obituary "$OB_DEMONHIT";
Tag "$FN_DEMON";
}
States
{
@ -71,6 +72,7 @@ class Spectre : Demon
DeathSound "spectre/death";
ActiveSound "spectre/active";
HitObituary "$OB_SPECTREHIT";
Tag "$FN_SPECTRE";
}
}

View file

@ -21,6 +21,7 @@ class DoomImp : Actor
ActiveSound "imp/active";
HitObituary "$OB_IMPHIT";
Obituary "$OB_IMP";
Tag "$FN_IMP";
}
States
{

View file

@ -21,6 +21,7 @@ class Fatso : Actor
DeathSound "fatso/death";
ActiveSound "fatso/active";
Obituary "$OB_FATSO";
Tag "$FN_MANCU";
}
States
{

View file

@ -22,6 +22,7 @@ class LostSoul : Actor
ActiveSound "skull/active";
RenderStyle "SoulTrans";
Obituary "$OB_SKULL";
Tag "$FN_LOST";
}
States
{

View file

@ -20,6 +20,7 @@ class PainElemental : Actor
PainSound "pain/pain";
DeathSound "pain/death";
ActiveSound "pain/active";
Tag "$FN_PAIN";
}
States
{

View file

@ -21,6 +21,7 @@ class ZombieMan : Actor
DeathSound "grunt/death";
ActiveSound "grunt/active";
Obituary "$OB_ZOMBIE";
Tag "$FN_ZOMBIE";
DropItem "Clip";
}
States
@ -84,6 +85,7 @@ class ShotgunGuy : Actor
DeathSound "shotguy/death";
ActiveSound "shotguy/active";
Obituary "$OB_SHOTGUY";
Tag "$FN_SHOTGUN";
DropItem "Shotgun";
}
States
@ -147,6 +149,7 @@ class ChaingunGuy : Actor
ActiveSound "chainguy/active";
AttackSound "chainguy/attack";
Obituary "$OB_CHAINGUY";
Tag "$FN_HEAVY";
Dropitem "Chaingun";
}
States
@ -209,6 +212,7 @@ class WolfensteinSS : Actor
ActiveSound "wolfss/active";
AttackSound "wolfss/attack";
Obituary "$OB_WOLFSS";
Tag "$FN_WOLFSS";
Dropitem "Clip";
}
States

View file

@ -24,6 +24,7 @@ class Revenant : Actor
MeleeSound "skeleton/melee";
HitObituary "$OB_UNDEADHIT";
Obituary "$OB_UNDEAD";
Tag "$FN_REVEN";
}
States
{

View file

@ -26,6 +26,7 @@ class SpiderMastermind : Actor
DeathSound "spider/death";
ActiveSound "spider/active";
Obituary "$OB_SPIDER";
Tag "$FN_SPIDER";
}
States
{

View file

@ -19,6 +19,7 @@ class Beast : Actor
DeathSound "beast/death";
ActiveSound "beast/active";
Obituary "$OB_BEAST";
Tag "$FN_BEAST";
DropItem "CrossbowAmmo", 84, 10;
}
States

View file

@ -256,6 +256,7 @@ class Chicken : MorphedMonster
DeathSound "chicken/death";
ActiveSound "chicken/active";
Obituary "$OB_CHICKEN";
Tag "$FN_CHICKEN";
}
States
{

View file

@ -17,6 +17,7 @@ class Clink : Actor
DeathSound "clink/death";
ActiveSound "clink/active";
Obituary "$OB_CLINK";
Tag "$FN_CLINK";
DropItem "SkullRodAmmo", 84, 20;
}
States

View file

@ -36,6 +36,7 @@ class Sorcerer1 : Actor
ActiveSound "dsparilserpent/active";
Obituary "$OB_DSPARIL1";
HitObituary "$OB_DSPARIL1HIT";
Tag "$FN_DSPARIL";
}
@ -237,6 +238,7 @@ class Sorcerer2 : Actor
ActiveSound "dsparil/active";
Obituary "$OB_DSPARIL2";
HitObituary "$OB_DSPARIL2HIT";
Tag "$FN_DSPARIL";
}

View file

@ -26,6 +26,7 @@ class HereticImp : Actor
ActiveSound "himp/active";
Obituary "$OB_HERETICIMP";
HitObituary "$OB_HERETICIMPHIT";
Tag "$FN_HERETICIMP";
}
States

View file

@ -23,6 +23,7 @@ class Ironlich : Actor
ActiveSound "ironlich/active";
Obituary "$OB_IRONLICH";
HitObituary "$OB_IRONLICHHIT";
Tag "$FN_IRONLICH";
DropItem "BlasterAmmo", 84, 10;
DropItem "ArtiEgg", 51, 0;
}

View file

@ -20,6 +20,7 @@ class Knight : Actor
ActiveSound "hknight/active";
Obituary "$OB_BONEKNIGHT";
HitObituary "$OB_BONEKNIGHTHIT";
Tag "$FN_BONEKNIGHT";
DropItem "CrossbowAmmo", 84, 5;
}

View file

@ -19,6 +19,7 @@ class Mummy : Actor
DeathSound "mummy/death";
ActiveSound "mummy/active";
HitObituary "$OB_MUMMY";
Tag "$FN_MUMMY";
DropItem "GoldWandAmmo", 84, 3;
}
States
@ -60,6 +61,7 @@ class MummyLeader : Mummy
Health 100;
Painchance 64;
Obituary "$OB_MUMMYLEADER";
Tag "$FN_MUMMYLEADER";
}
States
{

View file

@ -16,6 +16,7 @@ class Snake : Actor
DeathSound "snake/death";
ActiveSound "snake/active";
Obituary "$OB_SNAKE";
Tag "$FN_SNAKE";
DropItem "PhoenixRodAmmo", 84, 5;
}
States

View file

@ -22,6 +22,7 @@ class Wizard : Actor
ActiveSound "wizard/active";
Obituary "$OB_WIZARD";
HitObituary "$OB_WIZARDHIT";
Tag "$FN_WIZARD";
DropItem "BlasterAmmo", 84, 10;
DropItem "ArtiTomeOfPower", 4, 0;
}

View file

@ -401,6 +401,26 @@ class LevelCompatibility play
}
break;
}
case '915409A89746D6BFD92C7956BE6A0A2D': // Doom II: BFG Edition MAP33
{
// Missing textures on sector with a Super Shotgun at map start.
TextureID rock2 = TexMan.CheckForTexture("ROCK2", TexMan.Type_Wall);
for(int i=0; i<4; i++)
{
SetWallTextureID(567+i, Line.front, Side.bottom, ROCK2);
SetWallTextureID(567+i, Line.back, Side.top, ROCK2);
}
// Tags the linedefs on the teleporter at the end of the level so that
// it's possible to leave the room near the yellow keycard door.
for(int i=0; i<2; i++)
{
SetLineSpecial(400+i, Teleport, 0, 36);
SetLineSpecial(559+i, Teleport, 0, 36);
}
break;
}
case 'ABC4EB5A1535ECCD0061AD14F3547908': // Plutonia Experiment, map26
{
SetSectorSpecial(156, 0);
@ -702,6 +722,47 @@ class LevelCompatibility play
GetDefaultActor('WolfensteinSS').bActivateMCross = true;
break;
}
case 'D67CECE3F60083383DF992B8C824E4AC': // Icarus: Alien Vanuguard MAP13
{
// Moves sector special to platform with Berserk powerup. The
// map's only secret can now be scored.
SetSectorSpecial(119, 0);
SetSectorSpecial(122, 1024);
break;
}
case '61373587339A768854E2912CC99A4781': // Icarus: Alien Vanuguard MAP15
{
// Can press use on the lift to reveal the secret Shotgun,
// making 100% secrets possible.
SetLineSpecial(222, Plat_DownWaitUpStayLip, 11, 64, 105, 0);
SetLineActivation(222, SPAC_Use);
SetLineFlags(222, Line.ML_REPEAT_SPECIAL);
break;
}
case '9F66B0797925A09D4DC0725540F8EEF7': // Icarus: Alien Vanuguard MAP16
{
// Can press use on the walls at the secret Rocket Launcher in
// case of getting stuck.
for(int i=0; i<7; i++)
{
SetLineSpecial(703+i, Plat_DownWaitUpStayLip, 14, 64, 105, 0);
SetLineActivation(703+i, SPAC_Use);
SetLineFlags(703+i, Line.ML_REPEAT_SPECIAL);
}
break;
}
case '09645D198010BF634EF0DE3EFCB0052C': // Flashback to Hell MAP12
{
// Can press use behind bookshelf in case of getting stuck.
SetLineSpecial(4884, Plat_DownWaitUpStayLip, 15, 32, 105, 0);
SetLineActivation(4884, SPAC_UseBack);
SetLineFlags(4884, Line.ML_REPEAT_SPECIAL);
break;
}
}
}

View file

@ -30,6 +30,7 @@ class Minotaur : Actor
DropItem "PhoenixRodAmmo", 84, 10;
Obituary "$OB_MINOTAUR";
HitObituary "$OB_MINOTAURHIT";
Tag "$FN_MINOTAUR";
}
States

View file

@ -16,6 +16,7 @@ class MBFHelperDog : Actor
PainSound "dog/pain";
SeeSound "dog/sight";
Obituary "$OB_DOG";
Tag "$FN_DOG";
}
States
{