diff --git a/games/doom/data/ObAddon_Textures_2.wad b/games/doom/data/ObAddon_Textures_2.wad index 77b105589..d64036be9 100644 Binary files a/games/doom/data/ObAddon_Textures_2.wad and b/games/doom/data/ObAddon_Textures_2.wad differ diff --git a/games/doom/data/ObAddon_Textures_Brightmaps.wad b/games/doom/data/ObAddon_Textures_Brightmaps.wad index 07c1b105e..3a0f67e5d 100644 Binary files a/games/doom/data/ObAddon_Textures_Brightmaps.wad and b/games/doom/data/ObAddon_Textures_Brightmaps.wad differ diff --git a/games/doom/fabs/joiner/gtd_barred.lua b/games/doom/fabs/joiner/gtd_barred.lua index 76dc54a69..f8c08b583 100644 --- a/games/doom/fabs/joiner/gtd_barred.lua +++ b/games/doom/fabs/joiner/gtd_barred.lua @@ -1,12 +1,13 @@ PREFABS.Joiner_gtd_barred1 = { file = "joiner/gtd_barred.wad", + map = "MAP01", where = "seeds", shape = "I", key = "barred", - prob = 70, + prob = 50, seed_w = 2, seed_h = 1, @@ -20,3 +21,11 @@ PREFABS.Joiner_gtd_barred1 = tag_1 = "?door_tag", door_action = "S1_OpenDoor", } + +PREFABS.Joiner_gtd_barred2 = +{ + template = "Joiner_gtd_barred1", + map = "MAP02", + + x_fit = {32,40 , 62,72 , 124,132 , 184,192 , 216,224} +} diff --git a/games/doom/fabs/joiner/gtd_barred.wad b/games/doom/fabs/joiner/gtd_barred.wad index 139c21987..9788e9d8b 100644 Binary files a/games/doom/fabs/joiner/gtd_barred.wad and b/games/doom/fabs/joiner/gtd_barred.wad differ diff --git a/games/doom/fabs/wall/gtd_wall_hell_vaults.wad b/games/doom/fabs/wall/gtd_wall_hell_vaults.wad index 205e44339..d36124c4f 100644 Binary files a/games/doom/fabs/wall/gtd_wall_hell_vaults.wad and b/games/doom/fabs/wall/gtd_wall_hell_vaults.wad differ diff --git a/games/doom/fabs/window/gtd_window_chainlinks.wad b/games/doom/fabs/window/gtd_window_chainlinks.wad index 2bcd9c002..45d211235 100644 Binary files a/games/doom/fabs/window/gtd_window_chainlinks.wad and b/games/doom/fabs/window/gtd_window_chainlinks.wad differ diff --git a/games/doom/fabs/window/gtd_window_low.wad b/games/doom/fabs/window/gtd_window_low.wad index d0eb5c9ed..f8be25c08 100644 Binary files a/games/doom/fabs/window/gtd_window_low.wad and b/games/doom/fabs/window/gtd_window_low.wad differ diff --git a/games/doom/fabs/window/gtd_window_tech_abstract.wad b/games/doom/fabs/window/gtd_window_tech_abstract.wad index b2cba8692..89c64d853 100644 Binary files a/games/doom/fabs/window/gtd_window_tech_abstract.wad and b/games/doom/fabs/window/gtd_window_tech_abstract.wad differ diff --git a/modules/zdoom_armaetus_epic_textures.lua b/modules/zdoom_armaetus_epic_textures.lua index 4284f752a..753b2942b 100644 --- a/modules/zdoom_armaetus_epic_textures.lua +++ b/modules/zdoom_armaetus_epic_textures.lua @@ -665,6 +665,10 @@ end function OBS_RESOURCE_PACK_EPIC_TEXTURES.synthesize_procedural_themes() + if PARAM.bool_orp_room_theme_synthesizer == false then + return + end + local function pick_element(lev_theme, texture_type) local t, RT = {} local result @@ -702,7 +706,7 @@ function OBS_RESOURCE_PACK_EPIC_TEXTURES.synthesize_procedural_themes() end t.env = "building" - t.prob = rand.pick({20,30,40,50,60}) + t.prob = rand.pick({20,30,40,50,60}) * PARAM.float_orp_room_theme_synth_mult t.floors[pick_element(theme, "floors")] = 5 t.floors[pick_element(theme, "floors")] = 5 @@ -1314,7 +1318,29 @@ OB_MODULES["armaetus_epic_textures"] = valuator = "button", default = 0, tooltip = _("Renders hell theme maps to never use snow or desert environment themes regardless of theme assignment."), - priority= -3 + priority= -3, + gap = 1 + }, + + { + name = "bool_orp_room_theme_synthesizer", + label = _("Room Theme Synthesizer [Experimental]"), + valuator = "button", + default = 1, + priority = -4, + tooltip = _("Creates synthetic room themes by combining walls and flats from existing entries.") + }, + { + name = "float_orp_room_theme_synth_mult", + label = _("Synth Room Theme Multiplier"), + valuator = "slider", + units="x", + min=0, + max=20, + increment = 0.1, + default = 1, + tooltip = _("Multiplier for all synthesized Resource Pack room themes."), + priority = -5, } } } diff --git a/modules/zdoom_armaetus_materials.lua b/modules/zdoom_armaetus_materials.lua index eb7216e5f..13b60f8cc 100644 --- a/modules/zdoom_armaetus_materials.lua +++ b/modules/zdoom_armaetus_materials.lua @@ -2303,6 +2303,40 @@ brightmap texture GOTH21 { map OBRGT21 } +brightmap texture GOTH04 +{ + map GOTH04BR +} +brightmap texture GOTH19 +{ + map GOTH19BR +} +brightmap texture GOTH20 +{ + map GOTH20BR +} +brightmap texture GOTH33 +{ + map GOTH33BR +} + +// gothic lavafalls +brightmap texture MFALL1 +{ + map MFALLBR +} +brightmap texture MFALL2 +{ + map MFALLBR +} +brightmap texture MFALL3 +{ + map MFALLBR +} +brightmap texture MFALL4 +{ + map MFALLBR +} // gothic switches brightmap texture SW2SKUL1 @@ -2616,6 +2650,11 @@ brightmap texture SD_TSGWB map STGSWBBR } +brightmap texture SD_TSGWC +{ + map STGSWCBR +} + brightmap texture S_W2WALE { map SW2WLEBR diff --git a/modules/zdoom_otex.lua b/modules/zdoom_otex.lua index 9b57bb624..1d12164ff 100644 --- a/modules/zdoom_otex.lua +++ b/modules/zdoom_otex.lua @@ -25,7 +25,92 @@ OTEX_ROOM_THEMES = { } OTEX_EXCLUSIONS = { + -- animated textures + WRNG = "textures", + CHAN = "all", + + -- textures with transparency + EXIT = "all", + FENC = "all", + SWTC = "all", + WARP = "all", + VINE = "all", + SOLI = "all", + + -- liquids + FALL = "all", + BLOD = "all", + GOOP = "all", + LAVA = "all", + ICYW = "all", + NUKE = "all", + SLUD = "all", + TAR_ = "all", + WATE = "all", + + -- skies + SKY1 = "all", + SKY2 = "all", + SKY3 = "all", + SKY4 = "all", + SKY5 = "all", + SKY6 = "all", + + -- teleporter flats + TLPT = "all", + + LGHT = "all", + + -- outdoors + GRSS = "all" +} + +-- some textures that must be removed manually from the DB +OTEX_DIRECT_REMOVALS = +{ + MRBL = + { + textures = + { + "OMRBLA90", + "OMRBLA91", + "OMBRLA92", + "OMBRLA93", + "OMBRLA94", + + "OMBRLC90", + + "OMBRLF29", + "OMBRLF38", + "OMBRLF90", + + "OMBRLG90", + + "OMRBLI92", + "OMRBLI93", + + "OMRBLJ90", + "OMRBLJ93", + + "OMRBLK90", + + "OMRBLO28", + "OMRBLO29", + + "OMBRLP90", + "OMBRLP91", + + "OMBRLR90", + "OMBRLR94" + } + } +} +OTEX_THEME_RESTRICTIONS = +{ + MRBL = "hell", + BONE = "hell", + FLSH = "hell" } function OTEX_PROC_MODULE.setup(self) @@ -41,6 +126,31 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() resource_tab = table.copy(OTEX_RESOURCE_DB) table.name_up(resource_tab) + -- resource_tab exclusions + for k,v in pairs(OTEX_EXCLUSIONS) do + if v == "textures" then + resource_tab[k].textures = {} + resource_tab[k].has_textures = false + resource_tab[k].has_all = false + elseif v == "flats" then + resource_tab[k].flats = {} + resource_tab[k].has_flats = false + resource_tab[k].has_all = false + else + resource_tab[k] = {} + resource_tab[k] = nil + end + end + + -- direct removals + for theme_group,_ in pairs(OTEX_DIRECT_REMOVALS) do + for img_group,_ in pairs(OTEX_DIRECT_REMOVALS[theme_group]) do + for _,tex in pairs(OTEX_DIRECT_REMOVALS[theme_group][img_group]) do + table.kill_elem(resource_tab[theme_group][img_group], tex) + end + end + end + for _,resource_group in pairs(resource_tab) do if resource_group.has_all then for _,T in pairs(resource_group.textures) do @@ -90,24 +200,34 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() end -- try to create a consistent theme - for i = 1, 8 do - local grouping = {} - local room_theme = {} + for i = 1, PARAM.float_otex_num_themes / 2 do + local grouping, room_theme = {} + local tab_pick, RT_name, RT_theme while grouping and not grouping.has_all == true do grouping = resource_tab[rand.pick(group_choices)] end + -- quick hack fix to prevent hell themes from appearing + -- on tech and urban + RT_theme = "any" + if OTEX_THEME_RESTRICTIONS[grouping] + and OTEX_THEME_RESTRICTIONS[grouping] == "hell" then + RT_theme = "hell" + end + + RT_name = RT_theme .. "_OTEX_cons_" .. i room_theme = { - name = "any_OTEX_cons_" .. i, env = "building", - prob = rand.pick({40,50,60}), + prob = rand.pick({40,50,60}) * PARAM.float_otex_rt_prob_mult } room_theme.walls = {} room_theme.floors = {} room_theme.ceilings = {} - room_theme.walls[rand.pick(grouping.textures)] = 5 + tab_pick = rand.pick(grouping.textures) + room_theme.walls[tab_pick] = 5 + RT_name = RT_name .. tab_pick .. "_" if rand.odds(25) then grouping = resource_tab[rand.pick(group_choices)] @@ -115,8 +235,9 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() grouping = resource_tab[rand.pick(group_choices)] end end - room_theme.floors[rand.pick(grouping.flats)] = 5 - room_theme.floors[rand.pick(grouping.flats)] = 5 + tab_pick = rand.pick(grouping.flats) + room_theme.floors[tab_pick] = 5 + RT_name = RT_name .. tab_pick .. "_" if rand.odds(25) then grouping = resource_tab[rand.pick(group_choices)] @@ -124,20 +245,21 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() grouping = resource_tab[rand.pick(group_choices)] end end - room_theme.ceilings[rand.pick(grouping.flats)] = 5 - room_theme.ceilings[rand.pick(grouping.flats)] = 5 + tab_pick = rand.pick(grouping.flats) + room_theme.ceilings[tab_pick] = 5 + RT_name = RT_name .. tab_pick - OTEX_ROOM_THEMES[room_theme.name] = room_theme + room_theme.name = RT_name + OTEX_ROOM_THEMES[RT_name] = room_theme end -- try a completely random theme - for i = 1, 8 do - local RT_name = "any_OTEX_rand_" .. i + for i = 1, PARAM.float_otex_num_themes / 2 do + local RT_name = "any_OTEX_" .. i local room_theme, tab_pick = {} room_theme = { - name = RT_name, env = "building", prob = rand.pick({40,50,60}), } @@ -149,22 +271,50 @@ function OTEX_PROC_MODULE.synthesize_procedural_themes() while not resource_tab[tab_pick].has_textures == true do tab_pick = rand.pick(group_choices) end + RT_name = RT_name .. tab_pick .. "_" room_theme.walls[rand.pick(resource_tab[tab_pick].textures)] = 5 tab_pick = rand.pick(group_choices) while not resource_tab[tab_pick].has_flats == true do tab_pick = rand.pick(group_choices) end + RT_name = RT_name .. tab_pick .. "_" room_theme.floors[rand.pick(resource_tab[tab_pick].flats)] = 5 tab_pick = rand.pick(group_choices) while not resource_tab[tab_pick].has_flats == true do tab_pick = rand.pick(group_choices) end + RT_name = RT_name .. tab_pick .. "_" room_theme.ceilings[rand.pick(resource_tab[tab_pick].flats)] = 5 + room_theme.name = RT_name OTEX_ROOM_THEMES[RT_name] = room_theme end + + -- insert into outdoor facades + for theme,table_group in pairs(GAME.THEMES) do + local tab_pick, tex_pick, pick_num = 0 + + if GAME.THEMES[theme].facades then + for i = 1, 50 do + tab_pick = rand.pick(group_choices) + while resource_tab[tab_pick].has_textures == false do + tab_pick = rand.pick(group_choices) + end + + local pick_num = 0 + tex_pick = rand.pick(resource_tab[tab_pick].textures) + while not GAME.THEMES[theme].facades[tex_pick] and pick_num < 5 do + tex_pick = rand.pick(resource_tab[tab_pick].textures) + GAME.THEMES[theme].facades[tex_pick] = rand.pick({15,20,25,30}) + pick_num = pick_num + 1 + end + end + end + + end + end @@ -199,4 +349,34 @@ OB_MODULES["otex_proc_module"] = "OTEX must be manually loaded in the sourceport. " .. "Includes textures and flats only, no patches.\n\n" .. "Currently does not make any kind of sensibly curated room themes."), + + options = + { + { + name="float_otex_num_themes", + label=_("Room Themes Count"), + valuator = "slider", + min = 2, + max = 40, + increment = 2, + default = 8, + tooltip = _("How many OTEX room themes to synthesize."), + longtip = _("Not all room themes may show up in levels as appearance " .. + "is reliant on use probability. Use multipler below to increase " .. + "or decrease further"), + priority = 2 + }, + { + name="float_otex_rt_prob_mult", + label=_("Probability Multiplier"), + valuator="slider", + units="x", + min = 0, + max = 20, + increment = 0.1, + default = 1, + tooltip = _("Multiplier for all synthesized OTEX room themes."), + priority = 1 + } + } }