diff --git a/themes/V3/5ePHB/snippets/coverpage.gen.js b/themes/V3/5ePHB/snippets/coverpage.gen.js index 0fb8ba7a4..4704a9d59 100644 --- a/themes/V3/5ePHB/snippets/coverpage.gen.js +++ b/themes/V3/5ePHB/snippets/coverpage.gen.js @@ -1,124 +1,123 @@ -const _ = require('lodash'); +const _ = require("lodash"); const titles = [ - 'The Burning Gallows', - 'The Ring of Nenlast', - 'Below the Blind Tavern', - 'Below the Hungering River', - 'Before Bahamut\'s Land', - 'The Cruel Grave from Within', - 'The Strength of Trade Road', - 'Through The Raven Queen\'s Worlds', - 'Within the Settlement', - 'The Crown from Within', - 'The Merchant Within the Battlefield', - 'Ioun\'s Fading Traveler', - 'The Legion Ingredient', - 'The Explorer Lure', - 'Before the Charming Badlands', - 'The Living Dead Above the Fearful Cage', - 'Vecna\'s Hidden Sage', - 'Bahamut\'s Demonspawn', - 'Across Gruumsh\'s Elemental Chaos', - 'The Blade of Orcus', - 'Beyond Revenge', - 'Brain of Insanity', - 'Breed Battle!, A New Beginning', - 'Evil Lake, A New Beginning', - 'Invasion of the Gigantic Cat, Part II', - 'Kraken War 2020', - 'The Body Whisperers', - 'The Diabolical Tales of the Ape-Women', - 'The Doctor Immortal', - 'The Doctor from Heaven', - 'The Graveyard', - 'Azure Core', - 'Core Battle', - 'Core of Heaven: The Guardian of Amazement', - 'Deadly Amazement III', - 'Dry Chaos IX', - 'Gate Thunder', - 'Guardian: Skies of the Dark Wizard', - 'Lute of Eternity', - 'Mercury\'s Planet: Brave Evolution', - 'Ruby of Atlantis: The Quake of Peace', - 'Sky of Zelda: The Thunder of Force', - 'Vyse\'s Skies', - 'White Greatness III', - 'Yellow Divinity', - 'Zidane\'s Ghost' + "The Burning Gallows", + "The Ring of Nenlast", + "Below the Blind Tavern", + "Below the Hungering River", + "Before Bahamut's Land", + "The Cruel Grave from Within", + "The Strength of Trade Road", + "Through The Raven Queen's Worlds", + "Within the Settlement", + "The Crown from Within", + "The Merchant Within the Battlefield", + "Ioun's Fading Traveler", + "The Legion Ingredient", + "The Explorer Lure", + "Before the Charming Badlands", + "The Living Dead Above the Fearful Cage", + "Vecna's Hidden Sage", + "Bahamut's Demonspawn", + "Across Gruumsh's Elemental Chaos", + "The Blade of Orcus", + "Beyond Revenge", + "Brain of Insanity", + "Breed Battle!, A New Beginning", + "Evil Lake, A New Beginning", + "Invasion of the Gigantic Cat, Part II", + "Kraken War 2020", + "The Body Whisperers", + "The Diabolical Tales of the Ape-Women", + "The Doctor Immortal", + "The Doctor from Heaven", + "The Graveyard", + "Azure Core", + "Core Battle", + "Core of Heaven: The Guardian of Amazement", + "Deadly Amazement III", + "Dry Chaos IX", + "Gate Thunder", + "Guardian: Skies of the Dark Wizard", + "Lute of Eternity", + "Mercury's Planet: Brave Evolution", + "Ruby of Atlantis: The Quake of Peace", + "Sky of Zelda: The Thunder of Force", + "Vyse's Skies", + "White Greatness III", + "Yellow Divinity", + "Zidane's Ghost", ]; const subtitles = [ - 'In an ominous universe, a botanist opposes terrorism.', - 'In a demon-haunted city, in an age of lies and hate, a physicist tries to find an ancient treasure and battles a mob of aliens.', - 'In a land of corruption, two cyberneticists and a dungeon delver search for freedom.', - 'In an evil empire of horror, two rangers battle the forces of hell.', - 'In a lost city, in an age of sorcery, a librarian quests for revenge.', - 'In a universe of illusions and danger, three time travellers and an adventurer search for justice.', - 'In a forgotten universe of barbarism, in an era of terror and mysticism, a virtual reality programmer and a spy try to find vengance and battle crime.', - 'In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.', - 'In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.', - 'In a universe of virutal reality and agony, in an age of ghosts and ghosts, a fortune-teller and a wanderer try to avert the apocalypse.', - 'In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.', - 'In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.', - 'In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.', - 'In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.', - 'In a kingdom of deception, a reporter searches for fame.', - 'In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.', - 'In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.', - 'In a dark city of confusion, three swordswomen and a singer battle lawlessness.', - 'In an ominous empire, in an age of hate, two philosophers and a student try to find justice and battle a mob of mages intent on stealing the souls of the innocent.', - 'In a kingdom of panic, six adventurers oppose lawlessness.', - 'In a land of dreams and hopelessness, three hackers and a cyborg search for justice.', - 'On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.', - 'In a wicked universe, five seers fight lawlessness.', - 'In a kingdom of death, in an era of illusion and blood, four colonists search for fame.', - 'In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.', - 'In a cursed empire, five inventors oppose terrorism.', - 'On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.', - 'In a forgotten land, a reporter and a spy try to stop the apocalypse.', - 'In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.', - 'On an infernal world of illusion, a grave robber and a watchman try to find revenge and combat a syndicate of mages intent on stealing the source of all magic.', - 'In a galaxy of dark magic, four fighters seek freedom.', - 'In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.', - 'In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.', - 'In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.', - 'In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.', - 'On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.', - 'In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.', - 'In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.', - 'In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.', - 'In a mysterious city of illusion, in an age of computerization, a witch-hunter tries to find the ultimate weapon and opposes an evil corporation.', - 'In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.', - 'In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.', - 'In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.', - 'In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.', - 'In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime.' + "In an ominous universe, a botanist opposes terrorism.", + "In a demon-haunted city, in an age of lies and hate, a physicist tries to find an ancient treasure and battles a mob of aliens.", + "In a land of corruption, two cyberneticists and a dungeon delver search for freedom.", + "In an evil empire of horror, two rangers battle the forces of hell.", + "In a lost city, in an age of sorcery, a librarian quests for revenge.", + "In a universe of illusions and danger, three time travellers and an adventurer search for justice.", + "In a forgotten universe of barbarism, in an era of terror and mysticism, a virtual reality programmer and a spy try to find vengance and battle crime.", + "In a universe of demons, in an era of insanity and ghosts, three bodyguards and a bodyguard try to find vengance.", + "In a kingdom of corruption and battle, seven artificial intelligences try to save the last living fertile woman.", + "In a universe of virutal reality and agony, in an age of ghosts and ghosts, a fortune-teller and a wanderer try to avert the apocalypse.", + "In a crime-infested kingdom, three martial artists quest for the truth and oppose evil.", + "In a terrifying universe of lost souls, in an era of lost souls, eight dancers fight evil.", + "In a galaxy of confusion and insanity, three martial artists and a duke battle a mob of psychics.", + "In an amazing kingdom, a wizard and a secretary hope to prevent the destruction of mankind.", + "In a kingdom of deception, a reporter searches for fame.", + "In a hellish empire, a swordswoman and a duke try to find the ultimate weapon and battle a conspiracy.", + "In an evil galaxy of illusion, in a time of technology and misery, seven psychiatrists battle crime.", + "In a dark city of confusion, three swordswomen and a singer battle lawlessness.", + "In an ominous empire, in an age of hate, two philosophers and a student try to find justice and battle a mob of mages intent on stealing the souls of the innocent.", + "In a kingdom of panic, six adventurers oppose lawlessness.", + "In a land of dreams and hopelessness, three hackers and a cyborg search for justice.", + "On a planet of mysticism, three travelers and a fire fighter quest for the ultimate weapon and oppose evil.", + "In a wicked universe, five seers fight lawlessness.", + "In a kingdom of death, in an era of illusion and blood, four colonists search for fame.", + "In an amazing kingdom, in an age of sorcery and lost souls, eight space pirates quest for freedom.", + "In a cursed empire, five inventors oppose terrorism.", + "On a crime-ridden planet of conspiracy, a watchman and an artificial intelligence try to find love and oppose lawlessness.", + "In a forgotten land, a reporter and a spy try to stop the apocalypse.", + "In a forbidden land of prophecy, a scientist and an archivist oppose a cabal of barbarians intent on stealing the souls of the innocent.", + "On an infernal world of illusion, a grave robber and a watchman try to find revenge and combat a syndicate of mages intent on stealing the source of all magic.", + "In a galaxy of dark magic, four fighters seek freedom.", + "In an empire of deception, six tomb-robbers quest for the ultimate weapon and combat an army of raiders.", + "In a kingdom of corruption and lost souls, in an age of panic, eight planetologists oppose evil.", + "In a galaxy of misery and hopelessness, in a time of agony and pain, five planetologists search for vengance.", + "In a universe of technology and insanity, in a time of sorcery, a computer techician quests for hope.", + "On a planet of dark magic and barbarism, in an age of horror and blasphemy, seven librarians search for fame.", + "In an empire of dark magic, in a time of blood and illusions, four monks try to find the ultimate weapon and combat terrorism.", + "In a forgotten empire of dark magic, six kings try to prevent the destruction of mankind.", + "In a galaxy of dark magic and horror, in an age of hopelessness, four marines and an outlaw combat evil.", + "In a mysterious city of illusion, in an age of computerization, a witch-hunter tries to find the ultimate weapon and opposes an evil corporation.", + "In a damned kingdom of technology, a virtual reality programmer and a fighter seek fame.", + "In a hellish kingdom, in an age of blasphemy and blasphemy, an astrologer searches for fame.", + "In a damned world of devils, an alien and a ranger quest for love and oppose a syndicate of demons.", + "In a cursed galaxy, in a time of pain, seven librarians hope to avert the apocalypse.", + "In a crime-infested galaxy, in an era of hopelessness and panic, three champions and a grave robber try to solve the ultimate crime.", ]; +module.exports = () => { + return ` -module.exports = ()=>{ - return ` +{{coverPage -{{margin-top:225px}} +![image](https://i.imgur.com/Mqx8Vf7.png) {left:0px} # ${_.sample(titles)} -{{margin-top:25px}} +## ${_.sample(subtitles)} +___ + +{{banner +5e HOMEBREW +}} + +{{footnote +Everything a Homebrew needs to create a pretty document
for the world's greatest roleplaying game +}} -{{wide -##### ${_.sample(subtitles)} }} \\page`; -}; \ No newline at end of file +}; diff --git a/themes/V3/5ePHB/style.less b/themes/V3/5ePHB/style.less index 09f0dc790..1d4832a25 100644 --- a/themes/V3/5ePHB/style.less +++ b/themes/V3/5ePHB/style.less @@ -677,6 +677,137 @@ body { margin-top : 0.2cm; } } +//***************************** +// * COVER PAGE +// *****************************/ + +.page { + &:has(.coverPage):after { + display: none; + } + .coverPage { + position: absolute; + inset: 0; + padding: 90px 0px; + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + + p { + color: white; + font-size: 20px; + } + > p > img { + position: absolute; + inset: 0; + height: 100%; + min-width: 100%; + } + &:before { + background-image: @coverPageLogo; + background-position: center; + background-size: 60px; + background-repeat: no-repeat; + position: absolute; + top: 15px; + content: ''; + display: block; + height: 70px; + width: 100%; + filter: drop-shadow(0 0 10px black); + } + h1 { + --shadow-x0: #000 0px 0px 3.5px; + --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0); + --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1); + --shadow-x3: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2); + text-shadow: var(--shadow-x3), var(--shadow-x3), var(--shadow-x3); + text-transform: uppercase; + max-width: 18ch; + margin-top: 3px; + color: white; + font-family: NodestoCapsCondensed; + font-size: 6.6em; + font-weight: normal; + line-height: 72px; + word-break: break-word; + transform: scaleX(0.94); + } + hr { + position: relative; + top: -16px; + background-image: @coverPageHorizontalRule; + background-size: 100% 100%; + visibility: visible; + height: 64px; + width: 450px; + border: none; + margin: 2px auto -24px; + } + h2 { + --shadow-x0: #000 0px 0px 2.5px; + --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0); + --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1); + --shadow-x3: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2); + text-shadow: var(--shadow-x3), var(--shadow-x3), var(--shadow-x3); + font-family: NodestoCapsCondensed; + font-weight: normal; + font-size: 2.5em; + letter-spacing: 0.5px; + max-width: 46ch; + color: white; + } + .banner { + filter: drop-shadow(2px 1px 5px #000); + position: absolute; + left: 0; + bottom: 157px; + background-image: @coverPageBanner; + background-position: left; + background-repeat: no-repeat; + background-size: 400px; + content: ''; + display: block; + height: 67px; + width: 50%; + + p { + position: absolute; + top: 60%; + left: 0; + translate: 0 -50%; + width: 100%; + text-align: left; + padding-left: 50px; + font-family: NodestoCapsCondensed; + font-weight: normal; + font-size: 40px; + font-stretch: 200%; + letter-spacing: 0.5px; + transform: scaleY(0.7); + } + } + + .footnote { + --shadow-x0: #000 0px 0px 1.8px; + --shadow-x1: var(--shadow-x0), var(--shadow-x0), var(--shadow-x0); + --shadow-x2: var(--shadow-x1), var(--shadow-x1), var(--shadow-x1); + text-shadow: var(--shadow-x2), var(--shadow-x2), var(--shadow-x2); + text-transform: none; + position: absolute; + bottom: 3.5em; + left: 0; + width: 100%; + font-family: VeraCruzBold; + text-align: center; + letter-spacing: 0.6px; + transform: scaleX(90%); + } + + } +} + //***************************** // * TABLE OF CONTENTS // *****************************/ diff --git a/themes/assets/assets.less b/themes/assets/assets.less index 7df5db0f6..280722dc0 100644 --- a/themes/assets/assets.less +++ b/themes/assets/assets.less @@ -10,6 +10,9 @@ @monsterBorderImage : url('/assets/monsterBorderFancy.png'); @codeBorderImage : url('/assets/codeBorder.png'); @classTableDecoration : url('/assets/classTableDecoration.png'); +@coverPageLogo : url('/assets/coverPageLogo.png'); +@coverPageBanner : url('/assets/coverPageBanner.png'); +@coverPageHorizontalRule : url('/assets/coverPageHorizontalRule.png'); // Watercolor Images @watercolor1 : url('/assets/watercolor/watercolor1.png'); diff --git a/themes/assets/coverPageBanner.png b/themes/assets/coverPageBanner.png new file mode 100644 index 000000000..b1dfeadb1 Binary files /dev/null and b/themes/assets/coverPageBanner.png differ diff --git a/themes/assets/coverPageHorizonalRule.png b/themes/assets/coverPageHorizonalRule.png new file mode 100644 index 000000000..da706d8c0 Binary files /dev/null and b/themes/assets/coverPageHorizonalRule.png differ diff --git a/themes/assets/coverPageLogo.png b/themes/assets/coverPageLogo.png new file mode 100644 index 000000000..18ecc6438 Binary files /dev/null and b/themes/assets/coverPageLogo.png differ diff --git a/themes/fonts/5e/VeracruzBold.woff2 b/themes/fonts/5e/VeracruzBold.woff2 new file mode 100644 index 000000000..531ba9f8b Binary files /dev/null and b/themes/fonts/5e/VeracruzBold.woff2 differ diff --git a/themes/fonts/5e/fonts.less b/themes/fonts/5e/fonts.less index f5118a7cc..92be55887 100644 --- a/themes/fonts/5e/fonts.less +++ b/themes/fonts/5e/fonts.less @@ -106,3 +106,10 @@ font-weight: bold; font-style: italic; } + +@font-face { + font-family: VeraCruzBold; + src: url('../../../fonts/5e/VeracruzBold.woff2'); + font-weight: bold; + font-style: normal; +}