diff --git a/src/compatibility.cpp b/src/compatibility.cpp index 52eb3aac40..beb07dc9c9 100644 --- a/src/compatibility.cpp +++ b/src/compatibility.cpp @@ -772,6 +772,78 @@ void SetCompatibilityParams(FName checksum) } } +DEFINE_ACTION_FUNCTION(DLevelCompatibility, OffsetSectorPlane) +{ + PARAM_PROLOGUE; + PARAM_INT(sector); + PARAM_INT(planeval); + PARAM_FLOAT(delta); + + sector_t *sec = &level.sectors[sector]; + secplane_t& plane = sector_t::floor == planeval? sec->floorplane : sec->ceilingplane; + plane.ChangeHeight(delta); + sec->ChangePlaneTexZ(planeval, delta); + return 0; +} + +DEFINE_ACTION_FUNCTION(DLevelCompatibility, ClearSectorTags) +{ + PARAM_PROLOGUE; + PARAM_INT(sector); + tagManager.RemoveSectorTags(sector); + return 0; +} + +DEFINE_ACTION_FUNCTION(DLevelCompatibility, AddSectorTag) +{ + PARAM_PROLOGUE; + PARAM_INT(sector); + PARAM_INT(tag); + tagManager.AddSectorTag(sector, tag); + return 0; +} + +DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingSkills) +{ + PARAM_PROLOGUE; + PARAM_INT(thing); + PARAM_INT(skillmask); + + if ((unsigned)thing < MapThingsConverted.Size()) + { + MapThingsConverted[thing].SkillFilter = skillmask; + } + return 0; +} + +DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingZ) +{ + PARAM_PROLOGUE; + PARAM_INT(thing); + PARAM_FLOAT(z); + + if ((unsigned)thing < MapThingsConverted.Size()) + { + MapThingsConverted[thing].pos.Z = z; + } + return 0; +} + +DEFINE_ACTION_FUNCTION(DLevelCompatibility, SetThingFlags) +{ + PARAM_PROLOGUE; + PARAM_INT(thing); + PARAM_INT(flags); + + if ((unsigned)thing < MapThingsConverted.Size()) + { + MapThingsConverted[thing].flags = flags; + } + return 0; +} + + + //========================================================================== // // CCMD mapchecksum diff --git a/wadsrc/static/compatibility.txt b/wadsrc/static/compatibility.txt index cf682f7329..7ca81e4030 100644 --- a/wadsrc/static/compatibility.txt +++ b/wadsrc/static/compatibility.txt @@ -245,366 +245,9 @@ DC96228097DD004C40CCB1DB14A91EAA // unloved.pk3:unlovedmaps.wad map05 clipmidtex } -E2B5D1400279335811C1C1C0B437D9C8 // Deathknights of the Dark Citadel, map54 -{ - // This map has two gear boxes which are flagged for player cross - // activation instead of the proper player uses activation. - setactivation 963 2 - setactivation 943 2 -} -3F249EDD62A3A08F53A6C53CB4C7ABE5 // Artica 3 map01 -{ - clearlinespecial 66 -} -// Community Chest 3 -F481922F4881F74760F3C0437FD5EDD0 // map03 -{ - // I have no idea how this conveyor belt setup manages to work under Boom. - // Set the sector the voodoo doll ends up standing on when sectors tagged - // 1 are raised so that the voodoo doll will be carried. - setlinespecial 3559 Sector_CopyScroller 17 6 0 0 0 -} -5B862477519B21B30059A466F2FF6460 // Khorus, map08 -{ - // This map uses a voodoo conveyor with slanted walls to shunt the - // voodoo doll into side areas. For some reason, this voodoo doll - // is unable to slide on them, because the slide calculation gets - // them slightly inside the walls and thinks they are stuck. I could - // not reproduce this with the real player, which is what has me - // stumped. So, help them out be attaching some ThrustThing specials - // to the walls. - setlinespecial 443 ThrustThing 96 4 0 0 0 - setlineflags 443 0x200 // repeatable - setactivation 443 16 // SPAC_Push - setlinespecial 455 ThrustThing 96 4 0 0 0 - setlineflags 455 0x200 // repeatable - setactivation 455 16 // SPAC_Push -} - -3D1E36E50F5A8D289E15433941605224 // Master Levels, catwalk.wad -{ - // make it impossible to open door to 1-way bridge before getting red key - setsectortag 35 0 // existing tag must be cleared before new one can be set - setsectortag 35 15 - setactivation 605 1 // SPAC_PCross - setactivation 606 1 - setactivation 607 1 - setactivation 608 1 - setlinespecial 605 Door_Open 15 64 0 0 0 // fast, stay open - setlinespecial 606 Door_Open 15 64 0 0 0 - setlinespecial 607 Door_Open 15 64 0 0 0 - setlinespecial 608 Door_Open 15 64 0 0 0 -} - -3B9CAA02952F405269353FAAD8F8EC33 // Master Levels, nessus.wad -{ - // move secret sector from too-thin doorframe to BFG closet - setsectorspecial 211 0 - setsectorspecial 212 1024 - // lower floor a bit so secret sector can be entered fully - setsectoroffset 212 floor -16 - // make secret door stay open so you can't get locked in closet - setlinespecial 1008 Door_Open 0 64 0 0 0 -} - -7ED9800213C00D6E7FB98652AB48B3DE // Ultimate Simplicity, map04 -{ - // Add missing map spots on easy and medium skills - // Demons will teleport into starting room making 100% kills possible - setthingskills 31 31 - setthingskills 32 31 -} - -1891E029994B023910CFE0B3209C3CDB // Ultimate Simplicity, map07 -{ - // It is possible to get stuck on skill 0 or 1 when no shots have been fired - // after sector 17 became accessible and before entering famous mancubus room. - // Monsters from the mentioned sector won't be alerted and so - // they won't teleport into the battle. ACS will wait forever for their deaths. - setlinespecial 397 NoiseAlert 0 0 0 0 0 - setlinespecial 411 NoiseAlert 0 0 0 0 0 -} - -F0E6F30F57B0425F17E43600AA813E80 // Ultimate Simplicity, map11 -{ - // If door (sector #309) is closed it cannot be open again - // from one side potentially blocking level progression - clearlinespecial 2445 -} - -952CC8D03572E17BA550B01B366EFBB9 // Cheogsh map01 -{ - // make the blue key spawn above the 3D floor - setthingz 918 296 -} - -D62DCA9EC226DE49108D5DD9271F7631 // Cheogsh 2 map04 -{ - // Stuff in megasphere cage is positioned too low - setthingz 1640 528 - setthingz 1641 528 - setthingz 1642 528 - setthingz 1643 528 - setthingz 1644 528 - setthingz 1645 528 - setthingz 1646 528 - setthingz 1647 528 - setthingz 1648 528 - setthingz 1649 528 -} - -DFC18B92BF3E8142B8684ECD8BD2EF06 // TNT: Evilution map15 -{ - // raise up sector with its counterpart so 100% kills becomes possible - setsectortag 330 11 -} - -2C4A3356C5EB3526D2C72A4AA4B18A36 // TNT: Evilution map29 -{ - // remove mancubus who always gets stuck in teleport tunnel, preventing - // 100% kills on HMP - setthingflags 405 0 -} - -A53AE580A4AF2B5D0B0893F86914781E // TNT: Evilution map31 -{ - setthingflags 470 2016 -} - -D99AD22FF21A41B4EECDB3A7C803D75E // TNT: Evilution map32 -{ - // door can close permanently; make switch that opens it repeatable - setlineflags 872 0x200 - // switch should only open way to red key, don't lower bars yet, - // instead make line just before red key open bars - setsectortag 197 0 - setsectortag 197 8 - setlinespecial 1279 Floor_LowerToLowest 8 32 0 0 0 - setactivation 1240 1 // SPAC_PCross - setlinespecial 1240 Floor_LowerToLowest 38 32 0 0 0 -} - -279BB50468FE9F5B36C6D821E4902369 // Plutonia Experiment map30 -{ - // flag items in deathmatch-only area correctly so that 100% items - // are possible in solo - setthingflags 250 17 - setthingflags 251 17 - setthingflags 252 17 - setthingflags 253 17 - setthingflags 254 17 - setthingflags 206 17 -} - -4CB7AAC5C43CF32BDF05FD36481C1D9F // Plutonia: Revisited map27 -{ - setlinespecial 1214 Plat_DownWaitUpStayLip 20 64 150 0 0 - setlinespecial 1215 Plat_DownWaitUpStayLip 20 64 150 0 0 - setlinespecial 1216 Plat_DownWaitUpStayLip 20 64 150 0 0 - setlinespecial 1217 Plat_DownWaitUpStayLip 20 64 150 0 0 - setlinespecial 1227 Plat_DownWaitUpStayLip 20 64 150 0 0 -} - -5B26545FF21B051CA06D389CE535684C // doom.wad e1m4 -{ - // missing textures - setwalltexture 693 back top BROWN1 - // fix HOM errors with sectors too low - setsectoroffset 9 floor 8 - setsectoroffset 105 floor 8 - setsectoroffset 132 floor 8 - setsectoroffset 137 floor 8 -} -A24FE135D5B6FD427FE27BEF89717A65 // doom.wad e2m2 -{ - // missing textures - setwalltexture 947 back top BROWN1 - setwalltexture 1596 back top WOOD1 -} -1BC04D646B32D3A3E411DAF3C1A38FF8 // doom.wad e2m4 -{ - // missing textures - setwalltexture 551 back top PIPE4 - setwalltexture 865 back bot STEP5 - setwalltexture 1062 front top GSTVINE1 - setwalltexture 1071 front top MARBLE1 -} -99C580AD8FABE923CAB485CB7F3C5E5D // doom.wad e2m5 -{ - // missing textures - setwalltexture 590 back top GRAYBIG - setwalltexture 590 front bot BROWN1 -} -3838AB29292587A7EE3CA71E7040868D // doom.wad e2m6 -{ - // missing texture - setwalltexture 1091 back top compspan -} -8590F489879870C098CD7029C3187159 // doom.wad e2m7 -{ - // missing texture - setwalltexture 1286 front bot SHAWN2 -} -8A6399FAAA2E68649D4E4B16642074BE // doom.wad e2m9 -{ - // missing textures - setwalltexture 121 back top SW1LION - setwalltexture 123 back top GSTONE1 - setwalltexture 140 back top GSTONE1 -} -2B65CB046EA40D2E44576949381769CA // Commercial Doom e3m4 -{ - // This line is erroneously specified as Door_Raise that monsters - // can operate. If they do, they block you off from half the map. Change - // this into a one-shot Door_Open so that it won't close. - setlinespecial 1069 Door_Open 0 16 0 0 0 - clearlineflags 1069 0x200 -} -5AC51CA9F1B57D4538049422A5E37291 // doom.wad e3m7 -{ - // missing texture - setwalltexture 971 back top SP_HOT1 -} -DA0C8281AC70EEC31127C228BCD7FE2C // doom.wad e4m1 -{ - // missing texture - setwalltexture 470 front top GSTONE1 -} -F6EE16F770AD309D608EA0B1F1E249FC // Ultimate Doom, e4m3 -{ - // Remove unreachable secrets - setsectorspecial 124 0 - setsectorspecial 125 0 - // clear staircase to secret area - setsectorspecial 127 0 - setsectorspecial 128 0 - setsectorspecial 129 0 - setsectorspecial 130 0 - setsectorspecial 131 0 - setsectorspecial 132 0 - setsectorspecial 133 0 - setsectorspecial 134 0 - setsectorspecial 136 0 - setsectorspecial 137 0 - setsectorspecial 138 0 - setsectorspecial 147 0 - setsectorspecial 148 0 - setsectorspecial 149 0 - setsectorspecial 150 0 - setsectorspecial 151 0 - setsectorspecial 152 0 - setsectorspecial 155 0 -} -AAECADD4D97970AFF702D86FAFAC7D17 // doom.wad e4m4 -{ - // missing textures - setwalltexture 427 back top BROWNHUG - setwalltexture 558 back top BROWNHUG - setwalltexture 567 front top BROWNHUG - setwalltexture 572 front top BROWNHUG -} -94D4C869A0C02EF4F7375022B36AAE45 // Ultimate Doom, e4m7 -{ - // Remove unreachable secrets - setsectorspecial 263 0 - setsectorspecial 264 0 -} - -CEC791136A83EEC4B91D39718BDF9D82 // doom2.wad map04 -{ - // missing textures - setwalltexture 456 back top SUPPORT3 - setwalltexture 108 front top STONE - setwalltexture 109 front top STONE - setwalltexture 110 front top STONE - setwalltexture 111 front top STONE - setwalltexture 127 front top STONE - setwalltexture 128 front top STONE - // remove erroneous blue keycard pickup ambush sector tags (nearby viewing windows, and the lights) - setsectortag 19 0 - setsectortag 20 0 - setsectortag 23 0 - setsectortag 28 0 - setsectortag 33 0 - setsectortag 34 0 - setsectortag 83 0 - setsectortag 85 0 -} -9E061AD7FBCD7FAD968C976CB4AA3B9D // doom2.wad map05 -{ - // fix bug with opening westmost door in door hallway - incorrect sector tagging - see doomwiki.org for more info - setsectortag 4 0 - setsectortag 153 0 -} -5BDA34DA60C0530794CC1EA2DA017976 // doom2.wad map14 -{ - // missing textures - setwalltexture 1259 back top BSTONE2 - setwalltexture 1305 back top BSTONE2 -} -1A540BA717BF9EC85F8522594C352F2A // Doom II, map15 -{ - setsectorspecial 147 0 -} -0D491365C1B88B7D1B603890100DD03E // doom2.wad map18 -{ - // missing textures - setwalltexture 451 front mid metal - setwalltexture 459 front mid metal -} -B5506B1E8F2FC272AD0C77B9E0DF5491 // doom2.wad map19 -{ - // missing textures - setwalltexture 355 back top STONE2 - setwalltexture 736 front top SLADWALL -} -EBDAC00E9D25D884B2C8F4B1F0390539 // doom2.wad map21 -{ - // push ceiling down in glitchy sectors above the stair switches - setsectoroffset 50 ceil -56 - setsectoroffset 54 ceil -56 -} -110F84DE041052B59307FAF0293E6BC0 // Doom II, map27 -{ - setsectorspecial 93 0 - setwalltexture 582 back top ZIMMER3 -} -20251EDA21B2F2ECF6FF5B8BBC00B26C // Doom II, MAP29 -{ - // Missing textures on teleporters - setwalltexture 405 back bot SUPPORT3 - setwalltexture 406 back bot SUPPORT3 - setwalltexture 407 back bot SUPPORT3 - setwalltexture 408 back bot SUPPORT3 - setwalltexture 516 back bot SUPPORT3 - setwalltexture 517 back bot SUPPORT3 - setwalltexture 518 back bot SUPPORT3 - setwalltexture 519 back bot SUPPORT3 - setwalltexture 524 back bot SUPPORT3 - setwalltexture 525 back bot SUPPORT3 - setwalltexture 526 back bot SUPPORT3 - setwalltexture 527 back bot SUPPORT3 - setwalltexture 1146 back bot SUPPORT3 - setwalltexture 1147 back bot SUPPORT3 - setwalltexture 1148 back bot SUPPORT3 - setwalltexture 1149 back bot SUPPORT3 - setwalltexture 1138 back bot SUPPORT3 - setwalltexture 1139 back bot SUPPORT3 - setwalltexture 1140 back bot SUPPORT3 - setwalltexture 1141 back bot SUPPORT3 -} -ABC4EB5A1535ECCD0061AD14F3547908 // Plutonia Experiment, map26 -{ - setsectorspecial 156 0 -} - -FF635FB9A2F076566299910F8C78F707 // nerve.wad, level04 -{ - setsectorspecial 868 0 -} B68EB7CFB4CC481796E2919B9C16DFBD // Moc11.wad e1m6 { diff --git a/wadsrc/static/zscript/level_compatibility.txt b/wadsrc/static/zscript/level_compatibility.txt index 695a43b011..134255c3b0 100644 --- a/wadsrc/static/zscript/level_compatibility.txt +++ b/wadsrc/static/zscript/level_compatibility.txt @@ -23,9 +23,399 @@ class LevelCompatibility play SetWallTexture(101, Line.back, Side.top, "BRICK7"); break; } + + case 'E2B5D1400279335811C1C1C0B437D9C8': // Deathknights of the Dark Citadel, map54 + { + // This map has two gear boxes which are flagged for player cross + // activation instead of the proper player uses activation. + SetLineActivation(943, SPAC_Use); + SetLineActivation(963, SPAC_Use); + break; + } + + case '3F249EDD62A3A08F53A6C53CB4C7ABE5': // Artica 3 map01 + { + ClearLineSpecial(66); + break; + } + + case 'F481922F4881F74760F3C0437FD5EDD0': // // Community Chest 3 map03 + { + // I have no idea how this conveyor belt setup manages to work under Boom. + // Set the sector the voodoo doll ends up standing on when sectors tagged + // 1 are raised so that the voodoo doll will be carried. + SetLineSpecial(3559, Sector_CopyScroller, 17, 6); + break; + } + + case '5B862477519B21B30059A466F2FF6460': // Khorus, map08 + { + // This map uses a voodoo conveyor with slanted walls to shunt the + // voodoo doll into side areas. For some reason, this voodoo doll + // is unable to slide on them, because the slide calculation gets + // them slightly inside the walls and thinks they are stuck. I could + // not reproduce this with the real player, which is what has me + // stumped. So, help them out be attaching some ThrustThing specials + // to the walls. + SetLineSpecial(443, ThrustThing, 96, 4); + SetLineFlags(443, Line.ML_REPEAT_SPECIAL); + SetLineActivation(443, SPAC_Push); + SetLineSpecial(455, ThrustThing, 96, 4); + SetLineFlags(455, Line.ML_REPEAT_SPECIAL); + SetLineActivation(455, SPAC_Push); + break; + } + + case '3D1E36E50F5A8D289E15433941605224': // Master Levels, catwalk.wad + { + // make it impossible to open door to 1-way bridge before getting red key + ClearSectorTags(35); + AddSectorTag(35, 15); + for(int i=605; i<609;i++) + { + SetLineActivation(i, SPAC_PCross); + SetLineSpecial(i, Door_Open, 15, 64); + } + break; + } + + case '3B9CAA02952F405269353FAAD8F8EC33': // Master Levels, nessus.wad + { + // move secret sector from too-thin doorframe to BFG closet + SetSectorSpecial(211, 0); + SetSectorSpecial(212, 1024); + // lower floor a bit so secret sector can be entered fully + OffsetSectorPlane(212, Sector.floor, -16); + // make secret door stay open so you can't get locked in closet + SetLineSpecial(1008, Door_Open, 0, 64); + break; + } + + case '7ED9800213C00D6E7FB98652AB48B3DE': // Ultimate Simplicity, map04 + { + // Add missing map spots on easy and medium skills + // Demons will teleport into starting room making 100% kills possible + SetThingSkills(31, 31); + SetThingSkills(32, 31); + break; + } + + case '1891E029994B023910CFE0B3209C3CDB': // Ultimate Simplicity, map07 + { + // It is possible to get stuck on skill 0 or 1 when no shots have been fired + // after sector 17 became accessible and before entering famous mancubus room. + // Monsters from the mentioned sector won't be alerted and so + // they won't teleport into the battle. ACS will wait forever for their deaths. + SetLineSpecial(397, NoiseAlert); + SetLineSpecial(411, NoiseAlert); + break; + } + + case 'F0E6F30F57B0425F17E43600AA813E80': // Ultimate Simplicity, map11 + { + // If door (sector #309) is closed it cannot be open again + // from one side potentially blocking level progression + ClearLineSpecial(2445); + break; + } + + case '952CC8D03572E17BA550B01B366EFBB9': // Cheogsh map01 + { + // make the blue key spawn above the 3D floor + SetThingZ(918, 296); + break; + } + + case 'D62DCA9EC226DE49108D5DD9271F7631': // Cheogsh 2 map04 + { + // Stuff in megasphere cage is positioned too low + for(int i=1640; i<=1649; i++) + { + SetThingZ(i, 528); + } + break; + } + + case 'DFC18B92BF3E8142B8684ECD8BD2EF06': // TNT: Evilution map15 + { + // raise up sector with its counterpart so 100% kills becomes possible + AddSectorTag(330, 11); + break; + } + + case '2C4A3356C5EB3526D2C72A4AA4B18A36': // TNT: Evilution map29 + { + // remove mancubus who always gets stuck in teleport tunnel, preventing + // 100% kills on HMP + SetThingFlags(405, 0); + break; + } + + case 'A53AE580A4AF2B5D0B0893F86914781E': // TNT: Evilution map31 + { + // The famous missing yellow key... + SetThingFlags(470, 2016); + break; + } + + case 'D99AD22FF21A41B4EECDB3A7C803D75E': // TNT: Evilution map32 + { + // door can close permanently; make switch that opens it repeatable + SetLineFlags(872, Line.ML_REPEAT_SPECIAL); + // switch should only open way to red key, don't lower bars yet, + // instead make line just before red key open bars + ClearSectorTags(197); + AddSectorTag(197, 8); + SetLineSpecial(1279, Floor_LowerToLowest, 8, 32); + SetLineActivation(1240, SPAC_PCross); + SetLineSpecial(1240, Floor_LowerToLowest, 38, 32); + break; + } + + case '279BB50468FE9F5B36C6D821E4902369': // Plutonia Experiment map30 + { + // flag items in deathmatch-only area correctly so that 100% items + // are possible in solo + SetThingFlags(250, 17); + SetThingFlags(251, 17); + SetThingFlags(252, 17); + SetThingFlags(253, 17); + SetThingFlags(254, 17); + SetThingFlags(206, 17); + break; + } + + case '4CB7AAC5C43CF32BDF05FD36481C1D9F': // Plutonia: Revisited map27 + { + SetLineSpecial(1214, Plat_DownWaitUpStayLip, 20, 64, 150); + SetLineSpecial(1215, Plat_DownWaitUpStayLip, 20, 64, 150); + SetLineSpecial(1216, Plat_DownWaitUpStayLip, 20, 64, 150); + SetLineSpecial(1217, Plat_DownWaitUpStayLip, 20, 64, 150); + SetLineSpecial(1227, Plat_DownWaitUpStayLip, 20, 64, 150); + break; + } + + case '5B26545FF21B051CA06D389CE535684C': // doom.wad e1m4 + { + // missing textures + SetWallTexture(693, Line.back, Side.top, "BROWN1"); + // fix HOM errors with sectors too low + OffsetSectorPlane(9, Sector.floor, 8); + OffsetSectorPlane(105, Sector.floor, 8); + OffsetSectorPlane(132, Sector.floor, 8); + OffsetSectorPlane(137, Sector.floor, 8); + break; + } + case 'A24FE135D5B6FD427FE27BEF89717A65': // doom.wad e2m2 + { + // missing textures + SetWallTexture(947, Line.back, Side.top, "BROWN1"); + SetWallTexture(1596, Line.back, Side.top, "WOOD1"); + break; + } + case '1BC04D646B32D3A3E411DAF3C1A38FF8': // doom.wad e2m4 + { + // missing textures + SetWallTexture(551, Line.back, Side.top, "PIPE4"); + SetWallTexture(865, Line.back, Side.bottom, "STEP5"); + SetWallTexture(1062, Line.front, Side.top, "GSTVINE1"); + SetWallTexture(1071, Line.front, Side.top, "MARBLE1"); + break; + } + case '99C580AD8FABE923CAB485CB7F3C5E5D': // doom.wad e2m5 + { + // missing textures + SetWallTexture(590, Line.back, Side.top, "GRAYBIG"); + SetWallTexture(590, Line.front, Side.bottom, "BROWN1"); + break; + } + case '3838AB29292587A7EE3CA71E7040868D': // doom.wad e2m6 + { + // missing texture + SetWallTexture(1091, Line.back, Side.top, "compspan"); + break; + } + case '8590F489879870C098CD7029C3187159': // doom.wad e2m7 + { + // missing texture + SetWallTexture(1286, Line.front, Side.bottom, "SHAWN2"); + break; + } + case '8A6399FAAA2E68649D4E4B16642074BE': // doom.wad e2m9 + { + // missing textures + SetWallTexture(121, Line.back, Side.top, "SW1LION"); + SetWallTexture(123, Line.back, Side.top, "GSTONE1"); + SetWallTexture(140, Line.back, Side.top, "GSTONE1"); + break; + } + case '2B65CB046EA40D2E44576949381769CA': // Commercial Doom e3m4 + { + // This line is erroneously specified as Door_Raise that monsters + // can operate. If they do, they block you off from half the map. Change + // this into a one-shot Door_Open so that it won't close. + SetLineSpecial(1069, Door_Open, 0, 16); + SetLineFlags(1069, 0, Line.ML_REPEAT_SPECIAL); + break; + } + case '5AC51CA9F1B57D4538049422A5E37291': // doom.wad e3m7 + { + // missing texture + SetWallTexture(971, Line.back, Side.top, "SP_HOT1"); + break; + } + case 'DA0C8281AC70EEC31127C228BCD7FE2C': // doom.wad e4m1 + { + // missing texture + SetWallTexture(470, Line.front, Side.top, "GSTONE1"); + break; + } + case 'F6EE16F770AD309D608EA0B1F1E249FC': // Ultimate Doom, e4m3 + { + // Remove unreachable secrets + SetSectorSpecial(124, 0); + SetSectorSpecial(125, 0); + // clear staircase to secret area + SetSectorSpecial(127, 0); + SetSectorSpecial(128, 0); + SetSectorSpecial(129, 0); + SetSectorSpecial(130, 0); + SetSectorSpecial(131, 0); + SetSectorSpecial(132, 0); + SetSectorSpecial(133, 0); + SetSectorSpecial(134, 0); + SetSectorSpecial(136, 0); + SetSectorSpecial(137, 0); + SetSectorSpecial(138, 0); + SetSectorSpecial(147, 0); + SetSectorSpecial(148, 0); + SetSectorSpecial(149, 0); + SetSectorSpecial(150, 0); + SetSectorSpecial(151, 0); + SetSectorSpecial(152, 0); + SetSectorSpecial(155, 0); + break; + } + case 'AAECADD4D97970AFF702D86FAFAC7D17': // doom.wad e4m4 + { + // missing textures + TextureID brownhug = TexMan.CheckForTexture("BROWNHUG", TexMan.Type_Wall); + SetWallTextureID(427, Line.back, Side.top, BROWNHUG); + SetWallTextureID(558, Line.back, Side.top, BROWNHUG); + SetWallTextureID(567, Line.front, Side.top, BROWNHUG); + SetWallTextureID(572, Line.front, Side.top, BROWNHUG); + break; + } + case '94D4C869A0C02EF4F7375022B36AAE45': // Ultimate Doom, e4m7 + { + // Remove unreachable secrets + SetSectorSpecial(263, 0); + SetSectorSpecial(264, 0); + break; + } + + case 'CEC791136A83EEC4B91D39718BDF9D82': // doom2.wad map04 + { + // missing textures + SetWallTexture(456, Line.back, Side.top, "SUPPORT3"); + TextureID stone = TexMan.CheckForTexture("STONE", TexMan.Type_Wall); + SetWallTextureID(108, Line.front, Side.top, STONE); + SetWallTextureID(109, Line.front, Side.top, STONE); + SetWallTextureID(110, Line.front, Side.top, STONE); + SetWallTextureID(111, Line.front, Side.top, STONE); + SetWallTextureID(127, Line.front, Side.top, STONE); + SetWallTextureID(128, Line.front, Side.top, STONE); + // remove erroneous blue keycard pickup ambush sector tags (nearby viewing windows, and the lights) + ClearSectorTags(19); + ClearSectorTags(20); + ClearSectorTags(23); + ClearSectorTags(28); + ClearSectorTags(33); + ClearSectorTags(34); + ClearSectorTags(83); + ClearSectorTags(85); + break; + } + case '9E061AD7FBCD7FAD968C976CB4AA3B9D': // doom2.wad map05 + { + // fix bug with opening westmost door in door hallway - incorrect sector tagging - see doomwiki.org for more info + ClearSectorTags(4); + ClearSectorTags(153); + break; + } + case '5BDA34DA60C0530794CC1EA2DA017976': // doom2.wad map14 + { + // missing textures + SetWallTexture(1259, Line.back, Side.top, "BSTONE2"); + SetWallTexture(1305, Line.back, Side.top, "BSTONE2"); + } + case '1A540BA717BF9EC85F8522594C352F2A': // Doom II, map15 + { + SetSectorSpecial(147, 0); + break; + } + case '0D491365C1B88B7D1B603890100DD03E': // doom2.wad map18 + { + // missing textures + SetWallTexture(451, Line.front, Side.mid, "metal"); + SetWallTexture(459, Line.front, Side.mid, "metal"); + break; + } + case 'B5506B1E8F2FC272AD0C77B9E0DF5491': // doom2.wad map19 + { + // missing textures + SetWallTexture(355, Line.back, Side.top, "STONE2"); + SetWallTexture(736, Line.front, Side.top, "SLADWALL"); + break; + } + case 'EBDAC00E9D25D884B2C8F4B1F0390539': // doom2.wad map21 + { + // push ceiling down in glitchy sectors above the stair switches + OffsetSectorPlane(50, Sector.ceiling, -56); + OffsetSectorPlane(54, Sector.ceiling, -56); + break; + } + case '110F84DE041052B59307FAF0293E6BC0': // Doom II, map27 + { + SetSectorSpecial(93, 0); + SetWallTexture(582, Line.back, Side.top, "ZIMMER3"); + break; + } + case '20251EDA21B2F2ECF6FF5B8BBC00B26C': // Doom II, MAP29 + { + // Missing textures on teleporters + TextureID support3 = TexMan.CheckForTexture("SUPPORT3", TexMan.Type_Wall); + for(int i=0;i<4;i++) + { + SetWallTextureID(405+i, Line.back, Side.bottom, SUPPORT3); + SetWallTextureID(516+i, Line.back, Side.bottom, SUPPORT3); + SetWallTextureID(524+1, Line.back, Side.bottom, SUPPORT3); + SetWallTextureID(1146+i, Line.back, Side.bottom, SUPPORT3); + SetWallTextureID(1138+i, Line.back, Side.bottom, SUPPORT3); + } + break; + } + case 'ABC4EB5A1535ECCD0061AD14F3547908': // Plutonia Experiment, map26 + { + SetSectorSpecial(156, 0); + break; + } + + case 'FF635FB9A2F076566299910F8C78F707': // nerve.wad, level04 + { + SetSectorSpecial(868, 0); + break; + } } } + private static native void ClearSectorTags(int sector); + private static native void AddSectorTag(int sector, int tag); + private static native void OffsetSectorPlane(int sector, int plane, double offset); + private static native void SetThingSkills(int thing, int skills); + private static native void SetThingZ(int thing, double z); + private static native void SetThingFlags(int thing, int flags); + private static void SetWallTexture(int line, int side, int texpart, String texture) { SetWallTextureID(line, side, texpart, TexMan.CheckForTexture(texture, TexMan.Type_Wall)); @@ -36,6 +426,31 @@ class LevelCompatibility play level.Lines[line].sidedef[side].SetTexture(texpart, texture); } + private static void SetLineFlags(int line, int setflags, int clearflags = 0) + { + level.Lines[line].flags = (level.Lines[line].flags & ~clearflags) | setflags; + } + + private static void SetLineActivation(int line, int acttype) + { + level.Lines[line].activation = acttype; + } + + private static void ClearLineSpecial(int line) + { + level.Lines[line].special = 0; + } + + private static void SetLineSpecial(int line, int special, int arg1 = 0, int arg2 = 0, int arg3 = 0, int arg4 = 0, int arg5 = 0) + { + level.Lines[line].special = special; + level.Lines[line].args[0] = arg1; + level.Lines[line].args[1] = arg2; + level.Lines[line].args[2] = arg3; + level.Lines[line].args[3] = arg4; + level.Lines[line].args[4] = arg5; + } + private static void SetSectorSpecial(int sectornum, int special) { level.sectors[sectornum].special = special;