From cbe4c9c5c1ea2cbb193d548e96e9902f03faa61a Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Wed, 27 Jun 2018 08:51:45 +0200 Subject: [PATCH 01/10] Added lump size validation to the WAD loader --- src/resourcefiles/file_wad.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/src/resourcefiles/file_wad.cpp b/src/resourcefiles/file_wad.cpp index c7a3a262ff..a0ae033db1 100644 --- a/src/resourcefiles/file_wad.cpp +++ b/src/resourcefiles/file_wad.cpp @@ -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; From 97aba0c416510119758f612a52c46f8f76a9308d Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 24 Jun 2018 17:31:55 +0700 Subject: [PATCH 02/10] add tags for Doom and Heretic monsters Why? So mods that reveal enemy names don't show internal monster class names. Tags are based on language.enu lump: - Tags for Doom/Doom 2 monsters are referring directly to CC_* strings. - Tags for Heretic monsters are based on obituaries. - All tags match corresponding obituaries. --- wadsrc/static/language.enu | 35 ++++++++++++++++++++ wadsrc/static/zscript/doom/arachnotron.txt | 1 + wadsrc/static/zscript/doom/archvile.txt | 1 + wadsrc/static/zscript/doom/bruiser.txt | 2 ++ wadsrc/static/zscript/doom/cacodemon.txt | 1 + wadsrc/static/zscript/doom/cyberdemon.txt | 1 + wadsrc/static/zscript/doom/demon.txt | 2 ++ wadsrc/static/zscript/doom/doomimp.txt | 1 + wadsrc/static/zscript/doom/fatso.txt | 1 + wadsrc/static/zscript/doom/lostsoul.txt | 1 + wadsrc/static/zscript/doom/painelemental.txt | 1 + wadsrc/static/zscript/doom/possessed.txt | 4 +++ wadsrc/static/zscript/doom/revenant.txt | 1 + wadsrc/static/zscript/doom/spidermaster.txt | 1 + wadsrc/static/zscript/heretic/beast.txt | 1 + wadsrc/static/zscript/heretic/chicken.txt | 1 + wadsrc/static/zscript/heretic/clink.txt | 1 + wadsrc/static/zscript/heretic/dsparil.txt | 2 ++ wadsrc/static/zscript/heretic/hereticimp.txt | 1 + wadsrc/static/zscript/heretic/ironlich.txt | 1 + wadsrc/static/zscript/heretic/knight.txt | 1 + wadsrc/static/zscript/heretic/mummy.txt | 2 ++ wadsrc/static/zscript/heretic/snake.txt | 1 + wadsrc/static/zscript/heretic/wizard.txt | 1 + wadsrc/static/zscript/raven/minotaur.txt | 1 + wadsrc/static/zscript/shared/dog.txt | 1 + 26 files changed, 67 insertions(+) diff --git a/wadsrc/static/language.enu b/wadsrc/static/language.enu index b73520259e..0cb1e42fc4 100644 --- a/wadsrc/static/language.enu +++ b/wadsrc/static/language.enu @@ -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 diff --git a/wadsrc/static/zscript/doom/arachnotron.txt b/wadsrc/static/zscript/doom/arachnotron.txt index 36bb2b38e9..35b9daf2a1 100644 --- a/wadsrc/static/zscript/doom/arachnotron.txt +++ b/wadsrc/static/zscript/doom/arachnotron.txt @@ -21,6 +21,7 @@ class Arachnotron : Actor DeathSound "baby/death"; ActiveSound "baby/active"; Obituary "$OB_BABY"; + Tag "$FN_ARACH"; } States { diff --git a/wadsrc/static/zscript/doom/archvile.txt b/wadsrc/static/zscript/doom/archvile.txt index c6c3f53a81..4969c45530 100644 --- a/wadsrc/static/zscript/doom/archvile.txt +++ b/wadsrc/static/zscript/doom/archvile.txt @@ -25,6 +25,7 @@ class Archvile : Actor ActiveSound "vile/active"; MeleeSound "vile/stop"; Obituary "$OB_VILE"; + Tag "$FN_ARCH"; } States { diff --git a/wadsrc/static/zscript/doom/bruiser.txt b/wadsrc/static/zscript/doom/bruiser.txt index 2341666695..1a8f97011c 100644 --- a/wadsrc/static/zscript/doom/bruiser.txt +++ b/wadsrc/static/zscript/doom/bruiser.txt @@ -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 { diff --git a/wadsrc/static/zscript/doom/cacodemon.txt b/wadsrc/static/zscript/doom/cacodemon.txt index bdd3a6bbd5..da6b58b16d 100644 --- a/wadsrc/static/zscript/doom/cacodemon.txt +++ b/wadsrc/static/zscript/doom/cacodemon.txt @@ -21,6 +21,7 @@ class Cacodemon : Actor ActiveSound "caco/active"; Obituary "$OB_CACO"; HitObituary "$OB_CACOHIT"; + Tag "$FN_CACO"; } States { diff --git a/wadsrc/static/zscript/doom/cyberdemon.txt b/wadsrc/static/zscript/doom/cyberdemon.txt index 1a2890f9a5..61fd1d2734 100644 --- a/wadsrc/static/zscript/doom/cyberdemon.txt +++ b/wadsrc/static/zscript/doom/cyberdemon.txt @@ -27,6 +27,7 @@ class Cyberdemon : Actor DeathSound "cyber/death"; ActiveSound "cyber/active"; Obituary "$OB_CYBORG"; + Tag "$FN_CYBER"; } States { diff --git a/wadsrc/static/zscript/doom/demon.txt b/wadsrc/static/zscript/doom/demon.txt index ab51adccd9..b93621da6d 100644 --- a/wadsrc/static/zscript/doom/demon.txt +++ b/wadsrc/static/zscript/doom/demon.txt @@ -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"; } } diff --git a/wadsrc/static/zscript/doom/doomimp.txt b/wadsrc/static/zscript/doom/doomimp.txt index 9a963c7d13..d690fffcef 100644 --- a/wadsrc/static/zscript/doom/doomimp.txt +++ b/wadsrc/static/zscript/doom/doomimp.txt @@ -21,6 +21,7 @@ class DoomImp : Actor ActiveSound "imp/active"; HitObituary "$OB_IMPHIT"; Obituary "$OB_IMP"; + Tag "$FN_IMP"; } States { diff --git a/wadsrc/static/zscript/doom/fatso.txt b/wadsrc/static/zscript/doom/fatso.txt index 2e6321650e..7d3c1197af 100644 --- a/wadsrc/static/zscript/doom/fatso.txt +++ b/wadsrc/static/zscript/doom/fatso.txt @@ -21,6 +21,7 @@ class Fatso : Actor DeathSound "fatso/death"; ActiveSound "fatso/active"; Obituary "$OB_FATSO"; + Tag "$FN_MANCU"; } States { diff --git a/wadsrc/static/zscript/doom/lostsoul.txt b/wadsrc/static/zscript/doom/lostsoul.txt index ce7f07f519..89086bf17f 100644 --- a/wadsrc/static/zscript/doom/lostsoul.txt +++ b/wadsrc/static/zscript/doom/lostsoul.txt @@ -22,6 +22,7 @@ class LostSoul : Actor ActiveSound "skull/active"; RenderStyle "SoulTrans"; Obituary "$OB_SKULL"; + Tag "$FN_LOST"; } States { diff --git a/wadsrc/static/zscript/doom/painelemental.txt b/wadsrc/static/zscript/doom/painelemental.txt index fe9e0590a0..f953e47efb 100644 --- a/wadsrc/static/zscript/doom/painelemental.txt +++ b/wadsrc/static/zscript/doom/painelemental.txt @@ -20,6 +20,7 @@ class PainElemental : Actor PainSound "pain/pain"; DeathSound "pain/death"; ActiveSound "pain/active"; + Tag "$FN_PAIN"; } States { diff --git a/wadsrc/static/zscript/doom/possessed.txt b/wadsrc/static/zscript/doom/possessed.txt index 8b6612076b..51505c80bc 100644 --- a/wadsrc/static/zscript/doom/possessed.txt +++ b/wadsrc/static/zscript/doom/possessed.txt @@ -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 diff --git a/wadsrc/static/zscript/doom/revenant.txt b/wadsrc/static/zscript/doom/revenant.txt index 67b5d0b1d5..91363edb84 100644 --- a/wadsrc/static/zscript/doom/revenant.txt +++ b/wadsrc/static/zscript/doom/revenant.txt @@ -24,6 +24,7 @@ class Revenant : Actor MeleeSound "skeleton/melee"; HitObituary "$OB_UNDEADHIT"; Obituary "$OB_UNDEAD"; + Tag "$FN_REVEN"; } States { diff --git a/wadsrc/static/zscript/doom/spidermaster.txt b/wadsrc/static/zscript/doom/spidermaster.txt index 5e1a39d76d..c6aaa9cfd6 100644 --- a/wadsrc/static/zscript/doom/spidermaster.txt +++ b/wadsrc/static/zscript/doom/spidermaster.txt @@ -26,6 +26,7 @@ class SpiderMastermind : Actor DeathSound "spider/death"; ActiveSound "spider/active"; Obituary "$OB_SPIDER"; + Tag "$FN_SPIDER"; } States { diff --git a/wadsrc/static/zscript/heretic/beast.txt b/wadsrc/static/zscript/heretic/beast.txt index e5f30d25b3..a27bb70bd4 100644 --- a/wadsrc/static/zscript/heretic/beast.txt +++ b/wadsrc/static/zscript/heretic/beast.txt @@ -19,6 +19,7 @@ class Beast : Actor DeathSound "beast/death"; ActiveSound "beast/active"; Obituary "$OB_BEAST"; + Tag "$FN_BEAST"; DropItem "CrossbowAmmo", 84, 10; } States diff --git a/wadsrc/static/zscript/heretic/chicken.txt b/wadsrc/static/zscript/heretic/chicken.txt index b60a891363..38b76894e6 100644 --- a/wadsrc/static/zscript/heretic/chicken.txt +++ b/wadsrc/static/zscript/heretic/chicken.txt @@ -256,6 +256,7 @@ class Chicken : MorphedMonster DeathSound "chicken/death"; ActiveSound "chicken/active"; Obituary "$OB_CHICKEN"; + Tag "$FN_CHICKEN"; } States { diff --git a/wadsrc/static/zscript/heretic/clink.txt b/wadsrc/static/zscript/heretic/clink.txt index 7549ff097a..5dc1aa39d1 100644 --- a/wadsrc/static/zscript/heretic/clink.txt +++ b/wadsrc/static/zscript/heretic/clink.txt @@ -17,6 +17,7 @@ class Clink : Actor DeathSound "clink/death"; ActiveSound "clink/active"; Obituary "$OB_CLINK"; + Tag "$FN_CLINK"; DropItem "SkullRodAmmo", 84, 20; } States diff --git a/wadsrc/static/zscript/heretic/dsparil.txt b/wadsrc/static/zscript/heretic/dsparil.txt index fc4ade00e5..c8c78bb8e1 100644 --- a/wadsrc/static/zscript/heretic/dsparil.txt +++ b/wadsrc/static/zscript/heretic/dsparil.txt @@ -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"; } diff --git a/wadsrc/static/zscript/heretic/hereticimp.txt b/wadsrc/static/zscript/heretic/hereticimp.txt index 11430712a7..3a938b4ed6 100644 --- a/wadsrc/static/zscript/heretic/hereticimp.txt +++ b/wadsrc/static/zscript/heretic/hereticimp.txt @@ -26,6 +26,7 @@ class HereticImp : Actor ActiveSound "himp/active"; Obituary "$OB_HERETICIMP"; HitObituary "$OB_HERETICIMPHIT"; + Tag "$FN_HERETICIMP"; } States diff --git a/wadsrc/static/zscript/heretic/ironlich.txt b/wadsrc/static/zscript/heretic/ironlich.txt index db0985e6d6..cf64a6aece 100644 --- a/wadsrc/static/zscript/heretic/ironlich.txt +++ b/wadsrc/static/zscript/heretic/ironlich.txt @@ -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; } diff --git a/wadsrc/static/zscript/heretic/knight.txt b/wadsrc/static/zscript/heretic/knight.txt index ada592ccf7..1bc71d6afb 100644 --- a/wadsrc/static/zscript/heretic/knight.txt +++ b/wadsrc/static/zscript/heretic/knight.txt @@ -20,6 +20,7 @@ class Knight : Actor ActiveSound "hknight/active"; Obituary "$OB_BONEKNIGHT"; HitObituary "$OB_BONEKNIGHTHIT"; + Tag "$FN_BONEKNIGHT"; DropItem "CrossbowAmmo", 84, 5; } diff --git a/wadsrc/static/zscript/heretic/mummy.txt b/wadsrc/static/zscript/heretic/mummy.txt index 5ccedc9e4c..928439ecc7 100644 --- a/wadsrc/static/zscript/heretic/mummy.txt +++ b/wadsrc/static/zscript/heretic/mummy.txt @@ -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 { diff --git a/wadsrc/static/zscript/heretic/snake.txt b/wadsrc/static/zscript/heretic/snake.txt index e2f5b381f5..6f741e93de 100644 --- a/wadsrc/static/zscript/heretic/snake.txt +++ b/wadsrc/static/zscript/heretic/snake.txt @@ -16,6 +16,7 @@ class Snake : Actor DeathSound "snake/death"; ActiveSound "snake/active"; Obituary "$OB_SNAKE"; + Tag "$FN_SNAKE"; DropItem "PhoenixRodAmmo", 84, 5; } States diff --git a/wadsrc/static/zscript/heretic/wizard.txt b/wadsrc/static/zscript/heretic/wizard.txt index d799e5721a..ae12e58389 100644 --- a/wadsrc/static/zscript/heretic/wizard.txt +++ b/wadsrc/static/zscript/heretic/wizard.txt @@ -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; } diff --git a/wadsrc/static/zscript/raven/minotaur.txt b/wadsrc/static/zscript/raven/minotaur.txt index 1738bc3f67..5a85ac8773 100644 --- a/wadsrc/static/zscript/raven/minotaur.txt +++ b/wadsrc/static/zscript/raven/minotaur.txt @@ -30,6 +30,7 @@ class Minotaur : Actor DropItem "PhoenixRodAmmo", 84, 10; Obituary "$OB_MINOTAUR"; HitObituary "$OB_MINOTAURHIT"; + Tag "$FN_MINOTAUR"; } States diff --git a/wadsrc/static/zscript/shared/dog.txt b/wadsrc/static/zscript/shared/dog.txt index 663dd6b980..a623344c75 100644 --- a/wadsrc/static/zscript/shared/dog.txt +++ b/wadsrc/static/zscript/shared/dog.txt @@ -16,6 +16,7 @@ class MBFHelperDog : Actor PainSound "dog/pain"; SeeSound "dog/sight"; Obituary "$OB_DOG"; + Tag "$FN_DOG"; } States { From 43919ead4057082acb5d742b0cbc07d403b7ef01 Mon Sep 17 00:00:00 2001 From: Erick Tenorio Date: Tue, 26 Jun 2018 15:16:29 -0500 Subject: [PATCH 03/10] Various map fixes Map fixes for the following maps: MAP33: Betray (Doom II: BFG Edition) Icarus: https://www.doomworld.com/idgames/themes/TeamTNT/icarus/icarus Flashback to Hell: https://www.doomworld.com/idgames/levels/doom2/Ports/d-f/fth666 Hell to Pay (HTP-RAW.WAD) --- wadsrc/static/compatibility.txt | 1 + wadsrc/static/zscript/level_compatibility.txt | 62 +++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index f5ea9710d2..621f2f9ada 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -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 } diff --git a/wadsrc/static/zscript/level_compatibility.txt b/wadsrc/static/zscript/level_compatibility.txt index ddd308a752..76060956d6 100644 --- a/wadsrc/static/zscript/level_compatibility.txt +++ b/wadsrc/static/zscript/level_compatibility.txt @@ -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,48 @@ 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_Use); + SetLineActivation(4884, SPAC_UseBack); + SetLineFlags(4884, Line.ML_REPEAT_SPECIAL); + break; + } } } From 245801ca17d8fcc699aed411c65c60d178d9f1f1 Mon Sep 17 00:00:00 2001 From: Erick Tenorio Date: Tue, 26 Jun 2018 20:03:20 -0500 Subject: [PATCH 04/10] Removed useless SetLineActivation SPAC_Use removed as the line in fth666.wad MAP12 is not facing front. --- wadsrc/static/zscript/level_compatibility.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/wadsrc/static/zscript/level_compatibility.txt b/wadsrc/static/zscript/level_compatibility.txt index 76060956d6..d91f1b19b5 100644 --- a/wadsrc/static/zscript/level_compatibility.txt +++ b/wadsrc/static/zscript/level_compatibility.txt @@ -759,7 +759,6 @@ class LevelCompatibility play { // Can press use behind bookshelf in case of getting stuck. SetLineSpecial(4884, Plat_DownWaitUpStayLip, 15, 32, 105, 0); - SetLineActivation(4884, SPAC_Use); SetLineActivation(4884, SPAC_UseBack); SetLineFlags(4884, Line.ML_REPEAT_SPECIAL); break; From a968aeba8a5958e51474e81b8778608755960723 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Thu, 28 Jun 2018 11:06:19 +0300 Subject: [PATCH 05/10] - added detection of macOS Mojave --- src/posix/cocoa/i_main.mm | 1 + 1 file changed, 1 insertion(+) diff --git a/src/posix/cocoa/i_main.mm b/src/posix/cocoa/i_main.mm index 665f2203a6..e1b388d3d4 100644 --- a/src/posix/cocoa/i_main.mm +++ b/src/posix/cocoa/i_main.mm @@ -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"; From c30505d02aa9f8b5d961f748e4b8870f35a167b2 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 29 Jun 2018 11:33:59 +0300 Subject: [PATCH 06/10] - fixed excess keyboard events in Cocoa backend https://forum.zdoom.org/viewtopic.php?t=61104 --- src/posix/cocoa/i_input.mm | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/posix/cocoa/i_input.mm b/src/posix/cocoa/i_input.mm index 78841d9064..c6fc86e441 100644 --- a/src/posix/cocoa/i_input.mm +++ b/src/posix/cocoa/i_input.mm @@ -559,11 +559,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; @@ -573,7 +575,7 @@ void ProcessKeyboardEvent(NSEvent* theEvent) { ProcessKeyboardEventInMenu(theEvent); } - else + else if (!isARepeat) { event_t event = {}; From 6e4c0fc416eab642d8ad61d87fb32141a8c42bca Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 29 Jun 2018 11:57:01 +0300 Subject: [PATCH 07/10] - disabled annoying macOS spaces in SDL backend --- src/posix/sdl/hardware.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/posix/sdl/hardware.cpp b/src/posix/sdl/hardware.cpp index 3c000cb8e3..eda9081e3c 100644 --- a/src/posix/sdl/hardware.cpp +++ b/src/posix/sdl/hardware.cpp @@ -69,6 +69,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()); From 0342bf532d02381bdd04addf6643e95f6b18d26a Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 29 Jun 2018 12:20:26 +0300 Subject: [PATCH 08/10] - fixed excess keyboard events in SDL backend https://forum.zdoom.org/viewtopic.php?t=61104 --- src/posix/sdl/i_input.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/posix/sdl/i_input.cpp b/src/posix/sdl/i_input.cpp index 88c43050ca..561870a4e3 100644 --- a/src/posix/sdl/i_input.cpp +++ b/src/posix/sdl/i_input.cpp @@ -407,6 +407,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. From 0703030be3551b1914bec99ce6140d84db39c0c0 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 29 Jun 2018 12:26:30 +0300 Subject: [PATCH 09/10] - simplified key repeat detection in SDL backend --- src/posix/sdl/i_input.cpp | 18 ++---------------- 1 file changed, 2 insertions(+), 16 deletions(-) diff --git a/src/posix/sdl/i_input.cpp b/src/posix/sdl/i_input.cpp index 561870a4e3..fe777d77a9 100644 --- a/src/posix/sdl/i_input.cpp +++ b/src/posix/sdl/i_input.cpp @@ -64,8 +64,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, @@ -190,10 +188,6 @@ static void I_CheckGUICapture () if (wantCapt != GUICapture) { GUICapture = wantCapt; - if (wantCapt) - { - memset (DownState, 0, sizeof(DownState)); - } ResetButtonStates(); } } @@ -441,17 +435,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) From 907ce777a35160a554661255267668d024b3fa12 Mon Sep 17 00:00:00 2001 From: "alexey.lysiuk" Date: Fri, 29 Jun 2018 13:47:06 +0300 Subject: [PATCH 10/10] - added extra validation for status bar classes Print a message when status bar class defined in GAMEINFO is missing or when it's not derived from BaseStatusBar Validate internal status bar classes for basic consistency in Debug configuration --- src/g_statusbar/sbarinfo.cpp | 6 ++++- src/g_statusbar/shared_sbar.cpp | 40 ++++++++++++++++++++++++--------- 2 files changed, 35 insertions(+), 11 deletions(-) diff --git a/src/g_statusbar/sbarinfo.cpp b/src/g_statusbar/sbarinfo.cpp index 7e7ace6a35..9c3c710173 100644 --- a/src/g_statusbar/sbarinfo.cpp +++ b/src/g_statusbar/sbarinfo.cpp @@ -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("core") = core; sbar->SetSize(script->height, script->_resW, script->_resH); diff --git a/src/g_statusbar/shared_sbar.cpp b/src/g_statusbar/shared_sbar.cpp index e0e2cc9d51..7236bc39b9 100644 --- a/src/g_statusbar/shared_sbar.cpp +++ b/src/g_statusbar/shared_sbar.cpp @@ -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(); } }