A sort of solution is to make a local server and connect to it with sv_noweaponspawn, but that comes with the burden of having the game act like it's a server, and not a singleplayer game.
Is there a way to just enable things with the non-singleplayer flag in singleplayer?
I made a python script to edit maps in .wad files to do this, for now:
Code: Select all
from sys import argv
from struct import pack, unpack
if len(argv) == 1:
input('No input .wad specified.\nDrag a .wad file onto the script, or run the script with the .wad as a parameter. This will directly edit the file, so keep a backup!\n')
quit()
thing_monsterthings=(7,9,16,58,64,65,66,67,68,69,71,72,84,3001,3002,3003,3004,3005,3006)
f = open(argv[1],'rb+')
f.seek(4)
wad_numfiles = unpack('I',f.read(4))[0]
wad_iaddress = unpack('I',f.read(4))[0]
wad_ioffset = 0
info_flagsflipped = 0
f.seek(wad_iaddress)
for file in range(wad_numfiles):
wad_ientry_offset = unpack('I',f.read(4))[0]
wad_ientry_size = unpack('I',f.read(4))[0]
wad_ientry_name = f.read(8)
wad_ioffset +=1
if wad_ientry_name == b'THINGS\0\0':
if wad_ientry_size % 10:
raise AssertionError('Things lump (file {}) is not divisible by 10; halted.'.format(wad_ioffset))
f.seek(wad_ientry_offset)
for thing in range(wad_ientry_size//10):
f.seek(wad_ientry_offset+thing*10+6)
thing_type = unpack('H',f.read(2))[0]
thing_flags = unpack('H',f.read(2))[0]
if thing_type in thing_monsterthings:
if thing_flags & 0x10:
f.seek(f.tell()-2)
f.write(pack('H',thing_flags^0x10))
info_flagsflipped+=1
f.seek(wad_iaddress+10*wad_ioffset)
f.close()
if info_flagsflipped:
print('Activated {} multiplayer-only monster{}.'.format(info_flagsflipped,'' if info_flagsflipped == 1 else 's'))
else:
print('No multiplayer-only monsters found.')
input()