From 1891b5e40b9ecbebe14db65548343b50dd9696cc Mon Sep 17 00:00:00 2001 From: Simon Howard Date: Sat, 14 Dec 2013 16:34:01 -0500 Subject: [PATCH] textgen: Set level names from DEHACKED lump. Use the DEHACKED lump as a source of truth for level names, and set the textgen configuration accordingly. Make the current level names in the DEHACKED lump upper case so that the current ExMy/MAPxy names look correct. --- graphics/text/config.py | 87 +++++++----- lumps/fraggle/freedoom.bex | 264 ++++++++++++++++++------------------- 2 files changed, 185 insertions(+), 166 deletions(-) diff --git a/graphics/text/config.py b/graphics/text/config.py index a41a9739..5bea930a 100644 --- a/graphics/text/config.py +++ b/graphics/text/config.py @@ -76,40 +76,9 @@ white_graphics = { 'wicolon': ':', 'wiminus': '-', - # TODO: Generate WILV graphics based on level names from DEHACKED lump. - - 'cwilv00': 'MAP01', 'cwilv01': 'MAP02', 'cwilv02': 'MAP03', - 'cwilv03': 'MAP04', 'cwilv04': 'MAP05', 'cwilv05': 'MAP06', - 'cwilv06': 'MAP07', 'cwilv07': 'MAP08', 'cwilv08': 'MAP09', - 'cwilv09': 'MAP10', - - 'cwilv10': 'MAP11', 'cwilv11': 'MAP12', 'cwilv12': 'MAP13', - 'cwilv13': 'MAP14', 'cwilv14': 'MAP15', 'cwilv15': 'MAP16', - 'cwilv16': 'MAP17', 'cwilv17': 'MAP18', 'cwilv18': 'MAP19', - 'cwilv19': 'MAP20', - - 'cwilv20': 'MAP21', 'cwilv21': 'MAP22', 'cwilv22': 'MAP23', - 'cwilv23': 'MAP24', 'cwilv24': 'MAP25', 'cwilv25': 'MAP26', - 'cwilv26': 'MAP27', 'cwilv27': 'MAP28', 'cwilv28': 'MAP29', - 'cwilv29': 'MAP30', - - 'cwilv30': 'MAP31', 'cwilv31': 'MAP32', - - 'wilv00': 'E1M1', 'wilv01': 'E1M2', 'wilv02': 'E1M3', 'wilv03': 'E1M4', - 'wilv04': 'E1M5', 'wilv05': 'E1M6', 'wilv06': 'E1M7', 'wilv07': 'E1M8', - 'wilv08': 'E1M9', - - 'wilv10': 'E2M1', 'wilv11': 'E2M2', 'wilv12': 'E2M3', 'wilv13': 'E2M4', - 'wilv14': 'E2M5', 'wilv15': 'E2M6', 'wilv16': 'E2M7', 'wilv17': 'E2M8', - 'wilv18': 'E2M9', - - 'wilv20': 'E3M1', 'wilv21': 'E3M2', 'wilv22': 'E3M3', 'wilv23': 'E3M4', - 'wilv24': 'E3M5', 'wilv25': 'E3M6', 'wilv26': 'E3M7', 'wilv27': 'E3M8', - 'wilv28': 'E3M9', - - 'wilv30': 'E4M1', 'wilv31': 'E4M2', 'wilv32': 'E4M3', 'wilv33': 'E4M4', - 'wilv34': 'E4M5', 'wilv35': 'E4M6', 'wilv36': 'E4M7', 'wilv37': 'E4M8', - 'wilv38': 'E4M9', + # Note: level names are also included in this dictionary, with + # the data added programatically from the DEHACKED lump, see + # code below. } blue_graphics = { @@ -223,3 +192,53 @@ red_graphics = { 'm_wadopt': 'wad options', } +def read_bex_lump(filename): + """Read the BEX (Dehacked) lump from the given filename. + + Returns: + Dictionary mapping from name to value. + """ + result = {} + with open(filename) as f: + for line in f: + # Ignore comments: + line = line.strip() + if len(line) == 0 or line[0] in '#;': + continue + # Just split on '=' and interpret that as an + # assignment. This is primitive and doesn't read + # like a full BEX parser should, but it's good + # enough for our purposes here. + assign = line.split('=', 2) + if len(assign) != 2: + continue + result[assign[0].strip()] = assign[1].strip() + return result + +def update_from_bex(config, bexdata): + """Update the given config dictionary with data from a BEX lump. + + Args: + config: Dictionary of lumps, mapping from lump name to + text string to contain in it. + bexdata: Dictionary of data read from BEX lump. + """ + def update_lump(lumpname, bexname): + if bexname not in bexdata: + raise Exception('Level name %s not defined in ' + 'DEHACKED lump!' % bexname) + config[lumpname] = bexdata[bexname] + + for e in range(4): + for m in range(9): + # HUSTR_E1M1 from BEX => wilv00 + update_lump('wilv%i%i' % (e, m), + 'HUSTR_E%iM%i' % (e + 1, m + 1)) + + for m in range(32): + # HUSTR_1 => cwilv00 + update_lump('cwilv%02i' % m, + 'HUSTR_%i' % (m + 1)) + +update_from_bex(white_graphics, read_bex_lump('../../lumps/dehacked.lmp')) + diff --git a/lumps/fraggle/freedoom.bex b/lumps/fraggle/freedoom.bex index b1f8e0dd..1226c66d 100644 --- a/lumps/fraggle/freedoom.bex +++ b/lumps/fraggle/freedoom.bex @@ -51,42 +51,42 @@ PD_YELLOWS = this door requires the yellow skeleton key. PD_ANY = this door requires any key. PD_ALL3 = this door requires all three keys. PD_ALL6 = this door requires all six keys and passcards! -HUSTR_E1M1 = e1m1 -HUSTR_E1M2 = e1m2 -HUSTR_E1M3 = e1m3 -HUSTR_E1M4 = e1m4 -HUSTR_E1M5 = e1m5 -HUSTR_E1M6 = e1m6 -HUSTR_E1M7 = e1m7 -HUSTR_E1M8 = e1m8 -HUSTR_E1M9 = e1m9 -HUSTR_E2M1 = e2m1 -HUSTR_E2M2 = e2m2 -HUSTR_E2M3 = e2m3 -HUSTR_E2M4 = e2m4 -HUSTR_E2M5 = e2m5 -HUSTR_E2M6 = e2m6 -HUSTR_E2M7 = e2m7 -HUSTR_E2M8 = e2m8 -HUSTR_E2M9 = e2m9 -HUSTR_E3M1 = e3m1 -HUSTR_E3M2 = e3m2 -HUSTR_E3M3 = e3m3 -HUSTR_E3M4 = e3m4 -HUSTR_E3M5 = e3m5 -HUSTR_E3M6 = e3m6 -HUSTR_E3M7 = e3m7 -HUSTR_E3M8 = e3m8 -HUSTR_E3M9 = e3m9 -HUSTR_E4M1 = e4m1 -HUSTR_E4M2 = e4m2 -HUSTR_E4M3 = e4m3 -HUSTR_E4M4 = e4m4 -HUSTR_E4M5 = e4m5 -HUSTR_E4M6 = e4m6 -HUSTR_E4M7 = e4m7 -HUSTR_E4M8 = e4m8 -HUSTR_E4M9 = e4m9 +HUSTR_E1M1 = E1M1 +HUSTR_E1M2 = E1M2 +HUSTR_E1M3 = E1M3 +HUSTR_E1M4 = E1M4 +HUSTR_E1M5 = E1M5 +HUSTR_E1M6 = E1M6 +HUSTR_E1M7 = E1M7 +HUSTR_E1M8 = E1M8 +HUSTR_E1M9 = E1M9 +HUSTR_E2M1 = E2M1 +HUSTR_E2M2 = E2M2 +HUSTR_E2M3 = E2M3 +HUSTR_E2M4 = E2M4 +HUSTR_E2M5 = E2M5 +HUSTR_E2M6 = E2M6 +HUSTR_E2M7 = E2M7 +HUSTR_E2M8 = E2M8 +HUSTR_E2M9 = E2M9 +HUSTR_E3M1 = E3M1 +HUSTR_E3M2 = E3M2 +HUSTR_E3M3 = E3M3 +HUSTR_E3M4 = E3M4 +HUSTR_E3M5 = E3M5 +HUSTR_E3M6 = E3M6 +HUSTR_E3M7 = E3M7 +HUSTR_E3M8 = E3M8 +HUSTR_E3M9 = E3M9 +HUSTR_E4M1 = E4M1 +HUSTR_E4M2 = E4M2 +HUSTR_E4M3 = E4M3 +HUSTR_E4M4 = E4M4 +HUSTR_E4M5 = E4M5 +HUSTR_E4M6 = E4M6 +HUSTR_E4M7 = E4M7 +HUSTR_E4M8 = E4M8 +HUSTR_E4M9 = E4M9 CC_ZOMBIE = zombie CC_SHOTGUN = shotgun zombie CC_HEAVY = mini-gun zombie @@ -104,102 +104,102 @@ CC_ARCH = flamebringer CC_SPIDER = large technospider CC_CYBER = mechabomination CC_HERO = savior of us all -HUSTR_1 = map01 -HUSTR_2 = map02 -HUSTR_3 = map03 -HUSTR_4 = map04 -HUSTR_5 = map05 -HUSTR_6 = map06 -HUSTR_7 = map07 -HUSTR_8 = map08 -HUSTR_9 = map09 -HUSTR_10 = map10 -HUSTR_11 = map11 -HUSTR_12 = map12 -HUSTR_13 = map13 -HUSTR_14 = map14 -HUSTR_15 = map15 -HUSTR_16 = map16 -HUSTR_17 = map17 -HUSTR_18 = map18 -HUSTR_19 = map19 -HUSTR_20 = map20 -HUSTR_21 = map21 -HUSTR_22 = map22 -HUSTR_23 = map23 -HUSTR_24 = map24 -HUSTR_25 = map25 -HUSTR_26 = map26 -HUSTR_27 = map27 -HUSTR_28 = map28 -HUSTR_29 = map29 -HUSTR_30 = map30 -HUSTR_31 = map31 -HUSTR_32 = map32 -PHUSTR_1 = map01 -PHUSTR_2 = map02 -PHUSTR_3 = map03 -PHUSTR_4 = map04 -PHUSTR_5 = map05 -PHUSTR_6 = map06 -PHUSTR_7 = map07 -PHUSTR_8 = map08 -PHUSTR_9 = map09 -PHUSTR_10 = map10 -PHUSTR_11 = map11 -PHUSTR_12 = map12 -PHUSTR_13 = map13 -PHUSTR_14 = map14 -PHUSTR_15 = map15 -PHUSTR_16 = map16 -PHUSTR_17 = map17 -PHUSTR_18 = map18 -PHUSTR_19 = map19 -PHUSTR_20 = map20 -PHUSTR_21 = map21 -PHUSTR_22 = map22 -PHUSTR_23 = map23 -PHUSTR_24 = map24 -PHUSTR_25 = map25 -PHUSTR_26 = map26 -PHUSTR_27 = map27 -PHUSTR_28 = map28 -PHUSTR_29 = map29 -PHUSTR_30 = map30 -PHUSTR_31 = map31 -PHUSTR_32 = map32 -THUSTR_1 = map01 -THUSTR_2 = map02 -THUSTR_3 = map03 -THUSTR_4 = map04 -THUSTR_5 = map05 -THUSTR_6 = map06 -THUSTR_7 = map07 -THUSTR_8 = map08 -THUSTR_9 = map09 -THUSTR_10 = map10 -THUSTR_11 = map11 -THUSTR_12 = map12 -THUSTR_13 = map13 -THUSTR_14 = map14 -THUSTR_15 = map15 -THUSTR_16 = map16 -THUSTR_17 = map17 -THUSTR_18 = map18 -THUSTR_19 = map19 -THUSTR_20 = map20 -THUSTR_21 = map21 -THUSTR_22 = map22 -THUSTR_23 = map23 -THUSTR_24 = map24 -THUSTR_25 = map25 -THUSTR_26 = map26 -THUSTR_27 = map27 -THUSTR_28 = map28 -THUSTR_29 = map29 -THUSTR_30 = map30 -THUSTR_31 = map31 -THUSTR_32 = map32 +HUSTR_1 = MAP01 +HUSTR_2 = MAP02 +HUSTR_3 = MAP03 +HUSTR_4 = MAP04 +HUSTR_5 = MAP05 +HUSTR_6 = MAP06 +HUSTR_7 = MAP07 +HUSTR_8 = MAP08 +HUSTR_9 = MAP09 +HUSTR_10 = MAP10 +HUSTR_11 = MAP11 +HUSTR_12 = MAP12 +HUSTR_13 = MAP13 +HUSTR_14 = MAP14 +HUSTR_15 = MAP15 +HUSTR_16 = MAP16 +HUSTR_17 = MAP17 +HUSTR_18 = MAP18 +HUSTR_19 = MAP19 +HUSTR_20 = MAP20 +HUSTR_21 = MAP21 +HUSTR_22 = MAP22 +HUSTR_23 = MAP23 +HUSTR_24 = MAP24 +HUSTR_25 = MAP25 +HUSTR_26 = MAP26 +HUSTR_27 = MAP27 +HUSTR_28 = MAP28 +HUSTR_29 = MAP29 +HUSTR_30 = MAP30 +HUSTR_31 = MAP31 +HUSTR_32 = MAP32 +PHUSTR_1 = MAP01 +PHUSTR_2 = MAP02 +PHUSTR_3 = MAP03 +PHUSTR_4 = MAP04 +PHUSTR_5 = MAP05 +PHUSTR_6 = MAP06 +PHUSTR_7 = MAP07 +PHUSTR_8 = MAP08 +PHUSTR_9 = MAP09 +PHUSTR_10 = MAP10 +PHUSTR_11 = MAP11 +PHUSTR_12 = MAP12 +PHUSTR_13 = MAP13 +PHUSTR_14 = MAP14 +PHUSTR_15 = MAP15 +PHUSTR_16 = MAP16 +PHUSTR_17 = MAP17 +PHUSTR_18 = MAP18 +PHUSTR_19 = MAP19 +PHUSTR_20 = MAP20 +PHUSTR_21 = MAP21 +PHUSTR_22 = MAP22 +PHUSTR_23 = MAP23 +PHUSTR_24 = MAP24 +PHUSTR_25 = MAP25 +PHUSTR_26 = MAP26 +PHUSTR_27 = MAP27 +PHUSTR_28 = MAP28 +PHUSTR_29 = MAP29 +PHUSTR_30 = MAP30 +PHUSTR_31 = MAP31 +PHUSTR_32 = MAP32 +THUSTR_1 = MAP01 +THUSTR_2 = MAP02 +THUSTR_3 = MAP03 +THUSTR_4 = MAP04 +THUSTR_5 = MAP05 +THUSTR_6 = MAP06 +THUSTR_7 = MAP07 +THUSTR_8 = MAP08 +THUSTR_9 = MAP09 +THUSTR_10 = MAP10 +THUSTR_11 = MAP11 +THUSTR_12 = MAP12 +THUSTR_13 = MAP13 +THUSTR_14 = MAP14 +THUSTR_15 = MAP15 +THUSTR_16 = MAP16 +THUSTR_17 = MAP17 +THUSTR_18 = MAP18 +THUSTR_19 = MAP19 +THUSTR_20 = MAP20 +THUSTR_21 = MAP21 +THUSTR_22 = MAP22 +THUSTR_23 = MAP23 +THUSTR_24 = MAP24 +THUSTR_25 = MAP25 +THUSTR_26 = MAP26 +THUSTR_27 = MAP27 +THUSTR_28 = MAP28 +THUSTR_29 = MAP29 +THUSTR_30 = MAP30 +THUSTR_31 = MAP31 +THUSTR_32 = MAP32 HUSTR_PLRGREEN = g: HUSTR_PLRINDIGO = i: HUSTR_PLRBROWN = b: