diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG.seext b/ArkhamHorrorLCG/ArkhamHorrorLCG.seext index 278fce7..acd0c81 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG.seext and b/ArkhamHorrorLCG/ArkhamHorrorLCG.seext differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/eons-plugin b/ArkhamHorrorLCG/ArkhamHorrorLCG/eons-plugin index 60cd464..bfb127f 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/eons-plugin +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/eons-plugin @@ -1,11 +1,11 @@ # # -id = CATALOGUEID{0b899f3c-78ae-40b8-bcfc-b06479b1f136:2021-6-6-9-16-21-604} +id = CATALOGUEID{0b899f3c-78ae-40b8-bcfc-b06479b1f136:2026-3-1-6-53-58-298} priority = GAME -ui-languages = en_US,it_IT,es,fr_FR,de_DE -game-languages = en_US,it_IT,es,fr_FR,de_DE +ui-languages = en,it,es,fr,de,uk,zh,zh_CN +game-languages = en,it,es,pl,fr,de,uk,zh,zh_CN catalog-name = Arkham Horror: The Card Game catalog-name_de_DE = Arkham Horror: Das Kartenspiel @@ -20,15 +20,24 @@ catalog-description =

This plug-in allows the creation of components for \ not permitted. Note that this plug-in is not produced or endorsed by FFG, \ nor do they provide support for it. LCG and Arkham Horror: \ The Card Game is a registered trademarks of Fantasy Flight \ - Publishing, Inc. All rights reserved to their respective \ - owners.

\n

Credits and thanks:

\n

Developed by Tim Bennett \ - (jaqenZann). Templates developed with the help of templates by GeckoTH and card \ - scans by Will Fuqua. Italian translation by Stefano Cardinale. French \ - translation by David Violeau. German translation by Magnus \ - Upmann.

\n

Thanks to Christopher G. Jennings for Strange Eons, and to Nate \ - French, Matt Newman, and FFG for this great game.

\n

Thanks also to karagh, \ - whose Lord of the Rings: The Card Game plugin was instrumental in making this \ - possible.

+ Publishing, Inc. All rights reserved to their respective owners. \ +

\n

Credits and thanks:

\n

Developed by Tim Bennett \ + (jaqenZann).

\n

Currently maintained by Tokeeto here https://github.com/tokeeto/Str\ + angeEonsAHLCG

Original templates developed with the help of templates \ + by GeckoTH and card scans by Will Fuqua.\n\nLater templates upgraded, added or \ + modified by Tokeeto, 5argon and coldtoes of the Mythos Busters community.\n\n \ + Italian translation by Stefano Cardinale. French translation by David Violeau. \ + German translation by Magnus Upmann.

Thanks to Christopher G. Jennings for \ + Strange Eons, and to Nate French, MJ Newman, and FFG for this great \ + game.

Thanks also to karagh, whose Lord of the Rings: The Card Game plugin \ + was instrumental in making this possible.

\n

Please read and abide by the \ + FFG Guidelines for Community Use of IP \ + here:

https://images-cdn.fantasyflightgames.com/filer_public/fa/b1/fab15a15\ + -94a6-404c-ab86-6a3b0e77a7a0/ip_policy_031419_final_v21.pdf

If you wish to \ + support the development of this plugin, you can do so here or by dropping by the Mythos \ + Busters discord server.

catalog-description_de_DE =

Mit diesem Plug-in lassen sich Komponenten f�r \ Arkham Horror: Das Kartenspiel von Fantasy Flight Games \ erstellen.

\n

Dieses Plug-in ist f�r Freunde des Spiels gedacht; \ @@ -43,7 +52,7 @@ catalog-description_de_DE =

Mit diesem Plug-in lassen sich Komponenten f�r GeckoTH und Kartenscans von Will Fuqua entwickelt. Deutsche �bersetzung von \ Magnus Upmann. Italienische �bersetzung von Stefano Cardinale. Franz�sische \ �bersetzung von David Violeau.

\n

Danke an Christopher G. Jennings f�r \ - Strange Eons, und an Nate French, Matt Newman und FFG f�r dieses gro�artige \ + Strange Eons, und an Nate French, MJ Newman und FFG f�r dieses gro�artige \ Spiel.

\n

Au�erdem Danke an karagh, ohne dessen Plug-in f�r Der Herr der \ Ringe: Das Kartenspiel die Entwicklung dieses Plug-ins nicht m�glich gewesen w�re.

catalog-description_en_US = catalog-description =

This plug-in allows the \ @@ -58,9 +67,12 @@ catalog-description_en_US = catalog-description =

This plug-in allows the \ GeckoTH and card scans by Will Fuqua. Italian translation by Stefano Cardinale. \ French translation by David Violeau. German translation by Magnus \ Upmann.

\n

Thanks to Christopher G. Jennings for Strange Eons, and to Nate \ - French, Matt Newman, and FFG for this great game.

\n

Thanks also to karagh, \ + French, MJ Newman, and FFG for this great game.

\n

Thanks also to karagh, \ whose Lord of the Rings: The Card Game plugin was instrumental in making this \ - possible.

+ possible.

\n

Please read and abide by the FFG Guidelines for Community Use \ + of IP \ + here:

https://images-cdn.fantasyflightgames.com/filer_public/fa/b1/fab15a15\ + -94a6-404c-ab86-6a3b0e77a7a0/ip_policy_031419_final_v21.pdf

catalog-description_it_IT =

Questa plug-in permette la creazione di \ componenti per Arkham Horror: Il Gioco di Carte della Fantasy \ Flight Games.

\n

Questa plug-in è pensata per essere usata da \ @@ -73,7 +85,7 @@ catalog-description_it_IT =

Questa plug-in permette la creazione di \ ringraziamenti:\n

Sviluppata da Tim Bennett (jaqenZann). Templates \ sviluppati con l'aiuto di templates di GeckoTH e scansioni delle carte di Will \ Fuqua. Traduzione in italiano di Stefano Cardinale.

\n

Grazie a Christopher \ - G. Jennings per Strange Eons e a Nate French, Matt Newman, e la FFG per questo \ + G. Jennings per Strange Eons e a Nate French, MJ Newman, e la FFG per questo \ grande gioco.

\n

Grazie anche a karagh, per la sua plugin Lord of the \ Rings: The Card Game che è stata indispensabile nel rendere tutto questo \ possibile.

diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.classmap b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.classmap index 7fca634..1732fb3 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.classmap +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.classmap @@ -1,54 +1,58 @@ -@cat-markers - @AHLCG-MiniInvestigator = diy:ArkhamHorrorLCG/diy/MiniInvestigator.js | ArkhamHorrorLCG/icons/AHLCG-MiniInvestigator.png | AHLCG - @AHLCG-Divider = diy:ArkhamHorrorLCG/diy/Divider.js | ArkhamHorrorLCG/icons/AHLCG-Divider.png | AHLCG - -@cat-characters +Player cards @AHLCG-Investigator = diy:ArkhamHorrorLCG/diy/Investigator.js | ArkhamHorrorLCG/icons/AHLCG-Investigator.png | AHLCG - @AHLCG-StoryInvestigator = diy:ArkhamHorrorLCG/diy/InvestigatorStory.js | ArkhamHorrorLCG/icons/AHLCG-Investigator.png | AHLCG - -@cat-inventory @AHLCG-Asset = diy:ArkhamHorrorLCG/diy/Asset.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - @AHLCG-AssetAsset = diy:ArkhamHorrorLCG/diy/AssetAsset.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - @AHLCG-AssetStory = diy:ArkhamHorrorLCG/diy/AssetStory.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - @AHLCG-AssetStoryAsset = diy:ArkhamHorrorLCG/diy/AssetStoryAsset.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - @AHLCG-AssetStoryEnemy = diy:ArkhamHorrorLCG/diy/AssetStoryEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - @AHLCG-AssetStoryPortrait = diy:ArkhamHorrorLCG/diy/AssetStoryPortrait.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG - -@cat-effects @AHLCG-Event = diy:ArkhamHorrorLCG/diy/Event.js | ArkhamHorrorLCG/icons/AHLCG-Event.png | AHLCG - @AHLCG-Location = diy:ArkhamHorrorLCG/diy/Location.js | ArkhamHorrorLCG/icons/AHLCG-Location.png | AHLCG - @AHLCG-LocationLocation = diy:ArkhamHorrorLCG/diy/LocationLocation.js | ArkhamHorrorLCG/icons/AHLCG-Location.png | AHLCG @AHLCG-Skill = diy:ArkhamHorrorLCG/diy/Skill.js | ArkhamHorrorLCG/icons/AHLCG-Skill.png | AHLCG - @AHLCG-TreacheryEncounter = diy:ArkhamHorrorLCG/diy/Treachery.js | ArkhamHorrorLCG/icons/AHLCG-Treachery.png | AHLCG - @AHLCG-TreacheryPortrait = diy:ArkhamHorrorLCG/diy/TreacheryPortrait.js | ArkhamHorrorLCG/icons/AHLCG-Treachery.png | AHLCG + @AHLCG-AssetAsset = diy:ArkhamHorrorLCG/diy/AssetAsset.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG + @AHLCG-Customizable = diy:ArkhamHorrorLCG/diy/Customizable.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG + @AHLCG-EnemyWeakness = diy:ArkhamHorrorLCG/diy/WeaknessEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG @AHLCG-TreacheryWeakness = diy:ArkhamHorrorLCG/diy/WeaknessTreachery.js | ArkhamHorrorLCG/icons/AHLCG-Weakness.png | AHLCG - - @cat-enemies + +Encounter cards + @AHLCG-TreacheryEncounter = diy:ArkhamHorrorLCG/diy/Treachery.js | ArkhamHorrorLCG/icons/AHLCG-Treachery.png | AHLCG @AHLCG-EnemyEncounter = diy:ArkhamHorrorLCG/diy/Enemy.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG - @AHLCG-EnemyEnemy = diy:ArkhamHorrorLCG/diy/EnemyEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG - @AHLCG-EnemyPortrait = diy:ArkhamHorrorLCG/diy/EnemyPortrait.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG - @AHLCG-EnemyWeakness = diy:ArkhamHorrorLCG/diy/WeaknessEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG - - @cat-rules + @AHLCG-TreacheryLocation = diy:ArkhamHorrorLCG/diy/TreacheryLocation.js | ArkhamHorrorLCG/icons/AHLCG-Treachery.png | AHLCG + +Story cards + @AHLCG-Location = diy:ArkhamHorrorLCG/diy/Location.js | ArkhamHorrorLCG/icons/AHLCG-Location.png | AHLCG @AHLCG-Act = diy:ArkhamHorrorLCG/diy/Act.js | ArkhamHorrorLCG/icons/AHLCG-Act.png | AHLCG + @AHLCG-AgendaStandard = diy:ArkhamHorrorLCG/diy/Agenda.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG + @AHLCG-ChaosEffects = diy:ArkhamHorrorLCG/diy/Chaos.js | ArkhamHorrorLCG/icons/AHLCG-Chaos.png | AHLCG + @AHLCG-StoryStory = diy:ArkhamHorrorLCG/diy/StoryStory.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG + @AHLCG-Key = diy:ArkhamHorrorLCG/diy/Key.js | ArkhamHorrorLCG/icons/AHLCG-Key.png | AHLCG + +Story card variants @AHLCG-ActEnemy = diy:ArkhamHorrorLCG/diy/ActEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Act.png | AHLCG @AHLCG-ActLocation = diy:ArkhamHorrorLCG/diy/ActLocation.js | ArkhamHorrorLCG/icons/AHLCG-Act.png | AHLCG @AHLCG-ActPortrait = diy:ArkhamHorrorLCG/diy/ActPortrait.js | ArkhamHorrorLCG/icons/AHLCG-Act.png | AHLCG @AHLCG-ActStoryAsset = diy:ArkhamHorrorLCG/diy/ActAssetStory.js | ArkhamHorrorLCG/icons/AHLCG-Act.png | AHLCG - @AHLCG-AgendaStandard = diy:ArkhamHorrorLCG/diy/Agenda.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG @AHLCG-AgendaFrontPortrait = diy:ArkhamHorrorLCG/diy/AgendaFrontPortrait.js | ArkhamHorrorLCG/icons/AHLCG-AgendaFrontPortrait.png | AHLCG @AHLCG-AgendaEnemy = diy:ArkhamHorrorLCG/diy/AgendaEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG @AHLCG-AgendaLocation = diy:ArkhamHorrorLCG/diy/AgendaLocation.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG @AHLCG-AgendaPortrait = diy:ArkhamHorrorLCG/diy/AgendaPortrait.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG @AHLCG-AgendaStoryAsset = diy:ArkhamHorrorLCG/diy/AgendaAssetStory.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG @AHLCG-AgendaTreachery = diy:ArkhamHorrorLCG/diy/AgendaTreachery.js | ArkhamHorrorLCG/icons/AHLCG-Agenda.png | AHLCG - @AHLCG-CampaignGuide75 = diy:ArkhamHorrorLCG/diy/Guide75.js | ArkhamHorrorLCG/icons/AHLCG-Guide75.png | AHLCG - @AHLCG-CampaignGuideA4 = diy:ArkhamHorrorLCG/diy/GuideA4.js | ArkhamHorrorLCG/icons/AHLCG-GuideA4.png | AHLCG - @AHLCG-ScenarioInformation = diy:ArkhamHorrorLCG/diy/Scenario.js | ArkhamHorrorLCG/icons/AHLCG-Scenario.png | AHLCG - @AHLCG-ChaosEffects = diy:ArkhamHorrorLCG/diy/Chaos.js | ArkhamHorrorLCG/icons/AHLCG-Chaos.png | AHLCG - @AHLCG-StoryAsset = diy:ArkhamHorrorLCG/diy/StoryAsset.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG + @AHLCG-StoryAsset = diy:ArkhamHorrorLCG/diy/StoryAsset.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG @AHLCG-StoryEnemy = diy:ArkhamHorrorLCG/diy/StoryEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG @AHLCG-StoryLocation = diy:ArkhamHorrorLCG/diy/StoryLocation.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG @AHLCG-StoryChaos = diy:ArkhamHorrorLCG/diy/StoryChaos.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG @AHLCG-StoryTreachery = diy:ArkhamHorrorLCG/diy/StoryTreachery.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG - @AHLCG-StoryStory = diy:ArkhamHorrorLCG/diy/StoryStory.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG + @AHLCG-LocationLocation = diy:ArkhamHorrorLCG/diy/LocationLocation.js | ArkhamHorrorLCG/icons/AHLCG-Location.png | AHLCG + @AHLCG-StoryInvestigator = diy:ArkhamHorrorLCG/diy/InvestigatorStory.js | ArkhamHorrorLCG/icons/AHLCG-Investigator.png | AHLCG + @AHLCG-EnemyLocation = diy:ArkhamHorrorLCG/diy/EnemyLocation.js | ArkhamHorrorLCG/icons/AHLCG-Location.png | AHLCG + @AHLCG-EnemyEnemy = diy:ArkhamHorrorLCG/diy/EnemyEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Enemy.png | AHLCG + @AHLCG-AssetStory = diy:ArkhamHorrorLCG/diy/AssetStory.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG + @AHLCG-AssetStoryAsset = diy:ArkhamHorrorLCG/diy/AssetStoryAsset.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG + @AHLCG-AssetStoryEnemy = diy:ArkhamHorrorLCG/diy/AssetStoryEnemy.js | ArkhamHorrorLCG/icons/AHLCG-Asset.png | AHLCG + +Other + @AHLCG-MiniInvestigator = diy:ArkhamHorrorLCG/diy/MiniInvestigator.js | ArkhamHorrorLCG/icons/AHLCG-MiniInvestigator.png | AHLCG + @AHLCG-Divider = diy:ArkhamHorrorLCG/diy/Divider.js | ArkhamHorrorLCG/icons/AHLCG-Divider.png | AHLCG + @AHLCG-Concealed = diy:ArkhamHorrorLCG/diy/Concealed.js | ArkhamHorrorLCG/icons/AHLCG-Concealed.png | AHLCG + @AHLCG-CampaignGuide75 = diy:ArkhamHorrorLCG/diy/Guide75.js | ArkhamHorrorLCG/icons/AHLCG-Guide75.png | AHLCG + @AHLCG-CampaignGuideA4 = diy:ArkhamHorrorLCG/diy/GuideA4.js | ArkhamHorrorLCG/icons/AHLCG-GuideA4.png | AHLCG + @AHLCG-CampaignGuideLetter = diy:ArkhamHorrorLCG/diy/GuideLetter.js | ArkhamHorrorLCG/icons/AHLCG-GuideA4.png | AHLCG + @AHLCG-Ultimatum = diy:ArkhamHorrorLCG/diy/Ultimatum.js | ArkhamHorrorLCG/icons/AHLCG-Story.png | AHLCG + @AHLCG-ScenarioInformation = diy:ArkhamHorrorLCG/diy/Scenario.js | ArkhamHorrorLCG/icons/AHLCG-Scenario.png | AHLCG + @AHLCG-PackCover = diy:ArkhamHorrorLCG/diy/PackCover.js | ArkhamHorrorLCG/icons/AHLCG-Divider.png | AHLCG + @AHLCG-BoxCover = diy:ArkhamHorrorLCG/diy/BoxCover.js | ArkhamHorrorLCG/icons/AHLCG-Divider.png | AHLCG diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.js index e9dc461..e8ed61d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/ArkhamHorrorLCG.js @@ -1,7 +1,3 @@ -/* - * ArkhamHorrorLCG.js - */ - useLibrary( 'extension' ); useLibrary( 'imageutils' ); useLibrary( 'fontutils' ); @@ -20,10 +16,11 @@ importClass( java.util.Locale ); useLibrary( 'res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js' ); useLibrary( 'res://ArkhamHorrorLCG/diy/AHLCG-preferences.js' ); -function() initialize { +function initialize() { var GameLanguage = Language.getGame(); var InterfaceLanguage = Language.getInterface(); - + + InterfaceLanguage.addStrings( 'ArkhamHorrorLCG/text/AHLCG-Interface' ); GameLanguage.addStrings( 'ArkhamHorrorLCG/text/AHLCG-Game' ); @@ -39,11 +36,14 @@ function() initialize { ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Enemy.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-WeaknessEnemy.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Treachery.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-TreacheryLocation.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-WeaknessTreachery.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Location.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-EnemyLocation.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Agenda.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Act.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Chaos.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Ultimatum.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-AssetStory.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-AgendaPortrait.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-MiniInvestigator.settings'); @@ -54,22 +54,22 @@ function() initialize { ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-GuideA4.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Divider.settings'); ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-AgendaFrontPortrait.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Customizable.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-GuideLetter.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Key.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-Concealed.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-PackCover.settings'); + ahlcgGame.masterSettings.addSettingsFrom('ArkhamHorrorLCG/settings/AHLCG-BoxCover.settings'); Eons.namedObjects.AHLCGObject = new gameObject( ahlcgGame.masterSettings ); addPreferences(); - + ClassMap.add( 'ArkhamHorrorLCG/ArkhamHorrorLCG.classmap' ); } -function gameObject( masterSettings ) { - this.OS = "Windows"; // default - - var systemOS = System.getProperty("os.name", "generic").toLowerCase(Locale.ENGLISH); - - if ( systemOS.indexOf("mac") >= 0 || systemOS.indexOf("darwin") >= 0) { - this.OS = "Mac"; - } +function setupFonts( o ) { + var userSettings = Settings.getUser(); const registerTTFont = function registerTTFont() { for( let i=0; i= 0 || systemOS.indexOf("darwin") >= 0) { + this.OS = "Mac"; + } + + setupFonts( this ); // updated arrays for language support - this.comboClassesI = new Array( + this.comboClassesI = new Array( ListItem( 'Guardian', @AHLCG-Class-Guardian ), ListItem( 'Seeker', @AHLCG-Class-Seeker ), ListItem( 'Rogue', @AHLCG-Class-Rogue ), @@ -167,19 +495,36 @@ function gameObject( masterSettings ) { ListItem( 'ParallelGuardian', @AHLCG-Class-ParallelGuardian ), ListItem( 'ParallelSeeker', @AHLCG-Class-ParallelSeeker ), ListItem( 'ParallelRogue', @AHLCG-Class-ParallelRogue ), - ListItem( 'ParallelMystic', @AHLCG-Class-ParallelMystic ) ); - - this.comboClassesBW = new Array( + ListItem( 'ParallelMystic', @AHLCG-Class-ParallelMystic ), + ListItem( 'ParallelSurvivor', @AHLCG-Class-ParallelSurvivor ), + ListItem( 'ParallelNeutral', @AHLCG-Class-ParallelNeutral ) ); + + this.comboClassesBWS = new Array( + ListItem( 'Guardian', @AHLCG-Class-Guardian ), + ListItem( 'Seeker', @AHLCG-Class-Seeker ), + ListItem( 'Rogue', @AHLCG-Class-Rogue ), + ListItem( 'Mystic', @AHLCG-Class-Mystic ), + ListItem( 'Survivor', @AHLCG-Class-Survivor ), + ListItem( 'Neutral' , @AHLCG-Class-Neutral ), + ListItem( 'Specialist' , @AHLCG-Class-Specialist ), + ListItem( 'Story' , @AHLCG-Class-Story ), + ListItem( 'StoryWeakness' , @AHLCG-Class-StoryWeakness ), + ListItem( 'Weakness' , @AHLCG-Class-Weakness ), + ListItem( 'BasicWeakness', @AHLCG-Class-BasicWeakness ) + ); + + this.comboClassesBW = new Array( ListItem( 'Guardian', @AHLCG-Class-Guardian ), ListItem( 'Seeker', @AHLCG-Class-Seeker ), ListItem( 'Rogue', @AHLCG-Class-Rogue ), ListItem( 'Mystic', @AHLCG-Class-Mystic ), ListItem( 'Survivor', @AHLCG-Class-Survivor ), ListItem( 'Neutral' , @AHLCG-Class-Neutral ), + ListItem( 'Specialist' , @AHLCG-Class-Specialist ), ListItem( 'Weakness' , @AHLCG-Class-Weakness ), ListItem( 'BasicWeakness', @AHLCG-Class-BasicWeakness ) ); - - this.comboClassesW = new Array( + + this.comboClassesW = new Array( ListItem( 'Guardian', @AHLCG-Class-Guardian ), ListItem( 'Seeker', @AHLCG-Class-Seeker ), ListItem( 'Rogue', @AHLCG-Class-Rogue ), @@ -187,8 +532,8 @@ function gameObject( masterSettings ) { ListItem( 'Survivor', @AHLCG-Class-Survivor ), ListItem( 'Neutral' , @AHLCG-Class-Neutral ), ListItem( 'Weakness' , @AHLCG-Class-Weakness ) ); - - this.comboClassesD = new Array( + + this.comboClassesD = new Array( ListItem( 'None', @AHLCG-Class-None ), ListItem( 'Guardian', @AHLCG-Class-Guardian ), ListItem( 'Seeker', @AHLCG-Class-Seeker ), @@ -196,59 +541,65 @@ function gameObject( masterSettings ) { ListItem( 'Mystic', @AHLCG-Class-Mystic ), ListItem( 'Survivor', @AHLCG-Class-Survivor ) ); - this.comboStoryAssetClasses = new Array( + this.comboStoryAssetClasses = new Array( ListItem( 'Neutral', @AHLCG-Class-Neutral ), ListItem( 'Weakness', @AHLCG-Class-Weakness ) ); - this.comboSkills = new Array( + this.comboSkills = new Array( ListItem( 'None', @AHLCG-Skill-None ), ListItem( 'Willpower', @AHLCG-Skill-Willpower ), ListItem( 'Intellect', @AHLCG-Skill-Intellect ), ListItem( 'Combat', @AHLCG-Skill-Combat ), ListItem( 'Agility', @AHLCG-Skill-Agility ), ListItem( 'Wild' , @AHLCG-Skill-Wild ) ); - - this.comboSlots = new Array( + + this.comboSlots = new Array( ListItem( 'None', @AHLCG-Slot-None ), ListItem( 'Ally', @AHLCG-Slot-Ally ), ListItem( 'Accessory', @AHLCG-Slot-Accessory ), ListItem( 'Body', @AHLCG-Slot-Body ), + ListItem( 'Hat' , @AHLCG-Slot-Hat ), ListItem( '1 Hand', @AHLCG-Slot-1Hand ), ListItem( '2 Hands', @AHLCG-Slot-2Hands ), ListItem( '1 Arcane', @AHLCG-Slot-1Arcane ), ListItem( '2 Arcane' , @AHLCG-Slot-2Arcane ), + ListItem( 'Foot' , @AHLCG-Slot-Foot ), + ListItem( 'Mask' , @AHLCG-Slot-Mask ), + ListItem( 'Education' , @AHLCG-Slot-Education ), ListItem( 'Tarot', @AHLCG-Slot-Tarot ) ); - this.comboWeaknessTypes = new Array( - ListItem( 'BasicWeakness', @AHLCG-WknType-BasicWeakness ), + this.comboWeaknessTypes = new Array( + ListItem( 'BasicWeakness', @AHLCG-WknType-BasicWeakness ), ListItem( 'Weakness', @AHLCG-WknType-Weakness ), ListItem( 'StoryWeakness', @AHLCG-WknType-StoryWeakness ) ); - this.comboWeaknessTypesI = new Array( - ListItem( 'BasicWeakness', @AHLCG-WknType-BasicWeakness ), + this.comboWeaknessTypesI = new Array( + ListItem( 'BasicWeakness', @AHLCG-WknType-BasicWeakness ), ListItem( 'Weakness', @AHLCG-WknType-Weakness ), ListItem( 'InvestigatorWeakness', @AHLCG-WknType-InvestigatorWeakness ), ListItem( 'StoryWeakness', @AHLCG-WknType-StoryWeakness ) ); - this.comboScenario = new Array( - ListItem( 'Portrait', @AHLCG-Scenario-Portrait ), + this.comboScenario = new Array( ListItem( 'Title', @AHLCG-Scenario-Title ), - ListItem( 'Resolution', @AHLCG-Scenario-Resolution ) ); - - this.comboBacks = new Array( + ListItem( 'Resolution', @AHLCG-Scenario-Resolution ), + ListItem( 'Chaos', @AHLCG-StoryTemplate-Token ), + ListItem( 'ChaosFull', @AHLCG-StoryTemplate-TokenFull ), + ListItem( 'Portrait', @AHLCG-Scenario-Portrait ) ); + + this.comboBacks = new Array( ListItem( 'Player', @AHLCG-Back-Player ), ListItem( 'Encounter', @AHLCG-Back-Encounter ) ); - this.comboLocationBacks = new Array( + this.comboLocationBacks = new Array( ListItem( 'Standard', @AHLCG-Back-Standard ), ListItem( 'Player', @AHLCG-Back-Player ), ListItem( 'Encounter', @AHLCG-Back-Encounter ) ); - this.comboGuide = new Array( + this.comboGuide = new Array( ListItem( 'Title', @AHLCG-Guide-Title ), ListItem( 'Empty', @AHLCG-Guide-Empty ) ); - this.comboTemplateOrientation = new Array( + this.comboTemplateOrientation = new Array( ListItem( 'Standard', @AHLCG-Orientation-Standard ), ListItem( 'Reversed', @AHLCG-Orientation-Reversed ) ); @@ -257,55 +608,80 @@ function gameObject( masterSettings ) { for( let index = 0; index <= 5; index++ ){ this.comboLevelsN[this.comboLevelsN.length] = ListItem( index, String(index) ); } - - this.comboPortraitPosition1 = new Array( + this.comboPortraitPosition1 = new Array( ListItem( 'None', @AHLCG-Guide-None ), ListItem( 'TopLeftSmall', @AHLCG-Guide-TopLeftSmall ), ListItem( 'TopLeftMedium', @AHLCG-Guide-TopLeftMedium ), ListItem( 'TopLarge', @AHLCG-Guide-TopLarge ), + ListItem( 'TopHalf', @AHLCG-Guide-TopHalf ), ListItem( 'BottomLeftSmall', @AHLCG-Guide-BottomLeftSmall ), ListItem( 'BottomLeftMedium', @AHLCG-Guide-BottomLeftMedium ), ListItem( 'BottomLarge', @AHLCG-Guide-BottomLarge ), + ListItem( 'BottomHalf', @AHLCG-Guide-BottomHalf ), ListItem( 'LeftLarge', @AHLCG-Guide-LeftLarge ), ListItem( 'TopLeftCorner', @AHLCG-Guide-TopLeftCorner ), - ListItem( 'BottomLeftCorner', @AHLCG-Guide-BottomLeftCorner ) ); + ListItem( 'BottomLeftCorner', @AHLCG-Guide-BottomLeftCorner ), + ListItem( 'FullPage', @AHLCG-Guide-FullPage ) ); - this.comboPortraitPosition2 = new Array( + this.comboPortraitPosition2 = new Array( ListItem( 'None', @AHLCG-Guide-None ), ListItem( 'TopRightSmall', @AHLCG-Guide-TopRightSmall ), ListItem( 'TopRightMedium', @AHLCG-Guide-TopRightMedium ), ListItem( 'TopLarge', @AHLCG-Guide-TopLarge ), + ListItem( 'TopHalf', @AHLCG-Guide-TopRightHalf ), ListItem( 'BottomRightSmall', @AHLCG-Guide-BottomRightSmall ), ListItem( 'BottomRightMedium', @AHLCG-Guide-BottomRightMedium ), ListItem( 'BottomLarge', @AHLCG-Guide-BottomLarge ), + ListItem( 'BottomHalf', @AHLCG-Guide-BottomHalf ), ListItem( 'RightLarge', @AHLCG-Guide-RightLarge ), ListItem( 'TopRightCorner', @AHLCG-Guide-TopRightCorner ), ListItem( 'BottomRightCorner', @AHLCG-Guide-BottomRightCorner ) ); - this.comboStoryTemplate = new Array( + this.comboStoryTemplate = new Array( + ListItem( 'Story', @AHLCG-StoryTemplate-Story ), + ListItem( 'Chaos', @AHLCG-StoryTemplate-Token ), + ListItem( 'ChaosFull', @AHLCG-StoryTemplate-TokenFull ) ); + + this.comboStoryBackTemplate = new Array( ListItem( 'Story', @AHLCG-StoryTemplate-Story ), - ListItem( 'Token effects', @AHLCG-StoryTemplate-Token ) ); + ListItem( 'Chaos', @AHLCG-StoryTemplate-Token ), + ListItem( 'ChaosFull', @AHLCG-StoryTemplate-TokenFull ), + ListItem( 'Player', @AHLCG-Back-Player ), + ListItem( 'Encounter', @AHLCG-Back-Encounter ) ); + + this.comboConcealedTemplate = new Array( + ListItem( 'Standard', @AHLCG-ConcealedTemplate-Standard ), + ListItem( 'Decoy', @AHLCG-ConcealedTemplate-Decoy ), + ListItem( 'NamedDecoy', @AHLCG-ConcealedTemplate-NamedDecoy ) ); this.comboStat = new Array(); - for( let index = 0; index <= 6; index++ ){ + for( let index = 0; index <= 9; index++ ){ this.comboStat[this.comboStat.length] = ListItem( index, String(index) ); } + this.comboStat[this.comboStat.length] = ListItem( "X", "X" ); + this.comboStat[this.comboStat.length] = ListItem( "", "Blank" ); this.comboInvestigatorHealth = new Array(); for( let index = 1; index <= 15; index++ ){ this.comboInvestigatorHealth[this.comboInvestigatorHealth.length] = ListItem( index, String(index) ); } + this.comboInvestigatorHealth[this.comboInvestigatorHealth.length] = ListItem( "X", "X" ); + this.comboInvestigatorHealth[this.comboInvestigatorHealth.length] = ListItem( "", "Blank" ); this.comboAssetStamina = new Array( - ListItem( 'None', @AHLCG-Stamina-None ), - ListItem( '-', '-' ) ); + ListItem( 'None', @AHLCG-Stamina-None ), + ListItem( '-', '-' ), + ListItem( '', 'Blank' ), + ListItem( 'Star', '*' ) ); for( let index = 1; index <= 15; index++ ){ this.comboAssetStamina[this.comboAssetStamina.length] = ListItem( index, String(index) ); } this.comboAssetSanity = new Array( - ListItem( 'None', @AHLCG-Sanity-None ), - ListItem( '-', '-' ) ); + ListItem( 'None', @AHLCG-Sanity-None ), + ListItem( '-', '-' ), + ListItem( '', 'Blank' ), + ListItem( 'Star', '*' ) ); for( let index = 1; index <= 15; index++ ){ this.comboAssetSanity[this.comboAssetSanity.length] = ListItem( index, String(index) ); } @@ -313,6 +689,7 @@ function gameObject( masterSettings ) { this.comboEnemyStat = new Array( ListItem( '-', '-' ), ListItem( '?', '?' ), + ListItem( '', 'Blank' ), ListItem( 'X', 'X' ) ); for( let index = 0; index <= 29; index++ ){ this.comboEnemyStat[this.comboEnemyStat.length] = ListItem( index, String(index) ); @@ -321,48 +698,59 @@ function gameObject( masterSettings ) { this.comboEnemyHealth = new Array( ListItem( '-', '-' ), ListItem( '?', '?' ), + ListItem( '', 'Blank' ), ListItem( 'X', 'X' ) ); - for( let index = 0; index <= 30; index++ ){ + for( let index = 0; index <= 29; index++ ){ this.comboEnemyHealth[this.comboEnemyHealth.length] = ListItem( index, String(index) ); } this.comboCost = new Array( ListItem( '-', '-' ), + ListItem( '', 'Blank' ), ListItem( 'X', 'X' ) ); for( let index = 0; index <= 19; index++ ) { this.comboCost[this.comboCost.length] = ListItem( index, String(index) ); } - + this.comboClues = new Array( - ListItem( '-', '-' ), - ListItem( '?', '?' ) ); - for( let index = 1; index <= 19; index++ ) { + ListItem( '-', '-' ), + ListItem( '?', '?' ), + ListItem( '', 'Blank' ), + ListItem( 'Star', '*' ) ); + for( let index = 0; index <= 19; index++ ) { this.comboClues[this.comboClues.length] = ListItem( index, String(index) ); } - + + this.comboCustCost = new Array(); + for( let index = 1; index <= 5; index++ ){ + this.comboCustCost[index-1] = ListItem( index, String(index) ); + } + this.combo5 = new Array(); for( let index = 0; index <= 5; index++ ){ this.combo5[index] = ListItem( index, String(index) ); } this.combo20 = new Array(); - for( let index = 0; index < 20; index++ ){ - this.combo20[index] = ListItem( index+1, String(index+1) ); + for( let index = 0; index <= 20; index++ ){ + this.combo20[index] = ListItem( index, String(index) ); } - this.comboX20 = new Array( - ListItem( 'X', 'X' ) - ); + this.comboXD20 = new Array( + ListItem( '-', '-' ), + ListItem( 'X', 'X' ), + ListItem( '', 'Blank' ), + ListItem( 'Star', '*' ) ); for( let index = 0; index <= 20; index++ ){ - this.comboX20[this.comboX20.length] = ListItem( index, String(index) ); + this.comboXD20[this.comboXD20.length] = ListItem( index, String(index) ); } this.basicEncounterList = new Array( 'CustomEncounterSet', 'StrangeEons' ); - - // Highest = 209 (RTT) + + // Highest = 286 (Relics of the Past) // NameKey, CollectionID, Tag, Index into select keys this.standardEncounterList = new Array( [ 'ALightInTheFog', 22, 'alitf', 199 ], @@ -379,41 +767,60 @@ function gameObject( masterSettings ) { [ 'AgentsOfHydra', 22, 'agyhyd', 188 ], [ 'AgentsOfNyarlathotep', 12, 'agtnya', 142 ], [ 'AgentsOfShubNiggurath', 0, 'agtshb', 2 ], + [ 'AgentsOfTheOutside', 28, 'agtout', 253 ], + [ 'AgentsOfTheUnknown', 25, 'agtunk', 225 ], [ 'AgentsOfYig', 5, 'agtyig', 56 ], [ 'AgentsOfYogSothoth', 0, 'agtyog', 3 ], + [ 'AgentsOfYuggoth', 28, 'agtyug', 254, ], [ 'AncientEvils', 0, 'ancevl', 4 ], [ 'AnettesCoven', 10, 'anette', 108 ], [ 'ArmitagesFate', 1, 'armfat', 5 ], [ 'AtDeathsDoorstep', 10, 'atdths', 109 ], [ 'AThousandShapesOfHorror', 12, 'atsoh', 143 ], + [ 'BadBlood', 14, 'badbld', 251 ], [ 'BadLuck', 1, 'badlck', 6 ], [ 'BeastThralls', 1, 'bstthrl', 33 ], [ 'BeforeTheBlackThrone', 10, 'btbt', 110 ], + [ 'BeyondTheBeyond', 28, 'beybey', 255 ], [ 'BeyondTheGatesOfSleep', 12, 'btgos', 144 ], [ 'BeyondTheThreshold', 9, 'byndthr', 93 ], [ 'BishopsThralls', 1, 'bpthrl', 7 ], [ 'BlackStarsRise', 4, 'bsr', 52 ], [ 'BloodOnTheAltar', 1, 'bldalt', 31 ], + [ 'BloodthirstySpirits', 24, 'bldspi', 209 ], [ 'BrotherhoodOfTheBeast', 8, 'bhdbst', 89 ], [ 'Byakhee', 4, 'byak', 48 ], + [ 'ByTheBook', 14, 'bybook', 250 ], [ 'CarnevaleOfHorrorsE', 3, 'carhor', 8 ], [ 'ChildrenOfParadise', 23, 'chpar', 205 ], [ 'ChillingCold', 0, 'chlcld', 9 ], + [ 'ChillingMists', 24, 'chlmst', 210 ], [ 'CityOfSins', 10, 'ctysins', 111 ], + [ 'CityOfTheDamned', 24, 'ctydmn', 211 ], + [ 'CityOfTheElderThings', 25, 'ctyet', 226 ], + [ 'CleanupCrew', 28, 'clncrw', 256 ], + [ 'CongressOfTheKeys', 28, 'conkey', 257 ], [ 'Corsairs', 12, 'cors', 145 ], + [ 'CreaturesInTheIce', 25, 'creice', 227 ], [ 'CreaturesOfTheDeep', 22, 'credeep', 189 ], [ 'CreaturesOfTheUnderworld', 12, 'cotu', 146 ], [ 'CreepingCold', 9, 'crpcld', 94 ], + [ 'CrimsonConspiracy', 28, 'crimcon', 258 ], [ 'CultOfPnakotus', 16, 'cltpna', 171 ], [ 'CultOfTheYellowSign', 4, 'cltyel', 37 ], [ 'CultOfUmordhoth', 0, 'cltumh', 10 ], [ 'ReturnToCultOfUmordhoth', 7, 'cltumhr', 81 ], [ 'CurseOfTheRougarouE', 2, 'currou', 11 ], [ 'CurtainCall', 4, 'curtncl', 38 ], + [ 'DancingMad', 28, 'danmad', 259 ], [ 'DarkCult', 0, 'dkcult', 12 ], [ 'DarkRituals', 13, 'dkrit', 162 ], [ 'DarkSideOfTheMoon', 12, 'dsotm', 147 ], + [ 'DarkVeiling', 28, 'dkveil', 260 ], + [ 'DeadHeat', 28, 'deadht', 261 ], [ 'DeadlyTraps', 5, 'deadtrp', 57 ], + [ 'DeadlyWeather', 25, 'deadwthr', 228 ], + [ 'DealingsInTheDark', 28, 'ditd', 262 ], [ 'DeathOfStars', 23, 'dthstrs', 206 ], [ 'DecayAndFilth', 4, 'decay', 39 ], [ 'DecayingReality', 11, 'decrea', 128 ], @@ -423,65 +830,97 @@ function gameObject( masterSettings ) { [ 'DevilReef', 22, 'devreef', 200 ], [ 'DimCarcosa', 4, 'dimcar', 55 ], [ 'DisappearanceAtTheTwilightEstate', 10, 'datte', 112 ], + [ 'DogsOfWar', 28, 'dogwar', 263 ], [ 'DoomedExpedition', 16, 'dmdexp', 172 ], [ 'DreamersCurse', 12, 'drmcur', 149 ], [ 'Dreamlands', 12, 'drmlnds', 150 ], [ 'Dunwich', 1, 'dunwch', 32 ], [ 'EchoesOfThePast', 4, 'echoes', 46 ], + [ 'ElderThings', 25, 'eldthg', 229 ], [ 'EpicMultiplayer', 6, 'epicmp', 79 ], [ 'ErraticFear', 9, 'errfr', 95 ], [ 'EvilPortents', 4, 'evilpor', 41 ], [ 'ExcelsiorManagement', 13, 'exman', 163 ], [ 'Expedition', 5, 'exped', 58 ], + [ 'ExpeditionTeam', 25, 'exptm', 230 ], [ 'ExtracurricularActivity', 1, 'extact', 13 ], + [ 'FatalMirage', 25, 'fatmir', 231 ], [ 'FloodedCaverns', 22, 'flocav', 190 ], [ 'FogOverInnsmouth', 22, 'foginn', 191 ], [ 'ForgottenRuins', 5, 'fruins', 59 ], [ 'ForTheGreaterGood', 10, 'ftgg', 113 ], + [ 'FortuneAndFollyE', 31, 'forfole', 280 ], + [ 'FortunesChosen', 31, 'forcho', 281 ], [ 'Ghouls', 0, 'ghouls', 14 ], [ 'GhoulsOfUmordhoth', 7, 'ghoum', 82 ], + [ 'Globetrotting', 28, 'globe', 264 ], [ 'GuardiansOfTime', 5, 'guatim', 60 ], [ 'HastursEnvoys', 11, 'hasenv', 130 ], [ 'HastursGift', 4, 'hasgft', 42 ], [ 'Hauntings', 4, 'haunt', 43 ], + [ 'HazardsOfAntarctica', 25, 'hazant', 232 ], [ 'HeartOfTheElders', 5, 'hrteld', 71 ], + [ 'Hexcraft', 24, 'hexcft', 212 ], [ 'HideousAbominations', 1, 'hidabo', 15 ], [ 'HorrorInHighGear', 22, 'hihg', 201 ], + [ 'IceAndDeath', 25, 'icedth', 233 ], + [ 'ImpendingEvils', 24, 'impevl', 213 ], [ 'InTheClutchesOfChaos', 10, 'itcoc', 115 ], [ 'InTooDeep', 22, 'indeep', 202 ], [ 'InexorableFate', 10, 'inexft', 114 ], [ 'InhabitantsOfCarcosa', 4, 'inhcar', 49 ], [ 'IntoTheMaelstrom', 22, 'inmael', 203 ], [ 'KnYan', 5, 'knyan', 73 ], + [ 'LaidToRest', 14, 'ldrst', 285], + [ 'LeftBehind', 25, 'lftbhd', 234], [ 'LockedDoors', 0, 'lckdrs', 16 ], + [ 'LostInTheNight', 25, 'litn', 235 ], [ 'LostInTimeAndSpace', 1, 'litas', 36 ], + [ 'MachinationsThroughTimeE', 30, 'mtimee', 279 ], [ 'MaddeningDelusions', 11, 'maddel', 131 ], [ 'Malfunction', 22, 'malfctn', 192 ], + [ 'MemorialsOfTheLost', 25, 'motl', 236 ], [ 'MergingRealities', 12, 'merreal', 151 ], + [ 'Miasma', 25, 'mias', 237 ], [ 'MiGoIncursion', 15, 'migoinc', 170 ], + [ 'MiGoIncursionII', 32, 'migoinc2', 284 ], [ 'MurderAtTheExcelsiorHotelE', 13, 'matehe', 164 ], [ 'MusicOfTheDamned', 10, 'motd', 116 ], + [ 'MysteriesAbound', 28, 'mysabnd', 265 ], + [ 'NamelessHorrors', 25, 'nmlshor', 238 ], [ 'NaomisCrew', 1, 'naocrw', 17 ], [ 'NeuroticFear', 11, 'neufr', 132 ], [ 'Nightgaunts', 0, 'ntgnts', 18 ], + [ 'OnThinIce', 28, 'thnice', 266 ], + [ 'Outsiders', 28, 'outside', 267 ], + [ 'Penguins', 25, 'peng', 239 ], [ 'PillarsOfJudgment', 5, 'piljdg', 72 ], + [ 'PlanInShambles', 31, 'plnsha', 282 ], [ 'PnakoticBrotherhood', 5, 'pnabro', 61 ], [ 'PointOfNoReturn', 12, 'ponr', 152 ], [ 'Poison', 5, 'poison', 62 ], + [ 'Promos', 27, 'promo', 249 ], [ 'Rainforest', 5, 'rainfst', 63 ], [ 'Rats', 0, 'rats', 19 ], [ 'ReadOrDie', 14, 'readordie', 167 ], [ 'RealmOfDeath', 10, 'rlmdth', 117 ], - [ 'RedTideRising', 14, 'redtiri', 209 ], + [ 'RedCoterie', 28, 'redcot', 268 ], + [ 'RedTideRising', 14, 'redtide', 252 ], + [ 'RelicsOfThePast', 14, 'relpst', 286 ], [ 'ResurgentEvils', 9, 'resevl', 96 ], [ 'ReturnToAPhantomOfTruth', 11, 'rphntm', 133 ], + [ 'ReturnToAtDeathsDoorstep', 24, 'ratdths', 214 ], + [ 'ReturnToBeforeTheBlackThrone', 24, 'rbtbt', 215 ], [ 'ReturnToBlackStarsRise', 11, 'rbsr', 134 ], [ 'ReturnToBloodOnTheAltar', 9, 'rbldalt', 97 ], [ 'ReturnToCurtainCall', 11, 'rcurtncl', 135 ], [ 'ReturnToDimCarcosa', 11, 'rdimcar', 136 ], + [ 'ReturnToDisappearanceAtTheTwilightEstate', 24, 'rdatte', 216 ], [ 'ReturnToEchoesOfThePast', 11, 'rechoes', 137 ], [ 'ReturnToExtracurricularActivities', 9, 'rextact', 98 ], + [ 'ReturnToForTheGreaterGood', 24, 'rftgg', 217 ], [ 'ReturnToHeartOfTheElders', 16, 'rhrteld', 173 ], + [ 'ReturnToInTheClutchesOfChaos', 24, 'ritcoc', 218 ], [ 'ReturnToKnYan', 16, 'rknyan', 174 ], [ 'ReturnToLostInTimeAndSpace', 9, 'rtlitas', 99 ], [ 'ReturnToPillarsOfJudgment', 16, 'rpiljdg', 175 ], @@ -499,36 +938,56 @@ function gameObject( masterSettings ) { [ 'ReturnToTheMidnightMasks', 7, 'rmidmsk', 85 ], [ 'ReturnToTheMiskatonicMuseum', 9, 'rmskmus', 102 ], [ 'ReturnToThePallidMask', 11, 'rpalmsk', 139 ], - [ 'ReturnToTheUnspeakableOath', 11, 'runspk', 140 ], + [ 'ReturnToTheSecretName', 24, 'rsecrtnm', 219 ], + [ 'ReturnToTheUnspeakableOath', 11, 'runspk', 140 ], [ 'ReturnToTheUntamedWilds', 16, 'runtmdwld', 182 ], + [ 'ReturnToTheWagesOfSin', 24, 'rtwos', 220 ], + [ 'ReturnToTheWitchingHour', 24, 'rwtchhr', 221 ], [ 'ReturnToThreadsOfFate', 16, 'rtof', 183 ], [ 'ReturnToTurnBackTime', 16, 'rtbt', 184 ], [ 'ReturnToUndimensionedAndUnseen', 9, 'rundim', 103 ], + [ 'ReturnToUnionAndDisillusion', 24, 'rundis', 222 ], [ 'ReturnToWhereDoomAwaits', 9, 'rtwda', 104 ], + [ 'RiddlesAndRain', 28, 'ridrain', 269 ], [ 'RisingTide', 22, 'ristide', 193 ], [ 'SandsOfEgypt', 8, 'sdsegpt', 90 ], + [ 'SanguineShadows', 28, 'sansha', 270 ], + [ 'ScarletSorcery', 28, 'scasor', 271 ], + [ 'SecretWar', 28, 'secwar', 272 ], [ 'SecretDoors', 9, 'scrtdr', 105 ], [ 'SecretsOfTheUniverse', 10, 'sotu', 118 ], + [ 'SeepingNightmares', 25, 'seepnm', 240 ], [ 'Serpents', 5, 'serpent', 64 ], + [ 'ShadesOfSuffering', 28, 'shdsor', 273 ], + [ 'ShadowOfADoubt', 28, 'shddbt', 274 ], [ 'ShatteredAeons', 5, 'shaaon', 76 ], [ 'ShatteredMemories', 22, 'shamem', 194 ], + [ 'Shoggoths', 25, 'shog', 241 ], + [ 'SilenceAndMystery', 25, 'silmys', 242 ], [ 'SilverTwilightLodge', 10, 'siltwil', 119 ], [ 'SingleGroup', 6, 'singrp', 80 ], [ 'SinsOfThePast', 13, 'sotp', 165 ], [ 'Sorcery', 1, 'sorcry', 20 ], + [ 'SpatialAnomaly', 28, 'sptlano', 275 ], [ 'SpectralPredators', 10, 'specpred', 120 ], + [ 'SpreadingCorruption', 28, 'sprcor', 276 ], [ 'Spiders', 12, 'spdrs', 153 ], + [ 'StirringInTheDeep', 25, 'strdp', 243 ], + [ 'StrangeHappenings', 28, 'strhap', 277 ], [ 'StrikingFear', 0, 'strfr', 21 ], [ 'SwarmOfAssimilation', 23, 'swmass', 207 ], [ 'Syzygy', 22, 'syzygy', 195 ], + [ 'TekeliLi', 25, 'tekli', 244 ], [ 'TemporalFlux', 5, 'temflx', 65 ], [ 'TemporalHunters', 16, 'tmphnt', 185 ], [ 'TerrorOfTheVale', 12, 'totv', 154 ], [ 'TheBayou', 2, 'bayou', 22 ], [ 'TheBeyond', 1, 'beyond', 23 ], - [ 'TheBlobThatAteEverythingE', 15, 'blob', 169 ], + [ 'TheBlobThatAteEverythingE', 15, 'blobe', 169 ], + [ 'TheBlobThatAteEverythingElseE', 32, 'blobelsee', 283 ], [ 'TheBoundaryBeyond', 5, 'bndry', 70 ], [ 'TheCityOfArchives', 5, 'ctyarc', 75 ], // this is out of order, cuz I'm dumb + [ 'TheCrash', 25, 'crash', 245 ], [ 'TheDepthsOfYoth', 5, 'tdoy', 74 ], [ 'TheDevourerBelow', 0, 'devbel', 24 ], [ 'TheDevourersCult', 7, 'devclt', 86 ], @@ -537,6 +996,8 @@ function gameObject( masterSettings ) { [ 'TheEternalSlumber', 8, 'eslmbr', 91 ], [ 'TheFloodBelow', 4, 'flood', 53 ], [ 'TheGathering', 0, 'gather', 26 ], + [ 'TheGreatSeal', 25, 'grtsl', 246 ], + [ 'TheHeartOfMadness', 25, 'thom', 247 ], [ 'TheHouseAlwaysWins', 1, 'hsewin', 27 ], [ 'TheLabyrinthsOfLunacyE', 6, 'lablun', 78 ], [ 'TheLairOfDagon', 22, 'tlod', 204 ], @@ -545,7 +1006,7 @@ function gameObject( masterSettings ) { [ 'TheMidnightMasks', 0, 'midmsk', 28 ], [ 'TheMiskatonicMuseum', 1, 'mskmus', 29 ], [ 'TheNightsUsurper', 8, 'ntusrpr', 92 ], - [ 'ThePallidMask', 4, 'palmsk', 51 ], + [ 'ThePallidMask', 4, 'palmsk', 51 ], [ 'ThePitOfDespair', 22, 'pitdes', 197 ], [ 'TheSearchForKadath', 12, 'tsfk', 155 ], [ 'TheSecretName', 10, 'secrtnm', 121 ], @@ -558,10 +1019,13 @@ function gameObject( masterSettings ) { [ 'TheWatcher', 10, 'watcher', 123 ], [ 'TheWitchingHour', 10, 'wtchhr', 124 ], [ 'ThreadsOfFate', 5, 'tof', 69 ], + [ 'ToTheForbiddenPeaks', 25, 'ttfp', 248 ], [ 'TrappedSpirits', 10, 'trpspi', 125 ], [ 'TurnBackTime', 5, 'tbt', 77 ], [ 'UndimensionedAndUnseen', 1, 'undim', 34 ], [ 'UnionAndDisillusion', 10, 'undis', 126 ], + [ 'UnspeakableFate', 24, 'suspft', 223 ], + [ 'UnstableRealm', 24, 'unsrlm', 224 ], [ 'VenomousHate', 16, 'vnmhate', 186 ], [ 'VileExperiments', 13, 'vileex', 166 ], [ 'WakingNightmare', 12, 'wkngnm', 156 ], @@ -572,9 +1036,38 @@ function gameObject( masterSettings ) { [ 'Whippoorwills', 1, 'whip', 30 ], [ 'WhispersOfHypnos', 12, 'woh', 159 ], [ 'Witchcraft', 10, 'witch', 127 ], + [ 'WithoutATrace', 28, 'wthtra', 278 ], [ 'YigsVenom', 5, 'yigvnm', 68 ], [ 'YogSothothsEmissaries', 9, 'yogem', 106], - [ 'Zoogs', 12, 'zoogs', 160 ] + [ 'Zoogs', 12, 'zoogs', 160 ], + [ 'agents_of_the_colour', 33, 'fhvaotc', 161 ], + [ 'blight', 33, 'fhvbli', 162 ], + [ 'day_of_rain', 33, 'fhvrai', 163 ], + [ 'day_of_rest', 33, 'fhvres', 164 ], + [ 'day_of_the_feast', 33, 'fhvdotf', 165 ], + [ 'fate_of_the_vale', 33, 'fhvfotv', 166 ], + [ 'TheFeastOfHemlockVale', 33, 'fhv', 167 ], + [ 'TheFeastOfHemlockValePlayerExpansion', 33, 'fhvp', 168 ], + [ 'fire', 33, 'fhvfir', 169 ], + [ 'heirlooms', 33, 'fhvhei', 170 ], + [ 'hemlock_house', 33, 'fhvhh', 171 ], + [ 'horrors_in_the_rock', 33, 'fhvhitr', 172 ], + [ 'mutations', 33, 'fhvmut', 173 ], + [ 'myconids', 33, 'fhvmyc', 174 ], + [ 'refractions', 33, 'fhvref', 175 ], + [ 'residents', 33, 'fhvres', 176 ], + [ 'the_final_day', 33, 'fhvfnd', 177 ], + [ 'the_first_day', 33, 'fhvfrd', 178 ], + [ 'the_forest', 33, 'fhvtf', 179 ], + [ 'the_longest_night', 33, 'fhvtln', 180 ], + [ 'the_lost_sister', 33, 'fhvtls', 181 ], + [ 'the_second_day', 33, 'fhvsed', 182 ], + [ 'the_silent_heath', 33, 'fhvtsh', 183 ], + [ 'the_thing_in_the_depths', 33, 'fhvttitd', 184 ], + [ 'the_twisted_hollow', 33, 'fhvtth', 185 ], + [ 'the_vale', 33, 'fhvtv', 186 ], + [ 'transfiguration', 33, 'fhvtra', 187 ], + [ 'written_in_rock', 33, 'fhvwir', 188 ] ); this.basicCollectionList = new Array( @@ -582,55 +1075,79 @@ function gameObject( masterSettings ) { 'StrangeEons' ); + // Highest: 33 (Hemlock vale) this.standardCollectionList = new Array( - [ 'CoreSet', 'core' ], // 0 - [ 'TheDunwichLegacy', 'dunleg' ], // 1 - [ 'CurseOfTheRougarou', 'ccurrou' ], // 2 - [ 'CarnevaleOfHorrors', 'ccarhor' ], // 3 - [ 'ThePathToCarcosa', 'carcosa' ], // 4 - [ 'TheForgottenAge', 'forage' ], // 5 - [ 'TheLabyrinthsOfLunacy', 'lablun' ], // 6 - [ 'ReturnToTheNightOfTheZealot', 'rtnotz' ], // 7 - [ 'GuardiansOfTheAbyss', 'guaaby' ], // 8 - [ 'ReturnToTheDunwichLegacy', 'rttdl' ], // 9 - [ 'TheCircleUndone', 'cirund' ], // 10 - [ 'ReturnToThePathToCarcosa', 'rttptc' ], // 11 - [ 'TheDreamEaters', 'dreeat' ], // 12 - [ 'MurderAtTheExcelsiorHotel', 'mateh' ], // 13 - [ 'ParallelInvestigators', 'parallel' ], // 14 - [ 'TheBlobThatAteEverything', 'blob' ], // 15 - [ 'ReturnToTheForgottenAge', 'rttfa' ], // 16 - [ 'NathanielCho', 'natcho' ], // 17 - [ 'HarveyWalters', 'harwal' ], // 18 - [ 'WinifredHabbamock', 'winhab' ], // 19 - [ 'JacquelineFine', 'jacfin' ], // 20 - [ 'StellaClark', 'stecla' ], // 21 - [ 'TheInnsmouthConspiracy', 'tic' ], // 22 - [ 'WarOfTheOuterGods', 'cwotog' ] // 23 + [ 'CarnevaleOfHorrors', 'ccarhor', 3 ], // 3 + [ 'CoreSet', 'core', 0 ], // 0 + [ 'CurseOfTheRougarou', 'ccurrou', 2 ], // 2 + [ 'EdgeOfTheEarth', 'eote', 25 ], // 25 + [ 'EdgeOfTheEarthInv', 'eotei', 26 ], // 26 + [ 'FortuneAndFolly', 'forfol', 31 ], // 31 + [ 'GuardiansOfTheAbyss', 'guaaby', 8 ], // 8 + [ 'HarveyWalters', 'harwal', 18 ], // 18 + [ 'JacquelineFine', 'jacfin', 20 ], // 20 + [ 'MachinationsThroughTime', 'mtime', 30 ], // 30 + [ 'MurderAtTheExcelsiorHotel', 'mateh', 13 ], // 13 + [ 'NathanielCho', 'natcho', 17 ], // 17 + [ 'ParallelInvestigators', 'parallel', 14 ], // 14 + [ 'Promos', 'cpromo', 27 ], // 27 + [ 'ReturnToTheCircleUndone', 'rttcu', 24 ], // 24 + [ 'ReturnToTheDunwichLegacy', 'rttdl', 9 ], // 9 + [ 'ReturnToTheForgottenAge', 'rttfa', 16 ], // 16 + [ 'ReturnToTheNightOfTheZealot', 'rtnotz', 7 ], // 7 + [ 'ReturnToThePathToCarcosa', 'rttptc', 11 ], // 11 + [ 'StellaClark', 'stecla', 21 ], // 21 + [ 'TheBlobThatAteEverything', 'blob', 15 ], // 15 + [ 'TheBlobThatAteEverythingElse', 'blobelse', 32 ], // 32 + [ 'TheCircleUndone', 'cirund', 10 ], // 10 + [ 'TheDreamEaters', 'dreeat', 12 ], // 12 + [ 'TheDunwichLegacy', 'dunleg', 1 ], // 1 + [ 'TheForgottenAge', 'forage', 5 ], // 5 + [ 'TheInnsmouthConspiracy', 'tic', 22 ], // 22 + [ 'TheLabyrinthsOfLunacy', 'lablun', 6 ], // 6 + [ 'ThePathToCarcosa', 'carcosa', 4 ], // 4 + [ 'TheScarletKeys', 'scarkey', 28 ], // 28 + [ 'TheScarletKeysInv', 'scarkeyi', 29 ], // 29 + [ 'WarOfTheOuterGods', 'cwotog', 23 ], // 23 + [ 'WinifredHabbamock', 'winhab', 19 ], // 19 + [ 'TheFeastOfHemlockVale', 'hemloc', 33 ] // 33 ); - + this.encounterTypes = new Array(); this.collectionTypes = new Array(); updateUsedEncounterSets( this ); updateUsedCollections( this ); - + this.TagList = new Array ( - 'Fast', 'Name', 'HorizontalSpacer', 'LargeVerticalSpacer', 'VerticalSpacer', + 'Fast', 'Name', 'HorizontalSpacer', 'LargeVerticalSpacer', 'VerticalSpacer', 'SmallVerticalSpacer', 'Action', 'Reaction', 'Fast', 'Guardian', 'Seeker', 'Rogue', 'Mystic', 'Survivor', 'Willpower', 'Intellect', 'Combat', 'Agility', 'Wild', - 'Skull', 'Cultist', 'Artifact', 'Monster', 'Bless', 'Curse', 'ElderSign', 'Tentacle', + 'Skull', 'Cultist', 'Artifact', 'Monster', 'Bless', 'Curse', 'Frost', 'ElderSign', 'Tentacle', 'Unique', 'PerInvestigator', 'Prey', 'Spawn', 'Revelation', 'Forced', - 'Objective', 'Haunted', 'Patrol', 'Bullet', 'Resolution', 'EndResolution', 'GuideBullet', 'Square' + 'Objective', 'Haunted', 'Patrol', 'Shift', 'Bullet', 'Resolution', 'EndResolution', 'GuideBullet', 'Square', + 'Seal1', 'Seal2', 'Seal3', 'Seal4', 'Seal5', 'Asterisk', 'Dash', 'CheckBox', 'Damage', 'Horror', 'Resource', 'Codex' ); - + + if (this.bodyFamily == 'Arno Pro') { + this.TagList.push( 'TextEntry1A', 'TextEntry2A', 'TextEntry3A', 'TextEntry4A', 'TextEntry5A', 'XPBoxA' ); + } + else { + this.TagList.push( 'TextEntry1', 'TextEntry2', 'TextEntry3', 'TextEntry4', 'TextEntry5', 'XPBox' ); + } + this.StyleList = new Array ( - 'Trait', 'TraitSection', 'FlavorSection', 'InvStorySection', + 'Trait', 'Flavor', 'Story', 'Victory', 'Header', 'Body', + 'TraitSection', 'FlavorSection', 'InvStorySection', 'ActStorySection', 'AgendaStorySection', 'AHF' ); + this.SmallStyleTagList = new Array ( + 'AHFSmall' + ); + this.GuideStyleList = new Array ( 'GuideSection', 'GuideHeader', 'GuideBoxBullet' ); @@ -639,9 +1156,12 @@ function gameObject( masterSettings ) { 'Copyright' ); - this.locationIcons = [ 'Circle', 'Square', 'Triangle', 'Cross', 'Diamond', 'Slash', 'T', 'Hourglass', 'Moon', 'DoubleSlash', 'Heart', 'Star', 'Quote' , 'Clover', 'CircleAlt', 'SquareAlt', 'TriangleAlt', 'CrossAlt', 'DiamondAlt', - 'SlashAlt', 'TAlt', 'HourglassAlt', 'MoonAlt', 'DoubleSlashAlt', 'HeartAlt', 'StarAlt' ]; + this.SuffixTagList = new Array ( + 'Suffix', 'SuffixBack' + ); + this.locationIcons = [ 'Circle', 'Square', 'Triangle', 'Cross', 'Diamond', 'Slash', 'T', 'Hourglass', 'Moon', 'DoubleSlash', 'Heart', 'Star', 'Quote' , 'Clover', 'Spade', 'CircleAlt', 'SquareAlt', 'TriangleAlt', 'CrossAlt', 'DiamondAlt', + 'SlashAlt', 'TAlt', 'HourglassAlt', 'MoonAlt', 'DoubleSlashAlt', 'HeartAlt', 'StarAlt' ]; this.comboConnections = new Array ( ListItem( 'None', @AHLCG-LocIcon-None, @@ -649,10 +1169,10 @@ function gameObject( masterSettings ) { ), ListItem( 'Empty', @AHLCG-LocIcon-Empty, ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/images/empty1x1.png') , 12, 12 ) - ) + ) ); - - this.comboConnectionsBack = [ + + this.comboConnectionsBack = [ ListItem( 'Copy front', @AHLCG-LocIcon-CopyFront, ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/images/empty1x1.png') , 12, 12 ) ), @@ -670,29 +1190,29 @@ function gameObject( masterSettings ) { for( let index = 0; index < this.locationIcons.length; index++ ) { let item = this.locationIcons[index]; - + var hsb = masterSettings.getTint( 'AHLCG-' + item + '-tint' ); test_tinter.setFactors( hsb[0], hsb[1], hsb[2] ); let iconBaseImage = test_tinter.getTintedImage(); - + let ig = iconBaseImage.createGraphics(); ig.drawImage( ImageUtils.get( 'ArkhamHorrorLCG/icons/AHLCG-Loc' + item + '.png' ), 4, 4, null ); this.comboConnections[index+2] = ListItem( item, @('AHLCG-LocIcon-' + item), - ImageUtils.createIcon(iconBaseImage, 12, 12) + ImageUtils.createIcon(iconBaseImage, 12, 12) ); - + this.comboConnectionsBack[index+3] = ListItem( item, @('AHLCG-LocIcon-' + item), - ImageUtils.createIcon(iconBaseImage, 12, 12) + ImageUtils.createIcon(iconBaseImage, 12, 12) ); ig.dispose(); - } - + } + this.actTextShapes = new Array( null, null ); this.agendaTextShapes = new Array( null, null ); this.enemyPageShape = null; @@ -701,18 +1221,18 @@ function gameObject( masterSettings ) { this.locationBackTextShape = null; this.skillTextShape = null; this.investigatorBackTextShapes = []; - + this.getIntBoxTint = function () { if ( this.intBoxTint ) return this.intBoxTint; - + this.intBoxTint = new TintCache( new TintFilter() ); this.intBoxTint.setImage( ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-BoxIntRed.png') ); - + return this.intBoxTint; }; this.getIntMidTint = function () { if ( this.intMidTint ) return this.intMidTint; - + this.intMidTint = new TintCache( new TintFilter() ); this.intMidTint.setImage( ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-BoxIntLineRed.png' ) ); @@ -720,23 +1240,23 @@ function gameObject( masterSettings ) { }; this.getBracketTint = function () { if ( this.bracketTint ) return this.bracketTint; - + this.bracketTint = new TintCache( new TintFilter() ); this.bracketTint.setImage( ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-BoxResBracketRed.png') ); - + return this.bracketTint; }; this.getResBoxTint = function () { if ( this.resBoxTint ) return this.resBoxTint; - + this.resBoxTint = new TintCache( new TintFilter() ); this.resBoxTint.setImage( ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-BoxResRed.png') ); - + return this.resBoxTint; }; this.getResMidTint = function () { if ( this.resMidTint ) return this.resMidTint; - + this.resMidTint = new TintCache( new TintFilter() ); this.resMidTint.setImage( ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-BoxResLineRed.png' ) ); @@ -746,33 +1266,33 @@ function gameObject( masterSettings ) { let nReverse = Number(reverse); if ( this.actTextShapes[nReverse] ) return this.actTextShapes[nReverse]; - + var x = region.x; var y = region.y; var w = region.width; var h = region.height; - + var path = new java.awt.geom.Path2D.Double(); var xPathPoints = new Array( 0.000, 0.000, 0.715, 0.830, 0.830, 1.000, 1.000 ); var yPathPoints = new Array( 0.000, 1.000, 1.000, 0.957, 0.850, 0.850, 0.000 ); - + var numPoints = xPathPoints.length; - + if ( reverse ) { // swap order and x-value for (let i = 0; i < numPoints / 2; i++) { let px = xPathPoints[i]; let py = yPathPoints[i]; - + xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; yPathPoints[i] = yPathPoints[numPoints - i - 1]; - + xPathPoints[numPoints - i - 1] = 1.000 - px; yPathPoints[numPoints - i - 1] = py; } } - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -780,7 +1300,7 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.actTextShapes[nReverse] = PageShape.GeometricShape( path, region ); return this.actTextShapes[nReverse]; @@ -801,21 +1321,21 @@ function gameObject( masterSettings ) { var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); var numPoints = xPathPoints.length; - + if ( reverse ) { // swap order and x-value for (let i = 0; i < numPoints / 2; i++) { let px = xPathPoints[i]; let py = yPathPoints[i]; - + xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; yPathPoints[i] = yPathPoints[numPoints - i - 1]; - + xPathPoints[numPoints - i - 1] = 1.000 - px; yPathPoints[numPoints - i - 1] = py; } } - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -823,7 +1343,7 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.agendaTextShapes[nReverse] = PageShape.GeometricShape( path, region ); return this.agendaTextShapes[nReverse]; @@ -835,14 +1355,14 @@ function gameObject( masterSettings ) { var y = region.y; var w = region.width; var h = region.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -856,9 +1376,9 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.enemyPageShape = PageShape.GeometricShape( path, region ); - + return this.enemyPageShape; }; this.getEventTextShape = function ( region ) { @@ -868,19 +1388,17 @@ function gameObject( masterSettings ) { var y = region.y; var w = region.width; var h = region.height; - + var path = new java.awt.geom.Path2D.Double(); - -// var xPathPoints = new Array( 0.0, -0.054, -0.009, 0.179 ); -// var xPathPoints = new Array( 0.0, -0.054, -0.004, 0.179 ); + var xPathPoints = new Array( 0.0, -0.054, -0.004, 0.179 ); var yPathPoints = new Array( 0.0, 0.333, 0.892, 1.0 ); - + var xControlPoints = new Array( 0.004, -0.060, -0.083, 0.006, 0.088, 0.047 ); var yControlPoints = new Array( 0.047, 0.193, 0.513, 0.674, 0.873, 0.993 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -900,9 +1418,9 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.eventTextShape = PageShape.GeometricShape( path, region ); - + return this.eventTextShape; }; this.getLocationTextShape = function ( region ) { @@ -915,15 +1433,15 @@ function gameObject( masterSettings ) { var path = new java.awt.geom.Path2D.Double(); - // asymmetrical + // asymmetrical var xPathPoints = new Array( 0.074, 0.000, 0.000, 1.000, 1.000, 0.951, 0.926 ); var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - + var xControlPoints = new Array( 0.037, 0.107, 0.991, 0.962, 0.936, 0.970 ); var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); // just create by hand, it's asymmetrical @@ -931,7 +1449,7 @@ function gameObject( masterSettings ) { x + w * xControlPoints[1], y + h * yControlPoints[1], x + w * xPathPoints[1], y + h * yPathPoints[1] ); - + for (let i = 2; i <= 4; i++) { path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); } @@ -944,9 +1462,9 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.locationTextShape = PageShape.GeometricShape( path, region ); - + return this.locationTextShape; }; this.getLocationBackTextShape = function ( region ) { @@ -957,10 +1475,9 @@ function gameObject( masterSettings ) { var w = region.width; var h = region.height; -// var xPathPoints = new Array( 0.151, 0.000, 0.000, 1.000, 1.000, 0.849 ); var xPathPoints = new Array( 0.111, 0.000, 0.000, 1.000, 1.000, 0.889 ); var yPathPoints = new Array( 0.000, 0.204, 1.000, 1.000, 0.204, 0.000 ); - + var path = new java.awt.geom.Path2D.Double(); var numPoints = xPathPoints.length; @@ -972,9 +1489,9 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.locationBackTextShape = PageShape.GeometricShape( path, region ); - + return this.locationBackTextShape; }; this.getSkillTextShape = function ( region ) { @@ -984,17 +1501,17 @@ function gameObject( masterSettings ) { var y = region.y; var w = region.width; var h = region.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.0, 0.015 ); var yPathPoints = new Array( 0.0, 1.000 ); - + var xControlPoints = new Array( 0.053, 0.088 ); var yControlPoints = new Array( 0.307, 0.600 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -1014,9 +1531,9 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.skillTextShape = PageShape.GeometricShape( path, region ); - + return this.skillTextShape; }; this.getInvestigatorBackTextShape = function ( region, className ) { @@ -1028,7 +1545,7 @@ function gameObject( masterSettings ) { var h = region.height; var pointArrays = getPathPointArrays( className ); - + var xPathPoints = pointArrays[0]; var yPathPoints = pointArrays[1]; @@ -1043,9 +1560,37 @@ function gameObject( masterSettings ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + this.investigatorBackTextShapes[className] = PageShape.GeometricShape( path, region ); - + return this.investigatorBackTextShapes[className]; }; + this.getKeyTextShape = function ( region ) { + if ( this.keyTextShape ) return this.keyTextShape; + + var x = region.x; + var y = region.y; + var w = region.width; + var h = region.height; + + var xPathPoints = new Array( 0.000, 0.000, 0.100, 0.900, 1.000, 1.000 ); + var yPathPoints = new Array( 0.000, 0.925, 1.000, 1.000, 0.925, 0.000 ); + + var path = new java.awt.geom.Path2D.Double(); + + var numPoints = xPathPoints.length; + + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + for (let i = 1; i < numPoints; i++) { + path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + } + + path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + this.locationBackTextShape = PageShape.GeometricShape( path, region ); + + return this.locationBackTextShape; + }; + } diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js index 9f837ce..0b1605d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js @@ -1,38 +1,51 @@ importClass( ca.cgjennings.graphics.ImageUtilities ); useLibrary('tints'); -importClass( java.awt.FontMetrics ); -importClass( java.awt.font.FontRenderContext ); +importClass( java.awt.RenderingHints ); importClass( java.awt.Rectangle ); importClass( java.awt.font.TextLayout ); importClass( java.awt.BasicStroke ); +importClass( java.lang.System ); +importClass( java.awt.Toolkit ); -// horizontal guide box spacing -// add sixth skill icon +importClass( java.lang.reflect.Field ); function drawTemplate( g, sheet, className ) { var faceIndex = sheet.getSheetIndex(); var image; + if ( useReplacementTemplate( faceIndex )) { + drawReplacementTemplate( g, sheet, faceIndex ); + return; + } + if ( className != null && className.length > 0 ) { // asset basic weaknesses should use the AssetStory template - if ( CardTypes[faceIndex] == 'Asset' && className == 'BasicWeakness' ) + if ( CardTypes[faceIndex] == 'Asset' && className == 'BasicWeakness' ) image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-AssetStory' + '-' + getClassInitial( className ) + '.jp2'); else image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + '-' + getClassInitial( className ) + '.jp2'); } + else if ( CardTypes[faceIndex] == 'StoryChaos' || CardTypes[faceIndex] == 'ChaosStory' ) { + image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2'); + } + else if ( 'Concealed' ) { + if ( $Template == 'Decoy' ) image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + 'Decoy.jp2'); + else if ( $Template == 'NamedDecoy' ) image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + 'NamedDecoy.jp2'); + else image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + '.jp2'); + } else { image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + '.jp2'); } - + var w = image.getWidth(); var h = image.getHeight(); if ((CardTypes[faceIndex] == 'Act' || CardTypes[faceIndex] == 'Agenda') && $Orientation == 'Reversed' ) { sheet.paintImage( g, ImageUtils.mirror(image, true, false), new Region(0, 0, w, h) ); } - else { + else { sheet.paintImage( g, image, new Region(0, 0, w, h) ); } } @@ -41,106 +54,316 @@ function drawBackTemplate( g, sheet ) { var faceIndex = sheet.getSheetIndex(); var image; + if ( useReplacementTemplate( faceIndex )) { + drawReplacementTemplate( g, sheet, faceIndex ); + return; + } + var templateSetting = getExpandedKey( faceIndex, 'Default-template'); image = ImageUtils.get( $( templateSetting ) ); - + var w = image.getWidth(); var h = image.getHeight(); - + sheet.paintImage( g, image, new Region(0, 0, w, h) ); } -function drawAssetTemplate( g, diy, sheet, className, className2 ) { +function drawAssetTemplate( g, diy, sheet, className, className2, className3 ) { var faceIndex = sheet.getSheetIndex(); + if ( useReplacementTemplate( faceIndex )) { + drawReplacementTemplate( g, sheet, faceIndex ); + return; + } + // normal - if ( className == null || className.length == 0 || className2 == null || className2 == 'None' ) { + if ( className == null || className.length == 0 || className2 == null && className3 == null ) { drawTemplate( g, sheet, className ); return; } // don't draw dual class if the first class isn't a valid one or if the classes match - if ( !isDualClass( className, className2 ) ) { + var classes = getClassArray( className, className2, className3 ); + var classCount = classes.length; + if ( classCount < 2 ) { drawTemplate( g, sheet, className ); return; } // dual class var image = ImageUtils.get( 'ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + '-D.jp2' ); - + var w = image.getWidth(); var h = image.getHeight(); sheet.paintImage( g, image, new Region(0, 0, w, h) ); - + // draw class icons - var classInitial = getClassInitial( className ); - var classInitial2 = getClassInitial( className2 ); + var classInitials = [ getClassInitial( className ), null, null ]; + + if ( className2 == 'None' ) { + classInitials[1] = getClassInitial( className3 ); + } + else { + classInitials[1] = getClassInitial( className2 ); + + if ( className3 !== 'None' ) { + classInitials[2] = getClassInitial( className3 ); + } + } + + var startIndex = 3 - classCount; + + for (var i = 1; i <= classCount; i++) { + var symbolImage = ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-' + classInitials[i-1] + '.png' ); + var symbolRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'ClassSymbol' + (i+startIndex) + '-region') ); + sheet.paintImage( g, symbolImage, symbolRegion ); + } +} + +function drawUltimatumTemplate( g, diy, sheet, ultimatum_type, subtitle) { + var faceIndex = sheet.getSheetIndex(); + + var ultimatum_subtype = subtitle.length == 0 ? 'Common' : 'Refraction'; + + var image = ImageUtils.get( 'ArkhamHorrorLCG/templates/ultimatums/' + ultimatum_type + '-' + ultimatum_subtype + '.png' ); + + var w = image.getWidth(); + var h = image.getHeight(); + + sheet.paintImage( g, image, new Region(0, 0, w, h) ); +} + +function drawUltimatumSubtitle( g, diy, sheet, textBox, text ) { + var faceIndex = sheet.getSheetIndex(); + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Subtitle-region') ); + + textBox.markupText = text; + textBox.drawAsSingleLine( g, region ); +} + +function drawUltimatumTraits( g, diy, sheet, textBox, text ) { + var faceIndex = sheet.getSheetIndex(); + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Trait-region') ); + + textBox.markupText = text; + textBox.drawAsSingleLine( g, region ); +} + +function drawEventTemplate( g, diy, sheet, className, className2, className3 ) { + var faceIndex = sheet.getSheetIndex(); + + if ( useReplacementTemplate( faceIndex )) { + drawReplacementTemplate( g, sheet, faceIndex ); + return; + } + + var classOffsets = { + 'GK': [0, 0], + 'GR': [1, -1], + 'GM': [1, -3], + 'GV': [0, 2], + 'KG': [-2, -1], + 'KR': [-1, -1], + 'KM': [0, -3], + 'KV': [-2, 1], + 'RG': [0, 0], + 'RK': [0, 0], + 'RM': [2, -2], + 'RV': [-1, 2], + 'MG': [-1, 1], + 'MK': [-1, 1], + 'MR': [1, 1], + 'MV': [-1, 3], + 'VG': [2, -1], + 'VK': [1, -1], + 'VR': [2, -2], + 'VM': [3, -4 + ] + }; + + // normal + if ( className == null || className.length == 0 || className2 == null || className3 == null ) { + drawTemplate( g, sheet, className ); + return; + } + + // don't draw dual class if the first class isn't a valid one or if the classes match + var classes = getClassArray( className, className2, className3 ); + var classCount = classes.length; + + if ( classCount < 2 ) { + drawTemplate( g, sheet, className ); + return; + } + + // dual class + var image = ImageUtils.get( 'ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + '-D.jp2' ); + + var w = image.getWidth(); + var h = image.getHeight(); + + sheet.paintImage( g, image, new Region(0, 0, w, h) ); + + // draw class icons + var classInitials = [ getClassInitial( classes[0] ), getClassInitial( classes[1] )]; + var classString = classInitials[0] + classInitials[1]; + if ( classCount > 2 ) { + classInitials.push( getClassInitial( classes[2] )); + classString = classString + classInitials[2]; + } + + var startIndex = 0; + + for (var i = 1; i <= classCount; i++) { + if ( i == 1 ) { + let offsetString = classString.substring(0, 2); + + offset = classOffsets[offsetString][i-1]; + if ( classCount > 2 ) offset += classOffsets[offsetString][1]; + } + else if ( i == 2 ) { + offset = (classCount == 3) ? 0 : classOffsets[classString][1]; + } + else if ( i == 3 ) { + let offsetString = classString.substring(1, 3); + + offset = classOffsets[offsetString][0] + classOffsets[offsetString][1]; + } + + var symbolImage = ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-' + classInitials[i-1] + '.png' ); + var symbolRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'ClassSymbol' + (classCount) + (i+startIndex) + '-region') ); + + if (i == 1) symbolRegion.x -= offset; + else symbolRegion.x += offset; + + sheet.paintImage( g, symbolImage, symbolRegion ); + } +} + +function useReplacementTemplate( faceIndex ) { + var string = 'TemplateReplacement' + (faceIndex == FACE_FRONT ? '' : 'Back'); + var templateReplacement = $( string ); - var symbolImage1 = ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-' + classInitial + '.png' ); - var symbolImage2 = ImageUtils.get( 'ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-' + classInitial2 + '.png' ); - - var symbolRegion1 = diy.settings.getRegion( getExpandedKey( faceIndex, 'ClassSymbol1-region') ); - var symbolRegion2 = diy.settings.getRegion( getExpandedKey( faceIndex, 'ClassSymbol2-region') ); - - sheet.paintImage( g, symbolImage1, symbolRegion1 ); - sheet.paintImage( g, symbolImage2, symbolRegion2 ); + if ( templateReplacement && templateReplacement.length() > 0 ) { + return true; + } + + return false; } -function drawGuideTemplate( g, sheet ) { +function drawReplacementTemplate(g, sheet, faceIndex ) { + var string = 'TemplateReplacement' + (faceIndex == FACE_FRONT ? '' : 'Back'); + var templateReplacement = $( string ); + + try { + image = ImageUtils.read( templateReplacement ); + if (image) { + sheet.paintImage( g, image, new Region(0, 0, sheet.getTemplateWidth(), sheet.getTemplateHeight()) ); + return true; + } + } catch ( ex ) { + println('Error reading image file.'); + } +} + +function drawGuideTemplate( diy, g, sheet, labelBox ) { var faceIndex = sheet.getSheetIndex(); var image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + $PageType + '.jp2'); - + var w = image.getWidth(); var h = image.getHeight(); - + if ( $PageType == 'Empty' && Number($Page) % 2 == 0 ) sheet.paintImage( g, ImageUtils.mirror( image, true, false ), new Region(0, 0, w, h) ); else sheet.paintImage( g, image, new Region(0, 0, w, h) ); - + if ( $PageType == 'Title' ) { // overlay header for supported languages var locale = getLocale(); switch ( locale ) { case 'fr': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(187, 51, 750, 227) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(187, 51, 750, 188) ); break; case 'it': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(172, 147, 783, 130) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(172, 147, 783, 90) ); break; case 'de': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(172, 147, 783, 130) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(172, 147, 783, 94) ); break; } + + var labelRegion = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Label-region') ); + + labelBox.markupText = #AHLCG-Label-CampaignGuide; + labelBox.drawAsSingleLine( g, labelRegion ); } } -function drawGuideTemplateA4( g, sheet ) { +function drawGuideTemplateA4( diy, g, sheet, labelBox ) { var faceIndex = sheet.getSheetIndex(); var image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + $PageType + '.jp2'); - + var w = image.getWidth(); var h = image.getHeight(); - + if ( $PageType == 'Empty' && Number($Page) % 2 == 0 ) sheet.paintImage( g, ImageUtils.mirror( image, true, false ), new Region(0, 0, w, h) ); else sheet.paintImage( g, image, new Region(0, 0, w, h) ); - + if ( $PageType == 'Title' ) { // overlay header for supported languages var locale = getLocale(); switch ( locale ) { case 'fr': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(206, 56, 827, 250) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(206, 56, 827, 207) ); break; case 'it': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(189, 162, 865, 144) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(189, 162, 865, 99) ); break; case 'de': - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(190, 162, 863, 144) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(190, 162, 863, 104) ); break; } + + var labelRegion = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Label-region') ); + + labelBox.markupText = #AHLCG-Label-CampaignGuide; + labelBox.drawAsSingleLine( g, labelRegion ); + } +} + +function drawGuideTemplateLetter( diy, g, sheet, labelBox ) { + var faceIndex = sheet.getSheetIndex(); + var image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + $PageType + '.jp2'); + + var w = image.getWidth(); + var h = image.getHeight(); + + if ( $PageType == 'Empty' && Number($Page) % 2 == 0 ) sheet.paintImage( g, ImageUtils.mirror( image, true, false ), new Region(0, 0, w, h) ); + else sheet.paintImage( g, image, new Region(0, 0, w, h) ); + + if ( $PageType == 'Title' ) { + // overlay header for supported languages + var locale = getLocale(); + + switch ( locale ) { + case 'fr': + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(223, 56, 827, 207) ); + break; + case 'it': + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(206, 162, 865, 99) ); + break; + case 'de': + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-' + locale + '.png'), new Region(207, 162, 863, 104) ); + break; + } + + var labelRegion = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Label-region') ); + + labelBox.markupText = #AHLCG-Label-CampaignGuide; + labelBox.drawAsSingleLine( g, labelRegion ); } } @@ -154,7 +377,7 @@ function drawGuidePortraits( g, diy, sheet ) { if ( stencil != null ) { var invertStencil = createAlphaInvertedImage( stencil ); - + var scale = portrait.getScale(); var panX = portrait.getPanX(); var panY = portrait.getPanY(); @@ -162,8 +385,9 @@ function drawGuidePortraits( g, diy, sheet ) { var gs = invertStencil.getGraphics(); gs.setComposite(AlphaComposite.SrcIn); gs.drawImage( image, stencil.getWidth()/2 - image.getWidth()*scale/2 + panX, stencil.getHeight()/2 - image.getHeight()*scale/2 + panY, image.getWidth()*scale, image.getHeight()*scale, null ); + gs.dispose(); - + sheet.paintImage(g, invertStencil, bodyRegion ); } } @@ -175,12 +399,12 @@ function drawFadedPortrait( g, diy, sheet, portrait, mask ) { var imagePanY = PortraitList[getPortraitIndex( portrait )].getPanY(); var imageRotation = PortraitList[getPortraitIndex( portrait )].getRotation(); var imageScale = PortraitList[getPortraitIndex( portrait )].getScale(); - + var region = diy.settings.getRegion( getExpandedKey( FACE_FRONT, portrait + '-portrait-clip-region') ); var s = imageScale; - var imageScaled = ImageUtils.resize( image, image.width * s + 0.5, image.height * s + 0.5, true ); + var imageScaled = ImageUtils.resize( image, image.width * s + 0.5, image.height * s + 0.5, true ); // portrait center var cx = image.getWidth() / 2 - imagePanX; @@ -198,7 +422,12 @@ function drawFadedPortrait( g, diy, sheet, portrait, mask ) { function drawSubtitleTemplate( g, sheet, className ) { var faceIndex = sheet.getSheetIndex(); var image; - + + if ( useReplacementTemplate( faceIndex )) { + drawReplacementTemplate( g, sheet, faceIndex ); + return; + } + if (className != null && className.length > 0) { image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + 'ST-' + getClassInitial( className ) + '.jp2'); } @@ -206,14 +435,30 @@ function drawSubtitleTemplate( g, sheet, className ) { { image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-' + CardTypes[faceIndex] + 'ST.jp2'); } - + var w = image.getWidth(); var h = image.getHeight(); - + sheet.paintImage( g, image, new Region(0, 0, w, h) ); } -function drawName( g, diy, sheet, nameBox ) { +function drawLocationEncounterOverlay( g, diy, sheet ) { + var faceIndex = sheet.getSheetIndex(); + + // don't draw this if a replacement template is being used + var string = 'TemplateReplacement' + (faceIndex == FACE_FRONT ? '' : 'Back'); + var templateReplacement = $( string ); + + if ( templateReplacement && templateReplacement.length > 0 ) return; + + var image = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-LocationEncounter.png'); + + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'EncounterOverlay-region' ) ); + + sheet.paintImage( g, image, region ); +} + +function drawName( g, diy, sheet, nameBox, cClass ) { var faceIndex = sheet.getSheetIndex(); var title = ''; var unique = ''; @@ -226,138 +471,183 @@ function drawName( g, diy, sheet, nameBox ) { nameBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ParallelName-style'), null); nameBox.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, nameBox ); + initBodyTags( diy, nameBox ); } } - if (faceIndex == FACE_FRONT) title = diy.name; + unique = $( 'Unique' + BindingSuffixes[faceIndex] ); + if ( unique == null ) unique = $Unique; + + if (faceIndex == FACE_FRONT) title = String(diy.name); else { - title = $( 'Title' + BindingSuffixes[faceIndex] ); - if ( title == null ) title = diy.name; - - // locations are the only type that will copy the front title if back is left blank - if ( title == '' && CardTypes[faceIndex] == 'LocationBack' ) title = diy.name; + if ( $( 'Title' + BindingSuffixes[faceIndex] )) + title = String( $( 'Title' + BindingSuffixes[faceIndex] )); + else + title = String(diy.name); +// if ( title == null ) title = String(diy.name); + + // locations and keys are the only type that will copy the front title and unique symbol if back is left blank + if ( title == '' && (CardTypes[faceIndex] == 'LocationBack' || CardTypes[faceIndex] == 'KeyBack') ) { + title = String(diy.name); + unique = $Unique; + } } - - if ( title.length() > 0) { - unique = $( 'Unique' + BindingSuffixes[faceIndex] ); - if ( unique == null ) unique = $Unique; - + + if ( title.length > 0) { if ( unique == '1' ) { - nameBox.markupText = '' + title; + title = '' + title; } - else { - nameBox.markupText = title; + + if (cClass){ + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name' + getClassInitial( cClass ) + '-region') ); + } else { + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region') ); } - - var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region') ); + + if (CardTypes[faceIndex] == 'Ultimatum' && $Subtitle.length > 0) { + region = diy.settings.getRegion( getExpandedKey( faceIndex, 'NameWithSubtitle-region') ); + } + + region.y += parseInt(Eons.namedObjects.AHLCGObject.titleFontOffset); if ( CardTypes[faceIndex] == 'Event' && $CardClass == 'Neutral' ) region.y -= 2; + if ( CardTypes[faceIndex] == 'Event' && ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' )) region.y -= 3; + if ( CardTypes[faceIndex] == 'Skill' && ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' )) region.y -= 1; if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); if ( CardTypes[faceIndex] == 'Asset' ) { let class1 = $CardClass; let class2 = $CardClass2; - - let dual = isDualClass( class1, class2 ); - - // if dual, we should shrink the text box on both sides, to keep it centered, + let class3 = $CardClass3; + + let classCount = getClassCount( class1, class2, class3 ); + + // if dual, we should shrink the text box on both sides, to keep it centered, // but if the name is too long, we can extend the left side back out - if ( dual ) { + if ( classCount >= 2 ) { // using measure() is drawing an offset title for some reason, so we create a copy to get the size let testBox = markupBox(sheet); testBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); testBox.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - testBox.markupText = nameBox.markupText; - +// testBox.markupText = nameBox.markupText; + testBox.markupText = title; + + region.y -= 1; region.x += 30; - region.width -= 60; + region.width -= 55; + + if ( classCount > 2 ) region.width -= 45; // don't move the x value here though, it stays offcenter -// let height = nameBox.measure( g, region ); let height = testBox.measure( g, region ); - // trying to figure out if it doesn't fit in the region at full size - if ( height < 22.0 || ( height > 25.0 && title.length() > 20 ) ) { + if ( height < 22.0 || ( height > 25.0 && title.length > 20 ) ) { region.x -= 30; region.width += 30; } } } - else if ( CardTypes[faceIndex] == 'Guide75' ) title = title.toUpperCase(); + else if ( CardTypes[faceIndex] == 'Guide75' ) title = title.toUpperCase(); else if ( CardTypes[faceIndex] == 'GuideA4' ) title = title.toUpperCase(); - else if ( CardTypes[faceIndex] == 'Event' && ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' )) region.y -= 3; + else if ( CardTypes[faceIndex] == 'GuideLetter' ) title = title.toUpperCase(); + + nameBox.markupText = "Size"; + var lineHeight = nameBox.measure( g, region ); + lineHeight = 20.0; + + var lines = title.split('\n'); + + if ( !lines ) return; + + var width = 0; + for ( let i = 0; i < lines.length; i++ ) { + nameBox.markupText = lines[i]; + width = nameBox.drawAsSingleLine( g, region ); // return the width of the last line (what we want!) - nameBox.drawAsSingleLine( g, region ); + region.y += lineHeight * 0.8; + region.height -= lineHeight * 0.8; + } } } -function drawActAgendaName( g, diy, sheet, nameBox ) { +//function drawActAgendaName( g, diy, sheet, nameBox ) { +function draw2LineName( g, diy, sheet, nameBox ) { var faceIndex = sheet.getSheetIndex(); var title = ''; var unique = ''; - - if (faceIndex == FACE_FRONT) title = diy.name; + + if (faceIndex == FACE_FRONT) title = String(diy.name); else { - title = $( 'Title' + BindingSuffixes[faceIndex] ); - if ( title == null ) title = diy.name; - + title = String($( 'Title' + BindingSuffixes[faceIndex] )); + if ( title == null ) title = String(diy.name); + // locations are the only type that will copy the front title if back is left blank - if ( title == '' && CardTypes[faceIndex] == 'LocationBack' ) title = diy.name; + if ( title == '' && CardTypes[faceIndex] == 'LocationBack' ) title = String(diy.name); + } + + if ( CardTypes[faceIndex] == 'Concealed' && $Template == 'NamedDecoy' ) { + nameBox = markupBox(sheet); + nameBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'DecoyName-style'), null); + nameBox.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'DecoyName-alignment')); } - - if ( title.length() > 0) { + + // If I don't do this, formatting changes from Story/Chaos don't happen immediately + nameBox.markupText = ''; + + if ( title.length > 0) { unique = $( 'Unique' + BindingSuffixes[faceIndex] ); - + if ( unique == '1' ) { nameBox.markupText = '' + title; } else { nameBox.markupText = title; } - + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region') ); + if ( CardTypes[faceIndex] == 'Concealed' && $Template == 'NamedDecoy' ) region = diy.settings.getRegion( 'AHLCG-Concealed-DecoyName-region' ); + + region.y += parseInt(Eons.namedObjects.AHLCGObject.titleFontOffset); if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); - nameBox.markupText = "Size"; - var lineHeight = nameBox.measure( g, region ); + // new system - align tline 1 to top, line 2 to bottom / single line should be centered - var lines = diy.name.split('\n'); - - if (lines.length > 1) region.y -= 10; - - var width = 0; - for ( let i = 0; i < lines.length; i++ ) { - nameBox.markupText = lines[i]; - width = nameBox.drawAsSingleLine( g, region ); // return the width of the last line (what we want!) +// nameBox.markupText = "Size"; +// var lineHeight = Math.ceil( nameBox.measure( g, region ) * 1.8 ); +// var lineHeight = 20.0; - region.y += lineHeight * 1.0; - region.height -= lineHeight * 1.0; + var lines = title.split('\n'); + +// if (lines.length > 1) region.y -= 10; + if ( lines.length > 1 ) { + nameBox.markupText = lines[0]; + nameBox.alignment = LAYOUT_TOP | LAYOUT_CENTER; + nameBox.drawAsSingleLine( g, region ); + + if ( CardTypes[faceIndex] == 'Concealed' && $Template == 'NamedDecoy' && lines[1][0] == '(' ) { + nameBox.markupText = '' + lines[1]; + region.height -= 5; + } + else nameBox.markupText = lines[1]; + nameBox.alignment = LAYOUT_BOTTOM | LAYOUT_CENTER; + nameBox.drawAsSingleLine( g, region ); } -/* - if (lines.length == 1) { - // I hope this calculation works everywhere - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), - new Region( region.x + (region.width - width) / 2, region.y + 1, width + 2, 6) ); + else { + if ( CardTypes[faceIndex] == 'Concealed' ) { + if ( $Template == 'NamedDecoy' ) region.y -= 4; + else region.y -= 9; + } + else region.y += 1; + + nameBox.markupText = lines[0]; + nameBox.alignment = LAYOUT_MIDDLE | LAYOUT_CENTER; + nameBox.drawAsSingleLine( g, region ); } -*/ - return region.y + 12; } } -/* -function drawRotatedName( g, diy, sheet ) { - var faceIndex = sheet.getSheetIndex(); - var title = ''; - if (faceIndex == FACE_FRONT) title = diy.name; - else { - title = $( 'Title' + BindingSuffixes[faceIndex] ); - if (title == null) title = diy.name; - } +function drawActAgendaBackName( g, diy, sheet ) { + var userSettings = Settings.getUser(); + var rotate = userSettings.getBoolean( 'AHLCG-DefaultRotateTitle', true ); - g.setPaint( new Color( 0, 0, 0 ) ); - sheet.drawRotatedTitle( g, title, diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region' ) ), Eons.namedObjects.AHLCGObject.costFont, 12.5, 0, 1 ); -} -*/ -function drawRotatedName (g, diy, sheet ){ var faceIndex = sheet.getSheetIndex(); var title = ''; @@ -367,32 +657,45 @@ function drawRotatedName (g, diy, sheet ){ if (title == null) title = diy.name; } - // from LotR - BackName_box.markupText = title; - var oldTransform = g.getTransform(); - g.rotate(-Math.PI/2,0,0); var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region' ) ); - var newRegion = region.clone(); - var x = region.getX(); - var y = region.getY(); - var w = region.getWidth(); - var h = region.getHeight(); - newRegion.setRect( -h-y, x, h, w ); - BackName_box.draw( g, newRegion ); - g.setTransform( oldTransform ); + + if (rotate) { + // from LotR + BackName_box.markupText = title; + var oldTransform = g.getTransform(); + g.rotate(-Math.PI/2,0,0); + + var newRegion = region.clone(); + var x = region.getX(); + var y = region.getY(); + var w = region.getWidth(); + var h = region.getHeight(); + newRegion.setRect( -h-y, x, h, w ); + + BackName_box.draw( g, newRegion ); + g.setTransform( oldTransform ); + } + else if ( title.length > 0 ) { + var text = ''; + text = title.split('').join('
'); + + BackName_box.markupText = text; + BackName_box.draw( g, region ); + } } function drawChaosName( g, diy, sheet, nameBox ) { var faceIndex = sheet.getSheetIndex(); var AHLCGObject = Eons.namedObjects.AHLCGObject; - var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Name-region') ); - nameBox.markupText = "Size"; + region.y += parseInt(Eons.namedObjects.AHLCGObject.titleFontOffset); + + nameBox.markupText = "Size"; var lineHeight = nameBox.measure( g, region ); var lines; - + if (faceIndex == FACE_FRONT) { if ( diy.name ) lines = diy.name.split('\n'); } @@ -407,7 +710,7 @@ function drawChaosName( g, diy, sheet, nameBox ) { // assume 1 line if ( !lines ) return region.y + (lineHeight * 0.8) + 12; - + var width = 0; for ( let i = 0; i < lines.length; i++ ) { nameBox.markupText = lines[i]; @@ -416,9 +719,9 @@ function drawChaosName( g, diy, sheet, nameBox ) { region.y += lineHeight * 0.8; region.height -= lineHeight * 0.8; } - + // I hope this calculation works everywhere -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), // new Region( region.x + (region.width - width) / 2, region.y + 1, width + 2, 6) ); g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 1.0 ) ); @@ -430,10 +733,6 @@ function drawChaosName( g, diy, sheet, nameBox ) { function drawSubtitle( g, diy, sheet, subtitleBox, className, drawBox ) { var faceIndex = sheet.getSheetIndex(); - - // not currently supported - if ( className == 'Dual' ) return; - // can't make this work without creating a new box // otherwise, you have to edit the text for the color change to happen if ( className.indexOf('Parallel') >= 0) { @@ -444,22 +743,31 @@ function drawSubtitle( g, diy, sheet, subtitleBox, className, drawBox ) { if ( drawBox ) { var image = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Subtitle-' + getClassInitial( className ) + '.png'); - + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Subtitle' + getClassInitial( className ) + '-region' ) ); var iw = image.getWidth(); var ih = image.getHeight(); - + var x = region.x + (region.width - iw)/2; - + sheet.paintImage( g, image, new Region(x, region.y, iw, ih) ); } - + var subtitle = $( 'Subtitle' + BindingSuffixes[faceIndex] ); if (subtitle == null) subtitle = $Subtitle; - + + // keys are the only type that will copy the front subtitle if back is left blank + if ( subtitle == '' && CardTypes[faceIndex] == 'KeyBack' ) { + subtitle = $Subtitle; + } + + // keys are the only type that will copy the front subtitle if back is left blank + if ( subtitle == '' && CardTypes[faceIndex] == 'KeyBack' ) subtitle = String($Subtitle); + var textRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'SubtitleText' + getClassInitial( className ) + '-region' ) ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) textRegion.y -= 2; + textRegion.y += parseInt(Eons.namedObjects.AHLCGObject.subtitleFontOffset); +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) textRegion.y -= 2; subtitleBox.markupText = subtitle; @@ -472,12 +780,13 @@ function drawDifficulty( g, diy, sheet, textBox, text, y ) { var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Difficulty-region') ); region.y = y; - - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + region.y += parseInt(Eons.namedObjects.AHLCGObject.typeFontOffset); + +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; textBox.markupText = text; textBox.drawAsSingleLine( g, region ); - + return y + 29; } @@ -485,32 +794,37 @@ function drawLabel( g, diy, sheet, textBox, text ) { var faceIndex = sheet.getSheetIndex(); var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Label-region') ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; - + if ( CardTypes[faceIndex] === 'Asset' && $CardClass === 'Neutral' ) region.y -= 1; + + region.y += parseInt(Eons.namedObjects.AHLCGObject.typeFontOffset); +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + if ( CardTypes[faceIndex] == 'Event' && Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y += 1; + textBox.markupText = text.toUpperCase(); textBox.drawAsSingleLine( g, region ); } -function drawScenarioResolutionHeader( g, diy, sheet, headerBox ) { +function drawScenarioResolutionHeader( g, diy, sheet, headerBox ) { var faceIndex = sheet.getSheetIndex(); var headerRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Header-region' ) ); - + headerRegion.y += parseInt(Eons.namedObjects.AHLCGObject.victoryFontOffset); + headerBox.markupText = #AHLCG-Scenario-Header1; - + var height = headerBox.measure( g, headerRegion ); var width1 = headerBox.drawAsSingleLine( g, headerRegion ) + 4.0; - + headerRegion.y += height - 0.0; - + headerBox.markupText = '' + #AHLCG-Scenario-Header2 + ''; height = headerBox.measure( g, headerRegion ); var width2 = headerBox.drawAsSingleLine( g, headerRegion ) + 4.0; - + var headerWidth = Math.max( width1, width2 ); - -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), + +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), // new Region( headerRegion.x + (headerRegion.width - headerWidth)/ 2, headerRegion.y + height, headerWidth, 3) ); g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 1.0 ) ); @@ -525,17 +839,24 @@ function drawBody( g, diy, sheet, bodyBox, partsArray ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body-region') ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); - if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; - - bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - bodyBox.setTextFitting( FIT_SCALE_TEXT ); - +// if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + + // setting an action listener is hard because the box doesn't exist during layout, this is just easier... + bodyBox.setReplacementForTag('fullnameb', $TitleBack ); + + bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + bodyBox.setTextFitting( FIT_SCALE_TEXT ); + // if there is no trait text, add a little spacing var traitText = $( 'Traits' + BindingSuffixes[faceIndex] ); + // Acts/agendas created from CSV for translation project have $Trait = '' + var ignoreTrait = ( CardTypes[faceIndex] == 'Act' || CardTypes[faceIndex] == 'Agenda' || CardTypes[faceIndex] == 'AgendaFrontPortrait' || CardTypes[faceIndex] == 'Ultimatum' ); + // null if it doesn't exist - if ( traitText == '' ) { + if ( !ignoreTrait && traitText == '' ) { Text = Text + ''; } @@ -544,9 +865,10 @@ function drawBody( g, diy, sheet, bodyBox, partsArray ) { Text = addSpacing( faceIndex, Text, partsArray[index], diy ); } - bodyBox.markupText = Text; + bodyBox.markupText = Text; updateNameTags( bodyBox, diy ); + bodyBox.draw( g, region ); } @@ -557,12 +879,13 @@ function drawInvBackBody( g, diy, sheet, bodyBox, partsArray ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body-region') ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); - if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; - - bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - bodyBox.setTextFitting( FIT_SCALE_TEXT ); - +// if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + + bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + bodyBox.setTextFitting( FIT_SCALE_TEXT ); + // if there is no trait text, add a little spacing var traitText = $( 'Traits' + BindingSuffixes[faceIndex] ); @@ -589,13 +912,15 @@ function drawBodyWithRegionName( g, diy, sheet, bodyBox, partsArray, regionName var AHLCGObject = Eons.namedObjects.AHLCGObject; var region = diy.settings.getRegion( getExpandedKey( faceIndex, regionName + '-region') ); - if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; - - bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - bodyBox.setTextFitting( FIT_SCALE_TEXT ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); +// if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + + bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + bodyBox.setTextFitting( FIT_SCALE_TEXT ); // if there is no trait text, add a little spacing var traitText = $( 'Traits' + BindingSuffixes[faceIndex] ); + // null if it doesn't exist if ( traitText == '' ) { Text = Text + ''; @@ -605,7 +930,7 @@ function drawBodyWithRegionName( g, diy, sheet, bodyBox, partsArray, regionName Text = addTextPart( faceIndex, Text, partsArray[index], diy ); Text = addSpacing( faceIndex, Text, partsArray[index], diy ); } - + bodyBox.markupText = Text; updateNameTags( bodyBox, diy ); @@ -614,18 +939,18 @@ function drawBodyWithRegionName( g, diy, sheet, bodyBox, partsArray, regionName function drawIndentedStoryBody( g, diy, sheet, traitsBox, headerBox, storyBox, bodyBox ) { var faceIndex = sheet.getSheetIndex(); - var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bodyAppend = '-region'; var storyAppend = '-region'; var tightnessAppend = '-tightness'; - - if ( CardTypes[faceIndex] == 'Chaos' ) { - bodyAppend = 'Story-region'; - storyAppend = 'Story-region'; - tightnessAppend = 'Story-tightness'; - } + + // Chaos has two completely different setups, tokens or story -> BodyStory-region, StoryStory-region are for story layout +// if ( CardTypes[faceIndex] == 'ChaosStory' || CardTypes[faceIndex] == 'ChaosStoryFull' ) { +// bodyAppend = 'Story-region'; +// storyAppend = 'Story-region'; +// tightnessAppend = 'Story-tightness'; +// } var fullRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body' + bodyAppend ) ); var traitsRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body' + bodyAppend ) ); @@ -634,10 +959,75 @@ function drawIndentedStoryBody( g, diy, sheet, traitsBox, headerBox, storyBox, b var fullStoryRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Story' + storyAppend ) ); var storyRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Story' + storyAppend ) ); - var horizLineSpace1 = 0; - var horizLineSpace2 = 16; + // if back and no TrackerBoxBack, use the front + var trackerBox = null; + var trackerHeight = 0; + if ( $('TrackerBox' + BindingSuffixes[faceIndex]) ) { + trackerBox = String( $('TrackerBox' + BindingSuffixes[faceIndex]) ); + trackerHeight = $('TrackerHeight' + BindingSuffixes[faceIndex]); + } + + // if there is no tracker box interface for the back + if ( !trackerBox == null) { + trackerBox = String( $TrackerBox ); + trackerHeight = $TrackerHeight; + } + + if ( trackerBox && trackerBox.length > 0 ) { + var diff = 90 * trackerHeight / 100.0 + 10; // +10: bottom of region starts below bottom of box, want it to end above top + + fullRegion.height -= diff; + traitsRegion.height -= diff; + headerRegion.height -= diff; + bodyRegion.height -= diff; + fullStoryRegion.height -= diff; + storyRegion.height -= diff; + } + + // setting an action listener is hard because the box doesn't exist during layout, this is just easier... + bodyBox.setReplacementForTag('fullnameb', $TitleBack ); + + // I hate this + if ( CardTypes[faceIndex] == 'StoryChaos' ) { + var title = faceIndex == FACE_FRONT ? diy.name : $TitleBack; + var nlIndex = title.indexOf("\n"); + + if (nlIndex > 0) { + let offset = 24; + + fullRegion.y += offset; + fullRegion.height -= offset; + traitsRegion.y += offset; + traitsRegion.height -= offset; + headerRegion.y += offset; + headerRegion.height -= offset; + bodyRegion.y += offset; + bodyRegion.height -= offset; + fullStoryRegion.y += offset; + fullStoryRegion.height -= offset; + storyRegion.y += offset; + storyRegion.height -= offset; + } + } + + var horizLineSpace1 = 8; + var horizLineSpace2 = 8; + var vertLineOffset1 = -1; + var vertLineOffset2 = 4; + + if ( AHLCGObject.bodyFamily == 'Arno Pro' ) { + horizLineSpace1 = 6; + horizLineSpace2 = 10; + vertLineOffset1 = -1; + vertLineOffset2 = 4; + } if ( AHLCGObject.bodyFamily == 'Times New Roman' ) { + horizLineSpace1 = 8; + horizLineSpace2 = 8; + vertLineOffset1 = -4; + vertLineOffset2 = 4; +/* fullRegion.y -= 2; headerRegion.y -= 2; bodyRegion.y -= 2; @@ -646,24 +1036,53 @@ function drawIndentedStoryBody( g, diy, sheet, traitsBox, headerBox, storyBox, b horizLineSpace1 = 2; horizLineSpace2 = 14; +*/ } - + + var offset = parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); + + fullRegion.y += offset; + headerRegion.y += offset; + bodyRegion.y += offset; + fullStoryRegion.y += offset; + storyRegion.y += offset; + +// if ( horizLineSpace1 < 8 ) horizLineSpace1 = 8; +// if ( horizLineSpace2 < 8 ) horizLineSpace2 = 8; + if ( traitsBox ) { - traitsBox.setLineTightness( $(getExpandedKey(faceIndex, 'Header', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); - traitsBox.setTextFitting( FIT_SCALE_TEXT ); + traitsBox.setLineTightness( $(getExpandedKey(faceIndex, 'Header', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); +// traitsBox.setTextFitting( FIT_SCALE_TEXT ); + traitsBox.setTextFitting( FIT_NONE ); } - - headerBox.setLineTightness( $(getExpandedKey(faceIndex, 'Header', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); - headerBox.setTextFitting( FIT_SCALE_TEXT ); - storyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Story', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); - storyBox.setTextFitting( FIT_SCALE_TEXT ); - bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); - bodyBox.setTextFitting( FIT_SCALE_TEXT ); + + headerBox.setLineTightness( $(getExpandedKey(faceIndex, 'Header', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); +// headerBox.setTextFitting( FIT_SCALE_TEXT ); + headerBox.setTextFitting( FIT_NONE ); + storyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Story', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); +// storyBox.setTextFitting( FIT_SCALE_TEXT ); + storyBox.setTextFitting( FIT_NONE ); + bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', tightnessAppend) + '-tightness') * AHLCGObject.bodyFontTightness ); +// bodyBox.setTextFitting( FIT_SCALE_TEXT ); + bodyBox.setTextFitting( FIT_NONE ); // var defaultSpacing = 8; - + + if ( traitsBox ) { + traitsBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); + var traitsDefaultSize = traitsBox.defaultStyle.get( SIZE ); + } + + headerBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); + storyBox.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); + bodyBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + + var bodyDefaultSize = bodyBox.defaultStyle.get( SIZE ); + var headerDefaultSize = headerBox.defaultStyle.get( SIZE ); + var storyDefaultSize = storyBox.defaultStyle.get( SIZE ); + var suffixArray = [ 'A', 'B', 'C' ]; - + var traitsHeight = 0; var traitsSpacing = 0; var headerHeight = [ 0, 0, 0 ]; @@ -680,197 +1099,326 @@ function drawIndentedStoryBody( g, diy, sheet, traitsBox, headerBox, storyBox, b var storyText = [ '', '', '' ]; var bodyText = [ '', '', '' ]; var victoryText = ''; - - var scaleModifier = $( 'ScaleModifier' + BindingSuffixes[faceIndex], 100 ); - if ( scaleModifier == null ) scaleModifier = $ScaleModifier; - + + var bodyTextSize = 100.0; + var storyTextSize = 100.0; + var headerTextSize = 100.0; + var traitsTextSize = 100.0; + var victoryTextSize = 100.0; + if ( traitsBox ) { - traitsSpacing = parseInt( $( 'TraitsA' + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4; - traitsText = $( 'TraitsA' + BindingSuffixes[faceIndex] ); - traitsBox.markupText = '
' + traitsText + ''; + traitsSpacing = parseInt( $( 'TraitsA' + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ); + traitsText = String( $( 'TraitsA' + BindingSuffixes[faceIndex] )); + } + + victoryText = String($( 'Victory' + BindingSuffixes[faceIndex] )); + victorySpacing = parseInt( $('Victory' + BindingSuffixes[faceIndex] + 'Spacing'), 10 ); + + for ( let i = 0; i < 3; i++ ) { + headerText[i] = String( $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] )); + headerSpacing[i] = headerText[i].length > 0 ? parseInt( $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4 : 0; + + storyText[i] = String( $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] )); + storySpacing[i] = storyText[i].length > 0 ? parseInt( $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4 : 0; + + bodyText[i] = ''; + bodyText[i] = addTextPart( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); + bodyText[i] = addSpacing( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); + } + + var scale = 1.0; + var iterations = 0; + + do { + totalHeight = 0; + + if ( traitsBox ) { + let traitsStyle = traitsBox.getDefaultStyle(); + traitsStyle.add( SIZE, traitsDefaultSize * traitsTextSize / 100.0 ); + traitsBox.setDefaultStyle( traitsStyle ); + traitsBox.markupText = ''; + + traitsBox.markupText = '
' + traitsText + ''; + + if ( traitsText.length > 0 ) { + traitsHeight = traitsBox.measure( g, fullRegion ); + totalHeight += traitsHeight; + totalHeight += traitsSpacing; + } + } + +// victoryText = String($( 'Victory' + BindingSuffixes[faceIndex] )); + if ( victoryText.length > 0 ) { + headerBox.markupText = ''; // we are reusing headerBox for each section - this is required to prevent oddness that I admit I don't understand +// headerBox.markupText = $( 'Victory' + BindingSuffixes[faceIndex] + 'Text' ); + headerBox.markupText = victoryText; + + victoryHeight = headerBox.measure( g, fullRegion ); +// victorySpacing = parseInt( $('Victory' + BindingSuffixes[faceIndex] + 'Spacing'), 10 ); + + totalHeight += victoryHeight; + totalHeight += victorySpacing; + } + + for ( let i = 0; i < 3; i++ ) { +// headerText[i] = String( $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] )); +// headerSpacing[i] = headerText[i].length > 0 ? parseInt( $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4 : 0; + +// storyText[i] = String( $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] )); +// storySpacing[i] = storyText[i].length > 0 ? parseInt( $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4 : 0; + let textExists = false; + + let headerStyle = headerBox.getDefaultStyle(); + headerStyle.add( SIZE, headerDefaultSize * headerTextSize / 100.0 ); + headerBox.setDefaultStyle( headerStyle ); + + headerBox.markupText = ''; // we are reusing headerBox for each section - this is required to prevent oddness that I admit I don't understand + headerBox.markupText = headerText[i]; + + if (headerText[i].length > 0) { + headerHeight[i] = headerBox.measure( g, fullRegion ); + totalHeight += headerHeight[i]; + totalHeight += headerSpacing[i]; + + if ( i == 0 ) { + totalHeight += 4; // if there's a first header, it needs to be moved down a bit + } + + textExists = true; + } + + let storyStyle = storyBox.getDefaultStyle(); + storyStyle.add( SIZE, storyDefaultSize * storyTextSize / 100.0 ); + storyBox.setDefaultStyle( storyStyle ); + + storyBox.markupText = ''; // we are reusing storyBox for each section - this is required to prevent oddness that I admit I don't understand + storyBox.markupText = storyText[i]; + + if (storyText[i].length > 0) { + storyHeight[i] = storyBox.measure( g, fullStoryRegion ); + totalHeight += storyHeight[i]; + totalHeight += storySpacing[i]; + + textExists = true; + } - if ( traitsText.length() > 0 ) { - traitsHeight = traitsBox.measure( g, fullRegion ); - totalHeight += traitsHeight; - totalHeight += traitsSpacing; - } - } +// bodyText[i] = ''; - victoryText = $( 'Victory' + BindingSuffixes[faceIndex] ); - if ( victoryText.length() > 0 ) { - headerBox.markupText = ''; // we are reusing headerBox for each section - this is required to prevent oddness that I admit I don't understand - headerBox.markupText = $( 'Victory' + BindingSuffixes[faceIndex] + 'Text' ); - - victoryHeight = headerBox.measure( g, fullRegion ); - victorySpacing = parseInt( $('Victory' + BindingSuffixes[faceIndex] + 'Spacing'), 10 ); - - totalHeight += victoryHeight; - totalHeight += victorySpacing; - } +// bodyText[i] = addTextPart( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); +// bodyText[i] = addSpacing( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); - for ( let i = 0; i < 3; i++ ) { - headerSpacing[i] = parseInt( $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4; - headerText[i] = $( 'Header' + suffixArray[i] + BindingSuffixes[faceIndex] ); + let bodyStyle = bodyBox.getDefaultStyle(); + bodyStyle.add( SIZE, bodyDefaultSize * bodyTextSize / 100.0 ); + bodyBox.setDefaultStyle( bodyStyle ); - storySpacing[i] = parseInt( $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] + 'Spacing' ), 10 ) + 4; - storyText[i] = $( 'AccentedStory' + suffixArray[i] + BindingSuffixes[faceIndex] ); - let textExists = false; - - headerBox.markupText = ''; // we are reusing headerBox for each section - this is required to prevent oddness that I admit I don't understand - headerBox.markupText = headerText[i]; + bodyBox.markupText = ''; // we are reusing bodyBox for each section - this is required to prevent oddness that I admit I don't understand + bodyBox.markupText = bodyText[i]; - if (headerText[i].length() > 0) { - headerHeight[i] = headerBox.measure( g, fullRegion ); - totalHeight += headerHeight[i]; - totalHeight += headerSpacing[i]; + updateNameTags( bodyBox, diy ); - if ( i == 0 ) totalHeight += 4; // if there's a first header, it needs to be moved down a bit + if ((bodyText[i]).length > 0) { + bodyHeight[i] = bodyBox.measure( g, fullRegion ); + totalHeight += bodyHeight[i]; - textExists = true; - } - - storyBox.markupText = ''; // we are reusing storyBox for each section - this is required to prevent oddness that I admit I don't understand - storyBox.markupText = storyText[i]; - - if (storyText[i].length() > 0) { - storyHeight[i] = storyBox.measure( g, fullStoryRegion ); - totalHeight += storyHeight[i]; - totalHeight += storySpacing[i]; + textExists = true; + } - textExists = true; + if (textExists) { + totalHeight += 16; // for the rule and spacing + } } - - bodyText[i] = ''; - - bodyText[i] = addTextPart( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); - bodyText[i] = addSpacing( faceIndex, bodyText[i], 'Rules' + suffixArray[i], diy ); - bodyBox.markupText = ''; // we are reusing bodyBox for each section - this is required to prevent oddness that I admit I don't understand - bodyBox.markupText = bodyText[i]; - - updateNameTags( bodyBox, diy ); - - if ((bodyText[i]).length > 0) { - bodyHeight[i] = bodyBox.measure( g, fullRegion ); - totalHeight += bodyHeight[i]; +//? totalHeight -= 28; // don't need the final rule/spacing, tweaked to make Victory look better + totalHeight -= 16; // don'tneed the final rule/spacing - textExists = true; - } - - if (textExists) totalHeight += 16; // for the rule and spacing - } - - totalHeight -= 28; // don't need the final rule/spacing, tweaked to make Victory look better - - var scale = 1.0; + iterations++; +// var ratio = fullHeight / totalHeight; +// if ( ratio > 1) scale = scale * (1 + (ratio - 1) / 2); +// else scale = scale * (1 - (1 - ratio) / 2); // ratio + if ( totalHeight > fullHeight ) scale -= 0.04; + bodyTextSize = scale * 100.0; + storyTextSize = scale * 100.0; + headerTextSize = scale * 100.0; + traitsTextSize = scale * 100.0; + victoryTextSize = scale * 100.0; + } while ( totalHeight > fullHeight ); + + var scaleModifier = $( 'ScaleModifier' + BindingSuffixes[faceIndex], 100 ); + if ( scaleModifier == null ) scaleModifier = $ScaleModifier; + + if (totalHeight > fullHeight) scale = scale * fullHeight / totalHeight; // ratio - if (totalHeight > fullHeight) scale = fullHeight / totalHeight; - - var bodyTextSize = 1.0; - var storyTextSize = 1.0; - var headerTextSize = 1.0; - var traitsTextSize = 1.0; - var victoryTextSize = 1.0; - // this is more or less a guess that works so far - var textScale = Math.sqrt( scale ) * 0.93; + var textScale = scale * 0.98; + +// if (totalHeight > fullHeight) { +// if ( trackerBox && trackerBox.length > 0 ) textScale = Math.sqrt(scale); +// else textScale = Math.sqrt( scale ) * 0.93; // I think this would be better if this weren't here, but to support old cards, I'm leaving it +// } bodyTextSize = textScale * scaleModifier; storyTextSize = textScale * scaleModifier; headerTextSize = textScale * scaleModifier; traitsTextSize = textScale * scaleModifier; victoryTextSize = textScale * scaleModifier; - - if ( traitsBox && traitsText.length() > 0 ) { + + if ( traitsBox && traitsText.length > 0 ) { + let traitsStyle = traitsBox.getDefaultStyle(); + traitsStyle.add( SIZE, traitsDefaultSize * traitsTextSize / 100.0 ); + traitsBox.setDefaultStyle( traitsStyle ); + traitsBox.markupText = ''; + traitsRegion.height = Math.ceil( traitsHeight * scale ); - traitsBox.markupText = '
' + traitsText + ''; +// traitsBox.markupText = '
' + traitsText + ''; + traitsBox.markupText = '
' + traitsText + ''; - traitsHeight = headerBox.measure( g, fullRegion ); + traitsHeight = traitsBox.measure( g, fullRegion ); traitsRegion.height = Math.ceil( traitsHeight ); - traitsBox.draw( g, traitsRegion ); headerRegion.y += traitsHeight + Math.ceil( traitsSpacing * scale ); } - for ( let i = 0; i < 3; i++ ) { + for ( let i = 0; i < 3; i++ ) { if ( i == 0 ) { - if ( headerText[i].length() > 0 ) headerRegion.y += 4; // if there's a first header, it needs to be moved down a bit + if ( headerText[i].length > 0 ) { + headerRegion.y += 4*textScale; // if this is the first text after traits, it needs to be moved down a bit + } } else { if ( headerHeight[i] > 0 || storyHeight[i] > 0 || bodyHeight[i] > 0) { -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HRLine.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HRLine.png'), // new Region( headerRegion.x, headerRegion.y + ( horizLineSpace1 * scale * $ScaleModifier / 100.0 ), headerRegion.width, 7) ); + g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 1.0 ) ); - g.drawLine(headerRegion.x, headerRegion.y + ( horizLineSpace1 * scale + $ScaleModifier / 100.0 ) + 2, headerRegion.x + headerRegion.width, headerRegion.y + ( horizLineSpace1 * scale + $ScaleModifier / 100.0 ) + 2 ); - - headerRegion.y += Math.ceil( horizLineSpace2 * scale * $ScaleModifier / 100.0 ); + + headerRegion.y += Math.ceil( horizLineSpace1 * scale * $ScaleModifier / 100.0); +// g.drawLine(headerRegion.x, headerRegion.y + ( horizLineSpace1 * scale + $ScaleModifier / 100.0 ), headerRegion.x + headerRegion.width, headerRegion.y + ( horizLineSpace1 * scale + $ScaleModifier / 100.0 )); + g.drawLine(headerRegion.x, headerRegion.y, headerRegion.x + headerRegion.width, headerRegion.y); + + headerRegion.y += Math.ceil( horizLineSpace2 * scale * $ScaleModifier / 100.0); } } - + // if we are scaling down, the text won't necessarily fill the box, so we are recalculating the height - headerRegion.height = Math.ceil( headerHeight[i] * scale ); - if (headerText[i].length() > 0) { - headerBox.markupText = '' + headerText[i]; + headerRegion.height = Math.ceil( headerHeight[i] * scale ); // is this actually valid? + if (headerText[i].length > 0) { + let headerStyle = headerBox.getDefaultStyle(); + headerStyle.add( SIZE, headerDefaultSize * headerTextSize / 100.0 ); + headerBox.setDefaultStyle( headerStyle ); + headerBox.markupText = ''; + +// headerBox.markupText = '' + headerText[i]; + headerBox.markupText = headerText[i]; headerHeight[i] = headerBox.measure( g, fullRegion ); headerRegion.height = Math.ceil( headerHeight[i] ); } - - storyRegion.y = headerRegion.y + headerRegion.height + Math.ceil( headerSpacing[i] * scale ); + + storyRegion.y = headerRegion.y + headerRegion.height + Math.ceil( headerSpacing[i] * scale * ($ScaleModifier / 100.0 ) ); storyRegion.height = Math.ceil( storyHeight[i] * scale ); - if (storyText[i].length() > 0) { - storyBox.markupText = '' + storyText[i]; + if ( i == 0 && headerText[i].length < 1 ) { + if ( storyText[i].length > 0 ) { + storyRegion.y += 4*textScale; // if this is the first text after traits, it needs to be moved down a bit + } + } + + if (storyText[i].length > 0) { + let storyStyle = storyBox.getDefaultStyle(); + storyStyle.add( SIZE, storyDefaultSize * storyTextSize / 100.0 ); + storyBox.setDefaultStyle( storyStyle ); + storyBox.markupText = ''; + +// storyBox.markupText = '' + storyText[i]; + storyBox.markupText = storyText[i]; storyHeight[i] = storyBox.measure( g, fullStoryRegion ); storyRegion.height = Math.ceil( storyHeight[i] ) + 2; } - - bodyRegion.y = storyRegion.y + storyRegion.height + Math.ceil( storySpacing[i] * scale ); + + bodyRegion.y = storyRegion.y + storyRegion.height + Math.ceil( storySpacing[i] * scale * ($ScaleModifier / 100.0 ) ); bodyRegion.height = Math.ceil( bodyHeight[i] * scale ); - if (bodyText[i].length > 0) { - bodyBox.markupText = '' + bodyText[i]; + if ( i == 0 && headerText[i].length < 1 && storyText[i].length < 1 ) { + if ( bodyText[i].length > 0 ) { + bodyRegion.y += 4*textScale; // if this is the first text after traits, it needs to be moved down a bit + } + } + + if (bodyText[i].length > 0) { + let bodyStyle = bodyBox.getDefaultStyle(); + bodyStyle.add( SIZE, bodyDefaultSize * bodyTextSize / 100.0 ); + bodyBox.setDefaultStyle( bodyStyle ); + bodyBox.markupText = ''; + +// bodyBox.markupText = '' + bodyText[i]; + bodyBox.markupText = bodyText[i]; bodyHeight[i] = bodyBox.measure( g, fullRegion ); bodyRegion.height = Math.ceil( bodyHeight[i] ); } if (headerHeight[i] > 0) { - headerBox.markupText = '' + headerText[i]; + let headerStyle = headerBox.getDefaultStyle(); + headerStyle.add( SIZE, headerDefaultSize * headerTextSize / 100.0 ); + headerBox.setDefaultStyle( headerStyle ); + headerBox.markupText = ''; +// headerBox.markupText = '' + headerText[i]; + headerBox.markupText = headerText[i]; headerBox.draw( g, headerRegion ); } if ( storyHeight[i] > 0 ) { - storyBox.markupText = '' + storyText[i]; + let storyStyle = storyBox.getDefaultStyle(); + storyStyle.add( SIZE, storyDefaultSize * storyTextSize / 100.0 ); + storyBox.setDefaultStyle( storyStyle ); + storyBox.markupText = ''; +// storyBox.markupText = '' + storyText[i]; + storyBox.markupText = storyText[i]; storyBox.draw( g, storyRegion ); - -// sheet.paintImage( g, createDarkenedImage( ImageUtils.get('ArkhamHorrorLCG/images/Lines.png') ), + +// sheet.paintImage( g, createDarkenedImage( ImageUtils.get('ArkhamHorrorLCG/images/Lines.png') ), // new Region( storyRegion.x - 18, storyRegion.y, 6, storyRegion.height - 2) ); g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 1.0 ) ); - g.drawLine(storyRegion.x - 15, storyRegion.y + 1, storyRegion.x - 15, storyRegion.y + storyRegion.height - 3); - g.drawLine(storyRegion.x - 12, storyRegion.y + 1, storyRegion.x - 12, storyRegion.y + storyRegion.height - 3); + g.drawLine(storyRegion.x - 15, storyRegion.y - vertLineOffset1*scale, storyRegion.x - 15, storyRegion.y + storyRegion.height - vertLineOffset2*scale); + g.drawLine(storyRegion.x - 12, storyRegion.y - vertLineOffset1*scale, storyRegion.x - 12, storyRegion.y + storyRegion.height - vertLineOffset2*scale); } - + if (bodyHeight[i] > 0) { - bodyBox.markupText = '' + bodyText[i]; + let bodyStyle = bodyBox.getDefaultStyle(); + bodyStyle.add( SIZE, bodyDefaultSize * bodyTextSize / 100.0 ); + bodyBox.setDefaultStyle( bodyStyle ); + bodyBox.markupText = ''; +// bodyBox.markupText = '' + bodyText[i]; + bodyBox.markupText = bodyText[i]; bodyBox.draw( g, bodyRegion ); } - + // update regions (everything is based off of headerRegion.y) - headerRegion.y = bodyRegion.y + bodyRegion.height + ( 2 * scale ); + if ( bodyText[i] && bodyText[i].length > 0 ) { + headerRegion.y = bodyRegion.y + bodyRegion.height + ( 2 * scale ); + } + else { + headerRegion.y = storyRegion.y + storyRegion.height; + } } - - if ( victoryText.length() > 0 ) { + + if ( victoryText.length > 0 ) { + let headerStyle = headerBox.getDefaultStyle(); + headerStyle.add( SIZE, headerDefaultSize * headerTextSize / 100.0 ); + headerBox.setDefaultStyle( headerStyle ); + headerBox.markupText = ''; + headerRegion.height = Math.ceil( victoryHeight * scale ); headerRegion.y += victorySpacing; - - headerBox.markupText = '
' + victoryText + ''; + +// headerBox.markupText = '
' + victoryText + ''; + headerBox.markupText = '
' + victoryText + ''; victoryHeight = headerBox.measure( g, fullRegion ); headerRegion.height = Math.ceil( victoryHeight ); @@ -879,19 +1427,33 @@ function drawIndentedStoryBody( g, diy, sheet, traitsBox, headerBox, storyBox, b } } -function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { +function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text, spacing ) { var faceIndex = sheet.getSheetIndex(); - var AHLCGObject = Eons.namedObjects.AHLCGObject; - var tightness = AHLCGObject.bodyFontTightness; - + + if ( isNaN( spacing ) ) spacing = 100; + + var tightness = AHLCGObject.bodyFontTightness * 1.2 * spacing / 100.0; + if ( AHLCGObject.bodyFamily == 'Times New Roman' ) { - bodyRegion.y -= 2; - tightness = tightness * 1.2; +// bodyRegion.y -= 2; + tightness = tightness * 0.98; +// tightness = tightness * 1.4; + + var bodyStyle = bodyBox.getDefaultStyle(); + bodyStyle.add( WIDTH, 0.96 ); + bodyStyle.add( TRACKING, -0.01 ); + bodyBox.setDefaultStyle( bodyStyle ); } + bodyRegion.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); + while (text.length > 0) { - let startMatch = /
|
|/.exec( text ); +// let startMatch = /
|
|/.exec( text ); + let startMatch = /<(?:section|header)(?:\s+colou?r\s*=\s*[A-Fa-f0-9\.]{6})*>|/.exec( text ); +// let startMatch = /|/.exec( text ); +// let startMatch = /<(?:section|header)(?:\s+colou?r\s*=\s*-?[0-9]+\.?[0-9]*\s*,\s*-?[0-9]+\.?[0-9]*\s*,\s*-?[0-9]+\.?[0-9]*)*>/.exec( text ); +// let startMatch = /<(?:section|header)(?:\s+colou?r\s*=\s*[A-Fa-f0-9\.]{6})*>/.exec( text ); // let startMatch = /||/.exec( text ); let endMatch = null; let matchIndex = -1; @@ -901,40 +1463,50 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { let sectionHeight = 0; let intCupShape = null; let textRegion = new Region( bodyRegion ); - + if ( startMatch ) { let tagMatch = /<([a-zA-Z]+)/.exec( startMatch[0] ); - let colorMatch = /colou?r\s*=\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*,\s*([0-9\.]+)/.exec( startMatch[0] ); + let colorMatch = null; switch ( tagMatch[1] ) { case 'section': + colorMatch = /colou?r\s*=\s*([A-Fa-f0-9\.]{6})/.exec( startMatch[0] ); endMatch = /<\/section>/.exec( text ); - + if ( startMatch.index > 0) { preSpecialText = text.slice( 0, startMatch.index ); - + if ( /\S/.test( preSpecialText ) ) preSpecialText = preSpecialText + ''; - + bodyBox.markupText = preSpecialText; bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * tightness ); sectionHeight = bodyBox.measure( g, bodyRegion ); bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; - + bodyRegion.y += sectionHeight; bodyRegion.height -= sectionHeight; } - if ( endMatch ) { + if ( endMatch ) { specialText = text.slice( startMatch.index, endMatch.index + 10 ); postSpecialText = text.slice( endMatch.index + 10 ); } else { specialText = text.slice( startMatch.index ); } - -// specialText = specialText.replace( //, '
' ); + + specialText = specialText.replace( //, '
' ); + + if ( colorMatch ) { + specialText = specialText.replace( /
/, '
' ); + specialText = specialText.replace( /<\section>/, '<\color><\section>' ); + } + else { + specialText = specialText.replace( /
/, '
' ); + specialText = specialText.replace( /<\section>/, '<\color><\section>' ); + } bodyBox.markupText = specialText; bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'BodySection', '-tightness') + '-tightness') * tightness ); @@ -943,9 +1515,21 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), // new Region( bodyRegion.x, bodyRegion.y + sectionHeight - 2, bodyRegion.width + 2, 6) ); - g.setPaint( new Color( 0.255, 0.353, 0.333 ) ); + if ( colorMatch ) { + let aRgbHex = colorMatch[1].match(/.{1,2}/g); + let aRgb = [ + parseInt(aRgbHex[0], 16), + parseInt(aRgbHex[1], 16), + parseInt(aRgbHex[2], 16) + ]; + + g.setPaint( new Color( aRgb[0]/256.0, aRgb[1]/256.0, aRgb[2]/256.0 ) ); + } + else { + g.setPaint( new Color( 0.255, 0.353, 0.333 ) ); + } g.setStroke( new BasicStroke( 1.0 ) ); g.drawLine(bodyRegion.x, bodyRegion.y + sectionHeight - 1, bodyRegion.x + bodyRegion.width + 2, bodyRegion.y + sectionHeight - 1); g.drawLine(bodyRegion.x, bodyRegion.y + sectionHeight + 3, bodyRegion.x + bodyRegion.width + 2, bodyRegion.y + sectionHeight + 3); @@ -958,25 +1542,26 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { text = postSpecialText; break; case 'header': + colorMatch = /colou?r\s*=\s*([A-Fa-f0-9\.]{6})/.exec( startMatch[0] ); endMatch = /<\/header>/.exec( text ); - + if ( startMatch.index > 0) { preSpecialText = text.slice( 0, startMatch.index ); - + if ( /\S/.test( preSpecialText ) ) preSpecialText = preSpecialText + ''; - + bodyBox.markupText = preSpecialText; bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * tightness ); sectionHeight = bodyBox.measure( g, bodyRegion ); bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; - + bodyRegion.y += sectionHeight; bodyRegion.height -= sectionHeight; } - if ( endMatch ) { + if ( endMatch ) { specialText = text.slice( startMatch.index, endMatch.index + 9 ); postSpecialText = text.slice( endMatch.index + 9 ); } @@ -987,15 +1572,35 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyRegion.y += 8; bodyRegion.height -= 8; -// specialText = specialText.replace( //, '
' ); + specialText = specialText.replace( //, '
' ); + + if (colorMatch) { + specialText = specialText.replace( /
/, '
' ); + specialText = specialText.replace( /<\header>/, '<\color><\header>' ); + } + else { + specialText = specialText.replace( /
/, '
' ); + specialText = specialText.replace( /<\header>/, '<\color><\header>' ); + } + +// var defaultStyle = diy.settings.getTextStyle( 'GuideHeader-style', null ); +// if (colorMatch) { +// var textStyle = defaultStyle; + +// if ( colorMatch ) { +// textStyle.add( COLOR, new Color( Color.HSBtoRGB(colorMatch[1], colorMatch[2], colorMatch[3]) ) ); +// } + +// bodyBox.setStyleForTag( 'header', textStyle ); +// } /* var textStyle = diy.settings.getTextStyle( 'GuideHeader-style', null ); - - if ( colorMatch ) { - textStyle.add( COLOR, new Color( Color.HSBtoRGB(colorMatch[1], colorMatch[2], colorMatch[3]) ) ); + if (colorMatch) { + var textStyle = diy.settings.getTextStyle( 'GuideHeader-style', null ); + var coloredStyle = textStyle; + coloredStyle.add( COLOR, new Color( Color.HSBtoRGB(colorMatch[1], colorMatch[2], colorMatch[3]) )); + bodyBox.setDefaultStyle(coloredStyle); } - - bodyBox.setStyleForTag( 'header', textStyle ); */ bodyBox.markupText = specialText; bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'BodySection', '-tightness') + '-tightness') * tightness ); @@ -1004,6 +1609,11 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; +// if (colorMatch) { +// bodyBox.setDefaultStyle( textStyle ); +// bodyBox.setStyleForTag( 'header', defaultStyle ); +// } + bodyRegion.y += sectionHeight - 12; bodyRegion.height -= (sectionHeight - 12); @@ -1012,6 +1622,8 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { text = postSpecialText; break; default: // + colorMatch = /colou?r\s*=\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*,\s*([0-9\.]+)/.exec( startMatch[0] ); + let res = ( /boxres/.exec( startMatch[0] ) != null ); let sa = ( /boxsa/.exec( startMatch[0] ) != null ); let keybox = ( /boxkey/.exec( startMatch[0] ) != null ); @@ -1024,10 +1636,10 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { if ( colorMatch == null ) { colorMatch = [ 'color', '0.630', '0.48', '0.48' ]; } - + interlude = true; } - + if ( keybox ) { if ( colorMatch == null ) { colorMatch = [ 'color', '0.000', '0.97', '0.55' ]; @@ -1051,10 +1663,10 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { header = false; bracket = false; } - + if ( startMatch.index > 0) { preSpecialText = text.slice( 0, startMatch.index ); - + if ( /\S/.test( preSpecialText ) ) preSpecialText = preSpecialText + '
'; bodyBox.markupText = preSpecialText; @@ -1063,15 +1675,15 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; - + bodyRegion.y += sectionHeight; bodyRegion.height -= sectionHeight; } - if ( endMatch ) { + if ( endMatch ) { // let len = (res || interlude) ? 9 : 8; let len = endMatch[0].length; - + specialText = text.slice( startMatch.index, endMatch.index + len ); postSpecialText = text.slice( endMatch.index + len ); } @@ -1084,19 +1696,34 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { headerHeight = res ? 80 : 47; } - let boxRegion = new Region( bodyRegion.x - 7, bodyRegion.y, bodyRegion.width + 36, bodyRegion.height ); - +// let boxRegion = new Region( bodyRegion.x - 7, bodyRegion.y, bodyRegion.width + 36, bodyRegion.height ); +// matched, but caused text to go beyond right edge +// let boxRegion = new Region( bodyRegion.x - 15, bodyRegion.y, bodyRegion.width + 12, bodyRegion.height ); + let boxRegion = (CardTypes[0] == 'Guide75') ? + new Region( bodyRegion.x - 22, bodyRegion.y, bodyRegion.width + 30, bodyRegion.height ) : // 7.5 + new Region( bodyRegion.x - 15, bodyRegion.y, bodyRegion.width + 30, bodyRegion.height ); // A4 + if ( interlude ) { boxRegion.x += 5; boxRegion.width -= 7; - + bodyRegion.y += 5; bodyRegion.height -= 10; } - // space before header/first text - bodyRegion.x += 34; - bodyRegion.width -= 48; + // space before header/first text, if you change these you must change the -= below +// bodyRegion.x += 34; +// bodyRegion.width -= 48; + + if ( CardTypes[0] == 'Guide75' ) { + bodyRegion.x += 16; + bodyRegion.width -= 48; + } + else { // A4 + bodyRegion.x += 24; + bodyRegion.width -= 48; + } + if ( header ) { bodyRegion.y += 29; bodyRegion.height -= 29; @@ -1105,17 +1732,19 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyRegion.y += 27; bodyRegion.height -= 27; } - + textRegion.x = bodyRegion.x; textRegion.y = bodyRegion.y; textRegion.width = bodyRegion.width; textRegion.height = bodyRegion.height; - + if ( interlude ) { textRegion.width += 5; } + bodyBox.markupText = specialText; + bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * tightness ); sectionHeight = bodyBox.measure( g, textRegion ); if (interlude) { @@ -1132,56 +1761,58 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { let newSectionHeight = bodyBox.measure( g, textRegion ); while (newSectionHeight > sectionHeight) { sectionHeight = newSectionHeight; + bodyBox.setPageShape( new PageShape.CompoundShape( new PageShape.CupShape(24, 24, bodyRegion.y + 12, 0, 0), bodyRegion.y + sectionHeight - 12, new PageShape.InsetShape(inset, inset) ) ); - + textRegion.height = sectionHeight + 2; - newSectionHeight = bodyBox.measure( g, textRegion ); + newSectionHeight = bodyBox.measure( g, textRegion ); } - - // test again if it shrunk again, means with the indents it doesn't fit, but without the indents, + + // test again if it shrunk again, means with the indents it doesn't fit, but without the indents, // it doesn't need the extra line. Shrink the indents. if (newSectionHeight < sectionHeight) { sectionHeight = newSectionHeight; - do { + do { inset -= 4; - + bodyBox.setPageShape( new PageShape.CompoundShape( new PageShape.CupShape(24, 24, bodyRegion.y + 12, 0, 0), bodyRegion.y + sectionHeight - 12, new PageShape.InsetShape(inset, inset) ) ); - + textRegion.height = sectionHeight + 2; newSectionHeight = bodyBox.measure( g, textRegion ); - } while (newSectionHeight > sectionHeight && inset > 0); + } while (newSectionHeight > sectionHeight && inset > 0); } - + sectionHeight = newSectionHeight; + if (interlude && sectionHeight < 60) sectionHeight = 60; textRegion.height = sectionHeight + 2; - + bodyBox.setPageShape( new PageShape.CompoundShape( new PageShape.CupShape(24, 24, bodyRegion.y + 12, 0, 0), bodyRegion.y + sectionHeight - 12, new PageShape.InsetShape(inset, inset) ) ); } - + let boxTopImage = null; let boxBotImage = null; let boxMidImage = null; // Bracket images only used in color let boxTopBracketImage = null; let boxBotBracketImage = null; - + let boxType = 'SA'; if ( res ) boxType = 'Res'; - else if ( interlude ) boxType = 'Int'; + else if ( interlude ) boxType = 'Int'; // colors: // Resolution : 0.019, 0.70, 0.38 // SA : 0.480, 0.58, 0.36 @@ -1194,23 +1825,23 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { if ( colorMatch != null ) { // if ( bracket && !interlude ) boxTopImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Bracket.png'); // else boxTopImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Red.png'); - + // if ( interlude || endMatch == bracket) boxBotImage = boxTopImage; // else if ( endMatch ) boxBotImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Bracket.png'); // else boxBotImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Red.png'); - + // boxMidImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'LineRed.png'); var h = parseFloat(colorMatch[1]); var s = parseFloat(colorMatch[2]); var b = parseFloat(colorMatch[3]); var b2 = b; - + if ( !interlude ) { b2 += 0.3; if ( b2 > 1.0 ) b2 = 1.0; } - + // var tc = new TintCache( new TintFilter() ); var tcBox = null; var tcBracket = null; @@ -1220,7 +1851,7 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { tcBox = AHLCGObject.getIntBoxTint(); tcMid = AHLCGObject.getIntMidTint(); } - else if ( bracket ) { + else if ( bracket ) { tcBox = AHLCGObject.getResBoxTint(); tcBracket = AHLCGObject.getBracketTint(); tcMid = AHLCGObject.getResMidTint(); @@ -1232,11 +1863,11 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { tcMid = AHLCGObject.getResMidTint(); if ( endMatch ) tcBracket = AHLCGObject.getBracketTint(); } - + tcBox.setFactors(h, s, b2); boxTopImage = tcBox.getTintedImage(); boxBotImage = boxTopImage; - + tcMid.setFactors(h, s, b2); boxMidImage = tcMid.getTintedImage(); @@ -1251,16 +1882,16 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { } // else { // boxBotImage = boxTopImage; -// } +// } } else { if ( bracket && !interlude ) boxTopImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Bracket.png'); else boxTopImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + '.png'); - + if ( interlude || endMatch == bracket) boxBotImage = boxTopImage; else if ( endMatch ) boxBotImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Bracket.png'); else boxBotImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + '.png'); - + boxMidImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Box' + boxType + 'Line.png'); } /* @@ -1270,47 +1901,52 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { var gc = color.createGraphics(); gc.setPaint( new Color(1, 1, 1) ); gc.fillRect( 0, 0, color.getWidth(), color.getHeight() ); - + boxTopImage = createStencilImage(color, 'Box'); */ let ar = boxTopImage.height / boxTopImage.width; + let topHeight = Math.round( boxRegion.width * ar ); + let rSectionHeight = Math.round( sectionHeight ); + let rHeaderHeight = Math.round( headerHeight ); - sheet.paintImage( g, boxTopImage, - new Region( boxRegion.x, boxRegion.y, boxRegion.width, boxRegion.width * ar ) ); + sheet.paintImage( g, boxTopImage, + new Region( boxRegion.x, boxRegion.y, boxRegion.width, topHeight ) ); if ( boxTopBracketImage ) { - sheet.paintImage( g, boxTopBracketImage, - new Region( boxRegion.x, boxRegion.y, boxRegion.width, boxRegion.width * ar ) ); + sheet.paintImage( g, boxTopBracketImage, + new Region( boxRegion.x, boxRegion.y, boxRegion.width, topHeight ) ); } - - boxRegion.y += boxRegion.width * ar; - boxRegion.height -= boxRegion.width * ar; - + +// boxRegion.y += boxRegion.width * ar; +// boxRegion.height -= boxRegion.width * ar; + boxRegion.y += topHeight; + boxRegion.height -= topHeight; + let minHeight = 84; if ( interlude ) minHeight = 60; - - if ( sectionHeight + headerHeight > minHeight ) { - sheet.paintImage( g, boxMidImage, - new Region( boxRegion.x, boxRegion.y, boxRegion.width, sectionHeight + headerHeight - minHeight ) ); + + if ( rSectionHeight + rHeaderHeight > minHeight ) { + sheet.paintImage( g, boxMidImage, + new Region( boxRegion.x, boxRegion.y, boxRegion.width, rSectionHeight + rHeaderHeight - minHeight ) ); } - - if ( sectionHeight + headerHeight < minHeight ) sectionHeight = minHeight - headerHeight; - boxRegion.y += sectionHeight + headerHeight; - boxRegion.height -= ( sectionHeight + headerHeight ); + + if ( rSectionHeight + rHeaderHeight < minHeight ) rSectionHeight = minHeight - rHeaderHeight; + boxRegion.y += rSectionHeight + rHeaderHeight; + boxRegion.height -= ( rSectionHeight + rHeaderHeight ); ar = boxBotImage.height / boxBotImage.width; - sheet.paintImage( g, ImageUtils.mirror( boxBotImage, false, true ), - new Region( boxRegion.x, boxRegion.y - minHeight, boxRegion.width, boxRegion.width * ar) ); + sheet.paintImage( g, ImageUtils.mirror( boxBotImage, false, true ), + new Region( boxRegion.x, boxRegion.y - minHeight, boxRegion.width, topHeight )); if ( boxBotBracketImage ) { - sheet.paintImage( g, ImageUtils.mirror( boxBotBracketImage, false, true ), - new Region( boxRegion.x, boxRegion.y - minHeight, boxRegion.width, boxRegion.width * ar) ); + sheet.paintImage( g, ImageUtils.mirror( boxBotBracketImage, false, true ), + new Region( boxRegion.x, boxRegion.y - minHeight, boxRegion.width, topHeight )); } - + // draw header - if ( header ) { + if ( header ) { if ( res ) { - let headerRegion = new Region2D( bodyRegion.x, bodyRegion.y, bodyRegion.width, bodyRegion.height ); -/* + let headerRegion = new Region2D( bodyRegion.x, bodyRegion.y, bodyRegion.width, bodyRegion.height ); +/* var textStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResHeader-style'), null); textStyle.add( COLOR, new Color( 1.0, 1.0, 0.0) ); @@ -1318,20 +1954,20 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { headerBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResHeader-style'), null); headerBox.markupText = #AHLCG-Scenario-Header1; - + let height = headerBox.measure( g, headerRegion ); let width1 = headerBox.drawAsSingleLine( g, headerRegion ) + 4.0; - + headerRegion.y += height; - + headerBox.markupText = '' + #AHLCG-Scenario-Header2 + ''; height += headerBox.measure( g, headerRegion ); let width2 = headerBox.drawAsSingleLine( g, headerRegion ) + 4.0; - + let headerWidth = Math.max( width1, width2 ); - -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), + +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), // new Region( headerRegion.x + (headerRegion.width - headerWidth)/ 2, bodyRegion.y + height, headerWidth, 6) ); // g.setPaint( new Color( 0.282, 0.012, 0.0 ) ); g.setPaint( new Color( 0.388, 0.145, 0.114 ) ); @@ -1346,7 +1982,7 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { let height = headerBox.measure( g, bodyRegion ); let width = headerBox.drawAsSingleLine( g, bodyRegion ) + 4.0; -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/HorizLines.png'), // new Region( bodyRegion.x + (bodyRegion.width - width)/ 2, bodyRegion.y + height - 2, width, 6) ); // g.setPaint( new Color( 0.255, 0.353, 0.333 ) ); g.setPaint( new Color( 0.176, 0.357, 0.345 ) ); @@ -1370,24 +2006,26 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyRegion.y += headerHeight; bodyRegion.height -= headerHeight; } - + textRegion.y = bodyRegion.y; textRegion.height = bodyRegion.height; // draw main box text if ( res ) bodyBox.setStyleForTag( 'boxbullet', diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResBullet-style'), null) ); else bodyBox.setStyleForTag( 'boxbullet', diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'SABullet-style'), null) ); -/* +/* // draw box g.setPaint(Color.blue); g.draw(new Rectangle(bodyRegion.x, bodyRegion.y, bodyRegion.width, bodyRegion.height)); g.setPaint(Color.red); g.draw(new Rectangle(textRegion.x, textRegion.y, textRegion.width, textRegion.height)); -*/ +*/ + bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * tightness ); bodyBox.draw( g, textRegion ); bodyBox.markupText = ''; - bodyRegion.x -= 34; +// bodyRegion.x -= 34; + bodyRegion.x -= 24; bodyRegion.width += 48; // if ( interlude ) bodyRegion.width -= 5; @@ -1396,69 +2034,103 @@ function drawGuideBody( g, diy, sheet, bodyBox, headerBox, bodyRegion, text ) { bodyRegion.height -= (sectionHeight + 55); text = postSpecialText; - + bodyBox.setPageShape(null); break; } } else { bodyBox.markupText = text; + bodyBox.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * tightness ); bodyBox.draw( g, bodyRegion ); bodyBox.markupText = ''; - + text = ''; } } } // header = story/chaos +// this is a nightmare. I'm sorry. function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { var tokenName = [ 'Skull', 'Cultist', 'Tablet', 'ElderThing' ]; var faceIndex = sheet.getSheetIndex(); var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body-region' ) ); + var originalHeight = region.height; + + // if back and no TrackerBoxBack, use the front + var trackerBox = null; + var trackerHeight = 0; + if ( $('TrackerBox' + BindingSuffixes[faceIndex]) ) { + trackerBox = String( $('TrackerBox' + BindingSuffixes[faceIndex]) ); + trackerHeight = $('TrackerHeight' + BindingSuffixes[faceIndex]); + } + + if ( !trackerBox ) { + trackerBox = String( $TrackerBox ); + trackerHeight = $TrackerHeight; + } + +// var trackerBox = String( $TrackerBox ); +// var trackerHeight = $TrackerHeight; + var headerRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'Header-region' ) ); // var trackingHeader = $( 'TrackerBox' + BindingSuffixes[faceIndex] ); var AHLCGObject = Eons.namedObjects.AHLCGObject; + // y is based on how many lines of header + + // difference between the received y and the expected region var difference = y - region.y; + // keep region bottom at the same place, but use the bottom-most of the expected region and the received y if ( difference < 0 ) difference = 0; else { region.y = y; region.height -= difference; } - + if ( headerBox ) { difference = y - headerRegion.y; - if ( $TrackerBox.length == 0 ) difference += 12; + // header box is for special things like Disappearance of Elina Harper; difference is smaller when tracker displayed because we are working to fit everything + if ( trackerBox.length == 0 ) difference += 12; else difference += 2; - + + // add difference, but keep bottom in same place headerRegion.y += difference; headerRegion.height -= difference; headerBox.markupText = $HeaderBack; - + + // Chinese language seems to be making this return 0 in some cases let newY = headerBox.draw( g, headerRegion ); + + if ( newY <= 0 ) { + let hHeight = headerBox.measure( g, headerRegion ); + newY = headerRegion.y + hHeight; + } + let dy = newY - region.y; - if ( $TrackerBox.length == 0 ) difference = 15; + // space after header; again, difference is smaller when tracker displayed because we are working to fit everything + if ( trackerBox.length == 0 ) difference = 15; else difference = 5; - + + // add difference, but keep bottom in same place region.y = newY + difference; region.height -= dy + difference; } - + var iconRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'BodyIcon-region' ) ); - if ( $TrackerBox.length > 0 ) { + // raise bottom if tracker box is active + if ( trackerBox.length > 0 ) { // region.height -= 95; - region.height -= 90; +// region.height -= 90 + region.height -= 90 * trackerHeight / 100.0; } -//g.setPaint(Color.WHITE); -//g.drawRect(region.x, region.y, region.width, region.height); - var tokenRegion = []; var tokenText = []; var tokenHeight = []; @@ -1470,24 +2142,16 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { var minHeight; var minCenterSpacing; var minSpacing; - var maxSpacing; + var scaledSpacing; +// var maxSpacing; var useOffsetPct; - - if ( $TrackerBox.length > 0 ) { - minHeight = [ 48, 100, 152, 204 ]; - minCenterSpacing = [ 115, 82, 68, 52 ]; - minSpacing = 7; - maxSpacing = 62; - useOffsetPct = 0.6; - } - else { - minHeight = [ 48, 100, 152, 204 ]; - minCenterSpacing = [ 115, 102, 85, 65 ]; - minSpacing = 15; - maxSpacing = 62; - useOffsetPct = 0.6; - } - + + // minHeight and minCenterSpacing are based on how many tokens are being displayed (1-4) + minHeight = [ 48, 100, 152, 204 ]; + minCenterSpacing = [ 115, 102, 85, 65 ]; // spaces them out if there aren't a full set + minSpacing = 15; // default spacing between token blocks + useOffsetPct = 0.6; + var index = 0; var mergeIndex = 0; // var startingOffset = 0; @@ -1496,10 +2160,10 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { for ( let i = 0; i < 4; i++ ) { let fieldName = tokenName[i] + BindingSuffixes[faceIndex]; let text = $( fieldName ); - + if ( text.length() <= 0 ) tokenGroup[i] = 15; // invalid } - + // divide into groups for ( let i = 0; i < 4; i++ ) { let fieldName = tokenName[i] + BindingSuffixes[faceIndex]; @@ -1511,14 +2175,14 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { for ( let j = 0; j < 4; j++ ) { if ( merge == tokenName[j] ) { let minGroup = Math.min( tokenGroup[i], tokenGroup[j] ); - + tokenGroup[i] = minGroup; tokenGroup[j] = minGroup; } - } + } } } - + // minimize the group numbers var groupCount = 0; for ( let group = 1; group <= 4; group++ ) { @@ -1526,7 +2190,7 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { for ( let i = group-1; i < 4; i++) { if ( tokenGroup[i] == group ) inGroup++; } - + if (inGroup == 0) { let found = false; for ( let i = 0; i < 4; i++) { @@ -1535,7 +2199,7 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { found = true; } } - + if ( found ) group--; // look at the current index again } else { @@ -1548,26 +2212,26 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { for ( let i = 0; i < 4; i++ ) { if ( tokenGroup[i] > 0 && tokenGroup[i] <= 4 ) numTokens++; } - + // help everything fit - if ( $TrackerBox.length > 0 && numTokens > 3) { + if ( trackerBox.length > 0 && numTokens > 3) { region.y -= 5; - minSpacing = 1; +// minSpacing = 1; } var heightSum = 0; - for ( let i = 1; i <= 4; i++ ) { // group + for ( let i = 1; i <= 4; i++ ) { // group for ( let j = 0; j < 4; j++) { // token if ( tokenGroup[j] == i ) { let fieldName = tokenName[j] + BindingSuffixes[faceIndex]; let text = $( fieldName ); let spacing = $( fieldName + 'Spacing' ); - + // we will print the first defined text string for a grouping if ( text.length() > 0 && tokenText[i-1] == null ) { tokenRegion[i-1] = new Region(region); tokenText[i-1] = text; - + if (spacing != null && spacing.length() > 0) { tokenSpacing[i-1] = parseInt($( fieldName + 'Spacing'), 0); } @@ -1582,14 +2246,14 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { var totalEqualSpacingHeight = 0; var maxEqualCenterSpacing = 0; var firstBlockOffset = 0; - + for (let i = 0; i < groupCount; i++) { // if we don't use a separate box, it draws twice, another thing I don't really understand let Test_box = markupBox(sheet); Test_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(faceIndex, 'Body-style'), null); Test_box.alignment = diy.settings.getTextAlignment(getExpandedKey(faceIndex, 'Body-alignment')); - Test_box.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - Test_box.setTextFitting( FIT_SCALE_TEXT ); + Test_box.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + Test_box.setTextFitting( FIT_SCALE_TEXT ); Test_box.markupText = tokenText[i]; tokenHeight[i] = Test_box.measure( g, tokenRegion[i] ); @@ -1605,18 +2269,33 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { totalHeight += tokenHeight[i]; } - if ( $TrackerBox.length > 0 || headerBox ) firstBlockOffset = 0; + if ( trackerBox.length > 0 || headerBox ) firstBlockOffset = 0; // hmm // calculate the maximum spacing between box centers if ( groupCount > 1 ) { +//g.setPaint(Color.BLUE); +//g.drawRect(region.x-2, region.y, region.width+4, region.height); + // calculate how tall each box should be to fit in region + var fittedCenterSpacing = ((region.height - (tokenHeight[0] + tokenHeight[groupCount-1] ) / 2) / (groupCount-1)); + if ( fittedCenterSpacing < 52 ) fittedCenterSpacing = 52; + for ( let i = 0; i < groupCount-1; i++ ) { - let spacing = (tokenHeight[i] + tokenHeight[i+1]) / 2; - + let spacing = (tokenHeight[i] + tokenHeight[i+1]) / 2; // spacing between centers + if ( spacing > maxEqualCenterSpacing ) maxEqualCenterSpacing = spacing; } if ( maxEqualCenterSpacing < minCenterSpacing[groupCount-1] ) maxEqualCenterSpacing = minCenterSpacing[groupCount-1]; + totalEqualHeight = (maxEqualCenterSpacing + minSpacing)*(groupCount-1) + (tokenHeight[0] + tokenHeight[groupCount-1]) / 2; + + if ( totalEqualHeight > region.height ) { + minSpacing = Math.floor( fittedCenterSpacing / 10 ); + fittedCenterSpacing -= minSpacing - 1; + + maxEqualCenterSpacing = fittedCenterSpacing; + totalEqualHeight = (maxEqualCenterSpacing + minSpacing)*(groupCount-1) + (tokenHeight[0] + tokenHeight[groupCount-1]) / 2; + } } else { maxEqualCenterSpacing = tokenHeight[0]; @@ -1629,26 +2308,32 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { spacingType = 0; totalHeight = totalEqualHeight; - + + // if total height is less than a certain % of the total height, center-ish it vertically (try to match existing cards) if (totalHeight <= region.height*useOffsetPct) region.y += (region.height - totalEqualHeight) * 0.35; } else { - totalHeight += minSpacing * (groupCount-1); + minSpacing = 1; + totalHeight = totalEqualHeight; } - - var scale = 1.0; + + var scale = 1.0; // if rescaling needed, we're going to keep decreasing scale until it fits // just calculating a ratio and using that significantly overestimated the reduction of scale needed + scaledSpacing = minSpacing; + if (region.height < totalHeight) { if ( !headerBox ) { + // give a little more space region.y -= 5; region.height += 5; region.y -= firstBlockOffset; region.height += firstBlockOffset; } + // recalculate heights based on minimum values var minTotalHeight = 0; for ( let i = 0; i < groupCount; i++ ) { minTotalHeight += minHeight[tokensInGroup[i]-1]; @@ -1658,7 +2343,9 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { if ( region.height < minTotalHeight ) { region.height = minTotalHeight; } - +//g.setPaint(Color.RED); +//g.drawRect(region.x-4, region.y, region.width+8, region.height); + do { scale -= 0.05; @@ -1667,8 +2354,8 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { let Test_box = markupBox(sheet); Test_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(faceIndex, 'Body-style'), null); Test_box.alignment = diy.settings.getTextAlignment(getExpandedKey(faceIndex, 'Body-alignment')); - Test_box.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - Test_box.setTextFitting( FIT_SCALE_TEXT ); + Test_box.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + Test_box.setTextFitting( FIT_SCALE_TEXT ); Test_box.markupText = Test_box.markupText = '' + tokenText[i] + ''; tokenHeight[i] = Test_box.measure( g, tokenRegion[i] ); @@ -1677,20 +2364,22 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { totalHeight += tokenHeight[i]; } - - totalHeight += minSpacing * (groupCount-1); + + minSpacing = (region.height - totalHeight) / (groupCount-1); + if (scaledSpacing < minSpacing) scaledSpacing = minSpacing; + totalHeight += scaledSpacing * (groupCount-1); } while (region.height < totalHeight && scale > 0.1); } if (scale > 1) scale = 1; else if (scale < 0.5) scale = 0.5; - + var yOffset; if (spacingType == 0) { yOffset = region.y + (tokenHeight[0]*scale) / 2; - - for (let i = 0; i < groupCount; i++) { + + for (let i = 0; i < groupCount; i++) { yIconMin = 1000; yIconMax = 0; @@ -1699,53 +2388,58 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { if (tokensInGroup[i] > 1) { tokenRegion[i].x += 8; - tokenRegion[i].width -= 8; + tokenRegion[i].width -= 8; } else { tokenRegion[i].x = region.x; tokenRegion[i].width = region.width; } - + if (scale < 1) textBoxes[i].markupText = '' + tokenText[i] + ''; else textBoxes[i].markupText = tokenText[i]; - + //g.setPaint(Color.BLUE); //g.drawRect(tokenRegion[i].x, tokenRegion[i].y, 250, tokenRegion[i].height); modifiedRegion = new Region( tokenRegion[i].x, tokenRegion[i].y, tokenRegion[i].width, tokenRegion[i].height ); + modifiedRegion.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); + +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) modifiedRegion.y -= 2; +//g.setPaint(Color.CYAN); +//g.drawRect(tokenRegion[i].x, tokenRegion[i].y, tokenRegion[i].width, tokenRegion[i].height); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) modifiedRegion.y -= 2; - textBoxes[i].draw( g, modifiedRegion ); let tokenIndex = 0; - for ( let j = 0; j < 4; j++ ) { // token + for ( let j = 0; j < 4; j++ ) { // token if ( tokenGroup[j] == i+1 ) { - let iconY = tokenRegion[i].y + tokenRegion[i].height/2 - iconRegion.height*tokensInGroup[i]/2 + tokenIndex*iconRegion.height + 1; +// let iconY = tokenRegion[i].y + tokenRegion[i].height/2 - iconRegion.height*tokensInGroup[i]/2 + tokenIndex*iconRegion.height + 1; + let iconY = tokenRegion[i].y + tokenRegion[i].height/2 - iconRegion.height*tokensInGroup[i]/2 + tokenIndex*iconRegion.height - 1; if (iconY + 1 < yIconMin) yIconMin = iconY + 1; if (tokenRegion[i].y < yIconMin) yIconMin = tokenRegion[i].y; if (iconY + iconRegion.height - 3 > yIconMax) yIconMax = iconY + iconRegion.height - 3; - if (tokenRegion[i].y + tokenRegion[i].height > yIconMax) yIconMax = tokenRegion[i].y + tokenRegion[i].height; -//g.setPaint(Color.GREEN); + if (tokenRegion[i].y + tokenRegion[i].height > yIconMax) yIconMax = tokenRegion[i].y + tokenRegion[i].height; +//g.setPaint(Color.YELLOW); //g.drawRect(iconRegion.x, iconY, iconRegion.width, iconRegion.height); - sheet.paintImage( g, tokenIcon[j], + sheet.paintImage( g, tokenIcon[j], new Region( iconRegion.x, iconY, iconRegion.width, iconRegion.height ) ); - + tokenIndex++; } } // draw vertical lines if (tokensInGroup[i] > 1) { -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/Lines.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/Lines.png'), // new Region( iconRegion.x + iconRegion.width + 2, yIconMin, 3, yIconMax - yIconMin) ); g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 0.5 ) ); - g.drawLine(iconRegion.x + iconRegion.width + 2, yIconMin + 1, iconRegion.x + iconRegion.width + 2, yIconMax - 1); - g.drawLine(iconRegion.x + iconRegion.width + 4, yIconMin + 1, iconRegion.x + iconRegion.width + 4, yIconMax - 1); + g.drawLine(iconRegion.x + iconRegion.width + 2, yIconMin + 1, iconRegion.x + iconRegion.width + 2, yIconMax - 6); + g.drawLine(iconRegion.x + iconRegion.width + 4, yIconMin + 1, iconRegion.x + iconRegion.width + 4, yIconMax - 6); } - yOffset += minSpacing + maxEqualCenterSpacing*scale; +// yOffset += minSpacing + maxEqualCenterSpacing*scale; + yOffset += scaledSpacing + maxEqualCenterSpacing*scale; } } else { @@ -1757,10 +2451,10 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { tokenRegion[i].y = yOffset; tokenRegion[i].height = tokenHeight[i]; - + if (tokensInGroup[i] > 1) { tokenRegion[i].x += 8; - tokenRegion[i].width -= 8; + tokenRegion[i].width -= 8; } else { tokenRegion[i].x = region.x; @@ -1778,24 +2472,24 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { for ( let j = 0; j < 4; j++ ) { // token if ( tokenGroup[j] == i+1 ) { let iconY = tokenRegion[i].y + tokenRegion[i].height/2 - iconRegion.height*tokensInGroup[i]/2 + tokenIndex*iconRegion.height + 1; - + if (iconY + 1 < yIconMin) yIconMin = iconY + 1; if (tokenRegion[i].y < yIconMin) yIconMin = tokenRegion[i].y; if (iconY + iconRegion.height - 3 > yIconMax) yIconMax = iconY + iconRegion.height - 3; - if (tokenRegion[i].y + tokenRegion[i].height > yIconMax) yIconMax = tokenRegion[i].y + tokenRegion[i].height; + if (tokenRegion[i].y + tokenRegion[i].height > yIconMax) yIconMax = tokenRegion[i].y + tokenRegion[i].height; //g.setPaint(Color.GREEN); //g.drawRect(iconRegion.x, iconY, iconRegion.width, iconRegion.height); - sheet.paintImage( g, tokenIcon[j], + sheet.paintImage( g, tokenIcon[j], new Region( iconRegion.x, iconY, iconRegion.width, iconRegion.height ) ); - + tokenIndex++; } } // draw vertical lines if (tokensInGroup[i] > 1) { -// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/Lines.png'), +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/images/Lines.png'), // new Region( iconRegion.x + iconRegion.width + 2, yIconMin, 3, yIconMax - yIconMin) ); g.setPaint( new Color( 0.0, 0.0, 0.0 ) ); g.setStroke( new BasicStroke( 0.5 ) ); @@ -1808,20 +2502,53 @@ function drawChaosBody( g, diy, sheet, textBoxes, headerBox, y ) { } } -function drawChaosTrackerBox( g, diy, sheet, box ) { +function drawTrackerBox( g, diy, sheet, box ) { var faceIndex = sheet.getSheetIndex(); var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'TrackerBox-region') ); - var image = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-ChaosTrackerBox.png'); - - var w = image.getWidth(); - var h = image.getHeight(); - - sheet.paintImage( g, image, region ); - + + var nameRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'TrackerName-region') ); + nameRegion.y += parseInt(Eons.namedObjects.AHLCGObject.titleFontOffset); + + // if back and no TrackerBoxBack, use the front + var trackerBox = null; + var trackerHeight = 0; + if ( $('TrackerBox' + BindingSuffixes[faceIndex]) ) { + trackerBox = $('TrackerBox' + BindingSuffixes[faceIndex]); + trackerHeight = $('TrackerHeight' + BindingSuffixes[faceIndex]); + } + if ( !trackerBox ) { + trackerBox = $TrackerBox; + trackerHeight = $TrackerHeight; + } + + let diff = region.height * (100.0 - trackerHeight) / 100.0; + region.y += diff; + region.height -= diff; + nameRegion.y += diff; + +// var image = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-ChaosTrackerBox.png'); +// var image = ImageUtils.get('ArkhamHorrorLCG/overlays/TestTracker.png'); + var boxImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-BoxTracker.png'); + var lineImage = ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-BoxTrackerLine.png'); + + var w = boxImage.getWidth(); + var h = boxImage.getHeight(); + +// sheet.paintImage( g, image, region ); + // top section, line expanded, bottom region (same as top, flipped) + sheet.paintImage( g, boxImage, + new Region( region.x, region.y, w, h )); + sheet.paintImage( g, lineImage, + new Region( region.x, region.y + h, w, region.height - h*2 )); + sheet.paintImage( g, ImageUtils.mirror( boxImage, false, true ), + new Region( region.x, region.y + region.height - h, w, h )); + // box.markupText = $( 'TrackerBox' + BindingSuffixes[faceIndex] ); - box.markupText = $TrackerBox; - box.drawAsSingleLine( g, diy.settings.getRegion( getExpandedKey( faceIndex, 'TrackerName-region') ) ); + if ( trackerBox ) { + box.markupText = trackerBox; + box.drawAsSingleLine( g, nameRegion ); + } } function drawScenarioBody( g, diy, sheet, bodyBox ) { @@ -1829,14 +2556,17 @@ function drawScenarioBody( g, diy, sheet, bodyBox ) { var showTitle = false; var region; - + var AHLCGObject = Eons.namedObjects.AHLCGObject; - - bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); - bodyBox.setTextFitting( FIT_SCALE_TEXT ); - var pageType = $( 'PageType' + BindingSuffixes[faceIndex] ); - + bodyBox.setLineTightness( $(getExpandedKey(faceIndex, 'Body', '-tightness') + '-tightness') * AHLCGObject.bodyFontTightness ); + bodyBox.setTextFitting( FIT_SCALE_TEXT ); + + // setting an action listener is hard because the box doesn't exist during layout, this is just easier... + bodyBox.setReplacementForTag('fullnameb', $TitleBack ); + + var pageType = $( 'Template' + BindingSuffixes[faceIndex] ); + if ( pageType == 'Title' ) { if ( faceIndex == FACE_FRONT ) { if ( diy.name != '' ) showTitle = true; @@ -1850,12 +2580,26 @@ function drawScenarioBody( g, diy, sheet, bodyBox ) { } else if ( pageType == 'Resolution' ) { region = diy.settings.getRegion( getExpandedKey( faceIndex, 'BodyResolution-region') ); - } + } else { region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Body-region') ); } - - if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + +// if ( AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + region.y += parseInt(Eons.namedObjects.AHLCGObject.bodyFontOffset); + + // I hate this + if ( CardTypes[faceIndex] == 'StoryChaos' ) { + var title = faceIndex == FACE_FRONT ? diy.name : $TitleBack; + var nlIndex = title.indexOf("\n"); + + if (nlIndex > 0) { + let offset = 24; + + region.y += offset; + region.height -= offset; + } + } bodyBox.markupText = $( 'Rules' + BindingSuffixes[faceIndex] ); @@ -1863,87 +2607,104 @@ function drawScenarioBody( g, diy, sheet, bodyBox ) { bodyBox.draw( g, region ); } -function drawVictory( g, diy, sheet ) { +function drawVictory( g, diy, sheet, victoryBox ) { var faceIndex = sheet.getSheetIndex(); - Victory_box.markupText = '' + $( 'Victory' + BindingSuffixes[faceIndex] ) + ''; - Victory_box.draw( g, diy.settings.getRegion( getExpandedKey( faceIndex, 'Victory-region') ) ); + let victory_text = $( 'Victory' + BindingSuffixes[faceIndex] ); + if (victory_text != '' && victory_text.slice(-1) != '.'){ + victory_text = victory_text + '.'; + } + victoryBox.markupText = '' + victory_text + ''; + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Victory-region') ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.victoryFontOffset); + + victoryBox.draw( g, region ); } -function drawArtist( g, diy, sheet, forceFrontValue ) { +function drawArtist( g, diy, sheet, artistBox, forceFrontValue ) { var faceIndex = sheet.getSheetIndex(); var valueIndex = forceFrontValue ? 0 : faceIndex; - var artistText = $( 'Artist' + BindingSuffixes[valueIndex] ); + var artistText = String( $( 'Artist' + BindingSuffixes[valueIndex] ) ); + if ( artistText == '' && $PortraitShare && $PortraitShare == '1' ) { + artistText = String( $Artist ); + } - if ( artistText.length() > 0 ) { + if ( artistText.length > 0 ) { var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Artist-region' ) ); if ( $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; + region.y += parseInt(Eons.namedObjects.AHLCGObject.collectionFontOffset); - Artist_box.markupText = #AHLCG-IllustratorShort + ' ' + artistText; - Artist_box.drawAsSingleLine( g, region ); + artistBox.markupText = #AHLCG-IllustratorShort + ' ' + artistText; + artistBox.drawAsSingleLine( g, region ); } } -function drawCopyright( g, diy, sheet, collectorX ) { +function drawCopyright( g, diy, sheet, copyrightBox, collectorX ) { var faceIndex = sheet.getSheetIndex(); var copyright = $Copyright; var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Copyright-region' ) ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.collectionFontOffset); if ( $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); - // x = left edge of region, using collectorX - var x = collectorX - region.width; - - // we want the leftmost (if more space is being taken up because of Threads-like numbers) - if (x < region.x) region.x = collectorX - region.width; - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; - Copyright_box.markupText = copyright; - var width = Copyright_box.drawAsSingleLine( g, region ); - + // Please don't ask me why I have to do a markupText += X in order to get the color to change + copyrightBox.markupText = ''; + copyrightBox.markupText += copyright; + var width = copyrightBox.drawAsSingleLine( g, region ); + return region.x - width; } // draws collection, encounter, and copyright info, keeps track of offset because of Threads of Fate style regions -//function drawCollectorInfo( g, diy, sheet, collectionNumber, collectionSuffix, encounterNumber, encounterIcon, artistName ) { -function drawCollectorInfo( g, diy, sheet, collectionNumberBox, collectionSuffix, encounterNumberBox, encounterIcon, copyrightBox, artistBox ) { +function drawCollectorInfo( g, diy, sheet, collectionNumberBox, collectionSuffix, collectionIcon, encounterNumberBox, encounterIcon, copyrightBox, artistBox ) { var faceIndex = sheet.getSheetIndex(); + if ( collectionNumberBox ) collectionNumberBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey( faceIndex, 'CollectionNumber-style'), null); + if ( encounterNumberBox ) encounterNumberBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey( faceIndex, 'EncounterNumber-style'), null); + if ( copyrightBox ) copyrightBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey( faceIndex, 'Copyright-style'), null); + var collectorX = sheet.getTemplateWidth(); - + if ( collectionNumberBox ) { collectorX = drawCollectionNumber( g, diy, sheet, collectionNumberBox, collectionSuffix ); collectorX -= 3; } - collectorX = drawCollectionIcon( g, diy, sheet, collectorX ); - collectorX -= 11; - + if ( collectionIcon ) { + collectorX = drawCollectionIcon( g, diy, sheet, collectorX ); + collectorX -= 11; + } + else { + collectorX -= 21; + } + if ( encounterIcon ) { drawEncounterIcon( g, diy, sheet ); } - + if ( encounterNumberBox ) { collectorX = drawEncounterInfo( g, diy, sheet, encounterNumberBox, collectorX ); collectorX -= 20; } - + if ( copyrightBox ) collectorX = drawCopyright( g, diy, sheet, copyrightBox, collectorX ); - - if ( artistBox ) drawArtist( g, diy, sheet, false ); + + if ( artistBox ) drawArtist( g, diy, sheet, artistBox, false ); } function drawSubtype( g, diy, sheet, box, text ) { var faceIndex = sheet.getSheetIndex(); var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Subtype-region' ) ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; - + region.y += parseInt(Eons.namedObjects.AHLCGObject.typeFontOffset); +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + box.markupText = text.toUpperCase(); box.draw( g, region ); } @@ -1960,7 +2721,7 @@ function drawCost( g, diy, sheet ) { else if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' ) drawDash( g, diy, sheet, costRegion, 0, 0 ); else - drawDash( g, diy, sheet, costRegion, 2, 0 ); + drawDash( g, diy, sheet, costRegion, 2, 0 ); } else if ( cost == 'X' ) { sheet.drawOutlinedTitle( g, cost, costRegion, Eons.namedObjects.AHLCGObject.costFont, 14.0, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); @@ -1973,19 +2734,19 @@ function drawCost( g, diy, sheet ) { function drawLevel( g, diy, sheet, className ) { var faceIndex = sheet.getSheetIndex(); var level = $( 'Level' + BindingSuffixes[faceIndex] ); - + if (level == 'None') { if ( CardTypes[ faceIndex] == 'Skill' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-NoLevelSkill.png'), + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-NoLevelSkill.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'NoLevel-region' ) ) ); } else { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-NoLevel.png'), + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-NoLevel.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'NoLevel-region' ) ) ); } } else if (level > 0) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Level-' + level + '.png'), + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Level-' + level + '.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'Level-region' ) ) ); } } @@ -2000,15 +2761,15 @@ function drawSkillIcons( g, diy, sheet, className ) { let skillName = $( 'Skill' + index + BindingSuffixes[faceIndex] ); if ( skillName != 'None' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillBox-' + getClassInitial( className ) + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Skill' + index + '-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillBox-' + getClassInitial( className ) + '.png'), + diy.settings.getRegion( getExpandedKey( faceIndex, 'Skill' + index + '-region' ) ) ); - if ( className == 'Weakness' || className == 'BasicWeakness' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillIcon-' + getSkillInitial( String(skillName) ) + 'W.png'), + if ( className == 'Weakness' || className == 'BasicWeakness' || className == 'StoryWeakness' ) { + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillIcon-' + getSkillInitial( String(skillName) ) + 'W.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'SkillIcon' + index + '-region') ) ); } else { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillIcon-' + getSkillInitial( String(skillName) ) + '.png'), + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SkillIcon-' + getSkillInitial( String(skillName) ) + '.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'SkillIcon' + index + '-region') ) ); } } @@ -2022,35 +2783,35 @@ function drawSlots( g, diy, sheet ) { var slotName2 = $( 'Slot2' + BindingSuffixes[ faceIndex] ); if (slotName2 != 'None' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName1 + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot2' + '-region' ) ) ); - - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName2 + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName1 + '.png'), + diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot2' + '-region' ) ) ); + + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName2 + '.png'), + diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot-region' ) ) ); } else if (slotName1 != 'None' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName1 + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Slot-' + slotName1 + '.png'), + diy.settings.getRegion( getExpandedKey( faceIndex, 'Slot-region' ) ) ); } } function drawSkills( g, diy, sheet, boxArray, nameArray ) { var faceIndex = sheet.getSheetIndex(); var skillBox; - + for ( let i = 0; i < boxArray.length; i++ ) { skillBox = boxArray[i]; - + // can't make this work without creating a new box // otherwise, you have to edit the text for the color change to happen if ( $CardClass != null && $CardClass.indexOf('Parallel') >= 0) { skillBox = markupBox(sheet); skillBox.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ParallelSkill-style'), null); - skillBox.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); + skillBox.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); } skillBox.markupText = $( nameArray[i] + BindingSuffixes[faceIndex] ); - + skillBox.drawAsSingleLine( g, diy.settings.getRegion( getExpandedKey( faceIndex, nameArray[i] + '-region' ) ) ); } } @@ -2059,21 +2820,194 @@ function drawStamina( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); var stamina = $( 'Stamina' + BindingSuffixes[ faceIndex] ); - - if (stamina != 'None') { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Stamina-' + stamina + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Stamina-region' ) ) ); - } + if ( stamina == 'Star' ) stamina = '*'; + var perInvestigator = $( 'PerInvestigatorStamina' + BindingSuffixes[faceIndex] ); + + var offsetX = { + '-': -1, + 'X': -2, + '': -1, + '*': -2, + '1': -1, + '2': -2, + '3': -2, + '4': -1, + '5': -1, + '6': -1, + '7': -1, + '8': -1, + '9': -1, + '10': -1, + '11': -1, + '12': -1, + '13': -1, + '14': -1, + '15': -1 }; + + var offsetY = { + '-': -5, + '*': 14, + 'X': -4, + '': -1, + '1': -3, + '2': -3, + '3': -3, + '4': -3, + '5': -4, + '6': -4, + '7': -4, + '8': -4, + '9': -4, + '10': -4, + '11': -4, + '12': -4, + '13': -4, + '14': -4, + '15': -4 }; + + if (stamina != 'None') { + let region = diy.settings.getRegion(getExpandedKey(faceIndex, 'Stamina-region')); + sheet.paintImage(g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-StaminaBase.png'), region); + try { + region.x += offsetX[stamina]; + region.y += offsetY[stamina]; + } catch (e) { + region.x += offsetX["X"]; + region.y += offsetY["X"]; + } + + if (stamina == '-') { + sheet.drawOutlinedTitle(g, stamina, region, Eons.namedObjects.AHLCGObject.symbolFont, 9.8, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + } + else if (stamina == '*') { + // Teutonic + sheet.drawOutlinedTitle(g, stamina, region, Eons.namedObjects.AHLCGObject.costFont, 18.5, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + } + else if (perInvestigator == '1') { + let staminaPerInvRegion = diy.settings.getRegion(getExpandedKey(faceIndex, 'StaminaPerInvIcon-region')); + region.x -= 5; + + let fontSize = 14; + let symbolFontSize = 6.5; + + if (stamina == 1) { + region.x -= 1; + staminaPerInvRegion.x -= 4; + } + else if (stamina > 9) { + fontSize = 12; + symbolFontSize = 5.5; + staminaPerInvRegion.x += 4; + } + + sheet.drawOutlinedTitle(g, stamina, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + sheet.drawOutlinedTitle(g, 'p', staminaPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, symbolFontSize, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + } + else if (stamina.length() > 1) { // 10+ + sheet.drawOutlinedTitle(g, stamina, region, Eons.namedObjects.AHLCGObject.enemyFont, 11.5, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + } + else { + sheet.drawOutlinedTitle(g, stamina, region, Eons.namedObjects.AHLCGObject.enemyFont, 14, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.68, 0.12, 0.22), 0, true); + } + } } function drawSanity( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); var sanity = $( 'Sanity' + BindingSuffixes[faceIndex] ); + if ( sanity == 'Star' ) sanity = '*'; + var perInvestigator = $( 'PerInvestigatorSanity' + BindingSuffixes[faceIndex] ); + + var offsetX = { + '-': 0, + 'X': -2, + '': -1, + '*': 0, + '1': -1, + '2': 0, + '3': 0, + '4': -1, + '5': 0, + '6': 0, + '7': 0, + '8': -1, + '9': 0, + '10': 0, + '11': 0, + '12': 0, + '13': 0, + '14': 0, + '15': 0 }; + + var offsetY = { + '-': -7, + 'X': -4, + '': -1, + '*': 12, + '1': -5, + '2': -5, + '3': -5, + '4': -5, + '5': -6, + '6': -6, + '7': -6, + '8': -6, + '9': -6, + '10': -6, + '11': -6, + '12': -6, + '13': -6, + '14': -6, + '15': -6 }; if (sanity != 'None') { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Sanity-' + sanity + '.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'Sanity-region' ) ) ); + let region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Sanity-region' ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-SanityBase.png'), region ); + try { + region.x += offsetX[sanity]; + region.y += offsetY[sanity]; + } catch (e) { + region.x += offsetX["X"]; + region.y += offsetY["X"]; + } + + if ( sanity == '-' ) { + sheet.drawOutlinedTitle( g, sanity, region, Eons.namedObjects.AHLCGObject.symbolFont, 9.8, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + } + else if ( sanity == '*' ) { + // Teutonic + sheet.drawOutlinedTitle( g, sanity, region, Eons.namedObjects.AHLCGObject.costFont, 18.5, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + } + else if (perInvestigator == '1') { + let sanityPerInvRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'SanityPerInvIcon-region' ) ); + region.x -= 5; + + let fontSize = 14; + let symbolFontSize = 6.5; + + if ( sanity == 1 ) { + region.x -= 1; + sanityPerInvRegion.x -= 4; + } + else if ( sanity > 9 ) { + fontSize = 12; + symbolFontSize = 5.5; + sanityPerInvRegion.x += 4; + } + + sheet.drawOutlinedTitle( g, sanity, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + sheet.drawOutlinedTitle( g, 'p', sanityPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, symbolFontSize, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + } + else if ( sanity.length() > 1 ) { // 10+ + sheet.drawOutlinedTitle( g, sanity, region, Eons.namedObjects.AHLCGObject.enemyFont, 11.5, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + } + else { + sheet.drawOutlinedTitle( g, sanity, region, Eons.namedObjects.AHLCGObject.enemyFont, 14, 1.5, new Color(0.996, 0.945, 0.859), new Color(0.25, 0.33, 0.44), 0, true ); + } + +// sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Sanity-' + sanity + '.png'), +// diy.settings.getRegion( getExpandedKey( faceIndex, 'Sanity-region' ) ) ); } } @@ -2083,59 +3017,62 @@ function drawCollectionNumber( g, diy, sheet, collectionNumberBox, drawSuffix ) var collectionNumber = $( 'CollectionNumber' + BindingSuffixes[faceIndex] ); if (collectionNumber == null) collectionNumber = $CollectionNumber; + // Translation project + if ( collectionNumber == '' ) return; + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'CollectionNumber-region' ) ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.collectionFontOffset); if ( $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; collectionNumberBox.markupText = collectionNumber; - + if (drawSuffix) { - if (faceIndex == FACE_FRONT) collectionNumberBox.markupText += 'a'; - else collectionNumberBox.markupText += 'b'; + if (faceIndex == FACE_FRONT) collectionNumberBox.markupText += ($flipSuffix == true ? 'b' : 'a'); + else collectionNumberBox.markupText += ($flipSuffix == true ? 'a' : 'b'); } - + var width = collectionNumberBox.drawAsSingleLine( g, region ); - + return region.x + region.width - width; // return left edge } function drawCollectionIcon( g, diy, sheet, collectorX ) { var faceIndex = sheet.getSheetIndex(); - + var iconName = $Collection; var icon; - let region = diy.settings.getRegion( getExpandedKey( faceIndex, 'DefaultCollection-portrait-clip-region' ), + let region = diy.settings.getRegion( + getExpandedKey( faceIndex, 'DefaultCollection-portrait-clip-region' ), // default - if no DefaultCollection defined, use normal Collection - diy.settings.getRegion( getExpandedKey( faceIndex, 'Collection-portrait-clip-region' ) ) ); + diy.settings.getRegion( getExpandedKey( faceIndex, 'Collection-portrait-clip-region' ) ) + ); + + if ( faceIndex == FACE_FRONT && $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); - if ( faceIndex == FACE_FRONT && $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); - // x = left edge of region, using collectorX var x = collectorX - region.width; - + // we want the leftmost (if more space is being taken up because of Threads-like numbers) - if (x < region.x) region.x = collectorX - region.width; + if (x < region.x) region.x = collectorX - region.width; // resource if ( $CollectionType == '0' ) { - // story collection icons are black - if ( CardTypes[faceIndex] == 'Story' ) icon = ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'); - else icon = createInvertedImage( ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png') ); - - sheet.paintImage( g, icon, region ); - } - // custom - else { - // [0] because that is the type the portrait is reading its setting from - // [1] if it is a Story card, because the front side doesn't have a portrait... this was poorly planned - let typeIndex = 0; - if ( CardTypes[0] == 'Story' ) typeIndex = 1; - - diy.settings.setRegion( 'AHLCG-' + CardTypes[typeIndex] + '-Collection-portrait-clip-region', region ); - PortraitList[getPortraitIndex( 'Collection' )].paint( g, sheet.getRenderTarget() ); + if ( CardTypes[faceIndex] == 'Story' ) { + icon = ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'); + } else { + icon = createInvertedImage( ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png') ); + } + sheet.paintImage( g, icon, region ); + } else { + icon = PortraitList[getPortraitIndex('Collection')].getImage(); + if (CardTypes[faceIndex] != 'Story'){ + icon = createInvertedImage(icon); + } + sheet.paintImage( g, icon, region); } - + return region.x; } @@ -2150,25 +3087,26 @@ function drawEncounterInfo( g, diy, sheet, encounterInfoBox, collectorX ) { if ( encounterNumber == '' && encounterTotal == '' ) return 0; -//? var faceIndex = sheet.getSheetIndex(); - var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'EncounterNumber-region' ) ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.collectionFontOffset); - if ( $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); + if ( $Orientation == 'Reversed' ) region = shiftRegion( region, CardTypes[faceIndex] ); // x = left edge of region, using collectorX var x = collectorX - region.width; // we want the leftmost (if more space is being taken up because of Threads-like numbers) - if (x < region.x) region.x = collectorX - region.width; + if (x < region.x) region.x = collectorX - region.width; - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 1; + // Please don't ask me why I have to do a markupText += X in order to get the color to change + encounterInfoBox.markupText = encounterNumber; if ( Eons.namedObjects.AHLCGObject.OS == 'Mac' ) { - encounterInfoBox.markupText = encounterNumber + '\u200a/\u200a' + encounterTotal; + encounterInfoBox.markupText += '\u200a/\u200a' + encounterTotal; } else { - encounterInfoBox.markupText = encounterNumber + ' / ' + encounterTotal; + encounterInfoBox.markupText += ' / ' + encounterTotal; } var width = encounterInfoBox.drawAsSingleLine( g, region ); @@ -2178,66 +3116,77 @@ function drawEncounterInfo( g, diy, sheet, encounterInfoBox, collectorX ) { function drawEncounterIcon( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); - + var iconName = $Encounter; var returnSet = false; - + + // To prevent issues with changing icon locations across card types, we reset this one to the default + // before doing the below manipulations. This is only required for custom icons on events, but never hurt. + diy.settings.reset('AHLCG-' + CardTypes[0] + '-Encounter-portrait-clip-region'); + diy.settings.reset('AHLCG-' + CardTypes[0] + '-ReturnEncounter-portrait-clip-region'); + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'DefaultEncounter-portrait-clip-region' ), // default - if no DefaultEncounter defined, use normal Encounter diy.settings.getRegion( getExpandedKey( faceIndex, 'Encounter-portrait-clip-region' ) ) ); - + if ( faceIndex == FACE_FRONT && $Orientation == 'Reversed' ) { region = reverseRegion( region ); -// region.x += 1; } - + if ( iconName.substring(0, 6) == 'Return') { region = diy.settings.getRegion( getExpandedKey( faceIndex, 'DefaultReturnEncounter-portrait-clip-region' ), // default - if no DefaultReturnEncounter defined, use normal ReturnEncounter diy.settings.getRegion( getExpandedKey( faceIndex, 'ReturnEncounter-portrait-clip-region' ) ) ); - + if ( faceIndex == FACE_FRONT && $Orientation == 'Reversed' ) { region = reverseRegion( region ); } // special draw, doesn't use Return icon, fills space and removes the original icon - if ( CardTypes[faceIndex] == 'Enemy' || CardTypes[faceIndex] == 'WeaknessEnemy' || + if ( CardTypes[faceIndex] == 'Enemy' || CardTypes[faceIndex] == 'WeaknessEnemy' || CardTypes[faceIndex] == 'Location' || CardTypes[faceIndex] == 'LocationBack' || CardTypes[faceIndex] == 'Treachery' || CardTypes[faceIndex] == 'WeaknessTreachery' ) { - + returnSet = true; iconName = iconName.substring(8); - + if ( iconName == 'ExtracurricularActivities' ) iconName = 'ExtracurricularActivity'; - + + if ( iconName == 'TheRainforest' ) + iconName = 'Rainforest'; + // resource if ( $EncounterType == '0' ) { - sheet.paintImage( g, createReturnToImage( ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png') ), region ); + sheet.paintImage( g, createReturnToImage( ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png') ), region ); } // custom else { - // [0] because that is the type the portrait is reading its setting from -// diy.settings.setRegion( 'AHLCG-' + CardTypes[0] + '-Encounter-portrait-clip-region', region ); -// PortraitList[getPortraitIndex( 'Encounter' )].paint( g, sheet.getRenderTarget() ); - -// sheet.paintImage( g, createReturnToImage( PortraitList[getPortraitIndex( 'Encounter' )].getImage() ), region ); + sheet.paintImage( g, createReturnToImage( PortraitList[getPortraitIndex( 'Encounter' )].getImage() ), region ); } } else { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'), region ); + let icon = ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'); + sheet.paintImage( g, icon, region ); } - } - else { + } else { // resource if ( $EncounterType == '0' ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'), region ); + let icon = ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + iconName + '.png'); + + if (CardTypes[faceIndex] == 'Ultimatum'){ + icon = createInvertedImage(icon); + } + + sheet.paintImage( g, icon, region ); } // custom else { + // using this way even though a bit convoluted because it allows the scale and other settings in the SE interface to function properly // [0] because that is the type the portrait is reading its setting from diy.settings.setRegion( 'AHLCG-' + CardTypes[0] + '-Encounter-portrait-clip-region', region ); - PortraitList[getPortraitIndex( 'Encounter' )].paint( g, sheet.getRenderTarget() ); + let portrait = PortraitList[getPortraitIndex('Encounter')]; + portrait.paint( g, sheet.getRenderTarget() ); } } } @@ -2245,14 +3194,19 @@ function drawEncounterIcon( g, diy, sheet ) { function drawBasicWeaknessIcon( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-BasicWeakness.png'), + if ( useReplacementTemplate( faceIndex )) return; + + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-BasicWeakness.png'), diy.settings.getRegion( getExpandedKey( faceIndex, 'BasicWeaknessIcon-region' ) ) ); } function drawOverlay( g, diy, sheet, overlayName ) { var faceIndex = sheet.getSheetIndex(); - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-' + overlayName + '.png'), + // currently drawOverlay is only for weakness icons + if ( useReplacementTemplate( faceIndex )) return; + + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-' + overlayName + '.png'), diy.settings.getRegion( getExpandedKey( faceIndex, overlayName + '-region' ) ) ); } @@ -2262,16 +3216,77 @@ function drawEnemyStats( g, diy, sheet, statNames ) { for (let i = 0; i < statNames.length; i++) { let stat = statNames[i]; let statValue = $( stat + BindingSuffixes[faceIndex] ); - + let perInvestigator = $( 'PerInvestigator' + stat + BindingSuffixes[faceIndex] ); let statRegion = diy.settings.getRegion( getExpandedKey(faceIndex, stat + '-region' ) ); - + if ( statValue == '-' ) { statRegion.y += 6.0; - - sheet.drawOutlinedTitle( g, '\u2014', statRegion, Eons.namedObjects.AHLCGObject.costFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + + sheet.drawOutlinedTitle( g, '\u2014', statRegion, Eons.namedObjects.AHLCGObject.costFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); } - else - sheet.drawOutlinedTitle( g, statValue, statRegion, Eons.namedObjects.AHLCGObject.enemyFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + else if (perInvestigator == '1') { + let statRegion = diy.settings.getRegion( getExpandedKey(faceIndex, stat + 'PerInv-region' ) ); + let statPerInvRegion = diy.settings.getRegion( getExpandedKey(faceIndex, stat + 'PerInvIcon-region' ) ); + + let fontSize = 11.5; + let symbolFontSize = 5.5; + +// if ( statValue == 'X' ) { +// statRegion.x += 2; +// statPerInvRegion.x += 2; +// } + if ( statValue == 1 ) { + statRegion.x -= 1; + statPerInvRegion.x -= 4; + + } + else if ( statValue > 9 ) { + fontSize = 10.5; + symbolFontSize = 5.0; + statPerInvRegion.x += 4; + } + + sheet.drawOutlinedTitle( g, statValue, statRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + sheet.drawOutlinedTitle( g, 'p', statPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, symbolFontSize, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + } + else { + sheet.drawOutlinedTitle( g, statValue, statRegion, Eons.namedObjects.AHLCGObject.enemyFont, 11.0, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + } + } +} + +function drawEnemyLocationHealth( g, diy, sheet ) { + var faceIndex = sheet.getSheetIndex(); + var perInvestigator = $( 'PerInvestigatorHealth' + BindingSuffixes[faceIndex] ); + var health = $( 'Health' + BindingSuffixes[faceIndex] ); + + if ( health == '-' ) { + let healthRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInv-region' ) ); + healthRegion.x += 5.0; + healthRegion.y += 6.0; + + sheet.drawOutlinedTitle( g, '\u2014', healthRegion, Eons.namedObjects.AHLCGObject.costFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + } + else if (perInvestigator == '1') { + let healthRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInv-region' ) ); + let healthPerInvRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInvIcon-region' ) ); + let fontSize = 13.5; + + if ( health == 'X' ) { + healthRegion.x += 2; + healthPerInvRegion.x += 2; + } + + if ( health > 9 ) { + fontSize = 13.0; + healthPerInvRegion.x += 4; + } + + sheet.drawOutlinedTitle( g, health, healthRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + sheet.drawOutlinedTitle( g, 'p', healthPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, 6.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + } + else { + sheet.drawOutlinedTitle( g, health, diy.settings.getRegion( getExpandedKey(faceIndex, 'Health-region' ) ), Eons.namedObjects.AHLCGObject.enemyFont, 13.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); } } @@ -2279,36 +3294,35 @@ function drawEnemyHealth( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); var perInvestigator = $( 'PerInvestigator' + BindingSuffixes[faceIndex] ); var health = $( 'Health' + BindingSuffixes[faceIndex] ); - + if ( health == '-' ) { let healthRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInv-region' ) ); healthRegion.x += 5.0; healthRegion.y += 6.0; - - sheet.drawOutlinedTitle( g, '\u2014', healthRegion, Eons.namedObjects.AHLCGObject.costFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + + sheet.drawOutlinedTitle( g, '\u2014', healthRegion, Eons.namedObjects.AHLCGObject.costFont, 11.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); } else if (perInvestigator == '1') { let healthRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInv-region' ) ); - let healthPerInvRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'PerInv-region' ) ); + let healthPerInvRegion = diy.settings.getRegion( getExpandedKey(faceIndex, 'HealthPerInvIcon-region' ) ); let fontSize = 13.5; - + if ( health == 'X' ) { healthRegion.x += 2; healthPerInvRegion.x += 2; } - + if ( health > 9 ) { fontSize = 13.0; healthPerInvRegion.x += 4; } - - sheet.drawOutlinedTitle( g, health, healthRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); -// sheet.drawOutlinedTitle( g, 'p', healthPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, 6.0, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + + sheet.drawOutlinedTitle( g, health, healthRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); sheet.drawOutlinedTitle( g, 'p', healthPerInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, 6.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); } else { - sheet.drawOutlinedTitle( g, health, diy.settings.getRegion( getExpandedKey(faceIndex, 'Health-region' ) ), Eons.namedObjects.AHLCGObject.enemyFont, 13.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); - } + sheet.drawOutlinedTitle( g, health, diy.settings.getRegion( getExpandedKey(faceIndex, 'Health-region' ) ), Eons.namedObjects.AHLCGObject.enemyFont, 13.5, 0.8, new Color(1, 1, 1), new Color(0, 0, 0), 0, true ); + } } function drawDamage( g, diy, sheet ) { @@ -2317,8 +3331,8 @@ function drawDamage( g, diy, sheet ) { var damage = $( 'Damage' + BindingSuffixes[faceIndex] ); for ( let i = 1; i <= damage; i++ ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Damage.png'), - diy.settings.getRegion( getExpandedKey(faceIndex, 'Damage' + i + '-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Damage.png'), + diy.settings.getRegion( getExpandedKey(faceIndex, 'Damage' + i + '-region' ) ) ); } } @@ -2328,19 +3342,19 @@ function drawHorror( g, diy, sheet ) { var horror = $( 'Horror' + BindingSuffixes[faceIndex] ); for ( let i = 1; i <= horror; i++ ) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Horror.png'), - diy.settings.getRegion( getExpandedKey(faceIndex, 'Horror' + i + '-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Horror.png'), + diy.settings.getRegion( getExpandedKey(faceIndex, 'Horror' + i + '-region' ) ) ); } } function drawLocationIcon( g, diy, sheet, locationIconName, drawBaseCircle ) -{ +{ var faceIndex = sheet.getSheetIndex(); var AHLCGObject = Eons.namedObjects.AHLCGObject; - + if (drawBaseCircle) { - sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-LocationCircle.png'), - diy.settings.getRegion( getExpandedKey( faceIndex, 'BaseIcon-region' ) ) ); + sheet.paintImage( g, ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-LocationCircle.png'), + diy.settings.getRegion( getExpandedKey( faceIndex, 'BaseIcon-region' ) ) ); } var region = diy.settings.getRegion( getExpandedKey( faceIndex, locationIconName + '-region' ) ); @@ -2349,7 +3363,7 @@ function drawLocationIcon( g, diy, sheet, locationIconName, drawBaseCircle ) if ( locationIcon == 'Copy front' ) locationIcon = $( locationIconName ); - if ( locationIcon != 'None' && locationIcon != 'Empty' ) { + if ( locationIcon != 'None' && locationIcon != 'Empty' && locationIcon != null) { var index = AHLCGObject.locationIcons.indexOf( locationIcon ); var icon_tinter = new TintCache( new TintFilter(), Eons.namedObjects.AHLCGObject.baseLocationIcon ); @@ -2367,67 +3381,141 @@ function drawLocationIcon( g, diy, sheet, locationIconName, drawBaseCircle ) function drawShroud( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); + var piIconSize = 7.5; - var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Shroud-region' ) ); + var lightColor = new Color(0.996, 0.945, 0.859); + var darkColor = new Color(0, 0, 0); + + var textColor = lightColor; + var borderColor = darkColor; + + var perInvestigator = $( 'ShroudPerInvestigator' + BindingSuffixes[faceIndex] ); var shroud = $( 'Shroud' + BindingSuffixes[faceIndex] ); - + + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Shroud-region' ) ); + + if ( Number.isInteger( shroud ) && shroud > 9 ) { // is possible?? + piIconSize = 7.0; + } + if ( shroud == 1 || shroud == 4 ) { region.x -= 2; } - - sheet.drawOutlinedTitle( g, $( 'Shroud' + BindingSuffixes[faceIndex] ), region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, new Color(0.996, 0.945, 0.859 ), new Color(0, 0, 0), 0, true ); + else if ( shroud == 'X' ) region.x -= 1; + + + if ( shroud == '-' ) { + sheet.drawOutlinedTitle( g, shroud, region, Eons.namedObjects.AHLCGObject.symbolFont, 12.0, 1.5, textColor, borderColor, 0, true ); + } + else if ( perInvestigator == '1' ) { + var perInvShroudRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'ShroudPerInv-region' ) ); + var perInvRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'ShroudPerInvIcon-region' ) ); + + if ( Number.isInteger( shroud ) && shroud > 9 ) { + perInvRegion.x += 1; + } + if ( Number.isInteger( shroud ) && shroud > 19 ) { + perInvShroudRegion.x += 1; + perInvRegion.x += 3; + } + + let fontSize = 14.0; + + if ( shroud == 'X' ) { + perInvShroudRegion.x += 3; + perInvRegion.x += 3; + } + else if ( shroud == 1 ) { + perInvRegion.x -= 4; + } + else if ( shroud.length() > 1 ) { + perInvRegion.x += 2; + fontSize = 11.0; + } + + if ( shroud == 'Star' ) { + perInvShroudRegion.x += 1; + perInvShroudRegion.y += 2; + perInvRegion.x -= 2; + sheet.drawOutlinedTitle( g, '*', perInvShroudRegion, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + sheet.drawOutlinedTitle( g, shroud, perInvShroudRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + } + sheet.drawOutlinedTitle( g, 'p', perInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, piIconSize, 0.8, textColor, borderColor, 0, true ); + } + else { + if ( shroud == 'Star' ) { + region.y += 2; + sheet.drawOutlinedTitle( g, '*', region, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + sheet.drawOutlinedTitle( g, shroud, region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, textColor, borderColor, 0, true ); + } + } + +// sheet.drawOutlinedTitle( g, $( 'Shroud' + BindingSuffixes[faceIndex] ), region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, lightColor, darkColor, 0, true ); } function drawClues( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); // var piIconSize = 5.0; var piIconSize = 7.5; - + // 254, 241, 219 var lightColor = new Color(0.996, 0.945, 0.859); var darkColor = new Color(0, 0, 0); - + var textColor; var borderColor; - + var perInvestigator = $( 'PerInvestigator' + BindingSuffixes[faceIndex] ); var asterisk = $( 'Asterisk' + BindingSuffixes[faceIndex] ); var clues = $( 'Clues' + BindingSuffixes[faceIndex] ); - if (CardTypes[faceIndex] == 'Act') { - if ( clues > 9 ) { - piIconSize = 6.0; + if ( CardTypes[faceIndex] == 'Act' ) { + if ( Number.isInteger( clues ) && clues > 9 ) { + piIconSize = 5.5; } else { - piIconSize = 6.5; + piIconSize = 6.0; } - + textColor = lightColor; borderColor = darkColor; } else { - if ( clues > 9 ) { + if ( Number.isInteger( clues ) && clues > 9 ) { piIconSize = 7.0; } - + textColor = darkColor; borderColor = lightColor; } - + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Clues-region' ) ); if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); if ( clues == '-' ) { drawDash( g, diy, sheet, region, 0, 6 ); +// sheet.drawOutlinedTitle( g, clues, region, Eons.namedObjects.AHLCGObject.symbolFont, 12.0, 1.5, textColor, borderColor, 0, true ); } else if ( perInvestigator == '1' ) { var perInvCluesRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'CluesPerInv-region' ) ); - var perInvRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'PerInv-region' ) ); + var perInvRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'CluesPerInvIcon-region' ) ); + + if ( Number.isInteger( clues ) && clues > 9 ) { + perInvRegion.x += 1; + } + if ( Number.isInteger( clues ) && clues > 19 ) { + perInvCluesRegion.x += 1; + perInvRegion.x += 3; + } if ( $Orientation == 'Reversed' ) { perInvCluesRegion = reverseRegion( perInvCluesRegion ); perInvRegion = reverseRegion( perInvRegion ); - + // flip positions perInvCluesRegion.x = region.x + ( (region.x + region.width) - (perInvCluesRegion.x + perInvCluesRegion.width) ); perInvRegion.x = region.x + ( (region.x + region.width) - (perInvRegion.x + perInvRegion.width) ); @@ -2443,67 +3531,98 @@ function drawClues( g, diy, sheet ) { perInvRegion.x -= 4; } else if ( clues.length() > 1 ) { - perInvRegion.x += 1; + perInvRegion.x += 2; fontSize = 11.0; - } + } - sheet.drawOutlinedTitle( g, clues, perInvCluesRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + if ( clues == 'Star' ) { + perInvCluesRegion.x += 1; + perInvCluesRegion.y += 2; + perInvRegion.x -= 2; + sheet.drawOutlinedTitle( g, '*', perInvCluesRegion, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + sheet.drawOutlinedTitle( g, clues, perInvCluesRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + } sheet.drawOutlinedTitle( g, 'p', perInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, piIconSize, 0.8, textColor, borderColor, 0, true ); } else if ( asterisk == '1' ) { let fontSize = 14.0; let regionXOffset = 7; let regionYOffset = 7; - - if ( clues == 1 ) { + + if (clues == 'Star') { regionXOffset = 4; } - if ( clues.length() > 1 ) { + else if ( Number.isInteger(clues) && clues == 1 ) { + regionXOffset = 4; + } + else if ( clues.length() > 1 ) { region.x -= 1; regionXOffset = 6; regionYOffset = 7; fontSize = 13.0; } - region.x -= 4; - sheet.drawOutlinedTitle( g, clues, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); - + if ( clues == 'Star' ) { + region.x -= 4; + region.y += 2; + sheet.drawOutlinedTitle( g, '*', region, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + region.x -= 4; + sheet.drawOutlinedTitle( g, clues, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + } + let asteriskFont = new Font( Eons.namedObjects.AHLCGObject.bodyFamily, Font.ITALIC, 12.0 ); - region.x += regionXOffset + g.getFontMetrics(asteriskFont).stringWidth(clues); + region.x += regionXOffset; region.y += regionYOffset; + + if ( clues == 'Star' ) { + region.x += 6; + } + else { + region.x += g.getFontMetrics(asteriskFont).stringWidth(clues); + } sheet.drawOutlinedTitle( g, '*', region, asteriskFont, 12.0, 0.8, textColor, borderColor, 0, true ); } else { - sheet.drawOutlinedTitle( g, clues, region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, textColor, borderColor, 0, true ); - } + if ( clues == 'Star' ) { + region.y += 2; + sheet.drawOutlinedTitle( g, '*', region, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + sheet.drawOutlinedTitle( g, clues, region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, textColor, borderColor, 0, true ); + } + } } function drawDoom( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); - + var perInvestigator = $( 'PerInvestigator' + BindingSuffixes[faceIndex] ); var asterisk = $( 'Asterisk' + BindingSuffixes[faceIndex] ); var doom = $( 'Doom' + BindingSuffixes[faceIndex] ); - + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Doom-region' ) ); if ( $Orientation == 'Reversed' ) region = reverseRegion( region ); - + var textColor = new Color(0.996, 0.945, 0.859); var borderColor = new Color(0, 0, 0); var piIconSize = 6.5; - if ( doom == '-' ) { + if ( doom == '-' ) { drawDash( g, diy, sheet, region, 0, 6 ); } else if (perInvestigator == '1') { let perInvDoomRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'DoomPerInv-region' ) ); - let perInvRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'PerInv-region' ) ); + let perInvRegion = diy.settings.getRegion( getExpandedKey( faceIndex, 'DoomPerInvIcon-region' ) ); if ( $Orientation == 'Reversed' ) { perInvDoomRegion = reverseRegion( perInvDoomRegion ); perInvRegion = reverseRegion( perInvRegion ); - + // flip positions perInvDoomRegion.x = region.x + ( (region.x + region.width) - (perInvDoomRegion.x + perInvDoomRegion.width) ); perInvRegion.x = region.x + ( (region.x + region.width) - (perInvRegion.x + perInvRegion.width) ); @@ -2518,68 +3637,104 @@ function drawDoom( g, diy, sheet ) { piIconSize = 6.0; } - sheet.drawOutlinedTitle( g, doom, perInvDoomRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + if ( doom == 'Star' ) { + perInvDoomRegion.x += 1; + perInvDoomRegion.y += 2; + perInvRegion.x -= 3; + sheet.drawOutlinedTitle( g, '*', perInvDoomRegion, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + sheet.drawOutlinedTitle( g, doom, perInvDoomRegion, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + } sheet.drawOutlinedTitle( g, 'p', perInvRegion, Eons.namedObjects.AHLCGObject.symbolFont, piIconSize, 0.8, textColor, borderColor, 0, true ); } else if ( asterisk == '1' ) { let fontSize = 14.0; let regionXOffset = 7; let regionYOffset = 7; - - if ( doom == 1 ) { + + if ( doom == 'Star' ) { regionXOffset = 4; } - if ( doom.length() > 1 ) { + else if ( Number.isInteger(doom) && doom == 1 ) { + regionXOffset = 4; + } + else if ( doom.length() > 1 ) { region.x -= 1; regionXOffset = 7; regionYOffset = 7; fontSize = 13.0; } - region.x -= 4; - sheet.drawOutlinedTitle( g, doom, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); - + if ( doom == 'Star' ) { + region.x -= 4; + region.y += 2; + sheet.drawOutlinedTitle( g, '*', region, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + region.x -= 4; + sheet.drawOutlinedTitle( g, doom, region, Eons.namedObjects.AHLCGObject.enemyFont, fontSize, 0.8, textColor, borderColor, 0, true ); + } + let asteriskFont = new Font( Eons.namedObjects.AHLCGObject.bodyFamily, Font.ITALIC, 12.0 ); - region.x += regionXOffset + g.getFontMetrics(asteriskFont).stringWidth(doom); + region.x += regionXOffset; region.y += regionYOffset; + + if ( doom == 'Star' ) { + region.x += 6; + } + else { + region.x += g.getFontMetrics(asteriskFont).stringWidth(doom); + } + sheet.drawOutlinedTitle( g, '*', region, asteriskFont, 12.0, 0.8, textColor, borderColor, 0, true ); } - else { - if ( $Orientation == 'Reversed' ) { - region.x -= 1; - } - - sheet.drawOutlinedTitle( g, doom, region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, new Color(0.996, 0.945, 0.859), new Color(0, 0, 0), 0, true ); + else { + if ( doom == 'Star' ) { + region.y += 2; + sheet.drawOutlinedTitle( g, '*', region, Eons.namedObjects.AHLCGObject.chaosFont, 12.0, 0.8, textColor, borderColor, 0, true ); + } + else { + if ( $Orientation == 'Reversed' ) { + region.x -= 1; + } + + sheet.drawOutlinedTitle( g, doom, region, Eons.namedObjects.AHLCGObject.enemyFont, 14.0, 0.8, new Color(0.996, 0.945, 0.859), new Color(0, 0, 0), 0, true ); + } } } +// for scenario index text, any space has to be in the string from game properties text file function drawScenarioIndexFront( g, diy, sheet, typeText, textBox ) { var faceIndex = sheet.getSheetIndex(); - var text = typeText + ' ' + $ScenarioIndex; var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'ScenarioIndex-region' ) ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + region.y += parseInt(Eons.namedObjects.AHLCGObject.typeFontOffset); +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; if ( $Orientation == 'Reversed' ) { region = reverseRegion( region ); region.x -= 1; } - text = text + $ScenarioDeckID; - + var text = typeText + ' ' + $ScenarioIndex; + text = text + $ScenarioDeckID + ''; + textBox.markupText = text; textBox.drawAsSingleLine( g, region ); } function drawScenarioIndexBack( g, diy, sheet, typeText, textBox ) { var faceIndex = sheet.getSheetIndex(); - var text = $ScenarioIndex; - var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'ScenarioIndex-region' ) ); - if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'BackScenarioIndex-region' ) ); + region.y += parseInt(Eons.namedObjects.AHLCGObject.typeFontOffset); +// if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) region.y -= 2; + + var text = typeText.toUpperCase() + ' ' + $ScenarioIndex; + text = text + String.fromCharCode( $ScenarioDeckID.charCodeAt(0) + 1 ) + ''; - text = typeText.toUpperCase() + ' ' + $ScenarioIndex + String.fromCharCode( $ScenarioDeckID.charCodeAt(0) + 1 ); textBox.markupText = ''; textBox.markupText = text; var height = textBox.measure(g, region); @@ -2587,23 +3742,23 @@ function drawScenarioIndexBack( g, diy, sheet, typeText, textBox ) { if ( height < 15 ) { // fits on one line textBox.markupText = text; - textBox.draw( g, region ); + textBox.drawAsSingleLine( g, region ); } else { var lineHeight = region.height / 2; - + // first line region.height -= lineHeight; - - text = $ScenarioIndex + String.fromCharCode( $ScenarioDeckID.charCodeAt(0) + 1 ); - + + text = '' + $ScenarioIndex + String.fromCharCode( $ScenarioDeckID.charCodeAt(0) + 1 ) + ''; + textBox.markupText = typeText.toUpperCase(); textBox.drawAsSingleLine( g, region ); // second line region.y += lineHeight; - textBox.markupText = text; + textBox.markupText = '' + text; textBox.drawAsSingleLine( g, region ); } } @@ -2621,13 +3776,14 @@ function drawDash( g, diy, sheet, region, offsetX, offsetY ) { region.height = 10; var hsb = diy.settings.getTint( getExpandedKey( faceIndex, 'Dash-tint' ) ); - - var dashImage = ImageUtils.get( 'ArkhamHorrorLCG/numbers/AHLCG-Cost--.png', true ); - var filter = new ca.cgjennings.graphics.filters.TintFilter( hsb[0], hsb[1], hsb[2] ); - + var dashImage = hsb[2] >= 0 ? ImageUtils.get( 'ArkhamHorrorLCG/numbers/AHLCG-Cost--.png', true ) : + ImageUtils.get( 'ArkhamHorrorLCG/numbers/AHLCG-Cost--Inverted.png', true ); + + var filter = new ca.cgjennings.graphics.filters.TintFilter( hsb[0], hsb[1], Math.abs(hsb[2]) ); + dashImage = filter.filter( dashImage, null ); - + sheet.paintImage(g, dashImage, region ); } @@ -2636,18 +3792,20 @@ function drawPageNumber ( g, diy, sheet, pageBox ) { var pageNumber = $( 'Page' + BindingSuffixes[faceIndex] ); var region; - + if ( Number($Page) % 2 == 0 ) region = diy.settings.getRegion( getExpandedKey( faceIndex, 'PageEven-region' ) ); else region = diy.settings.getRegion( getExpandedKey( faceIndex, 'PageOdd-region' ) ); - - pageBox.markupText = pageNumber; - pageBox.drawAsSingleLine( g, region ); + + if ( region ) { // only if Scenario type + pageBox.markupText = pageNumber; + pageBox.drawAsSingleLine( g, region ); + } } function drawWatermark( g, diy, sheet ) { var faceIndex = sheet.getSheetIndex(); - var image = null; + var image = null; var region = diy.settings.getRegion( getExpandedKey( faceIndex, 'Watermark-portrait-clip-region' ) ); if ( $EncounterType == '0' ) { @@ -2663,4 +3821,3 @@ function drawWatermark( g, diy, sheet ) { g.setComposite( AlphaComposite.SrcOver.derive(0.06) ); g.drawImage( sizedImage, region.x, region.y, null ); } - diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js index f5cdd8a..3083634 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js @@ -1,15 +1,15 @@ importClass( javax.swing.JTextField ); function layoutTitle( diy, bindings, subtitle, updateFaces, bindingFaceIndex ) { - var TitlePanel = new Grid(); + var TitlePanel = new Grid(); TitlePanel.setTitle( @AHLCG-Title ); var titleField = new textField( '', 30 ); - + if (bindingFaceIndex == FACE_FRONT) diy.setNameField( titleField ); else bindings.add( 'Title' + BindingSuffixes[bindingFaceIndex], titleField, updateFaces ); - TitlePanel.place( + TitlePanel.place( @AHLCG-Title, 'align right', titleField, 'wrap, pushx, growx' ); @@ -17,25 +17,25 @@ function layoutTitle( diy, bindings, subtitle, updateFaces, bindingFaceIndex ) { var subtitleField = new textField( '', 30 ); bindings.add( 'Subtitle' + BindingSuffixes[bindingFaceIndex], subtitleField, updateFaces ); - TitlePanel.place( + TitlePanel.place( @AHLCG-Subtitle, 'align right', subtitleField, 'wrap, pushx, growx' ); } - + return TitlePanel; } // 2 lines function layoutTitle2( diy, bindings, updateFaces, bindingFaceIndex ) { - var TitlePanel = new Grid(); + var TitlePanel = new Grid(); TitlePanel.setTitle( @AHLCG-Title ); var titleArea = new textArea( '', 2, 30 ); - + if (bindingFaceIndex == FACE_FRONT) diy.setNameField( titleArea ); else bindings.add( 'Title' + BindingSuffixes[bindingFaceIndex], titleArea, updateFaces ); - TitlePanel.place( + TitlePanel.place( @AHLCG-Title, 'align right', titleArea, 'wrap, pushx, growx' ); @@ -55,47 +55,24 @@ function layoutTitleUnique( diy, bindings, subtitle, updateFaces, bindingFaceInd var uniqueButton = new toggleButton( '', uniqueIcon, false ); bindings.add( 'Unique' + BindingSuffixes[bindingFaceIndex], uniqueButton, updateFaces ); - TitlePanel.place( + TitlePanel.place( @AHLCG-Title, 'align right', uniqueButton, 'split, wmax 35, hmin 25, hmax 25', titleField, 'wrap, pushx, growx' ); if (subtitle) { var subtitleField = new textField( '', 30 ); bindings.add( 'Subtitle' + BindingSuffixes[bindingFaceIndex], subtitleField, updateFaces ); - - TitlePanel.place( + + TitlePanel.place( @AHLCG-Subtitle, 'align right', subtitleField, 'wrap, pushx, growx' ); } - - return TitlePanel; -} - -function layoutTitleScenario( diy, bindings, updateFaces, bindingFaceIndex ) { - var TitlePanel = new Grid(); - TitlePanel.setTitle( @AHLCG-Title ); - - var typeList = new comboBox( Eons.namedObjects.AHLCGObject.comboScenario, null ); - bindings.add( 'PageType' + BindingSuffixes[bindingFaceIndex], typeList, updateFaces ); - - TitlePanel.place( - @AHLCG-Type, 'align right', typeList, 'wrap' - ); - - var titleField = new textField( '', 30 ); - - if (bindingFaceIndex == FACE_FRONT) diy.setNameField( titleField ); - else bindings.add( 'Title' + BindingSuffixes[bindingFaceIndex], titleField, updateFaces ); - - TitlePanel.place( - @AHLCG-Title, 'align right', titleField, 'wrap, pushx, growx' - ); return TitlePanel; } function layoutTitleGuide( diy, bindings, updateFaces, bindingFaceIndex, portraitPanels ) { - var TitlePanel = new Grid(); + var TitlePanel = new Grid(); TitlePanel.setTitle( @AHLCG-Title ); var TypeList = new comboBox( Eons.namedObjects.AHLCGObject.comboGuide, null ); @@ -120,39 +97,41 @@ function layoutTitleGuide( diy, bindings, updateFaces, bindingFaceIndex, portrai } else { let image = portrait.image; - + let clipDimension = portrait.getClipDimensions(); - - let coveringScale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); + +// let coveringScale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); portrait.pan = Point2D.Float( region.x + (region.width - clipDimension.width) / 2, region.y + (region.height - clipDimension.height) / 2 ); portrait.scale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); - portrait.scale = coveringScale; +// portrait.scale = coveringScale; portraitPanels[i].portrait = portrait; } - + portraitPanels[i].portrait = portrait; } } - createPortraitStencil( diy, PortraitList[0], portraitPanels[0], $PositionPortrait1, (String)(TypeList.getSelectedItem()) ); - createPortraitStencil( diy, PortraitList[1], portraitPanels[1], $PositionPortrait2, (String)(TypeList.getSelectedItem()) ); +// createPortraitStencil( diy, PortraitList[0], portraitPanels[0], $PositionPortrait1, (String)(TypeList.getSelectedItem()) ); +// createPortraitStencil( diy, PortraitList[1], portraitPanels[1], $PositionPortrait2, (String)(TypeList.getSelectedItem()) ); + createPortraitStencil( diy, PortraitList[0], $PositionPortrait1, (String)(TypeList.getSelectedItem()) ); + createPortraitStencil( diy, PortraitList[1], $PositionPortrait2, (String)(TypeList.getSelectedItem()) ); } catch ( ex ) { Error.handleUncaught( ex ); } }); - TitlePanel.place( + TitlePanel.place( @AHLCG-Type, 'align right', TypeList, 'wrap, wmin 100' ); - + var titleField = new textField( '', 30 ); - + if (bindingFaceIndex == FACE_FRONT) diy.setNameField( titleField ); else bindings.add( 'Title' + BindingSuffixes[bindingFaceIndex], titleField, updateFaces ); - TitlePanel.place( + TitlePanel.place( @AHLCG-Title, 'align right', titleField, 'wrap, pushx, growx' ); @@ -171,7 +150,7 @@ function layoutActStats( diy, bindings, faceIndex, portraitPanels ) { var cluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboClues, null ); bindings.add( 'Clues' + BindingSuffixes[faceIndex], cluesList, [0] ); - + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); var perInvestigatorButton = new toggleButton( '', perInvestigatorIcon, false ); bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorButton, [0] ); @@ -179,13 +158,14 @@ function layoutActStats( diy, bindings, faceIndex, portraitPanels ) { var asteriskButton = new toggleButton( '*', null, false ); bindings.add( 'Asterisk' + BindingSuffixes[faceIndex], asteriskButton, [0] ); +// perInvestigatorButton.addActionListener( function updateButtons( actionEvent ) { perInvestigatorButton.addActionListener( function updateButtons( actionEvent ) { asteriskButton.setSelected(false); }); - + asteriskButton.addActionListener( function updateButtons( actionEvent ) { - perInvestigatorButton.setSelected(false); - }); + perInvestigatorButton.setSelected(false); + }); var orientationList = new comboBox( Eons.namedObjects.AHLCGObject.comboTemplateOrientation, null ); bindings.add( 'Orientation' + BindingSuffixes[faceIndex], orientationList, [0] ); @@ -193,41 +173,8 @@ function layoutActStats( diy, bindings, faceIndex, portraitPanels ) { // update portrait region, text box shape orientationList.addActionListener( function updatePosition( actionEvent ) { try { - let orientationSetting = (String)(orientationList.getSelectedItem()); - - updateReversableTextBoxShape( diy, orientationSetting ); - let index = getPortraitIndex( 'Portrait' ); - let portrait = portraitPanels[index].portrait; - - let region = diy.settings.getRegion( 'AHLCG-Act-DefaultPortrait-portrait-clip-region', - // default - if no DefaultPortrait defined, use normal Portrait - diy.settings.getRegion( 'AHLCG-Act-Portrait-portrait-clip-region') ); - if ( orientationSetting == 'Reversed' ) region = reverseRegion( region ); - - diy.settings.setRegion( 'AHLCG-Act-Portrait-portrait-clip-region', region ); - - region = diy.settings.getRegion( 'AHLCG-Act-DefaultEncounter-portrait-clip-region', - // default - if no DefaultPortrait defined, use normal Portrait - diy.settings.getRegion( 'AHLCG-Act-Encounter-portrait-clip-region') ); - if ( orientationSetting == 'Reversed' ) region = reverseRegion( region ); - - diy.settings.setRegion( 'AHLCG-Act-Encounter-portrait-clip-region', region ); - - region = diy.settings.getRegion( 'AHLCG-Act-DefaultReturnEncounter-portrait-clip-region', - // default - if no DefaultReturnPortrait defined, use normal ReturnPortrait - diy.settings.getRegion( 'AHLCG-Act-ReturnEncounter-portrait-clip-region') ); - - if ( orientationSetting == 'Reversed' ) region = reverseRegion( region ); - - diy.settings.setRegion( 'AHLCG-Act-ReturnEncounter-portrait-clip-region', region ); - - region = diy.settings.getRegion( 'AHLCG-Act-DefaultCollection-portrait-clip-region', - // default - if no DefaultPortrait defined, use normal Portrait - diy.settings.getRegion( 'AHLCG-Act-Collection-portrait-clip-region') ); - if ( orientationSetting == 'Reversed' ) region = shiftRegion( region, CardTypes[FACE_FRONT] ); - - diy.settings.setRegion( 'AHLCG-Act-Collection-portrait-clip-region', region ); + updateOrientation( diy, portraitPanels[index].portrait, (String)(orientationList.getSelectedItem()), 'Act' ); } catch ( ex if ex instanceof ReferenceError ) { // means Body_box has not been created yet (during createInterface) // we can safely ignore this @@ -237,14 +184,14 @@ function layoutActStats( diy, bindings, faceIndex, portraitPanels ) { }); StatPanel.place( - @AHLCG-ActNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', - @AHLCG-Clues, 'align right, gapx 10', cluesList, 'pushx, growx, sizegroup sp', + @AHLCG-ActNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', + @AHLCG-Clues, 'align right, gapx 10', cluesList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25', asteriskButton, 'wrap, wmax 35, hmin 25, hmax 25', - @AHLCG-ScenarioDeckID, 'align right', deckList, 'pushx, growx, sizegroup sp', + @AHLCG-ScenarioDeckID, 'align right', deckList, 'pushx, growx, sizegroup sp', @AHLCG-Orientation, 'align right, gapx 10', orientationList, 'pushx, growx, span 3' ); - + return StatPanel; } @@ -273,10 +220,10 @@ function layoutAgendaStats( diy, bindings, faceIndex, portraitPanels ) { perInvestigatorButton.addActionListener( function updateButtons( actionEvent ) { asteriskButton.setSelected(false); }); - + asteriskButton.addActionListener( function updateButtons( actionEvent ) { - perInvestigatorButton.setSelected(false); - }); + perInvestigatorButton.setSelected(false); + }); var orientationList = new comboBox( Eons.namedObjects.AHLCGObject.comboTemplateOrientation, null ); bindings.add( 'Orientation' + BindingSuffixes[faceIndex], orientationList, [0] ); @@ -284,18 +231,7 @@ function layoutAgendaStats( diy, bindings, faceIndex, portraitPanels ) { // update portrait region, text box shape orientationList.addActionListener( function updatePosition( actionEvent ) { try { - let orientationSetting = (String)(orientationList.getSelectedItem()); - - updateReversableTextBoxShape( diy, orientationSetting ); - - let index = getPortraitIndex( 'Portrait' ); - let portrait = portraitPanels[index].portrait; - - let region = diy.settings.getRegion( 'AHLCG-Agenda-DefaultPortrait-portrait-clip-region', - // default - if no PortraitCollection defined, use normal Portrait - diy.settings.getRegion( 'AHLCG-Agenda-Portrait-portrait-clip-region') ); - - if ( orientationSetting == 'Reversed' ) region = reverseRegion( region ); + updateOrientation( diy, portraitPanels[index].portrait, (String)(orientationList.getSelectedItem()), 'Agenda' ); } catch ( ex if ex instanceof ReferenceError ) { // means Body_box has not been created yet (during createInterface) // we can safely ignore this @@ -305,11 +241,11 @@ function layoutAgendaStats( diy, bindings, faceIndex, portraitPanels ) { }); StatPanel.place( - @AHLCG-AgendaNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', + @AHLCG-AgendaNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', @AHLCG-Doom, 'align right, gapx 10', doomList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25', asteriskButton, 'wrap, wmax 35, hmin 25, hmax 25', - @AHLCG-ScenarioDeckID, 'align right', deckList, 'pushx, growx, sizegroup sp', + @AHLCG-ScenarioDeckID, 'align right', deckList, 'pushx, growx, sizegroup sp', @AHLCG-Orientation, 'align right, gapx 10', orientationList, 'pushx, growx, span 3' ); @@ -341,13 +277,13 @@ function layoutAgendaFrontPortraitStats( diy, bindings, faceIndex, portraitPanel perInvestigatorButton.addActionListener( function updateButtons( actionEvent ) { asteriskButton.setSelected(false); }); - + asteriskButton.addActionListener( function updateButtons( actionEvent ) { - perInvestigatorButton.setSelected(false); - }); + perInvestigatorButton.setSelected(false); + }); StatPanel.place( - @AHLCG-AgendaNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', + @AHLCG-AgendaNumber, 'align right', indexList, 'pushx, growx, sizegroup sp', @AHLCG-Doom, 'align right, gapx 10', doomList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25', asteriskButton, 'wrap, wmax 35, hmin 25, hmax 25', @@ -362,64 +298,74 @@ function layoutAssetStats( bindings, faceIndex ) { StatsPanel.setTitle( @AHLCG-BasicData ); var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var ClassList = new comboBox( AHLCGObject.comboClassesBW, null ); bindings.add( 'CardClass' + BindingSuffixes[faceIndex], ClassList, [faceIndex] ); - + + var ClassList2 = new comboBox( AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass2' + BindingSuffixes[faceIndex], ClassList2, [faceIndex] ); + + var ClassList3 = new comboBox( AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass3' + BindingSuffixes[faceIndex], ClassList3, [faceIndex] ); + var SkillList1 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill1' + BindingSuffixes[faceIndex], SkillList1, [faceIndex] ); - + var SkillList2 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill2' + BindingSuffixes[faceIndex], SkillList2, [faceIndex] ); - + var SkillList3 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill3' + BindingSuffixes[faceIndex], SkillList3, [faceIndex] ); - + var SkillList4 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill4' + BindingSuffixes[faceIndex], SkillList4, [faceIndex] ); - + var SkillList5 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill5' + BindingSuffixes[faceIndex], SkillList5, [faceIndex] ); - + var SkillList6 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill6' + BindingSuffixes[faceIndex], SkillList6, [faceIndex] ); - - var ClassList2 = new comboBox( AHLCGObject.comboClassesD, null ); - bindings.add( 'CardClass2' + BindingSuffixes[faceIndex], ClassList2, [faceIndex] ); - var CostList = new comboBox( AHLCGObject.comboCost, null ); - bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostList, [faceIndex] ); + var CostText = new textField( '0', 10 ); + bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostText, [faceIndex] ); var LevelList = new comboBox( AHLCGObject.comboLevelsN, null ); bindings.add( 'Level' + BindingSuffixes[faceIndex], LevelList, [faceIndex] ); var SlotList1 = new comboBox( AHLCGObject.comboSlots, null ); bindings.add( 'Slot' + BindingSuffixes[faceIndex], SlotList1, [faceIndex] ); - + var SlotList2 = new comboBox( AHLCGObject.comboSlots, null ); bindings.add( 'Slot2' + BindingSuffixes[faceIndex], SlotList2, [faceIndex] ); - - var StaminaList = new comboBox( AHLCGObject.comboAssetStamina, null ); + + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var perInvestigatorStaminaButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorStamina' + BindingSuffixes[faceIndex], perInvestigatorStaminaButton, [faceIndex] ); + var perInvestigatorSanityButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorSanity' + BindingSuffixes[faceIndex], perInvestigatorSanityButton, [faceIndex] ); + + var StaminaList = new textField( '', 10 ); bindings.add( 'Stamina' + BindingSuffixes[faceIndex], StaminaList, [faceIndex] ); - - var SanityList = new comboBox( AHLCGObject.comboAssetSanity, null ); + + var SanityList = new textField( '', 10 ); bindings.add( 'Sanity' + BindingSuffixes[faceIndex], SanityList, [faceIndex] ); - + StatsPanel.place( - @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', - @AHLCG-Cost, 'align right, gapx 10', CostList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Class2, 'align right, gapx 10', ClassList2, 'pushx, growx, sizegroup sp', - @AHLCG-Level, 'align right, gapx 10', LevelList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 1', 'align right', SkillList1, 'pushx, growx, sizegroup sp', - @AHLCG-Slot1, 'align right, gapx 10', SlotList1, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 2', 'align right', SkillList2, 'pushx, growx, sizegroup sp', - @AHLCG-Slot2, 'align right, gapx 10', SlotList2, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 3', 'align right', SkillList3, 'pushx, growx, sizegroup sp', - @AHLCG-Stamina, 'align right, gapx 10', StaminaList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 4', 'align right', SkillList4, 'pushx, growx, sizegroup sp', - @AHLCG-Sanity, 'align right, gapx 10', SanityList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 5', 'align right', SkillList5, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 6', 'align right', SkillList6, 'pushx, growx, sizegroup sp' + @AHLCG-Class1, 'align right', ClassList, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 1', 'align right, gapx 10', SkillList1, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Class2, 'align right', ClassList2, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 2', 'align right', SkillList2, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Class3, 'align right, gapx 10', ClassList3, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 3', 'align right', SkillList3, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Cost, 'align right, gapx 10', CostText, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 4', 'align right', SkillList4, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Level, 'align right, gapx 10', LevelList, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 5', 'align right', SkillList5, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Slot1, 'align right, gapx 10', SlotList1, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Icon + ' 6', 'align right', SkillList6, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Slot2, 'align right, gapx 10', SlotList2, 'wrap, pushx, growx, sizegroup sp, span 2', + @AHLCG-Stamina, 'align right, gapx 10', StaminaList, 'pushx, growx', perInvestigatorStaminaButton, 'wrap, wmax 35, hmin 25, hmax 25', + @AHLCG-Sanity, 'align right, gapx 10', SanityList, 'pushx, growx', perInvestigatorSanityButton, 'wrap, wmax 35, hmin 25, hmax 25', ); return StatsPanel; @@ -436,48 +382,54 @@ function layoutAssetStoryStats( bindings, faceIndex ) { var SkillList1 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill1' + BindingSuffixes[faceIndex], SkillList1, [faceIndex] ); - + var SkillList2 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill2' + BindingSuffixes[faceIndex], SkillList2, [faceIndex] ); - + var SkillList3 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill3' + BindingSuffixes[faceIndex], SkillList3, [faceIndex] ); - + var SkillList4 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill4' + BindingSuffixes[faceIndex], SkillList4, [faceIndex] ); - + var SkillList5 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill5' + BindingSuffixes[faceIndex], SkillList5, [faceIndex] ); - + var CostList = new comboBox( AHLCGObject.comboCost, null ); bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostList, [faceIndex] ); var SlotList1 = new comboBox( AHLCGObject.comboSlots, null ); bindings.add( 'Slot' + BindingSuffixes[faceIndex], SlotList1, [faceIndex] ); - + var SlotList2 = new comboBox( AHLCGObject.comboSlots, null ); bindings.add( 'Slot2' + BindingSuffixes[faceIndex], SlotList2, [faceIndex] ); - + + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var perInvestigatorStaminaButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorStamina' + BindingSuffixes[faceIndex], perInvestigatorStaminaButton, [faceIndex] ); + var perInvestigatorSanityButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorSanity' + BindingSuffixes[faceIndex], perInvestigatorSanityButton, [faceIndex] ); + var StaminaList = new comboBox( AHLCGObject.comboAssetStamina, null ); bindings.add( 'Stamina' + BindingSuffixes[faceIndex], StaminaList, [faceIndex] ); - + var SanityList = new comboBox( AHLCGObject.comboAssetSanity, null ); bindings.add( 'Sanity' + BindingSuffixes[faceIndex], SanityList, [faceIndex] ); - + StatsPanel.place( @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', - @AHLCG-Cost, 'align right, gapx 10', CostList, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Cost, 'align right, gapx 10', CostList, 'wrap, pushx, growx, sizegroup sp, span 2', @AHLCG-Icon + ' 1', 'align right', SkillList1, 'pushx, growx, sizegroup sp', - @AHLCG-Slot1, 'align right, gapx 10', SlotList1, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Slot1, 'align right, gapx 10', SlotList1, 'wrap, pushx, growx, sizegroup sp, span 2', @AHLCG-Icon + ' 2', 'align right', SkillList2, 'pushx, growx, sizegroup sp', - @AHLCG-Slot2, 'align right, gapx 10', SlotList2, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Slot2, 'align right, gapx 10', SlotList2, 'wrap, pushx, growx, sizegroup sp, span 2', @AHLCG-Icon + ' 3', 'align right', SkillList3, 'pushx, growx, sizegroup sp', - @AHLCG-Stamina, 'align right, gapx 10', StaminaList, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Stamina, 'align right, gapx 10', StaminaList, 'pushx, growx', perInvestigatorStaminaButton, 'wrap, wmax 35, hmin 25, hmax 25', @AHLCG-Icon + ' 4', 'align right', SkillList4, 'pushx, growx, sizegroup sp', - @AHLCG-Sanity, 'align right, gapx 10', SanityList, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Sanity, 'align right, gapx 10', SanityList, 'pushx, growx', perInvestigatorSanityButton, 'wrap, wmax 35, hmin 25, hmax 25', @AHLCG-Icon + ' 5', 'align right', SkillList5, 'pushx, growx, sizegroup sp' ); - + return StatsPanel; } @@ -493,27 +445,31 @@ function layoutEnemyStats( bindings, faceIndex ) { var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); var perInvestigatorButton = new toggleButton( '', perInvestigatorIcon, false ); bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorButton, [faceIndex] ); - + var perInvestigatorAttackButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorAttack' + BindingSuffixes[faceIndex], perInvestigatorAttackButton, [faceIndex] ); + var perInvestigatorEvadeButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorEvade' + BindingSuffixes[faceIndex], perInvestigatorEvadeButton, [faceIndex] ); + var HealthList = new comboBox( AHLCGObject.comboEnemyHealth, null ); bindings.add( 'Health' + BindingSuffixes[faceIndex], HealthList, [faceIndex] ); - + var EvadeList = new comboBox( AHLCGObject.comboEnemyStat, null ); bindings.add( 'Evade' + BindingSuffixes[faceIndex], EvadeList, [faceIndex] ); - + var DamageList = new comboBox( AHLCGObject.combo5, null ); bindings.add( 'Damage' + BindingSuffixes[faceIndex], DamageList, [faceIndex] ); - + var HorrorList = new comboBox( AHLCGObject.combo5, null ); bindings.add( 'Horror' + BindingSuffixes[faceIndex], HorrorList, [faceIndex] ); StatPanel.place( - @AHLCG-Attack, 'align right', AttackList, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Attack, 'align right', AttackList, 'pushx, growx', perInvestigatorAttackButton, 'wmax 35, hmin 25, hmax 25', @AHLCG-Damage, 'align right, gapx 10', DamageList, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Health, 'align right', HealthList, 'pushx, growx', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25', @AHLCG-Horror, 'align right', HorrorList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Evade, 'align right', EvadeList, 'wrap, pushx, growx, sizegroup sp, span 2' + @AHLCG-Evade, 'align right', EvadeList, ' pushx, growx', perInvestigatorEvadeButton, 'wmax 35, hmin 25, hmax 25' ); - + return StatPanel; } @@ -525,35 +481,39 @@ function layoutWeaknessEnemyStats( bindings, faceIndex ) { var TypeList = new comboBox( AHLCGObject.comboWeaknessTypesI, null ); bindings.add( 'Subtype' + BindingSuffixes[faceIndex], TypeList, [faceIndex] ); - + var AttackList = new comboBox( AHLCGObject.comboEnemyStat, null ); bindings.add( 'Attack' + BindingSuffixes[faceIndex], AttackList, [faceIndex] ); - + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); var perInvestigatorButton = new toggleButton( '', perInvestigatorIcon, false ); bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorButton, [faceIndex] ); - + var perInvestigatorAttackButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorAttack' + BindingSuffixes[faceIndex], perInvestigatorAttackButton, [faceIndex] ); + var perInvestigatorEvadeButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorEvade' + BindingSuffixes[faceIndex], perInvestigatorEvadeButton, [faceIndex] ); + var HealthList = new comboBox( AHLCGObject.comboEnemyStat, null ); bindings.add( 'Health' + BindingSuffixes[faceIndex], HealthList, [faceIndex] ); - + var EvadeList = new comboBox( AHLCGObject.comboEnemyStat, null ); bindings.add( 'Evade' + BindingSuffixes[faceIndex], EvadeList, [faceIndex] ); - + var DamageList = new comboBox( AHLCGObject.combo5, null ); bindings.add( 'Damage' + BindingSuffixes[faceIndex], DamageList, [faceIndex] ); - + var HorrorList = new comboBox( AHLCGObject.combo5, null ); bindings.add( 'Horror' + BindingSuffixes[faceIndex], HorrorList, [faceIndex] ); StatPanel.place( @AHLCG-Type, 'align right', TypeList, 'pushx, growx, sizegroup sp, span 2', @AHLCG-Damage, 'align right, gapx 10', DamageList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Attack, 'align right', AttackList, 'pushx, growx, sizegroup sp, span 2', + @AHLCG-Attack, 'align right', AttackList, 'pushx, growx', perInvestigatorAttackButton, 'wmax 35, hmin 25, hmax 25', @AHLCG-Horror, 'align right, gapx 10', HorrorList, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Health, 'align right', HealthList, 'pushx, growx', perInvestigatorButton, 'wrap, wmax 35, hmin 25, hmax 25', - @AHLCG-Evade, 'align right', EvadeList, 'wrap, pushx, growx, sizegroup sp, span 2' + @AHLCG-Evade, 'align right', EvadeList, 'pushx, growx', perInvestigatorEvadeButton, 'wrap, wmax 35, hmin 25, hmax 25' ); - + return StatPanel; } @@ -563,18 +523,18 @@ function layoutEventStats( diy, bindings, faceIndex ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - var ClassList = new comboBox( Eons.namedObjects.AHLCGObject.comboClassesBW, null ); - bindings.add( 'CardClass' + BindingSuffixes[faceIndex], ClassList, [faceIndex] ); + var ClassList1 = new comboBox( AHLCGObject.comboClassesBWS, null ); + bindings.add( 'CardClass' + BindingSuffixes[faceIndex], ClassList1, [faceIndex] ); - ClassList.addActionListener( function updateShape( actionEvent ) { + ClassList1.addActionListener( function updateShape( actionEvent ) { try { - let className = (String)(ClassList.getSelectedItem()); + let className = (String)(ClassList1.getSelectedItem()); if ( className == 'Weakness' || className == 'BasicWeakness' ) { // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'WeaknessBody-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'WeaknessBody-region') ) ); } else { -// createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); +// createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); } } catch ( ex if ex instanceof ReferenceError ) { @@ -585,36 +545,44 @@ function layoutEventStats( diy, bindings, faceIndex ) { } }); + var ClassList2 = new comboBox( Eons.namedObjects.AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass2' + BindingSuffixes[faceIndex], ClassList2, [faceIndex] ); + + var ClassList3 = new comboBox( Eons.namedObjects.AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass3' + BindingSuffixes[faceIndex], ClassList3, [faceIndex] ); + var SkillList1 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill1' + BindingSuffixes[faceIndex], SkillList1, [faceIndex] ); var SkillList2 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill2' + BindingSuffixes[faceIndex], SkillList2, [faceIndex] ); - + var SkillList3 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill3' + BindingSuffixes[faceIndex], SkillList3, [faceIndex] ); - + var SkillList4 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill4' + BindingSuffixes[faceIndex], SkillList4, [faceIndex] ); - + var SkillList5 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill5' + BindingSuffixes[faceIndex], SkillList5, [faceIndex] ); - - var CostList = new comboBox( AHLCGObject.comboCost, null ); - bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostList, [faceIndex] ); + + var CostField = new textField( '0', 30 ); + bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostField, [faceIndex] ); var LevelList = new comboBox( AHLCGObject.comboLevelsN, null ); bindings.add( 'Level' + BindingSuffixes[faceIndex], LevelList, [faceIndex] ); StatPanel.place( - @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', - @AHLCG-Cost, 'align right, gapx 10', CostList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 1', 'align right', SkillList1, 'pushx, growx, sizegroup sp', - @AHLCG-Level, 'align right, gapx 10', LevelList, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 2', 'align right', SkillList2, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 3', 'align right', SkillList3, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 4', 'align right', SkillList4, 'wrap, pushx, growx, sizegroup sp', - @AHLCG-Icon + ' 5', 'align right', SkillList5, 'pushx, growx, sizegroup sp' + @AHLCG-Class1, 'align right', ClassList1, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 1', 'align right, gapx 10', SkillList1, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Class2, 'align right', ClassList2, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 2', 'align right, gapx 10', SkillList2, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Class3, 'align right', ClassList3, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 3', 'align right, gapx 10', SkillList3, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Cost, 'align right', CostField, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 4', 'align right, gapx 10', SkillList4, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Level, 'align right', LevelList, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 5', 'align right, gapx 10', SkillList5, 'pushx, growx, sizegroup sp' ); return StatPanel; @@ -631,7 +599,6 @@ function layoutInvestigatorStats( diy, bindings, faceIndex ) { ClassList.addActionListener( function updateShape( actionEvent ) { try { -// createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ), (String)(ClassList.getSelectedItem()) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ), (String)(ClassList.getSelectedItem() ) ); } catch ( ex if ex instanceof ReferenceError ) { // means Body_box has not been created yet (during createInterface) @@ -643,24 +610,24 @@ function layoutInvestigatorStats( diy, bindings, faceIndex ) { var WillpowerList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Willpower' + BindingSuffixes[faceIndex], WillpowerList, [faceIndex] ); - + var IntellectList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Intellect' + BindingSuffixes[faceIndex], IntellectList, [faceIndex] ); - + var CombatList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Combat' + BindingSuffixes[faceIndex], CombatList, [faceIndex] ); - + var AgilityList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Agility' + BindingSuffixes[faceIndex], AgilityList, [faceIndex] ); - + var StaminaList = new comboBox( AHLCGObject.comboInvestigatorHealth, null ); bindings.add( 'Stamina' + BindingSuffixes[faceIndex], StaminaList, [faceIndex] ); - + var SanityList = new comboBox( AHLCGObject.comboInvestigatorHealth, null ); bindings.add( 'Sanity' + BindingSuffixes[faceIndex], SanityList, [faceIndex] ); - + StatPanel.place( - @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', + @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', @AHLCG-Skill-Willpower, 'align right, gapx 10', WillpowerList, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Stamina, 'align right', StaminaList, 'pushx, growx, sizegroup sp', @AHLCG-Skill-Intellect, 'align right, gapx 10', IntellectList, 'wrap, pushx, growx, sizegroup sp', @@ -680,22 +647,22 @@ function layoutStoryInvestigatorStats( diy, bindings, faceIndex ) { var WillpowerList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Willpower' + BindingSuffixes[faceIndex], WillpowerList, [faceIndex] ); - + var IntellectList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Intellect' + BindingSuffixes[faceIndex], IntellectList, [faceIndex] ); - + var CombatList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Combat' + BindingSuffixes[faceIndex], CombatList, [faceIndex] ); - + var AgilityList = new comboBox( AHLCGObject.comboStat, null ); bindings.add( 'Agility' + BindingSuffixes[faceIndex], AgilityList, [faceIndex] ); - + var StaminaList = new comboBox( AHLCGObject.comboInvestigatorHealth, null ); bindings.add( 'Stamina' + BindingSuffixes[faceIndex], StaminaList, [faceIndex] ); - + var SanityList = new comboBox( AHLCGObject.comboInvestigatorHealth, null ); bindings.add( 'Sanity' + BindingSuffixes[faceIndex], SanityList, [faceIndex] ); - + StatPanel.place( @AHLCG-Stamina, 'align right', StaminaList, 'pushx, growx, sizegroup sp', @AHLCG-Skill-Willpower, 'align right, gapx 10', WillpowerList, 'wrap, pushx, growx, sizegroup sp', @@ -713,78 +680,145 @@ function layoutLocationBackStats( bindings, faceIndex ) { var StatPanel = new Grid(); StatPanel.setTitle( @AHLCG-BasicData ); - var ShroudList = new comboBox( Eons.namedObjects.AHLCGObject.comboX20, null ); + var ShroudList = new comboBox( Eons.namedObjects.AHLCGObject.comboXD20, null ); bindings.add( 'Shroud' + BindingSuffixes[faceIndex], ShroudList, [faceIndex] ); - - var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboX20, null ); + + var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboClues, null ); bindings.add( 'Clues' + BindingSuffixes[faceIndex], CluesList, [faceIndex] ); - + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); var perInvestigatorButton = new toggleButton( '', perInvestigatorIcon, false ); bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorButton, [faceIndex] ); + var shroudPerInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var shroudPerInvestigatorButton = new toggleButton( '', shroudPerInvestigatorIcon, false ); + bindings.add( 'ShroudPerInvestigator' + BindingSuffixes[faceIndex], shroudPerInvestigatorButton, [faceIndex] ); + StatPanel.place( - @AHLCG-Shroud, 'align right', ShroudList, 'pushx, growx, sizegroup sp', + @AHLCG-Shroud, 'align right', ShroudList, 'pushx, growx, sizegroup sp', shroudPerInvestigatorButton, 'wmax 35, hmin 25, hmax 25', @AHLCG-Clues, 'align right', CluesList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25' - ); + ); return StatPanel; } -// includes back type list +// includes back type list - v16 back type moved to basic data: back function layoutLocationStats( bindings, faceIndex ) { var StatPanel = new Grid(); StatPanel.setTitle( @AHLCG-BasicData ); - var ShroudList = new comboBox( Eons.namedObjects.AHLCGObject.comboX20, null ); + var ShroudList = new comboBox( Eons.namedObjects.AHLCGObject.comboXD20, null ); bindings.add( 'Shroud' + BindingSuffixes[faceIndex], ShroudList, [0] ); - - var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboX20, null ); + +// var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboX20, null ); + var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboClues, null ); bindings.add( 'Clues' + BindingSuffixes[faceIndex], CluesList, [0] ); - + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); var perInvestigatorButton = new toggleButton( '', perInvestigatorIcon, false ); bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorButton, [0] ); - var BackList = new comboBox( Eons.namedObjects.AHLCGObject.comboLocationBacks, null); - bindings.add( 'BackType' + BindingSuffixes[faceIndex], BackList, [1] ); - - BackList.addActionListener( function updateShape( actionEvent ) { - try { - if ( (String)(BackList.getSelectedItem()) == 'Player' ) { - $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2'; - } - else if ( (String)(BackList.getSelectedItem()) == 'Encounter' ) { - $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2'; - } - else { - $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2'; - } - } catch (ex) { - Error.handleUncaught( ex ); - } - }); + var shroudPerInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var shroudPerInvestigatorButton = new toggleButton( '', shroudPerInvestigatorIcon, false ); + bindings.add( 'ShroudPerInvestigator' + BindingSuffixes[faceIndex], shroudPerInvestigatorButton, [0] ); StatPanel.place( - @AHLCG-Shroud, 'align right', ShroudList, 'pushx, growx, sizegroup sp', - @AHLCG-Clues, 'align right', CluesList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25, wrap', - @AHLCG-Back, 'align right', BackList, 'pushx, growx, sizegroup sp' + @AHLCG-Shroud, 'align right', ShroudList, 'pushx, growx, sizegroup sp', shroudPerInvestigatorButton, 'wmax 35, hmin 25, hmax 25', +// @AHLCG-Clues, 'align right', CluesList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25, wrap', + @AHLCG-Clues, 'align right', CluesList, 'pushx, growx, sizegroup sp', perInvestigatorButton, 'wmax 35, hmin 25, hmax 25' +// @AHLCG-Back, 'align right', BackList, 'pushx, growx, sizegroup sp' ); return StatPanel; } -function layoutScenarioStats( bindings, faceIndex ) { +function layoutEnemyLocationStats( bindings, faceIndex ) { + var StatPanel = new Grid(); + StatPanel.setTitle( @AHLCG-BasicData ); + + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var ShroudList = new comboBox( Eons.namedObjects.AHLCGObject.comboXD20, null ); + bindings.add( 'Shroud' + BindingSuffixes[faceIndex], ShroudList, [0] ); + + var CluesList = new comboBox( Eons.namedObjects.AHLCGObject.comboClues, null ); + bindings.add( 'Clues' + BindingSuffixes[faceIndex], CluesList, [0] ); + + var perInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var perInvestigatorClueButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigator' + BindingSuffixes[faceIndex], perInvestigatorClueButton, [0] ); + + var shroudPerInvestigatorIcon = ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-PerInvestigator.png'), 12, 12); + var shroudPerInvestigatorButton = new toggleButton( '', shroudPerInvestigatorIcon, false ); + bindings.add( 'ShroudPerInvestigator' + BindingSuffixes[faceIndex], shroudPerInvestigatorButton, [0] ); + + var AttackList = new comboBox( AHLCGObject.comboEnemyStat, null ); + bindings.add( 'Attack' + BindingSuffixes[faceIndex], AttackList, [faceIndex] ); + + var perInvestigatorHealthButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorHealth' + BindingSuffixes[faceIndex], perInvestigatorHealthButton, [faceIndex] ); + var perInvestigatorAttackButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorAttack' + BindingSuffixes[faceIndex], perInvestigatorAttackButton, [faceIndex] ); + var perInvestigatorEvadeButton = new toggleButton( '', perInvestigatorIcon, false ); + bindings.add( 'PerInvestigatorEvade' + BindingSuffixes[faceIndex], perInvestigatorEvadeButton, [faceIndex] ); + + var HealthList = new comboBox( AHLCGObject.comboEnemyHealth, null ); + bindings.add( 'Health' + BindingSuffixes[faceIndex], HealthList, [faceIndex] ); + + var EvadeList = new comboBox( AHLCGObject.comboEnemyStat, null ); + bindings.add( 'Evade' + BindingSuffixes[faceIndex], EvadeList, [faceIndex] ); + + var DamageList = new comboBox( AHLCGObject.combo5, null ); + bindings.add( 'Damage' + BindingSuffixes[faceIndex], DamageList, [faceIndex] ); + + var HorrorList = new comboBox( AHLCGObject.combo5, null ); + bindings.add( 'Horror' + BindingSuffixes[faceIndex], HorrorList, [faceIndex] ); + + StatPanel.place( + @AHLCG-Shroud, 'align right', ShroudList, 'pushx, growx, sizegroup sp', shroudPerInvestigatorButton, 'wmax 35, hmin 25, hmax 25', + @AHLCG-Clues, 'align right', CluesList, 'pushx, growx, sizegroup sp', perInvestigatorClueButton, 'wmax 35, hmin 25, hmax 25, wrap', + @AHLCG-Attack, 'align right', AttackList, 'pushx, growx', perInvestigatorAttackButton, 'wmax 35, hmin 25, hmax 25', + @AHLCG-Health, 'align right', HealthList, 'pushx, growx', perInvestigatorHealthButton, 'wmax 35, hmin 25, hmax 25', + @AHLCG-Evade, 'align right', EvadeList, 'pushx, growx', perInvestigatorEvadeButton, 'wmax 35, hmin 25, hmax 25, wrap', + @AHLCG-Damage, 'align left, gapx 10', DamageList, 'pushx, growx', + @AHLCG-Horror, 'align left', HorrorList, 'pushx, growx, wrap' + ); + + return StatPanel; +} + +function layoutScenarioStats( diy, bindings, faceIndex ) { var StatPanel = new Grid(); StatPanel.setTitle( @AHLCG-BasicData ); var pageSpinner = new spinner( 0, 50, 1, 1 ); bindings.add( 'Page' + BindingSuffixes[faceIndex], pageSpinner, [0, 1] ); - + + var TemplateList = new comboBox( Eons.namedObjects.AHLCGObject.comboScenario, null ); + bindings.add( 'Template' + BindingSuffixes[faceIndex], TemplateList, [faceIndex] ); + + TemplateList.addActionListener( function updateTemplate( actionEvent ) { + let type = (String)(TemplateList.getSelectedItem()); + + updateCardType( diy, type, faceIndex, 'Scenario', '' ); +/* + if ( type == 'Chaos' ) { + CardTypes[faceIndex] = 'StoryChaos'; + } + else if ( type == 'ChaosFull' ) { + CardTypes[faceIndex] = 'StoryChaosFull'; + } + else { + CardTypes[faceIndex] = 'Scenario'; + } +*/ + }); + StatPanel.place( + @AHLCG-Type, 'align right', TemplateList, 'wrap', @AHLCG-Page, 'align right, gapx 10', pageSpinner, 'wrap' ); - + return StatPanel; } @@ -794,32 +828,32 @@ function layoutSkillStats( bindings, faceIndex ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - var ClassList = new comboBox( AHLCGObject.comboClassesW, null ); + var ClassList = new comboBox( AHLCGObject.comboClassesBWS, null ); bindings.add( 'CardClass' + BindingSuffixes[faceIndex], ClassList, [faceIndex] ); - + var SkillList1 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill1' + BindingSuffixes[faceIndex], SkillList1, [faceIndex] ); - + var SkillList2 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill2' + BindingSuffixes[faceIndex], SkillList2, [faceIndex] ); - + var SkillList3 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill3' + BindingSuffixes[faceIndex], SkillList3, [faceIndex] ); - + var SkillList4 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill4' + BindingSuffixes[faceIndex], SkillList4, [faceIndex] ); - + var SkillList5 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill5' + BindingSuffixes[faceIndex], SkillList5, [faceIndex] ); - + var SkillList6 = new comboBox( AHLCGObject.comboSkills, null ); bindings.add( 'Skill6' + BindingSuffixes[faceIndex], SkillList6, [faceIndex] ); - + var LevelList = new comboBox( AHLCGObject.comboLevelsN, null ); bindings.add( 'Level' + BindingSuffixes[faceIndex], LevelList, [faceIndex] ); StatPanel.place( - @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', + @AHLCG-Class, 'align right', ClassList, 'pushx, growx, sizegroup sp', @AHLCG-Level, 'align right, gapx 10', LevelList, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Icon + ' 1', 'align right', SkillList1, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Icon + ' 2', 'align right', SkillList2, 'wrap, pushx, growx, sizegroup sp', @@ -828,7 +862,7 @@ function layoutSkillStats( bindings, faceIndex ) { @AHLCG-Icon + ' 5', 'align right', SkillList5, 'wrap, pushx, growx, sizegroup sp', @AHLCG-Icon + ' 6', 'align right', SkillList6, 'pushx, growx, sizegroup sp' ); - + return StatPanel; } @@ -840,11 +874,11 @@ function layoutWeaknessStats( bindings, faceIndex ) { var TypeList = new comboBox( AHLCGObject.comboWeaknessTypes, null ); bindings.add( 'Subtype' + BindingSuffixes[faceIndex], TypeList, [faceIndex] ); - + StatPanel.place( @AHLCG-Type, 'align right', TypeList, 'pushx, growx, sizegroup sp' ); - + return StatPanel; } @@ -854,7 +888,7 @@ function layoutBackTypeStats( diy, bindings, faceIndex ) { var BackList = new comboBox( Eons.namedObjects.AHLCGObject.comboBacks, null ); bindings.add( 'BackType' + BindingSuffixes[faceIndex], BackList, [ 1 ] ); - + BackList.addActionListener( function updateShape( actionEvent ) { try { if ( (String)(BackList.getSelectedItem()) == 'Player' ) { @@ -871,7 +905,37 @@ function layoutBackTypeStats( diy, bindings, faceIndex ) { StatsPanel.place( @AHLCG-Back, 'align right ', BackList, 'wrap, width 40%' ); - + + return StatsPanel; +} + +function layoutLocationBackTypeStats( diy, bindings, faceIndex ) { + var StatsPanel = new Grid(); + StatsPanel.setTitle( @AHLCG-BasicData ); + + var BackList = new comboBox( Eons.namedObjects.AHLCGObject.comboLocationBacks, null); + bindings.add( 'BackType' + BindingSuffixes[faceIndex], BackList, [1] ); + + BackList.addActionListener( function updateShape( actionEvent ) { + try { + if ( (String)(BackList.getSelectedItem()) == 'Player' ) { + $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2'; + } + else if ( (String)(BackList.getSelectedItem()) == 'Encounter' ) { + $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2'; + } + else { + $AHLCG-LocationBack-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2'; + } + } catch (ex) { + Error.handleUncaught( ex ); + } + }); + + StatsPanel.place( + @AHLCG-Back, 'align right ', BackList, 'wrap, width 40%' + ); + return StatsPanel; } @@ -881,57 +945,323 @@ function layoutGuideStats( bindings, faceIndex ) { var pageSpinner = new spinner( 0, 100, 1, 1 ); bindings.add( 'Page' + BindingSuffixes[faceIndex], pageSpinner, [0] ); - + StatsPanel.place( @AHLCG-Page, 'align right, gapx 10', pageSpinner, 'wrap' ); - + return StatsPanel; } function layoutChaosStats( bindings, faceIndex ) { - var StatsPanel = new Grid(); + var StatsPanel = new Grid(); StatsPanel.setTitle( @AHLCG-BasicData ); var trackerField = new textField( '', 30 ); - bindings.add( 'TrackerBox', trackerField, [0,1] ); + bindings.add( 'TrackerBox' + BindingSuffixes[faceIndex], trackerField, [0, 1] ); - StatsPanel.place( - @AHLCG-TrackerBox, 'align right', trackerField, 'wrap, pushx, growx' + var heightSpinner = new spinner( 50, 200, 1, 100 ); + bindings.add( 'TrackerHeight' + BindingSuffixes[faceIndex], heightSpinner, [0, 1] ); + + StatsPanel.place( + @AHLCG-TrackerBox, 'align right', trackerField, 'wrap, pushx, growx', + @AHLCG-Height, 'align right', heightSpinner, 'align left, split', '%', 'pushx, growx, align left' ); - + return StatsPanel; } -function layoutStoryStats( bindings, faceIndex ) { +function layoutStoryChaosStats( diy, bindings, faceIndex ) { var StatPanel = new Grid(); StatPanel.setTitle( @AHLCG-BasicData ); var TemplateList = new comboBox( Eons.namedObjects.AHLCGObject.comboStoryTemplate, null ); bindings.add( 'Template' + BindingSuffixes[faceIndex], TemplateList, [faceIndex] ); - + TemplateList.addActionListener( function updateTemplate( actionEvent ) { - if ( (String)(TemplateList.getSelectedItem()) == 'Story' ) { + let type = (String)(TemplateList.getSelectedItem()); + + updateCardType( diy, type, faceIndex, 'ChaosStory', '' ); +/* + if ( type == 'Story' ) { CardTypes[faceIndex] = 'Story'; } - else { - CardTypes[faceIndex] = 'Chaos'; - } + else { + CardTypes[faceIndex] = 'ChaosStory'; + } +*/ }); - + + var trackerField = new textField( '', 30 ); + bindings.add( 'TrackerBox' + BindingSuffixes[faceIndex], trackerField, [faceIndex] ); + + var heightSpinner = new spinner( 50, 200, 1, 100 ); + bindings.add( 'TrackerHeight' + BindingSuffixes[faceIndex], heightSpinner, [faceIndex] ); + StatPanel.place( - @AHLCG-Template, 'align right', TemplateList, 'pushx, growx, sizegroup sp' + @AHLCG-Template, 'align right', TemplateList, 'wrap, width 40%', + @AHLCG-TrackerBox, 'align right', trackerField, 'wrap', + @AHLCG-Height, 'align right', heightSpinner, 'align left, split', '%', 'pushx, growx, align left' ); return StatPanel; } -function layoutConnections( bindings, updateFaces, faceIndex ) { - var ConnectionPanel = new Grid(); - ConnectionPanel.setTitle( @AHLCG-Connections ); - - var ConnectionArray = Eons.namedObjects.AHLCGObject.comboConnections; - if ( faceIndex == FACE_BACK ) ConnectionArray = Eons.namedObjects.AHLCGObject.comboConnectionsBack; +function layoutStoryStats( diy, bindings, faceIndex ) { + var StatPanel = new Grid(); + StatPanel.setTitle( @AHLCG-BasicData ); + + var TemplateList = new comboBox( Eons.namedObjects.AHLCGObject.comboStoryTemplate, null ); + bindings.add( 'Template' + BindingSuffixes[faceIndex], TemplateList, [faceIndex] ); + + TemplateList.addActionListener( function updateTemplate( actionEvent ) { + let type = (String)(TemplateList.getSelectedItem()); + + updateCardType( diy, type, faceIndex, 'Story', '' ); +/* + if ( type == 'Story' ) { + CardTypes[faceIndex] = 'Story'; + } + else if ( type == 'ChaosFull' ) { + CardTypes[faceIndex] = 'StoryChaosFull'; + } + else { + CardTypes[faceIndex] = 'StoryChaos'; + } + */ + }); + + var trackerField = new textField( '', 30 ); + bindings.add( 'TrackerBox' + BindingSuffixes[faceIndex], trackerField, [faceIndex] ); + + var heightSpinner = new spinner( 50, 200, 1, 100 ); + bindings.add( 'TrackerHeight' + BindingSuffixes[faceIndex], heightSpinner, [faceIndex] ); + + StatPanel.place( + @AHLCG-Template, 'align right', TemplateList, 'wrap, width 40%', + @AHLCG-TrackerBox, 'align right', trackerField, 'wrap, pushx, growx', + @AHLCG-Height, 'align right', heightSpinner, 'align left, split', '%', 'pushx, growx, align left' + ); + + return StatPanel; +} + +function layoutStoryBackStats( diy, bindings, faceIndex, selectBack ) { + var StatPanel = new Grid(); + StatPanel.setTitle( @AHLCG-BasicData ); + + var BackList = new comboBox( Eons.namedObjects.AHLCGObject.comboStoryBackTemplate, null); + bindings.add( 'Template' + BindingSuffixes[faceIndex], BackList, [0, 1] ); + + BackList.addActionListener( function updateShape( actionEvent ) { + try { + let type = (String)(BackList.getSelectedItem()); + + updateCardType( diy, type, faceIndex, 'Story', 'AHLCG-Story-Default-template' ); +/* + if ( type == 'Chaos' ) { + CardTypes[faceIndex] = 'StoryChaos'; + $AHLCG-Story-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2'; + } + else if ( type == 'ChaosFull' ) { + CardTypes[faceIndex] = 'StoryChaosFull'; + $AHLCG-Story-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-StoryChaosFull.jp2'; + } + else if ( type == 'Player' ) { + CardTypes[faceIndex] = 'Story'; + $AHLCG-Story-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2'; + } + else if ( type == 'Encounter' ) { + CardTypes[faceIndex] = 'Story'; + $AHLCG-Story-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2'; + } + else { + CardTypes[faceIndex] = 'Story'; + $AHLCG-Story-Default-template = 'ArkhamHorrorLCG/templates/AHLCG-Story.jp2'; + } +*/ + } catch (ex) { + Error.handleUncaught( ex ); + } + }); + + var trackerField = new textField( '', 30 ); + bindings.add( 'TrackerBox' + BindingSuffixes[faceIndex], trackerField, [faceIndex] ); + + var heightSpinner = new spinner( 50, 200, 1, 100 ); + bindings.add( 'TrackerHeight' + BindingSuffixes[faceIndex], heightSpinner, [faceIndex] ); + + StatPanel.place( + @AHLCG-Template, 'align right', BackList, 'wrap, width 40%', + @AHLCG-TrackerBox, 'align right', trackerField, 'wrap, pushx, growx', + @AHLCG-Height, 'align right', heightSpinner, 'align left, split', '%', 'pushx, growx, align left' + ); + + return StatPanel; +} + +function layoutKeyStats( bindings, faceIndex ) { + var StatsPanel = new Grid(); + StatsPanel.setTitle( @AHLCG-BasicData ); + + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var ClassList = new comboBox( AHLCGObject.comboClassesBW, null ); + bindings.add( 'CardClass' + BindingSuffixes[faceIndex], ClassList, [faceIndex] ); + + var ClassList2 = new comboBox( AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass2' + BindingSuffixes[faceIndex], ClassList2, [faceIndex] ); + + var ClassList3 = new comboBox( AHLCGObject.comboClassesD, null ); + bindings.add( 'CardClass3' + BindingSuffixes[faceIndex], ClassList3, [faceIndex] ); + + var SkillList1 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill1' + BindingSuffixes[faceIndex], SkillList1, [faceIndex] ); + + var SkillList2 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill2' + BindingSuffixes[faceIndex], SkillList2, [faceIndex] ); + + var SkillList3 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill3' + BindingSuffixes[faceIndex], SkillList3, [faceIndex] ); + + var SkillList4 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill4' + BindingSuffixes[faceIndex], SkillList4, [faceIndex] ); + + var SkillList5 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill5' + BindingSuffixes[faceIndex], SkillList5, [faceIndex] ); + + var SkillList6 = new comboBox( AHLCGObject.comboSkills, null ); + bindings.add( 'Skill6' + BindingSuffixes[faceIndex], SkillList6, [faceIndex] ); + + var CostList = new comboBox( AHLCGObject.comboCost, null ); + bindings.add( 'ResourceCost' + BindingSuffixes[faceIndex], CostList, [faceIndex] ); + + var LevelList = new comboBox( AHLCGObject.comboLevelsN, null ); + bindings.add( 'Level' + BindingSuffixes[faceIndex], LevelList, [faceIndex] ); + + var SlotList1 = new comboBox( AHLCGObject.comboSlots, null ); + bindings.add( 'Slot' + BindingSuffixes[faceIndex], SlotList1, [faceIndex] ); + + var SlotList2 = new comboBox( AHLCGObject.comboSlots, null ); + bindings.add( 'Slot2' + BindingSuffixes[faceIndex], SlotList2, [faceIndex] ); + + var StaminaList = new comboBox( AHLCGObject.comboAssetStamina, null ); + bindings.add( 'Stamina' + BindingSuffixes[faceIndex], StaminaList, [faceIndex] ); + + var SanityList = new comboBox( AHLCGObject.comboAssetSanity, null ); + bindings.add( 'Sanity' + BindingSuffixes[faceIndex], SanityList, [faceIndex] ); + + StatsPanel.place( + @AHLCG-Class1, 'align right', ClassList, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 1', 'align right, gapx 10', SkillList1, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Class2, 'align right', ClassList2, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 2', 'align right', SkillList2, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Class3, 'align right, gapx 10', ClassList3, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 3', 'align right', SkillList3, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Cost, 'align right, gapx 10', CostList, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 4', 'align right', SkillList4, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Level, 'align right, gapx 10', LevelList, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 5', 'align right', SkillList5, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Slot1, 'align right, gapx 10', SlotList1, 'pushx, growx, sizegroup sp', + @AHLCG-Icon + ' 6', 'align right', SkillList6, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Slot2, 'align right, gapx 10', SlotList2, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Stamina, 'align right, gapx 10', StaminaList, 'wrap, pushx, growx, sizegroup sp', + @AHLCG-Sanity, 'align right, gapx 10', SanityList, 'wrap, pushx, growx, sizegroup sp' + ); + + return StatsPanel; +} + +function layoutConcealedStats( diy, bindings, faceIndex ) { + var StatsPanel = new Grid(); + StatsPanel.setTitle( @AHLCG-BasicData ); + + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var TemplateList = new comboBox( AHLCGObject.comboConcealedTemplate, null ); + bindings.add( 'Template' + BindingSuffixes[faceIndex], TemplateList, [faceIndex] ); + + StatsPanel.place( + @AHLCG-Template, 'align right, gapx 10', TemplateList, 'pushx, growx, sizegroup sp' + ); + + return StatsPanel; +} + +function layoutCustomizableText( bindings, index, suffix, costtitle, spacing, faceIndex ) { + var TextPanel = new Grid(); + TextPanel.setTitle( @AHLCG-Rules ); + + var CostList = null; + var titleField = null; + var rulesField = null; + var spaceSpinner = null; + + if ( costtitle ) { + CostList = new comboBox( Eons.namedObjects.AHLCGObject.comboCustCost, null); + bindings.add( 'CustCost' + index + BindingSuffixes[faceIndex], CostList, [faceIndex] ); + + titleField = new textField( '', 26 ); + bindings.add( 'CustName' + index + BindingSuffixes[faceIndex], titleField, [faceIndex] ); + + rulesField = new textArea( '', 5, 26 ); + bindings.add( 'Cust' + suffix + index + BindingSuffixes[faceIndex], rulesField, [ faceIndex ] ); + + spaceSpinner = new spinner( 0, 300, 1, 1 ); + bindings.add( 'Cust' + suffix + index + BindingSuffixes[faceIndex] + 'Spacing', spaceSpinner, [ faceIndex ] ); + } + else { + rulesField = new textArea( '', 5, 26 ); + bindings.add( 'Cust' + suffix + BindingSuffixes[faceIndex], rulesField, [ faceIndex ] ); + + spaceSpinner = new spinner( 0, 300, 1, 1 ); + bindings.add( 'Cust' + suffix + BindingSuffixes[faceIndex] + 'Spacing', spaceSpinner, [ faceIndex ] ); + } + +/* + for ( let tipIndex = 1; tipIndex <= tipCount; tipIndex++ ) { + if ( @( 'AHLCG-' + base + 'Tip' ) != null ) { + if ( tipAlign == 0 || tipIndex == tipCount ) { + TextPanel.place( + new tipButton( @( 'AHLCG-' + base + 'Tip' + tipIndex ) ), 'wrap, aligny top, gaptop 5' + ); + } + else + { + TextPanel.place( + new tipButton( @( 'AHLCG-' + base + 'Tip' + tipIndex ) ), 'aligny top, gaptop 5' + ); + } + } + } +*/ + var tip1 = new tipButton( @AHLCG-RulesTip1 ); + var tip2 = new tipButton( @AHLCG-RulesTip2 ); + var tip3 = new tipButton( @AHLCG-RulesTip3 ); + if ( costtitle ) { + TextPanel.place( + @AHLCG-Cost, 'align right', CostList, 'pushx, growx', @AHLCG-Name, 'align right, gapx 10', titleField, 'align left, pushx, growx, wrap', + ); + } + + TextPanel.place( + @AHLCG-Rules, 'align right, spany 3', rulesField, 'pushx, growx, span 3, spany 3', + tip1, 'wrap, aligny top, gaptop 5', + tip2, 'wrap, aligny top, gaptop 5', + tip3, 'wrap, aligny top, gaptop 5', + @AHLCG-Spacing, 'align right', spaceSpinner, '' + ); + + return TextPanel; +} + +function layoutConnections( copyFront, bindings, updateFaces, faceIndex ) { + var ConnectionPanel = new Grid(); + ConnectionPanel.setTitle( @AHLCG-Connections ); + +// var ConnectionArray = Eons.namedObjects.AHLCGObject.comboConnections; +// if ( faceIndex == FACE_BACK ) ConnectionArray = Eons.namedObjects.AHLCGObject.comboConnectionsBack; + var ConnectionArray = copyFront ? Eons.namedObjects.AHLCGObject.comboConnectionsBack : Eons.namedObjects.AHLCGObject.comboConnections; var LocationIconList = new comboBox( ConnectionArray, null ); bindings.add( 'LocationIcon' + BindingSuffixes[faceIndex], LocationIconList, [0, 1] ); @@ -954,7 +1284,7 @@ function layoutConnections( bindings, updateFaces, faceIndex ) { var ConnectionList6 = new comboBox( ConnectionArray, null ); bindings.add( 'Connection6Icon' + BindingSuffixes[faceIndex], ConnectionList6, updateFaces ); - ConnectionPanel.place( + ConnectionPanel.place( @AHLCG-Icon, 'align right', LocationIconList, 'wrap, pushx, growx, sizegroup sp', '1', 'align right', ConnectionList1, 'pushx, growx, sizegroup sp', '4', 'align right, gapx 10', ConnectionList4, 'wrap, pushx, growx, sizegroup sp', @@ -967,25 +1297,41 @@ function layoutConnections( bindings, updateFaces, faceIndex ) { return ConnectionPanel; } -function layoutCopyright( bindings, faces, faceIndex ) { +function layoutCopyright( bindings, selectFaces, faces, faceIndex ) { var CopyrightPanel = new Grid(); CopyrightPanel.setTitle( @AHLCG-CopyrightTitle ); - var copyrightField = new textField( '', 30 ); + var fieldWidth = selectFaces ? 20 : 30; + + var copyrightField = new textField( '', fieldWidth ); bindings.add( 'Copyright', copyrightField, faces ); - CopyrightPanel.place( - @AHLCG-Copyright, 'align right', copyrightField, 'pushx, growx', - new tipButton( @( 'AHLCG-CopyrightTip1' ) ), 'wrap, aligny top, gaptop 5' + if (selectFaces) { + var frontBox = new checkBox( @AHLCG-Front, true, null ); + var backBox = new checkBox( @AHLCG-Back, true, null ); + + bindings.add( 'ShowCopyrightFront', frontBox, [0] ); + bindings.add( 'ShowCopyrightBack', backBox, [1] ); + + CopyrightPanel.place( + @AHLCG-Copyright, 'align right', copyrightField, 'align left, split 3', + frontBox, 'align right', backBox, 'align right, gapx 10' ); - + } + else { + CopyrightPanel.place( + @AHLCG-Copyright, 'align right', copyrightField, 'pushx, growx', + new tipButton( @( 'AHLCG-CopyrightTip1' ) ), 'wrap, aligny top, gaptop 5' + ); + } + return CopyrightPanel; } -function layoutText( bindings, parts, suffix, faceIndex ) { +function layoutText( bindings, parts, suffix, faceIndex ) { var TextPanel = new Grid(); TextPanel.setTitle( @AHLCG-Rules ); - + var tipCount = 0; for ( let index = 0; index < parts.length; index++ ) { @@ -993,7 +1339,7 @@ function layoutText( bindings, parts, suffix, faceIndex ) { let key = base + suffix; let tipkey = base; let tipAlign = 0; - + let field = null; let spaceSpinner = null; @@ -1001,7 +1347,7 @@ function layoutText( bindings, parts, suffix, faceIndex ) { case 'Traits': field = new textField( '', 30 ); bindings.add( key + BindingSuffixes[faceIndex], field, [ faceIndex ] ); - + tipCount = 4; tipAlign = 1; // horizontal break; @@ -1016,13 +1362,15 @@ function layoutText( bindings, parts, suffix, faceIndex ) { if ( CardTypes[faceIndex] == 'Scenario' ) height = 18; else if ( CardTypes[faceIndex] == 'Guide75' ) height = 40; else if ( CardTypes[faceIndex] == 'GuideA4' ) height = 40; - + else if ( CardTypes[faceIndex] == 'GuideLetter' ) height = 40; + field = new textArea( '', height, 30 ); bindings.add( key + BindingSuffixes[faceIndex], field, [ faceIndex ] ); - if ( CardTypes[faceIndex] == 'Guide75' ) tipCount = 3; - else if ( CardTypes[faceIndex] == 'GuideA4' ) tipCount = 3; - else tipCount = 2; + if ( CardTypes[faceIndex] == 'Guide75' ) tipCount = 4; + else if ( CardTypes[faceIndex] == 'GuideA4' ) tipCount = 4; + else if ( CardTypes[faceIndex] == 'GuideLetter' ) tipCount = 4; + else tipCount = 3; break; case 'Header': field = new textArea( '', 2, 30 ); @@ -1039,15 +1387,15 @@ function layoutText( bindings, parts, suffix, faceIndex ) { // field = new textField( '', 30 ); // bindings.add( key + BindingSuffixes[faceIndex], field, [ faceIndex ] ); // } - + tipCount = 1; break; default: field = new textArea( '', 6, 30 ); bindings.add( key + BindingSuffixes[faceIndex], field, [ faceIndex ] ); - + tipCount = 0; - break; + break; } switch ( tipCount ) { @@ -1106,16 +1454,16 @@ function layoutText( bindings, parts, suffix, faceIndex ) { return TextPanel; } -function layoutVictoryText( bindings, faceIndex ) { +function layoutVictoryText( bindings, faceIndex ) { var TextPanel = new Grid(); TextPanel.setTitle( @AHLCG-Victory ); - - var spaceSpinner = new spinner( 0, 50, 1, 1 ); + + var spaceSpinner = new spinner( 0, 300, 1, 1 ); bindings.add( 'Victory' + BindingSuffixes[faceIndex] + 'Spacing', spaceSpinner, [ faceIndex ] ); var field = new textArea( '', 2, 30 ); bindings.add( 'Victory' + BindingSuffixes[faceIndex], field, [ faceIndex ] ); - + var tip = new tipButton( @AHLCG-VictoryTip1 ); TextPanel.place( @@ -1132,7 +1480,7 @@ function layoutInvestigatorTextBack( diy, bindings, faceIndex ) { StylePanel.setTitle( @AHLCG-Sections ); var TextPanel = new Grid(); TextPanel.setTitle( @AHLCG-Rules ); - + var StandardButton = new button( @AHLCG-Standard ); var PrologueButton = new button( @AHLCG-TCUPrologue ); @@ -1147,7 +1495,7 @@ function layoutInvestigatorTextBack( diy, bindings, faceIndex ) { bindings.add( 'Text1' + BindingSuffixes[faceIndex], text1, [faceIndex] ); var spinner1 = new spinner( 0, 50, 1, 1 ); bindings.add( 'Text1' + BindingSuffixes[faceIndex] + 'Spacing', spinner1, [faceIndex] ); - + var name2 = new textField( '', 30 ); bindings.add( 'Text2Name' + BindingSuffixes[faceIndex], name2, [ faceIndex ] ); var text2 = new textArea( '', 4, 30, true ); @@ -1199,53 +1547,43 @@ function layoutInvestigatorTextBack( diy, bindings, faceIndex ) { bindings.add( 'InvStory' + BindingSuffixes[faceIndex], storyText, [faceIndex] ); TextPanel.place( - @AHLCG-Section + ' 1', 'align right', name1, 'wrap, pushx, growx', + @AHLCG-Section + ' 1', 'align right', name1, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text1, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner1, 'wrap', - @AHLCG-Section + ' 2', 'align right', name2, 'wrap, pushx, growx', + @AHLCG-Section + ' 2', 'align right', name2, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text2, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner2, 'wrap', - @AHLCG-Section + ' 3', 'align right', name3, 'wrap, pushx, growx', + @AHLCG-Section + ' 3', 'align right', name3, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text3, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner3, 'wrap', - @AHLCG-Section + ' 4', 'align right', name4, 'wrap, pushx, growx', + @AHLCG-Section + ' 4', 'align right', name4, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text4, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner4, 'wrap', - @AHLCG-Section + ' 5', 'align right', name5, 'wrap, pushx, growx', + @AHLCG-Section + ' 5', 'align right', name5, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text5, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner5, 'wrap', - @AHLCG-Section + ' 6', 'align right', name6, 'wrap, pushx, growx', + @AHLCG-Section + ' 6', 'align right', name6, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text6, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner6, 'wrap', - @AHLCG-Section + ' 7', 'align right', name7, 'wrap, pushx, growx', + @AHLCG-Section + ' 7', 'align right', name7, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text7, 'wrap, pushx, growx', @AHLCG-Spacing, 'align right', spinner7, 'wrap', - @AHLCG-Section + ' 8', 'align right', name8, 'wrap, pushx, growx', + @AHLCG-Section + ' 8', 'align right', name8, 'wrap, pushx, growx', @AHLCG-Text, 'align right', text8, 'wrap, pushx, growx', @AHLCG-Story, 'align right', storyText, 'pushx, growx' ); StandardButton.addActionListener( function updateHeaders( actionEvent ) { -// name1.setText('Testing'); name1.setText( 'Deck Size' ); name2.setText( 'Secondary Class Choice' ); name3.setText( 'Deckbuilding Options' ); - name4.setText( 'Deckbuilding Requirements (do not count toward deck size)' ); + name4.setText( 'Deckbuilding Requirements (do not count toward deck size)' ); name5.setText( 'Deckbuilding Restrictions' ); name6.setText( 'Additional Requirements' ); name7.setText( 'Additional Restrictions' ); name8.setText( '' ); - - text1.viewport.getView().setText('30.'); - text2.viewport.getView().setText(''); - text3.viewport.getView().setText(''); - text4.viewport.getView().setText(''); - text5.viewport.getView().setText(''); - text6.viewport.getView().setText(''); - text7.viewport.getView().setText(''); - text8.viewport.getView().setText(''); }); - + PrologueButton.addActionListener( function updateHeaders( actionEvent ) { name1.setText( 'Setup' ); name2.setText( 'Starting Play Area' ); @@ -1255,124 +1593,29 @@ function layoutInvestigatorTextBack( diy, bindings, faceIndex ) { name6.setText( '' ); name7.setText( '' ); name8.setText( '' ); - - text1.viewport.getView().setText(''); - text2.viewport.getView().setText(''); - text3.viewport.getView().setText(''); - text4.viewport.getView().setText(''); - text5.viewport.getView().setText(''); - text6.viewport.getView().setText(''); - text7.viewport.getView().setText(''); - text8.viewport.getView().setText(''); }); return [ StylePanel, TextPanel ]; } -/* -function layoutInvestigatorTextBack( bindings, faceIndex ) { - var TextPanel = new Grid(); - TextPanel.setTitle( @AHLCG-Rules ); - - var deckSizeText = new textArea( '', 2, 30, true ); - bindings.add( 'DeckSize' + BindingSuffixes[faceIndex], deckSizeText, [faceIndex] ); - - var sizeSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'DeckSize' + BindingSuffixes[faceIndex] + 'Spacing', sizeSpinner, [faceIndex] ); - - var secondaryClassText = new textArea( '', 4, 30, true ); - bindings.add( 'SecondaryClass' + BindingSuffixes[faceIndex], secondaryClassText, [faceIndex] ); - - var secondarySpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'SecondaryClass' + BindingSuffixes[faceIndex] + 'Spacing', secondarySpinner, [faceIndex] ); - - var deckOptionsText = new textArea( '', 4, 30, true ); - bindings.add( 'DeckOptions' + BindingSuffixes[faceIndex], deckOptionsText, [faceIndex] ); - - var optionsSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'DeckOptions' + BindingSuffixes[faceIndex] + 'Spacing', optionsSpinner, [faceIndex] ); - - var deckRequirementsText = new textArea( '', 4, 30, true ); - bindings.add( 'DeckRequirements' + BindingSuffixes[faceIndex], deckRequirementsText, [faceIndex] ); - - var requirementsSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'DeckRequirements' + BindingSuffixes[faceIndex] + 'Spacing', requirementsSpinner, [faceIndex] ); - - var deckRestrictionsText = new textArea( '', 4, 30, true ); - bindings.add( 'DeckRestrictions' + BindingSuffixes[faceIndex], deckRestrictionsText, [faceIndex] ); - - var restrictionsSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'DeckRestrictions' + BindingSuffixes[faceIndex] + 'Spacing', restrictionsSpinner, [faceIndex] ); - - var additionalRequirementsText = new textArea( '', 4, 30, true ); - bindings.add( 'AdditionalRequirements' + BindingSuffixes[faceIndex], additionalRequirementsText, [faceIndex] ); - - var additionalRequirementsSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'AdditionalRequirements' + BindingSuffixes[faceIndex] + 'Spacing', additionalRequirementsSpinner, [faceIndex] ); -/-* - var setupText = new textArea( '', 4, 30, true ); - bindings.add( 'Setup' + BindingSuffixes[faceIndex], setupText, [faceIndex] ); - - var setupSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'Setup' + BindingSuffixes[faceIndex] + 'Spacing', setupSpinner, [faceIndex] ); - - var playAreaText = new textArea( '', 4, 30, true ); - bindings.add( 'StartingPlayArea' + BindingSuffixes[faceIndex], playAreaText, [faceIndex] ); - - var playAreaSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'StartingPlayArea' + BindingSuffixes[faceIndex] + 'Spacing', playAreaSpinner, [faceIndex] ); - - var handText = new textArea( '', 4, 30, true ); - bindings.add( 'OpeningHand' + BindingSuffixes[faceIndex], handText, [faceIndex] ); - - var handSpinner = new spinner( 0, 50, 1, 1 ); - bindings.add( 'OpeningHand' + BindingSuffixes[faceIndex] + 'Spacing', handSpinner, [faceIndex] ); -*-/ - var storyText = new textArea( '', 12, 30, true ); - bindings.add( 'InvStory' + BindingSuffixes[faceIndex], storyText, [faceIndex] ); - - TextPanel.place( - @AHLCG-DeckSize, 'align right', deckSizeText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', sizeSpinner, 'wrap', - @AHLCG-SecondaryClass, 'align right', secondaryClassText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', secondarySpinner, 'wrap', - @AHLCG-DeckOptions, 'align right', deckOptionsText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', optionsSpinner, 'wrap', - @AHLCG-DeckRequirements, 'align right', deckRequirementsText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', requirementsSpinner, 'wrap', - @AHLCG-DeckRestrictions, 'align right', deckRestrictionsText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', restrictionsSpinner, 'wrap', - @AHLCG-AdditionalRequirements, 'align right', additionalRequirementsText, 'wrap, pushx, growx', - @AHLCG-Spacing, 'align right', additionalRequirementsSpinner, 'wrap', -// @AHLCG-Setup, 'align right', setupText, 'wrap, pushx, growx', -// @AHLCG-Spacing, 'align right', setupSpinner, 'wrap', -// @AHLCG-StartingPlayArea, 'align right', playAreaText, 'wrap, pushx, growx', -// @AHLCG-Spacing, 'align right', playAreaSpinner, 'wrap', -// @AHLCG-OpeningHand, 'align right', handText, 'wrap, pushx, growx', -// @AHLCG-Spacing, 'align right', handSpinner, 'wrap', - @AHLCG-Story, 'align right', storyText, 'pushx, growx' - ); - return TextPanel; -} -*/ // header = story/chaos function layoutChaosText( bindings, faceIndex, header ) { var TextPanel = new Grid(); TextPanel.setTitle( @AHLCG-Rules ); - + var headerText = null; - + if (header) { headerText = new textArea( '', 2, 30, true ); bindings.add( 'Header' + BindingSuffixes[faceIndex], headerText, [faceIndex]); } - + var skullText = new textArea( '', 6, 30, true ); bindings.add( 'Skull' + BindingSuffixes[faceIndex], skullText, [faceIndex]); var skullSpinner = new spinner( 0, 50, 0, 1 ); bindings.add( 'Skull' + BindingSuffixes[faceIndex] + 'Spacing', skullSpinner, [faceIndex] ); - + var skullMergeList = new comboBox( new Array ( ListItem( 'None', @AHLCG-Chaos-None ), ListItem( 'Cultist', @AHLCG-Chaos-Cultist ), @@ -1380,68 +1623,54 @@ function layoutChaosText( bindings, faceIndex, header ) { ListItem( 'ElderThing', @AHLCG-Chaos-ElderThing ) ), null ); bindings.add( 'MergeSkull' + BindingSuffixes[faceIndex], skullMergeList, [faceIndex] ); - + var cultistText = new textArea( '', 6, 30, true ); bindings.add( 'Cultist' + BindingSuffixes[faceIndex], cultistText, [faceIndex] ); var cultistSpinner = new spinner( 0, 50, 0, 1 ); bindings.add( 'Cultist' + BindingSuffixes[faceIndex] + 'Spacing', cultistSpinner, [faceIndex] ); - + var cultistMergeList = new comboBox( new Array ( ListItem( 'None', @AHLCG-Chaos-None ), ListItem( 'Tablet', @AHLCG-Chaos-Tablet ), ListItem( 'ElderThing', @AHLCG-Chaos-ElderThing ) ), null ); bindings.add( 'MergeCultist' + BindingSuffixes[faceIndex], cultistMergeList, [faceIndex] ); - + var tabletText = new textArea( '', 6, 30, true ); bindings.add( 'Tablet' + BindingSuffixes[faceIndex], tabletText, [faceIndex] ); var tabletSpinner = new spinner( 0, 50, 0, 1 ); bindings.add( 'Tablet' + BindingSuffixes[faceIndex] + 'Spacing', tabletSpinner, [faceIndex] ); - + var tabletMergeList = new comboBox( new Array ( ListItem( 'None', @AHLCG-Chaos-None ), ListItem( 'ElderThing', @AHLCG-Chaos-ElderThing ) ), null ); bindings.add( 'MergeTablet' + BindingSuffixes[faceIndex], tabletMergeList, [faceIndex] ); - + var elderThingText = new textArea( '', 6, 30, true ); bindings.add( 'ElderThing' + BindingSuffixes[faceIndex], elderThingText, [faceIndex] ); - - if ( headerText ) + + if ( headerText ) TextPanel.place( @AHLCG-Header, 'align right', headerText, 'wrap, pushx, growx' ); - + TextPanel.place( @AHLCG-Skull, 'align right', skullText, 'wrap, pushx, growx', @AHLCG-CombineWith, '', skullMergeList, 'wrap', - @AHLCG-Spacing, 'align right', skullSpinner, 'wrap', + @AHLCG-Spacing, 'align right', skullSpinner, 'wrap', @AHLCG-Cultist, 'align right', cultistText, 'wrap, pushx, growx', @AHLCG-CombineWith, '', cultistMergeList, 'wrap', - @AHLCG-Spacing, 'align right', cultistSpinner, 'wrap', + @AHLCG-Spacing, 'align right', cultistSpinner, 'wrap', @AHLCG-Tablet, 'align right', tabletText, 'wrap, pushx, growx', @AHLCG-CombineWith, '', tabletMergeList, 'wrap', - @AHLCG-Spacing, 'align right', tabletSpinner, 'wrap', + @AHLCG-Spacing, 'align right', tabletSpinner, 'wrap', @AHLCG-ElderThing, 'align right', elderThingText, 'wrap, pushx, growx' ); - + return TextPanel; } -/* -function layoutArtist( bindings, faces, bindingFaceIndex ) { - var ArtistPanel = new Grid(); - ArtistPanel.setTitle( @AHLCG-Options ); - - var artistField = new textField( '', 30 ); - bindings.add( 'Artist' + BindingSuffixes[bindingFaceIndex], artistField, faces ); - ArtistPanel.place( - @AHLCG-Artist, 'align right', artistField, 'pushx, growx, sizegroup sp' - ); - - return ArtistPanel; -} -*/ function layoutPortraitOptions( bindings, faces, bindingFaceIndex, artist, mirror, share ) { var OptionPanel = new Grid(); OptionPanel.setTitle( @AHLCG-Options ); @@ -1449,28 +1678,76 @@ function layoutPortraitOptions( bindings, faces, bindingFaceIndex, artist, mirro if ( share ) { var shareBox = new checkBox( @AHLCG-SharePortrait, true, null ); bindings.add( 'PortraitShare', shareBox, faces ); - + OptionPanel.place( shareBox, 'wrap, span 2' - ); + ); } if ( artist ) { var artistField = new textField( '', 30 ); bindings.add( 'Artist' + BindingSuffixes[bindingFaceIndex], artistField, faces ); - - OptionPanel.place( + + OptionPanel.place( @AHLCG-Artist, 'align right', artistField, 'pushx, growx, sizegroup sp' - ); + ); } if ( mirror != null) { - OptionPanel.place( + OptionPanel.place( mirror, 'align right' - ); + ); } - + return OptionPanel; } +function setupGuidePortrait( diy, portraitIndex, positionOption, settingUp ) +{ + var portrait = PortraitList[portraitIndex]; + + // update portrait pan/scale, stencil + try { + // assume pan is 0 before this has run -> run this once when component is created + // update portrait positioning + let region = getGuidePortraitRegion( diy, positionOption ); + + if ( region == null ) { + portrait.pan = Point2D.Float( 0, 0 ); + portrait.scale = 1.0; + } + else if (settingUp) { + let image = portrait.image; + + let clipDimension = portrait.getClipDimensions(); + + let coveringScale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); + + portrait.pan = Point2D.Float( region.x + (region.width - clipDimension.width) / 2, region.y + (region.height - clipDimension.height) / 2); + portrait.scale = coveringScale; + } + + createPortraitStencil( diy, portrait, positionOption, $PageType ); + } catch ( ex ) { + Error.handleUncaught( ex ); + } + +// return portrait; +} + +function updateOrientation( diy, portrait, orientation, cardType ) { + updateReversableTextBoxShape( diy, orientation ); + + let index = getPortraitIndex( 'Portrait' ); +// let portrait = PortraitList[0]; + + let region = diy.settings.getRegion( 'AHLCG-' + cardType + '-DefaultPortrait-portrait-clip-region', + // default - if no PortraitCollection defined, use normal Portrait + diy.settings.getRegion( 'AHLCG-' + cardType + '-Portrait-portrait-clip-region') ); + + if ( orientation == 'Reversed' ) region = reverseRegion( region ); + + diy.settings.setRegion( 'AHLCG-' + cardType + '-Portrait-portrait-clip-region', region ); +} + function layoutGuidePortraitOptions( diy, bindings, faces, bindingFaceIndex, portraitName, panel, list, mirror ) { var OptionPanel = new Grid(); OptionPanel.setTitle( @AHLCG-Options ); @@ -1483,34 +1760,10 @@ function layoutGuidePortraitOptions( diy, bindings, faces, bindingFaceIndex, por // update portrait pan/scale, stencil PositionList.addActionListener( function updatePosition( actionEvent ) { - try { - // assume pan is 0 before this has run -> run this once when component is created - if ( ( portrait.getPanX() == 0.0 && portrait.getPanY() == 0.0 ) || (String)(PositionList.getSelectedItem()) != $( 'PositionPortrait'+ (portraitIndex+1) ) ) { - // update portrait positioning - let region = getGuidePortraitRegion( diy, (String)(PositionList.getSelectedItem()) ); - - if ( region == null ) { - portrait.pan = Point2D.Float( 0, 0 ); - portrait.scale = 1.0; - } - else { - let image = portrait.image; - - let clipDimension = portrait.getClipDimensions(); - - let coveringScale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); - - portrait.pan = Point2D.Float( region.x + (region.width - clipDimension.width) / 2, region.y + (region.height - clipDimension.height) / 2); - portrait.scale = ImageUtilities.idealCoveringScaleForImage( region.width, region.height, image.getWidth(), image.getHeight() ); - portrait.scale = coveringScale; - - panel.portrait = portrait; - } - } - createPortraitStencil( diy, portrait, panel, (String)(PositionList.getSelectedItem()), $PageType ); - } catch ( ex ) { - Error.handleUncaught( ex ); + if ( ( portrait.getPanX() == 0.0 && portrait.getPanY() == 0.0 ) || (String)(PositionList.getSelectedItem()) != $( 'PositionPortrait'+ (portraitIndex+1) )) { + let iportrait = setupGuidePortrait( diy, portraitIndex, (String)(PositionList.getSelectedItem()), true ); + panel.portrait = portrait; } }); @@ -1519,11 +1772,11 @@ function layoutGuidePortraitOptions( diy, bindings, faces, bindingFaceIndex, por ); if ( mirror != null) { - OptionPanel.place( + OptionPanel.place( mirror, 'align right' ); } - + return OptionPanel; } @@ -1533,6 +1786,17 @@ function layoutPortraits( diy, bindings, frontPortrait, backPortrait, mirror, sh return PortraitTabArray[0]; } +function layoutHSBPanel(diy, bindings){ + var HSBTab = new Grid(); + HSBTab.editorTabScrolling = true; + + var panel = new tintPanel(); + bindings.add('tint', panel); + HSBTab.place( panel, 'wrap, pushx, growx' ); + + return HSBTab; +} + function layoutPortraitsWithPanels( diy, bindings, frontPortrait, backPortrait, mirror, share, backArtist ) { var PortraitTab = new Grid(); PortraitTab.editorTabScrolling = true; @@ -1546,16 +1810,16 @@ function layoutPortraitsWithPanels( diy, bindings, frontPortrait, backPortrait, let frontPortraitImagePanel = null; if ( backNeeded ) frontPortraitImagePanel = new portraitPanel( diy, getPortraitIndex( frontPortrait ), @AHLCG-Portrait + ' : '+ @AHLCG-Front ); else frontPortraitImagePanel = new portraitPanel( diy, getPortraitIndex( frontPortrait ), @AHLCG-Portrait ); - + let frontMirrorButton = null; if (mirror) frontMirrorButton = createPortraitMirrorButton( frontPortrait, frontPortraitImagePanel ); - let frontOptionPanel = layoutPortraitOptions( bindings, [0], FACE_FRONT, true, frontMirrorButton, false ); + let frontOptionPanel = layoutPortraitOptions( bindings, [0, 1], FACE_FRONT, true, frontMirrorButton, false ); if ( backNeeded ) frontOptionPanel.setTitle( @AHLCG-Options + ': ' + @AHLCG-Front ); PortraitTab.place( frontPortraitImagePanel, 'wrap, pushx, growx' ); PortraitTab.place( frontOptionPanel, 'wrap, pushx, growx' ); - + resultArray.push( frontPortraitImagePanel ); } if ( backNeeded ) { @@ -1575,6 +1839,47 @@ function layoutPortraitsWithPanels( diy, bindings, frontPortrait, backPortrait, resultArray.push( backPortraitImagePanel ); } + // template replacement + var templatePanel = new Grid(); + templatePanel.setTitle( @AHLCG-TemplateReplacement ); + + var templateFrontField = new textField( '', 30 ); + bindings.add( 'TemplateReplacement', templateFrontField, [0] ); + var templateBackField = new textField( '', 30 ); + bindings.add( 'TemplateReplacementBack', templateBackField, [1] ); + + var templateFrontButton = new button( + @AHLCG-Pref-Select, null, + function(){ + filename = ResourceKit.showImageFileDialog( null ); + if (filename != null) { + templateFrontField.setText(filename); + } + } + ); + templatePanel.place( + @AHLCG-Front, 'align right', templateFrontField, 'pushx, growx', templateFrontButton, 'wrap' + ); + + if ( diy.faceStyle != FaceStyle.PLAIN_BACK ) { + var templateBackButton = new button( + @AHLCG-Pref-Select, null, + function(){ + filename = ResourceKit.showImageFileDialog( null ); + if (filename != null) { + templateBackField.setText(filename); + } + } + ); + + templatePanel.place( + @AHLCG-Back, 'align right', templateBackField, 'pushx, growx', templateBackButton, 'wrap' + ); + } + + PortraitTab.place( templatePanel, 'wrap, pushx, growx' ); + resultArray.push( templatePanel ); + return resultArray; } @@ -1590,11 +1895,11 @@ function layoutGuidePortraits( diy, bindings, leftPortrait, rightPortrait, mirro if ( leftNeeded ) { if ( rightNeeded ) leftPortraitImagePanel = new portraitPanel( diy, getPortraitIndex( leftPortrait ), @AHLCG-Portrait + ' : '+ @AHLCG-LeftTop ); - else leftPortraitImagePanel = new portraitPanel( diy, getPortraitIndex( leftPortrait ), @AHLCG-Portrait ); + else leftPortraitImagePanel = new portraitPanel( diy, getPortraitIndex( leftPortrait ), @AHLCG-Portrait ); let leftMirrorButton = null; if (mirror) leftMirrorButton = createPortraitMirrorButton( leftPortrait, leftPortraitImagePanel ); - + let leftOptionPanel = layoutGuidePortraitOptions( diy, bindings, [0], FACE_FRONT, leftPortrait, leftPortraitImagePanel, Eons.namedObjects.AHLCGObject.comboPortraitPosition1, leftMirrorButton ); if ( rightNeeded ) leftOptionPanel.setTitle( @AHLCG-Options + ': ' + @AHLCG-LeftTop ); @@ -1634,14 +1939,8 @@ function layoutCollection( bindings, portraitPanel, useSpinner, selectFaces, fac var icon = $( 'AHLCG-UserCollectionIcon' + type, '' ); PortraitList[ getPortraitIndex( 'Collection' ) ].setSource( icon ); -// image = createInvertedImage( PortraitList[getPortraitIndex( 'Collection' )].getImage() ); - - if ( CardTypes[1] == 'Story') image = ImageUtils.read( icon ); // story/story - else image = createInvertedImage( ImageUtils.read( icon ) ); - - PortraitList[ getPortraitIndex( 'Collection' ) ].setImage( icon, image ); portraitPanel.updatePanel(); - setPortraitPanelFileFieldEnabled( portraitPanel, false ); + setPortraitPanelFileFieldEnabled( portraitPanel, false ); } else { setPortraitPanelFileFieldEnabled( portraitPanel, true ); @@ -1671,7 +1970,7 @@ function layoutCollection( bindings, portraitPanel, useSpinner, selectFaces, fac bindings.add( 'ShowCollectionNumberFront' + BindingSuffixes[bindingFaceIndex], frontBox, [0, 1] ); bindings.add( 'ShowCollectionNumberBack' + BindingSuffixes[bindingFaceIndex], backBox, [0, 1] ); - + CollectionPanel.place( @AHLCG-CollectionNumber, 'align right', collectionNumber, 'align left', frontBox, 'align right', backBox, 'align right, gapx 10' @@ -1683,6 +1982,11 @@ function layoutCollection( bindings, portraitPanel, useSpinner, selectFaces, fac ); } + var flipBox = new checkBox( 'Flip A/B suffix', false, null ); + bindings.add( 'flipSuffix', flipBox, [false, true]); + CollectionPanel.place( + 'Flip', 'align right', flipBox, 'wrap' + ); return CollectionPanel; } @@ -1698,13 +2002,17 @@ function layoutEncounter( bindings, portraitPanel, selectFaces, iconFaces, numbe try { var type = Eons.namedObjects.AHLCGObject.encounterTypes[EncounterList.getSelectedIndex()]; $EncounterType = type.toString(); - + if ( type > 0 ) { - var icon = $( 'AHLCG-UserEncounterIcon' + type, '' ); + var icon = ImageUtils.read( $( 'AHLCG-UserEncounterIcon' + type, '' )); - PortraitList[ getPortraitIndex( 'Encounter' ) ].setSource( icon ); + if (CardTypes[0] == 'Ultimatum') { + icon = createInvertedImage( icon ); + } + + PortraitList[ getPortraitIndex( 'Encounter' ) ].setImage( $( 'AHLCG-UserEncounterIcon' + type, '' ), icon ); portraitPanel.updatePanel(); - setPortraitPanelFileFieldEnabled( portraitPanel, false ); + setPortraitPanelFileFieldEnabled( portraitPanel, false ); } else { setPortraitPanelFileFieldEnabled( portraitPanel, true ); @@ -1716,15 +2024,55 @@ function layoutEncounter( bindings, portraitPanel, selectFaces, iconFaces, numbe var encounterNumber = new textField( '', 8 ); encounterNumber.setHorizontalAlignment(JTextField.RIGHT); - + bindings.add( 'EncounterNumber' + BindingSuffixes[bindingFaceIndex], encounterNumber, numberFaces ); - + var totalNumber = new textField( "", 4); bindings.add( 'EncounterTotal' + BindingSuffixes[bindingFaceIndex], totalNumber, numberFaces ); - EncounterPanel.place( - @AHLCG-Set, 'align right', EncounterList, 'wrap, pushx, growx, span 3' - ); + var frontSymbolBox = null; + var backSymbolBox = null; + + if ( CardTypes[FACE_FRONT] == 'Location' ) { + frontSymbolBox = new checkBox( @AHLCG-Front, true, null ); + bindings.add( 'ShowEncounterIcon', frontSymbolBox, [0] ); + } + if ( CardTypes[FACE_BACK] == 'Location' || CardTypes[FACE_BACK] == 'LocationBack' ) { + backSymbolBox = new checkBox( @AHLCG-Back, true, null ); + bindings.add( 'ShowEncounterIconBack', backSymbolBox, [1] ); + } + + if ( frontSymbolBox || backSymbolBox ) { + let listOptions = ( CardTypes[FACE_FRONT] == 'Story' ) ? 'pushx, growx, span 2' : 'pushx, growx' + + EncounterPanel.place( + @AHLCG-Set, 'align right', EncounterList, listOptions + ); + + if ( frontSymbolBox ) { + let boxOptions = ( backSymbolBox ) ? 'align left' : 'wrap, align right'; + + EncounterPanel.place( + '', 'align right', frontSymbolBox, boxOptions + ); + } + + if ( backSymbolBox ) { + if ( frontSymbolBox ) { + EncounterPanel.place( + '', 'align right' + ); + } + EncounterPanel.place( + backSymbolBox, 'wrap, align right' + ); + } + } + else { + EncounterPanel.place( + @AHLCG-Set, 'align right', EncounterList, 'wrap, pushx, growx, span 3' + ); + } if (selectFaces) { var frontBox = new checkBox( @AHLCG-Front, true, null ); @@ -1732,7 +2080,7 @@ function layoutEncounter( bindings, portraitPanel, selectFaces, iconFaces, numbe bindings.add( 'ShowEncounterNumberFront' + BindingSuffixes[bindingFaceIndex], frontBox, [0, 1] ); bindings.add( 'ShowEncounterNumberBack' + BindingSuffixes[bindingFaceIndex], backBox, [0, 1] ); - + EncounterPanel.place( @AHLCG-SetNumber, 'align right', encounterNumber, 'align left, split 3', ' / ', 'align left', totalNumber, 'align left', @@ -1746,6 +2094,11 @@ function layoutEncounter( bindings, portraitPanel, selectFaces, iconFaces, numbe ); } + var invertButton = createPortraitInvertButton( "Encounter" ); + EncounterPanel.place( + "Invert", 'align right', invertButton, 'align right' + ); + return EncounterPanel; } @@ -1761,13 +2114,13 @@ function layoutSimpleEncounter( bindings, portraitPanel, iconFaces, bindingFaceI try { var type = Eons.namedObjects.AHLCGObject.encounterTypes[EncounterList.getSelectedIndex()]; $EncounterType = type.toString(); - + if ( type > 0 ) { var icon = $( 'AHLCG-UserEncounterIcon' + type, '' ); PortraitList[ getPortraitIndex( 'Encounter' ) ].setSource( icon ); portraitPanel.updatePanel(); - setPortraitPanelFileFieldEnabled( portraitPanel, false ); + setPortraitPanelFileFieldEnabled( portraitPanel, false ); } else { setPortraitPanelFileFieldEnabled( portraitPanel, true ); @@ -1782,4 +2135,4 @@ function layoutSimpleEncounter( bindings, portraitPanel, iconFaces, bindingFaceI ); return EncounterPanel; -} \ No newline at end of file +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-preferences.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-preferences.js index 172e309..2e384a1 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-preferences.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-preferences.js @@ -19,6 +19,9 @@ importClass( javax.swing.table.DefaultTableModel ); importClass( ca.cgjennings.apps.arkham.diy.SBDropDown ); useLibrary( 'res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js' ); +useLibrary( 'res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js' ); + +var defaultFontSettingsChanged; function createSetData() { var data = { @@ -173,6 +176,45 @@ function createSetData() { this.dcComboBox = comboBox( itemArray ); this.dcComboBox.setPreferredSize( boxSize ); + + // font controls + var fontArray = createFontData(); + + function modifyFont( actionEvent ) { + defaultFontSettingsChanged = true; + } + + this.fTitleComboBox = comboBox( fontArray, modifyFont ); + this.fSubtitleComboBox = comboBox( fontArray, modifyFont ); + this.fCardTypeComboBox = comboBox( fontArray, modifyFont ); + this.fBodyComboBox = comboBox( fontArray, modifyFont ); + this.fTraitComboBox = comboBox( fontArray, modifyFont ); + this.fVictoryComboBox = comboBox( fontArray, modifyFont ); + this.fFlavorComboBox = comboBox( fontArray, modifyFont ); + this.fStoryComboBox = comboBox( fontArray, modifyFont ); + this.fCollectionComboBox = comboBox( fontArray, modifyFont ); + + this.fTitleSize = spinner( 1, 200, 1, 100, modifyFont ); + this.fSubtitleSize = spinner( 1, 200, 1, 100, modifyFont ); + this.fCardTypeSize = spinner( 1, 200, 1, 100, modifyFont ); + this.fBodySize = spinner( 1, 200, 1, 100, modifyFont ); + this.fTraitSize = spinner( 1, 200, 1, 100, modifyFont ); + this.fVictorySize = spinner( 1, 200, 1, 100, modifyFont ); + this.fFlavorSize = spinner( 1, 200, 1, 100, modifyFont ); + this.fStorySize = spinner( 1, 200, 1, 100, modifyFont ); + this.fCollectionSize = spinner( 1, 200, 1, 100, modifyFont ); + + this.fTitleOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fSubtitleOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fCardTypeOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fBodyOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fTraitOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fVictoryOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fFlavorOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fStoryOffset = spinner( -10, 10, 1, 0, modifyFont ); + this.fCollectionOffset = spinner( -10, 10, 1, 0, modifyFont ); + + this.fRotateTitleCheckBox = checkBox( @AHLCG-Pref-RotateTitle, true, modifyFont ); } catch ( ex ) { Error.handleUncaught( ex ); } @@ -182,11 +224,22 @@ function createSetData() { return data; } +function createFontData() { + let families = FontUtils.availableFontFamilies(); + families.splice( 0, 0, 'Default' ); + + return families; +} +/* +function defaultFontListener( actionEvent ) { + defaultFontSettingsChanged = true; +} +*/ function addPreferences() { try { var data = createSetData(); data.initialize(); - + var seTable = new JResizableTable( data.seTableModel ); seTable.getColumnModel().getColumn(0).setPreferredWidth(20); seTable.getColumnModel().getColumn(1).setPreferredWidth(250); @@ -249,15 +302,14 @@ try { storeSettings: function() { storeAHLCGPreferences( data ); } - }, @AHLCG, 'ArkhamHorrorLCG/icons/AHLCG-Game.png' ); + }, @AHLCG, 'ArkhamHorrorLCG/icons/AHLCG-GameL.png' ); - pc.heading( @AHLCG ); - pc.subheading( @AHLCG-Pref-DefaultValues ); + pc.heading( @AHLCG-Pref-DefaultValues ); pc.label( @AHLCG-Pref-DefaultSet ); pc.join(); pc.addUnmanagedControl( data.deComboBox ); - + pc.label( @AHLCG-Pref-DefaultCollection ); pc.join(); pc.addUnmanagedControl( data.dcComboBox ); @@ -268,7 +320,7 @@ try { data.scTableModel.addTableModelListener( cTableListener ); data.ucTableModel.addTableModelListener( cTableListener ); - pc.subheading( @AHLCG-Pref-EncounterSets ); + pc.heading( @AHLCG-Pref-EncounterSets ); pc.join(); pc.addTip( @AHLCG-PrefEncounterTip ); pc.indent(); @@ -378,7 +430,7 @@ try { pc.label( @AHLCG-Pref-AddCustomSet ); pc.addUnmanagedControl( ueOuterPanel ); - pc.subheading( @AHLCG-Pref-Collections ); + pc.heading( @AHLCG-Pref-Collections ); pc.join(); pc.addTip( @AHLCG-PrefCollectionTip ); pc.indent(); @@ -488,6 +540,135 @@ try { pc.label( @AHLCG-Pref-AddCustomCollection ); pc.addUnmanagedControl( ucOuterPanel ); + pc.heading( @AHLCG-Pref-DefaultFonts ); + pc.join(); + pc.addTip( @AHLCG-PrefDefaultFontsTip ); + + pc.label( @AHLCG-Pref-TitleFont ); + pc.indent(); + pc.addUnmanagedControl( data.fTitleComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fTitleSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fTitleOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-SubtitleFont ); + pc.indent(); + pc.addUnmanagedControl( data.fSubtitleComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fSubtitleSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fSubtitleOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-CardTypeFont ); + pc.indent(); + pc.addUnmanagedControl( data.fCardTypeComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fCardTypeSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fCardTypeOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-BodyFont ); + pc.indent(); + pc.addUnmanagedControl( data.fBodyComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fBodySize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fBodyOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-TraitFont ); + pc.indent(); + pc.addUnmanagedControl( data.fTraitComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fTraitSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fTraitOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-VictoryFont ); + pc.indent(); + pc.addUnmanagedControl( data.fVictoryComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fVictorySize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fVictoryOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-FlavorFont ); + pc.indent(); + pc.addUnmanagedControl( data.fFlavorComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fFlavorSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fFlavorOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-StoryFont ); + pc.indent(); + pc.addUnmanagedControl( data.fStoryComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fStorySize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fStoryOffset ); + pc.unindent(); + + pc.label( @AHLCG-Pref-CollectionFont ); + pc.indent(); + pc.addUnmanagedControl( data.fCollectionComboBox ); + pc.join(); + pc.label( @AHLCG-Pref-Size ); + pc.join(); + pc.addUnmanagedControl( data.fCollectionSize ); + pc.join(); + pc.label( @AHLCG-Pref-VerticalOffset ); + pc.join(); + pc.addUnmanagedControl( data.fCollectionOffset ); + pc.unindent(); + + pc.heading( @AHLCG-Pref-LanguageOptions ); + pc.indent(); + pc.addUnmanagedControl( data.fRotateTitleCheckBox ); + pc.join(); + pc.unindent(); + + pc.addResetKeys( 'AHLCG-FontsEdited' ); + Preferences.registerCategory( pc ); } catch ( ex ) { Error.handleUncaught (ex); @@ -517,9 +698,10 @@ function loadAHLCGPreferences( data ) { for( index = 0; index < AHLCGObject.standardEncounterList.length; index++ ) { let entry = AHLCGObject.standardEncounterList[index]; - let collection = AHLCGObject.standardCollectionList[ entry[1] ]; - - let used = loadUsedValue( 'Encounter', entry[3] ); +// let collection = AHLCGObject.standardCollectionList[ entry[1] ]; + let collection = AHLCGObject.standardCollectionList[ getCollectionIndexForID( entry[1] )]; + + let used = loadUsedValue( 'Encounter', entry[3] ); data.seTableModel.addRow( [ used, @( 'AHLCG-' + entry[0] ), @( 'AHLCG-' + collection[0] ), entry[2] ] ); } @@ -540,8 +722,9 @@ function loadAHLCGPreferences( data ) { for( index = 0; index < AHLCGObject.standardCollectionList.length; index++ ) { let entry = AHLCGObject.standardCollectionList[index]; - - let used = loadUsedValue( 'Collection', index ); + +// let used = loadUsedValue( 'Collection', index ); + let used = loadUsedValue( 'Collection', entry[2] ); data.scTableModel.addRow( [ used, @( 'AHLCG-' + entry[0] ), entry[1] ] ); } @@ -560,6 +743,43 @@ function loadAHLCGPreferences( data ) { selectDefaultEncounter( data, defaultEncounter ); selectDefaultCollection( data, defaultCollection ); + + // default fonts + updateDefaultFont( data.fTitleComboBox, settings.get( 'AHLCG-DefaultTitleFont', 'Default' ) ); + + updateDefaultFont( data.fSubtitleComboBox, settings.get( 'AHLCG-DefaultSubtitleFont', 'Default' ) ); + updateDefaultFont( data.fCardTypeComboBox, settings.get( 'AHLCG-DefaultCardTypeFont', 'Default' ) ); + updateDefaultFont( data.fBodyComboBox, settings.get( 'AHLCG-DefaultBodyFont', 'Default' ) ); + updateDefaultFont( data.fTraitComboBox, settings.get( 'AHLCG-DefaultTraitFont', 'Default' ) ); + updateDefaultFont( data.fVictoryComboBox, settings.get( 'AHLCG-DefaultVictoryFont', 'Default' ) ); + updateDefaultFont( data.fFlavorComboBox, settings.get( 'AHLCG-DefaultFlavorFont', 'Default' ) ); + updateDefaultFont( data.fStoryComboBox, settings.get( 'AHLCG-DefaultStoryFont', 'Default' ) ); + updateDefaultFont( data.fCollectionComboBox, settings.get( 'AHLCG-DefaultCollectionFont', 'Default' ) ); + + data.fTitleSize.setValue( parseInt( settings.get( 'AHLCG-DefaultTitleFontSize', 100 ))); + data.fSubtitleSize.setValue( parseInt( settings.get( 'AHLCG-DefaultSubtitleFontSize', 100 ))); + data.fCardTypeSize.setValue( parseInt( settings.get( 'AHLCG-DefaultCardTypeFontSize', 100 ))); + data.fBodySize.setValue( parseInt( settings.get( 'AHLCG-DefaultBodyFontSize', 100 ))); + data.fTraitSize.setValue( parseInt( settings.get( 'AHLCG-DefaultTraitFontSize', 100 ))); + data.fVictorySize.setValue( parseInt( settings.get( 'AHLCG-DefaultVictoryFontSize', 100 ))); + data.fFlavorSize.setValue( parseInt( settings.get( 'AHLCG-DefaultFlavorFontSize', 100 ))); + data.fStorySize.setValue( parseInt( settings.get( 'AHLCG-DefaultStoryFontSize', 100 ))); + data.fCollectionSize.setValue( parseInt( settings.get( 'AHLCG-DefaultCollectionFontSize', 100 ))); + + data.fTitleOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultTitleFontOffset', 0 ))); + data.fSubtitleOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultSubtitleFontOffset', 0 ))); + data.fCardTypeOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultCardTypeFontOffset', 0 ))); + data.fBodyOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultBodyFontOffset', 0 ))); + data.fTraitOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultTraitFontOffset', 0 ))); + data.fVictoryOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultVictoryFontOffset', 0 ))); + data.fFlavorOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultFlavorFontOffset', 0 ))); + data.fStoryOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultStoryFontOffset', 0 ))); + data.fCollectionOffset.setValue( parseInt( settings.get( 'AHLCG-DefaultCollectionFontOffset', 0 ))); + + data.fRotateTitleCheckBox.setSelected( settings.getBoolean( 'AHLCG-DefaultRotateTitle', true )); + + settings.reset( 'AHLCG-FontsEdited' ); + defaultFontSettingsChanged = false; } function storeAHLCGPreferences( data ) { @@ -642,7 +862,22 @@ function storeAHLCGPreferences( data ) { usedString = ''; settingsIndex = 1; for( index = 0; index < AHLCGObject.standardCollectionList.length; index++ ) { - let value = data.scTableModel.getValueAt( index, 0 ); + // we need to convert this index into the used setting string index + let usedIndex = -1; + + for ( i = 0; i < AHLCGObject.standardCollectionList.length; i++) { + let entry = AHLCGObject.standardCollectionList[i]; + + if ( entry[2] == index ) { + usedIndex = i; + break; + } + } + + if (usedIndex < 0) continue; + +// let value = data.scTableModel.getValueAt( index, 0 ); + let value = data.scTableModel.getValueAt( usedIndex, 0 ); if ( value == java.lang.Boolean(false) ) usedString = usedString + '0'; else usedString = usedString + '1'; @@ -689,6 +924,44 @@ function storeAHLCGPreferences( data ) { updateUsedEncounterSets( AHLCGObject ); updateUsedCollections( AHLCGObject ); + + // default fonts + if (defaultFontSettingsChanged) { + settings.set( 'AHLCG-DefaultTitleFont', data.fTitleComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultSubtitleFont', data.fSubtitleComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultCardTypeFont', data.fCardTypeComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultBodyFont', data.fBodyComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultTraitFont', data.fTraitComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultVictoryFont', data.fVictoryComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultFlavorFont', data.fFlavorComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultStoryFont', data.fStoryComboBox.getSelectedItem().toString() ); + settings.set( 'AHLCG-DefaultCollectionFont', data.fCollectionComboBox.getSelectedItem().toString() ); + + settings.set( 'AHLCG-DefaultTitleFontSize', data.fTitleSize.getValue() ); + settings.set( 'AHLCG-DefaultSubtitleFontSize', data.fSubtitleSize.getValue() ); + settings.set( 'AHLCG-DefaultCardTypeFontSize', data.fCardTypeSize.getValue() ); + settings.set( 'AHLCG-DefaultBodyFontSize', data.fBodySize.getValue() ); + settings.set( 'AHLCG-DefaultTraitFontSize', data.fTraitSize.getValue() ); + settings.set( 'AHLCG-DefaultVictoryFontSize', data.fVictorySize.getValue() ); + settings.set( 'AHLCG-DefaultFlavorFontSize', data.fFlavorSize.getValue() ); + settings.set( 'AHLCG-DefaultStoryFontSize', data.fStorySize.getValue() ); + settings.set( 'AHLCG-DefaultCollectionFontSize', data.fCollectionSize.getValue() ); + + settings.set( 'AHLCG-DefaultTitleFontOffset', data.fTitleOffset.getValue() ); + settings.set( 'AHLCG-DefaultSubtitleFontOffset', data.fSubtitleOffset.getValue() ); + settings.set( 'AHLCG-DefaultCardTypeFontOffset', data.fCardTypeOffset.getValue() ); + settings.set( 'AHLCG-DefaultBodyFontOffset', data.fBodyOffset.getValue() ); + settings.set( 'AHLCG-DefaultTraitFontOffset', data.fTraitOffset.getValue() ); + settings.set( 'AHLCG-DefaultVictoryFontOffset', data.fVictoryOffset.getValue() ); + settings.set( 'AHLCG-DefaultFlavorFontOffset', data.fFlavorOffset.getValue() ); + settings.set( 'AHLCG-DefaultStoryFontOffset', data.fStoryOffset.getValue() ); + settings.set( 'AHLCG-DefaultCollectionFontOffset', data.fCollectionOffset.getValue() ); + + settings.setBoolean( 'AHLCG-DefaultRotateTitle', data.fRotateTitleCheckBox.isSelected() ); + + // I don't know why this is necessary, but if I just addResetKeys one of the main ones, it always triggers, even if we don't write it here + settings.setBoolean( 'AHLCG-FontsEdited', true ); + } } function verifyUserEncounter( name, icon, tag, data ) { @@ -912,4 +1185,28 @@ function selectDefaultCollection( data, value ) { } data.dcComboBox.setSelectedIndex(selectedIndex); +} + +function getCollectionIndexForID(collectionID) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + for (i = 0; i < AHLCGObject.standardCollectionList.length; i++) { + if ( AHLCGObject.standardCollectionList[i][2] == collectionID ) return i; + } +} + +function updateDefaultFont( combobox, value ) { + var selectedItem = combobox.getSelectedItem(); + var selectedIndex = 0; // Default + + for ( let i = 0; i < combobox.getItemCount(); i++) { + let item = combobox.getItemAt(i).toString(); + + if ( item == value ) { + selectedIndex = i; + break; + } + } + + combobox.setSelectedIndex(selectedIndex); } \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js index 20d2486..b7b2249 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js @@ -6,7 +6,7 @@ importClass( java.awt.Dimension ); const PortraitList = []; -var IconSize = 24; +var IconSize = 24; const FACE_FRONT = 0; const FACE_BACK = 1; @@ -19,7 +19,7 @@ function getDescription() { } function getVersion() { - return 1.0; + return 9.93; } function getLocale() { @@ -36,13 +36,13 @@ function image( resource, folder, ext ) { if( ext == undefined ) { ext = 'jp2'; } - + var imageName = 'ArkhamHorrorLCG/'; - + if( folder != undefined && folder.length > 0 ) imageName += folder + '/'; - + imageName += resource + '.' + ext; - + return ImageUtils.get( imageName ); } @@ -50,22 +50,26 @@ function image( resource, folder, ext ) { function readPortraits( diy, oos, typeList, readEncounter ) { for ( let index = 0; index < typeList.length; index++ ) { // read portrait - let fullKey = typeList[index]; - let partArray = fullKey.split('-'); - let key = partArray[0]; + var fullKey = typeList[index]; + var partArray = fullKey.split('-'); + var key = partArray[0]; if ( key == 'Encounter' && !readEncounter ) { createPortrait( diy, fullKey ); } else { - PortraitList[index] = oos.readObject(); + try { + PortraitList[index] = oos.readObject(); + } catch ( ex ) { + createPortrait( diy, fullKey ); + } - // update base keys for newer versions... + // update base keys for newer versions... let key = PortraitList[index].getBaseKey(); let searchKey = ''; let replaceKey = ''; - + if ( key ) { if ( key.indexOf( 'EncounterPortrait' ) >= 0 ) { searchKey = 'EncounterPortrait'; @@ -84,24 +88,24 @@ function readPortraits( diy, oos, typeList, readEncounter ) { replaceKey = 'Portrait'; } } - + if ( searchKey != '' ) { let splitArr = key.split( searchKey ); - + let newKey = key.replace( searchKey, replaceKey ); - + diy.settings.set( splitArr[0] + replaceKey + '-portrait-template', $( splitArr[0] + searchKey + '-portrait-template' ) ); diy.settings.set( splitArr[0] + replaceKey + '-portrait-panx', $( splitArr[0] + searchKey + '-portrait-panx' ) ); diy.settings.set( splitArr[0] + replaceKey + '-portrait-pany', $( splitArr[0] + searchKey + '-portrait-pany' ) ); diy.settings.set( splitArr[0] + replaceKey + '-portrait-rotation', $( splitArr[0] + searchKey + '-portrait-rotation' ) ); diy.settings.set( splitArr[0] + replaceKey + '-portrait-scale', $( splitArr[0] + searchKey + '-portrait-scale' ) ); - + diy.settings.reset( splitArr[0] + searchKey + '-portrait-template' ); diy.settings.reset( splitArr[0] + searchKey + '-portrait-panx' ); diy.settings.reset( splitArr[0] + searchKey + '-portrait-pany' ); diy.settings.reset( splitArr[0] + searchKey + '-portrait-rotation' ); diy.settings.reset( splitArr[0] + searchKey + '-portrait-scale' ); - + let newPortrait = new DefaultPortrait( newKey, PortraitList[index] ); PortraitList[index] = newPortrait; } @@ -112,7 +116,7 @@ function readPortraits( diy, oos, typeList, readEncounter ) { function writePortraits( oos, typeList ) { for ( let index = 0; index < typeList.length; index++) { let portrait = getPortrait( index ); - + oos.writeObject( portrait ); } } @@ -121,20 +125,20 @@ function setDefaultEncounter() { $Encounter = Settings.getUser().get( 'AHLCG-DefaultEncounterSet' ); $EncounterNumber = '1'; $EncounterTotal = '1'; - - updateEncounter(); + + updateEncounter(); } function setDefaultCollection() { $Collection = Settings.getUser().get( 'AHLCG-DefaultCollection' ); $CollectionNumber = '1'; - - updateCollection(); + + updateCollection(); } function updateUsedEncounterSets( o ) { var settings = Settings.getUser(); - + o.comboEncounter = []; o.encounterTypes = []; @@ -144,19 +148,18 @@ function updateUsedEncounterSets( o ) { o.comboEncounter[index] = ListItem( item, @('AHLCG-' + item), - ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 12, 12) + ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 24, 24) ); - + // Custom (index == 0): -1 // All others: 0 if (index == 0) o.encounterTypes[index] = -1; else o.encounterTypes[index] = 0; } - - // Standard: 0 + + // Standard: 0 for( let index = 0; index < o.standardEncounterList.length; index++ ) { let entry = o.standardEncounterList[index]; - let item = entry[0]; let used = loadUsedValue( 'Encounter', entry[3] ); @@ -164,13 +167,13 @@ function updateUsedEncounterSets( o ) { if (used) { o.comboEncounter[o.comboEncounter.length] = ListItem( item, @('AHLCG-' + item), - ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 12, 12) + ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 24, 24) ); o.encounterTypes[o.encounterTypes.length] = 0; - } + } } - + var userCount = settings.getInt( 'AHLCG-UserEncounterCount', 0 ); // User: Settings index @@ -183,7 +186,7 @@ function updateUsedEncounterSets( o ) { let icon = settings.get( 'AHLCG-UserEncounterIcon' + (index+1), '' ); try { - let image = ImageUtils.createIcon( ImageUtils.read( icon ), 12, 12); + let image = ImageUtils.createIcon( ImageUtils.read( icon ), 24, 24); o.comboEncounter[o.comboEncounter.length] = ListItem( item, name, @@ -192,7 +195,7 @@ function updateUsedEncounterSets( o ) { o.encounterTypes[o.encounterTypes.length] = index+1; } catch (ex) { - if ( ex.javaException instanceof javax.imageio.IIOException ) { + if ( ex.javaException instanceof javax.imageio.IIOException ) { // means image could not be read // don't add it to list, we can safely ignore this } @@ -200,13 +203,13 @@ function updateUsedEncounterSets( o ) { Error.handleUncaught( ex ); } } - } - } + } + } } function updateUsedCollections( o ) { var settings = Settings.getUser(); - + o.comboCollection = []; o.collectionTypes = []; @@ -216,32 +219,33 @@ function updateUsedCollections( o ) { o.comboCollection[index] = ListItem( item, @('AHLCG-' + item), - ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 12, 12) + ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 24, 24) ); - + // Custom (index == 0): -1 // All others: 0 if (index == 0) o.collectionTypes[index] = -1; else o.collectionTypes[index] = 0; } - - // Standard: 0 + + // Standard: 0 for( let index = 0; index < o.standardCollectionList.length; index++ ) { let entry = o.standardCollectionList[index]; let item = entry[0]; - - let used = loadUsedValue( 'Collection', index ); + +// let used = loadUsedValue( 'Collection', index ); + let used = loadUsedValue( 'Collection', entry[2] ); if (used) { o.comboCollection[o.comboCollection.length] = ListItem( item, @('AHLCG-' + item), - ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 12, 12) + ImageUtils.createIcon(ImageUtils.get('ArkhamHorrorLCG/icons/AHLCG-' + item + '.png'), 24, 24) ); o.collectionTypes[o.collectionTypes.length] = 0; - } + } } - + var userCount = settings.getInt( 'AHLCG-UserCollectionCount', 0 ); // User: Settings index @@ -254,8 +258,8 @@ function updateUsedCollections( o ) { let icon = settings.get( 'AHLCG-UserCollectionIcon' + (index+1), '' ); try { - let image = ImageUtils.createIcon( ImageUtils.read( icon ), 12, 12); - + let image = ImageUtils.createIcon( ImageUtils.read( icon ), 24, 24); + o.comboCollection[o.comboCollection.length] = ListItem( item, name, image @@ -263,16 +267,16 @@ function updateUsedCollections( o ) { o.collectionTypes[o.collectionTypes.length] = index+1; } catch (ex) { - if ( ex.javaException instanceof javax.imageio.IIOException ) { + if ( ex.javaException instanceof javax.imageio.IIOException ) { // means image could not be read // don't add it to list, we can safely ignore this } else { Error.handleUncaught( ex ); } - } + } } - } + } } function storeUsedValue( type, index, value ) { @@ -308,9 +312,9 @@ function updateCollection() { $CollectionType = '-1'; return; } - + var AHLCGObject = Eons.namedObjects.AHLCGObject; - + for ( let index = 0; index < AHLCGObject.basicCollectionList.length; index++ ) { if ( $Collection == AHLCGObject.basicCollectionList[ index ] ) { $CollectionType = '0'; @@ -322,13 +326,14 @@ function updateCollection() { let entry = AHLCGObject.standardCollectionList[index]; if ( $Collection == entry[0] ) { - let used = loadUsedValue( 'Collection', index ); + // [2] is index of set in the used setting strings + let used = loadUsedValue( 'Collection', entry[2] ); if ( !used ) { - storeUsedValue( 'Collection', index, true ); + storeUsedValue( 'Collection', entry[2], true ); updateUsedCollections( AHLCGObject ); } - + $CollectionType = '0'; return; } @@ -347,19 +352,19 @@ function updateCollection() { } let used = settings.getBoolean( 'AHLCG-UseUserCollection' + (index+1) ); - + if ( !used ) { - settings.setBoolean( 'AHLCG-UseUserCollection' + (index+1), true ); + settings.setBoolean( 'AHLCG-UseUserCollection' + (index+1), true ); updateUsedEncounterSets( AHLCGObject ); } - + $CollectionType = index+1; return; } } - + // was a collection created elsewhere, or that no longer exists - $Collection = 'CustomCollection'; + $Collection = 'CustomCollection'; $CollectionType = '-1'; } @@ -370,10 +375,10 @@ function updateEncounter() { $EncounterType = '-1'; return; } - + var AHLCGObject = Eons.namedObjects.AHLCGObject; var found = false; - + for ( let index = 0; index < AHLCGObject.basicEncounterList.length; index++ ) { if ( $Encounter == AHLCGObject.basicEncounterList[ index ] ) { $EncounterType = '0'; @@ -392,7 +397,7 @@ function updateEncounter() { storeUsedValue( 'Encounter', entry[3], true ); updateUsedEncounterSets( AHLCGObject ); } - + $EncounterType = '0'; return; } @@ -412,58 +417,58 @@ function updateEncounter() { } let used = settings.getBoolean( 'AHLCG-UseUserEncounter' + (index+1) ); - + if ( !used ) { - settings.setBoolean( 'AHLCG-UseUserEncounter' + (index+1), true ); + settings.setBoolean( 'AHLCG-UseUserEncounter' + (index+1), true ); updateUsedEncounterSets( AHLCGObject ); } - + $EncounterType = index+1; return; } } - + // was a set created elsewhere, or that no longer exists - $Encounter = 'CustomEncounterSet'; + $Encounter = 'CustomEncounterSet'; $EncounterType = '-1'; } function clearImage ( g, sheet ) { var w = sheet.getTemplateWidth(); var h = sheet.getTemplateHeight(); - + var image = ImageUtils.create(w, h); - + sheet.paintImage( g, image, new Region(0, 0, w, h) ); } function getForceDisplay( key ) { var forceDisplay = false; - + switch ( key ) { case 'DeckOptions': case 'DeckRequirements': forceDisplay = true; - break; + break; } - + return forceDisplay; } function addSpacing( faceIndex, text, key, diy ) { var forceDisplay = getForceDisplay( key ); - + var sectionText = $( key + BindingSuffixes[faceIndex] ); var sectionSpacing = $( key + BindingSuffixes[faceIndex] + 'Spacing' ); - + if (sectionSpacing == null) return text; - + var spacing = 0; - + if ( forceDisplay || sectionText != '' ) { if (key == 'Traits') spacing = 0.5; else spacing = 1.5; - + if (sectionSpacing != null && sectionSpacing > 0) spacing += parseInt(sectionSpacing); text = text + '\n'; @@ -473,23 +478,23 @@ function addSpacing( faceIndex, text, key, diy ) { text = text + ''; } - + return text; } function addTextPart( faceIndex, text, key, diy ) { var forceDisplay = getForceDisplay( key ); - + if (forceDisplay == true || diy.settings.get( key + BindingSuffixes[faceIndex], '' ) != '') { if ( text != '' ) { text = text + '\n'; } - + var format = ''; var formatEnd = ''; var alignment = ''; var entryText = $( key + BindingSuffixes[faceIndex] ); - + switch( key ) { case 'Traits': format = diy.settings.get( 'AHLCG-Traits-format', '' ); @@ -507,78 +512,34 @@ function addTextPart( faceIndex, text, key, diy ) { alignment = diy.settings.get('AHLCG-Rules-alignment',''); break; case 'Victory': - format = diy.settings.get('AHLCG-Victory-format',''); - formatEnd = diy.settings.get('AHLCG-Victory-formatEnd',''); + format = diy.settings.get('AHLCG-Victory-format',''); + formatEnd = diy.settings.get('AHLCG-Victory-formatEnd',''); alignment = diy.settings.get('AHLCG-Victory-alignment','
'); break; -/* - case 'DeckSize': - format = diy.settings.get('AHLCG-DeckSize-format',#AHLCG-DeckSize-format); - formatEnd = diy.settings.get('AHLCG-DeckSize-formatEnd',#AHLCG-DeckSize-formatEnd); - alignment = diy.settings.get('AHLCG-DeckSize-alignment',''); - break; - case 'SecondaryClass': - format = diy.settings.get('AHLCG-SecondaryClass-format',#AHLCG-SecondaryClass-format); - formatEnd = diy.settings.get('AHLCG-SecondaryClass-formatEnd',''); - alignment = diy.settings.get('AHLCG-SecondaryClass-alignment',''); - break; - case 'DeckOptions': - format = diy.settings.get('AHLCG-DeckOptions-format',#AHLCG-DeckOptions-format); - formatEnd = diy.settings.get('AHLCG-DeckOptions-formatEnd',''); - alignment = diy.settings.get('AHLCG-DeckOptions-alignment',''); - break; - case 'DeckRequirements': - format = diy.settings.get('AHLCG-DeckRequirements-format',#AHLCG-DeckRequirements-format); - formatEnd = diy.settings.get('AHLCG-DeckRequirements-formatEnd',''); - alignment = diy.settings.get('AHLCG-DeckRequirements-alignment',''); - break; - case 'DeckRestrictions': - if (entryText != '') { - format = diy.settings.get('AHLCG-DeckRestrictions-format',#AHLCG-DeckRestrictions-format); - } - else { - format = diy.settings.get('AHLCG-DeckRestrictions-format',''); - } - - formatEnd = diy.settings.get('AHLCG-DeckRestrictions-formatEnd',''); - alignment = diy.settings.get('AHLCG-DeckRestrictions-alignment',''); - break; - case 'AdditionalRequirements': - if (entryText != '') { - format = diy.settings.get('AHLCG-AdditionalRequirements-format',#AHLCG-AdditionalRequirements-format); - } - else { - format = diy.settings.get('AHLCG-AdditionalRequirements-format',''); - } - - formatEnd = diy.settings.get('AHLCG-AdditionalRequirements-formatEnd',''); - alignment = diy.settings.get('AHLCG-AdditionalRequirements-alignment',''); - break; -*/ - case 'Story': + case 'Story': format = diy.settings.get('AHLCG-Story-format',''); formatEnd = diy.settings.get('AHLCG-Story-formatEnd',''); - alignment = diy.settings.get('AHLCG-Story-alignment',''); + alignment = '<' + diy.settings.get('AHLCG-Story-alignment','left') + '>'; break; - case 'ActStory': + case 'ActStory': format = diy.settings.get('AHLCG-Story-format',''); formatEnd = diy.settings.get('AHLCG-Story-formatEnd',''); - alignment = diy.settings.get('AHLCG-Story-alignment',''); + alignment = '<' + diy.settings.get('AHLCG-Story-alignment','left') + '>'; break; - case 'AgendaStory': + case 'AgendaStory': format = diy.settings.get('AHLCG-Story-format',''); formatEnd = diy.settings.get('AHLCG-Story-formatEnd',''); - alignment = diy.settings.get('AHLCG-Story-alignment',''); + alignment = '<' + diy.settings.get('AHLCG-Story-alignment','left') + '>'; break; - case 'Flavor': - format = diy.settings.get('AHLCG-Flavour-format',''); - formatEnd = diy.settings.get('AHLCG-Flavour-formatEnd',''); - alignment = diy.settings.get('AHLCG-Flavour-alignment','
'); + case 'Flavor': + format = diy.settings.get('AHLCG-Flavor-format',''); + formatEnd = diy.settings.get('AHLCG-Flavor-formatEnd',''); + alignment = '<' + diy.settings.get('AHLCG-Flavor-alignment','center') +'>'; break; case 'InvStory': format = diy.settings.get('AHLCG-SmallStory-format',''); formatEnd = diy.settings.get('AHLCG-SmallStory-formatEnd',''); - alignment = diy.settings.get('AHLCG-SmallStory-alignment',''); + alignment = '<' + diy.settings.get('AHLCG-SmallStory-alignment','left') + '>'; break; case 'Text1': case 'Text2': @@ -588,7 +549,41 @@ function addTextPart( faceIndex, text, key, diy ) { case 'Text6': case 'Text7': case 'Text8': - format = '' + $(key + 'NameBack') + ': '; + format = '' + $(key + 'NameBack') + ': '; + formatEnd = ''; + alignment = ''; + break; + case 'CustText1': + case 'CustText2': + case 'CustText3': + case 'CustText4': + case 'CustText5': + case 'CustText6': + case 'CustText7': + case 'CustText8': + case 'CustText9': + case 'CustText10': + var xpBox = '⧠'; + // I do not know why this is necessary for Times New Roman + var xpStart = ''; + var xpEnd = ''; + + if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Arno Pro' ) { + xpBox = '☐'; + xpStart = ''; + xpEnd = ''; + } + + format = xpStart; + + let index = key.match(/\d+/); + let costStr = $( 'CustCost' + index[0] ); + if ( costStr ) cost = parseInt(costStr); + + for ( let i = 0; i < cost; i++ ) { + format = format + xpBox; + } + format = format + xpEnd + ' ' + $( 'CustName' + index[0] ) + '. '; formatEnd = ''; alignment = ''; break; @@ -603,25 +598,30 @@ function addTextPart( faceIndex, text, key, diy ) { function getExpandedKey( faceIndex, key, appendix ) { var fullKey = null; - - if ( appendix == null ) appendix = ''; - - if ( $( 'AHLCG-' + CardTypes[faceIndex] + '-' + key + appendix ) != null ) fullKey = 'AHLCG-' + CardTypes[faceIndex] + '-' + key; - else fullKey = 'AHLCG-' + key; - - return fullKey; -} -function adjustFont() { - var AHLCGObject = Eons.namedObjects.AHLCGObject; + var subtypes = { + 'AgendaPortrait': 'Agenda', + 'WeaknessEnemy': 'Enemy', + 'WeaknessTreachery': 'Treachery', + 'ChaosStory': 'Chaos', + 'StoryChaos': 'Chaos', + 'StoryChaosFull': 'Chaos', + 'KeyBack': 'Key' + }; - for ( let i = 0; i < arguments.length; i++ ) { - let box = arguments[i]; - let style = box.getDefaultStyle(); + if ( appendix == null ) appendix = ''; - style.add( SIZE, style.get(SIZE) * AHLCGObject.baseFontSize ); - box.setDefaultStyle( style ); + if ( $( 'AHLCG-' + CardTypes[faceIndex] + '-' + key + appendix ) != null ) { + fullKey = 'AHLCG-' + CardTypes[faceIndex] + '-' + key; + } + else if ( subtypes[CardTypes[faceIndex]] && $( 'AHLCG-' + subtypes[CardTypes[faceIndex]] + '-' + key + appendix ) != null) { + fullKey = 'AHLCG-' + subtypes[CardTypes[faceIndex]] + '-' + key; + } + else { + fullKey = 'AHLCG-' + key; } + + return fullKey; } function initBodyTags( diy, textBox ) { @@ -630,7 +630,7 @@ function initBodyTags( diy, textBox ) { for( let index = 0; index < AHLCGObject.TagList.length; index++ ){ let item = AHLCGObject.TagList[index]; let repl = $(item+'-tag-replacement'); - + if (repl != null && repl.startsWith('#')) { textBox.setReplacementForTag($(item+'-tag'), #(repl.substr(1))); @@ -640,20 +640,20 @@ function initBodyTags( diy, textBox ) { textBox.setReplacementForTag($(item+'-tag'), repl); } } - + for( let index = 0; index < AHLCGObject.StyleList.length; index++ ) { let item = AHLCGObject.StyleList[index]; textBox.setStyleForTag($(item+'-tag'), diy.settings.getTextStyle(item+'-style',null)); } - + textBox.setReplacementForTag( 'bultab', ' ' ); for ( let index = 0; index < AHLCGObject.standardEncounterList.length; index++ ) { let entry = AHLCGObject.standardEncounterList[ index ]; - + let used = loadUsedValue( 'Encounter', entry[3] ); - if ( used ) { + if ( used ) { textBox.setReplacementForTag( entry[2] + 's', '' ); textBox.setReplacementForTag( entry[2] + 'm', '' ); textBox.setReplacementForTag( entry[2] + 'l', '' ); @@ -662,25 +662,25 @@ function initBodyTags( diy, textBox ) { var settings = Settings.getUser(); var userCount = settings.getInt( 'AHLCG-UserEncounterCount', 0 ); - + for ( let index = 1; index <= userCount; index++ ) { - let tag = settings.get( 'AHLCG-UserEncounterTag' + index ); + let tag = settings.get( 'AHLCG-UserEncounterTag' + index ).toLowerCase();; let icon = settings.get( 'AHLCG-UserEncounterIcon' + index ); let used = settings.getBoolean( 'AHLCG-UseUserEncounter' + index, true ); - + if ( used ) { textBox.setReplacementForTag( tag + 's', '' ); textBox.setReplacementForTag( tag + 'm', '' ); textBox.setReplacementForTag( tag + 'l', '' ); } - } + } for ( let index = 0; index < AHLCGObject.standardCollectionList.length; index++ ) { let entry = AHLCGObject.standardCollectionList[ index ]; - - let used = loadUsedValue( 'Collection', index ); - if (used) { + let used = loadUsedValue( 'Collection', entry[2] ); + + if (used) { textBox.setReplacementForTag( entry[1] + 's', '' ); textBox.setReplacementForTag( entry[1] + 'm', '' ); textBox.setReplacementForTag( entry[1] + 'l', '' ); @@ -688,18 +688,18 @@ function initBodyTags( diy, textBox ) { } userCount = settings.getInt( 'AHLCG-UserCollectionCount', 0 ); - + for ( let index = 1; index <= userCount; index++ ) { - let tag = settings.get( 'AHLCG-UserCollectionTag' + index ); + let tag = settings.get( 'AHLCG-UserCollectionTag' + index ).toLowerCase();; let icon = settings.get( 'AHLCG-UserCollectionIcon' + index ); let used = settings.getBoolean( 'AHLCG-UseUserCollection' + index, true ); - + if ( used ) { textBox.setReplacementForTag( tag + 's', '' ); textBox.setReplacementForTag( tag + 'm', '' ); textBox.setReplacementForTag( tag + 'l', '' ); } - } + } for( let index = 0; index < AHLCGObject.locationIcons.length; index++ ){ let item = AHLCGObject.locationIcons[index]; @@ -717,6 +717,15 @@ function initCopyrightTags( diy, textBox ) { } } +function initSuffixTags( diy, textBox ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + for( let index = 0; index < AHLCGObject.SuffixTagList.length; index++ ){ + let item = AHLCGObject.SuffixTagList[index]; + textBox.setStyleForTag($(item+'-tag'), diy.settings.getTextStyle(item+'-style',null)); + } +} + function initGuideTags( diy, textBox ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -727,42 +736,28 @@ function initGuideTags( diy, textBox ) { } function setPortraitDefaults( diy, faceIndex, key, portraitKey ) { -// println( 'SetPortraitDefaults template : ' + getExpandedKey( faceIndex, portraitKey + '-portrait-template' ) ); -// println( 'SetPortraitDefaults rotation : ' + getExpandedKey( faceIndex, portraitKey + '-portrait-rotation' ) ); -// println( 'SetPortraitDefaults region : ' + getExpandedKey( faceIndex, portraitKey + '-portrait-clip-region' ) ); -// println( 'SetPortraitDefaults keytemplate : ' + getExpandedKey( faceIndex, key + '-portrait-template' ) ); -// println( 'SetPortraitDefaults keyrotation : ' + getExpandedKey( faceIndex, key + '-portrait-rotation' ) ); -// println( 'SetPortraitDefaults keyregion : ' + getExpandedKey( faceIndex, key + '-portrait-clip-region' ) ); if ( diy.settings.get( getExpandedKey( faceIndex, portraitKey + '-portrait-template' ), '' ) == '') { diy.settings.set( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-template', 'ArkhamHorrorLCG/images/empty1x1.png' ); } - + if ( diy.settings.get( getExpandedKey( faceIndex, portraitKey + '-portrait-rotation' ), '' ) == '' ) { - diy.settings.set( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-rotation', '0' ); + diy.settings.set( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-rotation', '0' ); } -//println('setPortraitDefaults'); -//println(diy.settings.get( getExpandedKey( faceIndex, portraitKey + '-portrait-clip-region' ), '') ); -//println($( getExpandedKey( faceIndex, key + '-portrait-clip-region' ) ) ); if ( diy.settings.get( getExpandedKey( faceIndex, portraitKey + '-portrait-clip-region' ), '' ) == '' ) { -// println( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-clip-region = ' + $( getExpandedKey( faceIndex, key + '-portrait-clip-region' ) ) ); - diy.settings.set( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-clip-region', $( getExpandedKey( faceIndex, key + '-portrait-clip-region' ) ) ); + diy.settings.set( 'AHLCG-' + CardTypes[faceIndex] + '-' + portraitKey + '-portrait-clip-region', $( getExpandedKey( faceIndex, key + '-portrait-clip-region' ) ) ); } -// println( 'SetPortraitDefaults posttemplate : ' + $(getExpandedKey( faceIndex, portraitKey + '-portrait-template' ) )); -// println( 'SetPortraitDefaults postrotation : ' + $(getExpandedKey( faceIndex, portraitKey + '-portrait-rotation' ) )); -// println( 'SetPortraitDefaults postregion : ' + $(getExpandedKey( faceIndex, portraitKey + '-portrait-clip-region' ) )); } function createPortrait( diy, fullKey ) { var partArray = fullKey.split('-'); - var key = partArray[0]; -// var portraitKey = key + 'Portrait'; + var key = partArray[0]; var portraitKey = key; var settingsFace; var fillBackground; var allowRotation; var scaleUsesMinimum = false; - + var faces = partArray[1]; var facesArray; @@ -807,10 +802,11 @@ function createPortrait( diy, fullKey ) { setPortraitDefaults( diy, settingsFace, key, portraitKey ); if ( faces == 'Both' ) setPortraitDefaults( diy, FACE_BACK, key, portraitKey ); -//println(getExpandedKey( settingsFace, portraitKey, '-portrait-template' )); -//println($(getExpandedKey( settingsFace, portraitKey, '-portrait-template' ))); + print('Portrait name:'); + print(getExpandedKey(settingsFace, portraitKey, '-portrait-template')); + print('\n'); PortraitList[portraitIndex] = new DefaultPortrait( diy, getExpandedKey( settingsFace, portraitKey, '-portrait-template' ), allowRotation ); - + PortraitList[portraitIndex].facesToUpdate = facesArray; PortraitList[portraitIndex].backgroundFilled = fillBackground; PortraitList[portraitIndex].setScaleUsesMinimum( scaleUsesMinimum ); @@ -818,31 +814,31 @@ function createPortrait( diy, fullKey ) { } function createPortraits( diy, portraitKeys ) { - diy.customPortraitHandling = true; + diy.customPortraitHandling = true; var AHLCGObject = Eons.namedObjects.AHLCGObject; diy.bleedMargin = 0; - for( let index = 0; index < portraitKeys.length; index++ ) { + for ( let index = 0; index < portraitKeys.length; index++ ) { let fullKey = portraitKeys[index]; - + createPortrait( diy, fullKey ); } } function getGuidePortraitRegion( diy, position ) { var region = null; - var bodyWidth = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ).width; + var pageWidth = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ).width; var pageHeight = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ).height; var bodyHeight = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'BodyLeft' + $PageType + '-region') ).height; var pageOffset = pageHeight - bodyHeight; var divisions = 3; if ( $PageType == 'Title' ) divisions = 2; - - var boxWidth = bodyWidth / 2; - var boxHeight = bodyHeight / divisions; + + var boxWidth = pageWidth / 2; + var boxHeight = bodyHeight / divisions; switch ( position ) { case 'TopLeftSmall': @@ -858,63 +854,72 @@ function getGuidePortraitRegion( diy, position ) { region = new Region( 0, pageHeight - bodyHeight/2, boxWidth, bodyHeight/2 ); break; case 'TopRightSmall': - region = new Region( bodyWidth - boxWidth, pageOffset, boxWidth, boxHeight ); + region = new Region( pageWidth - boxWidth, pageOffset, boxWidth, boxHeight ); break; case 'TopRightMedium': - region = new Region( bodyWidth - boxWidth, pageOffset, boxWidth, bodyHeight/2 ); + region = new Region( pageWidth - boxWidth, pageOffset, boxWidth, bodyHeight/2 ); break; case 'BottomRightSmall': - region = new Region( bodyWidth - boxWidth, pageHeight - boxHeight, boxWidth, boxHeight ); + region = new Region( pageWidth - boxWidth, pageHeight - boxHeight, boxWidth, boxHeight ); break; case 'BottomRightMedium': - region = new Region( bodyWidth - boxWidth, pageHeight - bodyHeight/2, boxWidth, bodyHeight/2 ); + region = new Region( pageWidth - boxWidth, pageHeight - bodyHeight/2, boxWidth, bodyHeight/2 ); break; case 'TopLarge': - region = new Region( 0, pageOffset, bodyWidth, boxHeight ); + region = new Region( 0, pageOffset, pageWidth, boxHeight ); + break; + case 'TopHalf': + region = new Region( 0, pageOffset, pageWidth, bodyHeight/2 ); break; case 'BottomLarge': - region = new Region( 0, pageHeight - boxHeight, bodyWidth, boxHeight ); + region = new Region( 0, pageHeight - boxHeight, pageWidth, boxHeight ); + break; + case 'BottomHalf': + region = new Region( 0, pageHeight - bodyHeight/2, pageWidth, bodyHeight/2 ); break; case 'LeftLarge': region = new Region( 0, pageOffset, boxWidth, bodyHeight ); break; case 'RightLarge': - region = new Region( bodyWidth - boxWidth, pageOffset, boxWidth, bodyHeight ); + region = new Region( pageWidth - boxWidth, pageOffset, boxWidth, bodyHeight ); break; case 'TopLeftCorner': - region = new Region( 0, pageOffset, bodyWidth, boxHeight*2 ); + region = new Region( 0, pageOffset, pageWidth, boxHeight*2 ); break; case 'BottomLeftCorner': - region = new Region( 0, pageHeight - boxHeight*2, bodyWidth, boxHeight*2 ); + region = new Region( 0, pageHeight - boxHeight*2, pageWidth, boxHeight*2 ); break; case 'TopRightCorner': - region = new Region( 0, pageOffset, bodyWidth, boxHeight*2 ); + region = new Region( 0, pageOffset, pageWidth, boxHeight*2 ); break; case 'BottomRightCorner': - region = new Region( 0, pageHeight - boxHeight*2, bodyWidth, boxHeight*2 ); + region = new Region( 0, pageHeight - boxHeight*2, pageWidth, boxHeight*2 ); + break; + case 'FullPage': + region = new Region( 0, pageOffset, pageWidth, bodyHeight ); break; } - + return region; } -function createPortraitStencil( diy, portrait, panel, position, pageType ) { - var offset = 30; +function createPortraitStencil( diy, portrait, position, pageType ) { + var offset = 30; // blurring is clipped otherwise var pageOffset = 0; var bodyWidth = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ).width; var pageHeight = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ).height; var bodyHeight = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'BodyLeft' + pageType + '-region') ).height; var divisions = 3; if ( pageType == 'Title' ) { - if ( CardTypes[0] == 'Guide75' ) pageOffset = 307; - else pageOffset = 346; - +// if ( CardTypes[0] == 'Guide75' ) pageOffset = 307; + if ( CardTypes[0] == 'Guide75' ) pageOffset = 313; + else pageOffset = 352; + divisions = 2; } var boxWidth = bodyWidth / 2; - var boxHeight = bodyHeight / divisions; - + var boxHeight = bodyHeight / divisions; var stencil = ImageUtils.create( bodyWidth, pageHeight, true ); var g = stencil.getGraphics(); g.setColor( new Color( 0, 0, 0, 1.0 ) ); @@ -924,7 +929,7 @@ function createPortraitStencil( diy, portrait, panel, position, pageType ) { switch ( position ) { case 'TopLeftSmall': - g.fillRoundRect(offset, pageOffset + offset, boxWidth - offset*2, boxHeight - offset*2, 75, 75 ); + g.fillRoundRect(offset, pageOffset + offset, boxWidth - offset*2, boxHeight - offset*2, 75, 75 ); break; case 'TopLeftMedium': g.fillRoundRect(offset, pageOffset + offset, boxWidth - offset*2, bodyHeight/2 - offset*2, 75, 75 ); @@ -950,9 +955,15 @@ function createPortraitStencil( diy, portrait, panel, position, pageType ) { case 'TopLarge': g.fillRoundRect(offset, pageOffset + offset, bodyWidth - offset*2, boxHeight - offset*2, 75, 75 ); break; + case 'TopHalf': + g.fillRoundRect(offset, pageOffset + offset, bodyWidth - offset*2, bodyHeight/2 - offset*2, 75, 75 ); + break; case 'BottomLarge': g.fillRoundRect(offset, pageHeight - boxHeight + offset, bodyWidth - offset*2, boxHeight - offset*2, 75, 75 ); break; + case 'BottomHalf': + g.fillRoundRect(offset, pageHeight - bodyHeight/2 + offset, bodyWidth - offset*2, bodyHeight/2 - offset*2, 75, 75 ); + break; case 'LeftLarge': g.fillRoundRect(offset, pageOffset + offset, boxWidth - offset*2, bodyHeight - offset*2, 75, 75 ); break; @@ -975,50 +986,56 @@ function createPortraitStencil( diy, portrait, panel, position, pageType ) { g.fillRoundRect(offset, pageHeight - boxHeight + offset, bodyWidth - offset*2, boxHeight - offset*2, 75, 75 ); g.fillRoundRect(bodyWidth - boxWidth + offset, pageHeight - boxHeight*2 + offset, boxWidth - offset*2, boxHeight*2 - offset*2, 75, 75 ); break; + case 'FullPage': + g.fillRoundRect(offset, pageOffset + offset, bodyWidth - offset*2, bodyHeight - offset*2, 75, 75 ); + break; } g.dispose(); stencil = createBlurredImage( stencil ); - + portrait.setClipStencil( stencil ); } function updateGuideBodyRegions( diy, bodyRegions ) { // use portrait options to modify text regions var pageOffset = 0; - var bodyHeight = 947; - var pageHeight = 947; -// var bodyHeight = 996; -// var pageHeight = 996; + var bodyHeight = 995; + var pageHeight = 995; +//?? var bodyHeight = 947; +//?? var pageHeight = 947; // var bodyHeight = 1196; // var pageHeight = 1196; var divisions = 3; - + var spacer = 15; + if ( $PageType == 'Title' ) { - pageOffset = 307; -// bodyHeight = 689; - bodyHeight = 640; - + pageOffset = 313; + bodyHeight = 682; +// bodyHeight = 640; + if ( CardTypes[0] == 'GuideA4' ) { - pageOffset = 346; - bodyHeight = 1213; + pageOffset = 352; + bodyHeight = 1272; + spacer = -15; } - + divisions = 2; } else if ( CardTypes[0] == 'GuideA4' ) { bodyHeight = 1559; pageHeight = 1559; + spacer = -15; } - var boxHeight = bodyHeight / divisions; + var boxHeight = bodyHeight / divisions; var leftDown = 0; var rightDown = 0; var leftUp = 0; var rightUp = 0; - + for ( let index = 1; index <= 2; index++ ) { switch ( (String)($( 'PositionPortrait' + index )) ) { case 'TopLeftSmall': @@ -1049,10 +1066,18 @@ function updateGuideBodyRegions( diy, bodyRegions ) { leftDown = Math.max( leftDown, boxHeight ); rightDown = Math.max( rightDown, boxHeight ); break; + case 'TopHalf': + leftDown = Math.max( leftDown, bodyHeight/2 ); + rightDown = Math.max( rightDown, bodyHeight/2 ); + break; case 'BottomLarge': leftUp = Math.max( leftUp, boxHeight ); rightUp = Math.max( rightUp, boxHeight ); break; + case 'BottomHalf': + leftUp = Math.max( leftUp, bodyHeight/2 ); + rightUp = Math.max( rightUp, bodyHeight/2 ); + break; case 'TopLeftCorner': rightDown = Math.max( rightDown, boxHeight ); leftDown = Math.max( leftDown, boxHeight*2 ); @@ -1068,15 +1093,21 @@ function updateGuideBodyRegions( diy, bodyRegions ) { case 'BottomRightCorner': leftUp = Math.max( leftUp, boxHeight ); rightUp = Math.max( rightUp, boxHeight*2 ); - break; - } + break; + case 'Full': + leftDown = Math.max( leftDown, bodyHeight ); + rightDown = Math.max( rightDown, bodyHeight ); + break; + } } - bodyRegions[0].y += leftDown + 15; - bodyRegions[0].height -= (leftDown + leftUp + 15); - bodyRegions[1].y += rightDown + 15; - bodyRegions[1].height -= (rightDown + rightUp + 15); - + if (leftDown > spacer) bodyRegions[0].y += leftDown - spacer; + if (leftDown > spacer) bodyRegions[0].height -= leftDown - spacer; + if (leftUp > spacer) bodyRegions[0].height -= leftUp - spacer - 30; // -30 is to give a little extra room to avoid unnecessary red boxes + if (rightDown > spacer) bodyRegions[1].y += rightDown - spacer; + if (rightDown > spacer) bodyRegions[1].height -= rightDown - spacer; + if (rightUp > spacer) bodyRegions[1].height -= rightUp - spacer - 30; + return bodyRegions; } @@ -1086,7 +1117,7 @@ function getPortraitCount() { function getPortrait( index ) { if( index < 0 || index >= PortraitList.length ) { - throw new Error( 'Invalid portrait index: ' + index ); + throw new Error( 'Invalid portrait index: ' + index); } return PortraitList[ index ]; } @@ -1095,15 +1126,15 @@ function getPortraitIndex( portraitName ) { var index = null; for (let i = 0; i < PortraitTypeList.length; i++) { let key = PortraitTypeList[i]; - + let partArray = key.split('-'); - + if (partArray[0] == portraitName ) { index = i; break; } } - + return index; } @@ -1111,21 +1142,21 @@ function getPortraitLocation( portraitName ) { var location = ''; for (let i = 0; i < PortraitTypeList.length; i++) { let key = PortraitTypeList[i]; - + let partArray = key.split('-'); - + if (partArray[0] == portraitName ) { location == partArray[1]; break; } } - + return location; } function getClassInitial( className ) { var initial; - + switch ( className ) { case 'Guardian': initial = 'G'; @@ -1154,6 +1185,9 @@ function getClassInitial( className ) { case 'Survivor': initial = 'V'; break; + case 'ParallelSurvivor': + initial = 'VP'; + break; case 'Weakness': case 'BasicWeakness': initial = 'W'; @@ -1164,9 +1198,18 @@ function getClassInitial( className ) { case 'Neutral': initial = 'N'; break; + case 'Specialist': + initial = 'P'; + break; + case 'ParallelNeutral': + initial = 'NP'; + break; case 'Story': initial = 'S'; break; + case 'StoryWeakness': + initial = 'SW'; + break; case 'Dual': initial = 'D'; break; @@ -1177,7 +1220,7 @@ function getClassInitial( className ) { initial = ''; break; } - + return initial; } @@ -1206,19 +1249,29 @@ function getSkillInitial( skillName ) return initial; } -function isDualClass( cardClass, cardClass2 ) { - var dual = true; +function getClassArray( cardClass, cardClass2, cardClass3 ) { + // return an array of classes + var classes = [ cardClass ]; + + if ( cardClass2 == null ) cardClass2 = 'None'; + if ( cardClass3 == null ) cardClass3 = 'None'; + + if ( cardClass2 == 'None' && cardClass3 == 'None' ) return classes; + + let classInitial = getClassInitial( cardClass ); + + // if not basic class, only return the first class + if ( classInitial != 'G' && classInitial != 'K' && classInitial != 'R' && classInitial != 'M' && classInitial != 'V' ) return classes; // not dual class if the first class isn't a valid one or if the classes match - if ( cardClass2 == 'None' ) dual = false; - else if ( cardClass == cardClass2 ) dual = false; - else { - let classInitial = getClassInitial( cardClass ); + if ( cardClass2 !== cardClass && cardClass2 !== 'None' ) classes.push( cardClass2 ); + if ( cardClass3 !== cardClass && cardClass3 !== cardClass2 && cardClass3 !== 'None' ) classes.push( cardClass3 ); - if ( classInitial != 'G' && classInitial != 'K' && classInitial != 'R' && classInitial != 'M' && classInitial != 'V' ) dual = false; - } + return classes; +} - return dual; +function getClassCount( cardClass, cardClass2, cardClass3 ) { + return getClassArray( cardClass, cardClass2, cardClass3 ).length; } function setPortraitPanelFileFieldEnabled( panel, enabled ) { @@ -1226,7 +1279,7 @@ function setPortraitPanelFileFieldEnabled( panel, enabled ) { for ( var i = 0; i < components.length; i++ ) { let component = components[i]; - + if ( /TextField/.test( component.getClass().getName() ) ) component.setEnabled( enabled ); } } @@ -1260,12 +1313,34 @@ function createPortraitMirrorButton( portraitName, portraitPanel ) { PortraitList[portraitIndex].setRotation(rotation); PortraitList[portraitIndex].setPanX(panX); PortraitList[portraitIndex].setPanY(panY); - + portraitPanel.updatePanel(); } ); } +function createPortraitInvertButton( portraitName ) { + var portraitIndex = getPortraitIndex( portraitName ); + + return new button( + "Invert", null, + function(){ + var scale = PortraitList[portraitIndex].getScale(); + var rotation = PortraitList[portraitIndex].getRotation(); + var panX = PortraitList[portraitIndex].getPanX(); + var panY = PortraitList[portraitIndex].getPanY(); + PortraitList[portraitIndex].setImage( + PortraitList[portraitIndex].getSource(), + ImageUtils.invert(PortraitList[portraitIndex].getImage()) + ); + PortraitList[portraitIndex].setScale(scale); + PortraitList[portraitIndex].setRotation(rotation); + PortraitList[portraitIndex].setPanX(panX); + PortraitList[portraitIndex].setPanY(panY); + } + ); +} + // unused //function createPortraitShareButton( portraitPanel, artistPanel ) { function createPortraitShareButton( bindings ) { @@ -1287,14 +1362,14 @@ function reverseRegion( region ) { function shiftRegion( region, cardType ) { // default shift right var offset = 209; - + if ( cardType == 'Agenda' ) { // shift left offset = -209; } - + region.x = region.x + offset; - + return region; } @@ -1306,11 +1381,44 @@ function updateReversableTextBoxShape( diy, orientation ) { region = reverseRegion( region ); reverse = true; } - + // if ( Body_box != null ) createTextShape( Body_box, region, reverse ); setTextShape( Body_box, region, reverse ); } +function updateCardType( diy, type, faceIndex, defaultType, setting ) { + var templateName = defaultType; + + if ( type == 'Story' ) { + CardTypes[faceIndex] = 'Story'; + templateName = 'Story'; + } + else if ( type == 'Chaos' ) { + CardTypes[faceIndex] = 'StoryChaos'; + templateName = 'Chaos'; + } + else if ( type == 'ChaosFull' ) { + CardTypes[faceIndex] = 'StoryChaosFull'; + templateName = 'Chaos'; + } + else if ( type == 'Player' ) { + CardTypes[faceIndex] = defaultType; + templateName = 'PlayerBack'; + } + else if ( type == 'Encounter' ) { + CardTypes[faceIndex] = defaultType; + templateName = 'EncounterBack'; + } + else { + CardTypes[faceIndex] = defaultType; + templateName = defaultType; + } + + if ( setting.length > 0 ) { + diy.settings.set(setting, 'ArkhamHorrorLCG/templates/AHLCG-' + templateName + '.jp2'); + } +} + function filterFunction(filter){ var f = function filter(source){ return filter.filter.filter(source,null); @@ -1338,18 +1446,12 @@ const createAlphaInvertedImage = filterFunction( const createHSBImage = filterFunction( new ca.cgjennings.graphics.filters.TintFilter( 0.4, 0.8, 0.6 ) ); -/* -function createHSBImage(source) -{ - new ca.cgjennings.graphics.filters.ReplaceHueSaturationFilter(0.4, 1.0, 0.8); - -// var f = function filter(source){ -// return filter.filter.filter(source,null); -// }; -// f.filter = filter; -// return f; + +function tintImage(image, tint) { + var filter = new ca.cgjennings.graphics.filters.TintFilter(tint[0], tint[1], tint[2]); + return filter.filter(image,null); } -*/ + function createStencilImage( source, mask ) { var stencilImage = ImageUtils.resize( ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-' + mask + 'Mask.png'), source.width, source.height ); @@ -1379,7 +1481,7 @@ function createReturnToImage( iconImage ) g.setComposite( java.awt.AlphaComposite.DstOut ); g.drawImage(icon, 4, 4, null); g.dispose(); - + return destImage; } @@ -1407,10 +1509,15 @@ function getPathPointArrays( className ) { case 'Mystic': case 'ParallelMystic': case 'Survivor': + case 'ParallelSurvivor': pointArray[0] = new Array( 0.355, 0.315, 0.276, 0.264, 0.010, 0.010, 1.0, 1.0 ); // pointArray[1] = new Array( 0.000, 0.544, 0.544, 0.631, 0.631, 1.000, 1.0, 0.0 ); pointArray[1] = new Array( 0.000, 0.544, 0.544, 0.611, 0.611, 1.000, 1.0, 0.0 ); break; + case 'ParallelNeutral': + pointArray[0] = new Array( 0.400, 0.357, 0.010, 0.010, 1.0, 1.0 ); + pointArray[1] = new Array( 0.000, 0.468, 0.468, 1.000, 1.0, 0.0 ); + break; case 'Neutral': pointArray[0] = new Array( 0.400, 0.357, 0.010, 0.010, 1.0, 1.0 ); pointArray[1] = new Array( 0.000, 0.468, 0.468, 1.000, 1.0, 0.0 ); diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Act.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Act.js index c9d0d03..2dfa17f 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Act.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Act.js @@ -12,9 +12,9 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -22,27 +22,28 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 12; + + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { - // front + // front $ScenarioIndex = '1'; $ScenarioDeckID = 'a'; $Clues = '2'; $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $ActStory = ''; $Rules = ''; - + $ActStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; - + //back $TitleBack = ''; @@ -66,11 +67,14 @@ function setDefaults() { $VictoryBackSpacing = '0'; $VictoryBack = ''; $ScaleModifier = '100'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -78,13 +82,13 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray ); + var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray, editor ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); + var BackTitlePanel = layoutTitle2( diy, bindings, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -108,24 +112,24 @@ function createInterface( diy, editor ) { BackTextPanelC.editorTabScrolling = true; var VictoryPanel = layoutVictoryText( bindings, FACE_BACK ); - + var scaleSpinner = new spinner( 50, 150, 1, 100 ); bindings.add( 'ScaleModifier', scaleSpinner, [1] ); var BackTextTab = new Grid(); BackTextTab.editorTabScrolling = true; BackTextTab.place( - BackTextPanelA, 'wrap, pushx, growx', + BackTextPanelA, 'wrap, pushx, growx', BackTextPanelB, 'wrap, pushx, growx', BackTextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'pushx, growx, wrap, align left' ); - + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); PortraitTab.addToEditor(editor, @AHLCG-Portraits); - + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); @@ -136,7 +140,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -150,15 +154,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -167,12 +171,14 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + initSuffixTags( diy, Collection_box ); + Encounter_box = markupBox(sheet); Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); @@ -180,6 +186,10 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + initSuffixTags( diy, Index_box ); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Act' ); } function createBackPainter( diy, sheet ) { @@ -199,14 +209,16 @@ function createBackPainter( diy, sheet ) { BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackHeader_box ); - initBodyTags( diy, BackStory_box ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackHeader_box ); + initBodyTags( diy, BackStory_box ); + initBodyTags( diy, BackBody_box ); + BackIndex_box = markupBox(sheet); - BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'ScenarioIndex-style'), null); - BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'ScenarioIndex-alignment')); - BackIndex_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'ScenarioIndex', '-tightness') + '-tightness') ); + BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'BackScenarioIndex-style'), null); + BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'BackScenarioIndex-alignment')); + BackIndex_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'BackScenarioIndex', '-tightness') + '-tightness') ); + + initSuffixTags( diy, BackIndex_box ); } function paintFront( g, diy, sheet ) { @@ -216,15 +228,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'ActStory', 'Rules' ) ); drawClues( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Act, Index_box ); } @@ -232,57 +244,19 @@ function paintBack( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - - drawRotatedName( g, diy, sheet ); + + drawActAgendaBackName( g, diy, sheet ); drawIndentedStoryBody( g, diy, sheet, null, BackHeader_box, BackStory_box, BackBody_box ); drawScenarioIndexBack( g, diy, sheet, #AHLCG-Label-Act, BackIndex_box ); - drawEncounterIcon( g, diy, sheet ); -} + drawEncounterIcon( g, diy, sheet ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.715, 0.830, 0.830, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 1.000, 1.000, 0.957, 0.850, 0.850, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -310,7 +284,7 @@ function onRead(diy, oos) { $AccentedStoryBBackSpacing = '0'; $HeaderCBackSpacing = '0'; $AccentedStoryCBackSpacing = '0'; - + $ScaleModifier = '100'; } if ( diy.version < 6 ) { @@ -328,11 +302,21 @@ function onRead(diy, oos) { $VictoryBack = ''; $VictoryBackSpacing = '0'; } - + if ( diy.version < 13 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + var offset = ( $Orientation == 'Reversed' ) ? -10.0 : 10.0; + PortraitList[0].setPanX(PortraitList[0].getPanX() + offset); + } + updateCollection(); updateEncounter(); - - diy.version = 12; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActAssetStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActAssetStory.js index 3b032ae..73724fd 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActAssetStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActAssetStory.js @@ -14,7 +14,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -24,8 +24,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 11; + + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { @@ -36,12 +37,12 @@ function setDefaults() { $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $ActStory = ''; $Rules = ''; - + $ActStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; @@ -54,31 +55,34 @@ function setDefaults() { $Skill3Back = 'None'; $Skill4Back = 'None'; $Skill5Back = 'None'; - + $CardClassBack = 'Neutral'; $ResourceCostBack = '0'; $SlotBack = 'None'; $Slot2Back = 'None'; $StaminaBack = 'None'; $SanityBack = 'None'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -86,7 +90,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -94,7 +98,7 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutAssetStoryStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -113,15 +117,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -135,15 +139,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -152,7 +156,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -165,6 +169,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Act' ); } function createBackPainter( diy, sheet ) { @@ -186,16 +192,16 @@ function createBackPainter( diy, sheet ) { BackSubtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtype-style'), null); BackSubtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Subtype-alignment')); - BackCost_box = markupBox(sheet); - BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); - BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); +// BackCost_box = markupBox(sheet); +// BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); +// BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); @@ -211,8 +217,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); } function paintFront( g, diy, sheet ) { @@ -222,15 +228,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'ActStory', 'Rules' ) ); drawClues( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Act, Index_box ); } @@ -243,54 +249,30 @@ function paintBack( g, diy, sheet ) { drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, BackName_box ); - if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Neutral', true ); - - if ($CardClassBack == 'Weakness' ) { + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, $CardClassBack, true ); + + if ($CardClassBack == 'Weakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -317,11 +299,20 @@ function onRead(diy, oos) { if ( diy.version < 11 ) { $Slot2Back = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() + 10.0); + } updateCollection(); updateEncounter(); - - diy.version = 11; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActEnemy.js index 31c7f8f..41b3f5e 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActEnemy.js @@ -12,7 +12,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -23,7 +23,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { @@ -37,9 +38,9 @@ function setDefaults() { $ActStory = ''; $Rules = ''; - + $ActStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; @@ -47,32 +48,37 @@ function setDefaults() { $TitleBack = ''; $UniqueBack = '0'; $SubtitleBack = ''; - + $HealthBack = '2'; $PerInvestigatorBack = '0'; $AttackBack = '2'; + $PerInvestigatorAttackBack = '0'; $EvadeBack = '2'; - + $PerInvestigatorEvadeBack = '0'; + $DamageBack = '0'; $HorrorBack = '0'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; - $FlavorBackSpacing = '0'; - + $FlavorBackSpacing = '0'; + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -80,7 +86,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -88,7 +94,7 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutEnemyStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -108,15 +114,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -130,15 +136,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -147,7 +153,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -160,6 +166,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Act' ); } function createBackPainter( diy, sheet ) { @@ -171,7 +179,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -183,8 +191,8 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -193,7 +201,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -211,15 +219,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'ActStory', 'Rules' ) ); drawClues( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Act, Index_box ); } @@ -237,88 +245,20 @@ function paintBack( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $DamageBack > 0 ) drawDamage( g, diy, sheet ); if ( $HorrorBack > 0 ) drawHorror( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.715, 0.830, 0.830, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 1.000, 1.000, 0.957, 0.850, 0.850, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} - -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); - var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * (1 - xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); - for (let i = numPoints-2; i >= 0; i--) { - path.lineTo( x + w * (1 - xPathPoints[i]), y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -347,11 +287,24 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttackBack = '0'; + $PerInvestigatorEvadeBack = '0'; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() + 10.0); + } + updateCollection(); updateEncounter(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActLocation.js index 3e3ab78..75b8548 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActLocation.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActLocation.js @@ -14,7 +14,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -24,8 +24,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -36,25 +37,25 @@ function setDefaults() { $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $ActStory = ''; $Rules = ''; - + $ActStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; // back $TitleBack = ''; $SubtitleBack = ''; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; @@ -73,11 +74,16 @@ function setDefaults() { $Connection6IconBack = 'None'; $ArtistBack = ''; + + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -85,7 +91,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -93,9 +99,9 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutLocationBackStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var BackConnectionsPanel = layoutConnections( bindings, [1], FACE_BACK ); + var BackConnectionsPanel = layoutConnections( false, bindings, [1], FACE_BACK ); BackConnectionsPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -114,15 +120,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -136,15 +142,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -153,7 +159,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -166,6 +172,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Act' ); } function createBackPainter( diy, sheet ) { @@ -187,12 +195,14 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + // just going to use standard body style - Victory_box = markupBox(sheet); - Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); - Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + BackVictory_box = markupBox(sheet); + BackVictory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackVictory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + + initBodyTags( diy, BackVictory_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -218,17 +228,17 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'ActStory', 'Rules' ) ); drawClues( g, diy, sheet ); - if ( $Artist.length > 0 ) drawArtist( g, diy, sheet, false ); + if ( $Artist.length > 0 ) drawArtist( g, diy, sheet, Artist_box, false ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Act, Index_box ); } @@ -239,14 +249,13 @@ function paintBack( g, diy, sheet ) { if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); drawName( g, diy, sheet, BackName_box ); if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, BackVictory_box ); if ( $LocationIconBack != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -257,93 +266,23 @@ function paintBack( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } -// drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + var encounterIcon = false; -function onClear() { - setDefaults(); -} -/* -function createTextShape( textBox, textRegion, reverse) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.715, 0.830, 0.830, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 1.000, 1.000, 0.957, 0.850, 0.850, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } +// drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, encounterIcon, BackCopyright_box, BackArtist_box ); - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); } -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - // asymmetrical - var xPathPoints = new Array( 0.154, 0.000, 0.000, 1.000, 1.000, 0.951, 0.846 ); - var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - - var xControlPoints = new Array( 0.107, 0.107, 0.991, 0.962, 0.936, 0.900 ); - var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - // just create by hand, it's asymmetrical - path.curveTo( x + w * xControlPoints[0], y + h * yControlPoints[0], - x + w * xControlPoints[1], y + h * yControlPoints[1], - x + w * xPathPoints[1], y + h * yPathPoints[1] - ); - - for (let i = 2; i <= 4; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - for (let i = 5; i <= 6; i++) { - path.curveTo( x + w * xControlPoints[i*2 - 8], y + h * yControlPoints[i*2 - 8], - x + w * xControlPoints[i*2 - 7], y + h * yControlPoints[i*2 - 7], - x + w * xPathPoints[i], y + h * yPathPoints[i] - ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); +function onClear() { + setDefaults(); } -*/ + function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -369,11 +308,23 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + $ShowEncounterIconBack = '1'; + } + if ( diy.version < 18) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() + 10.0); + } + updateCollection(); updateEncounter(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActPortrait.js index d262dee..af4ad95 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/ActPortrait.js @@ -12,48 +12,55 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Front', 'Encounter-Front' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; - + diy.name = ''; setDefaults(); createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { - // front + // front $ScenarioIndex = '1'; $ScenarioDeckID = 'a'; $Clues = '2'; $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $ActStory = ''; $Rules = ''; - + $ActStorySpacing = '0'; - + //back $TitleBack = ''; + $StoryBack = ''; $RulesBack = ''; - + + $StoryBackSpacing = '0'; + $Artist = ''; $Copyright = ''; - + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -61,14 +68,13 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutActStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); - + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); @@ -77,13 +83,12 @@ function createInterface( diy, editor ) { var TextTab = layoutText( bindings, [ 'ActStory', 'Rules' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); - - var BackTextTab = layoutText( bindings, [ 'Rules' ], '', FACE_BACK ); + var BackTextTab = layoutText( bindings, [ 'Story', 'Rules' ], '', FACE_BACK ); BackTextTab.editorTabScrolling = true; BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); PortraitTab.addToEditor(editor, @AHLCG-Portraits); - + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); @@ -94,7 +99,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -108,15 +113,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -125,7 +130,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -138,22 +143,24 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Act' ); } function createBackPainter( diy, sheet ) { BackName_box = markupBox(sheet); - + BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -162,7 +169,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -180,15 +187,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'ActStory', 'Rules' ) ); drawClues( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Act, Index_box ); } @@ -198,57 +205,19 @@ function paintBack( g, diy, sheet ) { PortraitList[getPortraitIndex( 'BackPortrait' )].paint( g, sheet.getRenderTarget() ); drawTemplate( g, sheet, '' ); - + drawName( g, diy, sheet, BackName_box ); - drawBody( g, diy, sheet, BackBody_box, new Array( 'Rules' ) ); + drawBody( g, diy, sheet, BackBody_box, new Array( 'Story', 'Rules' ) ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.715, 0.830, 0.830, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 1.000, 1.000, 0.957, 0.850, 0.850, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -268,11 +237,24 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $StoryBack = ''; + $StoryBackSpacing = '0'; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() + 10.0); + } + updateCollection(); updateEncounter(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Agenda.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Agenda.js index dbf9d7e..b0ec5b7 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Agenda.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Agenda.js @@ -12,18 +12,19 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; - diy.name = ''; setDefaults(); createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 12; + + diy.setCornerRadius(8); + //diy.bleedMargin = 9; + diy.version = 17; } function setDefaults() { @@ -34,12 +35,12 @@ function setDefaults() { $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; @@ -62,15 +63,18 @@ function setDefaults() { $AccentedStoryBBackSpacing = '0'; $HeaderCBackSpacing = '0'; $AccentedStoryCBackSpacing = '0'; - + $VictoryBack = ''; $VictoryBackSpacing = '0'; - $ScaleModifier = '100'; + $ScaleModifier = '100'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -78,13 +82,13 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); + var BackTitlePanel = layoutTitle2( diy, bindings, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -115,28 +119,28 @@ function createInterface( diy, editor ) { var BackTextTab = new Grid(); BackTextTab.editorTabScrolling = true; BackTextTab.place( - BackTextPanelA, 'wrap, pushx, growx', - BackTextPanelB, 'wrap, pushx, growx', - BackTextPanelC, 'wrap, pushx, growx', + BackTextPanelA, 'wrap, pushx, growx', + BackTextPanelB, 'wrap, pushx, growx', + BackTextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', - @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' + @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -150,15 +154,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -167,7 +171,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -180,6 +184,10 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + initSuffixTags( diy, Index_box ); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -199,13 +207,16 @@ function createBackPainter( diy, sheet ) { BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackHeader_box ); - initBodyTags( diy, BackStory_box ); - initBodyTags( diy, BackBody_box ); + initBodyTags( diy, BackHeader_box ); + initBodyTags( diy, BackStory_box ); + initBodyTags( diy, BackBody_box ); BackIndex_box = markupBox(sheet); - BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'ScenarioIndex-style'), null); - BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'ScenarioIndex-alignment')); + BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'BackScenarioIndex-style'), null); + BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'BackScenarioIndex-alignment')); + BackIndex_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'BackScenarioIndex', '-tightness') + '-tightness') ); + + initSuffixTags( diy, BackIndex_box ); } function paintFront( g, diy, sheet ) { @@ -215,73 +226,35 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); - + drawTemplate( g, sheet, '' ); - drawRotatedName( g, diy, sheet ); + drawActAgendaBackName( g, diy, sheet ); drawIndentedStoryBody( g, diy, sheet, null, BackHeader_box, BackStory_box, BackBody_box ); drawScenarioIndexBack( g, diy, sheet, #AHLCG-Label-Agenda, BackIndex_box ); - drawEncounterIcon( g, diy, sheet ); -} + drawEncounterIcon( g, diy, sheet ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -309,7 +282,7 @@ function onRead(diy, oos) { $AccentedStoryBBackSpacing = '0'; $HeaderCBackSpacing = '0'; $AccentedStoryCBackSpacing = '0'; - + $ScaleModifier = '100'; } if ( diy.version < 4 ) { @@ -330,11 +303,16 @@ function onRead(diy, oos) { $VictoryBack = ''; $VictoryBackSpacing = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + updateCollection(); updateEncounter(); - diy.version = 12; + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaAssetStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaAssetStory.js index d283ce1..62517c4 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaAssetStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaAssetStory.js @@ -14,7 +14,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -25,7 +25,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -39,9 +40,9 @@ function setDefaults() { $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; @@ -54,31 +55,37 @@ function setDefaults() { $Skill3Back = 'None'; $Skill4Back = 'None'; $Skill5Back = 'None'; - + $CardClassBack = 'Neutral'; $ResourceCostBack = '0'; $SlotBack = 'None'; $Slot2Back = 'None'; $StaminaBack = 'None'; $SanityBack = 'None'; - + + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -86,7 +93,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -94,7 +101,7 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutAssetStoryStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -113,15 +120,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -135,15 +142,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -152,7 +159,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -165,6 +172,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -186,16 +195,16 @@ function createBackPainter( diy, sheet ) { BackSubtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtype-style'), null); BackSubtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Subtype-alignment')); - BackCost_box = markupBox(sheet); - BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); - BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); +// BackCost_box = markupBox(sheet); +// BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); +// BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); @@ -211,8 +220,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); } function paintFront( g, diy, sheet ) { @@ -222,15 +231,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } @@ -243,68 +252,30 @@ function paintBack( g, diy, sheet ) { drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, BackName_box ); - if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Neutral', true ); - - if ($CardClassBack == 'Weakness' ) { + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, $CardClassBack, true ); + + if ($CardClassBack == 'Weakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -333,11 +304,20 @@ function onRead(diy, oos) { if ( diy.version < 11 ) { $Slot2Back = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 18 ) { + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + } updateCollection(); updateEncounter(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaEnemy.js index fe257a9..b7fa4c1 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaEnemy.js @@ -12,7 +12,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -23,7 +23,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { @@ -37,9 +38,9 @@ function setDefaults() { $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; @@ -47,32 +48,37 @@ function setDefaults() { $TitleBack = ''; $UniqueBack = '0'; $SubtitleBack = ''; - + $HealthBack = '2'; $PerInvestigatorBack = '0'; $AttackBack = '2'; + $PerInvestigatorAttackBack = '0'; $EvadeBack = '2'; - + $PerInvestigatorEvadeBack = '0'; + $DamageBack = '0'; $HorrorBack = '0'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; - $FlavorBackSpacing = '0'; - + $FlavorBackSpacing = '0'; + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -80,7 +86,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -88,7 +94,7 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutEnemyStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -107,15 +113,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -129,15 +135,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -146,7 +152,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -159,6 +165,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -170,7 +178,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -182,8 +190,8 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -192,7 +200,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -210,15 +218,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } @@ -236,88 +244,20 @@ function paintBack( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $DamageBack > 0 ) drawDamage( g, diy, sheet ); if ( $HorrorBack > 0 ) drawHorror( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} - -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); - var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - path.lineTo( x + w * (1 - xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); - - for (let i = numPoints-2; i >= 0; i--) { - path.lineTo( x + w * (1 - xPathPoints[i]), y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -346,11 +286,20 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttackBack = '0'; + $PerInvestigatorEvadeBack = '0'; + } + updateCollection(); updateEncounter(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaFrontPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaFrontPortrait.js index b252c4c..fcf1a2a 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaFrontPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaFrontPortrait.js @@ -12,7 +12,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -22,8 +22,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 12; + + diy.setCornerRadius(8); + diy.version = 15; } function setDefaults() { @@ -33,12 +34,12 @@ function setDefaults() { $Doom = '3'; $PerInvestigator = '0'; $Asterisk = '0'; - + $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + // back $TitleBack = ''; @@ -58,18 +59,22 @@ function setDefaults() { $AccentedStoryBBackSpacing = '0'; $HeaderCBackSpacing = '0'; $AccentedStoryCBackSpacing = '0'; - + $VictoryBack = ''; + $VictoryBackSpacing = '0'; $ScaleModifier = '100'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -81,9 +86,9 @@ function createInterface( diy, editor ) { TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaFrontPortraitStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); + var BackTitlePanel = layoutTitle2( diy, bindings, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -114,28 +119,28 @@ function createInterface( diy, editor ) { var BackTextTab = new Grid(); BackTextTab.editorTabScrolling = true; BackTextTab.place( - BackTextPanelA, 'wrap, pushx, growx', - BackTextPanelB, 'wrap, pushx, growx', - BackTextPanelC, 'wrap, pushx, growx', + BackTextPanelA, 'wrap, pushx, growx', + BackTextPanelB, 'wrap, pushx, growx', + BackTextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -149,15 +154,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); // updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -166,7 +171,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -198,13 +203,13 @@ function createBackPainter( diy, sheet ) { BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackHeader_box ); - initBodyTags( diy, BackStory_box ); - initBodyTags( diy, BackBody_box ); + initBodyTags( diy, BackHeader_box ); + initBodyTags( diy, BackStory_box ); + initBodyTags( diy, BackBody_box ); BackIndex_box = markupBox(sheet); - BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'ScenarioIndex-style'), null); - BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'ScenarioIndex-alignment')); + BackIndex_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'BackScenarioIndex-style'), null); + BackIndex_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'BackScenarioIndex-alignment')); } function paintFront( g, diy, sheet ) { @@ -214,73 +219,35 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); + // drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); - + drawTemplate( g, sheet, '' ); - drawRotatedName( g, diy, sheet ); + drawActAgendaBackName( g, diy, sheet ); drawIndentedStoryBody( g, diy, sheet, null, BackHeader_box, BackStory_box, BackBody_box ); drawScenarioIndexBack( g, diy, sheet, #AHLCG-Label-Agenda, BackIndex_box ); - drawEncounterIcon( g, diy, sheet ); -} + drawEncounterIcon( g, diy, sheet ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ // These can be used to perform special processing during open/save. // For example, you can seamlessly upgrade from a previous version // of the script. @@ -302,7 +269,7 @@ function onRead(diy, oos) { $AccentedStoryBBackSpacing = '0'; $HeaderCBackSpacing = '0'; $AccentedStoryCBackSpacing = '0'; - + $ScaleModifier = '100'; } if ( diy.version < 4 ) { @@ -320,14 +287,19 @@ function onRead(diy, oos) { $Asterisk = '0'; } if ( diy.version < 12 ) { - $VictoryBack = '' + $VictoryBack = ''; $VictoryBackSpacing = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + updateCollection(); updateEncounter(); - diy.version = 12; + diy.setCornerRadius(8); + diy.version = 15; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaLocation.js index f87fb80..3338b13 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaLocation.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaLocation.js @@ -14,7 +14,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -25,7 +25,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -39,22 +40,22 @@ function setDefaults() { $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + $Artist = ''; $Copyright = ''; // back $TitleBack = ''; $SubtitleBack = ''; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; @@ -73,11 +74,16 @@ function setDefaults() { $Connection6IconBack = 'None'; $ArtistBack = ''; + + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -85,7 +91,7 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); @@ -93,9 +99,9 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutLocationBackStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var BackConnectionsPanel = layoutConnections( bindings, [1], FACE_BACK ); + var BackConnectionsPanel = layoutConnections( false, bindings, [1], FACE_BACK ); BackConnectionsPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -114,15 +120,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -136,15 +142,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -153,7 +159,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -166,6 +172,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -187,12 +195,14 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + // just going to use standard body style - Victory_box = markupBox(sheet); - Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); - Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + BackVictory_box = markupBox(sheet); + BackVictory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackVictory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + + initBodyTags( diy, BackVictory_box ); BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); @@ -202,7 +212,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -220,15 +230,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } @@ -239,14 +249,13 @@ function paintBack( g, diy, sheet ) { if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); drawName( g, diy, sheet, BackName_box ); if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, BackVictory_box ); if ( $LocationIconBack != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -256,94 +265,24 @@ function paintBack( g, diy, sheet ) { for ( let index = 1; index <= 6; index++) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } - -// drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} -function onClear() { - setDefaults(); -} -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + var encounterIcon = false; - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; } - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} - -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - // asymmetrical - var xPathPoints = new Array( 0.154, 0.000, 0.000, 1.000, 1.000, 0.951, 0.846 ); - var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - - var xControlPoints = new Array( 0.107, 0.107, 0.991, 0.962, 0.936, 0.900 ); - var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - // just create by hand, it's asymmetrical - path.curveTo( x + w * xControlPoints[0], y + h * yControlPoints[0], - x + w * xControlPoints[1], y + h * yControlPoints[1], - x + w * xPathPoints[1], y + h * yPathPoints[1] - ); - - for (let i = 2; i <= 4; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } +// drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, encounterIcon, BackCopyright_box, BackArtist_box ); - for (let i = 5; i <= 6; i++) { - path.curveTo( x + w * xControlPoints[i*2 - 8], y + h * yControlPoints[i*2 - 8], - x + w * xControlPoints[i*2 - 7], y + h * yControlPoints[i*2 - 7], - x + w * xPathPoints[i], y + h * yPathPoints[i] - ); - } + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); +} - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); +function onClear() { + setDefaults(); } -*/ + function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -372,11 +311,23 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + $ShowEncounterIconBack = '1'; + } + if ( diy.version < 18) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() - 10.0); + } + updateCollection(); updateEncounter(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaPortrait.js index 64b04aa..911b951 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaPortrait.js @@ -12,7 +12,7 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Front', 'Encounter-Front' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -23,7 +23,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { @@ -37,23 +38,29 @@ function setDefaults() { $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - + // back $TitleBack = ''; - + $RulesBack = ''; - + $StoryBack = ''; + + $StoryBackSpacing = '0'; + $Artist = ''; $Copyright = ''; $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -61,13 +68,13 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -78,7 +85,7 @@ function createInterface( diy, editor ) { TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); - var BackTextTab = layoutText( bindings, [ 'Rules' ], '', FACE_BACK ); + var BackTextTab = layoutText( bindings, [ 'Story', 'Rules' ], '', FACE_BACK ); BackTextTab.editorTabScrolling = true; BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); @@ -86,15 +93,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -108,15 +115,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -125,7 +132,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -138,6 +145,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -146,14 +155,14 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -162,7 +171,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -180,15 +189,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } @@ -201,84 +210,16 @@ function paintBack( g, diy, sheet ) { drawName( g, diy, sheet, BackName_box ); - drawBody( g, diy, sheet, BackBody_box, new Array( 'Rules' ) ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Story', 'Rules' ) ); + // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} - -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); - var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * (1 - xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); - for (let i = numPoints-2; i >= 0; i--) { - path.lineTo( x + w * (1 - xPathPoints[i]), y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -301,11 +242,24 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $StoryBack = ''; + $StoryBackSpacing = '0'; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() - 10.0); + } + updateCollection(); updateEncounter(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaTreachery.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaTreachery.js index 94755da..f7c994f 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaTreachery.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AgendaTreachery.js @@ -12,9 +12,9 @@ const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -24,7 +24,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { @@ -35,34 +36,37 @@ function setDefaults() { $PerInvestigator = '0'; $Asterisk = '0'; $Orientation = 'Standard'; - + $AgendaStory = ''; $Rules = ''; - + $AgendaStorySpacing = '0'; - // back + // back $TitleBack = ''; $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $Artist = ''; $Copyright = ''; $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); // do this first, we need the portrait panels for the title listener @@ -70,13 +74,13 @@ function createInterface( diy, editor ) { var PortraitTab = PortraitTabArray[0]; PortraitTabArray.splice( 0, 1 ); - var TitlePanel = layoutTitle2( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutAgendaStats( diy, bindings, FACE_FRONT, PortraitTabArray ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -95,15 +99,15 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - - var CollectionTab = new Grid(); + + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -117,15 +121,15 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); updateReversableTextBoxShape( diy, $Orientation ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -134,7 +138,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -147,6 +151,8 @@ function createFrontPainter( diy, sheet ) { Index_box = markupBox(sheet); Index_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ScenarioIndex-style'), null); Index_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'ScenarioIndex-alignment')); + + updateOrientation( diy, PortraitList[0], $Orientation, 'Agenda' ); } function createBackPainter( diy, sheet ) { @@ -160,10 +166,10 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, BackBody_box ); - initBodyTags( diy, BackBody_box ); - BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -172,7 +178,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -190,15 +196,15 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); - drawActAgendaName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); drawBody( g, diy, sheet, Body_box, new Array( 'AgendaStory', 'Rules' ) ); drawDoom( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); - + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, Artist_box ); + drawScenarioIndexFront( g, diy, sheet, #AHLCG-Label-Agenda, Index_box ); } @@ -214,51 +220,13 @@ function paintBack( g, diy, sheet ) { drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, reverse ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.000, 0.000, 0.148, 0.148, 1.000, 1.000 ); - var yPathPoints = new Array( 0.000, 0.850, 0.850, 1.000, 1.000, 0.000 ); - - var numPoints = xPathPoints.length; - - if ( reverse ) { - // swap order and x-value - for (let i = 0; i < numPoints / 2; i++) { - let px = xPathPoints[i]; - let py = yPathPoints[i]; - - xPathPoints[i] = 1.000 - xPathPoints[numPoints - i - 1]; - yPathPoints[i] = yPathPoints[numPoints - i - 1]; - - xPathPoints[numPoints - i - 1] = 1.000 - px; - yPathPoints[numPoints - i - 1] = py; - } - } - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region, reverse ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -281,11 +249,20 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $Asterisk = '0'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + // region changed, requires a shift to look the same + PortraitList[0].setPanX(PortraitList[0].getPanX() - 10.0); + } + updateCollection(); updateEncounter(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Asset.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Asset.js index 1e7e82b..946ef08 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Asset.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Asset.js @@ -8,7 +8,7 @@ useLibrary('tints'); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'Asset', 'AssetBack' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front' ]; @@ -24,15 +24,17 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultCollection(); - diy.version = 12; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { $Unique = '0'; $Subtitle = ''; - + $CardClass = 'Guardian'; $CardClass2 = 'None'; + $CardClass3 = 'None'; $ResourceCost = '0'; $Level = '0'; $Skill1 = 'None'; @@ -40,32 +42,38 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $BackTypeBack = 'Player'; $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -73,13 +81,13 @@ function createInterface( diy, editor ) { StatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackStatPanel = layoutBackTypeStats( diy, bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -89,7 +97,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -107,7 +115,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -117,16 +125,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - - initBodyTags( diy, Body_box ); - + + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -134,8 +142,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -149,37 +157,37 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); - drawAssetTemplate( g, diy, sheet, $CardClass, $CardClass2 ); + drawAssetTemplate( g, diy, sheet, $CardClass, $CardClass2, $CardClass3 ); drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); - drawName( g, diy, sheet, Name_box ); var cClass = $CardClass; - if ( isDualClass( $CardClass, $CardClass2 ) ) cClass = 'Dual'; + if ( getClassCount( $CardClass, $CardClass2, $CardClass3 ) > 1 ) cClass = 'Dual'; + drawName( g, diy, sheet, Name_box, cClass ); if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, cClass, true ); - if ($CardClass == 'Weakness' ) { + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } - else if ($CardClass == 'BasicWeakness' ) { + else if ($CardClass == 'BasicWeakness' ) { drawBasicWeaknessIcon( g, diy, sheet ); drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-BasicWeakness ); } else { drawLevel( g, diy, sheet, cClass ); } - + drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, cClass ); drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, false, false, false, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, null, false, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, null, false, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -208,10 +216,33 @@ function onRead(diy, oos) { if ( diy.version < 12 ) { $BackTypeBack = 'Player'; } - + else if ( diy.version < 17 ) { + if ( $BackTypeundefined ) { // fix for bug causing undefined binding suffix + $BackTypeBack = $BackTypeundefined; + diy.settings.reset('BackTypeundefined'); + } + + if ( $BackTypeBack == null ) $BackTypeBack = 'Player'; // some cards created during testing might have both as null + } + + if ( diy.version < 15 ) { + $CardClass3 = 'None'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + diy.faceStyle = FaceStyle.TWO_FACES; // change was in v15, but I forgot to add this + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + } + updateCollection(); - diy.version = 12; + diy.faceStyle = FaceStyle.TWO_FACES; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetAsset.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetAsset.js index 0d049e0..f21870d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetAsset.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetAsset.js @@ -24,7 +24,8 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultCollection(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -32,6 +33,7 @@ function setDefaults() { $Subtitle = ''; $CardClass = 'Neutral'; $CardClass2 = 'None'; + $CardClass3 = 'None'; $ResourceCost = '0'; $Level = 'None'; $Skill1 = 'None'; @@ -39,34 +41,38 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; - + $ShowCollectionNumberFront = '1'; $ShowCollectionNumberBack = '1'; - + //Back $UniqueBack = '0'; $SubtitleBack = ''; $CardClassBack = 'Neutral'; $CardClassBack2 = 'None'; + $CardClassBack3 = 'None'; $ResourceCostBack = '0'; $LevelBack = 'None'; $Skill1Back = 'None'; @@ -74,29 +80,35 @@ function setDefaults() { $Skill3Back = 'None'; $Skill4Back = 'None'; $Skill5Back = 'None'; - + $SlotBack = 'None'; $Slot2Back = 'None'; $StaminaBack = 'None'; $SanityBack = 'None'; - + + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -107,13 +119,13 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatsPanel = layoutAssetStats( bindings, FACE_BACK ); BackStatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatsPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -127,7 +139,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -145,7 +157,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -155,16 +167,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -172,8 +184,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -189,7 +201,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Subtitle-style'), null); @@ -199,16 +211,16 @@ function createBackPainter( diy, sheet ) { BackSubtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtype-style'), null); BackSubtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Subtype-alignment')); - BackCost_box = markupBox(sheet); - BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); - BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); +// BackCost_box = markupBox(sheet); +// BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); +// BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); @@ -216,8 +228,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -228,34 +240,34 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); - drawAssetTemplate( g, diy, sheet, $CardClass, $CardClass2 ); + drawAssetTemplate( g, diy, sheet, $CardClass, $CardClass2, $CardClass3 ); drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, Name_box ); var cClass = $CardClass; - if ( isDualClass( $CardClass, $CardClass2 ) ) cClass = 'Dual'; + if ( getClassCount( $CardClass, $CardClass2, $CardClass3 ) > 1 ) cClass = 'Dual'; else { // no subtitles for multiclass if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, cClass, true ); } - if ($CardClass == 'Weakness' ) { + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); - } - else if ($CardClass == 'BasicWeakness' ) { + } + else if ($CardClass == 'BasicWeakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-BasicWeakness ); - } + } else { drawLevel( g, diy, sheet, cClass ); } - + drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, cClass ); drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var collectionSuffix = false; @@ -264,51 +276,51 @@ function paintFront( g, diy, sheet ) { var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberFront == '1', collectionSuffix, false, false, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, null, false, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, null, false, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); PortraitList[getPortraitIndex( 'BackPortrait' )].paint( g, sheet.getRenderTarget() ); - drawAssetTemplate( g, diy, sheet, $CardClassBack, $CardClass2Back ); + drawAssetTemplate( g, diy, sheet, $CardClassBack, $CardClass2Back, $CardClass3Back ); drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, BackName_box ); // if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, $CardClassBack, true ); - + var cClass = $CardClassBack; - if ( isDualClass( $CardClassBack, $CardClass2Back ) ) cClass = 'Dual'; + if ( getClassCount( $CardClassBack, $CardClass2Back, $CardClass3Back ) > 1 ) cClass = 'Dual'; - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, cClass, true ); + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, cClass, true ); - if ($CardClassBack == 'Weakness' ) { + if ($CardClassBack == 'Weakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-Weakness ); - } - else if ($CardClassBack == 'BasicWeakness' ) { + } + else if ($CardClassBack == 'BasicWeakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-BasicWeakness ); - } + } else { drawLevel( g, diy, sheet, cClass ); } - + drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, cClass ); drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var collectionSuffix = false; if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; - + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; - + // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberBack == '1', collectionSuffix, false, false, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, null, false, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, null, false, BackCopyright_box, BackArtist_box ); } function onClear() { @@ -335,10 +347,25 @@ function onRead(diy, oos) { $Slot2 = 'None'; $Slot2Back = 'None'; } - + if ( diy.version < 13 ) { + $CardClass3 = 'None'; + $CardClass3Back = 'None'; + } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + } + updateCollection(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStory.js index 14a629d..5030e25 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStory.js @@ -8,7 +8,7 @@ useLibrary('tints'); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'AssetStory', 'AssetStoryBack' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front', 'Encounter-Front' ]; @@ -24,8 +24,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 11; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -40,31 +41,37 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $ResourceCost = '0'; $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -72,13 +79,13 @@ function createInterface( diy, editor ) { StatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackStatPanel = layoutBackTypeStats( diy, bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -88,7 +95,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -96,7 +103,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -114,7 +121,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -124,16 +131,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -141,8 +148,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -162,27 +169,28 @@ function paintFront( g, diy, sheet ) { PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); drawTemplate( g, sheet, $CardClass ); - + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, Name_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); - - if ($CardClass == 'Weakness' ) { +// if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, $CardClass, true ); + + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo (g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -203,9 +211,18 @@ function onRead(diy, oos) { if ( diy.version < 2 ) { $BackTypeBack = 'Player'; - + diy.faceStyle = FaceStyle.TWO_FACES; } + else if ( diy.version < 17 ) { + if ( $BackTypeundefined ) { // fix for bug causing undefined binding suffix + $BackTypeBack = $BackTypeundefined; + diy.settings.reset('BackTypeundefined'); + } + + if ( $BackTypeBack == null ) $BackTypeBack = 'Player'; // some cards created during testing might have both as null + } + if ( diy.version < 9 ) { $Skill5 = 'None'; } @@ -215,11 +232,20 @@ function onRead(diy, oos) { if ( diy.version < 11 ) { $Slot2 = 'None'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + } + updateCollection(); updateEncounter(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryAsset.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryAsset.js index df29ab4..2572ad1 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryAsset.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryAsset.js @@ -25,7 +25,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 11z; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -37,31 +38,34 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $CardClass = 'Neutral'; $ResourceCost = '0'; $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; - + $ShowCollectionNumberFront = '1'; $ShowCollectionNumberBack = '1'; - + $ShowEncounterNumberFront = '1'; $ShowEncounterNumberBack = '1'; @@ -74,31 +78,39 @@ function setDefaults() { $Skill3Back = 'None'; $Skill4Back = 'None'; $Skill5Back = 'None'; - + $CardClassBack = 'Neutral'; $ResourceCostBack = '0'; $SlotBack = 'None'; $Slot2Back = 'None'; $StaminaBack = 'None'; $SanityBack = 'None'; - + + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; + + $PortraitShare = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -109,13 +121,13 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatsPanel = layoutAssetStoryStats( bindings, FACE_BACK ); BackStatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatsPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -124,12 +136,12 @@ function createInterface( diy, editor ) { BackTextTab.editorTabScrolling = true; BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); - PortraitTab = layoutPortraits( diy, bindings, 'Portrait', 'BackPortrait', true, false, true ); + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', 'BackPortrait', true, true, true ); PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -137,7 +149,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -155,7 +167,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -165,16 +177,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -182,8 +194,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -213,16 +225,16 @@ function createBackPainter( diy, sheet ) { BackSubtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtype-style'), null); BackSubtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Subtype-alignment')); - BackCost_box = markupBox(sheet); - BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); - BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); +// BackCost_box = markupBox(sheet); +// BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); +// BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); @@ -230,8 +242,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -251,30 +263,31 @@ function paintFront( g, diy, sheet ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, Name_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); - - if ($CardClass == 'Weakness' ) { +// if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, $CardClass, true ); + + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var collectionSuffix = false; if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; - + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; - + // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberFront == '1', collectionSuffix, $ShowEncounterNumberFront == '1', true, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, encounterBox, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -286,31 +299,30 @@ function paintBack( g, diy, sheet ) { drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, BackName_box ); - if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Neutral', true ); - - if ($CardClassBack == 'Weakness' ) { + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, $CardClassBack, true ); + + if ($CardClassBack == 'Weakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var collectionSuffix = false; if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; - + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; - // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberBack == '1', collectionSuffix, $ShowEncounterNumberBack == '1', true, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, encounterBox, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, BackCopyright_box, BackArtist_box ); } function onClear() { @@ -321,7 +333,7 @@ function onClear() { // For example, you can seamlessly upgrade from a previous version // of the script. function onRead(diy, oos) { - readPortraits( diy, oos, PortraitTypeList, true ); + readPortraits( diy, oos, PortraitTypeList, true ); if ( diy.version < 9 ) { $Skill5 = 'None'; @@ -335,11 +347,25 @@ function onRead(diy, oos) { $Slot2 = 'None'; $Slot2Back = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PortraitShare = '0'; + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + } updateCollection(); updateEncounter(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryEnemy.js index 7caaecc..fe30b07 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryEnemy.js @@ -25,7 +25,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -37,31 +38,34 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $CardClass = 'Neutral'; $ResourceCost = '0'; $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; $ShowCollectionNumberFront = '1'; $ShowCollectionNumberBack = '1'; - + $ShowEncounterNumberFront = '1'; $ShowEncounterNumberBack = '1'; @@ -69,32 +73,37 @@ function setDefaults() { $TitleBack = ''; $UniqueBack = '0'; $SubtitleBack = ''; - + $HealthBack = '2'; $PerInvestigatorBack = '0'; $AttackBack = '2'; + $PerInvestigatorAttackBack = '0'; $EvadeBack = '2'; - + $PerInvestigatorEvadeBack = '0'; + $DamageBack = '0'; $HorrorBack = '0'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; - $FlavorBackSpacing = '0'; - + $FlavorBackSpacing = '0'; + $ArtistBack = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -105,13 +114,13 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatsPanel = layoutEnemyStats( bindings, FACE_BACK ); BackStatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatsPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -125,7 +134,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -133,7 +142,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -151,7 +160,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -161,16 +170,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -178,8 +187,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -199,7 +208,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -211,8 +220,8 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -221,7 +230,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -241,20 +250,20 @@ function paintFront( g, diy, sheet ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, Name_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); - - if ($CardClass == 'Weakness' ) { + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, $CardClass, true ); + + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var collectionSuffix = false; @@ -262,9 +271,9 @@ function paintFront( g, diy, sheet ) { var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; - + // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberFront == '1', collectionSuffix, $ShowEncounterNumberFront == '1', true, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, encounterBox, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -281,7 +290,7 @@ function paintBack( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $DamageBack > 0 ) drawDamage( g, diy, sheet ); @@ -289,12 +298,12 @@ function paintBack( g, diy, sheet ) { var collectionSuffix = false; if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; - - var collectionBox = $ShowCollectionNumberFront == '1' ? BackCollection_box : null; - var encounterBox = $ShowEncounterNumberFront == '1' ? BackEncounter_box : null; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberBack == '1', collectionSuffix, $ShowEncounterNumberBack == '1', true, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, encounterBox, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, BackCopyright_box, BackArtist_box ); } function onClear() { @@ -306,14 +315,14 @@ function createBackTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -327,7 +336,7 @@ function createBackTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -352,11 +361,24 @@ function onRead(diy, oos) { if ( diy.version < 11 ) { $Slot2 = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttackBack = '0'; + $PerInvestigatorEvadeBack = '0'; + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + } updateCollection(); updateEncounter(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryPortrait.js index 70ff6bf..302a383 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AssetStoryPortrait.js @@ -8,7 +8,7 @@ useLibrary('tints'); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'AssetStory', 'BackPortrait' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'BackPortrait-Back', 'Collection-Front', 'Encounter-Front' ]; @@ -24,59 +24,66 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 11; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { $Unique = '0'; $Subtitle = ''; - $BackTypeBack = 'Player'; +// $BackTypeBack = 'Player'; $Skill1 = 'None'; $Skill2 = 'None'; $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $CardClass = 'Neutral'; $ResourceCost = '0'; $Slot = 'None'; $Slot2 = 'None'; $Stamina = 'None'; $Sanity = 'None'; - + + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); var StatsPanel = layoutAssetStoryStats( bindings, FACE_FRONT ); StatsPanel.setTitle( @AHLCG-BasicData ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -87,7 +94,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -95,7 +102,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -113,7 +120,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); @@ -123,16 +130,16 @@ function createFrontPainter( diy, sheet ) { Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); - Cost_box = markupBox(sheet); - Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); - Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); +// Cost_box = markupBox(sheet); +// Cost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Cost-style'), null); +// Cost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Cost-alignment')); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -140,8 +147,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -164,24 +171,24 @@ function paintFront( g, diy, sheet ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, Name_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', true ); - - if ($CardClass == 'Weakness' ) { + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, $CardClass, true ); + + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, false, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -202,7 +209,7 @@ function onRead(diy, oos) { if (diy.version < 2) { $BackTypeBack = 'Player'; - + diy.faceStyle = FaceStyle.TWO_FACES; } if ( diy.version < 9 ) { @@ -214,11 +221,24 @@ function onRead(diy, oos) { if ( diy.version < 11 ) { $Slot2 = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + diy.settings.reset('BackTypeundefined'); + diy.settings.reset('BackTypeBack'); // not used, will mess up Zoop + } + if ( diy.version < 18 ) { + $PerInvestigatorStamina = '0'; + $PerInvestigatorSanity = '0'; + } updateCollection(); updateEncounter(); - diy.version = 11; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/BoxCover.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/BoxCover.js new file mode 100644 index 0000000..6ed08ae --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/BoxCover.js @@ -0,0 +1,120 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'BoxCover' ]; +const BindingSuffixes = ['']; + +const PortraitTypeList = [ 'Portrait-Front', 'PortraitBottom-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + + diy.faceStyle = FaceStyle.ONE_FACE; + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + + diy.version = 1; +} + +function setDefaults() { + $tint = '0,1,1'; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + // do this first, we need the portrait panels for the title listener + var PortraitTabArray = layoutPortraitsWithPanels( diy, bindings, 'Portrait', null, true, false, false ); + var PortraitTab = PortraitTabArray[0]; + PortraitTabArray.splice( 0, 1 ); + + var BottomPortraitTabArray = layoutPortraitsWithPanels( diy, bindings, 'PortraitBottom', null, true, false, false ); + var BottomPortraitTab = BottomPortraitTabArray[0]; + BottomPortraitTabArray.splice( 0, 1 ); + + var HSBPanel = layoutHSBPanel(diy, bindings); + HSBPanel.addToEditor(editor, 'Tint'); + + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); + TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx'); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + BottomPortraitTab.addToEditor(editor, 'Bottom Portrait'); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + + initBodyTags( diy, Name_box ); +} + +function paintFront(g, diy, sheet) { + clearImage(g, sheet); + + PortraitList[0].paint( g, sheet.getRenderTarget() ); + PortraitList[1].paint( g, sheet.getRenderTarget() ); + + var hsb = $$tint.tint; + var tintable_image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-BoxCoverTintable.png'); + let tinted_image = ImageUtils.tint(tintable_image, hsb); + sheet.paintImage(g, tinted_image, diy.settings.getRegion('AHLCG-BoxCover-Tint-region')); + + drawBackTemplate( g, sheet, '' ); + + drawName( g, diy, sheet, Name_box ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + diy.version = 1; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Chaos.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Chaos.js index e985e3a..7bd931f 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Chaos.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Chaos.js @@ -24,7 +24,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -35,7 +36,7 @@ function setDefaults() { $Tablet = ''; $TabletSpacing = '0'; $ElderThing = ''; - + $SkullBack = ''; $SkullBackSpacing = '0'; $CultistBack = ''; @@ -45,25 +46,29 @@ function setDefaults() { $ElderThingBack = ''; $Copyright = ''; - + $MergeSkull = 'None'; $MergeCultist = 'None'; $MergeTablet = 'None'; $MergeSkullBack = 'None'; $MergeCultistBack = 'None'; $MergeTabletBack = 'None'; - + $TrackerBox = ''; + $TrackerHeight = '100'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle2( diy, bindings, [0, 1], FACE_FRONT ); var StatPanel = layoutChaosStats( bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -80,7 +85,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -88,12 +93,15 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + PortraitTab = layoutPortraits( diy, bindings, null, null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + bindings.bind(); } @@ -103,7 +111,7 @@ function createFrontPainter( diy, sheet ) { Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); Name_box.setTextFitting(FIT_NONE); Name_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Name', '-tightness') + '-tightness') ); // this doesn't seem to matter, sadly... - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Difficulty_box = markupBox(sheet); Difficulty_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Difficulty-style'), null); @@ -114,10 +122,10 @@ function createFrontPainter( diy, sheet ) { Body_boxes[i] = markupBox(sheet); Body_boxes[i].defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_boxes[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_boxes[i].setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); + Body_boxes[i].setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); Body_boxes[i].setTextFitting( FIT_SCALE_TEXT ); - initBodyTags( diy, Body_boxes[i] ); + initBodyTags( diy, Body_boxes[i] ); } Tracker_box = markupBox(sheet); @@ -128,7 +136,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -145,7 +153,7 @@ function createBackPainter( diy, sheet ) { BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); BackName_box.setTextFitting(FIT_NONE); BackName_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Name', '-tightness') + '-tightness') ); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackDifficulty_box = markupBox(sheet); BackDifficulty_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Difficulty-style'), null); @@ -156,10 +164,10 @@ function createBackPainter( diy, sheet ) { BackBody_boxes[i] = markupBox(sheet); BackBody_boxes[i].defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_boxes[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_boxes[i].setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); + BackBody_boxes[i].setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); BackBody_boxes[i].setTextFitting( FIT_SCALE_TEXT ); - initBodyTags( diy, BackBody_boxes[i] ); + initBodyTags( diy, BackBody_boxes[i] ); } BackTracker_box = markupBox(sheet); @@ -170,7 +178,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -191,12 +199,12 @@ function paintFront( g, diy, sheet ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); y = drawDifficulty( g, diy, sheet, Difficulty_box, #AHLCG-Difficulty-Front, y ); - if ( $TrackerBox.length > 0 ) drawChaosTrackerBox( g, diy, sheet, Tracker_box ); + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); drawChaosBody( g, diy, sheet, Body_boxes, null, y ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, false ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, null ); + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, true, Copyright_box, null ); } function paintBack( g, diy, sheet ) { @@ -208,14 +216,14 @@ function paintBack( g, diy, sheet ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, BackName_box ); y = drawDifficulty( g, diy, sheet, BackDifficulty_box, #AHLCG-Difficulty-Back, y ); - - if ( $TrackerBox.length > 0 ) drawChaosTrackerBox( g, diy, sheet, Tracker_box ); + + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); drawChaosBody( g, diy, sheet, BackBody_boxes, null, y ); // drawCollectorInfo( g, diy, sheet, true, true, true, true, false ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, false ); -} + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, true, BackCopyright_box, false ); +} function onClear() { setDefaults(); @@ -242,8 +250,16 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { $TrackerBox = ''; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 18 ) { + $TrackerHeight = '100'; + } - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Concealed.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Concealed.js new file mode 100644 index 0000000..132a9bf --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Concealed.js @@ -0,0 +1,206 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'Concealed', 'ConcealedBack' ]; +const BindingSuffixes = [ '', 'Back' ]; + +const PortraitTypeList = [ 'Portrait-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + + diy.setCornerRadius(8); + diy.version = 1; +} + +function setDefaults() { + $Template = 'Standard'; + + $BackTypeBack = 'Concealed'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; +} + +function createInterface( diy, editor ) { + + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + +// var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); + var StatPanel = layoutConcealedStats( diy, bindings, FACE_FRONT ); + StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + initBodyTags( diy, Name_box ); +/* + Subtype_box = markupBox(sheet); + Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); + Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); +// createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + + initBodyTags( diy, Body_box ); + + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); +*/ +} + +function createBackPainter( diy, sheet ) { +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + + drawTemplate( g, sheet, '' ); + +// drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); +/* + var subtypeRegion = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Subtype-region' ) ); + if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) subtypeRegion.y -= 2; + + if ($CardClass == 'Weakness' ) { + drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); + } + else if ($CardClass == 'BasicWeakness' ) { + drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-BasicWeakness ); + + drawOverlay( g, diy, sheet, 'BasicWeaknessEvent' ); + drawBasicWeaknessIcon( g, diy, sheet ); + } + else { + drawLevel( g, diy, sheet, $CardClass ); + } + + drawCost( g, diy, sheet ); + + drawSkillIcons( g, diy, sheet, $CardClass ); + + var regionName = 'Body'; + if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness') regionName = 'WeaknessBody'; + drawBodyWithRegionName( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ), regionName ); + +// drawCollectorInfo( g, diy, sheet, true, false, false, false, true ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, null, false, Copyright_box, Artist_box ); +*/ +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + if ( diy.version < 9 ) { + $Skill5 = 'None'; + } + if ( diy.version < 12 ) { + $BackTypeBack = 'Player'; + } + else if ( diy.version < 17 ) { + if ( $BackTypeundefined ) { // fix for bug causing undefined binding suffix + $BackTypeBack = $BackTypeundefined; + diy.settings.reset('BackTypeundefined'); + } + + if ( $BackTypeBack == null ) $BackTypeBack = 'Player'; // some cards created during testing might have both as null + } + + if (diy.version < 15) { + $CardClass2 = 'None'; + $CardClass3 = 'None'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + diy.faceStyle = FaceStyle.TWO_FACES; // change was in v15, but I forgot to add this + } + + updateCollection(); + + diy.setCornerRadius(8); + diy.version = 17; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Customizable.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Customizable.js new file mode 100644 index 0000000..23efe11 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Customizable.js @@ -0,0 +1,237 @@ + +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'Customizable', 'CustomizableBack' ]; +const BindingSuffixes = [ '', 'Back' ]; + +const PortraitTypeList = [ 'Collection-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + + diy.setCornerRadius(8); + diy.version = 3; +} + +function setDefaults() { + $CustHeader = ''; + $CustHeaderSpacing = '0'; + + $CustCost1 = '1'; + $CustText1 = ''; + $CustText1Spacing = '0'; + $CustName1 = ''; + + $CustCost2 = '2'; + $CustText2 = ''; + $CustText2Spacing = '0'; + $CustName2 = ''; + + $CustCost3 = '2'; + $CustText3 = ''; + $CustText3Spacing = '0'; + $CustName3 = ''; + + $CustCost4 = '2'; + $CustText4 = ''; + $CustText4Spacing = '0'; + $CustName4 = ''; + + $CustCost5 = '2'; + $CustText5 = ''; + $CustText5Spacing = '0'; + $CustName5 = ''; + + $CustCost6 = '2'; + $CustText6 = ''; + $CustText6Spacing = '0'; + $CustName6 = ''; + + $CustCost7 = '2'; + $CustText7 = ''; + $CustText7Spacing = '0'; + $CustName7 = ''; + + $CutCost8 = '2'; + $CustText8 = ''; + $CustText8Spacing = '0'; + $CustName8 = ''; + + $CutCost9 = '2'; + $CustText9 = ''; + $CustText9Spacing = '0'; + $CustName9 = ''; + + $CutCost10 = '2'; + $CustText10 = ''; + $CustText10Spacing = '0'; + $CustName10 = ''; + + $ScaleModifier = '100'; + + $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'PlayerPurple'; +} + +function createInterface( diy, editor ) { + + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); +// var StatPanel = layoutCustomizableStats( diy, bindings, FACE_FRONT ); +// StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); +// var BackStatPanel = layoutBackTypeStats( diy, bindings, FACE_BACK ); +// BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor, @AHLCG-General ); + + var TextPanelHeader = layoutCustomizableText( bindings, 0, 'Header', false, true, FACE_FRONT ); + TextPanelHeader.setTitle( @AHLCG-Rules + ' (' + @AHLCG-Header + ')' ); + TextPanelHeader.editorTabScrolling = true; + + var TextPanel = new Array(10); + for ( let i = 1; i <= 8; i++ ) { + TextPanel[i-1] = layoutCustomizableText( bindings, i.toString(), 'Text', true, i < 8, FACE_FRONT ); + TextPanel[i-1].setTitle( @AHLCG-Rules + ' (' + @AHLCG-Option + ' ' + i + ')' ); + TextPanel[i-1].editorTabScrolling = true; + } + + var scaleSpinner = new spinner( 50, 150, 1, 100 ); + bindings.add( 'ScaleModifier', scaleSpinner, [0] ); + + var TextTab = new Grid(); + TextTab.editorTabScrolling = true; + TextTab.place( + TextPanelHeader, 'wrap, pushx, growx', + TextPanel[0], 'wrap, pushx, growx', + TextPanel[1], 'wrap, pushx, growx', + TextPanel[2], 'wrap, pushx, growx', + TextPanel[3], 'wrap, pushx, growx', + TextPanel[4], 'wrap, pushx, growx', + TextPanel[5], 'wrap, pushx, growx', + TextPanel[6], 'wrap, pushx, growx', + TextPanel[7], 'wrap, pushx, growx', + @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' + ); + + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); + + PortraitTab = layoutPortraits( diy, bindings, null, null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + initBodyTags( diy, Name_box ); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + + initBodyTags( diy, Body_box ); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); +} + +function createBackPainter( diy, sheet ) { +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + +// PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + + drawTemplate( g, sheet ); + + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Customizable ); + drawName( g, diy, sheet, Name_box ); + + drawBody( g, diy, sheet, Body_box, new Array( 'CustHeader', 'CustText1', 'CustText2', 'CustText3', 'CustText4', 'CustText5', 'CustText6', 'CustText7', 'CustText8' ) ); + drawCollectorInfo( g, diy, sheet, null, false, false, null, false, Copyright_box, null ); +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + if ( diy.version < 2 ) { + $BackTypeBack = 'PlayerPurple'; + } + + diy.setCornerRadius(8); + diy.version = 2; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Enemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Enemy.js index bf29bab..fac2c70 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Enemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Enemy.js @@ -15,7 +15,7 @@ function create( diy ) { diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); - diy.faceStyle = FaceStyle.PLAIN_BACK; + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -24,50 +24,58 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { $Unique = '0'; $Subtitle = ''; - + $Health = '2'; $PerInvestigator = '0'; $Attack = '2'; + $PerInvestigatorAttack = '0'; $Evade = '2'; - + $PerInvestigatorEvade = '0'; + $Damage = '0'; $Horror = '0'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'Encounter'; // for Zoop } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); var StatPanel = layoutEnemyStats( bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); - + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -77,7 +85,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -102,7 +110,7 @@ function createFrontPainter( diy, sheet ) { Name_box = markupBox(sheet); Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); @@ -113,8 +121,8 @@ function createFrontPainter( diy, sheet ) { Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -123,7 +131,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -135,14 +143,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -159,19 +159,20 @@ function paintFront( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $Damage > 0 ) drawDamage( g, diy, sheet ); if ( $Horror > 0 ) drawHorror( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - // like createBackPainter(), this won't be called because of - // the type of card we created + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); } function onClear() { @@ -183,14 +184,14 @@ function createTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -204,7 +205,7 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -220,10 +221,24 @@ function setTextShape( box, region ) { function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttack = '0'; + $PerInvestigatorEvade = '0'; + + $BackTypeBack = 'Encounter'; // for Zoop + } + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyEnemy.js index 764babb..648b765 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyEnemy.js @@ -24,73 +24,82 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { // front $Unique = '0'; $Subtitle = ''; - + $Health = '2'; $PerInvestigator = '0'; $Attack = '2'; + $PerInvestigatorAttack = '0'; $Evade = '2'; - + $PerInvestigatorEvade = '0'; + $Damage = '0'; $Horror = '0'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; $ShowCollectionNumberFront = '1'; $ShowCollectionNumberBack = '1'; - + $ShowEncounterNumberFront = '1'; $ShowEncounterNumberBack = '1'; // back $UniqueBack = '0'; $SubtitleBack = ''; - + $HealthBack = '2'; $PerInvestigatorBack = '0'; $AttackBack = '2'; + $PerInvestigatorAttackBack = '0'; $EvadeBack = '2'; - + $PerInvestigatorEvadeBack = '0'; + $DamageBack = '0'; $HorrorBack = '0'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; - $PortraitShare = '1'; + $PortraitShare = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); @@ -101,13 +110,13 @@ function createInterface( diy, editor ) { BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutEnemyStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -121,7 +130,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -147,7 +156,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); @@ -156,12 +165,12 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -170,7 +179,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -199,12 +208,12 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); // createTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -236,12 +245,12 @@ function paintFront( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $Damage > 0 ) drawDamage( g, diy, sheet ); if ( $Horror > 0 ) drawHorror( g, diy, sheet ); - + var collectionSuffix = false; if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; @@ -249,7 +258,7 @@ function paintFront( g, diy, sheet ) { var EncounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberFront == '1', collectionSuffix, $ShowEncounterNumberFront == '1', true, true ); - drawCollectorInfo( g, diy, sheet, CollectionBox, collectionSuffix, EncounterBox, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, CollectionBox, collectionSuffix, true, EncounterBox, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -271,7 +280,7 @@ function paintBack( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $DamageBack > 0 ) drawDamage( g, diy, sheet ); @@ -284,7 +293,7 @@ function paintBack( g, diy, sheet ) { var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; // drawCollectorInfo( g, diy, sheet, $ShowCollectionNumberBack == '1', collectionSuffix, $ShowEncounterNumberBack == '1', true, true ); - drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, encounterBox, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, BackCopyright_box, BackArtist_box ); } function onClear() { @@ -296,14 +305,14 @@ function createTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -317,8 +326,8 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); + + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ function setTextShape( box, region ) { @@ -340,11 +349,22 @@ function onRead(diy, oos) { $ShowEncounterNumberFront = '1'; $ShowEncounterNumberBack = '1'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttack = '0'; + $PerInvestigatorEvade = '0'; + $PerInvestigatorAttackBack = '0'; + $PerInvestigatorEvadeBack = '0'; + } updateCollection(); updateEncounter(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyLocation.js new file mode 100644 index 0000000..7e3da78 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyLocation.js @@ -0,0 +1,511 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +useLibrary('tints'); + +importClass( arkham.component.DefaultPortrait ); +importClass( arkham.HSBPanel ); + +const CardTypes = [ 'EnemyLocation', 'Location' ]; +const BindingSuffixes = [ '', 'Back' ]; + +const PortraitTypeList = [ 'Portrait-Both', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template'); // not used, set card size + diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + setDefaultEncounter(); + setDefaultCollection(); + + diy.setCornerRadius(8); + diy.version = 18; +} + +function setDefaults() { + // front + $Subtitle = ''; + $Traits = ''; + $Keywords = ''; + $Rules = ''; + $Flavor = ''; + $Victory = ''; + + $TraitsSpacing = '0'; + $KeywordsSpacing = '0'; + $RulesSpacing = '0'; + $FlavorSpacing = '0'; + + $Artist = ''; + $Copyright = ''; + + $Shroud = '1'; + $Clues = '1'; + $PerInvestigator = '1'; + $ShroudPerInvestigator = '0'; + $BackTypeBack = 'Standard'; + + $ShroudBack = '1'; + $CluesBack = '1'; + $PerInvestigatorBack = '1'; + $ShroudPerInvestigatorBack = '0'; + + // back + $TitleBack = ''; + $SubtitleBack = ''; + + $TraitsBack = ''; + $KeywordsBack = ''; + $RulesBack = ''; + $FlavorBack = ''; + $VictoryBack = ''; + + $LocationIconBack = 'Circle'; + $Connection1IconBack = 'None'; + $Connection2IconBack = 'None'; + $Connection3IconBack = 'None'; + $Connection4IconBack = 'None'; + $Connection5IconBack = 'None'; + $Connection6IconBack = 'None'; + + $ShroudBack = '1'; + $CluesBack = '1'; + $PerInvestigatorBack = '1'; + $ShroudPerInvestigatorBack = '0'; + + $ArtistBack = ''; + + $TraitsBackSpacing = '0'; + $KeywordsBackSpacing = '0'; + $RulesBackSpacing = '0'; + $FlavorBackSpacing = '0'; + + $ArtistBack = ''; + $PortraitShare = '1'; + + $ShowEncounterIcon = '1'; + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + // From here + $Health = '2'; + $PerInvestigatorHealth = '0'; + $Attack = '2'; + $PerInvestigatorAttack = '0'; + $Evade = '2'; + $PerInvestigatorEvade = '0'; + + $Damage = '0'; + $Horror = '0'; + $flipSuffix = false; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); + var StatPanel = layoutEnemyLocationStats( bindings, FACE_FRONT ); + StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); + var BackStatPanel = layoutLocationBackStats( bindings, FACE_BACK ); + BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + + var BackTitlePanel = layoutTitle( diy, bindings, true, [1], FACE_BACK ); + BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); + var BackConnectionPanel = layoutConnections( true, bindings, [1], FACE_BACK ); + BackConnectionPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', BackConnectionPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); + TextTab.editorTabScrolling = true; + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); + + var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); + BackTextTab.editorTabScrolling = true; + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); + + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', 'BackPortrait', true, true, true ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); + + var CollectionTab = new Grid(); + CollectionTab.editorTabScrolling = true; + CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); + CollectionTab.addToEditor(editor, @AHLCG-Collection); + + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + Subtitle_box = markupBox(sheet); + Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); + Subtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtitle-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); +// Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); +// createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + + initBodyTags( diy, Body_box ); + + // just going to use standard body style + Victory_box = markupBox(sheet); + Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Victory-alignment')); + Victory_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Victory', '-tightness') + '-tightness') ); + + initBodyTags( diy, Victory_box ); + + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); +} + +function createBackPainter( diy, sheet ) { + BackLabel_box = markupBox(sheet); + BackLabel_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Label-style'), null); + BackLabel_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Label-alignment')); + + BackName_box = markupBox(sheet); + BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); + BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); + + BackSubtitle_box = markupBox(sheet); + BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); + BackSubtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtitle-alignment')); + + BackBody_box = markupBox(sheet); + BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); + + initBodyTags( diy, BackBody_box ); + + BackVictory_box = markupBox(sheet); + BackVictory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackVictory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + BackVictory_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Victory', '-tightness') + '-tightness') ); + + initBodyTags( diy, BackVictory_box ); + + BackArtist_box = markupBox(sheet); + BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); + BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); + + BackCopyright_box = markupBox(sheet); + BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); + BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); + + initCopyrightTags( diy, BackCopyright_box ); + + BackCollection_box = markupBox(sheet); + BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); + BackCollection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'CollectionNumber-alignment')); + + BackEncounter_box = markupBox(sheet); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); + +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + + drawTemplate( g, sheet, '' ); + drawName( g, diy, sheet, Name_box ); + + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); + + drawVictory( g, diy, sheet, Victory_box ); + + drawShroud( g, diy, sheet ); + drawClues( g, diy, sheet ); + drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); + drawEnemyLocationHealth( g, diy, sheet ); + + if ( $Damage > 0 ) drawDamage( g, diy, sheet ); + if ( $Horror > 0 ) drawHorror( g, diy, sheet ); + + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + + if ( $PortraitShare == '1' ) { + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + } + else { + PortraitList[getPortraitIndex( 'BackPortrait' )].paint( g, sheet.getRenderTarget() ); + } + + if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); + else drawTemplate( g, sheet, '' ); + + drawName( g, diy, sheet, BackName_box ); + + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); + + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); + drawVictory( g, diy, sheet, BackVictory_box ); + + if ( $LocationIcon != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); + + drawShroud( g, diy, sheet ); + drawClues( g, diy, sheet ); + + for ( let index = 1; index <= 6; index++) { + drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); + } + + // this is icky... + if ( $PortraitShare == '1' ) { + if ( $Artist.length > 0) drawArtist( g, diy, sheet, BackArtist_box, true ); + } + else { + if ( $ArtistBack.length > 0 ) drawArtist( g, diy, sheet, BackArtist_box, false ); + } + + var encounterIcon = false; + + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; + } + + // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, encounterIcon, BackCopyright_box ); + + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); +} + +function onClear() { + setDefaults(); +} +/* +function createTextShape( textBox, textRegion ) { + var x = textRegion.x; + var y = textRegion.y; + var w = textRegion.width; + var h = textRegion.height; + + var path = new java.awt.geom.Path2D.Double(); + + // asymmetrical + var xPathPoints = new Array( 0.074, 0.000, 0.000, 1.000, 1.000, 0.951, 0.926 ); + var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); + + var xControlPoints = new Array( 0.037, 0.107, 0.991, 0.962, 0.936, 0.970 ); + var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); + + var numPoints = xPathPoints.length; + + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + // just create by hand, it's asymmetrical + path.curveTo( x + w * xControlPoints[0], y + h * yControlPoints[0], + x + w * xControlPoints[1], y + h * yControlPoints[1], + x + w * xPathPoints[1], y + h * yPathPoints[1] + ); + + for (let i = 2; i <= 4; i++) { + path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + } + + for (let i = 5; i <= 6; i++) { + path.curveTo( x + w * xControlPoints[i*2 - 8], y + h * yControlPoints[i*2 - 8], + x + w * xControlPoints[i*2 - 7], y + h * yControlPoints[i*2 - 7], + x + w * xPathPoints[i], y + h * yPathPoints[i] + ); + } + + path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); +} + +function createBackTextShape( textBox, textRegion ) { + var x = textRegion.x; + var y = textRegion.y; + var w = textRegion.width; + var h = textRegion.height; + +// var xPathPoints = new Array( 0.151, 0.000, 0.000, 1.000, 1.000, 0.849 ); + var xPathPoints = new Array( 0.111, 0.000, 0.000, 1.000, 1.000, 0.889 ); + var yPathPoints = new Array( 0.000, 0.204, 1.000, 1.000, 0.204, 0.000 ); + + var path = new java.awt.geom.Path2D.Double(); + + var numPoints = xPathPoints.length; + + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + for (let i = 1; i < numPoints; i++) { + path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + } + + path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); +} +*/ +function setTextShape( box, region ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + box.pageShape = AHLCGObject.getLocationTextShape( region ); +} + +function setBackTextShape( box, region ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + box.pageShape = AHLCGObject.getLocationBackTextShape( region ); +} + +function createVictoryTextShape( textBox, textRegion ) { + var x = textRegion.x; + var y = textRegion.y; + var w = textRegion.width; + var h = textRegion.height; + + var xPathPoints = new Array( 0.000, 1.000, 1.000, 0.500, 0.000 ); + var yPathPoints = new Array( 0.000, 0.000, 1.000, 1.000, 0.500 ); +// var xPathPoints = new Array( 0.000, 1.000, 1.000 ); +// var yPathPoints = new Array( 0.000, 0.000, 1.000 ); + + var path = new java.awt.geom.Path2D.Double(); + + var numPoints = xPathPoints.length; + + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + for (let i = 1; i < numPoints; i++) { + path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + } + + path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); + + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + if ( diy.version < 3 ) { + $BackType = 'Standard'; + } + if ( diy.version < 4 ) { + $SubtitleBack = ''; + if ( $BackType == null ) $BackType = 'Standard'; + } + if ( diy.version < 15 ) { + $ShowEncounterIconBack = '1'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + // it's calling this multiple times, and $BackType is null on the second + if ( $BackType ) { + $BackTypeBack = $BackType; + diy.settings.reset('BackType'); + } + } + if ( diy.version < 17) { + $ShowEncounterIcon = '1'; + } + if ( diy.version < 18 ) { + $ShroudPerInvestigator = '0'; + } + + // some files, probably from a test version have $BackType and $BackTypeBack == null +// if ( $BackTypeBack == null) $BackTypeBack = 'Standard'; + + updateCollection(); + updateEncounter(); + + diy.setCornerRadius(8); + diy.version = 18; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-preferences.js' ); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-preferences.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyPortrait.js index 8dc31f0..dbbb30b 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/EnemyPortrait.js @@ -24,50 +24,57 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { $Unique = '0'; $Subtitle = ''; - + $Health = '2'; $PerInvestigator = '0'; $Attack = '2'; + $PerInvestigatorAttack = '0'; $Evade = '2'; - + $PerInvestigatorEvade = '0'; + $Damage = '0'; $Horror = '0'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); var StatPanel = layoutEnemyStats( bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); - + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -77,7 +84,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -85,7 +92,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -103,7 +110,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); @@ -112,12 +119,12 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -126,7 +133,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -138,14 +145,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -162,14 +161,14 @@ function paintFront( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $Damage > 0 ) drawDamage( g, diy, sheet ); if ( $Horror > 0 ) drawHorror( g, diy, sheet ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -187,14 +186,14 @@ function createTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -208,7 +207,7 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -224,10 +223,20 @@ function setTextShape( box, region ) { function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if (diy.version < 16 ) { + $PerInvestigatorAttack = '0'; + $PerInvestigatorEvade = '0'; + } + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Event.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Event.js index 4baeaf4..1125c32 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Event.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Event.js @@ -7,12 +7,12 @@ useLibrary( 'fontutils' ); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'Event', 'EventBack' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; -const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front' ]; +const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front', 'Encounter-Both' ]; function create( diy ) { - diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); diy.faceStyle = FaceStyle.TWO_FACES; @@ -22,13 +22,17 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); setDefaultCollection(); + setDefaultEncounter(); - diy.version = 12; + diy.setCornerRadius(8); + diy.version = 19; } function setDefaults() { $Unique = '0'; $CardClass = 'Guardian'; + $CardClass2 = 'None'; + $CardClass3 = 'None'; $ResourceCost = '0'; $Level = '0'; $Skill1 = 'None'; @@ -36,43 +40,47 @@ function setDefaults() { $Skill3 = 'None'; $Skill4 = 'None'; $Skill5 = 'None'; - + $BackTypeBack = 'Player'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - + var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); var StatPanel = layoutEventStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackStatPanel = layoutBackTypeStats( diy, bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - - var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); + + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -81,13 +89,21 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); - bindings.bind(); + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + + bindings.bind(); } function createFrontPainter( diy, sheet ) { @@ -99,7 +115,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtype_box = markupBox(sheet); Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); @@ -111,8 +127,8 @@ function createFrontPainter( diy, sheet ) { // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -121,11 +137,15 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); } function createBackPainter( diy, sheet ) { @@ -136,19 +156,19 @@ function paintFront( g, diy, sheet ) { PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); - drawTemplate( g, sheet, $CardClass ); + drawEventTemplate( g, diy, sheet, $CardClass, $CardClass2, $CardClass3 ); drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Event ); drawName( g, diy, sheet, Name_box ); var subtypeRegion = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Subtype-region' ) ); if ( Eons.namedObjects.AHLCGObject.bodyFamily == 'Times New Roman' ) subtypeRegion.y -= 2; - - if ($CardClass == 'Weakness' ) { + + if ($CardClass == 'Weakness' || $CardClass == 'StoryWeakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } - else if ($CardClass == 'BasicWeakness' ) { + else if ($CardClass == 'BasicWeakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-BasicWeakness ); - + drawOverlay( g, diy, sheet, 'BasicWeaknessEvent' ); drawBasicWeaknessIcon( g, diy, sheet ); } @@ -157,15 +177,37 @@ function paintFront( g, diy, sheet ) { } drawCost( g, diy, sheet ); - + drawSkillIcons( g, diy, sheet, $CardClass ); - + var regionName = 'Body'; - if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness') regionName = 'WeaknessBody'; + if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' || $CardClass == 'StoryWeakness') regionName = 'WeaknessBody'; drawBodyWithRegionName( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ), regionName ); -// drawCollectorInfo( g, diy, sheet, true, false, false, false, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, null, false, Copyright_box, Artist_box ); + var drawIcon = false; + if ( $CardClass == 'Story'){ + drawIcon = true; + sheet.paintImage( + g, + ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-StoryEventOverlay.jp2'), + diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Encounter-overlay-region' ) ) + ); + } else if ( $CardClass == 'StoryWeakness' ){ + drawIcon = true; + } + + drawCollectorInfo( + g, + diy, + sheet, + Collection_box, + false, + true, + drawIcon ? Encounter_box : null, + drawIcon, + Copyright_box, + Artist_box + ); } function paintBack( g, diy, sheet ) { @@ -177,48 +219,7 @@ function paintBack( g, diy, sheet ) { function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion, className ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - -// var xPathPoints = new Array( 0.0, -0.054, -0.009, 0.179 ); -// var xPathPoints = new Array( 0.0, -0.054, -0.004, 0.179 ); - var xPathPoints = new Array( 0.0, -0.054, -0.004, 0.179 ); - var yPathPoints = new Array( 0.0, 0.333, 0.892, 1.0 ); - - var xControlPoints = new Array( 0.004, -0.060, -0.083, 0.006, 0.088, 0.047 ); - var yControlPoints = new Array( 0.047, 0.193, 0.513, 0.674, 0.873, 0.993 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.curveTo( x + w * xControlPoints[i*2 - 2], y + h * yControlPoints[i*2 - 2], - x + w * xControlPoints[i*2 - 1], y + h * yControlPoints[i*2 - 1], - x + w * xPathPoints[i], y + h * yPathPoints[i] - ); - } - - path.lineTo( x + w * (1 - xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); - - for (let i = numPoints-2; i >= 0; i--) { - path.curveTo( x + w * (1.0 - xControlPoints[i*2 + 1]), y + h * yControlPoints[i*2 + 1], - x + w * (1.0 - xControlPoints[i*2]), y + h * yControlPoints[i*2], - x + w * (1.0 - xPathPoints[i]), y + h * yPathPoints[i] - ); - } - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -237,10 +238,38 @@ function onRead(diy, oos) { if ( diy.version < 12 ) { $BackTypeBack = 'Player'; } - + else if ( diy.version < 17 ) { + if ( $BackTypeundefined ) { // fix for bug causing undefined binding suffix + $BackTypeBack = $BackTypeundefined; + diy.settings.reset('BackTypeundefined'); + } + + if ( $BackTypeBack == null ) $BackTypeBack = 'Player'; // some cards created during testing might have both as null + } + + if (diy.version < 15) { + $CardClass2 = 'None'; + $CardClass3 = 'None'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + diy.faceStyle = FaceStyle.TWO_FACES; // change was in v15, but I forgot to add this + } + if ( $Encounter == null ) { + setDefaultEncounter(); + } + if (diy.version < 19) { + if ($CardClass == 'StoryWeakness'){ + diy.settings.reset('AHLCG-Event-Encounter-portrait-clip-region'); + } + } + updateCollection(); - - diy.version = 12; + updateEncounter(); + + diy.setCornerRadius(8); + diy.version = 19; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Guide75.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Guide75.js index 53d4752..a75bfc7 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Guide75.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Guide75.js @@ -21,7 +21,7 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); - diy.version = 8; + diy.version = 16; } function setDefaults() { @@ -34,6 +34,9 @@ function setDefaults() { $PositionPortrait1 = 'TopLeftSmall'; $PositionPortrait2 = 'BottomLarge'; + + $LineSpacingLeft = '100'; + $LineSpacingRight = '100'; } function createInterface( diy, editor ) { @@ -57,12 +60,38 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); - var LeftTextTab = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); +// var LeftTextTab = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); + var LeftTextPanel = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); +// LeftTextTab.editorTabScrolling = true; +// LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); + + var spacingLeftSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingLeft', spacingLeftSpinner, [0] ); + + var LeftTextTab = new Grid(); LeftTextTab.editorTabScrolling = true; + LeftTextTab.place( + LeftTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingLeftSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); - var RightTextTab = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); +// var RightTextTab = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); + var RightTextPanel = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); +// RightTextTab.editorTabScrolling = true; +// RightTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Right ); + + var spacingRightSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingRight', spacingRightSpinner, [0] ); + + var RightTextTab = new Grid(); RightTextTab.editorTabScrolling = true; + RightTextTab.place( + RightTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingRightSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + RightTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Right ); bindings.bind(); @@ -78,6 +107,10 @@ function createFrontPainter( diy, sheet ) { Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResHeader-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); @@ -88,6 +121,9 @@ function createFrontPainter( diy, sheet ) { Page_box = markupBox(sheet); Page_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); Page_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); + + setupGuidePortrait( diy, 0, $PositionPortrait1, false ); + setupGuidePortrait( diy, 1, $PositionPortrait2, false ); } function createBackPainter( diy, sheet ) { @@ -96,7 +132,7 @@ function createBackPainter( diy, sheet ) { function paintFront( g, diy, sheet ) { clearImage( g, sheet ); - drawGuideTemplate( g, sheet ); + drawGuideTemplate( diy, g, sheet, Label_box ); if ( $PageType == 'Title' ) drawName( g, diy, sheet, Name_box ); @@ -110,8 +146,8 @@ function paintFront( g, diy, sheet ) { if ( $PageType == 'Empty' ) drawPageNumber( g, diy, sheet, Page_box ); - drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[0], $RulesLeft ); - drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[1], $RulesRight ); + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[0], $RulesLeft, parseInt( $LineSpacingLeft )); + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[1], $RulesRight, parseInt( $LineSpacingRight )); } function paintBack( g, diy, sheet ) { @@ -132,7 +168,12 @@ function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); } - diy.version = 8; + if ( diy.version < 16 ) { + $LineSpacingLeft = '100'; + $LineSpacingRight = '100'; + } + + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideA4.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideA4.js index 1eb360a..9aed747 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideA4.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideA4.js @@ -21,7 +21,7 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); - diy.version = 8; + diy.version = 16; } function setDefaults() { @@ -34,6 +34,9 @@ function setDefaults() { $PositionPortrait1 = 'TopLeftSmall'; $PositionPortrait2 = 'BottomLarge'; + + $LineSpacingLeft = '100'; + $LineSpacingRight = '100'; } function createInterface( diy, editor ) { @@ -57,12 +60,38 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); - var LeftTextTab = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); +// var LeftTextTab = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); + var LeftTextPanel = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); +// LeftTextTab.editorTabScrolling = true; +// LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); + + var spacingLeftSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingLeft', spacingLeftSpinner, [0] ); + + var LeftTextTab = new Grid(); LeftTextTab.editorTabScrolling = true; + LeftTextTab.place( + LeftTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingLeftSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); - var RightTextTab = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); +// var RightTextTab = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); + var RightTextPanel = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); +// RightTextTab.editorTabScrolling = true; +// RightTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Right ); + + var spacingRightSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingRight', spacingRightSpinner, [0] ); + + var RightTextTab = new Grid(); RightTextTab.editorTabScrolling = true; + RightTextTab.place( + RightTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingRightSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + RightTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Right ); bindings.bind(); @@ -78,6 +107,10 @@ function createFrontPainter( diy, sheet ) { Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResHeader-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); @@ -88,6 +121,9 @@ function createFrontPainter( diy, sheet ) { Page_box = markupBox(sheet); Page_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); Page_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); + + setupGuidePortrait( diy, 0, $PositionPortrait1, false ); + setupGuidePortrait( diy, 1, $PositionPortrait2, false ); } function createBackPainter( diy, sheet ) { @@ -96,7 +132,7 @@ function createBackPainter( diy, sheet ) { function paintFront( g, diy, sheet ) { clearImage( g, sheet ); - drawGuideTemplateA4( g, sheet ); + drawGuideTemplateA4( diy, g, sheet, Label_box ); if ( $PageType == 'Title' ) drawName( g, diy, sheet, Name_box ); @@ -110,8 +146,8 @@ function paintFront( g, diy, sheet ) { if ( $PageType == 'Empty' ) drawPageNumber( g, diy, sheet, Page_box ); - drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[0], $RulesLeft ); - drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[1], $RulesRight ); + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[0], $RulesLeft, parseInt( $LineSpacingLeft )); + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[1], $RulesRight, parseInt( $LineSpacingRight )); } function paintBack( g, diy, sheet ) { @@ -132,7 +168,12 @@ function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); } - diy.version = 8; + if ( diy.version < 16 ) { + $LineSpacingLeft = '100'; + $LineSpacingRight = '100'; + } + + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideLetter.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideLetter.js new file mode 100644 index 0000000..1ac4729 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/GuideLetter.js @@ -0,0 +1,188 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'GuideLetter' ]; +const BindingSuffixes = [ '' ]; + +const PortraitTypeList = [ 'Portrait1-Front', 'Portrait2-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + + diy.faceStyle = FaceStyle.ONE_FACE; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + + diy.version = 16; +} + +function setDefaults() { + $PageType = 'Empty'; + + $Page = '1'; + + $RulesLeft = ''; + $RulesRight = ''; + + $PositionPortrait1 = 'TopLeftSmall'; + $PositionPortrait2 = 'BottomLarge'; + + $LineSpacingLeft = '100'; + $LineSpacingRight = '100'; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + // do this first, we need the portrait panels for the title listener + var PortraitTabArray = layoutGuidePortraits( diy, bindings, 'Portrait1', 'Portrait2', true ); + var PortraitTab = PortraitTabArray[0]; + PortraitTabArray.splice( 0, 1 ); + + var TitlePanel = layoutTitleGuide( diy, bindings, [0], FACE_FRONT, PortraitTabArray ); + var StatPanel = layoutGuideStats( bindings, FACE_FRONT ); + StatPanel.setTitle( @AHLCG-BasicData ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + +// var LeftTextTab = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); + var LeftTextPanel = layoutText( bindings, [ 'Rules' ], 'Left', FACE_FRONT ); +// LeftTextTab.editorTabScrolling = true; +// LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); + + var spacingLeftSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingLeft', spacingLeftSpinner, [0] ); + + var LeftTextTab = new Grid(); + LeftTextTab.editorTabScrolling = true; + LeftTextTab.place( + LeftTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingLeftSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + + LeftTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Left ); + + var RightTextPanel = layoutText( bindings, [ 'Rules' ], 'Right', FACE_FRONT ); + + var spacingRightSpinner = new spinner( 10, 300, 1, 100 ); + bindings.add( 'LineSpacingRight', spacingRightSpinner, [0] ); + + var RightTextTab = new Grid(); + RightTextTab.editorTabScrolling = true; + RightTextTab.place( + RightTextPanel, 'wrap, pushx, growx', + @AHLCG-LineSpacing, 'align left, split', spacingRightSpinner, 'align left', '%', 'pushx, growx, wrap, align left' + ); + + RightTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Right ); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + initBodyTags( diy, Name_box ); + + Header_box = markupBox(sheet); + Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'ResHeader-style'), null); + Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); + + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + Body_box.setTextFitting( FIT_NONE ); + initBodyTags( diy, Body_box ); + initGuideTags( diy, Body_box ); + + Page_box = markupBox(sheet); + Page_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); + Page_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); + + setupGuidePortrait( diy, 0, $PositionPortrait1, false ); + setupGuidePortrait( diy, 1, $PositionPortrait2, false ); +} + +function createBackPainter( diy, sheet ) { +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + drawGuideTemplateLetter( diy, g, sheet, Label_box ); + + if ( $PageType == 'Title' ) drawName( g, diy, sheet, Name_box ); + + var bodyRegions = [ + diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body' + 'Left' + $PageType + '-region' ) ), + diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body' + 'Right' + $PageType + '-region' ) ), + ]; + + drawGuidePortraits( g, diy, sheet ); + portraitBodyRegions = updateGuideBodyRegions( diy, bodyRegions ); + + if ( $PageType == 'Empty' ) drawPageNumber( g, diy, sheet, Page_box ); + + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[0], $RulesLeft, parseInt( $LineSpacingLeft )); + drawGuideBody( g, diy, sheet, Body_box, Header_box, portraitBodyRegions[1], $RulesRight, parseInt( $LineSpacingRight )); +} + +function paintBack( g, diy, sheet ) { +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + diy.version = 16; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Investigator.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Investigator.js index bdc8016..61dded6 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Investigator.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Investigator.js @@ -13,7 +13,7 @@ const PortraitTypeList = [ 'TransparentPortrait-Both', 'Portrait-Back', 'Collect function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -21,8 +21,9 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); setDefaultCollection(); - - diy.version = 12; + + diy.setCornerRadius(8); + diy.version = 15; } function setDefaults() { @@ -35,16 +36,16 @@ function setDefaults() { $Agility = '3'; $Stamina = '7'; $Sanity = '7'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; - + $Text1NameBack = 'Deck Size'; $Text1Back = '30.'; $Text1BackSpacing = '0'; @@ -54,7 +55,7 @@ function setDefaults() { $Text3NameBack = 'Deckbuilding Options'; $Text3Back = ''; $Text3BackSpacing = '0'; - $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; + $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; $Text4Back = ''; $Text4BackSpacing = '0'; $Text5NameBack = 'Deckbuilding Restrictions'; @@ -67,9 +68,9 @@ function setDefaults() { $Text7Back = ''; $Text7BackSpacing = '0'; $Text8NameBack = ''; - $Text8Back = ''; + $Text8Back = ''; - $InvStoryBack = ''; + $InvStoryBack = ''; /* $DeckSizeBack = '30'; $SecondaryClassBack = ''; @@ -90,16 +91,20 @@ function setDefaults() { $Copyright = ''; $PortraitShare = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0, 1], FACE_FRONT ); var StatPanel = layoutInvestigatorStats( diy, bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -121,7 +126,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -135,24 +140,24 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); Subtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtitle-alignment')); - + Skill_box_array = []; for ( let i = 0; i < 4; i++ ) { Skill_box_array[i] = markupBox(sheet); Skill_box_array[i].defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Skill-style'), null); - Skill_box_array[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); + Skill_box_array[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); } Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Body_box ); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); @@ -162,7 +167,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -174,7 +179,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -186,7 +191,7 @@ function createBackPainter( diy, sheet ) { // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ), $CardClass ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ), $CardClass ); - initBodyTags( diy, BackBody_box ); + initBodyTags( diy, BackBody_box ); } function paintFront( g, diy, sheet ) { @@ -201,18 +206,17 @@ function paintFront( g, diy, sheet ) { if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, $CardClass, false ); drawSkills( g, diy, sheet, Skill_box_array, [ 'Willpower', 'Intellect', 'Combat', 'Agility' ] ); - + drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); // drawCollectorInfo( g, diy, sheet, true, false, false, false, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, null, false, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, null, false, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - clearImage( g, sheet ); PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); @@ -225,7 +229,7 @@ function paintBack( g, diy, sheet ) { // drawBody( g, diy, sheet, BackBody_box, new Array( 'DeckSize', 'SecondaryClass', 'DeckOptions', 'DeckRequirements', 'DeckRestrictions', 'AdditionalRequirements', 'InvStory' ) ); drawInvBackBody( g, diy, sheet, BackBody_box, new Array( 'Text1', 'Text2', 'Text3', 'Text4', 'Text5', 'Text6', 'Text7', 'Text8', 'InvStory' ) ); -} +} function onClear() { setDefaults(); @@ -255,6 +259,7 @@ function getPathPointArrays( className ) { case 'Mystic': case 'ParallelMystic': case 'Survivor': + case 'ParallelSurvivor': pointArray[0] = new Array( 0.355, 0.315, 0.276, 0.264, 0.010, 0.010, 1.0, 1.0 ); // pointArray[1] = new Array( 0.000, 0.544, 0.544, 0.631, 0.631, 1.000, 1.0, 0.0 ); pointArray[1] = new Array( 0.000, 0.544, 0.544, 0.611, 0.611, 1.000, 1.0, 0.0 ); @@ -275,7 +280,7 @@ function createBackTextShape( textBox, textRegion, className ) { var h = textRegion.height; var pointArrays = getPathPointArrays( className ); - + var xPathPoints = pointArrays[0]; var yPathPoints = pointArrays[1]; @@ -290,7 +295,7 @@ function createBackTextShape( textBox, textRegion, className ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -325,7 +330,7 @@ function onRead(diy, oos) { $Text1NameBack = 'Deck Size'; $Text2NameBack = 'Secondary Class Choice'; $Text3NameBack = 'Deckbuilding Options'; - $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; + $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; $Text5NameBack = 'Deckbuilding Restrictions'; $Text6NameBack = 'Additional Requirements'; $Text7NameBack = 'Additional Restrictions'; @@ -340,6 +345,7 @@ function onRead(diy, oos) { $Text7Back = ''; $Text8Back = ''; + // this may just be needed because of corrupt .eon files, but it can't hurt if ( $Text1Back == null ) $Text1Back = ''; if ( $Text2Back == null ) $Text2Back = ''; if ( $Text3Back == null ) $Text3Back = ''; @@ -361,11 +367,29 @@ function onRead(diy, oos) { if ( $Text4BackSpacing == null ) $Text4BackSpacing = '0'; if ( $Text5BackSpacing == null ) $Text5BackSpacing = '0'; if ( $Text6BackSpacing == null ) $Text6BackSpacing = '0'; + + diy.settings.reset('DeckSizeBack'); + diy.settings.reset('SecondaryClassBack'); + diy.settings.reset('DeckOptionsBack'); + diy.settings.reset('DeckRequirementsBack'); + diy.settings.reset('DeckRestrictionsBack'); + diy.settings.reset('AdditionalReuirementsBack'); + diy.settings.reset('DeckSizeBackSpacing'); + diy.settings.reset('SecondaryClassBackSpacing'); + diy.settings.reset('DeckOptionsBackSpacing'); + diy.settings.reset('DeckRequirementsBackSpacing'); + diy.settings.reset('DeckRestrictionsBackSpacing'); + diy.settings.reset('AdditionalRequirementsBackSpacing'); + } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; } - + updateCollection(); - - diy.version = 12; + + diy.setCornerRadius(8); + diy.version = 15; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/InvestigatorStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/InvestigatorStory.js index 62c6f65..d5ace71 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/InvestigatorStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/InvestigatorStory.js @@ -13,7 +13,7 @@ const PortraitTypeList = [ 'TransparentPortrait-Both', 'Portrait-Back', 'Collect function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -22,8 +22,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 13; + + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { @@ -35,12 +36,14 @@ function setDefaults() { $Agility = '3'; $Stamina = '7'; $Sanity = '7'; - + + $Class = 'Story'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; @@ -54,7 +57,7 @@ function setDefaults() { $Text3NameBack = 'Deckbuilding Options'; $Text3Back = ''; $Text3BackSpacing = '0'; - $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; + $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; $Text4Back = ''; $Text4BackSpacing = '0'; $Text5NameBack = 'Deckbuilding Restrictions'; @@ -70,41 +73,25 @@ function setDefaults() { $Text8Back = ''; $InvStoryBack = ''; -/* - $DeckSizeBack = '30'; - $SecondaryClassBack = ''; - $DeckOptionsBack = ''; - $DeckRequirementsBack = ''; - $DeckRestrictionsBack = ''; - $AdditionalReqirementsBack = ''; - $SetupBack = ''; - $StartingPlayAreaBack = ''; - $OpeningHandBack = ''; - - $DeckSizeBackSpacing = '0'; - $SecondaryClassBackSpacing = '0'; - $DeckOptionsBackSpacing = '0'; - $DeckRequirementsBackSpacing = '0'; - $DeckRestrictionsBackSpacing = '0'; - $AdditionalRequirementsBackSpacing = '0'; - $SetupBackSpacing = '0'; - $StartingPlayAreaBackSpacing = '0'; - $OpeningHandBackSpacing = '0'; -*/ + $Artist = ''; $Copyright = ''; $PortraitShare = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, true, [0, 1], FACE_FRONT ); var StatPanel = layoutStoryInvestigatorStats( diy, bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -126,7 +113,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -148,24 +135,24 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtitle_box = markupBox(sheet); Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtitle-style'), null); Subtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtitle-alignment')); - + Skill_box_array = []; for ( let i = 0; i < 4; i++ ) { Skill_box_array[i] = markupBox(sheet); Skill_box_array[i].defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Skill-style'), null); - Skill_box_array[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); + Skill_box_array[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Skill-alignment')); } Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Body_box ); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); @@ -175,7 +162,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -191,7 +178,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -207,7 +194,7 @@ function createBackPainter( diy, sheet ) { BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); - initBodyTags( diy, BackBody_box ); + initBodyTags( diy, BackBody_box ); } function paintFront( g, diy, sheet ) { @@ -219,17 +206,17 @@ function paintFront( g, diy, sheet ) { drawName( g, diy, sheet, Name_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Neutral', false ); + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, 'Story', false ); drawSkills( g, diy, sheet, Skill_box_array, [ 'Willpower', 'Intellect', 'Combat', 'Agility' ] ); - + drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); // drawCollectorInfo( g, diy, sheet, true, false, false, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -241,75 +228,18 @@ function paintBack( g, diy, sheet ) { drawName( g, diy, sheet, BackName_box ); - if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Neutral', false ); + if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Story', false ); // drawBody( g, diy, sheet, BackBody_box, new Array( 'DeckSize', 'SecondaryClass', 'DeckOptions', 'DeckRequirements', 'DeckRestrictions', 'AdditionalRequirements', 'Setup', 'StartingPlayArea', 'OpeningHand', 'InvStory' ) ); drawInvBackBody( g, diy, sheet, BackBody_box, new Array( 'Text1', 'Text2', 'Text3', 'Text4', 'Text5', 'Text6', 'Text7', 'Text8', 'InvStory' ) ); - + drawEncounterIcon( g, diy, sheet ); -} +} function onClear() { setDefaults(); } -/* -function getPathPointArrays( className ) { - pointArray = []; - - switch ( className ) - { - case 'Guardian': - pointArray[0] = new Array( 0.355, 0.337, 0.271, 0.267, 0.010, 0.010, 1.0, 1.0 ); - pointArray[1] = new Array( 0.000, 0.566, 0.566, 0.600, 0.600, 1.000, 1.0, 0.0 ); - break; - case 'Seeker': - pointArray[0] = new Array( 0.355, 0.322, 0.296, 0.275, 0.010, 0.010, 1.0, 1.0 ); - pointArray[1] = new Array( 0.000, 0.585, 0.578, 0.630, 0.622, 1.000, 1.0, 0.0 ); - break; - case 'Rogue': - pointArray[0] = new Array( 0.355, 0.326, 0.272, 0.264, 0.000, 0.0, 1.0, 1.0 ); - pointArray[1] = new Array( 0.000, 0.511, 0.511, 0.593, 0.593, 1.0, 1.0, 0.0 ); - break; - case 'Mystic': - case 'Survivor': - pointArray[0] = new Array( 0.355, 0.315, 0.276, 0.264, 0.010, 0.010, 1.0, 1.0 ); - pointArray[1] = new Array( 0.000, 0.544, 0.544, 0.631, 0.631, 1.000, 1.0, 0.0 ); - break; - case 'Neutral': - pointArray[0] = new Array( 0.400, 0.357, 0.010, 0.010, 1.0, 1.0 ); - pointArray[1] = new Array( 0.000, 0.468, 0.468, 1.000, 1.0, 0.0 ); - break; - } - - return pointArray; -} - -function createBackTextShape( textBox, textRegion, className ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var pointArrays = getPathPointArrays( className ); - - var xPathPoints = pointArrays[0]; - var yPathPoints = pointArrays[1]; - - var path = new java.awt.geom.Path2D.Double(); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - for (let i = 0; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setBackTextShape( box, region, className ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -349,7 +279,7 @@ function onRead(diy, oos) { $Text1NameBack = 'Deck Size'; $Text2NameBack = 'Secondary Class Choice'; $Text3NameBack = 'Deckbuilding Options'; - $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; + $Text4NameBack = 'Deckbuilding Requirements (do not count toward deck size)'; $Text5NameBack = 'Deckbuilding Restrictions'; $Text6NameBack = 'Additional Requirements'; $Text7NameBack = 'Additional Restrictions'; @@ -372,10 +302,18 @@ function onRead(diy, oos) { $Text6BackSpacing = $AdditionalRequirementsBackSpacing; $Text7BackSpacing = '0'; } - + if ( diy.vesion < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.vesion < 16 ) { + diy.settings.reset('AHLCG-Investigator-Encounter-portrait-clip-region'); + } + updateCollection(); - - diy.version = 13; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Key.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Key.js new file mode 100644 index 0000000..6e39715 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Key.js @@ -0,0 +1,293 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); +useLibrary('tints'); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'Key', 'KeyBack' ]; +const BindingSuffixes = [ '', 'Back' ]; + +const PortraitTypeList = [ 'Portrait-Both', 'BackPortrait-Back', 'Collection-Both', 'Encounter-Both' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size + diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + setDefaultEncounter(); + setDefaultCollection(); + + diy.setCornerRadius(8); + diy.version = 2; +} + +function setDefaults() { + $Unique = '0'; + $Subtitle = ''; + + $Traits = ''; + $Keywords = ''; + $Rules = ''; + $Flavor = ''; + $Victory = ''; + + $TraitsSpacing = '0'; + $KeywordsSpacing = '0'; + $RulesSpacing = '0'; + $FlavorSpacing = '0'; + + $Artist = ''; + $Copyright = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + //Back + $UniqueBack = '0'; + $SubtitleBack = ''; + + $TraitsBack = ''; + $KeywordsBack = ''; + $RulesBack = ''; + $FlavorBack = ''; + $VictoryBack = ''; + + $TraitsBackSpacing = '0'; + $KeywordsBackSpacing = '0'; + $RulesBackSpacing = '0'; + $FlavorBackSpacing = '0'; + + $ArtistBack = ''; + $PortraitShare = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + var TitlePanel = layoutTitleUnique( diy, bindings, true, [0, 1], FACE_FRONT ); + TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); +// var StatsPanel = layoutKeyStats( bindings, FACE_FRONT ); +// StatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); + var BackTitlePanel = layoutTitleUnique( diy, bindings, true, [1], FACE_BACK ); + BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); +// var BackStatsPanel = layoutKeyStats( bindings, FACE_BACK ); +// BackStatsPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; +// StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatsPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatsPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); + TextTab.editorTabScrolling = true; + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); + + var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); + BackTextTab.editorTabScrolling = true; + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); + + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', 'BackPortrait', true, true, true ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); + + var CollectionTab = new Grid(); + CollectionTab.editorTabScrolling = true; + CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); + CollectionTab.addToEditor(editor, @AHLCG-Collection); + + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + + initBodyTags( diy, Name_box ); + + Subtitle_box = markupBox(sheet); + Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); + Subtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Subtitle-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + + initBodyTags( diy, Body_box ); + + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); +} + +function createBackPainter( diy, sheet ) { + BackLabel_box = markupBox(sheet); + BackLabel_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Label-style'), null); + BackLabel_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Label-alignment')); + + BackName_box = markupBox(sheet); + BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Name-style'), null); + BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Name-alignment')); + + initBodyTags( diy, BackName_box ); + + BackSubtitle_box = markupBox(sheet); + BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Subtitle-style'), null); + BackSubtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Subtitle-alignment')); + + BackBody_box = markupBox(sheet); + BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); + setTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); + + initBodyTags( diy, BackBody_box ); + + BackArtist_box = markupBox(sheet); + BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); + BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); + + BackCopyright_box = markupBox(sheet); + BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); + BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); + + initCopyrightTags( diy, BackCopyright_box ); + + BackCollection_box = markupBox(sheet); + BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); + BackCollection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'CollectionNumber-alignment')); + + BackEncounter_box = markupBox(sheet); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + drawTemplate( g, sheet, '' ); + + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Key ); + drawName( g, diy, sheet, Name_box ); + drawSubtitle( g, diy, sheet, Subtitle_box, '', false ); + + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); + + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + + if ( $PortraitShare == '1' ) { + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + } + else { + PortraitList[getPortraitIndex( 'BackPortrait' )].paint( g, sheet.getRenderTarget() ); + } + + drawTemplate( g, sheet, '' ); + + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Key ); + drawName( g, diy, sheet, BackName_box ); + drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); + + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); + + drawCollectorInfo( g, diy, sheet, BackCollection_box, false, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); +} + +function setTextShape( box, region ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + box.pageShape = AHLCGObject.getKeyTextShape( region ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + if ( diy.version < 2 ) { + $PortraitShare = '0'; + } + + updateCollection(); + + diy.setCornerRadius(8); + diy.version = 2; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Location.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Location.js index 21bd990..1722acf 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Location.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Location.js @@ -17,7 +17,7 @@ const PortraitTypeList = [ 'Portrait-Both', 'BackPortrait-Back', 'Collection-Bot function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -27,10 +27,11 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 18; } -function setDefaults() { +function setDefaults() { // front $Subtitle = ''; $Traits = ''; @@ -38,12 +39,12 @@ function setDefaults() { $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $LocationIcon = 'Circle'; $Connection1Icon = 'None'; $Connection2Icon = 'None'; @@ -58,17 +59,19 @@ function setDefaults() { $Shroud = '1'; $Clues = '1'; $PerInvestigator = '1'; - $BackType = 'Standard'; - + $ShroudPerInvestigator = '0'; +// $BackType = 'Standard'; + $BackTypeBack = 'Standard'; + // back $TitleBack = ''; $SubtitleBack = ''; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; @@ -83,32 +86,41 @@ function setDefaults() { $Connection6IconBack = 'Copy front'; $ArtistBack = ''; - $PortraitShare = '1'; + + $ShowEncounterIcon = '1'; + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, true, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutLocationStats( bindings, FACE_FRONT ); - var ConnectionPanel = layoutConnections( bindings, [0, 1], FACE_FRONT ); + StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); + var ConnectionPanel = layoutConnections( false, bindings, [0, 1], FACE_FRONT ); ConnectionPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Front ); - + var BackTitlePanel = layoutTitle( diy, bindings, true, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var BackConnectionPanel = layoutConnections( bindings, [1], FACE_BACK ); + var BackStatPanel = layoutLocationBackTypeStats( diy, bindings, FACE_BACK ); + BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + var BackConnectionPanel = layoutConnections( true, bindings, [1], FACE_BACK ); BackConnectionPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; - StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', ConnectionPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackConnectionPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', ConnectionPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', BackConnectionPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -122,7 +134,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -130,7 +142,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -155,17 +167,19 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); +// Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + // just going to use standard body style Victory_box = markupBox(sheet); Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Victory-alignment')); - Victory_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Victory', '-tightness') + '-tightness') ); + Victory_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Victory', '-tightness') + '-tightness') ); + + initBodyTags( diy, Victory_box ); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); @@ -175,7 +189,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -202,11 +216,30 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); + initBodyTags( diy, BackBody_box ); + + BackArtist_box = markupBox(sheet); + BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); + BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); + + BackCopyright_box = markupBox(sheet); + BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); + BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); + + initCopyrightTags( diy, BackCopyright_box ); +/* + BackCollection_box = markupBox(sheet); + BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); + BackCollection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'CollectionNumber-alignment')); + + BackEncounter_box = markupBox(sheet); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); +*/ } function paintFront( g, diy, sheet ) { @@ -216,14 +249,13 @@ function paintFront( g, diy, sheet ) { if ( $Subtitle.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); drawName( g, diy, sheet, Name_box ); if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, '', false ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, Victory_box ); if ( $LocationIcon != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -234,14 +266,23 @@ function paintFront( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } + var encounterIcon = false; + + if ( $ShowEncounterIcon == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; + } + // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, encounterIcon, Copyright_box, Artist_box ); + + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); - if ( $BackType == 'Standard' ) { + if ( $BackTypeBack == 'Standard' ) { if ( $PortraitShare == '1' ) { PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); } @@ -251,9 +292,14 @@ function paintBack( g, diy, sheet ) { if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - + + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + drawEncounterIcon( g, diy, sheet ); + } + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); - + drawName( g, diy, sheet, BackName_box ); if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); @@ -268,17 +314,15 @@ function paintBack( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } - drawEncounterIcon( g, diy, sheet ); - // this is icky... if ( $PortraitShare == '1' ) { - if ( $Artist.length > 0) drawArtist( g, diy, sheet, true ); + if ( $Artist.length > 0) drawArtist( g, diy, sheet, BackArtist_box, true ); } - else { - if ( $ArtistBack.length > 0 ) drawArtist( g, diy, sheet, false ); + else { + if ( $ArtistBack.length > 0 ) drawArtist( g, diy, sheet, BackArtist_box, false ); } - if ( $Copyright.length > 0 ) drawCopyright( g, diy, sheet ); + if ( $Copyright.length > 0 ) drawCopyright( g, diy, sheet, BackCopyright_box ); } else { drawBackTemplate( g, sheet ); @@ -297,15 +341,15 @@ function createTextShape( textBox, textRegion ) { var path = new java.awt.geom.Path2D.Double(); - // asymmetrical + // asymmetrical var xPathPoints = new Array( 0.074, 0.000, 0.000, 1.000, 1.000, 0.951, 0.926 ); var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - + var xControlPoints = new Array( 0.037, 0.107, 0.991, 0.962, 0.936, 0.970 ); var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); // just create by hand, it's asymmetrical @@ -313,7 +357,7 @@ function createTextShape( textBox, textRegion ) { x + w * xControlPoints[1], y + h * yControlPoints[1], x + w * xPathPoints[1], y + h * yPathPoints[1] ); - + for (let i = 2; i <= 4; i++) { path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); } @@ -326,7 +370,7 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } @@ -339,7 +383,7 @@ function createBackTextShape( textBox, textRegion ) { // var xPathPoints = new Array( 0.151, 0.000, 0.000, 1.000, 1.000, 0.849 ); var xPathPoints = new Array( 0.111, 0.000, 0.000, 1.000, 1.000, 0.889 ); var yPathPoints = new Array( 0.000, 0.204, 1.000, 1.000, 0.204, 0.000 ); - + var path = new java.awt.geom.Path2D.Double(); var numPoints = xPathPoints.length; @@ -351,7 +395,7 @@ function createBackTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -377,7 +421,7 @@ function createVictoryTextShape( textBox, textRegion ) { var yPathPoints = new Array( 0.000, 0.000, 1.000, 1.000, 0.500 ); // var xPathPoints = new Array( 0.000, 1.000, 1.000 ); // var yPathPoints = new Array( 0.000, 0.000, 1.000 ); - + var path = new java.awt.geom.Path2D.Double(); var numPoints = xPathPoints.length; @@ -389,7 +433,7 @@ function createVictoryTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } @@ -406,11 +450,33 @@ function onRead(diy, oos) { $SubtitleBack = ''; if ( $BackType == null ) $BackType = 'Standard'; } - + if ( diy.version < 15 ) { + $ShowEncounterIconBack = '1'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + // it's calling this multiple times, and $BackType is null on the second + if ( $BackType ) { + $BackTypeBack = $BackType; + diy.settings.reset('BackType'); + } + } + if ( diy.version < 17) { + $ShowEncounterIcon = '1'; + } + if ( diy.version < 18 ) { + $ShroudPerInvestigator = '0'; + } + + // some files, probably from a test version have $BackType and $BackTypeBack == null +// if ( $BackTypeBack == null) $BackTypeBack = 'Standard'; + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/LocationLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/LocationLocation.js index 05a523e..1048562 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/LocationLocation.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/LocationLocation.js @@ -17,7 +17,7 @@ const PortraitTypeList = [ 'Portrait-Both', 'BackPortrait-Back', 'Collection-Bot function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -27,10 +27,11 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 17; } -function setDefaults() { +function setDefaults() { // front $Subtitle = ''; $Traits = ''; @@ -38,12 +39,12 @@ function setDefaults() { $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $LocationIcon = 'Circle'; $Connection1Icon = 'None'; $Connection2Icon = 'None'; @@ -58,17 +59,18 @@ function setDefaults() { $Shroud = '1'; $Clues = '1'; $PerInvestigator = '1'; - + $ShroudPerInvestigator = '0'; + // back $TitleBack = ''; $SubtitleBack = ''; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; @@ -85,37 +87,45 @@ function setDefaults() { $ShroudBack = '1'; $CluesBack = '1'; $PerInvestigatorBack = '1'; + $ShroudPerInvestigatorBack = '0'; $ArtistBack = ''; $PortraitShare = '1'; + + $ShowEncounterIcon = '1'; + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, true, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); var StatPanel = layoutLocationBackStats( bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var ConnectionPanel = layoutConnections( bindings, [0, 1], FACE_FRONT ); + var ConnectionPanel = layoutConnections( false, bindings, [0, 1], FACE_FRONT ); ConnectionPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Front ); - + var BackTitlePanel = layoutTitle( diy, bindings, true, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutLocationBackStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var BackConnectionPanel = layoutConnections( bindings, [1], FACE_BACK ); + var BackConnectionPanel = layoutConnections( true, bindings, [1], FACE_BACK ); BackConnectionPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', ConnectionPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', BackConnectionPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); @@ -129,7 +139,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -137,7 +147,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -162,17 +172,19 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + // just going to use standard body style Victory_box = markupBox(sheet); Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Victory-alignment')); - Victory_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Victory', '-tightness') + '-tightness') ); + Victory_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Victory', '-tightness') + '-tightness') ); + + initBodyTags( diy, Victory_box ); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); @@ -182,7 +194,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -209,17 +221,19 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + // just going to use standard body style BackVictory_box = markupBox(sheet); BackVictory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackVictory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); - BackVictory_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Victory', '-tightness') + '-tightness') ); + BackVictory_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Victory', '-tightness') + '-tightness') ); + + initBodyTags( diy, BackVictory_box ); BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); @@ -229,7 +243,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'CollectionNumber-style'), null); @@ -247,13 +261,12 @@ function paintFront( g, diy, sheet ) { if ( $Subtitle.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); drawName( g, diy, sheet, Name_box ); if ( $Subtitle.length > 0 ) drawSubtitle( g, diy, sheet, Subtitle_box, '', false ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, Victory_box ); if ( $LocationIcon != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -264,8 +277,17 @@ function paintFront( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } + var encounterIcon = false; + + if ( $ShowEncounterIcon == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; + } + // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, true, true, Encounter_box, encounterIcon, Copyright_box, Artist_box ); + + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); } function paintBack( g, diy, sheet ) { @@ -280,14 +302,13 @@ function paintBack( g, diy, sheet ) { if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - - drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); + drawName( g, diy, sheet, BackName_box ); if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, BackVictory_box ); if ( $LocationIcon != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -298,8 +319,25 @@ function paintBack( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } + // this is icky... + if ( $PortraitShare == '1' ) { + if ( $Artist.length > 0) drawArtist( g, diy, sheet, BackArtist_box, true ); + } + else { + if ( $ArtistBack.length > 0 ) drawArtist( g, diy, sheet, BackArtist_box, false ); + } + + var encounterIcon = false; + + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; + } + // drawCollectorInfo( g, diy, sheet, true, true, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, BackCollection_box, true, true, BackEncounter_box, encounterIcon, BackCopyright_box ); + + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Location ); } function onClear() { @@ -314,15 +352,15 @@ function createTextShape( textBox, textRegion ) { var path = new java.awt.geom.Path2D.Double(); - // asymmetrical + // asymmetrical var xPathPoints = new Array( 0.074, 0.000, 0.000, 1.000, 1.000, 0.951, 0.926 ); var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - + var xControlPoints = new Array( 0.037, 0.107, 0.991, 0.962, 0.936, 0.970 ); var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); // just create by hand, it's asymmetrical @@ -330,7 +368,7 @@ function createTextShape( textBox, textRegion ) { x + w * xControlPoints[1], y + h * yControlPoints[1], x + w * xPathPoints[1], y + h * yPathPoints[1] ); - + for (let i = 2; i <= 4; i++) { path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); } @@ -343,7 +381,7 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } @@ -356,7 +394,7 @@ function createBackTextShape( textBox, textRegion ) { // var xPathPoints = new Array( 0.151, 0.000, 0.000, 1.000, 1.000, 0.849 ); var xPathPoints = new Array( 0.111, 0.000, 0.000, 1.000, 1.000, 0.889 ); var yPathPoints = new Array( 0.000, 0.204, 1.000, 1.000, 0.204, 0.000 ); - + var path = new java.awt.geom.Path2D.Double(); var numPoints = xPathPoints.length; @@ -368,7 +406,7 @@ function createBackTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -394,7 +432,7 @@ function createVictoryTextShape( textBox, textRegion ) { var yPathPoints = new Array( 0.000, 0.000, 1.000, 1.000, 0.500 ); // var xPathPoints = new Array( 0.000, 1.000, 1.000 ); // var yPathPoints = new Array( 0.000, 0.000, 1.000 ); - + var path = new java.awt.geom.Path2D.Double(); var numPoints = xPathPoints.length; @@ -406,7 +444,7 @@ function createVictoryTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } @@ -415,11 +453,21 @@ function createVictoryTextShape( textBox, textRegion ) { // of the script. function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); - + + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 17) { + $ShowEncounterIcon = '1'; + $ShowEncounterIconBack = '1'; + } + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/MiniInvestigator.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/MiniInvestigator.js index 2da09d1..6ba9a40 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/MiniInvestigator.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/MiniInvestigator.js @@ -22,6 +22,7 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); + diy.setCornerRadius(8); diy.version = 8; } @@ -30,7 +31,7 @@ function setDefaults() { function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); PortraitTab = layoutPortraits( diy, bindings, 'Portrait', null, true, false, false ); @@ -39,7 +40,10 @@ function createInterface( diy, editor ) { bindings.bind(); } -function createFrontPainter( diy, sheet ) { +function createFrontPainter( diy, sheet ) { + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); } function createBackPainter( diy, sheet ) { @@ -51,6 +55,7 @@ function paintFront( g, diy, sheet ) { drawTemplate( g, sheet, '' ); PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + drawArtist( g, diy, sheet, Artist_box, false ); } function paintBack( g, diy, sheet ) { @@ -63,12 +68,12 @@ function paintBack( g, diy, sheet ) { var imagePanY = PortraitList[getPortraitIndex( 'Portrait' )].getPanY(); var imageRotation = PortraitList[getPortraitIndex( 'Portrait' )].getRotation(); var imageScale = PortraitList[getPortraitIndex( 'Portrait' )].getScale(); - + imageTinted = createGreyscaleImage( imageTinted ); var region = diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Portrait-portrait-clip-region') ); - var AT = java.awt.geom.AffineTransform; + var AT = java.awt.geom.AffineTransform; var transform = AT.getTranslateInstance( region.x + region.width/2 + imagePanX - ( ( imageTinted.width * imageScale ) / 2 ), region.y + region.height/2 + imagePanY - ( ( imageTinted.height * imageScale ) / 2 ) @@ -77,7 +82,7 @@ function paintBack( g, diy, sheet ) { transform.concatenate( AT.getRotateInstance( -imageRotation * Math.PI/180, imageTinted.width/2, imageTinted.height/2 ) ); g.drawImage(imageTinted, transform, null); -} +} function onClear() { setDefaults(); @@ -88,7 +93,8 @@ function onClear() { // of the script. function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); - + + diy.setCornerRadius(8); diy.version = 8; } diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/PackCover.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/PackCover.js new file mode 100644 index 0000000..0f9a8a6 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/PackCover.js @@ -0,0 +1,114 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'PackCover' ]; +const BindingSuffixes = ['']; + +const PortraitTypeList = [ 'Portrait-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size + + diy.faceStyle = FaceStyle.ONE_FACE; + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + + diy.version = 1; +} + +function setDefaults() { + $tint = '0,1,1'; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + // do this first, we need the portrait panels for the title listener + var PortraitTabArray = layoutPortraitsWithPanels( diy, bindings, 'Portrait', null, true, false, false ); + var PortraitTab = PortraitTabArray[0]; + PortraitTabArray.splice( 0, 1 ); + + var HSBPanel = layoutHSBPanel(diy, bindings); + HSBPanel.addToEditor(editor, 'Tint'); + + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); + TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx'); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + + initBodyTags( diy, Name_box ); +} + +function paintFront(g, diy, sheet) { + clearImage(g, sheet); + + PortraitList[0].paint( g, sheet.getRenderTarget() ); + + var hsb = $$tint.tint; + var tintable_image = ImageUtils.get('ArkhamHorrorLCG/templates/AHLCG-PackCoverTintable.png'); + let tinted_image = ImageUtils.tint(tintable_image, hsb); + sheet.paintImage(g, tinted_image, diy.settings.getRegion('AHLCG-PackCover-Tint-region')); + + drawBackTemplate( g, sheet, '' ); + + drawName( g, diy, sheet, Name_box ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + diy.version = 1; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Scenario.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Scenario.js index 7369d28..db24ddf 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Scenario.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Scenario.js @@ -9,7 +9,7 @@ importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'Scenario', 'Scenario' ]; const BindingSuffixes = [ '', 'Back' ]; -const PortraitTypeList = [ 'Portrait', 'BackPortrait' ]; +const PortraitTypeList = [ 'Portrait', 'BackPortrait', 'Collection-Both', 'Encounter-Both' ]; function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size @@ -21,40 +21,63 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); - - diy.version = 8; + setDefaultEncounter(); + setDefaultCollection(); + + diy.setCornerRadius(8); + diy.version = 17; } function setDefaults() { - $PageType = 'Title'; - $PageTypeBack = 'Title'; +// $PageType = 'Title'; +// $PageTypeBack = 'Title'; + $Template = 'Title'; + $TemplateBack = 'Title'; $Artist = ''; $ArtistBack = ''; $Page = '1'; $PageBack = '2'; - + $Rules = ''; $RulesBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + + $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - - var TitlePanel = layoutTitleScenario( diy, bindings, [0, 1], FACE_FRONT ); - var StatPanel = layoutScenarioStats( bindings, FACE_FRONT ); + +/// var TitlePanel = layoutTitleScenario( diy, bindings, [0, 1], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); + var StatPanel = layoutScenarioStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var BackTitlePanel = layoutTitleScenario( diy, bindings, [1], FACE_BACK ); +/// var BackTitlePanel = layoutTitleScenario( diy, bindings, [1], FACE_BACK ); + var BackTitlePanel = layoutTitle2( diy, bindings, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var BackStatPanel = layoutScenarioStats( bindings, FACE_BACK ); + var BackStatPanel = layoutScenarioStats( diy, bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; - StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx' ); + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); PortraitTab = layoutPortraits( diy, bindings, 'Portrait', 'BackPortrait', true, false, true ); @@ -68,98 +91,227 @@ function createInterface( diy, editor ) { BackTextTab.editorTabScrolling = true; BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + + var CollectionTab = new Grid(); + CollectionTab.editorTabScrolling = true; + CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); + CollectionTab.addToEditor(editor, @AHLCG-Collection); + + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + bindings.bind(); } -function createFrontPainter( diy, sheet ) { +function createFrontPainter( diy, sheet ) { Name_box = markupBox(sheet); Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + Name_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Name', '-tightness') + '-tightness') ); + initBodyTags( diy, Name_box ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - + Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); - initBodyTags( diy, Body_box ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + initBodyTags( diy, Body_box ); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); +// Page_box = markupBox(sheet); +// Page_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); +// Page_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); Page_box = markupBox(sheet); - Page_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); - Page_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); + Page_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Scenario-Page-style', null); + Page_box.alignment = diy.settings.getTextAlignment('AHLCG-Scenario-Page-alignment'); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Scenario', '' ); } function createBackPainter( diy, sheet ) { BackName_box = markupBox(sheet); BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackHeader_box = markupBox(sheet); - BackHeader_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); - BackHeader_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - + BackHeader_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Header-style'), null); + BackHeader_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Header-alignment')); + BackBody_box = markupBox(sheet); - BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); - BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); - initBodyTags( diy, BackBody_box ); + BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + initBodyTags( diy, BackBody_box ); BackArtist_box = markupBox(sheet); - BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); - BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); + BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); + BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); BackPage_box = markupBox(sheet); - BackPage_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Page-style'), null); - BackPage_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Page-alignment')); + BackPage_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Scenario-Page-style', null); + BackPage_box.alignment = diy.settings.getTextAlignment('AHLCG-Scenario-Page-alignment'); + + BackCopyright_box = markupBox(sheet); + BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); + BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); + + initCopyrightTags( diy, BackCopyright_box ); + + BackCollection_box = markupBox(sheet); + BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); + BackCollection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'CollectionNumber-alignment')); + + BackEncounter_box = markupBox(sheet); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); + + updateCardType( diy, $TemplateBack, FACE_BACK, 'Scenario', '' ); } function paintFront( g, diy, sheet ) { clearImage( g, sheet ); - if ( $PageType == 'Portrait' ) { + var drawCollectionInfo = false; + + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + if ( $Template == 'Portrait' ) { PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); } else { drawTemplate( g, sheet, '' ); + } + + if ( $Template == 'Chaos' ) { + drawCollectionInfo = true; + if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); + } + else if ( $Template == 'ChaosFull' ) { + drawCollectionInfo = true; + } + else if ( $Template == 'Resolution' ) { drawPageNumber( g, diy, sheet, Page_box ); + drawScenarioResolutionHeader( g, diy, sheet, Header_box ); } - - if ( $PageType == 'Title' ) drawName( g, diy, sheet, Name_box ); - else if ( $PageType == 'Resolution' ) drawScenarioResolutionHeader( g, diy, sheet, Header_box ); - - drawScenarioBody( g, diy, sheet, Body_box, new Array( 'Rules' ) ); - - if ( $Artist != '' ) drawArtist( g, diy, sheet ); + else if ( $Template == 'Title' ) { + draw2LineName( g, diy, sheet, Name_box ); + drawPageNumber( g, diy, sheet, Page_box ); + } + +// if ( $Template == 'Title' ) drawName( g, diy, sheet, Name_box ); +// else if ( $Template == 'Resolution' ) drawScenarioResolutionHeader( g, diy, sheet, Header_box ); + + drawScenarioBody( g, diy, sheet, Body_box, new Array( 'Rules' ) ); + + if ( drawCollectionInfo ) { + var collectionSuffix = false; + + var showCollectionNumberBack = ( $ShowCollectionNumberBack == '1' ); + if ( $TemplateBack == 'Portrait' || $TemplateBack == 'Resolution' || $TemplateBack == 'Title' ) showCollectionNumberBack = false; + + if ( $ShowCollectionNumberFront == '1' && showCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); + } + + if ( $Artist != '' ) drawArtist( g, diy, sheet, Artist_box, false ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); - if ( $PageTypeBack == 'Portrait' ) { + var drawCollectionInfo = false; + + BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); + BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); + BackHeader_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Header-style'), null); + BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + + if ( $TemplateBack == 'Portrait' ) { PortraitList[getPortraitIndex( 'BackPortrait' )].paint( g, sheet.getRenderTarget() ); } else { drawTemplate( g, sheet, '' ); + } + if ( $TemplateBack == 'Chaos' ) { + drawCollectionInfo = true; + + if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, BackName_box ); + } + else if ( $TemplateBack == 'ChaosFull' ) { + drawCollectionInfo = true; + } + else if ( $TemplateBack == 'Resolution' ) { + drawPageNumber( g, diy, sheet, BackPage_box ); + drawScenarioResolutionHeader( g, diy, sheet, BackHeader_box ); + } + else if ( $TemplateBack == 'Title' ) { + draw2LineName( g, diy, sheet, BackName_box ); drawPageNumber( g, diy, sheet, BackPage_box ); } - if ($PageTypeBack == 'Title' ) drawName( g, diy, sheet, BackName_box ); - else if ( $PageTypeBack == 'Resolution' ) drawScenarioResolutionHeader( g, diy, sheet, BackHeader_box ); - - drawScenarioBody( g, diy, sheet, BackBody_box, new Array( 'Rules' ) ); + drawScenarioBody( g, diy, sheet, BackBody_box, new Array( 'Rules' ) ); + + if ( drawCollectionInfo ) { + var collectionSuffix = false; + + var showCollectionNumberBack = ( $ShowCollectionNumberBack == '1' ); + if ( $Template == 'Portrait' || $Template == 'Resolution' || $Template == 'Title' ) showCollectionNumberFront = false; + + if ( $ShowCollectionNumberFront == '1' && showCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($TemplateBack == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); + } - if ( $ArtistBack != '' ) drawArtist( g, diy, sheet ); -} + if ( $ArtistBack != '' ) drawArtist( g, diy, sheet, BackArtist_box, false ); +} function onClear() { setDefaults(); @@ -176,19 +328,46 @@ function onRead(diy, oos) { $Artist = ''; $ArtistBack = ''; } - - if ( $PageType == 'Portrait' ) PortraitList[0] = oos.readObject(); + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $Template = $PageType; + $TemplateBack = $PageTypeBack; + } + if ( diy.version < 17 ) { + setDefaultEncounter(); + setDefaultCollection(); + + // Create defaults for the new encounter/collection portraits + for ( let i = 2; i < 4; i++ ) { + let fullKey = PortraitTypeList[i]; + createPortrait( diy, fullKey ); + } + } + + if ( $Template == 'Portrait' ) PortraitList[0] = oos.readObject(); else createPortrait( diy, PortraitTypeList[0] ); - + if ( $PageTypeBack == 'Portrait' ) PortraitList[1] = oos.readObject(); else createPortrait( diy, PortraitTypeList[1] ); - - diy.version = 8; + + if ( $Template == 'Chaos' || $TemplateBack == 'Chaos' ) PortraitList[2] = oos.readObject(); + else createPortrait( diy, PortraitTypeList[2] ); + + if ( $Template == 'Chaos' || $Template == 'ChaosFull' || $TemplateBack == 'Chaos' || $TemplateBack == 'ChaosFull' ) PortraitList[3] = oos.readObject(); + else createPortrait( diy, PortraitTypeList[3] ); + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { - if ( $PageType == 'Portrait' ) oos.writeObject( getPortrait(0) ); - if ( $PageTypeBack == 'Portrait' ) oos.writeObject( getPortrait(1) ); + if ( $Template == 'Portrait' ) oos.writeObject( getPortrait(0) ); + if ( $TemplateBack == 'Portrait' ) oos.writeObject( getPortrait(1) ); + if ( $Template == 'Chaos' || $TemplateBack == 'Chaos' ) oos.writeObject( getPortrait(2) ); + if ( $Template == 'Chaos' || $Template == 'ChaosFull' || $TemplateBack == 'Chaos' || $TemplateBack == 'ChaosFull' ) oos.writeObject( getPortrait(3) ); } // This is part of the diy library; calling it from within a diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Skill.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Skill.js index 43c2f68..750c168 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Skill.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Skill.js @@ -7,9 +7,9 @@ useLibrary( 'fontutils' ); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'Skill', 'SkillBack' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; -const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front' ]; +const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front', 'Encounter-Both' ]; function create( diy ) { diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size @@ -22,8 +22,10 @@ function create( diy ) { setDefaults(); createPortraits( diy, PortraitTypeList ); setDefaultCollection(); + setDefaultEncounter(); - diy.version = 13; + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { @@ -35,27 +37,31 @@ function setDefaults() { $Skill4 = 'None'; $Skill5 = 'None'; $Skill6 = 'None'; - - $BackStatBack = 'Player'; - + + $BackTypeBack = 'Player'; + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); @@ -63,13 +69,13 @@ function createInterface( diy, editor ) { StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackStatPanel = layoutBackTypeStats( diy, bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -79,12 +85,20 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + bindings.bind(); } @@ -104,12 +118,12 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -118,11 +132,19 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); } function createBackPainter( diy, sheet ) { @@ -131,30 +153,66 @@ function createBackPainter( diy, sheet ) { function paintFront( g, diy, sheet ) { clearImage( g, sheet ); + // reset hack for moving encounter icons + diy.settings.reset('AHLCG-Skill-DefaultEncounter-portrait-clip-region'); + diy.settings.reset('AHLCG-Skill-DefaultReturnEncounter-portrait-clip-region'); + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); drawTemplate( g, sheet, $CardClass ); drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Skill ); drawName( g, diy, sheet, Name_box ); - if ($CardClass == 'Weakness' ) { + if ($CardClass == 'Weakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); } - else if ($CardClass == 'BasicWeakness' ) { + else if ($CardClass == 'StoryWeakness' ) { + diy.settings.setRegion('AHLCG-Skill-DefaultEncounter-portrait-clip-region', Region(23, 15, 30, 30)); + diy.settings.setRegion('AHLCG-Skill-DefaultReturnEncounter-portrait-clip-region', Region(23, 15, 30, 30)); + drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-Weakness ); + } + else if ($CardClass == 'BasicWeakness' ) { drawSubtype( g, diy, sheet, Subtype_box, #AHLCG-Label-BasicWeakness ); + + drawOverlay( g, diy, sheet, 'BasicWeaknessSkill' ); + drawBasicWeaknessIcon( g, diy, sheet ); } else { drawLevel( g, diy, sheet, $CardClass ); } drawSkillIcons( g, diy, sheet, $CardClass ); - + var regionName = 'Body'; - if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness') regionName = 'WeaknessBody'; + if ( $CardClass == 'Weakness' || $CardClass == 'BasicWeakness' || $CardClass == 'StoryWeakness' ) { + regionName = 'WeaknessBody'; + } drawBodyWithRegionName( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ), regionName ); -// drawCollectorInfo( g, diy, sheet, true, false, false, false, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, null, false, Copyright_box, Artist_box ); + var drawIcon = false; + if ( $CardClass == 'Story'){ + drawIcon = true; + sheet.paintImage( + g, + ImageUtils.get('ArkhamHorrorLCG/overlays/AHLCG-Skill-EncounterSetOverlay.png'), + diy.settings.getRegion('AHLCG-Skill-Encounter-overlay-region') + ); + } else if ($CardClass == 'StoryWeakness'){ + drawIcon = true; + } + + drawCollectorInfo( + g, + diy, + sheet, + Collection_box, + false, + true, + drawIcon ? Encounter_box : null, + drawIcon, + Copyright_box, + Artist_box + ); } function paintBack( g, diy, sheet ) { @@ -166,46 +224,7 @@ function paintBack( g, diy, sheet ) { function onClear() { setDefaults(); } -/* -function createTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.0, 0.015 ); - var yPathPoints = new Array( 0.0, 1.000 ); - - var xControlPoints = new Array( 0.053, 0.088 ); - var yControlPoints = new Array( 0.307, 0.600 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.curveTo( x + w * xControlPoints[i*2 - 2], y + h * yControlPoints[i*2 - 2], - x + w * xControlPoints[i*2 - 1], y + h * yControlPoints[i*2 - 1], - x + w * xPathPoints[i], y + h * yPathPoints[i] - ); - } - path.lineTo( x + w * (1 + xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); - - for (let i = numPoints-2; i >= 0; i--) { - path.curveTo( x + w * (1.0 + xControlPoints[i*2 + 1]), y + h * yControlPoints[i*2 + 1], - x + w * (1.0 + xControlPoints[i*2]), y + h * yControlPoints[i*2], - x + w * (1.0 + xPathPoints[i]), y + h * yPathPoints[i] - ); - } - - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); -} -*/ function setTextShape( box, region ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; @@ -224,13 +243,43 @@ function onRead(diy, oos) { if ( diy.version < 12 ) { $BackTypeBack = 'Player'; } + else { + if ( diy.version < 16 ) { + diy.settings.reset('BackStatBack'); // there was a typo in setDefaults (BackStatBack)... oops + } + if ( diy.version < 17 ) { + if ( $BackTypeundefined ) { // fix for bug causing undefined binding suffix + $BackTypeBack = $BackTypeundefined; + diy.settings.reset('BackTypeundefined'); + } + + if ( $BackTypeBack == null ) $BackTypeBack = 'Player'; // some cards created during testing might have both as null + } + } + if ( diy.version < 13 ) { $Skill6 = 'None'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + diy.faceStyle = FaceStyle.TWO_FACES; // change was in v15, but I forgot to add this + } + if ( diy.version < 17 ) { + setDefaultEncounter(diy); + } + if (diy.version < 18 ) { + // todo: Get portrait [2], reset location + //getPortrait(2).location + } updateCollection(); - - diy.version = 13; + updateEncounter(); + + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryAsset.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryAsset.js index 9087793..ceeac27 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryAsset.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryAsset.js @@ -24,14 +24,15 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -53,9 +54,21 @@ function setDefaults() { $Victory = ''; $VictorySpacing = '0'; - + + $TrackerBox = ''; + $TrackerHeight = '100'; + $ScaleModifier = '100'; + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back $UniqueBack = '0'; $SubtitleBack = ''; @@ -65,7 +78,7 @@ function setDefaults() { $Skill3Back = 'None'; $Skill4Back = 'None'; $Skill5Back = 'None'; - + $CardClassBack = 'Neutral'; $ResourceCostBack = '0'; $SlotBack = 'None'; @@ -73,35 +86,42 @@ function setDefaults() { $StaminaBack = 'None'; $SanityBack = 'None'; + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitleUnique( diy, bindings, true, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutAssetStoryStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [1], FACE_BACK ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -128,13 +148,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); @@ -145,16 +165,16 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -164,10 +184,8 @@ function createInterface( diy, editor ) { } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label Label_box = markupBox(sheet); -// Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); -// Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -175,7 +193,7 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); @@ -186,20 +204,27 @@ function createFrontPainter( diy, sheet ) { Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); Story_box = markupBox(sheet); -// Story_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Story-style'), null); -// Story_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Story-alignment')); Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); + +// initSmallSymbolTags( diy, Traits_box ); +// initSmallSymbolTags( diy, Header_box ); +// initSmallSymbolTags( diy, Story_box ); +// initSmallSymbolTags( diy, Body_box ); + + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); @@ -208,8 +233,18 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Story', '' ); } function createBackPainter( diy, sheet ) { @@ -231,16 +266,16 @@ function createBackPainter( diy, sheet ) { BackSubtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtype-style'), null); BackSubtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Subtype-alignment')); - BackCost_box = markupBox(sheet); - BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); - BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); +// BackCost_box = markupBox(sheet); +// BackCost_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Cost-style'), null); +// BackCost_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Cost-alignment')); BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Artist-alignment')); @@ -248,8 +283,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -264,21 +299,37 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } - + + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); - drawEncounterIcon( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); +// drawEncounterIcon( g, diy, sheet ); } function paintBack( g, diy, sheet ) { @@ -290,24 +341,31 @@ function paintBack( g, diy, sheet ) { drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Asset ); drawName( g, diy, sheet, BackName_box ); - if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, 'Neutral', true ); - - if ($CardClassBack == 'Weakness' ) { + if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, $CardClassBack, true ); + + if ($CardClassBack == 'Weakness' ) { drawSubtype( g, diy, sheet, BackSubtype_box, #AHLCG-Label-Weakness ); } drawCost( g, diy, sheet ); drawSkillIcons( g, diy, sheet, 'Neutral' ); - + drawSlots( g, diy, sheet ); drawStamina( g, diy, sheet ); drawSanity( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, false, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, copyrightBox, BackArtist_box ); } function onClear() { @@ -344,11 +402,36 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } - + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 17 ) { + if ( $Template == 'ChaosFullText' ) $Template = 'ChaosFull'; + } + if ( diy.version < 18 ) { + $PerInvestigatorStaminaBack = '0'; + $PerInvestigatorSanityBack = '0'; + $TrackerBox = ''; + $TrackerHeight = '100'; + } + +//? if ( $Template == 'Token effects' ) CardTypes[FACE_FRONT] = 'ChaosStory'; + updateCollection(); updateEncounter(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryChaos.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryChaos.js index 8d620ad..85190c1 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryChaos.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryChaos.js @@ -6,7 +6,7 @@ useLibrary( 'fontutils' ); importClass( arkham.component.DefaultPortrait ); -const CardTypes = [ 'Story', 'Chaos' ]; +const CardTypes = [ 'Story', 'ChaosStory' ]; // ChaosStory is a regular chaos token template, StoryChaos is a story card with a chaos token template const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Collection-Back', 'Encounter-Both' ]; @@ -23,14 +23,15 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -52,9 +53,21 @@ function setDefaults() { $Victory = ''; $VictorySpacing = '0'; - + + $TrackerBox = ''; + $TrackerHeight = '100'; + $ScaleModifier = '100'; + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back $TitleBack = ''; $HeaderBack = ''; @@ -68,25 +81,32 @@ function setDefaults() { $MergeSkullBack = 'None'; $MergeCultistBack = 'None'; $MergeTabletBack = 'None'; - + $TrackerBox = ''; $Copyright = ''; + + $TrackerBoxBack = ''; + $TrackerHeightBack = '100'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryChaosStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle2( diy, bindings, [0, 1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutChaosStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [1], FACE_BACK ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -113,13 +133,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); var BackTextTab = layoutChaosText( bindings, FACE_BACK, true ); @@ -127,26 +147,29 @@ function createInterface( diy, editor ) { BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + PortraitTab = layoutPortraits( diy, bindings, null, null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + bindings.bind(); } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -155,42 +178,42 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Traits_box = markupBox(sheet); Traits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Story_box = markupBox(sheet); Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); - Artist_box = markupBox(sheet); - Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); - Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -199,6 +222,8 @@ function createFrontPainter( diy, sheet ) { Encounter_box = markupBox(sheet); Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'ChaosStory', '' ); } function createBackPainter( diy, sheet ) { @@ -206,7 +231,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); BackName_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Name', '-tightness') + '-tightness') ); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackDifficulty_box = markupBox(sheet); BackDifficulty_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Difficulty-style'), null); @@ -215,7 +240,7 @@ function createBackPainter( diy, sheet ) { BackHeader_box = markupBox(sheet); BackHeader_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Header-style'), null); BackHeader_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Header-alignment')); - BackHeader_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); + BackHeader_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); BackHeader_box.setTextFitting( FIT_SCALE_TEXT ); BackBody_boxes = []; @@ -223,10 +248,10 @@ function createBackPainter( diy, sheet ) { BackBody_boxes[i] = markupBox(sheet); BackBody_boxes[i].defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_boxes[i].alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_boxes[i].setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); + BackBody_boxes[i].setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') * Eons.namedObjects.AHLCGObject.bodyFontTightness ); BackBody_boxes[i].setTextFitting( FIT_SCALE_TEXT ); - initBodyTags( diy, BackBody_boxes[i] ); + initBodyTags( diy, BackBody_boxes[i] ); } BackTracker_box = markupBox(sheet); @@ -237,7 +262,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -252,21 +277,38 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, BackTracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); - drawEncounterIcon( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); + +// drawEncounterIcon( g, diy, sheet ); } function paintBack( g, diy, sheet ) { @@ -278,13 +320,20 @@ function paintBack( g, diy, sheet ) { if ( $TitleBack != '' ) y = drawChaosName( g, diy, sheet, BackName_box ); // y = drawDifficulty( g, diy, sheet, BackDifficulty_box, #AHLCG-Difficulty-Back, y ); - - if ( $TrackerBox.length > 0 ) drawChaosTrackerBox( g, diy, sheet, BackTracker_box ); + + if ( $TrackerBoxBack.length > 0 ) drawTrackerBox( g, diy, sheet, BackTracker_box ); drawChaosBody( g, diy, sheet, BackBody_boxes, BackHeader_box, y ); -// drawCollectorInfo( g, diy, sheet, true, true, true, true, false ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, null ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + +// drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, copyrightBox, null ); } function onClear() { @@ -311,8 +360,28 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 18 ) { + $TrackerBox = ''; + $TrackerHeight = '100'; + $TrackerBoxBack = ''; + $TrackerHeightBack = '100'; + } - diy.version = 14; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryEnemy.js index 5cde7c4..8b09516 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryEnemy.js @@ -24,14 +24,15 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -53,50 +54,68 @@ function setDefaults() { $Victory = ''; $VictorySpacing = '0'; - + + $TrackerBox = ''; + $TrackerHeight = '100'; + $ScaleModifier = '100'; + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back $UniqueBack = '0'; $SubtitleBack = ''; - + $HealthBack = '2'; $PerInvestigatorBack = '0'; $AttackBack = '2'; + $PerInvestigatorAttackBack = '0'; $EvadeBack = '2'; - + $PerInvestigatorEvadeBack = '0'; + $DamageBack = '0'; $HorrorBack = '0'; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitleUnique( diy, bindings, true, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutEnemyStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [1], FACE_BACK ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -123,13 +142,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); @@ -140,16 +159,16 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -159,7 +178,7 @@ function createInterface( diy, editor ) { } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -168,38 +187,52 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Traits_box = markupBox(sheet); Traits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Story_box = markupBox(sheet); Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Story', '' ); } function createBackPainter( diy, sheet ) { @@ -211,7 +244,7 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackSubtitle_box = markupBox(sheet); BackSubtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Subtitle-style'), null); @@ -220,12 +253,12 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -234,7 +267,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -249,21 +282,37 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); - drawEncounterIcon( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); +// drawEncounterIcon( g, diy, sheet ); } function paintBack( g, diy, sheet ) { @@ -279,14 +328,21 @@ function paintBack( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $DamageBack > 0 ) drawDamage( g, diy, sheet ); if ( $HorrorBack > 0 ) drawHorror( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, false, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, copyrightBox, BackArtist_box ); } function onClear() { @@ -298,14 +354,14 @@ function createBackTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -319,7 +375,7 @@ function createBackTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -350,11 +406,32 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $PerInvestigatorAttackBack = '0'; + $PerInvestigatorEvadeBack = '0'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 18 ) { + $TrackerBox = ''; + $TrackerHeight = '100'; + } updateCollection(); updateEncounter(); - diy.version = 14; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryLocation.js index f2f99e0..1739eb7 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryLocation.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryLocation.js @@ -24,14 +24,15 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -53,19 +54,31 @@ function setDefaults() { $Victory = ''; $VictorySpacing = '0'; - + + $TrackerBox = ''; + $TrackerHeight = '100'; + $ScaleModifier = '100'; + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back $TitleBack = ''; $SubtitleBack = ''; - + $TraitsBack = ''; $KeywordsBack = ''; $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; @@ -85,24 +98,30 @@ function setDefaults() { $ArtistBack = ''; $Copyright = ''; + + $ShowEncounterIconBack = '1'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle( diy, bindings, true, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); var BackStatPanel = layoutLocationBackStats( bindings, FACE_BACK ); BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); - var BackConnectionsPanel = layoutConnections( bindings, [1], FACE_BACK ); + var BackConnectionsPanel = layoutConnections( false, bindings, [1], FACE_BACK ); BackConnectionsPanel.setTitle( @AHLCG-Connections + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [1], FACE_BACK ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -129,13 +148,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); @@ -146,16 +165,16 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -165,8 +184,8 @@ function createInterface( diy, editor ) { } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings - Label_box = markupBox(sheet); + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label + Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -174,38 +193,52 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Traits_box = markupBox(sheet); Traits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Story_box = markupBox(sheet); Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); + + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Story', '' ); } function createBackPainter( diy, sheet ) { @@ -224,16 +257,18 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); // createBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); setBackTextShape( BackBody_box, diy.settings.getRegion( getExpandedKey( FACE_BACK, 'Body-region') ) ); - initBodyTags( diy, BackBody_box ); - + initBodyTags( diy, BackBody_box ); + // just going to use standard body style - Victory_box = markupBox(sheet); - Victory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); - Victory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + BackVictory_box = markupBox(sheet); + BackVictory_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); + BackVictory_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Victory-alignment')); + + initBodyTags( diy, BackVictory_box ); BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Artist-style'), null); @@ -242,8 +277,8 @@ function createBackPainter( diy, sheet ) { BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Copyright-alignment')); - - initCopyrightTags( diy, BackCopyright_box ); + + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -258,21 +293,37 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); - drawEncounterIcon( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); +// drawEncounterIcon( g, diy, sheet ); } function paintBack( g, diy, sheet ) { @@ -282,14 +333,13 @@ function paintBack( g, diy, sheet ) { if ( $SubtitleBack.length > 0) drawSubtitleTemplate( g, sheet, '' ); else drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); drawName( g, diy, sheet, BackName_box ); if ( $SubtitleBack.length > 0 ) drawSubtitle( g, diy, sheet, BackSubtitle_box, '', false ); - + drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor' ) ); - drawVictory( g, diy, sheet ); + drawVictory( g, diy, sheet, BackVictory_box ); if ( $LocationIconBack != 'None' ) drawLocationIcon( g, diy, sheet, 'LocationIcon', true ); @@ -300,8 +350,24 @@ function paintBack( g, diy, sheet ) { drawLocationIcon( g, diy, sheet, 'Connection' + index + 'Icon', false ); } + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + + var encounterIcon = false; + + if ( $ShowEncounterIconBack == '1' ) { + drawLocationEncounterOverlay( g, diy, sheet ); + encounterIcon = true; + } + // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, false, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, encounterIcon, copyrightBox, BackArtist_box ); + + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Location ); } function onClear() { @@ -316,15 +382,15 @@ function createBackTextShape( textBox, textRegion ) { var path = new java.awt.geom.Path2D.Double(); - // asymmetrical + // asymmetrical var xPathPoints = new Array( 0.154, 0.000, 0.000, 1.000, 1.000, 0.951, 0.846 ); var yPathPoints = new Array( 0.000, 0.174, 1.000, 1.000, 0.319, 0.125, 0.000 ); - + var xControlPoints = new Array( 0.107, 0.107, 0.991, 0.962, 0.936, 0.900 ); var yControlPoints = new Array( 0.153, 0.139, 0.278, 0.167, 0.132, 0.174 ); - + var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); // just create by hand, it's asymmetrical @@ -332,7 +398,7 @@ function createBackTextShape( textBox, textRegion ) { x + w * xControlPoints[1], y + h * yControlPoints[1], x + w * xPathPoints[1], y + h * yPathPoints[1] ); - + for (let i = 2; i <= 4; i++) { path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); } @@ -345,7 +411,7 @@ function createBackTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -380,11 +446,32 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 17) { + $ShowEncounterIconBack = '1'; + } + if ( diy.version < 18 ) { + $TrackerBox = ''; + $TrackerHeight = '100'; + } updateCollection(); updateEncounter(); - diy.version = 14; + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryStory.js index f9451da..68df321 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryStory.js @@ -24,14 +24,16 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TemplateBack = 'Story'; + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -55,7 +57,21 @@ function setDefaults() { $VictorySpacing = '0'; $ScaleModifier = '100'; + $TrackerBox = ''; + $TrackerHeight = '100'; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back + $TitleBack = ''; + $TraitsABack = ''; $HeaderABack = ''; $AccentedStoryABack = ''; @@ -78,26 +94,35 @@ function setDefaults() { $VictoryBack = ''; $VictoryBackSpacing = '0'; $ScaleModifierBack = '100'; - - $Copyright = ''; + + $TrackerBoxBack = ''; + $TrackerHeightBack = '100'; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); +// var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); - var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); +// var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); + var BackTitlePanel = layoutTitle2( diy, bindings, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [0, 1], FACE_FRONT ); + var BackStatPanel = layoutStoryBackStats( diy ,bindings, FACE_BACK ); + BackStatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Back ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; - StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', BackTitlePanel, 'wrap, pushx, growx', BackStatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); // var TextPanelTrait = layoutText( bindings, [ 'Traits' ], '', FACE_FRONT ); @@ -124,13 +149,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); // var BackTextPanelTrait = layoutText( bindings, [ 'Traits' ], '', FACE_BACK ); @@ -157,36 +182,39 @@ function createInterface( diy, editor ) { var BackTextTab = new Grid(); BackTextTab.editorTabScrolling = true; BackTextTab.place( - BackTextPanelA, 'wrap, pushx, growx', - BackTextPanelB, 'wrap, pushx, growx', - BackTextPanelC, 'wrap, pushx, growx', + BackTextPanelA, 'wrap, pushx, growx', + BackTextPanelB, 'wrap, pushx, growx', + BackTextPanelC, 'wrap, pushx, growx', BackVictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', backScaleSpinner, 'align left', '%', 'wrap, align left' ); - + BackTextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Back ); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0, 1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + PortraitTab = layoutPortraits( diy, bindings, null, null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + bindings.bind(); } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -195,38 +223,42 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Traits_box = markupBox(sheet); - Traits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); - Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Traits_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Header-style', null ); + Traits_box.alignment = diy.settings.getTextAlignment( 'AHLG-Header-alignment' ); + Traits_box.setLineTightness( $('AHLCG-Header-tightness') ); Header_box = markupBox(sheet); - Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); - Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Header_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Header-style', null ); + Header_box.alignment = diy.settings.getTextAlignment( 'AHLCG-Header-alignment' ); + Header_box.setLineTightness( $('AHLCG-Header-tightness') ); Story_box = markupBox(sheet); - Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); + Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null ); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); - Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); - Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Body-style', null ); + Body_box.alignment = diy.settings.getTextAlignment( 'AHLCG-Body-alignment' ); + Body_box.setLineTightness( $('AHLCG-Body-tightness') ); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); + + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -235,11 +267,13 @@ function createFrontPainter( diy, sheet ) { Encounter_box = markupBox(sheet); Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Story', '' ); } function createBackPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings - BackLabel_box = markupBox(sheet); + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label + BackLabel_box = markupBox(sheet); BackLabel_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); BackLabel_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -247,119 +281,153 @@ function createBackPainter( diy, sheet ) { BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Name-style'), null); BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Name-alignment')); - initBodyTags( diy, BackName_box ); + initBodyTags( diy, BackName_box ); BackTraits_box = markupBox(sheet); - BackTraits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Header-style'), null); - BackTraits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Header-alignment')); - BackTraits_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Header', '-tightness') + '-tightness') ); + BackTraits_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Header-style', null ); + BackTraits_box.alignment = diy.settings.getTextAlignment( 'AHLCG-Header-alignment' ); + BackTraits_box.setLineTightness( $('AHLCG-Header-tightness') ); BackHeader_box = markupBox(sheet); - BackHeader_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Header-style'), null); - BackHeader_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Header-alignment')); - BackHeader_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Header', '-tightness') + '-tightness') ); + BackHeader_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Header-style', null); + BackHeader_box.alignment = diy.settings.getTextAlignment( 'AHLCG-Header-alignment' ); + BackHeader_box.setLineTightness( $('AHLCG-Header-tightness') ); BackStory_box = markupBox(sheet); +// BackStory_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); +// BackStory_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); BackStory_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); BackStory_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - BackStory_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + BackStory_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); BackBody_box = markupBox(sheet); - BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); - BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); - - initBodyTags( diy, BackTraits_box ); - initBodyTags( diy, BackHeader_box ); - initBodyTags( diy, BackStory_box ); - initBodyTags( diy, BackBody_box ); - + BackBody_box.defaultStyle = diy.settings.getTextStyle( 'AHLCG-Body-style', null); + BackBody_box.alignment = diy.settings.getTextAlignment( 'AHLCG-Body-alignment'); + BackBody_box.setLineTightness( $('AHLCG-Body-tightness') ); + + initBodyTags( diy, BackTraits_box ); + initBodyTags( diy, BackHeader_box ); + initBodyTags( diy, BackStory_box ); + initBodyTags( diy, BackBody_box ); + + BackTracker_box = markupBox(sheet); + BackTracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'TrackerName-style'), null); + BackTracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'TrackerName-alignment')); + BackCopyright_box = markupBox(sheet); BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); BackCollection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'CollectionNumber-alignment')); BackEncounter_box = markupBox(sheet); - BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'EncounterNumber-style'), null); - BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'EncounterNumber-alignment')); + + updateCardType( diy, $TemplateBack, FACE_BACK, 'Story', 'AHLCG-Story-Default-template' ); } function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); -// drawEncounterIcon( g, diy, sheet ); -// drawCollectorInfo( g, diy, sheet, true, true, true, true, false ); - drawCollectorInfo( g, diy, sheet, Collection_box, true, Encounter_box, true, Copyright_box, null ); + var collectionSuffix = false; + + var showCollectionNumberBack = ( $ShowCollectionNumberBack == '1' ); + if ( $TemplateBack == 'Player' || $TemplateBack == 'Encounter' ) showCollectionNumberBack = false; + + if ( $ShowCollectionNumberFront == '1' && showCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); } function paintBack( g, diy, sheet ) { clearImage( g, sheet ); - drawTemplate( g, sheet, '' ); - drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, BackName_box ); + BackName_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Name-style'), null); + BackName_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_BACK, 'Name-alignment')); - drawIndentedStoryBody( g, diy, sheet, BackTraits_box, BackHeader_box, BackStory_box, BackBody_box ); + BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'Copyright-style'), null); + BackEncounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'EncounterNumber-style'), null); + BackEncounter_box.setAlignment( diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'EncounterNumber-alignment')) ); + BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); -// drawEncounterIcon( g, diy, sheet ); -// drawCollectorInfo( g, diy, sheet, true, true, true, true, false ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, true, BackEncounter_box, true, BackCopyright_box, null ); -} + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; -function onClear() { - setDefaults(); -} -/* -function createBackTextShape( textBox, textRegion ) { - var x = textRegion.x; - var y = textRegion.y; - var w = textRegion.width; - var h = textRegion.height; - - var path = new java.awt.geom.Path2D.Double(); - - var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); - var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); - - var numPoints = xPathPoints.length; - - path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - for (let i = 1; i < numPoints; i++) { - path.lineTo( x + w * xPathPoints[i], y + h * yPathPoints[i] ); + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + + if ( $TemplateBack == 'Story' ) { + drawTemplate( g, sheet, '' ); + drawLabel( g, diy, sheet, BackLabel_box, #AHLCG-Label-Story ); + draw2LineName( g, diy, sheet, BackName_box ); + + if ( $TrackerBoxBack.length > 0 ) drawTrackerBox( g, diy, sheet, BackTracker_box ); + + drawIndentedStoryBody( g, diy, sheet, BackTraits_box, BackHeader_box, BackStory_box, BackBody_box ); + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberBack == '1', encounterBox, true, copyrightBox, null ); } + else if ( $TemplateBack == 'Chaos' ) { + drawTemplate( g, sheet, '' ); + if ( $TitleBack != '' ) y = drawChaosName( g, diy, sheet, BackName_box ); + + if ( $TrackerBoxBack.length > 0 ) drawTrackerBox( g, diy, sheet, BackTracker_box ); - path.lineTo( x + w * (1 - xPathPoints[numPoints-1]), y + h * yPathPoints[numPoints-1] ); + drawIndentedStoryBody( g, diy, sheet, BackTraits_box, BackHeader_box, BackStory_box, BackBody_box ); - for (let i = numPoints-2; i >= 0; i--) { - path.lineTo( x + w * (1 - xPathPoints[i]), y + h * yPathPoints[i] ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberBack == '1', encounterBox, true, copyrightBox, null ); } + else if ( $TemplateBack == 'ChaosFull' ) { + drawTemplate( g, sheet, '' ); + + if ( $TrackerBoxBack.length > 0 ) drawTrackerBox( g, diy, sheet, BackTracker_box ); - path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - - textBox.pageShape = PageShape.GeometricShape( path, textRegion ); + drawIndentedStoryBody( g, diy, sheet, BackTraits_box, BackHeader_box, BackStory_box, BackBody_box ); + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberBack == '1', encounterBox, false, copyrightBox, null ); + } + else { + drawBackTemplate( g, sheet ); + } +} + +function onClear() { + setDefaults(); } -*/ + // These can be used to perform special processing during open/save. // For example, you can seamlessly upgrade from a previous version // of the script. @@ -388,8 +456,34 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } - - diy.version = 14; + if ( diy.version < 15 ) { + $TitleBack = ''; + $TemplateBack = 'Story'; + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 17 ) { + if ( $Template == 'ChaosFullText' ) $Template = 'ChaosFull'; + if ( $TemplateBack == 'ChaosFullText' ) $TemplateBack = 'ChaosFull'; + } + if ( diy.version < 18 ) { + $TrackerBox = ''; + $TrackerHeight = '100'; + $TrackerBoxBack = ''; + $TrackerHeightBack = '100'; + } + + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryTreachery.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryTreachery.js index df2b240..200f4a2 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryTreachery.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/StoryTreachery.js @@ -24,14 +24,15 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 14; + + diy.setCornerRadius(8); + diy.version = 18; } function setDefaults() { // front $Template = 'Story'; - + $TraitsA = ''; $HeaderA = ''; $AccentedStoryA = ''; @@ -50,12 +51,24 @@ function setDefaults() { $AccentedStoryBSpacing = '0'; $HeaderCSpacing = '0'; $AccentedStoryCSpacing = '0'; - + $Victory = ''; $VictorySpacing = '0'; + $TrackerBox = ''; + $TrackerHeight = '100'; + $ScaleModifier = '100'; + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + // back $TitleBack = ''; $TraitsBack = ''; @@ -63,28 +76,32 @@ function setDefaults() { $RulesBack = ''; $FlavorBack = ''; $VictoryBack = ''; - + $TraitsBackSpacing = '0'; $KeywordsBackSpacing = '0'; $RulesBackSpacing = '0'; $FlavorBackSpacing = '0'; - + $ArtistBack = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitle2( diy, bindings, [0], FACE_FRONT ); TitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Front ); - var StatPanel = layoutStoryStats( bindings, FACE_FRONT ); + var StatPanel = layoutStoryStats( diy, bindings, FACE_FRONT ); StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); var BackTitlePanel = layoutTitle( diy, bindings, false, [1], FACE_BACK ); BackTitlePanel.setTitle( @AHLCG-Title + ': ' + @AHLCG-Back ); - var CopyrightPanel = layoutCopyright( bindings, [1], FACE_BACK ); + var CopyrightPanel = layoutCopyright( bindings, true, [0, 1], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; @@ -111,13 +128,13 @@ function createInterface( diy, editor ) { var TextTab = new Grid(); TextTab.editorTabScrolling = true; TextTab.place( - TextPanelA, 'wrap, pushx, growx', - TextPanelB, 'wrap, pushx, growx', - TextPanelC, 'wrap, pushx, growx', + TextPanelA, 'wrap, pushx, growx', + TextPanelB, 'wrap, pushx, growx', + TextPanelC, 'wrap, pushx, growx', VictoryPanel, 'wrap, pushx, growx', @AHLCG-TextScale, 'align left, split', scaleSpinner, 'align left', '%', 'wrap, align left' ); - + TextTab.addToEditor( editor, @AHLCG-Rules + ': ' + @AHLCG-Front ); var BackTextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_BACK ); @@ -128,16 +145,16 @@ function createInterface( diy, editor ) { PortraitTab.addToEditor(editor, @AHLCG-Portraits); var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); - var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [1], FACE_FRONT ); - + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, true, [0, 1], FACE_FRONT ); + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); CollectionTab.addToEditor(editor, @AHLCG-Collection); var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); - var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0, 1], FACE_FRONT ); - + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, true, [0, 1], [0, 1], FACE_FRONT ); + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -147,8 +164,8 @@ function createInterface( diy, editor ) { } function createFrontPainter( diy, sheet ) { - // always use Story settings, Chaos doesn't have label or Story settings - Label_box = markupBox(sheet); + // create label box no matter what, but have to hardcode Story because Chaos template doesn't have a label + Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Label-style', null); Label_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Label-alignment'); @@ -156,32 +173,36 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Traits_box = markupBox(sheet); Traits_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Traits_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Traits_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Header_box = markupBox(sheet); Header_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Header-style'), null); Header_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Header-alignment')); - Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); + Header_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Header', '-tightness') + '-tightness') ); Story_box = markupBox(sheet); Story_box.defaultStyle = diy.settings.getTextStyle('AHLCG-Story-Story-style', null); Story_box.alignment = diy.settings.getTextAlignment('AHLCG-Story-Story-alignment'); - Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); + Story_box.setLineTightness( $('AHLCG-Story-Story-tightness') ); Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); - initBodyTags( diy, Traits_box ); - initBodyTags( diy, Header_box ); - initBodyTags( diy, Story_box ); - initBodyTags( diy, Body_box ); + initBodyTags( diy, Traits_box ); + initBodyTags( diy, Header_box ); + initBodyTags( diy, Story_box ); + initBodyTags( diy, Body_box ); + + Tracker_box = markupBox(sheet); + Tracker_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'TrackerName-style'), null); + Tracker_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'TrackerName-alignment')); Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); @@ -190,8 +211,18 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); + + updateCardType( diy, $Template, FACE_FRONT, 'Story', '' ); } function createBackPainter( diy, sheet ) { @@ -206,10 +237,10 @@ function createBackPainter( diy, sheet ) { BackBody_box = markupBox(sheet); BackBody_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Body-style'), null); BackBody_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Body-alignment')); - BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + BackBody_box.setLineTightness( $(getExpandedKey(FACE_BACK, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, BackBody_box ); - initBodyTags( diy, BackBody_box ); - BackArtist_box = markupBox(sheet); BackArtist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Artist-style'), null); BackArtist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Artist-alignment')); @@ -218,7 +249,7 @@ function createBackPainter( diy, sheet ) { BackCopyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_BACK, 'Copyright-style'), null); BackCopyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_BACK, 'Copyright-alignment')); - initCopyrightTags( diy, BackCopyright_box ); + initCopyrightTags( diy, BackCopyright_box ); BackCollection_box = markupBox(sheet); BackCollection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_BACK, 'CollectionNumber-style'), null); @@ -233,21 +264,37 @@ function paintFront( g, diy, sheet ) { clearImage( g, sheet ); drawTemplate( g, sheet, '' ); - + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + // I do not know why I have to recreate these, but some of them don't change color if I don't + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'EncounterNumber-style'), null); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + if ( $Template == 'Story' ) { drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Story ); - drawName( g, diy, sheet, Name_box ); + draw2LineName( g, diy, sheet, Name_box ); } - else { + else if ( $Template == 'Chaos' ) { if ( diy.name != '' ) y = drawChaosName( g, diy, sheet, Name_box ); } + if ( $TrackerBox.length > 0 ) drawTrackerBox( g, diy, sheet, Tracker_box ); + drawIndentedStoryBody( g, diy, sheet, Traits_box, Header_box, Story_box, Body_box ); - drawEncounterIcon( g, diy, sheet ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + var encounterIcon = ($Template == 'ChaosFull') ? false : true; + + var collectionBox = $ShowCollectionNumberFront == '1' ? Collection_box : null; + var encounterBox = $ShowEncounterNumberFront == '1' ? Encounter_box : null; + var copyrightBox = $ShowCopyrightFront == '1' ? Copyright_box : null; + + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, $ShowCollectionNumberFront == '1', encounterBox, encounterIcon, copyrightBox, null ); +// drawEncounterIcon( g, diy, sheet ); } function paintBack( g, diy, sheet ) { @@ -261,8 +308,15 @@ function paintBack( g, diy, sheet ) { drawBody( g, diy, sheet, BackBody_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); + var collectionSuffix = false; + if ( $ShowCollectionNumberFront == '1' && $ShowCollectionNumberBack == '1' ) collectionSuffix = true; + + var collectionBox = $ShowCollectionNumberBack == '1' ? BackCollection_box : null; + var encounterBox = $ShowEncounterNumberBack == '1' ? BackEncounter_box : null; + var copyrightBox = $ShowCopyrightBack == '1' ? BackCopyright_box : null; + // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, BackCollection_box, false, BackEncounter_box, true, BackCopyright_box, BackArtist_box ); + drawCollectorInfo( g, diy, sheet, collectionBox, collectionSuffix, true, encounterBox, true, copyrightBox, BackArtist_box ); } function onClear() { @@ -293,8 +347,26 @@ function onRead(diy, oos) { if ( diy.version < 14 ) { $Template = 'Story'; } - - diy.version = 14; + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $ShowCollectionNumberFront = '1'; + $ShowCollectionNumberBack = '1'; + $ShowEncounterNumberFront = '1'; + $ShowEncounterNumberBack = '1'; + } + if ( diy.version < 16 ) { + $ShowCopyrightFront = '1'; + $ShowCopyrightBack = '1'; + } + if ( diy.version < 18 ) { + $TrackerBox = ''; + $TrackerHeight = '100'; + } + + diy.setCornerRadius(8); + diy.version = 18; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Treachery.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Treachery.js index ec03788..7ad70c5 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Treachery.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Treachery.js @@ -15,7 +15,7 @@ function create( diy ) { diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); - diy.faceStyle = FaceStyle.PLAIN_BACK; + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -24,7 +24,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { @@ -33,29 +34,35 @@ function setDefaults() { $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'Encounter'; // for Zoop + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -65,7 +72,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -73,7 +80,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -94,10 +101,10 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Body_box ); - initBodyTags( diy, Body_box ); - Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -106,7 +113,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -118,14 +125,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -140,12 +139,13 @@ function paintFront( g, diy, sheet ) { drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - // like createBackPainter(), this won't be called because of - // the type of card we created + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); } function onClear() { @@ -158,10 +158,21 @@ function onClear() { function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $BackTypeBack = 'Encounter'; // for Zoop + } + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryLocation.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryLocation.js new file mode 100644 index 0000000..c266586 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryLocation.js @@ -0,0 +1,214 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'TreacheryLocation', 'TreacheryBack' ]; +const BindingSuffixes = [ '' ]; + +const PortraitTypeList = [ 'Portrait-Front', 'Collection-Front', 'Encounter-Front' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size + diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + setDefaultEncounter(); + setDefaultCollection(); + + diy.setCornerRadius(8); + diy.version = 16; +} + +function setDefaults() { + $Traits = ''; + $Keywords = ''; + $Rules = ''; + $Flavor = ''; + $Victory = ''; + + $TraitsSpacing = '0'; + $KeywordsSpacing = '0'; + $RulesSpacing = '0'; + $FlavorSpacing = '0'; + + $Artist = ''; + $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'Encounter'; // for Zoop + + $Shroud = '1'; + $Clues = '1'; + $PerInvestigator = '1'; + $ShroudPerInvestigator = '0'; +// $BackType = 'Standard'; + $BackTypeBack = 'Standard'; + $flipSuffix = false; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + + var StatPanel = layoutLocationStats( bindings, FACE_FRONT ); + StatPanel.setTitle( @AHLCG-BasicData + ': ' + @AHLCG-Front ); + + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); + TextTab.editorTabScrolling = true; + TextTab.addToEditor( editor, @AHLCG-Rules ); + + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', null, true, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); + + var CollectionTab = new Grid(); + CollectionTab.editorTabScrolling = true; + CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); + CollectionTab.addToEditor(editor, @AHLCG-Collection); + + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Body_box ); + + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); +} + +function createBackPainter( diy, sheet ) { +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + + drawTemplate( g, sheet, '' ); + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Treachery ); + drawName( g, diy, sheet, Name_box ); + + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); + + drawShroud( g, diy, sheet ); + drawClues( g, diy, sheet ); + +// drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $BackTypeBack = 'Encounter'; // for Zoop + } + + updateCollection(); + updateEncounter(); + + diy.setCornerRadius(8); + diy.version = 16; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} + +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryPortrait.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryPortrait.js index 9944a7b..6df79a6 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryPortrait.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryPortrait.js @@ -24,7 +24,8 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 15; } function setDefaults() { @@ -33,29 +34,33 @@ function setDefaults() { $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -65,7 +70,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -73,7 +78,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -94,10 +99,10 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Body_box ); - initBodyTags( diy, Body_box ); - Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -106,7 +111,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -118,14 +123,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -140,7 +137,7 @@ function paintFront( g, diy, sheet ) { drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { @@ -159,10 +156,16 @@ function onClear() { function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); + if ( diy.version < 15 ) { + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + updateCollection(); updateEncounter(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 15; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryStory.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryStory.js index 546aed7..beb57ba 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryStory.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/TreacheryStory.js @@ -7,7 +7,7 @@ useLibrary( 'fontutils' ); importClass( arkham.component.DefaultPortrait ); const CardTypes = [ 'WeaknessTreachery', 'TreacheryStoryBack' ]; -const BindingSuffixes = [ '' ]; +const BindingSuffixes = [ '', 'Back' ]; const PortraitTypeList = [ 'Portrait-Front', 'Collection-Both', 'Encounter-Both' ]; @@ -15,7 +15,7 @@ function create( diy ) { diy.frontTemplateKey = getExpandedKey( FACE_FRONT, 'Default', '-template' ); // not used, set card size diy.backTemplateKey = getExpandedKey( FACE_BACK, 'Default', '-template' ); - diy.faceStyle = FaceStyle.PLAIN_BACK; + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -23,8 +23,9 @@ function create( diy ) { createPortraits( diy, PortraitTypeList ); setDefaultEncounter(); setDefaultCollection(); - - diy.version = 8; + + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { @@ -35,29 +36,33 @@ function setDefaults() { $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -67,7 +72,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -75,7 +80,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -100,10 +105,10 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Body_box ); - initBodyTags( diy, Body_box ); - Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); @@ -111,8 +116,8 @@ function createFrontPainter( diy, sheet ) { Copyright_box = markupBox(sheet); Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); - - initCopyrightTags( diy, Copyright_box ); + + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); @@ -124,14 +129,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -150,12 +147,13 @@ function paintFront( g, diy, sheet ) { drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); // drawCollectorInfo( g, diy, sheet, true, false, true, true, true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, Encounter_box, true, Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - // like createBackPainter(), this won't be called because of - // the type of card we created + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); } function onClear() { @@ -168,10 +166,18 @@ function onClear() { function onRead(diy, oos) { readPortraits( diy, oos, PortraitTypeList, true ); + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + updateCollection(); updateEncounter(); - diy.version = 8; + diy.setCornerRadius(8); + diy.version = 17; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Ultimatum.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Ultimatum.js new file mode 100644 index 0000000..2af68b4 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/Ultimatum.js @@ -0,0 +1,192 @@ +useLibrary( 'diy' ); +useLibrary( 'ui' ); +useLibrary( 'markup' ); +useLibrary( 'imageutils' ); +useLibrary( 'fontutils' ); +useLibrary('tints'); + +importClass( arkham.component.DefaultPortrait ); + +const CardTypes = [ 'Ultimatum', 'UltimatumBack' ]; +const BindingSuffixes = [ '', 'Back' ]; + +const PortraitTypeList = [ 'Portrait', 'Collection', 'Encounter' ]; + +function create( diy ) { + diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); + diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); + + diy.faceStyle = FaceStyle.TWO_FACES; + + diy.name = ''; + + setDefaults(); + createPortraits( diy, PortraitTypeList ); + setDefaultEncounter(); + setDefaultCollection(); + + diy.setCornerRadius(8); + diy.version = 1; +} + +function setDefaults() { + $Subtitle = ''; + + $BackTypeBack = 'Boon'; + + $Traits = ''; + $Rules = ''; + + $TraitsSpacing = '0'; + $RulesSpacing = '0'; + + $Artist = ''; + $Copyright = ''; +} + +function createInterface( diy, editor ) { + var AHLCGObject = Eons.namedObjects.AHLCGObject; + + var bindings = new Bindings( editor, diy ); + + var TitlePanel = layoutTitleUnique( diy, bindings, true, [0], FACE_FRONT ); + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + + var StatisticsTab = new Grid(); + StatisticsTab.editorTabScrolling = true; + StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); + StatisticsTab.addToEditor( editor , @AHLCG-General ); + + var TextTab = layoutText( bindings, [ 'Traits', 'Rules' ], '', FACE_FRONT ); + TextTab.editorTabScrolling = true; + TextTab.addToEditor( editor, @AHLCG-Rules ); + + PortraitTab = layoutPortraits( diy, bindings, 'Portrait', null, false, false, false ); + PortraitTab.addToEditor(editor, @AHLCG-Portraits); + + var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); + var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); + + var CollectionTab = new Grid(); + CollectionTab.editorTabScrolling = true; + CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); + CollectionTab.addToEditor(editor, @AHLCG-Collection); + + var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); + var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0], [0], FACE_FRONT ); + + var EncounterTab = new Grid(); + EncounterTab.editorTabScrolling = true; + EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); + EncounterTab.addToEditor(editor, @AHLCG-EncounterSet); + + bindings.bind(); +} + +function createFrontPainter( diy, sheet ) { + Label_box = markupBox(sheet); + Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); + Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); + + Name_box = markupBox(sheet); + Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Name-style'), null); + Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Name-alignment')); + + initBodyTags( diy, Name_box ); + + Subtitle_box = markupBox(sheet); + Subtitle_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Subtitle-style'), null); + Subtitle_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Subtitle-alignment')); + + Trait_box = markupBox(sheet); + Trait_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Trait-style'), null); + Trait_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Trait-alignment')); + + Body_box = markupBox(sheet); + Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); + Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); + + initBodyTags( diy, Body_box ); + + Artist_box = markupBox(sheet); + Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Artist-style'), null); + Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Artist-alignment')); + + Copyright_box = markupBox(sheet); + Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'Copyright-style'), null); + Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'Copyright-alignment')); + + initCopyrightTags( diy, Copyright_box ); + + Collection_box = markupBox(sheet); + Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey( FACE_FRONT, 'CollectionNumber-style'), null); + Collection_box.alignment = diy.settings.getTextAlignment(getExpandedKey( FACE_FRONT, 'CollectionNumber-alignment')); + + Encounter_box = markupBox(sheet); + Encounter_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'EncounterNumber-style'), null); + Encounter_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'EncounterNumber-alignment')); +} + +function createBackPainter( diy, sheet ) { +} + +function paintFront( g, diy, sheet ) { + clearImage( g, sheet ); + + PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); + + var card_type = $Traits.indexOf('Boon') > -1 ? 'Boon' : 'Ultimatum'; + drawUltimatumTemplate( g, diy, sheet, card_type, $Subtitle); + drawName( g, diy, sheet, Name_box ); + drawUltimatumSubtitle( g, diy, sheet, Subtitle_box, $Subtitle ); + drawUltimatumTraits( g, diy, sheet, Trait_box, $Traits ); + + drawBody( g, diy, sheet, Body_box, new Array( 'Rules' ) ); + + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, Encounter_box, true, Copyright_box, Artist_box ); +} + +function paintBack( g, diy, sheet ) { + clearImage( g, sheet ); + drawBackTemplate( g, sheet ); +} + +function onClear() { + setDefaults(); +} + +// These can be used to perform special processing during open/save. +// For example, you can seamlessly upgrade from a previous version +// of the script. +function onRead(diy, oos) { + readPortraits( diy, oos, PortraitTypeList, true ); + + updateCollection(); + updateEncounter(); + + diy.setCornerRadius(8); + diy.version = 1; +} + +function onWrite( diy, oos ) { + writePortraits( oos, PortraitTypeList ); +} +// This is part of the diy library; calling it from within a +// script that defines the needed functions for a DIY component +// will create the DIY from the script and add it as a new editor; +// however, saving and loading the new component won't work correctly. +// This means you can test your script directly by running it without +// having to create a plug-in (except to make any required resources +// available). +if( sourcefile == 'Quickscript' ) { + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('project:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); + + testDIYScript(); +} +else { + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-utilLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-layoutLibrary.js'); + useLibrary('res://ArkhamHorrorLCG/diy/AHLCG-drawLibrary.js'); +} diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessEnemy.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessEnemy.js index 7b063b1..670957d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessEnemy.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessEnemy.js @@ -15,7 +15,7 @@ function create( diy ) { diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); - diy.faceStyle = FaceStyle.PLAIN_BACK; + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -24,50 +24,59 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 16; } function setDefaults() { $Unique = '0'; $Subtype = 'BasicWeakness'; - + $Health = '2'; $PerInvestigator = '0'; $Attack = '2'; + $PerInvestigatorAttack = '0'; $Evade = '2'; - + $PerInvestigatorEvade = '0'; + $Damage = '0'; $Horror = '0'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'Player'; // for Zoop + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); var TitlePanel = layoutTitleUnique( diy, bindings, false, [0], FACE_FRONT ); var StatPanel = layoutWeaknessEnemyStats( bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); - + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -77,7 +86,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -98,12 +107,12 @@ function createFrontPainter( diy, sheet ) { Label_box = markupBox(sheet); Label_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Label-style'), null); Label_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Label-alignment')); - + Name_box = markupBox(sheet); Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); - initBodyTags( diy, Name_box ); + initBodyTags( diy, Name_box ); Subtype_box = markupBox(sheet); Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); @@ -112,12 +121,12 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); // createTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); setTextShape( Body_box, diy.settings.getRegion( getExpandedKey( FACE_FRONT, 'Body-region') ) ); - initBodyTags( diy, Body_box ); - + initBodyTags( diy, Body_box ); + Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -126,7 +135,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -138,14 +147,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -154,7 +155,7 @@ function paintFront( g, diy, sheet ) { PortraitList[getPortraitIndex( 'Portrait' )].paint( g, sheet.getRenderTarget() ); drawTemplate( g, sheet, '' ); - + drawLabel( g, diy, sheet, Label_box, #AHLCG-Label-Enemy ); drawName( g, diy, sheet, Name_box ); @@ -163,7 +164,7 @@ function paintFront( g, diy, sheet ) { if ( $Subtype == 'BasicWeakness' ) { drawOverlay( g, diy, sheet, 'BasicWeaknessEnemy' ); drawBasicWeaknessIcon( g, diy, sheet ); - + subtypeText = #AHLCG-Label-BasicWeakness; } else if ( $Subtype == 'InvestigatorWeakness' ) { @@ -177,7 +178,7 @@ function paintFront( g, diy, sheet ) { drawEnemyStats( g, diy, sheet, [ 'Attack', 'Evade' ] ); drawEnemyHealth( g, diy, sheet ); - + drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); if ( $Damage > 0) drawDamage( g, diy, sheet ); @@ -186,12 +187,13 @@ function paintFront( g, diy, sheet ) { var encounterBox = $Subtype == 'StoryWeakness' ? Encounter_box : null; // drawCollectorInfo( g, diy, sheet, true, false, $Subtype == 'StoryWeakness', $Subtype == 'StoryWeakness', true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, encounterBox, $Subtype == 'StoryWeakness', Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, encounterBox, $Subtype == 'StoryWeakness', Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - // like createBackPainter(), this won't be called because of - // the type of card we created + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); } function onClear() { @@ -203,14 +205,14 @@ function createTextShape( textBox, textRegion ) { var y = textRegion.y; var w = textRegion.width; var h = textRegion.height; - + var path = new java.awt.geom.Path2D.Double(); - + var xPathPoints = new Array( 0.086, 0.086, 0.000, 0.000, 0.039, 0.078 ); var yPathPoints = new Array( 0.000, 0.189, 0.189, 0.693, 0.800, 1.000 ); var numPoints = xPathPoints.length; - + path.moveTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); for (let i = 1; i < numPoints; i++) { @@ -224,7 +226,7 @@ function createTextShape( textBox, textRegion ) { } path.lineTo( x + w * xPathPoints[0], y + h * yPathPoints[0] ); - + textBox.pageShape = PageShape.GeometricShape( path, textRegion ); } */ @@ -243,10 +245,23 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { setDefaultEncounter(); } + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16) { + $PerInvestigatorAttack = '0'; + $PerInvestigatorEvade = '0'; + + $BackTypeBack = 'Player'; // for Zoop + } updateCollection(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessTreachery.js b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessTreachery.js index b705c3a..15ed651 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessTreachery.js +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy/WeaknessTreachery.js @@ -15,7 +15,7 @@ function create( diy ) { diy.frontTemplateKey = getExpandedKey(FACE_FRONT, 'Default', '-template'); // not used, set card size diy.backTemplateKey = getExpandedKey(FACE_BACK, 'Default', '-template'); - diy.faceStyle = FaceStyle.PLAIN_BACK; + diy.faceStyle = FaceStyle.TWO_FACES; diy.name = ''; @@ -24,41 +24,49 @@ function create( diy ) { setDefaultEncounter(); setDefaultCollection(); - diy.version = 10; + diy.setCornerRadius(8); + diy.version = 15; } function setDefaults() { + $Unique = '0'; $Subtype = 'BasicWeakness'; - + $Traits = ''; $Keywords = ''; $Rules = ''; $Flavor = ''; $Victory = ''; - + $TraitsSpacing = '0'; $KeywordsSpacing = '0'; $RulesSpacing = '0'; $FlavorSpacing = '0'; - + $Artist = ''; $Copyright = ''; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + + $BackTypeBack = 'Player'; // for Zoop + $flipSuffix = false; } function createInterface( diy, editor ) { var AHLCGObject = Eons.namedObjects.AHLCGObject; - + var bindings = new Bindings( editor, diy ); - var TitlePanel = layoutTitle( diy, bindings, false, [0], FACE_FRONT ); + var TitlePanel = layoutTitleUnique( diy, bindings, false, [0], FACE_FRONT ); var StatPanel = layoutWeaknessStats( bindings, FACE_FRONT ); - var CopyrightPanel = layoutCopyright( bindings, [0], FACE_FRONT ); - + var CopyrightPanel = layoutCopyright( bindings, false, [0], FACE_FRONT ); + var StatisticsTab = new Grid(); StatisticsTab.editorTabScrolling = true; StatisticsTab.place(TitlePanel, 'wrap, pushx, growx', StatPanel, 'wrap, pushx, growx', CopyrightPanel, 'wrap, pushx, growx' ); StatisticsTab.addToEditor( editor , @AHLCG-General ); - + var TextTab = layoutText( bindings, [ 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ], '', FACE_FRONT ); TextTab.editorTabScrolling = true; TextTab.addToEditor( editor, @AHLCG-Rules ); @@ -68,7 +76,7 @@ function createInterface( diy, editor ) { var CollectionImagePanel = new portraitPanel( diy, getPortraitIndex( 'Collection' ), @AHLCG-CustomCollection ); var CollectionPanel = layoutCollection( bindings, CollectionImagePanel, false, false, [0], FACE_FRONT ); - + var CollectionTab = new Grid(); CollectionTab.editorTabScrolling = true; CollectionTab.place( CollectionPanel, 'wrap, pushx, growx', CollectionImagePanel, 'wrap, pushx, growx' ); @@ -76,7 +84,7 @@ function createInterface( diy, editor ) { var EncounterImagePanel = new portraitPanel( diy, getPortraitIndex( 'Encounter' ), @AHLCG-CustomEncounterSet ); var EncounterPanel = layoutEncounter( bindings, EncounterImagePanel, false, [0, 1], [0], FACE_FRONT ); - + var EncounterTab = new Grid(); EncounterTab.editorTabScrolling = true; EncounterTab.place( EncounterPanel, 'wrap, pushx, growx', EncounterImagePanel, 'wrap, pushx, growx' ); @@ -94,6 +102,8 @@ function createFrontPainter( diy, sheet ) { Name_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Name-style'), null); Name_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Name-alignment')); + initBodyTags( diy, Name_box ); + Subtype_box = markupBox(sheet); Subtype_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Subtype-style'), null); Subtype_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Subtype-alignment')); @@ -101,10 +111,10 @@ function createFrontPainter( diy, sheet ) { Body_box = markupBox(sheet); Body_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Body-style'), null); Body_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Body-alignment')); - Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + Body_box.setLineTightness( $(getExpandedKey(FACE_FRONT, 'Body', '-tightness') + '-tightness') ); + + initBodyTags( diy, Body_box ); - initBodyTags( diy, Body_box ); - Artist_box = markupBox(sheet); Artist_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Artist-style'), null); Artist_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Artist-alignment')); @@ -113,7 +123,7 @@ function createFrontPainter( diy, sheet ) { Copyright_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'Copyright-style'), null); Copyright_box.alignment = diy.settings.getTextAlignment(getExpandedKey(FACE_FRONT, 'Copyright-alignment')); - initCopyrightTags( diy, Copyright_box ); + initCopyrightTags( diy, Copyright_box ); Collection_box = markupBox(sheet); Collection_box.defaultStyle = diy.settings.getTextStyle(getExpandedKey(FACE_FRONT, 'CollectionNumber-style'), null); @@ -125,14 +135,6 @@ function createFrontPainter( diy, sheet ) { } function createBackPainter( diy, sheet ) { - // this won't be called because the default face style - // is a plain (unpainted) card back [FaceStyle.PLAIN_BACK] - // in fact, we could leave this function out altogether; - // look out for this when writing your own scripts - // (a do-nothing function will be created to stand in - // for any missing DIY functions, so if one of your functions - // doesn't seem to be getting called, check the spelling - // carefully) } function paintFront( g, diy, sheet ) { @@ -149,7 +151,7 @@ function paintFront( g, diy, sheet ) { if ( $Subtype == 'BasicWeakness' ) { drawOverlay( g, diy, sheet, 'BasicWeakness' ); drawBasicWeaknessIcon( g, diy, sheet ); - + subtypeText = #AHLCG-Label-BasicWeakness; } else if ( $Subtype == 'StoryWeakness' ) { @@ -161,18 +163,19 @@ function paintFront( g, diy, sheet ) { drawBody( g, diy, sheet, Body_box, new Array( 'Traits', 'Keywords', 'Rules', 'Flavor', 'Victory' ) ); var encounterBox = $Subtype == 'StoryWeakness' ? Encounter_box : null; - + // drawCollectorInfo( g, diy, sheet, true, false, $Subtype == 'StoryWeakness', $Subtype == 'StoryWeakness', true ); - drawCollectorInfo( g, diy, sheet, Collection_box, false, encounterBox, $Subtype == 'StoryWeakness', Copyright_box, Artist_box ); + drawCollectorInfo( g, diy, sheet, Collection_box, false, true, encounterBox, $Subtype == 'StoryWeakness', Copyright_box, Artist_box ); } function paintBack( g, diy, sheet ) { - // like createBackPainter(), this won't be called because of - // the type of card we created + clearImage( g, sheet ); + + drawBackTemplate( g, sheet ); } function onClear() { - setDefaults(); + setDefaults(); } // These can be used to perform special processing during open/save. @@ -184,10 +187,20 @@ function onRead(diy, oos) { if ( diy.version < 10 ) { setDefaultEncounter(); } + if ( diy.version < 15 ) { + diy.faceStyle = FaceStyle.TWO_FACES; + + $TemplateReplacement = ''; + $TemplateReplacementBack = ''; + } + if ( diy.version < 16 ) { + $BackTypeBack = 'Player'; // for Zoop + } updateCollection(); - - diy.version = 10; + + diy.setCornerRadius(8); + diy.version = 16; } function onWrite( diy, oos ) { diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbol.ttf b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbol.ttf index 73dd574..69ba8e2 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbol.ttf and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbol.ttf differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbolOld.ttf b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbolOld.ttf new file mode 100644 index 0000000..32fe6ef Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/AHLCGSymbolOld.ttf differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Arkhamic.ttf b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Arkhamic.ttf new file mode 100644 index 0000000..6933088 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Arkhamic.ttf differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Teutonic.ttf b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Teutonic.ttf deleted file mode 100644 index eb83708..0000000 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts/Teutonic.ttf and /dev/null differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ALightInTheFog.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ALightInTheFog.png index 5f55320..35ee867 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ALightInTheFog.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ALightInTheFog.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheOutside.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheOutside.png new file mode 100644 index 0000000..7df8d28 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheOutside.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheUnknown.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheUnknown.png new file mode 100644 index 0000000..d04111a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfTheUnknown.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfYuggoth.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfYuggoth.png new file mode 100644 index 0000000..76c5acc Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-AgentsOfYuggoth.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BadBlood.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BadBlood.png new file mode 100644 index 0000000..8604c9a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BadBlood.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BeyondTheBeyond.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BeyondTheBeyond.png new file mode 100644 index 0000000..5b3403d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BeyondTheBeyond.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BloodthirstySpirits.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BloodthirstySpirits.png new file mode 100644 index 0000000..17fc0ff Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-BloodthirstySpirits.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ByTheBook.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ByTheBook.png new file mode 100644 index 0000000..e8e1a41 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ByTheBook.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ChillingMists.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ChillingMists.png new file mode 100644 index 0000000..4966d63 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ChillingMists.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheDamned.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheDamned.png new file mode 100644 index 0000000..b42297b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheDamned.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheElderThings.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheElderThings.png new file mode 100644 index 0000000..715a40e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CityOfTheElderThings.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CleanupCrew.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CleanupCrew.png new file mode 100644 index 0000000..9b3e402 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CleanupCrew.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Concealed.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Concealed.png new file mode 100644 index 0000000..9a3ab3c Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Concealed.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CongressOfTheKeys.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CongressOfTheKeys.png new file mode 100644 index 0000000..7502718 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CongressOfTheKeys.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CreaturesInTheIce.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CreaturesInTheIce.png new file mode 100644 index 0000000..51cffc2 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CreaturesInTheIce.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CrimsonConspiracy.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CrimsonConspiracy.png new file mode 100644 index 0000000..cf0287c Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-CrimsonConspiracy.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DancingMad.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DancingMad.png new file mode 100644 index 0000000..2e95770 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DancingMad.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkSideOfTheMoon.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkSideOfTheMoon.png index ef0bd5e..3fe8e5a 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkSideOfTheMoon.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkSideOfTheMoon.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkVeiling.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkVeiling.png new file mode 100644 index 0000000..ad8c628 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DarkVeiling.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadHeat.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadHeat.png new file mode 100644 index 0000000..119e64b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadHeat.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadlyWeather.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadlyWeather.png new file mode 100644 index 0000000..d8c2e52 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DeadlyWeather.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DealingsInTheDark.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DealingsInTheDark.png new file mode 100644 index 0000000..3869735 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DealingsInTheDark.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DevilReef.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DevilReef.png index d450b0e..57ad240 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DevilReef.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DevilReef.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DogsOfWar.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DogsOfWar.png new file mode 100644 index 0000000..f8a4a33 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-DogsOfWar.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarth.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarth.png new file mode 100644 index 0000000..093ee3f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarth.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarthInv.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarthInv.png new file mode 100644 index 0000000..4c7d6f0 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-EdgeOfTheEarthInv.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ElderThings.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ElderThings.png new file mode 100644 index 0000000..363df8c Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ElderThings.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ExpeditionTeam.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ExpeditionTeam.png new file mode 100644 index 0000000..42a5278 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ExpeditionTeam.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FatalMirage.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FatalMirage.png new file mode 100644 index 0000000..134b108 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FatalMirage.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFolly.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFolly.png new file mode 100644 index 0000000..15c0618 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFolly.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFollyE.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFollyE.png new file mode 100644 index 0000000..bf26c35 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortuneAndFollyE.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortunesChosen.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortunesChosen.png new file mode 100644 index 0000000..c8b7550 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-FortunesChosen.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Game.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Game.png index 376be04..7e89bec 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Game.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Game.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameL.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameL.png new file mode 100644 index 0000000..2b0a669 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameL.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameS.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameS.png new file mode 100644 index 0000000..376be04 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-GameS.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Globetrotting.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Globetrotting.png new file mode 100644 index 0000000..0379d3a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Globetrotting.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-HazardsOfAntarctica.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-HazardsOfAntarctica.png new file mode 100644 index 0000000..8bf1bd0 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-HazardsOfAntarctica.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Hexcraft.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Hexcraft.png new file mode 100644 index 0000000..d3bd3cf Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Hexcraft.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-IceAndDeath.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-IceAndDeath.png new file mode 100644 index 0000000..977b7b7 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-IceAndDeath.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ImpendingEvils.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ImpendingEvils.png new file mode 100644 index 0000000..aa97a63 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ImpendingEvils.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-InTooDeep.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-InTooDeep.png index 589a42f..52753c4 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-InTooDeep.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-InTooDeep.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Key.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Key.png new file mode 100644 index 0000000..827f661 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Key.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LaidToRest.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LaidToRest.png new file mode 100644 index 0000000..9270e60 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LaidToRest.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LeftBehind.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LeftBehind.png new file mode 100644 index 0000000..0a56aed Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LeftBehind.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircle.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircle.png index da875c9..3701ed0 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircle.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircle.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircleAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircleAlt.png old mode 100755 new mode 100644 index da875c9..8eb2508 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircleAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCircleAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocClover.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocClover.png index cc81a7c..fab189a 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocClover.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocClover.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCross.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCross.png index 4728c22..7b9ee97 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCross.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCross.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCrossAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCrossAlt.png old mode 100755 new mode 100644 index 54ce0dd..e8b0145 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCrossAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocCrossAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamond.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamond.png index 786b4b1..20a22df 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamond.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamond.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamondAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamondAlt.png old mode 100755 new mode 100644 index 786b4b1..bc4853f Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamondAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDiamondAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlash.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlash.png index 68dffc4..fd7fa04 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlash.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlash.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlashAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlashAlt.png old mode 100755 new mode 100644 index 2205740..0f33e40 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlashAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocDoubleSlashAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeart.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeart.png index 8e6a86d..0f70ff3 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeart.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeart.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeartAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeartAlt.png old mode 100755 new mode 100644 index 8e6a86d..4174ff9 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeartAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHeartAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglass.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglass.png index 3caa28d..773b741 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglass.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglass.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglassAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglassAlt.png old mode 100755 new mode 100644 index 3caa28d..c9959dd Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglassAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocHourglassAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoon.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoon.png index ad1e951..738866a 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoon.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoon.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoonAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoonAlt.png old mode 100755 new mode 100644 index 7bb6cbc..31c6eb5 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoonAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocMoonAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocQuote.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocQuote.png index 767695a..a93860c 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocQuote.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocQuote.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlash.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlash.png index fb7eab9..ba82121 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlash.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlash.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlashAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlashAlt.png old mode 100755 new mode 100644 index 843a945..1c1c4de Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlashAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSlashAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSpade.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSpade.png new file mode 100644 index 0000000..8d56cc1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSpade.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquare.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquare.png index 28bb9bf..6f00554 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquare.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquare.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquareAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquareAlt.png old mode 100755 new mode 100644 index 28bb9bf..944c1ae Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquareAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocSquareAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStar.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStar.png index cdf3765..b7c25c3 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStar.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStar.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStarAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStarAlt.png old mode 100755 new mode 100644 index db3cc44..1bfeb44 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStarAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocStarAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocT.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocT.png index d00edbc..f13a744 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocT.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocT.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTAlt.png old mode 100755 new mode 100644 index 84b1bdf..471c07e Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangle.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangle.png index 9d0ac0c..95925c8 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangle.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangle.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangleAlt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangleAlt.png old mode 100755 new mode 100644 index 38b7318..16ab60a Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangleAlt.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LocTriangleAlt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LostInTheNight.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LostInTheNight.png new file mode 100644 index 0000000..617d731 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-LostInTheNight.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTime.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTime.png new file mode 100644 index 0000000..f971da3 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTime.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTimeE.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTimeE.png new file mode 100644 index 0000000..b2379cc Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MachinationsThroughTimeE.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MemorialsOfTheLost.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MemorialsOfTheLost.png new file mode 100644 index 0000000..4c805f7 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MemorialsOfTheLost.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MiGoIncursionII.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MiGoIncursionII.png new file mode 100644 index 0000000..340be6e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MiGoIncursionII.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Miasma.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Miasma.png new file mode 100644 index 0000000..366df86 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Miasma.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MysteriesAbound.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MysteriesAbound.png new file mode 100644 index 0000000..b4f1a9d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-MysteriesAbound.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-NamelessHorrors.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-NamelessHorrors.png new file mode 100644 index 0000000..b4786f2 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-NamelessHorrors.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-OnThinIce.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-OnThinIce.png new file mode 100644 index 0000000..26ee8bb Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-OnThinIce.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Outsiders.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Outsiders.png new file mode 100644 index 0000000..9d792f6 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Outsiders.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Penguins.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Penguins.png new file mode 100644 index 0000000..fab81c5 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Penguins.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-PlanInShambles.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-PlanInShambles.png new file mode 100644 index 0000000..d5a0b16 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-PlanInShambles.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Promos.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Promos.png new file mode 100644 index 0000000..b336405 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Promos.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedCoterie.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedCoterie.png new file mode 100644 index 0000000..77d22f6 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedCoterie.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedTideRising.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedTideRising.png index 57971cb..45e7b07 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedTideRising.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RedTideRising.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RelicsOfThePast.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RelicsOfThePast.png new file mode 100644 index 0000000..9c5e7a3 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RelicsOfThePast.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToAtDeathsDoorstep.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToAtDeathsDoorstep.png new file mode 100644 index 0000000..6bfa9ab Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToAtDeathsDoorstep.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToBeforeTheBlackThrone.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToBeforeTheBlackThrone.png new file mode 100644 index 0000000..6336edc Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToBeforeTheBlackThrone.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToDisappearanceAtTheTwilightEstate.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToDisappearanceAtTheTwilightEstate.png new file mode 100644 index 0000000..9069c9d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToDisappearanceAtTheTwilightEstate.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToForTheGreaterGood.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToForTheGreaterGood.png new file mode 100644 index 0000000..2bd9183 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToForTheGreaterGood.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToInTheClutchesOfChaos.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToInTheClutchesOfChaos.png new file mode 100644 index 0000000..29004b2 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToInTheClutchesOfChaos.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheCircleUndone.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheCircleUndone.png new file mode 100644 index 0000000..5daca2b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheCircleUndone.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheSecretName.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheSecretName.png new file mode 100644 index 0000000..e964e42 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheSecretName.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWagesOfSin.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWagesOfSin.png new file mode 100644 index 0000000..4933c35 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWagesOfSin.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWitchingHour.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWitchingHour.png new file mode 100644 index 0000000..bf95c61 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToTheWitchingHour.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToUnionAndDisillusion.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToUnionAndDisillusion.png new file mode 100644 index 0000000..94ad128 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ReturnToUnionAndDisillusion.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RiddlesAndRain.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RiddlesAndRain.png new file mode 100644 index 0000000..8e4f4fe Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-RiddlesAndRain.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SanguineShadows.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SanguineShadows.png new file mode 100644 index 0000000..10d9310 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SanguineShadows.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ScarletSorcery.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ScarletSorcery.png new file mode 100644 index 0000000..d3db25f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ScarletSorcery.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SecretWar.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SecretWar.png new file mode 100644 index 0000000..e26048a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SecretWar.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SeepingNightmares.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SeepingNightmares.png new file mode 100644 index 0000000..34ed72a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SeepingNightmares.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadesOfSuffering.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadesOfSuffering.png new file mode 100644 index 0000000..6e1073b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadesOfSuffering.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadowOfADoubt.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadowOfADoubt.png new file mode 100644 index 0000000..eff4050 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ShadowOfADoubt.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Shoggoths.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Shoggoths.png new file mode 100644 index 0000000..a974791 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Shoggoths.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SilenceAndMystery.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SilenceAndMystery.png new file mode 100644 index 0000000..81cad11 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SilenceAndMystery.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpatialAnomaly.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpatialAnomaly.png new file mode 100644 index 0000000..6fe2c07 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpatialAnomaly.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpreadingCorruption.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpreadingCorruption.png new file mode 100644 index 0000000..559ea6f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-SpreadingCorruption.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StirringInTheDeep.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StirringInTheDeep.png new file mode 100644 index 0000000..f2fabaf Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StirringInTheDeep.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StrangeHappenings.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StrangeHappenings.png new file mode 100644 index 0000000..1053628 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-StrangeHappenings.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TekeliLi.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TekeliLi.png new file mode 100644 index 0000000..da62ea0 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TekeliLi.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElse.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElse.png new file mode 100644 index 0000000..41c0713 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElse.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElseE.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElseE.png new file mode 100644 index 0000000..ede740a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheBlobThatAteEverythingElseE.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheCrash.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheCrash.png new file mode 100644 index 0000000..77d0ad1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheCrash.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockVale.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockVale.png new file mode 100644 index 0000000..e628fb1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockVale.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockValePlayerExpansion.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockValePlayerExpansion.png new file mode 100644 index 0000000..230ebde Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheFeastOfHemlockValePlayerExpansion.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheGreatSeal.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheGreatSeal.png new file mode 100644 index 0000000..8e07b3b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheGreatSeal.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheHeartOfMadness.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheHeartOfMadness.png new file mode 100644 index 0000000..dfab936 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheHeartOfMadness.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheLairOfDagon.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheLairOfDagon.png index d5b1943..db2673f 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheLairOfDagon.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheLairOfDagon.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeys.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeys.png new file mode 100644 index 0000000..d331d66 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeys.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeysInv.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeysInv.png new file mode 100644 index 0000000..44f76de Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheScarletKeysInv.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheUntamedWilds.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheUntamedWilds.png index 6fe435f..9e6420a 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheUntamedWilds.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-TheUntamedWilds.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ToTheForbiddenPeaks.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ToTheForbiddenPeaks.png new file mode 100644 index 0000000..44214a1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-ToTheForbiddenPeaks.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Ultimatum.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Ultimatum.png new file mode 100644 index 0000000..84443d5 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-Ultimatum.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnspeakableFate.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnspeakableFate.png new file mode 100644 index 0000000..4f939c4 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnspeakableFate.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnstableRealm.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnstableRealm.png new file mode 100644 index 0000000..1c567b7 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-UnstableRealm.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-WithoutATrace.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-WithoutATrace.png new file mode 100644 index 0000000..f425110 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-WithoutATrace.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-agents_of_the_colour.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-agents_of_the_colour.png new file mode 100644 index 0000000..da26fb9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-agents_of_the_colour.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-blight.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-blight.png new file mode 100644 index 0000000..20cb8c1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-blight.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rain.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rain.png new file mode 100644 index 0000000..47aa00e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rain.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rest.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rest.png new file mode 100644 index 0000000..48da8ec Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_rest.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_the_feast.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_the_feast.png new file mode 100644 index 0000000..edfdd60 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-day_of_the_feast.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fate_of_the_vale.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fate_of_the_vale.png new file mode 100644 index 0000000..9f46409 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fate_of_the_vale.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fire.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fire.png new file mode 100644 index 0000000..b32f922 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-fire.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-heirlooms.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-heirlooms.png new file mode 100644 index 0000000..83ceba6 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-heirlooms.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-hemlock_house.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-hemlock_house.png new file mode 100644 index 0000000..600091f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-hemlock_house.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-horrors_in_the_rock.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-horrors_in_the_rock.png new file mode 100644 index 0000000..675385a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-horrors_in_the_rock.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-mutations.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-mutations.png new file mode 100644 index 0000000..311bece Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-mutations.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-myconids.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-myconids.png new file mode 100644 index 0000000..74a2c99 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-myconids.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-refractions.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-refractions.png new file mode 100644 index 0000000..1a84184 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-refractions.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-residents.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-residents.png new file mode 100644 index 0000000..10724c8 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-residents.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_final_day.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_final_day.png new file mode 100644 index 0000000..11acf2b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_final_day.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_first_day.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_first_day.png new file mode 100644 index 0000000..1c604e6 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_first_day.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_forest.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_forest.png new file mode 100644 index 0000000..354cf48 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_forest.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_longest_night.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_longest_night.png new file mode 100644 index 0000000..267a612 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_longest_night.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_lost_sister.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_lost_sister.png new file mode 100644 index 0000000..342680c Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_lost_sister.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_second_day.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_second_day.png new file mode 100644 index 0000000..cf6a538 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_second_day.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_silent_heath.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_silent_heath.png new file mode 100644 index 0000000..bb140a9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_silent_heath.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_thing_in_the_depths.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_thing_in_the_depths.png new file mode 100644 index 0000000..4f316d9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_thing_in_the_depths.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_twisted_hollow.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_twisted_hollow.png new file mode 100644 index 0000000..0e1f939 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_twisted_hollow.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_vale.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_vale.png new file mode 100644 index 0000000..a6cb7b4 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-the_vale.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-transfiguration.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-transfiguration.png new file mode 100644 index 0000000..0417d0b Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-transfiguration.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-written_in_rock.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-written_in_rock.png new file mode 100644 index 0000000..6b4a8e1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/icons/AHLCG-written_in_rock.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLine.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLine.png new file mode 100644 index 0000000..10f5f6d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLine.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLineArno.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLineArno.png new file mode 100644 index 0000000..d80c2ca Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/images/EntryLineArno.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/numbers/AHLCG-Cost--Inverted.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/numbers/AHLCG-Cost--Inverted.png new file mode 100644 index 0000000..5ca28b7 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/numbers/AHLCG-Cost--Inverted.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BasicWeaknessSkill.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BasicWeaknessSkill.png new file mode 100644 index 0000000..09f9366 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BasicWeaknessSkill.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxMask.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxMask.png new file mode 100644 index 0000000..8964ecd Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxMask.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLine.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLine.png index 05eb763..d1bf5c3 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLine.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLine.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineBKP.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineBKP.png new file mode 100644 index 0000000..05eb763 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineBKP.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineRed.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineRed.png index 1440d0a..cc46c1c 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineRed.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxResLineRed.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALine.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALine.png index f59ce53..071b25f 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALine.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALine.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALineBKP.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALineBKP.png new file mode 100644 index 0000000..f59ce53 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxSALineBKP.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTracker.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTracker.png new file mode 100644 index 0000000..41b9431 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTracker.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTrackerLine.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTrackerLine.png new file mode 100644 index 0000000..1c67951 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-BoxTrackerLine.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-G.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-G.png index 46e4423..b26f6e2 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-G.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-G.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-K.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-K.png index a54d1a7..0afe3db 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-K.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-K.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-M.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-M.png index f7c6ca1..9048494 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-M.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-M.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-R.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-R.png index fd5dd4c..914aca4 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-R.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-R.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-V.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-V.png index 34e8e11..bca51fd 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-V.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-ClassSymbol-V.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-EventWeakness-EncounterIcon.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-EventWeakness-EncounterIcon.png new file mode 100644 index 0000000..56f1fe1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-EventWeakness-EncounterIcon.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-de.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-de.png index 3aaac76..4d845fb 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-de.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-de.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-fr.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-fr.png index 88bb86e..0d56cf8 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-fr.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-fr.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-it.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-it.png index 58c89a0..29b3f0e 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-it.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Guide75Title-it.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-LocationEncounter.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-LocationEncounter.png new file mode 100644 index 0000000..87e246d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-LocationEncounter.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SanityBase.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SanityBase.png new file mode 100644 index 0000000..7c1ceac Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SanityBase.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Skill-EncounterSetOverlay.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Skill-EncounterSetOverlay.png new file mode 100644 index 0000000..09a2ed5 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Skill-EncounterSetOverlay.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-P.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-P.jp2 new file mode 100644 index 0000000..3730640 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-P.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-S.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-S.png new file mode 100644 index 0000000..30a98cf Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-S.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-SW.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-SW.png new file mode 100644 index 0000000..38d4caa Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-SkillBox-SW.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Education.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Education.png new file mode 100644 index 0000000..f5fe917 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Education.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Foot.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Foot.jp2 new file mode 100644 index 0000000..6661ec8 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Foot.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Hat.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Hat.png new file mode 100644 index 0000000..bfc6fe1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Hat.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Mask.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Mask.jp2 new file mode 100644 index 0000000..766e047 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Slot-Mask.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StaminaBase.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StaminaBase.png new file mode 100644 index 0000000..1f534fc Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StaminaBase.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StoryEventOverlay.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StoryEventOverlay.jp2 new file mode 100644 index 0000000..bab03cf Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-StoryEventOverlay.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-D.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-D.png new file mode 100644 index 0000000..8865948 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-D.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-P.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-P.png new file mode 100644 index 0000000..bd993b2 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-P.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-W.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-W.png index 20c2c29..2faab48 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-W.png and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/AHLCG-Subtitle-W.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/Archive.zip b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/Archive.zip deleted file mode 100644 index 392afc8..0000000 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/overlays/Archive.zip and /dev/null differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Act.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Act.settings index b42d851..94a069e 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Act.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Act.settings @@ -1,84 +1,53 @@ AHLCG-Act-Default-template = ArkhamHorrorLCG/templates/AHLCG-Act.jp2 AHLCG-ActBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-ActBack.jp2 -AHLCG-Act-Name-region = 9,64,250,22 -#AHLCG-Act-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-Act-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +#AHLCG-Act-Name-region = 9,64,250,22 +AHLCG-Act-Name-region = 9,55,250,44 +AHLCG-Act-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 -AHLCG-ActBack-Name-region = 21,110,48,226 -AHLCG-ActBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +#AHLCG-ActBack-Name-region = 21,110,48,226 +AHLCG-ActBack-Name-region = 22,110,47,226 +AHLCG-ActBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 AHLCG-ActBack-Name-alignment = center, middle -AHLCG-Act-Body-region = 10,100,259,237 -AHLCG-Act-Body-alignment = left -#AHLCG-Act-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 7.8; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.02; FOREGROUND: #000000 -AHLCG-Act-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -#AHLCG-Act-Body-tightness = 0.78 -#AHLCG-Act-Body-tightness = 0.85 -AHLCG-Act-Body-tightness = 1.0 +#AHLCG-Act-Body-region = 10,100,262,237 +AHLCG-Act-Body-region = 10,100,262,235 -AHLCG-ActBack-Header-alignment = left -AHLCG-ActBack-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; WEIGHT: WEIGHT_BOLD; FOREGROUND: #000000 -AHLCG-ActBack-Header-tightness = 1.0 - -#AHLCG-ActBack-Story-region = 127,38,355,310 -AHLCG-ActBack-Story-region = 127,32,355,316 -AHLCG-ActBack-Story-alignment = left -AHLCG-ActBack-Story-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; POSTURE: OBLIQUE; FOREGROUND: #000000 -AHLCG-ActBack-Story-tightness = 1.0 - -#AHLCG-ActBack-Body-region = 112,38,370,310 -AHLCG-ActBack-Body-region = 112,32,370,316 -AHLCG-ActBack-Body-alignment = left -#AHLCG-ActBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 7.8; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.05; FOREGROUND: #000000 -AHLCG-ActBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-ActBack-Body-tightness = 1.0 +AHLCG-ActBack-Story-region = 126,39,355,316 +AHLCG-ActBack-Body-region = 110,39,370,316 AHLCG-Act-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Act-Portrait-portrait-pany = 0 - -AHLCG-Act-Portrait-portrait-clip-region = 200,0,325,375 -AHLCG-Act-DefaultPortrait-portrait-clip-region = 200,0,325,375 +AHLCG-Act-Portrait-portrait-clip-region = 220,0,305,375 +AHLCG-Act-DefaultPortrait-portrait-clip-region = 220,0,305,375 AHLCG-Act-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Act-Encounter-portrait-pany = 0 - -AHLCG-Act-Encounter-portrait-clip-region = 122,27,28,28 -AHLCG-Act-DefaultEncounter-portrait-clip-region = 122,27,28,28 +#AHLCG-Act-Encounter-portrait-clip-region = 122,27,28,28 +AHLCG-Act-Encounter-portrait-clip-region = 120,23,32,32 +#AHLCG-Act-DefaultEncounter-portrait-clip-region = 122,27,28,28 +AHLCG-Act-DefaultEncounter-portrait-clip-region = 120,23,32,32 AHLCG-Act-ReturnEncounter-portrait-clip-region = 118,22,35,35 AHLCG-Act-DefaultReturnEncounter-portrait-clip-region = 118,22,35,35 +#AHLCG-ActBack-Encounter-portrait-clip-region = 27,57,36,36 AHLCG-ActBack-Encounter-portrait-clip-region = 27,57,36,36 AHLCG-ActBack-ReturnEncounter-portrait-clip-region = 20,50,49,48 -AHLCG-Act-Clues-region = 240,290,49,50 -AHLCG-Act-CluesPerInv-region = 235,290,49,49 -AHLCG-Act-PerInv-region = 261, 290, 30, 49 - -AHLCG-Act-Dash-tint = 38.0, 0.14, 1.0 - -#AHLCG-Act-EncounterNumber-region = 223,363,35,10 -AHLCG-Act-EncounterNumber-region = 195,363,55,10 -AHLCG-Act-EncounterNumber-alignment = right, middle -AHLCG-Act-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF - -AHLCG-Act-Artist-region = 11,363,129,10 -AHLCG-Act-Copyright-region = 125,363,80,10 - AHLCG-Act-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Act-Collection-portrait-pany = 0 +AHLCG-Act-Collection-portrait-clip-region = 270,358,13,13 +AHLCG-Act-DefaultCollection-portrait-clip-region = 270,358,13,13 -AHLCG-Act-Collection-portrait-clip-region = 270,360,13,13 -AHLCG-Act-DefaultCollection-portrait-clip-region = 270,360,13,13 +AHLCG-Act-EncounterNumber-region = 195,361,55,10 +AHLCG-Act-CollectionNumber-region = 266,361,37,10 +AHLCG-Act-ScenarioIndex-region = 67,7,134,21 +AHLCG-ActBack-BackScenarioIndex-region = 22,33,45,16 -#AHLCG-Act-CollectionNumber-region = 290,363,21,10 -#AHLCG-Act-CollectionNumber-region = 274,365,37,10 -AHLCG-Act-CollectionNumber-region = 266,363,37,10 +AHLCG-Act-Clues-region = 240,290,49,50 +AHLCG-Act-CluesPerInv-region = 234,290,49,49 +AHLCG-Act-CluesPerInvIcon-region = 261,289,29,49 -AHLCG-Act-ScenarioIndex-region = 67,8,134,21 -AHLCG-Act-ScenarioIndex-alignment = center, middle -AHLCG-Act-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Act-Dash-tint = 38.0, 0.14, 1.0 -AHLCG-ActBack-ScenarioIndex-region = 22,32,45,16 -AHLCG-ActBack-ScenarioIndex-alignment = center, middle -AHLCG-ActBack-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexBackSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-ActBack-ScenarioIndex-tightness = 0.1 +AHLCG-Act-Artist-region = 11,361,129,10 +AHLCG-Act-Copyright-region = 125,361,80,10 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Agenda.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Agenda.settings index a0b7e38..2ba2c1e 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Agenda.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Agenda.settings @@ -1,77 +1,50 @@ -AHLCG-Agenda-Default-template = ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 +AHLCG-Agenda-Default-template = ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 +#AHLCG-Agenda-Default-template-hires = ArkhamHorrorLCG/templates/AHLCG-Agenda-front-hires.jp2 AHLCG-AgendaBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-AgendaBack.jp2 -AHLCG-Agenda-Name-region = 255,64,250,22 -AHLCG-Agenda-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-Agenda-Name-region = 255,55,250,44 +AHLCG-Agenda-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 -AHLCG-AgendaBack-Name-region = 21,110,48,226 -AHLCG-AgendaBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-AgendaBack-Name-region = 22,110,47,226 +AHLCG-AgendaBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 AHLCG-AgendaBack-Name-alignment = center, middle -AHLCG-Agenda-Body-region = 255,100,259,237 -AHLCG-Agenda-Body-alignment = left -AHLCG-Agenda-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-Agenda-Body-tightness = 1.0 +AHLCG-Agenda-Body-region = 250,100,264,237 -AHLCG-AgendaBack-Header-alignment = left -AHLCG-AgendaBack-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; WEIGHT: WEIGHT_BOLD; FOREGROUND: #000000 -AHLCG-AgendaBack-Header-tightness = 1.0 - -AHLCG-AgendaBack-Story-region = 128,36,355,312 -AHLCG-AgendaBack-Story-alignment = left -AHLCG-AgendaBack-Story-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000; POSTURE: OBLIQUE -AHLCG-AgendaBack-Story-tightness = 1.0 - -AHLCG-AgendaBack-Body-region = 113,36,370,312 -AHLCG-AgendaBack-Body-alignment = left -AHLCG-AgendaBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-AgendaBack-Body-tightness = 1.0 +AHLCG-AgendaBack-Story-region = 126,39,355,316 +AHLCG-AgendaBack-Body-region = 110,39,370,316 AHLCG-Agenda-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Agenda-Portrait-portrait-pany = 0 AHLCG-Agenda-Portrait-portrait-clip-region = 0,0,305,375 AHLCG-Agenda-DefaultPortrait-portrait-clip-region = 0,0,305,375 -AHLCG-Agenda-Doom-region = 233,291,50,49 -AHLCG-Agenda-DoomPerInv-region = 228,291,50,48 -AHLCG-Agenda-PerInv-region = 254,291,30,48 - -AHLCG-Agenda-Dash-tint = 38.0, 0.14, 1.0 - AHLCG-Agenda-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Agenda-Encounter-portrait-pany = 0 - -AHLCG-Agenda-Encounter-portrait-clip-region = 368,27,28,28 -AHLCG-Agenda-DefaultEncounter-portrait-clip-region = 368,27,28,28 +AHLCG-Agenda-Encounter-portrait-clip-region = 366,23,32,32 +AHLCG-Agenda-DefaultEncounter-portrait-clip-region = 366,23,32,32 AHLCG-Agenda-ReturnEncounter-portrait-clip-region = 364,22,35,35 AHLCG-Agenda-DefaultReturnEncounter-portrait-clip-region = 364,22,35,35 AHLCG-AgendaBack-Encounter-portrait-clip-region = 27,57,36,36 AHLCG-AgendaBack-ReturnEncounter-portrait-clip-region = 20,50,49,48 -AHLCG-Agenda-Artist-region = 220,363,120,10 -#AHLCG-Agenda-Copyright-region = 343,365,89,10 -AHLCG-Agenda-Copyright-region = 322,363,80,10 - AHLCG-Agenda-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Agenda-Collection-portrait-pany = 0 +AHLCG-Agenda-Collection-portrait-clip-region = 476,358,13,13 +AHLCG-Agenda-DefaultCollection-portrait-clip-region = 476,358,13,13 -AHLCG-Agenda-Collection-portrait-clip-region = 476,360,13,13 -AHLCG-Agenda-DefaultCollection-portrait-clip-region = 476,360,13,13 - -#AHLCG-Agenda-CollectionNumber-region = 499,365,21,10 -#AHLCG-Agenda-CollectionNumber-region = 483,365,37,10 -AHLCG-Agenda-CollectionNumber-region = 472,363,37,10 +AHLCG-Agenda-EncounterNumber-region = 401,361,55,10 +AHLCG-Agenda-CollectionNumber-region = 472,361,37,10 AHLCG-Agenda-ScenarioIndex-region = 314,8,134,21 -AHLCG-Agenda-ScenarioIndex-alignment = center, middle -AHLCG-Agenda-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-AgendaBack-BackScenarioIndex-region = 24,32,41,16 + +AHLCG-Agenda-Doom-region = 233,291,50,49 +AHLCG-Agenda-DoomPerInv-region = 228,291,50,49 +#AHLCG-Agenda-DoomPerInvIcon-region = 254,293,30,48 +AHLCG-Agenda-DoomPerInvIcon-region = 256,290,29,49 -AHLCG-AgendaBack-ScenarioIndex-region = 24,32,41,16 -AHLCG-AgendaBack-ScenarioIndex-alignment = center, middle -AHLCG-AgendaBack-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexBackSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Agenda-Dash-tint = 38.0, 0.14, 1.0 -#AHLCG-Agenda-EncounterNumber-region = 432,365,35,10 -#AHLCG-Agenda-EncounterNumber-region = 422,365,45,10 -AHLCG-Agenda-EncounterNumber-region = 401,363,55,10 -AHLCG-Agenda-EncounterNumber-alignment = right, middle -AHLCG-Agenda-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF +AHLCG-Agenda-Artist-region = 220,363,120,10 +AHLCG-Agenda-Copyright-region = 322,363,80,10 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaFrontPortrait.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaFrontPortrait.settings index 98b5390..9be0963 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaFrontPortrait.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaFrontPortrait.settings @@ -1,47 +1,43 @@ AHLCG-AgendaFrontPortrait-Default-template = ArkhamHorrorLCG/templates/AHLCG-AgendaFrontPortrait.jp2 -AHLCG-AgendaFrontPortrait-Name-region = 87,228,330,22 -AHLCG-AgendaFrontPortrait-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-AgendaFrontPortrait-Name-region = 87,227,330,22 +AHLCG-AgendaFrontPortrait-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 -AHLCG-AgendaFrontPortrait-Body-region = 19,261,490,85 -AHLCG-AgendaFrontPortrait-Body-alignment = left -AHLCG-AgendaFrontPortrait-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing*0.98}; FOREGROUND: #000000 -AHLCG-AgendaFrontPortrait-Body-tightness = 1.0 +#AHLCG-AgendaFrontPortrait-Body-region = 19,261,490,85 +AHLCG-AgendaFrontPortrait-Body-region = 19,263,490,83 AHLCG-AgendaFrontPortrait-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-AgendaFrontPortrait-Portrait-portrait-pany = 0 AHLCG-AgendaFrontPortrait-Portrait-portrait-clip-region = 0,0,525,375 AHLCG-AgendaFrontPortrait-DefaultPortrait-portrait-clip-region = 0,0,525,375 -AHLCG-AgendaFrontPortrait-Doom-region = 452,199,50,49 -AHLCG-AgendaFrontPortrait-DoomPerInv-region = 446,199,50,48 -AHLCG-AgendaFrontPortrait-PerInv-region = 473,201,30,48 - -AHLCG-AgendaFrontPortrait-Dash-tint = 38.0, 0.14, 1.0 - AHLCG-AgendaFrontPortrait-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-AgendaFrontPortrait-Encounter-portrait-pany = 0 - -AHLCG-AgendaFrontPortrait-Encounter-portrait-clip-region = 38,216,28,28 -AHLCG-AgendaFrontPortrait-DefaultEncounter-portrait-clip-region = 38,216,28,28 +#AHLCG-AgendaFrontPortrait-Encounter-portrait-clip-region = 38,216,28,28 +#AHLCG-AgendaFrontPortrait-Encounter-portrait-clip-region = 36,212,32,32 +AHLCG-AgendaFrontPortrait-Encounter-portrait-clip-region = 36,214,40,40 +#AHLCG-AgendaFrontPortrait-DefaultEncounter-portrait-clip-region = 38,216,28,28 +AHLCG-AgendaFrontPortrait-DefaultEncounter-portrait-clip-region = 35,213,36,36 AHLCG-AgendaFrontPortrait-ReturnEncounter-portrait-clip-region = 34,212,35,35 AHLCG-AgendaFrontPortrait-DefaultReturnEncounter-portrait-clip-region = 34,212,35,35 -AHLCG-AgendaFrontPortrait-Artist-region = 14,363,129,10 -AHLCG-AgendaFrontPortrait-Copyright-region = 208,363,80,10 - AHLCG-AgendaFrontPortrait-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-AgendaFrontPortrait-Collection-portrait-pany = 0 +AHLCG-AgendaFrontPortrait-Collection-portrait-clip-region = 471,358,13,13 +AHLCG-AgendaFrontPortrait-DefaultCollection-portrait-clip-region = 471,358,13,13 -AHLCG-AgendaFrontPortrait-Collection-portrait-clip-region = 471,360,13,13 -AHLCG-AgendaFrontPortrait-DefaultCollection-portrait-clip-region = 471,360,13,13 +AHLCG-AgendaFrontPortrait-EncounterNumber-region = 401,363,55,10 +AHLCG-AgendaFrontPortrait-CollectionNumber-region = 472,361,37,10 +AHLCG-AgendaFrontPortrait-ScenarioIndex-region = 314,7,134,21 +AHLCG-AgendaFrontPortrait-BackScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexBackSize*0.95}; WEIGHT: {Eons.namedObjects.AHLCGObject.scenarioIndexWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.scenarioIndexWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.scenarioIndexTracking}; FOREGROUND: #000000 + +AHLCG-AgendaFrontPortrait-Doom-region = 452,201,50,49 +AHLCG-AgendaFrontPortrait-DoomPerInv-region = 446,199,50,49 +#AHLCG-AgendaFrontPortrait-DoomPerInvIcon-region = 473,201,30,48 +AHLCG-AgendaFrontPortrait-DoomPerInvIcon-region = 473,198,29,49 -AHLCG-AgendaFrontPortrait-CollectionNumber-region = 472,363,37,10 +AHLCG-AgendaFrontPortrait-Dash-tint = 38.0, 0.14, 1.0 -AHLCG-AgendaFrontPortrait-ScenarioIndex-region = 314,8,134,21 -AHLCG-AgendaFrontPortrait-ScenarioIndex-alignment = center, middle -AHLCG-AgendaFrontPortrait-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-AgendaFrontPortrait-Artist-region = 14,361,129,10 +AHLCG-AgendaFrontPortrait-Copyright-region = 208,361,80,10 -AHLCG-AgendaFrontPortrait-EncounterNumber-region = 401,363,55,10 -AHLCG-AgendaFrontPortrait-EncounterNumber-alignment = right, middle -AHLCG-AgendaFrontPortrait-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaPortrait.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaPortrait.settings index 30d4d4c..026c6e6 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaPortrait.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AgendaPortrait.settings @@ -1,25 +1,27 @@ AHLCG-AgendaPortrait-Default-template = ArkhamHorrorLCG/templates/AHLCG-AgendaPortrait.jp2 AHLCG-AgendaPortrait-Name-region = 87,249,330,28 -AHLCG-AgendaPortrait-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.03; FOREGROUND: #000000 -AHLCG-AgendaPortrait-Name-alignment = center,middle +#AHLCG-AgendaPortrait-Name-region = 87,241,330,44 +#AHLCG-AgendaPortrait-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 -AHLCG-AgendaPortrait-Body-region = 19,283,493,58 -AHLCG-AgendaPortrait-Body-alignment = left -AHLCG-AgendaPortrait-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing*0.98}; FOREGROUND: #000000 -AHLCG-AgendaPortrait-Body-tightness = 1.00 +#AHLCG-AgendaPortrait-Body-region = 19,283,493,58 +AHLCG-AgendaPortrait-Body-region = 19,283,493,64 +AHLCG-AgendaPortrait-Body-alignment = left, middle AHLCG-AgendaPortrait-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-AgendaPortrait-BackPortrait-portrait-pany = 0 AHLCG-AgendaPortrait-BackPortrait-portrait-clip-region = 0,0,525,375 + AHLCG-AgendaPortrait-Encounter-portrait-clip-region = 33,235,38,38 AHLCG-AgendaPortrait-ReturnEncounter-portrait-clip-region = 29,231,45,45 -AHLCG-AgendaPortrait-Artist-region = 14,363,129,10 -AHLCG-AgendaPortrait-Copyright-region = 208,363,80,10 -AHLCG-AgendaPortrait-Collection-portrait-clip-region = 471,360,13,13 +AHLCG-AgendaPortrait-DefaultEncounter-portrait-clip-region = 33,235,38,38 +AHLCG-AgendaPortrait-DefaultReturnEncounter-portrait-clip-region = 29,231,45,45 + +AHLCG-AgendaPortrait-Collection-portrait-clip-region = 471,358,13,13 +AHLCG-AgendaPortrait-DefaultCollection-portrait-clip-region = 471,358,13,13 -AHLCG-AgendaPortrait-CollectionNumber-region = 472,363,37,10 +AHLCG-AgendaPortrait-EncounterNumber-region = 402,361,55,10 +AHLCG-AgendaPortrait-CollectionNumber-region = 472,361,37,10 -AHLCG-AgendaPortrait-EncounterNumber-region = 402,363,55,10 -AHLCG-AgendaPortrait-EncounterNumber-alignment = center, middle -AHLCG-AgendaPortrait-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 4.5; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF +AHLCG-AgendaPortrait-Artist-region = 14,361,129,10 +AHLCG-AgendaPortrait-Copyright-region = 208,361,80,10 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Asset.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Asset.settings index 8f70833..141b2c2 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Asset.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Asset.settings @@ -1,39 +1,43 @@ AHLCG-Asset-Default-template = ArkhamHorrorLCG/templates/AHLCG-Asset-G.jp2 AHLCG-AssetBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 -AHLCG-Asset-Label-region = 20,62,38,14 -AHLCG-Asset-Label-alignment = center, middle -AHLCG-Asset-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.92; FOREGROUND: #000000 - -AHLCG-Asset-Name-region = 68,10,238,29 +AHLCG-Asset-NameG-region = 68,14,238,29 +AHLCG-Asset-NameK-region = 68,14,238,29 +AHLCG-Asset-NameR-region = 68,14,238,29 +AHLCG-Asset-NameM-region = 68,14,238,29 +AHLCG-Asset-NameV-region = 68,14,238,29 +AHLCG-Asset-NameN-region = 68,14,238,29 +AHLCG-Asset-NameW-region = 68,14,238,29 +AHLCG-Asset-NameT-region = 68,14,238,29 +AHLCG-Asset-NameD-region = 73,14,228,29 +AHLCG-Asset-NameP-region = 68,14,238,29 AHLCG-Asset-Subtype-region = 86,301,203,15 -AHLCG-Asset-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 -AHLCG-Asset-Subtype-alignment = center, middle +AHLCG-Asset-Label-region = 20,62,38,14 AHLCG-Asset-SubtitleG-region = 80,42,213,22 AHLCG-Asset-SubtitleK-region = 79,40,214,22 AHLCG-Asset-SubtitleR-region = 81,41,211,22 AHLCG-Asset-SubtitleM-region = 70,34,234,32 -AHLCG-Asset-SubtitleV-region = 81,42,214,22 +AHLCG-Asset-SubtitleV-region = 79,42,214,22 AHLCG-Asset-SubtitleN-region = 80,41,215,22 -AHLCG-Asset-SubtitleW-region = 63,42,252,24 +AHLCG-Asset-SubtitleW-region = 65,43,248,23 AHLCG-Asset-SubtitleT-region = 81,37,214,22 -AHLCG-Asset-SubtitleTextG-region = 68,43,240,22 -AHLCG-Asset-SubtitleTextK-region = 68,41,240,22 -AHLCG-Asset-SubtitleTextR-region = 68,41,240,22 -AHLCG-Asset-SubtitleTextM-region = 68,42,240,22 -AHLCG-Asset-SubtitleTextV-region = 68,44,240,22 -AHLCG-Asset-SubtitleTextN-region = 68,42,240,22 -AHLCG-Asset-SubtitleTextW-region = 69,43,240,22 -AHLCG-Asset-SubtitleTextT-region = 69,38,240,22 -AHLCG-Asset-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleFontSpacing}; FOREGROUND: #000000 -AHLCG-Asset-Subtitle-alignment = center, middle +AHLCG-Asset-SubtitleD-region = 81,42,214,20 +AHLCG-Asset-SubtitleP-region = 87,40,219,31 +AHLCG-Asset-SubtitleTextG-region = 68,43,238,22 +AHLCG-Asset-SubtitleTextK-region = 68,41,238,22 +AHLCG-Asset-SubtitleTextR-region = 68,41,238,22 +AHLCG-Asset-SubtitleTextM-region = 68,42,238,22 +AHLCG-Asset-SubtitleTextV-region = 68,44,238,22 +AHLCG-Asset-SubtitleTextN-region = 69,42,238,22 +AHLCG-Asset-SubtitleTextW-region = 72,43,236,22 +AHLCG-Asset-SubtitleTextT-region = 69,38,238,22 +AHLCG-Asset-SubtitleTextD-region = 69,41,238,22 +AHLCG-Asset-SubtitleTextP-region = 69,42,238,22 AHLCG-Asset-Body-region = 20,320,336,140 AHLCG-Asset-Body-alignment = left -AHLCG-Asset-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-Asset-Body-tightness = 1.0 AHLCG-Asset-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Asset-Portrait-portrait-pany = 0 @@ -43,15 +47,15 @@ AHLCG-Asset-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/D AHLCG-Asset-BackPortrait-portrait-pany = 0 AHLCG-Asset-BackPortrait-portrait-clip-region = 10,40,358,258 -AHLCG-Asset-ClassSymbol1-region = 274, 2, 52, 52 -AHLCG-Asset-ClassSymbol2-region = 319, 2, 52, 52 - -AHLCG-Asset-BasicWeaknessIcon-region = 329,11,30,30 - AHLCG-Asset-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Asset-Collection-portrait-pany = 0 +AHLCG-Asset-Collection-portrait-clip-region = 320,508,13,13 +AHLCG-Asset-DefaultCollection-portrait-clip-region = 320,508,13,13 -AHLCG-Asset-Collection-portrait-clip-region = 320,510,13,13 -AHLCG-Asset-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-Asset-ClassSymbol1-region = 229, 2, 52, 52 +AHLCG-Asset-ClassSymbol2-region = 274, 2, 52, 52 +AHLCG-Asset-ClassSymbol3-region = 319, 2, 52, 52 + +AHLCG-Asset-BasicWeaknessIcon-region = 329,11,30,30 -AHLCG-Asset-Dash-tint = 0.0, 0.0, 1.0 \ No newline at end of file +AHLCG-Asset-Dash-tint = 0.0, 0.0, 1.0 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AssetStory.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AssetStory.settings index 4a4eadf..6a644a6 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AssetStory.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-AssetStory.settings @@ -1,26 +1,16 @@ AHLCG-AssetStory-Default-template = ArkhamHorrorLCG/templates/AHLCG-AssetStory-N.jp2 AHLCG-AssetStoryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 +AHLCG-AssetStory-Name-region = 68,14,238,29 AHLCG-AssetStory-Label-region = 20,62,38,14 -AHLCG-AssetStory-Label-alignment = center, middle -AHLCG-AssetStory-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.85; FOREGROUND: #000000 - -AHLCG-AssetStory-Name-region = 68,10,238,29 +AHLCG-AssetStory-Subtype-region = 86,301,203,15 AHLCG-AssetStory-SubtitleN-region = 68,41,240,22 +AHLCG-AssetStory-SubtitleW-region = 65,43,248,23 AHLCG-AssetStory-SubtitleTextN-region = 68,42,240,22 -AHLCG-AssetStory-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; FOREGROUND: #000000 -AHLCG-AssetStory-Subtitle-alignment = center, middle - -AHLCG-AssetStory-Subtype-region = 86,301,203,15 -AHLCG-AssetStory-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 -AHLCG-AssetStory-Subtype-alignment = center, middle +AHLCG-AssetStory-SubtitleTextW-region = 69,43,240,22 AHLCG-AssetStory-Body-region = 20,320,336,140 -AHLCG-AssetStory-Body-alignment = left -AHLCG-AssetStory-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.97; FOREGROUND: #000000 -#AHLCG-AssetStory-Body-tightness = 0.75 -AHLCG-AssetStory-Body-tightness = 1.0 AHLCG-AssetStory-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-AssetStory-Portrait-portrait-pany = 0 @@ -30,18 +20,16 @@ AHLCG-AssetStory-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portra AHLCG-AssetStory-BackPortrait-portrait-pany = 0 AHLCG-AssetStory-BackPortrait-portrait-clip-region = 10,40,358,258 -AHLCG-AssetStory-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-AssetStory-Collection-portrait-pany = 0 - -AHLCG-AssetStory-Collection-portrait-clip-region = 320,510,13,13 -AHLCG-AssetStory-DefaultCollection-portrait-clip-region = 320,510,13,13 - AHLCG-AssetStory-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-AssetStory-Encounter-portrait-pany = 0 - AHLCG-AssetStory-Encounter-portrait-clip-region = 329,10,30,30 AHLCG-AssetStory-DefaultEncounter-portrait-clip-region = 329,10,30,30 AHLCG-AssetStory-ReturnEncounter-portrait-clip-region = 327,8,32,32 AHLCG-AssetStory-DefaultReturnEncounter-portrait-clip-region = 327,8,32,32 -AHLCG-AssetStory-Dash-tint = 0.0, 0.0, 1.0 \ No newline at end of file +AHLCG-AssetStory-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-AssetStory-Collection-portrait-pany = 0 +AHLCG-AssetStory-Collection-portrait-clip-region = 320,508,13,13 +AHLCG-AssetStory-DefaultCollection-portrait-clip-region = 320,508,13,13 + +AHLCG-AssetStory-Dash-tint = 0.0, 0.0, 1.0 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-BoxCover.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-BoxCover.settings new file mode 100644 index 0000000..cf8ab8f --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-BoxCover.settings @@ -0,0 +1,17 @@ +AHLCG-BoxCover-Default-template = ArkhamHorrorLCG/templates/AHLCG-BoxCover.png + +AHLCG-BoxCover-Name-region = 425,1110,767,53 +AHLCG-BoxCover-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 40; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING:{Eons.namedObjects.AHLCGObject.titleFontTracking};FOREGROUND: #FFFFFF +AHLCG-BoxCover-Name-alignment = center, middle +AHLCG-BoxCover-Name-tightness = 0.2 + +AHLCG-BoxCover-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-BoxCover-Portrait = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-BoxCover-Portrait-portrait-pany = 0 +AHLCG-BoxCover-Portrait-portrait-clip-region = 420,733,781,347 +AHLCG-BoxCover-Tint-region = 420, 420, 781, 783 + +AHLCG-BoxCover-PortraitBottom-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-BoxCover-PortraitBottom = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-BoxCover-PortraitBottom-portrait-pany = 0 +AHLCG-BoxCover-PortraitBottom-portrait-clip-region = 1630,420,785,785 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Chaos.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Chaos.settings index 508edd5..1b2b6ca 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Chaos.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Chaos.settings @@ -1,60 +1,70 @@ AHLCG-Chaos-Default-template = ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2 -#AHLCG-Chaos-Name-region = 28,92,307,25 -AHLCG-Chaos-Name-region = 28,90,307,75 -AHLCG-Chaos-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 14; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 -#AHLCG-Chaos-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 14; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.0; FOREGROUND: #000000 +AHLCG-Chaos-Name-region = 28,90,319,75 +AHLCG-Chaos-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize*1.318}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING:{Eons.namedObjects.AHLCGObject.titleFontTracking};FOREGROUND: #000000 AHLCG-Chaos-Name-alignment = center, top AHLCG-Chaos-Name-tightness = 0.2 -#AHLCG-Chaos-Name-tightness = 1.0 AHLCG-Difficulty-region = 129,127,114,14 AHLCG-Difficulty-alignment = center, top -AHLCG-Difficulty-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.difficultySize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.97; FOREGROUND: #000000 +AHLCG-Difficulty-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.difficultySize}; WEIGHT: {Eons.namedObjects.AHLCGObject.difficultyWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.difficultyWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.difficultyTracking}; FOREGROUND: #000000 AHLCG-Chaos-Header-region = 35,135,300,305 -AHLCG-Chaos-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*0.8}; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000; POSTURE: OBLIQUE +AHLCG-Chaos-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*0.8}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth*1.05}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000; POSTURE: POSTURE_OBLIQUE AHLCG-Chaos-Header-alignment = center, top AHLCG-Chaos-Body-region = 95,156,240,305 AHLCG-Chaos-Body-alignment = left, middle -AHLCG-Chaos-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*0.96}; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Chaos-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.02}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 AHLCG-Chaos-BodyIcon-region = 44,148,47,47 -AHLCG-Chaos-Body-tightness = 1.0 - -# Chaos template story cards -AHLCG-Chaos-BodyStory-region = 36,130,305,352 -AHLCG-Chaos-BodyStory-alignment = left -AHLCG-Chaos-BodyStory-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.02}; WIDTH: 0.88; POSTURE: OBLIQUE; FOREGROUND: #000000 -AHLCG-Chaos-BodyStory-tightness = 1.15 -AHLCG-Chaos-StoryStory-region = 51,130,290,352 -AHLCG-Chaos-StoryStory-alignment = left -AHLCG-Chaos-StoryStory-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.02}; WIDTH: 0.88; POSTURE: OBLIQUE; FOREGROUND: #000000 -AHLCG-Chaos-StoryStory-tightness = 1.15 - -AHLCG-Chaos-TrackerBox-region = 35,369,299,93 -AHLCG-Chaos-TrackerName-region = 45,375,279,20 -AHLCG-Chaos-TrackerName-alignment = center, middle -AHLCG-Chaos-TrackerName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 9.2; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.02; FOREGROUND: #000000 +AHLCG-Chaos-Body-tightness = 0.5 + +AHLCG-StoryChaos-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-StoryChaos-Body-alignment = left, top +AHLCG-StoryChaosFull-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-StoryChaosFull-Body-alignment = left, top AHLCG-Chaos-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Chaos-Encounter-portrait-pany = 0 - -AHLCG-Chaos-Encounter-portrait-clip-region = 173,59,28,28 +AHLCG-Chaos-Encounter-portrait-clip-region = 171,57,32,32 AHLCG-Chaos-ReturnEncounter-portrait-clip-region = 169,54,35,35 - -#AHLCG-Chaos-EncounterNumber-region = 276,515,45,10 -#AHLCG-Chaos-EncounterNumber-alignment = right, middle -#AHLCG-Chaos-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF - -AHLCG-Chaos-Copyright-region = 19,513,102,10 -AHLCG-Chaos-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -AHLCG-Chaos-Copyright-alignment = left, middle +AHLCG-ChaosStory-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-ChaosStory-Encounter-portrait-pany = 0 +AHLCG-ChaosStory-Encounter-portrait-clip-region = 173,59,28,28 +AHLCG-ChaosStory-ReturnEncounter-portrait-clip-region = 169,54,35,35 +AHLCG-StoryChaos-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-StoryChaos-Encounter-portrait-pany = 0 +AHLCG-StoryChaos-Encounter-portrait-clip-region = 173,59,28,28 +AHLCG-StoryChaos-ReturnEncounter-portrait-clip-region = 169,54,35,35 AHLCG-Chaos-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Chaos-Collection-portrait-pany = 0 +AHLCG-Chaos-DefaultCollection-portrait-clip-region = 320,509,13,13 +AHLCG-Chaos-Collection-portrait-clip-region = 320,509,13,13 -AHLCG-Chaos-DefaultCollection-portrait-clip-region = 320,513,13,13 -AHLCG-Chaos-Collection-portrait-clip-region = 320,513,13,13 +AHLCG-ChaosStory-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-ChaosStory-Collection-portrait-pany = 0 +AHLCG-ChaosStory-DefaultCollection-portrait-clip-region = 320,509,13,13 +AHLCG-ChaosStory-Collection-portrait-clip-region = 320,509,13,13 -#AHLCG-Chaos-CollectionNumber-region = 333,515,21,10 \ No newline at end of file +AHLCG-StoryChaos-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-StoryChaos-Collection-portrait-pany = 0 +AHLCG-StoryChaos-DefaultCollection-portrait-clip-region = 320,509,13,13 +AHLCG-StoryChaos-Collection-portrait-clip-region = 320,509,13,13 +#AHLCG-ChaosStoryFull-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +#AHLCG-ChaosStoryFull-Collection-portrait-pany = 0 +#AHLCG-ChaosStoryFull-DefaultCollection-portrait-clip-region = 320,509,13,13 +#AHLCG-ChaosStoryFull-Collection-portrait-clip-region = 320,509,13,13 + +AHLCG-Chaos-EncounterNumber-region = 276,512,45,10 +AHLCG-Chaos-CollectionNumber-region = 333,512,21,10 + +AHLCG-Chaos-Copyright-region = 19,512,102,10 +AHLCG-Chaos-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Chaos-Copyright-alignment = left, middle + +#AHLCG-Chaos-TrackerBox-region = 35,369,299,93 +AHLCG-Chaos-TrackerBox-region = 32,371,306,92 +AHLCG-Chaos-TrackerName-region = 44 ,375,280,20 +AHLCG-Chaos-TrackerName-alignment = center, middle +AHLCG-Chaos-TrackerName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE:{Eons.namedObjects.AHLCGObject.titleFontSize*0.836}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.02}; FOREGROUND: #000000 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Concealed.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Concealed.settings new file mode 100644 index 0000000..f0a3923 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Concealed.settings @@ -0,0 +1,14 @@ +AHLCG-Concealed-Default-template = ArkhamHorrorLCG/templates/AHLCG-Concealed.jp2 +AHLCG-ConcealedBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-ConcealedBack.jp2 + +# Standard +AHLCG-Concealed-Name-region = 31,256,186,65 +AHLCG-Concealed-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize*1.45}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking-0.015}; FOREGROUND: #000000 + +# Named Decoy +AHLCG-Concealed-DecoyName-region = 51,212,146,63 +AHLCG-Concealed-DecoyName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize*1.40}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking-0.025}; FOREGROUND: #FFFFFF + +AHLCG-Concealed-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-Concealed-Portrait-portrait-pany = 0 +AHLCG-Concealed-Portrait-portrait-clip-region = 0,10,244,244 \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Customizable.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Customizable.settings new file mode 100644 index 0000000..6a618f5 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Customizable.settings @@ -0,0 +1,19 @@ +AHLCG-Customizable-Default-template = ArkhamHorrorLCG/templates/AHLCG-Story.jp2 +AHLCG-CustomizableBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-CustomizableBack.jp2 + +AHLCG-Customizable-Name-region = 34,33,310,34 +AHLCG-Customizable-Label-region = 155,509,65,14 +AHLCG-Customizable-Label-alignment = center, middle +AHLCG-Customizable-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize*1.15}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 + +AHLCG-Customizable-Body-region = 32,99,316,387 +AHLCG-Customizable-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*0.94}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 + +AHLCG-Customizable-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Customizable-Collection-portrait-pany = 0 +AHLCG-Customizable-DefaultCollection-portrait-clip-region = 277,492,13,13 +AHLCG-Customizable-Collection-portrait-clip-region = 277,492,13,13 + +AHLCG-Customizable-Copyright-region = 225,495,116,10 +AHLCG-Customizable-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #000000 +AHLCG-Customizable-Copyright-alignment = right, middle diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Divider.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Divider.settings index cb54415..174a022 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Divider.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Divider.settings @@ -2,15 +2,14 @@ AHLCG-Divider-Default-template = ArkhamHorrorLCG/templates/AHLCG-Divider.jp2 AHLCG-DividerBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-Divider.jp2 AHLCG-Divider-Name-region = 123,20,286,25 -AHLCG-Divider-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-Divider-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize*1.136}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 AHLCG-DividerBack-Name-region = 28,90,307,30 AHLCG-Divider-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Divider-Encounter-portrait-pany = 0 - -AHLCG-Divider-Encounter-portrait-clip-region = 476,11,40,40 +AHLCG-Divider-Encounter-portrait-clip-region = 476,13,38,38 AHLCG-Divider-ReturnEncounter-portrait-clip-region = 474,10,43,43 -AHLCG-Divider-Watermark-portrait-clip-region = 80,46,380,380 -AHLCG-Divider-ReturnWatermark-portrait-clip-region = 80,46,380,380 +AHLCG-Divider-Watermark-portrait-clip-region = 87,53,366,366 +AHLCG-Divider-ReturnWatermark-portrait-clip-region = 87,53,366,366 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Enemy.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Enemy.settings index d71c094..d15c94a 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Enemy.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Enemy.settings @@ -1,22 +1,15 @@ AHLCG-Enemy-Default-template = ArkhamHorrorLCG/templates/AHLCG-Enemy.jp2 AHLCG-EnemyBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2 -AHLCG-Enemy-Label-region = 157,308,61,14 -AHLCG-Enemy-Label-alignment = center, middle -AHLCG-Enemy-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.9; FOREGROUND: #000000 - -AHLCG-Enemy-Name-region = 62,2,252,31 -AHLCG-Enemy-Name-alignment = center, middle -AHLCG-Enemy-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.2; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.09; FOREGROUND: #000000 - +AHLCG-Enemy-Name-region = 62,5,252,27 +# Bigger than standard, but don't want fractional sizes because Teutonic comes out weird +AHLCG-Enemy-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 AHLCG-Enemy-SubtitleText-region = 40,32,293,20 -AHLCG-Enemy-Subtitle-alignment = center, middle -AHLCG-Enemy-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.08}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.97; FOREGROUND: #000000 + +AHLCG-Enemy-Label-region = 157,308,61,14 +AHLCG-Enemy-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 AHLCG-Enemy-Body-region = 20,104,338,165 -AHLCG-Enemy-Body-alignment = left -AHLCG-Enemy-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.05}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 -AHLCG-Enemy-Body-tightness = 1.0 AHLCG-Enemy-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Enemy-Portrait-portrait-pany = 0 @@ -26,11 +19,27 @@ AHLCG-Enemy-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/D AHLCG-Enemy-BackPortrait-portrait-pany = 0 AHLCG-Enemy-BackPortrait-portrait-clip-region = 0,241,375,284 -AHLCG-Enemy-Attack-region = 107,51,26,27 -AHLCG-Enemy-Evade-region = 248,51,23,27 +AHLCG-Enemy-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Enemy-EncounterPortrait-portrait-pany = 0 +AHLCG-Enemy-Encounter-portrait-clip-region = 174,274,28,28 +AHLCG-Enemy-DefaultEncounter-portrait-clip-region = 174,274,28,28 +AHLCG-Enemy-ReturnEncounter-portrait-clip-region = 169,270,37,33 +AHLCG-Enemy-DefaultReturnEncounter-portrait-clip-region = 169,270,37,33 + +AHLCG-Enemy-CollectionPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Enemy-CollectionPortrait-portrait-pany = 0 +AHLCG-Enemy-Collection-portrait-clip-region = 320,510,13,13 +AHLCG-Enemy-DefaultCollection-portrait-clip-region = 320,510,13,13 + +AHLCG-Enemy-Attack-region = 106,51,26,27 +AHLCG-Enemy-AttackPerInv-region = 102,51,24,27 +AHLCG-Enemy-AttackPerInvIcon-region = 121,56,14,14 +AHLCG-Enemy-Evade-region = 246,51,26,27 +AHLCG-Enemy-EvadePerInv-region = 242,51,24,27 +AHLCG-Enemy-EvadePerInvIcon-region = 261,56,14,14 AHLCG-Enemy-Health-region = 168,45,40,35 -AHLCG-Enemy-HealthPerInv-region = 170,45,27,35 -AHLCG-Enemy-PerInv-region = 191,51,17,17 +AHLCG-Enemy-HealthPerInv-region = 169,45,27,35 +AHLCG-Enemy-HealthPerInvIcon-region = 190,52,17,17 AHLCG-Enemy-Damage1-region = 132,284,19,23 AHLCG-Enemy-Damage2-region = 109,277,19,23 @@ -43,18 +52,4 @@ AHLCG-Enemy-Horror3-region = 267,268,27,24 AHLCG-Enemy-Horror4-region = 288,255,27,24 AHLCG-Enemy-Horror5-region = 308,241,27,24 -AHLCG-Enemy-CollectionPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-Enemy-CollectionPortrait-portrait-pany = 0 - -AHLCG-Enemy-Collection-portrait-clip-region = 320,510,13,13 -AHLCG-Enemy-DefaultCollection-portrait-clip-region = 320,510,13,13 - -AHLCG-Enemy-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-Enemy-EncounterPortrait-portrait-pany = 0 - -AHLCG-Enemy-Encounter-portrait-clip-region = 174,274,28,28 -AHLCG-Enemy-DefaultEncounter-portrait-clip-region = 174,274,28,28 -AHLCG-Enemy-ReturnEncounter-portrait-clip-region = 169,270,37,33 -AHLCG-Enemy-DefaultReturnEncounter-portrait-clip-region = 169,270,37,33 - AHLCG-Enemy-Dash-tint = 38.0, 0.14, 1.0 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-EnemyLocation.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-EnemyLocation.settings new file mode 100644 index 0000000..000bc3c --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-EnemyLocation.settings @@ -0,0 +1,105 @@ +AHLCG-EnemyLocation-Default-template = ArkhamHorrorLCG/templates/AHLCG-EnemyLocation.jp2 +AHLCG-EnemyLocationBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-Location.jp2 + +AHLCG-EnemyLocation-Name-region = 65,4,242,29 +AHLCG-EnemyLocation-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +AHLCG-EnemyLocation-Label-region = 138,278,100,14 +AHLCG-EnemyLocation-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 +AHLCG-EnemyLocation-SubtitleText-region = 95,36,191,21 + +AHLCG-EnemyLocationBack-Name-region = 65,4,242,29 +AHLCG-EnemyLocationBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +AHLCG-EnemyLocationBack-Label-region = 138,278,100,14 +AHLCG-EnemyLocationBack-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 +AHLCG-EnemyLocationBack-SubtitleText-region = 95,36,191,21 + +AHLCG-EnemyLocation-EncounterOverlay-region = 163, 234, 50, 50 +AHLCG-EnemyLocationBack-EncounterOverlay-region = 163, 234, 50, 50 + +AHLCG-EnemyLocation-Body-region = 20,358,336,143 +AHLCG-EnemyLocationBack-Body-region = 20,300,336,143 + +AHLCG-EnemyLocation-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-EnemyLocation-Portrait-portrait-pany = 0 +AHLCG-EnemyLocation-Portrait-portrait-clip-region = 0,42,375,325 + +AHLCG-EnemyLocationBack-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-EnemyLocationBack-BackPortrait-portrait-pany = 0 +AHLCG-EnemyLocationBack-BackPortrait-portrait-clip-region = 0,42,375,275 + +AHLCG-EnemyLocation-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-EnemyLocation-BackPortrait-portrait-pany = 0 +AHLCG-EnemyLocation-BackPortrait-portrait-clip-region = 0,42,375,275 + +AHLCG-EnemyLocation-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-EnemyLocation-Encounter-portrait-pany = 0 +AHLCG-EnemyLocation-DefaultEncounter-portrait-clip-region = 174,304,28,28 +AHLCG-EnemyLocation-Encounter-portrait-clip-region = 174,304,28,28 +AHLCG-EnemyLocation-ReturnEncounter-portrait-clip-region = 170,391,37,34 + +AHLCG-EnemyLocationBack-Encounter-portrait-clip-region = 174,245,28,28 +AHLCG-EnemyLocationBack-ReturnEncounter-portrait-clip-region = 170,241,37,34 + +AHLCG-EnemyLocation-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-EnemyLocation-Collection-portrait-pany = 0 +AHLCG-EnemyLocation-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-EnemyLocation-Collection-portrait-clip-region = 320,510,13,13 + +AHLCG-EnemyLocationBack-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-EnemyLocationBack-Collection-portrait-clip-region = 320,510,13,13 + +AHLCG-EnemyLocationIcon-region = 14,6,36,35 +AHLCG-Connection1Icon-region = 67,467,35,35 +AHLCG-Connection2Icon-region = 108,459,35,35 +AHLCG-Connection3Icon-region = 150,456,34,34 +AHLCG-Connection4Icon-region = 191,456,34,34 +AHLCG-Connection5Icon-region = 232,459,35,35 +AHLCG-Connection6Icon-region = 273,467,35,35 + +AHLCG-EnemyLocation-Shroud-region = 0,310,49,50 +AHLCG-EnemyLocation-ShroudPerInv-region = 0,310,49,49 +AHLCG-EnemyLocation-ShroudPerInvIcon-region = 27,310,29,49 +AHLCG-EnemyLocation-Clues-region = 318,310,49,50 +AHLCG-EnemyLocation-CluesPerInv-region = 311,310,49,49 +AHLCG-EnemyLocation-CluesPerInvIcon-region = 338,310,29,49 + +AHLCG-EnemyLocation-Victory-region = 262,458,104,42 +AHLCG-EnemyLocation-Victory-alignment = right, bottom +AHLCG-EnemyLocation-Victory-tightness = 0.7 + +AHLCG-BaseIcon-region = 9,1,47,46 + +AHLCG-EnemyLocation-Copyright-region = 143,513,86,10 +AHLCG-EnemyLocationBack-Copyright-region = 128,513,86,10 + +# -1 value means inverted color png +AHLCG-EnemyLocation-Dash-tint = 38.0, 0.14, -1.0 + + +AHLCG-EnemyLocation-Label-region = 157,308,61,14 +AHLCG-EnemyLocation-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 + +AHLCG-EnemyLocation-Attack-region = 100,51,26,27 +AHLCG-EnemyLocation-AttackPerInv-region = 96,51,24,27 +AHLCG-EnemyLocation-AttackPerInvIcon-region = 115,56,14,14 +AHLCG-EnemyLocation-Evade-region = 246,51,26,27 +AHLCG-EnemyLocation-EvadePerInv-region = 242,51,24,27 +AHLCG-EnemyLocation-EvadePerInvIcon-region = 261,56,14,14 +AHLCG-EnemyLocation-Health-region = 168,45,40,35 +AHLCG-EnemyLocation-HealthPerInv-region = 169,45,27,35 +AHLCG-EnemyLocation-HealthPerInvIcon-region = 190,52,17,17 + +AHLCG-EnemyLocation-Damage1-region = 93,335,19,23 +AHLCG-EnemyLocation-Damage2-region = 73,341,19,23 +AHLCG-EnemyLocation-Damage3-region = 53,347,19,23 +AHLCG-EnemyLocation-Damage4-region = 33,355,19,23 +AHLCG-EnemyLocation-Damage5-region = 13,365,19,23 +AHLCG-EnemyLocation-Horror1-region = 253,335,27,24 +AHLCG-EnemyLocation-Horror2-region = 275,341,27,24 +AHLCG-EnemyLocation-Horror3-region = 297,347,27,24 +AHLCG-EnemyLocation-Horror4-region = 319,355,27,24 +AHLCG-EnemyLocation-Horror5-region = 342,365,27,24 + +AHLCG-EnemyLocation-Dash-tint = 38.0, 0.14, 1.0 + + diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Event.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Event.settings index ce0189e..220386d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Event.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Event.settings @@ -1,35 +1,35 @@ AHLCG-Event-Default-template = ArkhamHorrorLCG/templates/AHLCG-Event-G.jp2 AHLCG-EventBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 -AHLCG-Event-Label-region = 21,62,36,14 -AHLCG-Event-Label-alignment = center, middle -AHLCG-Event-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.92; FOREGROUND: #000000 - -AHLCG-Event-Name-region = 40,301,297,29 - +AHLCG-Event-Name-region = 40,304,297,29 AHLCG-Event-Subtype-region = 86,333,203,15 -AHLCG-Event-Subtype-alignment = center, middle -AHLCG-Event-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 - +AHLCG-Event-Label-region = 21,62,36,14 AHLCG-Event-Level-region = 14,35,49,23 -AHLCG-Event-BasicWeaknessEvent-region = 162,247,54,53 -AHLCG-Event-BasicWeaknessIcon-region = 173,258,30,30 - AHLCG-Event-Body-region = 44,338,288,158 -AHLCG-Event-WeaknessBody-region = 44,352,288,143 -AHLCG-Event-Body-alignment = left -AHLCG-Event-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-Event-Body-tightness = 1.0 AHLCG-Event-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Event-Portrait-portrait-pany = 0 - AHLCG-Event-Portrait-portrait-clip-region = 0,0,375,288 AHLCG-Event-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Event-Collection-portrait-pany = 0 +AHLCG-Event-Collection-portrait-clip-region = 319,508,13,13 +AHLCG-Event-DefaultCollection-portrait-clip-region = 320,508,13,13 + +AHLCG-Event-ClassSymbol21-region = 144, 256, 49, 49 +AHLCG-Event-ClassSymbol22-region = 187, 256, 49, 49 + +AHLCG-Event-ClassSymbol31-region = 123, 256, 49, 49 +AHLCG-Event-ClassSymbol32-region = 166, 256, 49, 49 +AHLCG-Event-ClassSymbol33-region = 209, 256, 49, 49 + +AHLCG-Event-BasicWeaknessEvent-region = 162,247,54,53 +AHLCG-Event-BasicWeaknessIcon-region = 173,258,30,30 +AHLCG-Event-WeaknessBody-region = 44,352,288,143 -AHLCG-Event-Collection-portrait-clip-region = 319,510,13,13 +AHLCG-Event-Dash-tint = 0.0, 0.0, 1.0 -AHLCG-Event-Dash-tint = 0.0, 0.0, 1.0 \ No newline at end of file +AHLCG-Event-Encounter-overlay-region = 163,256,49,51 +AHLCG-Event-Encounter-portrait-clip-region = 174,266,28,28 +AHLCG-Event-ReturnEncounter-portrait-clip-region = 174,266,28,28 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Game.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Game.settings index 1ed7d9c..a12cd34 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Game.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Game.settings @@ -1,52 +1,79 @@ AHLCG-Cost-region = 18,11,40,38 -AHLCG-Cost-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 19; WEIGHT: WEIGHT_REGULAR; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -AHLCG-Cost-alignment = center, middle + +#AHLCG-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000; KERNING: KERNING_ON +AHLCG-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +#AHLCG-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Name-alignment = center, middle + +AHLCG-BackName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 13; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +AHLCG-BackName-alignment = center, middle + +AHLCG-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtypeWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtypeWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtypeTracking}; FOREGROUND: #000000 +AHLCG-Subtype-alignment = center, middle +AHLCG-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.subtitleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtitleWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtitleTracking}; FOREGROUND: #000000 +AHLCG-Subtitle-alignment = center, middle +AHLCG-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.smallLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.smallLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.smallLabelTracking}; FOREGROUND: #000000 +AHLCG-Label-alignment = center, middle + +AHLCG-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-Body-alignment = left +AHLCG-Body-tightness = 0.6 + +AHLCG-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.victoryFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyVictoryWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-Header-alignment = left +AHLCG-Header-tightness = 0.6 +AHLCG-Story-style = FAMILY: {Eons.namedObjects.AHLCGObject.storyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; POSTURE: POSTURE_OBLIQUE; FOREGROUND: #000000 +AHLCG-Story-alignment = left +AHLCG-Story-tightness = 0.6 + +AHLCG-Artist-region = 14,512,121,10 +AHLCG-Artist-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Artist-alignment = left, middle +AHLCG-Copyright-region = 137,512,101,10 +AHLCG-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Copyright-alignment = center, middle AHLCG-Level-region = 14,36,48,23 AHLCG-NoLevel-region = 8,5,60,58 AHLCG-Skill1-region = 0,80,54,44 -AHLCG-Skill2-region = 0,121,54,44 -AHLCG-Skill3-region = 0,162,54,44 -AHLCG-Skill4-region = 0,203,54,44 -AHLCG-Skill5-region = 0,244,54,44 -AHLCG-Skill6-region = 0,285,54,44 +AHLCG-Skill2-region = 0,122,54,44 +AHLCG-Skill3-region = 0,164,54,44 +AHLCG-Skill4-region = 0,206,54,44 +AHLCG-Skill5-region = 0,248,54,44 +AHLCG-Skill6-region = 0,290,54,44 AHLCG-SkillIcon1-region = 13,87,25,26 -AHLCG-SkillIcon2-region = 13,128,25,26 -AHLCG-SkillIcon3-region = 13,169,25,26 -AHLCG-SkillIcon4-region = 13,210,25,26 -AHLCG-SkillIcon5-region = 13,251,25,26 -AHLCG-SkillIcon6-region = 13,292,25,26 +AHLCG-SkillIcon2-region = 13,129,25,26 +AHLCG-SkillIcon3-region = 13,171,25,26 +AHLCG-SkillIcon4-region = 13,213,25,26 +AHLCG-SkillIcon5-region = 13,255,25,26 +AHLCG-SkillIcon6-region = 13,297,25,26 + AHLCG-Slot-region = 309,454,51,52 AHLCG-Slot2-region = 255,454,51,52 -AHLCG-Artist-region = 14,513,121,10 -AHLCG-Artist-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -AHLCG-Artist-alignment = left, middle -AHLCG-Copyright-region = 124,513,86,10 -AHLCG-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -#AHLCG-Copyright-alignment = center, middle -AHLCG-Copyright-alignment = right, middle - -AHLCG-Stamina-region = 148,465,33,41 -AHLCG-Sanity-region = 197,469,43,36 - -AHLCG-Body-tightness = 1.0 +#AHLCG-Stamina-region = 148,465,33,41 +AHLCG-Stamina-region = 148,467,31,39 +AHLCG-StaminaPerInvIcon-region = 158,456,29,49 +#AHLCG-Sanity-region = 197,469,43,36 +AHLCG-Sanity-region = 197,471,43,36 +AHLCG-SanityPerInvIcon-region = 215,456,29,49 AHLCG-Clues-region = 239,296,51,48 -AHLCG-CollectionNumber-region = 318,513,37,10 +AHLCG-CollectionNumber-region = 318,512,37,10 +AHLCG-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF AHLCG-CollectionNumber-alignment = right, middle -AHLCG-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -AHLCG-EncounterNumber-region = 247,513,55,10 +AHLCG-EncounterNumber-region = 247,512,55,10 AHLCG-EncounterNumber-alignment = right, middle -AHLCG-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 4.5; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF +AHLCG-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF -AHLCG-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.0; FOREGROUND: #000000 -AHLCG-Name-alignment = center, bottom +AHLCG-ScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.scenarioIndexWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.scenarioIndexWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.scenarioIndexTracking}; FOREGROUND: #000000 +AHLCG-ScenarioIndex-alignment = center, middle -AHLCG-BackName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 13; WEIGHT: WEIGHT_REGULAR; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-BackName-alignment = center, middle +AHLCG-BackScenarioIndex-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.scenarioIndexBackSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.scenarioIndexWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.scenarioIndexWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.scenarioIndexTracking}; FOREGROUND: #000000 +AHLCG-BackScenarioIndex-alignment = center, middle +AHLCG-BackScenarioIndex-tightness = 0.1 HorizontalSpacer-tag = hs HorizontalSpacer-tag-replacement = @@ -64,6 +91,9 @@ Reaction-tag-replacement = r Fast-tag = fre Fast-tag-replacement = f +Dash-tag = dash +Dash-tag-replacement = - + Guardian-tag = gua Guardian-tag-replacement = G Seeker-tag = see @@ -86,6 +116,16 @@ Agility-tag-replacement = a Wild-tag = wild Wild-tag-replacement = ? +Damage-tag = dmg +Damage-tag-replacement = h +Horror-tag = hor +Horror-tag-replacement = d +Resource-tag = rec +Resource-tag-replacement = m +Codex-tag = cod +Codex-tag-replacement = # + + Skull-tag = sku Skull-tag-replacement = S Cultist-tag = cul @@ -102,6 +142,22 @@ Bless-tag = ble Bless-tag-replacement = D Curse-tag = cur Curse-tag-replacement = U +Frost-tag = fro +Frost-tag-replacement = H + +Seal1-tag = seal1 +Seal1-tag-replacement = 1 +Seal2-tag = seal2 +Seal2-tag-replacement = 2 +Seal3-tag = seal3 +Seal3-tag-replacement = 3 +Seal4-tag = seal4 +Seal4-tag-replacement = 4 +Seal5-tag = seal5 +Seal5-tag-replacement = 5 + +Asterisk-tag = ast +Asterisk-tag-replacement = * Unique-tag = uni Unique-tag-replacement = u @@ -109,15 +165,107 @@ PerInvestigator-tag = per PerInvestigator-tag-replacement = p Bullet-tag = bul Bullet-tag-replacement = b -Resolution-tag = res -Resolution-tag-replacement = #AHLCG-Resolution-tag -EndResolution-tag = /res -EndResolution-tag-replacement = GuideBullet-tag = gbul GuideBullet-tag-replacement = B Square-tag = squ Square-tag-replacement = s +# for story cards +#ActionSmall-tag = act +#ActionSmall-tag-replacement = n +#ReactionSmall-tag = rea +#ReactionSmall-tag-replacement = r +#FastSmall-tag = fre +#FastSmall-tag-replacement = f + +#GuardianSmall-tag = gua +#GuardianSmall-tag-replacement = G +#SeekerSmall-tag = see +#SeekerSmall-tag-replacement = K +#RogueSmall-tag = rog +#RogueSmall-tag-replacement = R +#MysticSmall-tag = mys +#MysticSmall-tag-replacement = M +#SurvivorSmall-tag = sur +#SurvivorSmall-tag-replacement = V + +#WillpowerSmall-tag = wil +#WillpowerSmall-tag-replacement = w +#IntellectSmall-tag = int +#IntellectSmall-tag-replacement = i +#CombatSmall-tag = com +#CombatSmall-tag-replacement = c +#AgilitySmall-tag = agi +#AgilitySmall-tag-replacement = a +#WildSmall-tag = wild +#WildSmall-tag-replacement = ? + +#SkullSmall-tag = sku +#SkullSmall-tag-replacement = S +#CultistSmall-tag = cul +#CultistSmall-tag-replacement = C +#ArtifactSmall-tag = tab +#ArtifactSmall-tag-replacement = A +#MonsterSmall-tag = mon +#MonsterSmall-tag-replacement = L +#ElderSignSmall-tag = eld +#ElderSignSmall-tag-replacement = E +#TentacleSmall-tag = ten +#TentacleSmall-tag-replacement = T +#BlessSmall-tag = ble +#BlessSmall-tag-replacement = D +#CurseSmall-tag = cur +#CurseSmall-tag-replacement = U +#FrostSmall-tag = fro +#FrostSmall-tag-replacement = H + +#Seal1Small-tag = seal1 +#Seal1Small-tag-replacement = 1 +#Seal2Small-tag = seal2 +#Seal2Small-tag-replacement = 2 +#Seal3Small-tag = seal3 +#Seal3Small-tag-replacement = 3 +#Seal4Small-tag = seal4 +#Seal4Small-tag-replacement = 4 +#Seal5Small-tag = seal5 +#Seal5Small-tag-replacement = 5 + +#UniqueSmall-tag = uni +#UniqueSmall-tag-replacement = u +#PerInvestigatorSmall-tag = per +#PerInvestigatorSmall-tag-replacement = p +#BulletSmall-tag = bul +#BulletSmall-tag-replacement = b +#GuideBulletSmall-tag = gbul +#GuideBulletSmall-tag-replacement = B +#SquareSmall-tag = squ +#SquareSmall-tag-replacement = s +#end story tags + +Resolution-tag = res +Resolution-tag-replacement = #AHLCG-Resolution-tag +EndResolution-tag = /res +EndResolution-tag-replacement = +TextEntry1-tag = entry1 +TextEntry1-tag-replacement = +TextEntry2-tag = entry2 +TextEntry2-tag-replacement = +TextEntry3-tag = entry3 +TextEntry3-tag-replacement = +TextEntry4-tag = entry4 +TextEntry4-tag-replacement = +TextEntry5-tag = entry5 +TextEntry5-tag-replacement = +TextEntry1A-tag = entry1 +TextEntry1A-tag-replacement = +TextEntry2A-tag = entry2 +TextEntry2A-tag-replacement = +TextEntry3A-tag = entry3 +TextEntry3A-tag-replacement = +TextEntry4A-tag = entry4 +TextEntry4A-tag-replacement = +TextEntry5A-tag = entry5 +TextEntry5A-tag-replacement = Prey-tag = pre Prey-tag-replacement = #AHLCG-Prey-tag Spawn-tag = spa @@ -130,31 +278,61 @@ Objective-tag = obj Objective-tag-replacement = #AHLCG-Objective-tag Haunted-tag = hau Haunted-tag-replacement = #AHLCG-Haunted-tag -Patrol-tag = pat -Patrol-tag-replacement = #AHLCG-Patrol-tag +Shift-tag = shi +Shift-tag-replacement = #AHLCG-Shift-tag Copyright-tag = cop Copyright-tag-replacement = \u00a9 +Suffix-tag = suf +Suffix-style = FAMILY: {Eons.namedObjects.AHLCGObject.suffixFamily}; SIZE: {Eons.namedObjects.AHLCGObject.indexSuffixSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.indexSuffixWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.indexSuffixWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.indexSuffixTracking}; FOREGROUND: #000000 +SuffixBack-tag = sufb +SuffixBack-style = FAMILY: {Eons.namedObjects.AHLCGObject.suffixFamily}; SIZE: {Eons.namedObjects.AHLCGObject.indexBackSuffixSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.indexSuffixWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.indexSuffixWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.indexSuffixTracking}; FOREGROUND: #000000 + +// compatibility +XPBox-tag = xpbox +XPBox-tag-replacement = \u29e0 +XPBoxA-tag = xpbox +XPBoxA-tag-replacement = \u2610 +// added for Fotune and Folly +CheckBox-tag = cbox +CheckBox-tag-replacement = \u29e0 +CheckBoxA-tag = cbox +CheckBoxA-tag-replacement = \u2610 Trait-tag = t -Trait-style = FAMILY: { Eons.namedObjects.AHLCGObject.bodyFamily }; WEIGHT: WEIGHT_BOLD; POSTURE: OBLIQUE +Trait-style = FAMILY: { Eons.namedObjects.AHLCGObject.traitFamily }; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyTraitWeight}; POSTURE: POSTURE_OBLIQUE +Header-tag = hdr +Header-style = FAMILY: { Eons.namedObjects.AHLCGObject.victoryFamily }; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyVictoryWeight}; POSTURE: POSTURE_REGULAR +Flavor-tag = fla +Flavor-style = FAMILY: { Eons.namedObjects.AHLCGObject.flavorFamily }; WEIGHT: { Eons.namedObjects.AHLCGObject.bodyFlavorWeight }; POSTURE: POSTURE_OBLIQUE +Story-tag = sto +Story-style = FAMILY: { Eons.namedObjects.AHLCGObject.storyFamily }; WEIGHT: { Eons.namedObjects.AHLCGObject.bodyStoryWeight }; POSTURE: POSTURE_OBLIQUE +Victory-tag = vic +Victory-style = FAMILY: { Eons.namedObjects.AHLCGObject.victoryFamily }; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyVictoryWeight}; POSTURE: POSTURE_REGULAR; +Body-tag = bod +#Body-style = FAMILY: { Eons.namedObjects.AHLCGObject.bodyFamily }; WEIGHT: WEIGHT_REGULAR; POSTURE: POSTURE_REGULAR; +Body-style = FAMILY: { Eons.namedObjects.AHLCGObject.bodyFamily }; WEIGHT: { Eons.namedObjects.AHLCGObject.bodyFontWeight }; POSTURE: POSTURE_REGULAR; AHF-tag = ahf AHF-style = FAMILY: { Eons.namedObjects.AHLCGObject.symbolFamily }; SIZE: {Eons.namedObjects.AHLCGObject.symbolSize} +AHFSmall-tag = ahf +AHFSmall-style = FAMILY: { Eons.namedObjects.AHLCGObject.symbolFamily }; SIZE: {Eons.namedObjects.AHLCGObject.symbolSize*0.2} TraitSection-tag = ts -TraitSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyTraitSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: {Eons.namedObjects.AHLCGObject.bodyTraitSpacing}; POSTURE: OBLIQUE +TraitSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.traitFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyTraitSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyTraitWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyTraitWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyTraitTracking}; POSTURE: POSTURE_OBLIQUE FlavorSection-tag = fs -FlavorSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFlavorSize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFlavorSpacing}; POSTURE: OBLIQUE +FlavorSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.flavorFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFlavorSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFlavorWeight }; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFlavorWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFlavorTracking}; POSTURE: POSTURE_OBLIQUE InvStorySection-tag = iss -InvStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize*0.925}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyStorySpacing}; POSTURE: OBLIQUE +InvStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.storyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize*0.925}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyStoryWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyStoryTracking}; POSTURE: POSTURE_OBLIQUE ActStorySection-tag = css -ActStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; POSTURE: OBLIQUE +ActStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.storyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyStoryWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyStoryTracking}; POSTURE: POSTURE_OBLIQUE; FOREGROUND: #000000 AgendaStorySection-tag = gss -AgendaStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; POSTURE: OBLIQUE +AgendaStorySection-style = FAMILY: {Eons.namedObjects.AHLCGObject.storyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyStoryWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyStoryTracking}; POSTURE: POSTURE_OBLIQUE GuideSection-tag = section -GuideSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.3; WIDTH: 1.05; FOREGROUND: #415a55 +#GuideSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.3; WIDTH: 1.05; FOREGROUND: #415a55 +GuideSection-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.3; WIDTH: 1.05 GuideHeader-tag = header -GuideHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 14; WIDTH: 1.04; FOREGROUND: #415a55 +#GuideHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 14; WIDTH: 1.04; FOREGROUND: #415a55 +GuideHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 14; WIDTH: 1.04 GuideBoxBullet-tag = boxbullet GuideBoxBullet-style = FOREGROUND: #415a55 @@ -172,6 +350,7 @@ AHLCG-Heart-tint = 24.0, 0.72, 0.73 AHLCG-Star-tint = -71.0, 0.36, 0.23 AHLCG-Quote-tint = 23.0, 0.64, 0.47 AHLCG-Clover-tint = 123.0, 0.23, 0.44 +AHLCG-Spade-tint = -26.0, 0.66, 0.72 AHLCG-TriangleAlt-tint = 50.0, 0.81, 0.88 AHLCG-CrossAlt-tint = -2.0, 0.83, 0.73 @@ -200,4 +379,4 @@ LocHeart-tag = lhea LocStar-tag = lsta LocQuote-tag = lquo LocClover-tag = lclo - +LocSpade-tag = lspa diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Guide75.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Guide75.settings index 4330fde..db3f3c3 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Guide75.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Guide75.settings @@ -1,22 +1,35 @@ AHLCG-Guide75-Default-template = ArkhamHorrorLCG/templates/AHLCG-Guide75Empty.jp2 AHLCG-Guide75-Name-region = 340,283,445,42 -AHLCG-Guide75-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #FFFFFF +AHLCG-Guide75-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20.0; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #FFFFFF -AHLCG-Guide75-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #63251d -AHLCG-Guide75-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #2d5b58 -AHLCG-Guide75-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #7e0607 +AHLCG-Guide75-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #63251d +AHLCG-Guide75-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #2d5b58 +AHLCG-Guide75-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #7e0607 AHLCG-Guide75-Header-alignment = center -AHLCG-Guide75-Body-region = 65,65,993,1012 -AHLCG-Guide75-BodyLeftTitle-region = 65,378,472,701 -AHLCG-Guide75-BodyRightTitle-region = 572,378,472,701 -AHLCG-Guide75-BodyLeftEmpty-region = 65,65,472,1012 -AHLCG-Guide75-BodyRightEmpty-region = 572,65,472,1012 +AHLCG-Guide75-Label-region = 470, 243, 184, 28 +AHLCG-Guide75-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.03; TRACKING: 0.01; FOREGROUND: #FFFFFF + +#AHLCG-Guide75-Body-region = 65,65,995,995 +#AHLCG-Guide75-BodyLeftTitle-region = 65,378,475,682 +#AHLCG-Guide75-BodyRightTitle-region = 572,378,475,682 +#AHLCG-Guide75-BodyLeftEmpty-region = 65,65,475,995 +#AHLCG-Guide75-BodyRightEmpty-region = 572,65,475,995 +# portraits will be based on this +AHLCG-Guide75-Body-region = 65,65,995,995 +# text columns are based on these +AHLCG-Guide75-BodyLeftTitle-region = 80,378,475,687 +AHLCG-Guide75-BodyRightTitle-region = 580,378,475,687 +AHLCG-Guide75-BodyLeftEmpty-region = 80,65,475,995 +AHLCG-Guide75-BodyRightEmpty-region = 580,65,475,995 AHLCG-Guide75-Body-alignment = left, top -AHLCG-Guide75-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.06}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.00; FOREGROUND: #000000 -AHLCG-Guide75-Body-tightness = 1.65 +AHLCG-Guide75-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.06}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +#AHLCG-Guide75-Body-tightness = 0.6 +AHLCG-Guide75-Body-tightness = 0.85 + AHLCG-Guide75-BodySection-tightness = 1.0 +#AHLCG-Guide75-BodySection-tightness = 1.0 AHLCG-Guide75-BodyName-region = 56,83,268,390 AHLCG-Guide75-BodyResolution-region = 56,98,268,375 @@ -31,9 +44,9 @@ AHLCG-Guide75-Page-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; AHLCG-Guide75-Portrait1-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Guide75-Portrait1-portrait-panx = 0 AHLCG-Guide75-Portrait1-portrait-pany = 0 -AHLCG-Guide75-Portrait1-portrait-clip-region = 65,65,993,1000 +AHLCG-Guide75-Portrait1-portrait-clip-region = 65,65,995,995 AHLCG-Guide75-Portrait2-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Guide75-Portrait2-portrait-panx = 0 AHLCG-Guide75-Portrait2-portrait-pany = 0 -AHLCG-Guide75-Portrait2-portrait-clip-region = 65,65,993,1000 +AHLCG-Guide75-Portrait2-portrait-clip-region = 65,65,995,995 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideA4.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideA4.settings index be060c8..a675b99 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideA4.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideA4.settings @@ -1,24 +1,36 @@ AHLCG-GuideA4-Default-template = ArkhamHorrorLCG/templates/AHLCG-GuideA4Empty.jp2 AHLCG-GuideA4-Name-region = 375,312,490,46 -AHLCG-GuideA4-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #FFFFFF - -#AHLCG-GuideA4-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #492925 -#AHLCG-GuideA4-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #3d534e -#AHLCG-Guide75-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #7e0607 -AHLCG-GuideA4-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #63251d -AHLCG-GuideA4-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #2d5b58 -AHLCG-GuideA4-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #7e0607 +AHLCG-GuideA4-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20.0; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #FFFFFF + +AHLCG-GuideA4-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #63251d +AHLCG-GuideA4-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #2d5b58 +AHLCG-GuideA4-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #7e0607 AHLCG-GuideA4-Header-alignment = center -AHLCG-GuideA4-Body-region = 65,65,1109,1624 -AHLCG-GuideA4-BodyLeftTitle-region = 65,417,537,1272 -AHLCG-GuideA4-BodyRightTitle-region = 637,417,537,1272 -AHLCG-GuideA4-BodyLeftEmpty-region = 65,65,537,1624 -AHLCG-GuideA4-BodyRightEmpty-region = 637,65,537,1624 +AHLCG-GuideA4-Label-region = 415, 268, 408, 36 +AHLCG-GuideA4-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 18.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.01; TRACKING: 0.01; FOREGROUND: #FFFFFF + +#AHLCG-GuideA4-Body-region = 65,65,1110,1624 +#AHLCG-GuideA4-BodyLeftTitle-region = 65,417,537,1272 +#AHLCG-GuideA4-BodyRightTitle-region = 637,417,537,1272 +#AHLCG-GuideA4-BodyLeftEmpty-region = 65,65,537,1624 +#AHLCG-GuideA4-BodyRightEmpty-region = 637,65,537,1624 +# portraits will be based on this +AHLCG-GuideA4-Body-region = 70,65,1094,1624 +# text columns are based on these +AHLCG-GuideA4-BodyLeftTitle-region = 70,417,537,1277 +AHLCG-GuideA4-BodyRightTitle-region = 630,417,537,1277 +AHLCG-GuideA4-BodyLeftEmpty-region = 70,65,537,1624 +AHLCG-GuideA4-BodyRightEmpty-region = 630,65,537,1624 AHLCG-GuideA4-Body-alignment = left, top -AHLCG-GuideA4-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.06}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.00; FOREGROUND: #000000 -AHLCG-GuideA4-Body-tightness = 1.65 +#AHLCG-GuideA4-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.06}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: 1.00; FOREGROUND: #000000 +AHLCG-GuideA4-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.10}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; FOREGROUND: #000000 +#AHLCG-GuideA4-Body-tightness = 1.65 +#AHLCG-GuideA4-Body-tightness = 0.6 +#TNRAHLCG-GuideA4-Body-tightness = 0.7 +AHLCG-GuideA4-Body-tightness = 1.0 + AHLCG-GuideA4-BodySection-tightness = 1.0 AHLCG-GuideA4-BodyName-region = 56,83,268,390 AHLCG-GuideA4-BodyResolution-region = 56,98,268,375 @@ -34,9 +46,9 @@ AHLCG-GuideA4-Page-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; AHLCG-GuideA4-Portrait1-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-GuideA4-Portrait1-portrait-panx = 0 AHLCG-GuideA4-Portrait1-portrait-pany = 0 -AHLCG-GuideA4-Portrait1-portrait-clip-region = 65,65,1109,1629 +AHLCG-GuideA4-Portrait1-portrait-clip-region = 65,65,1110,1624 AHLCG-GuideA4-Portrait2-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-GuideA4-Portrait2-portrait-panx = 0 AHLCG-GuideA4-Portrait2-portrait-pany = 0 -AHLCG-GuideA4-Portrait2-portrait-clip-region = 65,65,1109,1629 +AHLCG-GuideA4-Portrait2-portrait-clip-region = 65,65,1110,1624 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideLetter.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideLetter.settings new file mode 100644 index 0000000..da032d3 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-GuideLetter.settings @@ -0,0 +1,45 @@ +AHLCG-GuideLetter-Default-template = ArkhamHorrorLCG/templates/AHLCG-GuideLetterEmpty.jp2 + +AHLCG-GuideLetter-Name-region = 392,276,490,46 +AHLCG-GuideLetter-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20.0; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #FFFFFF + +AHLCG-GuideLetter-ResHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #63251d +AHLCG-GuideLetter-SAHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #2d5b58 +AHLCG-GuideLetter-KeyHeader-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.1; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #7e0607 +AHLCG-GuideLetter-Header-alignment = center + +AHLCG-GuideLetter-Label-region = 447, 316, 382, 37 +AHLCG-GuideLetter-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 16.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.04; TRACKING: 0.01; FOREGROUND: #FFFFFF + +# portraits will be based on this +AHLCG-GuideLetter-Body-region = 70,80,1129,1520 +# text columns are based on these +AHLCG-GuideLetter-BodyLeftTitle-region = 82,417,537,1173 +AHLCG-GuideLetter-BodyRightTitle-region = 653,417,537,1173 +AHLCG-GuideLetter-BodyLeftEmpty-region = 82,80,537,1520 +AHLCG-GuideLetter-BodyRightEmpty-region = 653,80,537,1520 +AHLCG-GuideLetter-Body-alignment = left, top +AHLCG-GuideLetter-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.10}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; FOREGROUND: #000000 +AHLCG-GuideLetter-Body-tightness = 1.0 + +AHLCG-GuideLetter-BodySection-tightness = 1.0 +AHLCG-GuideLetter-BodyName-region = 73,83,268,390 +AHLCG-GuideLetter-BodyResolution-region = 73,98,268,375 + +AHLCG-GuideLetter-ResBullet-style = FOREGROUND: #492925 +AHLCG-GuideLetter-SABullet-style = FOREGROUND: #3d534e + +AHLCG-GuideLetter-PageOdd-region = 621,1600,30,32 +AHLCG-GuideLetter-PageEven-region = 623,1600,30,32 +AHLCG-GuideLetter-Page-alignment = center, middle +AHLCG-GuideLetter-Page-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 12.0; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 + +AHLCG-GuideLetter-Portrait1-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-GuideLetter-Portrait1-portrait-panx = 0 +AHLCG-GuideLetter-Portrait1-portrait-pany = 0 +AHLCG-GuideLetter-Portrait1-portrait-clip-region = 65,65,1110,1520 + +AHLCG-GuideLetter-Portrait2-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-GuideLetter-Portrait2-portrait-panx = 0 +AHLCG-GuideLetter-Portrait2-portrait-pany = 0 +AHLCG-GuideLetter-Portrait2-portrait-clip-region = 65,65,1110,1520 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Investigator.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Investigator.settings index 3d4c956..95a679d 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Investigator.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Investigator.settings @@ -1,101 +1,99 @@ AHLCG-Investigator-Default-template = ArkhamHorrorLCG/templates/AHLCG-Investigator-G.jp2 AHLCG-InvestigatorBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-G.jp2 -AHLCG-Investigator-Name-region = 48,9,212,27 -AHLCG-Investigator-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.2; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.00; FOREGROUND: #000000 -AHLCG-Investigator-ParallelName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.2; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.00; FOREGROUND: #FFFFFF -AHLCG-Investigator-SubtitleTextG-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextGP-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextK-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextKP-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextR-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextRP-region = 73,38,175,20 -AHLCG-Investigator-SubtitleTextM-region = 73,40,175,20 -AHLCG-Investigator-SubtitleTextMP-region = 73,40,175,20 -AHLCG-Investigator-SubtitleTextV-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextN-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextW-region = 73,39,175,20 -AHLCG-Investigator-SubtitleTextT-region = 73,39,175,20 -AHLCG-Investigator-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.0; FOREGROUND: #000000 -AHLCG-Investigator-ParallelSubtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.0; FOREGROUND: #FFFFFF +AHLCG-Investigator-Name-region = 48,11,212,27 +AHLCG-Investigator-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-Investigator-ParallelName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.05; FOREGROUND: #FFFFFF +AHLCG-Investigator-SubtitleTextG-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextGP-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextK-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextKP-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextR-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextRP-region = 72,38,175,20 +AHLCG-Investigator-SubtitleTextM-region = 72,40,175,20 +AHLCG-Investigator-SubtitleTextMP-region = 72,40,175,20 +AHLCG-Investigator-SubtitleTextV-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextVP-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextN-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextNP-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextS-region = 72,41,175,20 +AHLCG-Investigator-SubtitleTextW-region = 72,39,175,20 +AHLCG-Investigator-SubtitleTextT-region = 72,39,175,20 +AHLCG-Investigator-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.subtitleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.1}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtitleWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtitleTracking}; FOREGROUND: #000000 +AHLCG-Investigator-ParallelSubtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.subtitleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.1}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtitleWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtitleTracking}; FOREGROUND: #FFFFFF AHLCG-Investigator-Subtitle-alignment = center, middle -AHLCG-InvestigatorBack-Name-region = 248,6,246,29 -AHLCG-InvestigatorBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.10; FOREGROUND: #000000 -AHLCG-InvestigatorBack-ParallelName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.10; FOREGROUND: #FFFFFF -AHLCG-InvestigatorBack-SubtitleTextG-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextGP-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextK-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextKP-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextR-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextRP-region = 297,40,159,15 -AHLCG-InvestigatorBack-SubtitleTextM-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextMP-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextV-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextN-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextW-region = 297,41,159,15 -AHLCG-InvestigatorBack-SubtitleTextT-region = 297,41,159,15 -AHLCG-InvestigatorBack-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.05}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.95; FOREGROUND: #000000 -AHLCG-InvestigatorBack-ParallelSubtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.05}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.95; FOREGROUND: #FFFFFF +AHLCG-InvestigatorBack-Name-region = 248,9,246,29 +AHLCG-InvestigatorBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.05; FOREGROUND: #000000 +AHLCG-InvestigatorBack-ParallelName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.05; FOREGROUND: #FFFFFF +AHLCG-InvestigatorBack-SubtitleTextG-region = 298,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextGP-region = 298,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextK-region = 299,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextKP-region = 299,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextR-region = 298,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextRP-region = 298,40,159,15 +AHLCG-InvestigatorBack-SubtitleTextM-region = 296,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextMP-region = 296,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextV-region = 294,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextVP-region = 294,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextN-region = 296,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextNP-region = 296,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextS-region = 296,43,159,15 +AHLCG-InvestigatorBack-SubtitleTextW-region = 298,41,159,15 +AHLCG-InvestigatorBack-SubtitleTextT-region = 298,41,159,15 +AHLCG-InvestigatorBack-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.subtitleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.1}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtitleWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtitleTracking}; FOREGROUND: #000000 +AHLCG-InvestigatorBack-ParallelSubtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.subtitleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize*1.1}; WEIGHT: {Eons.namedObjects.AHLCGObject.subtitleWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.subtitleWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.subtitleTracking}; FOREGROUND: #FFFFFF AHLCG-InvestigatorBack-Subtitle-alignment = center, middle -AHLCG-Willpower-region = 291,19,16,22 -AHLCG-Intellect-region = 351,19,16,22 -AHLCG-Combat-region = 412,19,16,22 -AHLCG-Agility-region = 473,19,16,22 - -AHLCG-Skill-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 11.5; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-ParallelSkill-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 11.5; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF -AHLCG-Skill-alignment = center, middle - -AHLCG-Investigator-Stamina-region = 366,306,31,40 -AHLCG-Investigator-Sanity-region = 414,310,43,35 - -AHLCG-Investigator-Body-region = 307,81,200,217 -AHLCG-Investigator-Body-alignment = left -AHLCG-Investigator-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.0; FOREGROUND: #000000 -AHLCG-Investigator-Body-tightness = 1.0 +AHLCG-Investigator-Body-region = 307,80,200,218 +AHLCG-Investigator-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +#AHLCG-Investigator-Body-tightness = 0.6 AHLCG-InvestigatorBack-Body-region = 30,79,470,273 -AHLCG-InvestigatorBack-Body-alignment = left -AHLCG-InvestigatorBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 1.0; FOREGROUND: #000000 -AHLCG-InvestigatorBack-Body-tightness = 1.1 +AHLCG-InvestigatorBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 AHLCG-Investigator-TransparentPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Investigator-TransparentPortrait-portrait-pany = 0 - AHLCG-Investigator-TransparentPortrait-portrait-clip-region = 0,60,278,315 AHLCG-InvestigatorBack-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-InvestigatorBack-Portrait-portrait-pany = 0 AHLCG-InvestigatorBack-Portrait-portrait-rotation = 354 AHLCG-InvestigatorBack-Portrait-portrait-scale = 0.65 - AHLCG-InvestigatorBack-Portrait-portrait-clip-region = 1,-2,188,206 -AHLCG-Investigator-Artist-region = 288,363,102,10 -AHLCG-Investigator-Copyright-region = 376,363,80,10 -AHLCG-Investigator-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF +AHLCG-Investigator-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Investigator-EncounterPortrait-portrait-pany = 0 +AHLCG-Investigator-DefaultEncounter-portrait-clip-region = 16,17,28,28 +AHLCG-Investigator-Encounter-portrait-clip-region = 16,17,28,28 +AHLCG-Investigator-DefaultReturnEncounter-portrait-clip-region = 16,17,33,33 +AHLCG-Investigator-ReturnEncounter-portrait-clip-region = 16,17,33,33 + +AHLCG-InvestigatorBack-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-InvestigatorBack-EncounterPortrait-portrait-pany = 0 +AHLCG-InvestigatorBack-DefaultEncounter-portrait-clip-region = 231,15,28,28 +AHLCG-InvestigatorBack-Encounter-portrait-clip-region = 231,13,28,28 +AHLCG-InvestigatorBack-DefaultReturnEncounter-portrait-clip-region = 228,9,33,33 +AHLCG-InvestigatorBack-ReturnEncounter-portrait-clip-region = 228,11,33,33 AHLCG-Investigator-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Investigator-Collection-portrait-pany = 0 - AHLCG-Investigator-DefaultCollection-portrait-clip-region = 476,360,13,13 AHLCG-Investigator-Collection-portrait-clip-region = 476,360,13,13 -AHLCG-Investigator-CollectionNumber-region = 472,363,37,10 +AHLCG-Willpower-region = 291,19,16,22 +AHLCG-Intellect-region = 351,19,16,22 +AHLCG-Combat-region = 412,19,16,22 +AHLCG-Agility-region = 473,19,16,22 -AHLCG-Investigator-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-Investigator-EncounterPortrait-portrait-pany = 0 +AHLCG-Skill-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 11.0; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-ParallelSkill-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 11.0; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #FFFFFF +AHLCG-Skill-alignment = center, middle -AHLCG-Investigator-DefaultEncounter-portrait-clip-region = 11,12,28,28 -AHLCG-Investigator-Encounter-portrait-clip-region = 11,12,28,28 -AHLCG-Investigator-DefaultReturnEncounter-portrait-clip-region = 8,8,33,33 -AHLCG-Investigator-ReturnEncounter-portrait-clip-region = 8,8,33,33 +AHLCG-Investigator-Stamina-region = 366,306,31,40 +AHLCG-Investigator-Sanity-region = 414,310,43,35 -AHLCG-InvestigatorBack-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-InvestigatorBack-EncounterPortrait-portrait-pany = 0 +AHLCG-Investigator-Artist-region = 288,363,102,10 +AHLCG-Investigator-Copyright-region = 376,363,80,10 -AHLCG-InvestigatorBack-DefaultEncounter-portrait-clip-region = 231,15,28,28 -AHLCG-InvestigatorBack-Encounter-portrait-clip-region = 231,15,28,28 -AHLCG-InvestigatorBack-DefaultReturnEncounter-portrait-clip-region = 228,11,33,33 -AHLCG-InvestigatorBack-ReturnEncounter-portrait-clip-region = 228,11,33,33 +AHLCG-Investigator-CollectionNumber-region = 472,363,37,10 +AHLCG-Investigator-EncounterNumber-region = 422,363,37,10 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Key.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Key.settings new file mode 100644 index 0000000..be0ba5f --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Key.settings @@ -0,0 +1,46 @@ +AHLCG-Key-Default-template = ArkhamHorrorLCG/templates/AHLCG-Asset-G.jp2 +AHLCG-KeyBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-Asset-G.jp2 + +AHLCG-Key-Name-region = 65,461,238,29 +AHLCG-Key-Subtype-region = 83,301,203,15 +AHLCG-Key-Label-region = 326,51,38,14 +AHLCG-KeyBack-Name-region = 65,461,238,29 +AHLCG-KeyBack-Subtype-region = 83,301,203,15 +AHLCG-KeyBack-Label-region = 326,51,38,14 + +AHLCG-Key-SubtitleText-region = 80,492,213,22 +AHLCG-KeyBack-SubtitleText-region = 80,492,213,22 + +AHLCG-Key-Body-region = 14,312,348,140 +AHLCG-Key-Body-alignment = left + +AHLCG-Key-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-Key-Portrait-portrait-pany = 0 +AHLCG-Key-Portrait-portrait-clip-region = 10,40,358,258 + +AHLCG-KeyBack-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-KeyBack-BackPortrait-portrait-pany = 0 +AHLCG-KeyBack-BackPortrait-portrait-clip-region = 10,40,358,258 +AHLCG-KeyBack-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-KeyBack-BackPortrait-portrait-pany = 0 +AHLCG-KeyBack-BackPortrait-portrait-clip-region = 10,40,358,258 + +AHLCG-Key-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Key-Collection-portrait-pany = 0 +AHLCG-Key-Collection-portrait-clip-region = 320,512,13,13 +AHLCG-Key-DefaultCollection-portrait-clip-region = 320,512,13,13 + +AHLCG-Key-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Key-Encounter-portrait-pany = 0 +AHLCG-Key-Encounter-portrait-clip-region = 330,11,30,30 +AHLCG-Key-DefaultEncounter-portrait-clip-region = 330,11,30,30 +AHLCG-Key-ReturnEncounter-portrait-clip-region = 328,9,32,32 +AHLCG-Key-DefaultReturnEncounter-portrait-clip-region = 328,9,32,32 + +AHLCG-Key-Artist-region = 14,516,121,10 +AHLCG-Key-Copyright-region = 124,516,86,10 + +AHLCG-Key-CollectionNumber-region = 318,516,37,10 +AHLCG-Key-EncounterNumber-region = 247,516,55,10 + +AHLCG-Key-Dash-tint = 0.0, 0.0, 1.0 \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Location.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Location.settings index 6a45069..a3b39d3 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Location.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Location.settings @@ -1,35 +1,23 @@ AHLCG-Location-Default-template = ArkhamHorrorLCG/templates/AHLCG-Location.jp2 AHLCG-LocationBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2 +AHLCG-Location-Name-region = 65,4,242,29 +AHLCG-Location-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 AHLCG-Location-Label-region = 138,278,100,14 -AHLCG-Location-Label-alignment = center, middle -AHLCG-Location-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.9}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.05; FOREGROUND: #000000 -AHLCG-LocationBack-Label-region = 138,278,100,14 -AHLCG-LocationBack-Label-alignment = center, middle -AHLCG-LocationBack-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.9}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.05; FOREGROUND: #000000 - -AHLCG-Location-Name-region = 65,3,242,29 -AHLCG-Location-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 0.99; FOREGROUND: #000000 -AHLCG-LocationBack-Name-region = 65,3,242,29 -AHLCG-LocationBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.5; WEIGHT: WEIGHT_REGULAR; WIDTH: 0.99; FOREGROUND: #000000 - +AHLCG-Location-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 AHLCG-Location-SubtitleText-region = 95,36,191,21 -AHLCG-Location-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.95; FOREGROUND: #000000 -AHLCG-Location-Subtitle-alignment = center, middle +AHLCG-LocationBack-Name-region = 65,4,242,29 +AHLCG-LocationBack-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +AHLCG-LocationBack-Label-region = 138,278,100,14 +AHLCG-LocationBack-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 AHLCG-LocationBack-SubtitleText-region = 95,36,191,21 -AHLCG-LocationBack-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtitleSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.95; FOREGROUND: #000000 -AHLCG-LocationBack-Subtitle-alignment = center, middle + +AHLCG-Location-EncounterOverlay-region = 163, 234, 50, 50 +AHLCG-LocationBack-EncounterOverlay-region = 163, 234, 50, 50 AHLCG-Location-Body-region = 20,300,336,143 -AHLCG-Location-Body-alignment = left -AHLCG-Location-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-Location-Body-tightness = 1.0 AHLCG-LocationBack-Body-region = 20,300,336,143 -AHLCG-LocationBack-Body-alignment = left -AHLCG-LocationBack-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 - -AHLCG-BaseIcon-region = 9,1,47,46 AHLCG-Location-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Location-Portrait-portrait-pany = 0 @@ -43,6 +31,22 @@ AHLCG-Location-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portrait AHLCG-Location-BackPortrait-portrait-pany = 0 AHLCG-Location-BackPortrait-portrait-clip-region = 0,42,375,275 +AHLCG-Location-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Location-Encounter-portrait-pany = 0 +AHLCG-Location-Encounter-portrait-clip-region = 174,245,28,28 +AHLCG-Location-ReturnEncounter-portrait-clip-region = 170,241,37,34 + +AHLCG-LocationBack-Encounter-portrait-clip-region = 174,245,28,28 +AHLCG-LocationBack-ReturnEncounter-portrait-clip-region = 170,241,37,34 + +AHLCG-Location-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Location-Collection-portrait-pany = 0 +AHLCG-Location-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-Location-Collection-portrait-clip-region = 320,510,13,13 + +AHLCG-LocationBack-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-LocationBack-Collection-portrait-clip-region = 320,510,13,13 + AHLCG-LocationIcon-region = 14,6,36,35 AHLCG-Connection1Icon-region = 67,467,35,35 AHLCG-Connection2Icon-region = 108,459,35,35 @@ -51,30 +55,22 @@ AHLCG-Connection4Icon-region = 191,456,34,34 AHLCG-Connection5Icon-region = 232,459,35,35 AHLCG-Connection6Icon-region = 273,467,35,35 -AHLCG-Location-Shroud-region = 11,251,49,49 +AHLCG-Location-Shroud-region = 11,251,49,50 +AHLCG-Location-ShroudPerInv-region = 4,251,49,49 +AHLCG-Location-ShroudPerInvIcon-region = 31,250,29,49 AHLCG-Location-Clues-region = 318,251,49,50 AHLCG-Location-CluesPerInv-region = 311,251,49,49 -AHLCG-Location-PerInv-region = 338,254,30,45 +#AHLCG-Location-CluesPerInvIcon-region = 338,254,30,45 +AHLCG-Location-CluesPerInvIcon-region = 338,250,29,49 AHLCG-Location-Victory-region = 262,418,104,42 AHLCG-Location-Victory-alignment = right, bottom AHLCG-Location-Victory-tightness = 0.7 -AHLCG-Location-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-Location-Collection-portrait-pany = 0 - -AHLCG-Location-DefaultCollection-portrait-clip-region = 320,510,13,13 -AHLCG-Location-Collection-portrait-clip-region = 320,510,13,13 -AHLCG-LocationBack-DefaultCollection-portrait-clip-region = 320,510,13,13 -AHLCG-LocationBack-Collection-portrait-clip-region = 320,510,13,13 - -AHLCG-Location-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-Location-Encounter-portrait-pany = 0 - -AHLCG-Location-Encounter-portrait-clip-region = 174,245,28,28 -AHLCG-LocationBack-Encounter-portrait-clip-region = 174,245,28,28 -AHLCG-Location-ReturnEncounter-portrait-clip-region = 170,241,37,34 -AHLCG-LocationBack-ReturnEncounter-portrait-clip-region = 170,241,37,34 +AHLCG-BaseIcon-region = 9,1,47,46 AHLCG-Location-Copyright-region = 143,513,86,10 AHLCG-LocationBack-Copyright-region = 128,513,86,10 + +# -1 value means inverted color png +AHLCG-Location-Dash-tint = 38.0, 0.14, -1.0 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-MiniInvestigator.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-MiniInvestigator.settings index 2c4f541..d6c4804 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-MiniInvestigator.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-MiniInvestigator.settings @@ -2,13 +2,13 @@ AHLCG-MiniInvestigator-Default-template = ArkhamHorrorLCG/templates/AHLCG-MiniIn AHLCG-MiniInvestigatorBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-MiniInvestigator.jp2 AHLCG-MiniInvestigator-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 - AHLCG-MiniInvestigator-Portrait-portrait-pany = 0 AHLCG-MiniInvestigator-Portrait-portrait-panx = 0 AHLCG-MiniInvestigator-Portrait-portrait-clip-region = 0,0,244,375 AHLCG-MiniInvestigator-GreyscalePortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 - AHLCG-MiniInvestigator-GreyscalePortrait-portrait-pany = 0 AHLCG-MiniInvestigator-GreyscalePortrait-portrait-panx = 0 AHLCG-MiniInvestigator-GreyscalePortrait-portrait-clip-region = 0,0,244,375 + +AHLCG-MiniInvestigator-Artist-region = 0,363,244,10 \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-PackCover.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-PackCover.settings new file mode 100644 index 0000000..262fb4b --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-PackCover.settings @@ -0,0 +1,12 @@ +AHLCG-PackCover-Default-template = ArkhamHorrorLCG/templates/AHLCG-PackCover.png + +AHLCG-PackCover-Name-region = 428,1347,716,94 +AHLCG-PackCover-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 40; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING:{Eons.namedObjects.AHLCGObject.titleFontTracking};FOREGROUND: #FFFFFF +AHLCG-PackCover-Name-alignment = center, middle +AHLCG-PackCover-Name-tightness = 0.2 + +AHLCG-PackCover-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-PackCover-Portrait = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-PackCover-Portrait-portrait-pany = 0 +AHLCG-PackCover-Portrait-portrait-clip-region = 410,666,750,650 +AHLCG-PackCover-Tint-region = 0, 0, 2399, 1799 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Scenario.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Scenario.settings index 0566154..f78fac3 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Scenario.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Scenario.settings @@ -1,33 +1,42 @@ AHLCG-Scenario-Default-template = ArkhamHorrorLCG/templates/AHLCG-Scenario.jp2 AHLCG-ScenarioBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-Scenario.jp2 -AHLCG-Scenario-Name-region = 51,50,270,29 -AHLCG-Scenario-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 12.3; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #000000 +AHLCG-Scenario-Name-region = 51,43,270,43 +AHLCG-Scenario-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: {Eons.namedObjects.AHLCGObject.titleFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING: {Eons.namedObjects.AHLCGObject.titleFontTracking}; FOREGROUND: #000000 +AHLCG-Scenario-Name-tightness = 2.0 AHLCG-ScenarioBack-Name-region = 51,50,270,29 AHLCG-Scenario-Header-region = 105,53,170,35 -AHLCG-Scenario-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 10.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.07; FOREGROUND: #000000 +AHLCG-Scenario-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 10.0; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: 1.07; FOREGROUND: #000000 AHLCG-Scenario-Header-alignment = center AHLCG-Scenario-Body-region = 60,52,260,423 AHLCG-Scenario-Body-alignment = left, top -AHLCG-Scenario-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.03}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 -AHLCG-Scenario-Body-tightness = 1.05 -AHLCG-Scenario-BodyName-region = 60,87,260,388 +AHLCG-Scenario-BodyName-region = 60,89,260,388 AHLCG-Scenario-BodyResolution-region = 60,102,260,373 -AHLCG-Scenario-PageOdd-region = 179,479,20,32 -AHLCG-Scenario-PageEven-region = 179,479,20,32 -AHLCG-Scenario-Page-alignment = center, middle -AHLCG-Scenario-Page-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 8.1; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 - AHLCG-Scenario-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Scenario-Portrait-portrait-pany = 0 - AHLCG-Scenario-Portrait-portrait-clip-region = 0,0,375,525 AHLCG-Scenario-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Scenario-BackPortrait-portrait-pany = 0 - AHLCG-Scenario-BackPortrait-portrait-clip-region = 0,0,375,525 + +AHLCG-Scenario-PageOdd-region = 179,479,20,32 +AHLCG-Scenario-PageEven-region = 179,479,20,32 +AHLCG-Scenario-Page-alignment = center, middle +AHLCG-Scenario-Page-style = FAMILY: {Eons.namedObjects.AHLCGObject.skillFamily}; SIZE: 8.1; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 + +AHLCG-Scenario-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Scenario-Encounter-portrait-pany = 0 +AHLCG-Scenario-Encounter-portrait-clip-region = 308,27,36,36 +AHLCG-Scenario-DefaultEncounter-portrait-clip-region = 308,27,36,36 +AHLCG-Scenario-ReturnEncounter-portrait-clip-region = 302,23,49,48 +AHLCG-Scenario-DefaultReturnEncounter-portrait-clip-region = 301,20,49,48 + +AHLCG-Scenario-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Scenario-Collection-portrait-pany = 0 +AHLCG-Scenario-DefaultCollection-portrait-clip-region = 277,492,13,13 +AHLCG-Scenario-Collection-portrait-clip-region = 277,492,13,13 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Skill.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Skill.settings index 49c93a1..da3ccc4 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Skill.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Skill.settings @@ -1,37 +1,32 @@ AHLCG-Skill-Default-template = ArkhamHorrorLCG/templates/AHLCG-Skill-N.jp2 AHLCG-SkillBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 -AHLCG-Skill-Label-region = 21,62,38,14 -AHLCG-Skill-Label-alignment = center, middle -AHLCG-Skill-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.90; FOREGROUND: #000000 - -AHLCG-Skill-Name-region = 73,15,294,29 -AHLCG-Skill-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Skill-Name-region = 73,16,294,29 AHLCG-Skill-Name-alignment = left, middle - +AHLCG-Skill-Label-region = 21,62,38,14 AHLCG-Skill-Subtype-region = 86,348,203,15 -AHLCG-Skill-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 AHLCG-Skill-Subtype-alignment = center, middle AHLCG-Skill-Level-region = 14,35,49,23 AHLCG-Skill-NoLevel-region = 9,24,58,38 +AHLCG-Skill-StoryWeakness-region = 9,7,58,52 +AHLCG-Skill-StoryWeakness-Inner-region = 11,9,54,48 -AHLCG-Event-Body-region = 44,338,288,158 -AHLCG-Event-WeaknessBody-region = 44,352,288,143 - -AHLCG-Skill-Body-region = 37,352,301,144 -AHLCG-Skill-WeaknessBody-region = 37,370,301,125 -AHLCG-Skill-Body-alignment = left -AHLCG-Skill-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-Skill-Body-tightness = 1.0 +AHLCG-Skill-Body-region = 37,351,301,145 AHLCG-Skill-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Skill-Portrait-portrait-pany = 0 - AHLCG-Skill-Portrait-portrait-clip-region = 14,40,348,298 AHLCG-Skill-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Skill-Collection-portrait-pany = 0 +AHLCG-Skill-DefaultCollection-portrait-clip-region = 319,508,13,13 +AHLCG-Skill-Collection-portrait-clip-region = 319,508,13,13 + +AHLCG-Skill-BasicWeaknessSkill-region = 312,3,54,53 +AHLCG-Skill-BasicWeaknessIcon-region = 324,13,30,30 +AHLCG-Skill-WeaknessBody-region = 37,365,301,131 -AHLCG-Skill-DefaultCollection-portrait-clip-region = 319,510,13,13 -AHLCG-Skill-Collection-portrait-clip-region = 319,510,13,13 +AHLCG-Skill-Encounter-overlay-region = 311,3,55,55 +AHLCG-Skill-Encounter-portrait-clip-region = 324,12,30,30 +AHLCG-Skill-ReturnEncounter-portrait-clip-region = 324,12,30,30 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Story.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Story.settings index 6b94239..6c9250a 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Story.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Story.settings @@ -1,36 +1,26 @@ - -AHLCG-Story-Default-template = ArkhamHorrorLCG/templates/AHLCG-Enemy.jp2 +AHLCG-Story-Default-template = ArkhamHorrorLCG/templates/AHLCG-Story.jp2 AHLCG-StoryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-AssetStory.jp2 +#AHLCG-Story-Name-region = 38,31,254,31 +AHLCG-Story-Name-region = 38,24,254,44 +#AHLCG-Story-Name-alignment = center, middle AHLCG-Story-Label-region = 138,508,100,14 AHLCG-Story-Label-alignment = center, middle -AHLCG-Story-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.92}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.95; FOREGROUND: #000000 - -AHLCG-Story-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.2; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.09; FOREGROUND: #000000 -AHLCG-Story-Name-region = 38,31,254,31 -AHLCG-Story-Name-alignment = center, middle +AHLCG-Story-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.smallLabelSize*1.1}; WEIGHT: {Eons.namedObjects.AHLCGObject.smallLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.smallLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.smallLabelTracking}; FOREGROUND: #000000 -AHLCG-Story-Header-alignment = left -AHLCG-Story-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.02}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; WEIGHT: WEIGHT_BOLD; FOREGROUND: #000000 -AHLCG-Story-Header-tightness = 1.15 - -AHLCG-Story-Story-region = 51,107,290,389 +#indentedStoryBody +AHLCG-Story-Story-region = 51,107,290,385 AHLCG-Story-Story-alignment = left -AHLCG-Story-Story-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; POSTURE: OBLIQUE; FOREGROUND: #000000 -AHLCG-Story-Story-tightness = 1.15 - -AHLCG-Story-Body-region = 36,107,305,400 -AHLCG-Story-Body-alignment = left -AHLCG-Story-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontSpacing}; FOREGROUND: #000000 -AHLCG-Story-Body-tightness = 1.15 +AHLCG-Story-Story-style = FAMILY: {Eons.namedObjects.AHLCGObject.storyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyStorySize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyStoryWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyStoryWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyStoryTracking}; POSTURE: POSTURE_OBLIQUE; FOREGROUND: #000000 +AHLCG-Story-Story-tightness = 0.6 +AHLCG-Story-Body-region = 36,107,305,385 -AHLCG-Story-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 -AHLCG-Story-BackPortrait-portrait-pany = 0 -AHLCG-Story-BackPortrait-portrait-clip-region = 0,241,375,284 +#AHLCG-Story-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +#AHLCG-Story-BackPortrait-portrait-pany = 0 +#AHLCG-Story-BackPortrait-portrait-clip-region = 0,241,375,284 AHLCG-Story-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Story-Encounter-portrait-pany = 0 - AHLCG-Story-Encounter-portrait-clip-region = 308,27,36,36 AHLCG-Story-DefaultEncounter-portrait-clip-region = 308,27,36,36 AHLCG-Story-ReturnEncounter-portrait-clip-region = 302,23,49,48 @@ -38,22 +28,40 @@ AHLCG-Story-DefaultReturnEncounter-portrait-clip-region = 301,20,49,48 AHLCG-Story-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Story-Collection-portrait-pany = 0 - AHLCG-Story-DefaultCollection-portrait-clip-region = 277,492,13,13 AHLCG-Story-Collection-portrait-clip-region = 277,492,13,13 -AHLCG-StoryBack-DefaultCollection-portrait-clip-region = 277,492,13,13 -AHLCG-StoryBack-Collection-portrait-clip-region = 277,492,13,13 -AHLCG-Story-Copyright-region = 70,495,86,10 -AHLCG-Story-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize*1.05}; WEIGHT: WEIGHT_BOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 -AHLCG-Story-Copyright-alignment = left, middle +AHLCG-Story-TrackerBox-region = 34,393,306,90 +AHLCG-Story-TrackerName-region = 46,397,280,20 +AHLCG-Story-TrackerName-alignment = center, middle +AHLCG-Story-TrackerName-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE:{Eons.namedObjects.AHLCGObject.titleFontSize*0.836}; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.02}; FOREGROUND: #000000 +AHLCG-Story-EncounterNumber-region = 204,495,55,10 +AHLCG-Story-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #000000 +#AHLCG-StoryChaos-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF AHLCG-Story-CollectionNumber-region = 269,495,37,10 -AHLCG-Story-CollectionNumber-alignment = right, middle -AHLCG-Story-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Story-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #000000 +#AHLCG-StoryChaos-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF -AHLCG-Story-EncounterNumber-region = 204,495,55,10 -AHLCG-Story-EncounterNumber-alignment = right, middle -AHLCG-Story-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 4.5; WEIGHT: WEIGHT_ULTRABOLD; WIDTH: WIDTH_REGULAR; FOREGROUND: #000000 +AHLCG-Story-Copyright-region = 70,495,86,10 +AHLCG-Story-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #000000 +#AHLCG-StoryChaos-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Story-Copyright-alignment = left, middle AHLCG-Story-Dash-tint = 38.0, 0.14, 1.0 + +# Chaos template story cards +AHLCG-StoryChaos-Header-region = 35,135,300,305 +#AHLCG-StoryChaos-Body-region = 95,156,240,305 + +AHLCG-StoryChaos-Body-region = 36,130,305,338 +AHLCG-StoryChaos-Story-region = 51,130,290,338 +AHLCG-StoryChaosFull-Body-region = 36,72,305,396 +AHLCG-StoryChaosFull-Story-region = 51,72,290,396 + +AHLCG-StoryChaos-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.victoryFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyVictoryWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-StoryChaos-Header-alignment = left +AHLCG-StoryChaos-Header-tightness = 0.6 +AHLCG-StoryChaosFull-Header-style = FAMILY: {Eons.namedObjects.AHLCGObject.victoryFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyVictoryWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #000000 +AHLCG-StoryChaosFull-Header-alignment = left +AHLCG-StoryChaosFull-Header-tightness = 0.6 \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Treachery.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Treachery.settings index e390e69..9fb9279 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Treachery.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Treachery.settings @@ -2,18 +2,11 @@ AHLCG-Treachery-Default-template = ArkhamHorrorLCG/templates/AHLCG-Treachery.jp2 AHLCG-TreacheryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2 AHLCG-TreacheryStoryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 -AHLCG-Treachery-Label-region = 137,286,104,14 -AHLCG-Treachery-Label-alignment = center, middle -AHLCG-Treachery-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.95}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.02; FOREGROUND: #000000 - AHLCG-Treachery-Name-region = 39,307,299,29 -AHLCG-Treachery-Name-alignment = center, middle -AHLCG-Treachery-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.10; FOREGROUND: #000000 +AHLCG-Treachery-Label-region = 137,286,104,14 +AHLCG-Treachery-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 AHLCG-Treachery-Body-region = 30,340,318,160 -AHLCG-Treachery-Body-alignment = left -AHLCG-Treachery-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 -AHLCG-Treachery-Body-tightness = 1.0 AHLCG-Treachery-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-Treachery-Portrait-portrait-pany = 0 @@ -25,12 +18,10 @@ AHLCG-Treachery-BackPortrait-portrait-clip-region = 17,0,344,298 AHLCG-Treachery-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Treachery-Encounter-portrait-pany = 0 - AHLCG-Treachery-Encounter-portrait-clip-region = 175,254,28,28 AHLCG-Treachery-ReturnEncounter-portrait-clip-region = 171,250,36,33 AHLCG-Treachery-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-Treachery-Collection-portrait-pany = 0 - AHLCG-Treachery-DefaultCollection-portrait-clip-region = 320,510,13,13 AHLCG-Treachery-Collection-portrait-clip-region = 320,510,13,13 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-TreacheryLocation.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-TreacheryLocation.settings new file mode 100644 index 0000000..820ab50 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-TreacheryLocation.settings @@ -0,0 +1,34 @@ +AHLCG-TreacheryLocation-Default-template = ArkhamHorrorLCG/templates/AHLCG-TreacheryLocation.jp2 +AHLCG-TreacheryLocationBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-EncounterBack.jp2 +AHLCG-TreacheryLocationStoryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 + +AHLCG-TreacheryLocation-Name-region = 39,307,299,29 +AHLCG-TreacheryLocation-Label-region = 137,286,104,14 +AHLCG-TreacheryLocation-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 + +AHLCG-TreacheryLocation-Body-region = 30,340,318,160 + +AHLCG-TreacheryLocation-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-TreacheryLocation-Portrait-portrait-pany = 0 +AHLCG-TreacheryLocation-Portrait-portrait-clip-region = 17,0,344,298 + +AHLCG-TreacheryLocation-BackPortrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 +AHLCG-TreacheryLocation-BackPortrait-portrait-pany = 0 +AHLCG-TreacheryLocation-BackPortrait-portrait-clip-region = 17,0,344,298 + +AHLCG-TreacheryLocation-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-TreacheryLocation-Encounter-portrait-pany = 0 +AHLCG-TreacheryLocation-Encounter-portrait-clip-region = 175,254,28,28 +AHLCG-TreacheryLocation-ReturnEncounter-portrait-clip-region = 171,250,36,33 + +AHLCG-TreacheryLocation-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-TreacheryLocation-Collection-portrait-pany = 0 +AHLCG-TreacheryLocation-DefaultCollection-portrait-clip-region = 320,510,13,13 +AHLCG-TreacheryLocation-Collection-portrait-clip-region = 320,510,13,13 + +AHLCG-TreacheryLocation-Shroud-region = 14,271,49,50 +AHLCG-TreacheryLocation-ShroudPerInv-region = 8,271,49,49 +AHLCG-TreacheryLocation-ShroudPerInvIcon-region = 35,270,29,49 +AHLCG-TreacheryLocation-Clues-region = 313,271,49,50 +AHLCG-TreacheryLocation-CluesPerInv-region = 306,271,49,49 +AHLCG-TreacheryLocation-CluesPerInvIcon-region = 333,270,29,49 \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Ultimatum.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Ultimatum.settings new file mode 100644 index 0000000..94babb6 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-Ultimatum.settings @@ -0,0 +1,50 @@ +AHLCG-Ultimatum-Default-template = ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Common.png +AHLCG-Ultimatum-Default-dpi = 290 +AHLCG-UltimatumBack-Default-template = ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Back.png + +AHLCG-Ultimatum-Name-region = 150,134,742,60 +AHLCG-Ultimatum-NameWithSubtitle-region = 190,104,642,60 +AHLCG-Ultimatum-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 20; WEIGHT: {Eons.namedObjects.AHLCGObject.titleFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.titleFontWidth*1.05}; TRACKING:{Eons.namedObjects.AHLCGObject.titleFontTracking};FOREGROUND: #FFFFFF +AHLCG-Ultimatum-Name-alignment = center, bottom +AHLCG-Ultimatum-Name-tightness = 0.2 + +AHLCG-Ultimatum-Body-region = 134,1060,750,320 +AHLCG-Ultimatum-Body-alignment = center, middle +AHLCG-Ultimatum-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #FFFFFF +AHLCG-Ultimatum-Body-tightness = 0.5 + +AHLCG-Ultimatum-Subtitle-region = 190,210,642,30 +AHLCG-Ultimatum-Subtitle-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 10; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth*1.05}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #FFFFFF; POSTURE: POSTURE_OBLIQUE +AHLCG-Ultimatum-Subtitle-alignment = center, bottom + +AHLCG-Ultimatum-Trait-region = 350,980,325,50 +AHLCG-Ultimatum-Trait-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: 12; WEIGHT: BOLD; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth*1.05}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #FFFFFF; POSTURE: POSTURE_OBLIQUE +AHLCG-Ultimatum-Trait-alignment = center, top + +AHLCG-Ultimatum-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Ultimatum-Encounter-portrait-pany = 0 +AHLCG-Ultimatum-Encounter-portrait-clip-region = 480,862,65,65 +AHLCG-Ultimatum-ReturnEncounter-portrait-clip-region = 480,862,65,65 + +AHLCG-Ultimatum-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Ultimatum-Collection-portrait-pany = 0 +AHLCG-Ultimatum-DefaultCollection-portrait-clip-region = 750,1400,13,13 +AHLCG-Ultimatum-Collection-portrait-clip-region = 750,1400,13,13 + +AHLCG-Ultimatum-Portrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-Ultimatum-Portrait-portrait-pany = 0 +AHLCG-Ultimatum-Portrait-portrait-clip-region = 0,230,1100,1024 + +AHLCG-Ultimatum-Text-region = 100,156,800,305 +AHLCG-Ultimatum-Text-alignment = center, middle +AHLCG-Ultimatum-Text-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.bodyFontWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.bodyFontWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.bodyFontTracking}; FOREGROUND: #FFFFFF + +AHLCG-Ultimatum-EncounterNumber-region = 800,1400,45,12 +AHLCG-Ultimatum-EncounterNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Ultimatum-CollectionNumber-region = 800,1400,45,12 +AHLCG-Ultimatum-CollectionNumber-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF + +AHLCG-Ultimatum-Copyright-region = 434,1400,150,12 +AHLCG-Ultimatum-Artist-region = 132,1400,200,12 +AHLCG-Ultimatum-Copyright-style = FAMILY: {Eons.namedObjects.AHLCGObject.collectionFamily}; SIZE: {Eons.namedObjects.AHLCGObject.collectionSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.collectionWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.collectionWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.collectionTracking}; FOREGROUND: #FFFFFF +AHLCG-Ultimatum-Copyright-alignment = left, bottom diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessEnemy.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessEnemy.settings index 20e11dd..ce55e19 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessEnemy.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessEnemy.settings @@ -1,59 +1,50 @@ AHLCG-WeaknessEnemy-Default-template = ArkhamHorrorLCG/templates/AHLCG-WeaknessEnemy.jp2 AHLCG-WeaknessEnemyBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 +#AHLCG-WeaknessEnemy-Name-region = 62,4,252,27 AHLCG-WeaknessEnemy-Label-region = 158,305,58,15 -AHLCG-WeaknessEnemy-Label-alignment = center, middle -AHLCG-WeaknessEnemy-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.95}; WEIGHT: WEIGHT_BOLD; WIDTH: 1.0; FOREGROUND: #000000 - -AHLCG-WeaknessEnemy-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.2; WEIGHT: WEIGHT_REGULAR; WIDTH: 1.05; FOREGROUND: #000000 -AHLCG-WeaknessEnemy-Name-alignment = center, middle -AHLCG-WeaknessEnemy-Name-region = 62,2,252,31 - +#AHLCG-WeaknessEnemy-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 AHLCG-WeaknessEnemy-Subtype-region = 40,31,293,20 -AHLCG-WeaknessEnemy-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 -AHLCG-WeaknessEnemy-Subtype-alignment = center, middle - -AHLCG-WeaknessEnemy-BasicWeaknessEnemy-region = 155,264,64,40 -AHLCG-WeaknessEnemy-PersonalWeaknessEnemy-region = 155,264,64,40 -AHLCG-WeaknessEnemy-BasicWeaknessIcon-region = 173,274,28,28 -AHLCG-WeaknessEnemy-Body-region = 20,103,338,165 -AHLCG-WeaknessEnemy-Body-alignment = left -AHLCG-WeaknessEnemy-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize*1.05}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.92; FOREGROUND: #000000 -AHLCG-WeaknessEnemy-Body-tightness = 1.0 +#AHLCG-WeaknessEnemy-Body-region = 20,103,338,165 AHLCG-WeaknessEnemy-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-WeaknessEnemy-Portrait-portrait-pany = 0 - AHLCG-WeaknessEnemy-Portrait-portrait-clip-region = 0,241,375,284 -AHLCG-WeaknessEnemy-Attack-region = 107,50,26,27 -AHLCG-WeaknessEnemy-Evade-region = 248,50,23,27 -AHLCG-WeaknessEnemy-Health-region = 178,45,20,35 -AHLCG-WeaknessEnemy-HealthPerInv-region = 169,45,27,35 -AHLCG-WeaknessEnemy-PerInv-region = 189, 55, 17, 17 - -AHLCG-WeaknessEnemy-Damage1-region = 132,282,19,23 -AHLCG-WeaknessEnemy-Damage2-region = 109,275,19,23 -AHLCG-WeaknessEnemy-Damage3-region = 86,265,19,23 -AHLCG-WeaknessEnemy-Damage4-region = 63,252,19,23 -AHLCG-WeaknessEnemy-Damage5-region = 43,238,19,23 -AHLCG-WeaknessEnemy-Horror1-region = 221,282,27,24 -AHLCG-WeaknessEnemy-Horror2-region = 244,275,27,24 -AHLCG-WeaknessEnemy-Horror3-region = 267,266,27,24 -AHLCG-WeaknessEnemy-Horror4-region = 290,252,27,24 -AHLCG-WeaknessEnemy-Horror5-region = 310,238,27,24 +AHLCG-WeaknessEnemy-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-WeaknessEnemy-EncounterPortrait-portrait-pany = 0 +AHLCG-WeaknessEnemy-Encounter-portrait-clip-region = 173,274,28,28 +AHLCG-WeaknessEnemy-DefaultEncounter-portrait-clip-region = 173,274,28,28 +AHLCG-WeaknessEnemy-ReturnEncounter-portrait-clip-region = 168,270,37,33 +AHLCG-WeaknessEnemy-DefaultReturnEncounter-portrait-clip-region = 168,270,37,33 AHLCG-WeaknessEnemy-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-WeaknessEnemy-Collection-portrait-pany = 0 - AHLCG-WeaknessEnemy-DefaultCollection-portrait-clip-region = 320,510,13,13 AHLCG-WeaknessEnemy-Collection-portrait-clip-region = 320,510,13,13 -AHLCG-WeaknessEnemy-EncounterPortrait-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-WeaknessEnemy-EncounterPortrait-portrait-pany = 0 +#AHLCG-WeaknessEnemy-Attack-region = 106,49,26,27 +#AHLCG-WeaknessEnemy-AttackPerInv-region = 102,49,24,27 +#AHLCG-WeaknessEnemy-AttackPerInvIcon-region = 121,54,14,14 +#AHLCG-WeaknessEnemy-Evade-region = 246,49,26,27 +#AHLCG-WeaknessEnemy-EvadePerInv-region = 242,49,24,27 +#AHLCG-WeaknessEnemy-EvadePerInvIcon-region = 261,54,14,14 +#AHLCG-WeaknessEnemy-Health-region = 168,44,40,35 +#AHLCG-WeaknessEnemy-HealthPerInv-region = 169,44,27,35 +#AHLCG-WeaknessEnemy-HealthPerInv-region = 191,52,17,17 + +#AHLCG-WeaknessEnemy-Damage1-region = 132,282,19,23 +#AHLCG-WeaknessEnemy-Damage2-region = 109,275,19,23 +#AHLCG-WeaknessEnemy-Damage3-region = 86,265,19,23 +#AHLCG-WeaknessEnemy-Damage4-region = 63,252,19,23 +#AHLCG-WeaknessEnemy-Damage5-region = 43,238,19,23 +#AHLCG-WeaknessEnemy-Horror1-region = 221,282,27,24 +#AHLCG-WeaknessEnemy-Horror2-region = 244,275,27,24 +#AHLCG-WeaknessEnemy-Horror3-region = 267,266,27,24 +#AHLCG-WeaknessEnemy-Horror4-region = 290,252,27,24 +#AHLCG-WeaknessEnemy-Horror5-region = 310,238,27,24 -AHLCG-WeaknessEnemy-Encounter-portrait-clip-region = 173,274,28,28 -AHLCG-WeaknessEnemy-DefaultEncounter-portrait-clip-region = 173,274,28,28 -AHLCG-WeaknessEnemy-ReturnEncounter-portrait-clip-region = 168,270,37,33 -AHLCG-WeaknessEnemy-DefaultReturnEncounter-portrait-clip-region = 168,270,37,33 +AHLCG-WeaknessEnemy-BasicWeaknessEnemy-region = 155,264,64,40 +AHLCG-WeaknessEnemy-PersonalWeaknessEnemy-region = 155,264,64,40 +AHLCG-WeaknessEnemy-BasicWeaknessIcon-region = 173,274,28,28 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessTreachery.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessTreachery.settings index 6984d5c..c9dca5c 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessTreachery.settings +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings/AHLCG-WeaknessTreachery.settings @@ -1,21 +1,12 @@ AHLCG-WeaknessTreachery-Default-template = ArkhamHorrorLCG/templates/AHLCG-WeaknessTreachery.jp2 AHLCG-WeaknessTreacheryBack-Default-template = ArkhamHorrorLCG/templates/AHLCG-PlayerBack.jp2 -AHLCG-WeaknessTreachery-Label-region = 137,285,104,14 -AHLCG-WeaknessTreachery-Label-alignment = center, middle -AHLCG-WeaknessTreachery-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize*0.95}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.98; FOREGROUND: #000000 - -AHLCG-WeaknessTreachery-Name-region = 39,305,299,29 -AHLCG-WeaknessTreachery-Name-style = FAMILY: {Eons.namedObjects.AHLCGObject.titleFamily}; SIZE: 11.0; WEIGHT: WEIGHT_REGULAR; WIDTH: 0.96; FOREGROUND: #000000 -AHLCG-WeaknessTreachery-Name-alignment = center, middle +#AHLCG-WeaknessTreachery-Name-region = 39,306,299,29 +#AHLCG-WeaknessTreachery-Label-region = 137,285,104,14 +#AHLCG-WeaknessTreachery-Label-style = FAMILY: {Eons.namedObjects.AHLCGObject.typeFamily}; SIZE: {Eons.namedObjects.AHLCGObject.largeLabelSize}; WEIGHT: {Eons.namedObjects.AHLCGObject.largeLabelWeight}; WIDTH: {Eons.namedObjects.AHLCGObject.largeLabelWidth}; TRACKING: {Eons.namedObjects.AHLCGObject.largeLabelTracking}; FOREGROUND: #000000 +AHLCG-WeaknessTreachery-Subtype-region = 88,335,200,17 AHLCG-WeaknessTreachery-Body-region = 29,357,318,145 -AHLCG-WeaknessTreachery-Body-alignment = left -AHLCG-WeaknessTreachery-Body-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.bodyFontSize}; WEIGHT: WEIGHT_MEDIUM; WIDTH: 0.98; FOREGROUND: #000000 - -AHLCG-WeaknessTreachery-Subtype-region = 88,335,200,17 -AHLCG-WeaknessTreachery-Subtype-alignment = center, middle -AHLCG-WeaknessTreachery-Subtype-style = FAMILY: {Eons.namedObjects.AHLCGObject.bodyFamily}; SIZE: {Eons.namedObjects.AHLCGObject.subtypeSize}; WEIGHT: WEIGHT_BOLD; WIDTH: 0.94; FOREGROUND: #000000 AHLCG-WeaknessTreachery-Portrait-portrait-template = ArkhamHorrorLCG/default-portraits/DefaultTexture.jp2 AHLCG-WeaknessTreachery-Portrait-portrait-pany = 0 @@ -25,18 +16,15 @@ AHLCG-WeaknessTreachery-BackPortrait-portrait-template = ArkhamHorrorLCG/default AHLCG-WeaknessTreachery-BackPortrait-portrait-pany = 0 AHLCG-WeaknessTreachery-BackPortrait-portrait-clip-region = 17,0,344,298 -AHLCG-WeaknessTreachery-BasicWeakness-region = 156,243,66,41 -AHLCG-WeaknessTreachery-BasicWeaknessIcon-region = 175,253,28,28 +AHLCG-WeaknessTreachery-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png +AHLCG-WeaknessTreachery-Encounter-portrait-pany = 0 +AHLCG-WeaknessTreachery-Encounter-portrait-clip-region = 175,254,28,28 +AHLCG-WeaknessTreachery-ReturnEncounter-portrait-clip-region = 171,250,36,33 AHLCG-WeaknessTreachery-Collection-portrait-template = ArkhamHorrorLCG/images/empty1x1.png AHLCG-WeaknessTreachery-Collection-portrait-pany = 0 - AHLCG-WeaknessTreachery-DefaultCollection-portrait-clip-region = 319,510,13,13 AHLCG-WeaknessTreachery-Collection-portrait-clip-region = 319,510,13,13 -AHLCG-WeaknessTreachery-Encounter-portrait-template = ArkhamHorrorLCG/images/empty1x1.png -AHLCG-WeaknessTreachery-Encounter-portrait-pany = 0 - -AHLCG-WeaknessTreachery-Encounter-portrait-clip-region = 175,254,28,28 -AHLCG-WeaknessTreachery-ReturnEncounter-portrait-clip-region = 171,250,36,33 - +AHLCG-WeaknessTreachery-BasicWeakness-region = 156,243,66,41 +AHLCG-WeaknessTreachery-BasicWeaknessIcon-region = 175,253,28,28 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Act.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Act.jp2 index 1a7fa56..6829cff 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Act.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Act.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front-hires.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front-hires.jp2 new file mode 100644 index 0000000..439a95c Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front-hires.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front.jp2 new file mode 100644 index 0000000..6890e67 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda-front.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 index 018c1d6..a525de1 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Agenda.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-P.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-P.jp2 new file mode 100644 index 0000000..6474877 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-P.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-W.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-W.jp2 index c970d3f..a51f52e 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-W.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Asset-W.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-AssetStory-W.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-AssetStory-W.jp2 index 2640ad5..60e4e10 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-AssetStory-W.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-AssetStory-W.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCover.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCover.png new file mode 100644 index 0000000..96374d3 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCover.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCoverTintable.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCoverTintable.png new file mode 100644 index 0000000..46cb68f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-BoxCoverTintable.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2 index aad645a..1da180b 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Chaos.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Concealed.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Concealed.jp2 new file mode 100644 index 0000000..ed10536 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Concealed.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedBack.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedBack.jp2 new file mode 100644 index 0000000..867e7a0 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedBack.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedDecoy.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedDecoy.jp2 new file mode 100644 index 0000000..0bb82d1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedDecoy.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedNamedDecoy.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedNamedDecoy.jp2 new file mode 100644 index 0000000..1a7aa0e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-ConcealedNamedDecoy.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Customizable.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Customizable.jp2 new file mode 100644 index 0000000..e7d5afc Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Customizable.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-CustomizableBack.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-CustomizableBack.jp2 new file mode 100644 index 0000000..ef7b837 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-CustomizableBack.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-EnemyLocation.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-EnemyLocation.jp2 new file mode 100644 index 0000000..727d313 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-EnemyLocation.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-D.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-D.jp2 new file mode 100644 index 0000000..2626ac1 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-D.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-P.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-P.jp2 new file mode 100644 index 0000000..84e519e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-P.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-S.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-S.jp2 new file mode 100644 index 0000000..da83261 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-S.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-SW.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-SW.jp2 new file mode 100644 index 0000000..7ed89a0 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Event-SW.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.jp2 index 36ee747..8d63123 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.png new file mode 100644 index 0000000..96510d3 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Guide75Title.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.jp2 index 3c3ed6f..8a5b996 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.png new file mode 100644 index 0000000..629b64e Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideA4Title.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterEmpty.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterEmpty.jp2 new file mode 100644 index 0000000..d086213 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterEmpty.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.jp2 new file mode 100644 index 0000000..8db8824 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.png new file mode 100644 index 0000000..bc00d85 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-GuideLetterTitle.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-NP.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-NP.jp2 new file mode 100644 index 0000000..44efb41 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-NP.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-S.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-S.jp2 index e6f2d28..bcf1586 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-S.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-S.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-VP.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-VP.jp2 new file mode 100644 index 0000000..c62fbeb Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Investigator-VP.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-NP.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-NP.jp2 new file mode 100644 index 0000000..380f278 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-NP.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-S.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-S.jp2 index 290b184..d373d0a 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-S.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-S.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-VP.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-VP.jp2 new file mode 100644 index 0000000..21e8c75 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-InvestigatorBack-VP.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Key.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Key.jp2 new file mode 100644 index 0000000..2cac1e9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Key.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-KeyBack.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-KeyBack.jp2 new file mode 100644 index 0000000..55f17d9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-KeyBack.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Location.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Location.jp2 index 64e410d..4247f21 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Location.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Location.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2 index ec33f50..ab9359e 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBack.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBackST.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBackST.jp2 index 436bd20..91f7ade 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBackST.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationBackST.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationST.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationST.jp2 index 4beda75..3c2a8eb 100644 Binary files a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationST.jp2 and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-LocationST.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCover.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCover.png new file mode 100644 index 0000000..eb07e39 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCover.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCoverTintable.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCoverTintable.png new file mode 100644 index 0000000..020f3f7 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-PackCoverTintable.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-P.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-P.jp2 new file mode 100644 index 0000000..8c1aa3f Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-P.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-S.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-S.jp2 new file mode 100644 index 0000000..feda6dd Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-S.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-SW.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-SW.jp2 new file mode 100644 index 0000000..cd3ea94 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-Skill-SW.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-StoryChaosFull.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-StoryChaosFull.jp2 new file mode 100644 index 0000000..4e98a59 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-StoryChaosFull.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-TreacheryLocation.jp2 b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-TreacheryLocation.jp2 new file mode 100644 index 0000000..0bcd03d Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/AHLCG-TreacheryLocation.jp2 differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Back.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Back.png new file mode 100644 index 0000000..7b0abc4 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Back.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Common.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Common.png new file mode 100644 index 0000000..d364204 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Common.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction-NoSet.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction-NoSet.png new file mode 100644 index 0000000..3c42ae9 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction-NoSet.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction.png new file mode 100644 index 0000000..950fc8a Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Boon-Refraction.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Back.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Back.png new file mode 100644 index 0000000..abe37ac Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Back.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Common.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Common.png new file mode 100644 index 0000000..8ff0f84 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Common.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction-NoSet.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction-NoSet.png new file mode 100644 index 0000000..bb86caa Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction-NoSet.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction.png b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction.png new file mode 100644 index 0000000..7839a29 Binary files /dev/null and b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/templates/ultimatums/Ultimatum-Refraction.png differ diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game.properties index 527c562..d232a40 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game.properties @@ -9,9 +9,14 @@ AHLCG-Label-Story = Story AHLCG-Label-Treachery = Treachery AHLCG-Label-Weakness = Weakness AHLCG-Label-BasicWeakness = Basic Weakness +AHLCG-Label-Customizable = Upgrades +AHLCG-Label-CampaignGuide = Campaign Guide +AHLCG-Label-Key = Key +AHLCG-Label-Ultimatum = Ultimatum AHLCG-IllustratorShort = Illus. -AHLCG-Resolution-tag = eR +AHLCG-Resolution-tag = eR +AHLCG-ResolutionSmall-tag = eR AHLCG-Scenario-Header = DO NOT READ\nuntil the end of the scenario AHLCG-Scenario-Header1 = DO NOT READ AHLCG-Scenario-Header2 = until the end of the scenario @@ -22,18 +27,18 @@ AHLCG-Difficulty-Front = EASY / STANDARD AHLCG-Difficulty-Back = HARD / EXPERT AHLCG-Difficulty-Unique = EASY/STANDARD/HARD/EXPERT -AHLCG-DeckSize-format = Deck Size\: +AHLCG-DeckSize-format = Deck Size\: AHLCG-DeckSize-formatEnd=. -AHLCG-SecondaryClass-format = Secondary Class Choice\: -AHLCG-DeckOptions-format = Deckbuilding Options\: -AHLCG-DeckRequirements-format = Deckbuilding Requirements (do not count toward deck size)\: -AHLCG-DeckRestrictions-format = Deckbuilding Restrictions\: -AHLCG-AdditionalRequirements-format = Additional Requirements: +AHLCG-SecondaryClass-format = Secondary Class Choice\: +AHLCG-DeckOptions-format = Deckbuilding Options\: +AHLCG-DeckRequirements-format = Deckbuilding Requirements (do not count toward deck size)\: +AHLCG-DeckRestrictions-format = Deckbuilding Restrictions\: +AHLCG-AdditionalRequirements-format = Additional Requirements: -AHLCG-Prey-tag = Prey -- -AHLCG-Spawn-tag = Spawn -- -AHLCG-Revelation-tag = Revelation -- -AHLCG-Forced-tag = Forced -- -AHLCG-Objective-tag = Objective -- -AHLCG-Haunted-tag = Haunted -- -AHLCG-Patrol-tag = Patrol -- \ No newline at end of file +AHLCG-Prey-tag = Prey -- +AHLCG-Spawn-tag = Spawn -- +AHLCG-Revelation-tag = Revelation -- +AHLCG-Forced-tag = Forced -- +AHLCG-Objective-tag = Objective -- +AHLCG-Haunted-tag = Haunted -- +AHLCG-Shift-tag = Shift -- diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_da.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_da.properties new file mode 100644 index 0000000..d232a40 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_da.properties @@ -0,0 +1,44 @@ +AHLCG-Label-Act = Act +AHLCG-Label-Agenda = Agenda +AHLCG-Label-Asset = Asset +AHLCG-Label-Enemy = Enemy +AHLCG-Label-Event = Event +AHLCG-Label-Location = Location +AHLCG-Label-Skill = Skill +AHLCG-Label-Story = Story +AHLCG-Label-Treachery = Treachery +AHLCG-Label-Weakness = Weakness +AHLCG-Label-BasicWeakness = Basic Weakness +AHLCG-Label-Customizable = Upgrades +AHLCG-Label-CampaignGuide = Campaign Guide +AHLCG-Label-Key = Key +AHLCG-Label-Ultimatum = Ultimatum + +AHLCG-IllustratorShort = Illus. +AHLCG-Resolution-tag = eR +AHLCG-ResolutionSmall-tag = eR +AHLCG-Scenario-Header = DO NOT READ\nuntil the end of the scenario +AHLCG-Scenario-Header1 = DO NOT READ +AHLCG-Scenario-Header2 = until the end of the scenario +AHLCG-Guide-Standalone = Standalone Mode +AHLCG-Guide-Keys = Keys + +AHLCG-Difficulty-Front = EASY / STANDARD +AHLCG-Difficulty-Back = HARD / EXPERT +AHLCG-Difficulty-Unique = EASY/STANDARD/HARD/EXPERT + +AHLCG-DeckSize-format = Deck Size\: +AHLCG-DeckSize-formatEnd=. +AHLCG-SecondaryClass-format = Secondary Class Choice\: +AHLCG-DeckOptions-format = Deckbuilding Options\: +AHLCG-DeckRequirements-format = Deckbuilding Requirements (do not count toward deck size)\: +AHLCG-DeckRestrictions-format = Deckbuilding Restrictions\: +AHLCG-AdditionalRequirements-format = Additional Requirements: + +AHLCG-Prey-tag = Prey -- +AHLCG-Spawn-tag = Spawn -- +AHLCG-Revelation-tag = Revelation -- +AHLCG-Forced-tag = Forced -- +AHLCG-Objective-tag = Objective -- +AHLCG-Haunted-tag = Haunted -- +AHLCG-Shift-tag = Shift -- diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_de.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_de.properties index fcd6771..218d502 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_de.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_de.properties @@ -1,33 +1,37 @@ -#AHLCG-Game_de.properties -#Fri Sep 14 20:56:16 CEST 2018 -AHLCG-Label-Enemy=Gegner -AHLCG-Label-Act=Szene -AHLCG-DeckRestrictions-format=Deckbau-Einschr\u00E4nkungen\: -AHLCG-Difficulty-Back=SCHWER / EXPERTE -AHLCG-Spawn-tag=Erscheinen -- -AHLCG-Objective-tag=Ermittlungsziel -- -AHLCG-Resolution-tag=eA -AHLCG-Label-Skill=Fertigkeit -AHLCG-Label-Asset=Vorteil -AHLCG-Label-BasicWeakness=Grundschw\u00E4che -AHLCG-DeckSize-formatEnd=\ -AHLCG-Difficulty-Front=EINFACH / NORMAL -AHLCG-Label-Location=Ort -AHLCG-Label-Agenda=Agenda -AHLCG-DeckOptions-format=Deckbau-Optionen\: -AHLCG-DeckRequirements-format=Deckbau-Voraussetzungen (z\u00E4hlen nicht gegen die Deckgr\u00F6\u00DFe)\: -AHLCG-DeckSize-format=Deckgr\u00F6\u00DFe\: -AHLCG-Label-Event=Ereignis -AHLCG-Label-Weakness=Schw\u00E4che -AHLCG-Label-Treachery=Verrat -AHLCG-Label-Story=Handlung -AHLCG-Scenario-Header2=Nicht vor Ende des Szenarios weiterlesen. -AHLCG-Scenario-Header1=Achtung\! -AHLCG-Forced-tag=Erzwungen -- -AHLCG-Scenario-Header=Achtung\!\nNicht vor Ende des Szenarios weiterlesen. -AHLCG-Prey-tag=Beute -- -AHLCG-Difficulty-Unique=EINFACH/NORMAL/SCHWER/EXPERTE -AHLCG-Revelation-tag=Enth\u00FCllung -- -AHLCG-AdditionalRequirements-format=Zus\u00E4tzliche Voraussetzungen\: -AHLCG-IllustratorShort=Illus. -AHLCG-Guide-Standalone=Einzelspielszenario +#AHLCG-Game_de.properties_added translations +#Mon Apr 03 18:46:30 CEST 2023 +AHLCG-Label-Enemy=Gegner +AHLCG-Label-CampaignGuide = Kampagnenleitfaden +AHLCG-Haunted-tag=Heimgesucht -- +AHLCG-Label-Act=Szene +AHLCG-DeckRestrictions-format=Deckbau-Einschr\u00e4nkungen\: +AHLCG-Difficulty-Back=SCHWER / EXPERTE +AHLCG-Guide-Keys=Schl\u00fcssel +AHLCG-Spawn-tag=Erscheinen -- +AHLCG-Objective-tag=Ermittlungsziel -- +AHLCG-SecondaryClass-format=Wahl der Sekund\u00e4rklasse\: +AHLCG-Resolution-tag=eA +AHLCG-Label-Skill=Fertigkeit +AHLCG-Label-Asset=Vorteil +AHLCG-Label-BasicWeakness=Grundschw\u00e4che +AHLCG-DeckSize-formatEnd=\ +AHLCG-Difficulty-Front=EINFACH / NORMAL +AHLCG-Label-Location=Ort +AHLCG-Label-Agenda=Agenda +AHLCG-DeckOptions-format=Deckbau-Optionen\: +AHLCG-DeckRequirements-format=Deckbau-Voraussetzungen (z\u00e4hlen nicht gegen die Deckgr\u00f6\u00dfe)\: +AHLCG-DeckSize-format=Deckgr\u00f6\u00dfe\: +AHLCG-Label-Event=Ereignis +AHLCG-Label-Weakness=Schw\u00e4che +AHLCG-Label-Treachery=Verrat +AHLCG-Label-Story=Handlung +AHLCG-Scenario-Header2=Nicht vor Ende des Szenarios weiterlesen. +AHLCG-Scenario-Header1=Achtung\! +AHLCG-Forced-tag=Erzwungen -- +AHLCG-Scenario-Header=Achtung\!\nNicht vor Ende des Szenarios weiterlesen. +AHLCG-Prey-tag=Beute -- +AHLCG-Difficulty-Unique=EINFACH/NORMAL/SCHWER/EXPERTE +AHLCG-Revelation-tag=Enth\u00fcllung -- +AHLCG-AdditionalRequirements-format=Zus\u00e4tzliche Voraussetzungen\: +AHLCG-IllustratorShort=Illus. +AHLCG-Guide-Standalone=Einzelspielszenario diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_es.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_es.properties index bd1ea04..e8dcbef 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_es.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_es.properties @@ -1,32 +1,37 @@ -#AHLCG-Game_es.properties -#Mon Nov 16 08:54:03 EST 2020 -AHLCG-Label-Enemy=Enemigo -AHLCG-Label-Act=Acto -AHLCG-DeckRestrictions-format=Restricciones de creaci\u00F3n de mazos\: -AHLCG-Difficulty-Back=DIF\u00CDCIL / EXPERTO -AHLCG-Spawn-tag=Apareci\u00F3n -- -AHLCG-Objective-tag=Objetivo -- -AHLCG-Label-Skill=Habilidad -AHLCG-Label-Asset=Apoyo -AHLCG-Label-BasicWeakness=Debilidad b\u00E1sica -AHLCG-DeckSize-formatEnd=. -AHLCG-Difficulty-Front=F\u00C1CIL / NORMAL -AHLCG-Label-Location=Lugar -AHLCG-Label-Agenda=Plan -AHLCG-DeckOptions-format=Opciones de creaci\u00F3n de mazos\: -AHLCG-DeckRequirements-format=Requisitos de creaci\u00F3n de mazos (no cuentan para el tama\u00F1o del mazo)\: -AHLCG-DeckSize-format=Tama\u00F1o de mazo\: -AHLCG-Label-Event=Evento -AHLCG-Label-Weakness=Debilidad -AHLCG-Label-Treachery=Traici\u00F3n -AHLCG-Label-Story=Historia -AHLCG-Scenario-Header2=hasta el final del escenario -AHLCG-Scenario-Header1=NO LEAS ESTO -AHLCG-Forced-tag=Obligado -- -AHLCG-Scenario-Header= -AHLCG-Prey-tag=Presa -- -AHLCG-Difficulty-Unique=F\u00C1CIL/NORMAL/DIF\u00CDCIL/EXPERTO -AHLCG-Revelation-tag=Revelaci\u00F3n -- -AHLCG-AdditionalRequirements-format=Requisitos adicionales\: -AHLCG-IllustratorShort=Illus. -AHLCG-Guide-Standalone=Escenario independiente +#AHLCG-Game_es.properties +#Thu Jan 11 11:53:34 EST 2024 +AHLCG-Label-Enemy=Enemigo +AHLCG-Haunted-tag=Embrujado -- +AHLCG-Label-Act=Acto +AHLCG-DeckRestrictions-format=Restricciones de creaci\u00F3n de mazos\: +AHLCG-Label-Key=Llave +AHLCG-Difficulty-Back=DIF\u00CDCIL / EXPERTO +AHLCG-Spawn-tag=Aparici\u00F3n -- +AHLCG-Objective-tag=Objetivo -- +AHLCG-SecondaryClass-format=Elecci\u00F3n de clase secundaria\: +AHLCG-Label-Skill=Habilidad +AHLCG-Label-Asset=Apoyo +AHLCG-Label-BasicWeakness=Debilidad b\u00E1sica +AHLCG-DeckSize-formatEnd=. +AHLCG-Difficulty-Front=F\u00C1CIL / NORMAL +AHLCG-Label-Location=Lugar +AHLCG-Label-Agenda=Plan +AHLCG-DeckOptions-format=Opciones de creaci\u00F3n de mazos\: +AHLCG-DeckRequirements-format=Requisitos de creaci\u00F3n de mazos (no cuentan para el tama\u00F1o del mazo)\: +AHLCG-DeckSize-format=Tama\u00F1o de mazo\: +AHLCG-Label-Event=Evento +AHLCG-Label-Weakness=Debilidad +AHLCG-Label-Treachery=Traici\u00F3n +AHLCG-Label-Story=Historia +AHLCG-Scenario-Header2=hasta el final del escenario +AHLCG-Shift-tag=Alteraci\u00F3n -- +AHLCG-Scenario-Header1=NO LEAS ESTO +AHLCG-Forced-tag=Obligado -- +AHLCG-Scenario-Header= +AHLCG-Prey-tag=Presa -- +AHLCG-Label-Customizable=Mejoras +AHLCG-Difficulty-Unique=F\u00C1CIL/NORMAL/DIF\u00CDCIL/EXPERTO +AHLCG-Revelation-tag=Revelaci\u00F3n -- +AHLCG-AdditionalRequirements-format=Requisitos adicionales\: +AHLCG-IllustratorShort=Illus. +AHLCG-Guide-Standalone=Escenario independiente diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_fr.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_fr.properties index 1835c83..39e60f5 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_fr.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_fr.properties @@ -1,57 +1,37 @@ #AHLCG-Game_fr.properties -#Tue Apr 30 14:38:35 EDT 2019 -AHLCG-Label-Enemy = Ennemi -AHLCG-Label-Act = Acte -AHLCG-DeckRestrictions-format = Restrictions du Deck \: -AHLCG-Difficulty-Back = DIFFICILE / EXPERT -AHLCG-Spawn-tag = G\u00E9n\u00E9ration -- -AHLCG-Objective-tag = Objectif -- -AHLCG-Resolution-tag = e C -AHLCG-Label-Skill = Competence -AHLCG-Label-Asset = Soutien -AHLCG-Label-BasicWeakness = Faiblesse de base -AHLCG-Label-Event = Evenement -AHLCG-Label-Weakness = Faiblesse -AHLCG-Label-Treachery = Tra\u00EEtrise -AHLCG-Label-Story = Histoire -AHLCG-Label-Location = Lieu -AHLCG-Label-Agenda = Intrigue +#Mon Nov 20 00:05:19 EST 2023 +AHLCG-Label-Event=Evenement +AHLCG-Revelation-tag=R\u00e9v\u00e9lation -- +AHLCG-Label-BasicWeakness=Faiblesse de base +AHLCG-AdditionalRequirements-format=Exigences Suppl\u00e9mentaires \: +AHLCG-DeckSize-format=Taille du Deck \: +AHLCG-Objective-tag=Objectif -- +AHLCG-IllustratorShort=Illus. +AHLCG-Label-CampaignGuide=Guide de Campagne +AHLCG-DeckOptions-format=Construction du Deck \: +AHLCG-Label-Asset=Soutien +AHLCG-Haunted-tag=Hant\u00e9 -- +AHLCG-Label-Act=Acte +AHLCG-Label-Agenda=Intrigue AHLCG-DeckSize-formatEnd=. +AHLCG-DeckRestrictions-format=Restrictions du Deck \: +AHLCG-Guide-Standalone=Mode Ind\u00e9pendant +AHLCG-Resolution-tag=e C +AHLCG-Difficulty-Back=DIFFICILE / EXPERT +AHLCG-Scenario-Header=NE PAS LIRE\navant la fin du sc\u00e9nario AHLCG-Difficulty-Front=FACILE / STANDARD -AHLCG-Label-Location=Lieu -AHLCG-Label-Agenda=Intrigue -AHLCG-DeckOptions-format=Construction du Deck \: -AHLCG-DeckRequirements-format=Exigences du Deck (ne compte pas dans la limite de taille du deck) \: -AHLCG-DeckSize-format=Taille du Deck \: -AHLCG-Label-Event=Evenement +AHLCG-Label-Treachery=Tra\u00eetrise +AHLCG-Difficulty-Unique=F ACILE/STANDARD/DIFFICILE/EXPERT +AHLCG-Label-Customizable=Am\u00e9liorations AHLCG-Label-Weakness=Faiblesse -AHLCG-Label-Treachery=Tra\u00EEtrise -AHLCG-Label-Story=Histoire -AHLCG-Scenario-Header2=avant la fin du scenario +AHLCG-Scenario-Header2=avant la fin du sc\u00e9nario AHLCG-Scenario-Header1=NE PAS LIRE -AHLCG-Forced-tag=Forc\u00E9 -- -AHLCG-Scenario-Header=NE PAS LIRE\navant la fin du sc\u00E9nario -AHLCG-Prey-tag=Proie -- -AHLCG-Difficulty-Unique=FACILE/STANDARD/DIFFICILE/EXPERT -AHLCG-Revelation-tag=R\u00E9v\u00E9lation -- -AHLCG-AdditionalRequirements-format=Exigences Suppl\u00E9mentaires \: -AHLCG-IllustratorShort=Illus. -AHLCG-Guide-Standalone=Mode Ind\u00E9pendant - -AHLCG-DeckOptions-format = Construction du Deck \: -AHLCG-DeckRequirements-format = Exigences du Deck (ne comptent pas dans la limite du deck) \: -AHLCG-DeckSize-format = Taille du Deck \: - -AHLCG-Scenario-Header2 = avant la fin du scenario -AHLCG-Scenario-Header1 = NE PAS LIRE -AHLCG-Forced-tag = Forc\u00E9 -- -AHLCG-Scenario-Header = NE PAS LIRE\navant la fin du sc\u00E9nario -AHLCG-Prey-tag = Proie -- -AHLCG-Difficulty-Unique =F ACILE/STANDARD/DIFFICILE/EXPERT -AHLCG-Revelation-tag = R\u00E9v\u00E9lation -- -AHLCG-AdditionalRequirements-format = Exigences Suppl\u00E9mentaires \: -AHLCG-IllustratorShort = Illus. -AHLCG-Guide-Standalone = Mode Ind\u00E9pendant -AHLCG-SecondaryClass-format = Choix Classe Secondaire \: -AHLCG-Haunted-tag = Hant\u00E9 -- -AHLCG-Patrol-tag = Patrouille -- +AHLCG-Label-Story=Histoire +AHLCG-Forced-tag=Forc\u00e9 -- +AHLCG-Prey-tag=Proie -- +AHLCG-SecondaryClass-format=Choix Classe Secondaire \: +AHLCG-DeckRequirements-format=Exigences du Deck (ne comptent pas dans la limite du deck) \: +AHLCG-Label-Skill=Competence +AHLCG-Label-Location=Lieu +AHLCG-Spawn-tag=G\u00e9n\u00e9ration -- +AHLCG-Label-Enemy=Ennemi diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_it.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_it.properties index 728ef58..2c7da74 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_it.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_it.properties @@ -1,32 +1,44 @@ -#AHLCG-Game_it.properties -#Tue Sep 29 10:31:07 EDT 2020 -AHLCG-Label-Enemy=Nemico -AHLCG-Label-Act=Capitolo -AHLCG-DeckRestrictions-format=Restrizioni\: -AHLCG-Difficulty-Back=DIFFICILE / ESPERTO -AHLCG-Spawn-tag=Generazione -- -AHLCG-Objective-tag=Obiettivo -- -AHLCG-Label-Skill=Abilit\u00E0 -AHLCG-Label-Asset=Supporto -AHLCG-Label-BasicWeakness=Debolezza Base -AHLCG-DeckSize-formatEnd= carte. -AHLCG-Difficulty-Front=FACILE / STANDARD -AHLCG-Label-Location=Luogo -AHLCG-Label-Agenda=Trama -AHLCG-DeckOptions-format=Opzioni del Mazzo\: -AHLCG-DeckRequirements-format=Requisiti del Mazzo (non considerati nella dimensione del mazzo)\: -AHLCG-DeckSize-format=Dimensione del Mazzo\: -AHLCG-Label-Event=Evento -AHLCG-Label-Weakness=Debolezza -AHLCG-Label-Treachery=Sventura -AHLCG-Label-Story=Storia -AHLCG-Scenario-Header2=fino alla fine dello scenario -AHLCG-Scenario-Header1=NON LEGGERE -AHLCG-Forced-tag=Obbligo -- -AHLCG-Scenario-Header= -AHLCG-Prey-tag=Preda -- -AHLCG-Difficulty-Unique=FACILE/STANDARD/DIFFICILE/ESPERTO -AHLCG-Revelation-tag=Rivelazione -- -AHLCG-AdditionalRequirements-format=Requisiti Aggiuntivi\: -AHLCG-IllustratorShort=Illus. -AHLCG-Guide-Standalone=Modalit\u00E0 Autoconclusiva +AHLCG-Label-Act = Capitolo +AHLCG-Label-Agenda = Trama +AHLCG-Label-Asset = Supporto +AHLCG-Label-Enemy = Nemico +AHLCG-Label-Event = Evento +AHLCG-Label-Location = Luogo +AHLCG-Label-Skill = Abilità +AHLCG-Label-Story = Storia +AHLCG-Label-Treachery = Sventura +AHLCG-Label-Weakness = Debolezza +AHLCG-Label-BasicWeakness = Debolezza Base +AHLCG-Label-Customizable = Migliorie +AHLCG-Label-CampaignGuide = Guida alla Campagna +AHLCG-Label-Key = Chiave +AHLCG-Label-Ultimatum = Ultimatum + +AHLCG-IllustratorShort = Illus. +AHLCG-Resolution-tag = eR +AHLCG-ResolutionSmall-tag = eR +AHLCG-Scenario-Header = NON LEGGERE\nfino alla fine dello scenario +AHLCG-Scenario-Header1 = NON LEGGERE +AHLCG-Scenario-Header2 = fino alla fine dello scenario +AHLCG-Guide-Standalone = Modalità Autoconclusiva +AHLCG-Guide-Keys = Keys + +AHLCG-Difficulty-Front = FACILE/ STANDARD +AHLCG-Difficulty-Back = DIFFICILE / ESPERTO +AHLCG-Difficulty-Unique = FACILE/STANDARD/DIFFICILE/ESPERTO + +AHLCG-DeckSize-format = Dimensione del Mazzo\: +AHLCG-DeckSize-formatEnd= carte. +AHLCG-SecondaryClass-format = Scelta della Classe Secondaria\: +AHLCG-DeckOptions-format = Opzioni del Mazzo\: +AHLCG-DeckRequirements-format = Requisiti del Mazzo (non considerati nella dimensione del mazzo)\: +AHLCG-DeckRestrictions-format = Deckbuilding Restrictions\: +AHLCG-AdditionalRequirements-format = Additional Requirements: + +AHLCG-Prey-tag = Preda -- +AHLCG-Spawn-tag = Generazione -- +AHLCG-Revelation-tag = Rivelazione -- +AHLCG-Forced-tag = Obbligo -- +AHLCG-Objective-tag = Obiettivo -- +AHLCG-Haunted-tag = Infestato -- +AHLCG-Shift-tag = Shift -- diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_pl.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_pl.properties new file mode 100644 index 0000000..ed70838 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_pl.properties @@ -0,0 +1,39 @@ +#AHLCG-Game_pl.properties +#Thu Mar 07:18:00 EST 2026 +AHLCG-Label-Enemy=Wr\u00f3g +AHLCG-Label-CampaignGuide =Ksi\u0119ga kampanii +AHLCG-Haunted-tag=Nawiedzona -- +AHLCG-Label-Act=Akt +AHLCG-DeckRestrictions-format=Ograniczenia tworzenia talii\: +AHLCG-Label-Key=Klucz +AHLCG-Difficulty-Back=TRUDNY / EKSPERCKI +AHLCG-Guide-Keys=Klucze +AHLCG-Spawn-tag=Rozstawienie -- +AHLCG-Objective-tag=Cel -- +AHLCG-SecondaryClass-format=Wyb\u00f3r drugorz\u0119dnej klasy\: +AHLCG-Label-Skill=Umiej\u0119t. +AHLCG-Label-Asset=Atut +AHLCG-Label-BasicWeakness=Podstawowe os\u0142abienie +AHLCG-DeckSize-formatEnd=. +AHLCG-Difficulty-Front=\u0141ATWY / STANDARDOWY +AHLCG-Label-Location=Lokalizacja +AHLCG-Label-Agenda=Tajemnica +AHLCG-DeckOptions-format=Opcje tworzenia talii\: +AHLCG-DeckRequirements-format=Wymogi tworzenia talii (nie wliczane do wielko\u015Bci talii)\: +AHLCG-DeckSize-format=Rozmiar talii\: +AHLCG-Label-Event=Wydarz. +AHLCG-Label-Weakness=Os\u0142abienie +AHLCG-Label-Treachery=Podst\u0119p +AHLCG-Label-Story=Fabu\u0142a +AHLCG-Scenario-Header2=przed zako\u0144czeniem scenariusza +AHLCG-Shift-tag=Przemiana -- +AHLCG-Scenario-Header1=NIE CZYTAJCIE TEGO FRAGMENTU +AHLCG-Forced-tag=Wymuszony -- +AHLCG-Scenario-Header=NIE CZYTAJCIE TEGO FRAGMENTU\nprzed zako\u0144czeniem scenariusza +AHLCG-Prey-tag=Polowanie -- +AHLCG-Label-Customizable=Ulepszenia +AHLCG-Difficulty-Unique=\u0141ATWY/STANDARDOWY/TRUDNY/EKSPERCKI +AHLCG-Revelation-tag=Odkrycie -- +AHLCG-AdditionalRequirements-format=Dodatkowe ograniczenia\: +AHLCG-IllustratorShort=Illus. +AHLCG-Guide-Standalone=Scenariusz \ No newline at end of file diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_uk.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_uk.properties new file mode 100644 index 0000000..2dc173a --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_uk.properties @@ -0,0 +1,38 @@ +#AHLCG-Game_uk.properties +#Thu Jan 11 11:57:14 EST 2024 +AHLCG-Label-Event=\u041F\u043E\u0434\u0456\u044F +AHLCG-Revelation-tag=\u0420\u043E\u0437\u043A\u0440\u0438\u0442\u0442\u044F -- +AHLCG-Label-BasicWeakness=\u0411\u0430\u0437\u043E\u0432\u0430 \u0441\u043B\u0430\u0431\u043A\u0456\u0441\u0442\u044C +AHLCG-Guide-Keys=\u041A\u043B\u044E\u0447\u0456 +AHLCG-AdditionalRequirements-format=\u0414\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u0456 \u0432\u0438\u043C\u043E\u0433\u0438\: +AHLCG-DeckSize-format=\u0420\u043E\u0437\u043C\u0456\u0440 \u043A\u043E\u043B\u043E\u0434\u0438\: +AHLCG-Objective-tag=\u0426\u0456\u043B\u044C -- +AHLCG-IllustratorShort=Illus. +AHLCG-DeckOptions-format=\u041C\u043E\u0436\u043B\u0438\u0432\u0456 \u043A\u0430\u0440\u0442\u0438\: +AHLCG-Label-Asset=\u0417\u0434\u043E\u0431\u0443\u0442\u043E\u043A +AHLCG-Haunted-tag=\u041F\u0435\u0440\u0435\u0441\u043B\u0456\u0434\u0443\u0432\u0430\u043D\u043D\u044F -- +AHLCG-Label-Act=\u0421\u043F\u0440\u0430\u0432\u0430 +AHLCG-Label-Agenda=\u0417\u0430\u0433\u0440\u043E\u0437\u0430 +AHLCG-DeckSize-formatEnd=. +AHLCG-DeckRestrictions-format=\u041E\u0441\u043E\u0431\u043B\u0438\u0432\u0456 \u043E\u0431\u043C\u0435\u0436\u0435\u043D\u043D\u044F\: +AHLCG-Guide-Standalone=\u041E\u0434\u0438\u043D\u043E\u0447\u043D\u0438\u0439 \u0440\u0435\u0436\u0438\u043C +AHLCG-Resolution-tag=eR +AHLCG-ResolutionSmall-tag=eR +AHLCG-Difficulty-Back=\u0412\u0410\u0416\u041A\u0418\u0419 / \u041D\u0410\u0414\u0412\u0410\u0416\u041A\u0418\u0419 +AHLCG-Scenario-Header=\u041D\u0415 \u0427\u0418\u0422\u0410\u0419\u0422\u0415\n\u0434\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0441\u0446\u0435\u043D\u0430\u0440\u0456\u044E +AHLCG-Difficulty-Front=\u041B\u0415\u0413\u041A\u0418\u0419 / \u0421\u0415\u0420\u0415\u0414\u041D\u0406\u0419 +AHLCG-Label-Treachery=\u041F\u0456\u0434\u0441\u0442\u0443\u043F\u043D\u0456\u0441\u0442\u044C +AHLCG-Difficulty-Unique=\u041B\u0415\u0413\u041A\u0418\u0419/\u0421\u0415\u0420\u0415\u0414\u041D\u0406\u0419/\u0412\u0410\u0416\u041A\u0418\u0419/\u041D\u0410\u0414\u0412\u0410\u0416\u041A\u0418\u0419 +AHLCG-Label-Customizable=\u041F\u043E\u043A\u0440\u0430\u0449\u0435\u043D\u043D\u044F +AHLCG-Label-Weakness=\u0421\u043B\u0430\u0431\u043A\u0456\u0441\u0442\u044C +AHLCG-Scenario-Header2=\u0434\u043E \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043D\u043D\u044F \u0441\u0446\u0435\u043D\u0430\u0440\u0456\u044E +AHLCG-Scenario-Header1=\u041D\u0415 \u0427\u0418\u0422\u0410\u0419\u0422\u0415 +AHLCG-Label-Story=\u0421\u044E\u0436\u0435\u0442 +AHLCG-Forced-tag=\u041F\u0440\u0438\u043C\u0443\u0441\u043E\u0432\u043E -- +AHLCG-Prey-tag=\u0416\u0435\u0440\u0442\u0432\u0430 -- +AHLCG-SecondaryClass-format=\u0412\u0438\u0431\u0456\u0440 \u0434\u043E\u0434\u0430\u0442\u043A\u043E\u0432\u043E\u0433\u043E \u043A\u043B\u0430\u0441\u0443\: +AHLCG-DeckRequirements-format=\u041E\u0431\u043E\u0432'\u044F\u0437\u043A\u043E\u0432\u0456 \u043A\u0430\u0440\u0442\u0438 (\u043D\u0435 \u0432\u0440\u0430\u0445\u043E\u0432\u0443\u044E\u0442\u044C\u0441\u044F \u043F\u0440\u0438 \u043E\u0431\u0447\u0438\u0441\u043B\u0435\u043D\u043D\u0456 \u0440\u043E\u0437\u043C\u0456\u0440\u0443 \u043A\u043E\u043B\u043E\u0434\u0438)\: +AHLCG-Label-Skill=\u0412\u043C\u0456\u043D\u043D\u044F +AHLCG-Label-Location=\u041B\u043E\u043A\u0430\u0446\u0456\u044F +AHLCG-Spawn-tag=\u0420\u043E\u0437\u043C\u0456\u0449\u0435\u043D\u043D\u044F -- +AHLCG-Label-Enemy=\u0412\u043E\u0440\u043E\u0433 diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh.properties new file mode 100644 index 0000000..319376a --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh.properties @@ -0,0 +1,36 @@ +#AHLCG-Game_zh.properties +#Tue Jan 04 10:16:23 CST 2022 +AHLCG-Label-Enemy=\u6575\u4eba +AHLCG-Haunted-tag=\u9b27\u9b3c -- +AHLCG-Label-Act=\u5834\u666f +AHLCG-DeckRestrictions-format=\u724c\u7d44\u69cb\u5efa\u9650\u5236\uff1a +AHLCG-Difficulty-Back=\u56f0\u96e3/\u5c08\u5bb6 +AHLCG-Guide-Keys=\u9470\u5319 +AHLCG-Spawn-tag=\u751f\u6210 -- +AHLCG-Objective-tag=\u76ee\u6a19 -- +AHLCG-SecondaryClass-format=\u7b2c\u4e8c\u8077\u968e\u9078\u9805\uff1a +AHLCG-Resolution-tag=e\u7d50\u5c40 +AHLCG-Label-Skill=\u6280\u80fd +AHLCG-Label-Asset=\u652f\u63f4 +AHLCG-Label-BasicWeakness=\u57fa\u790e\u5f31\u9ede +AHLCG-DeckSize-formatEnd=\u3002 +AHLCG-Difficulty-Front=\u7c21\u55ae/\u666e\u901a +AHLCG-Label-Location=\u5730\u9ede +AHLCG-Label-Agenda=\u5bc6\u8b00 +AHLCG-DeckOptions-format=\u724c\u7d44\u69cb\u5efa\u9078\u9805\uff1a +AHLCG-DeckRequirements-format=\u724c\u7d44\u69cb\u5efa\u9700\u6c42(\u4e0d\u8a08\u5165\u5361\u724c\u5f35\u6578)\uff1a +AHLCG-DeckSize-format=\u5361\u724c\u5f35\u6578\uff1a +AHLCG-Label-Event=\u4e8b\u4ef6 +AHLCG-Label-Weakness=\u5f31\u9ede +AHLCG-Label-Treachery=\u8a6d\u8a08 +AHLCG-Label-Story=\u6545\u4e8b +AHLCG-Scenario-Header2=\u5192\u96aa\u7d50\u675f\u6642\u67e5\u770b +AHLCG-Scenario-Header1=\u8acb\u52ff\u95b1\u8b80 +AHLCG-Forced-tag=\u5f37\u5236 -- +AHLCG-Scenario-Header=\u8acb\u52ff\u95b1\u8b80\n\u5192\u96aa\u7d50\u675f\u6642\u67e5\u770b +AHLCG-Prey-tag=\u7375\u7269 -- +AHLCG-Difficulty-Unique=\u7c21\u55ae/\u666e\u901a/\u56f0\u96e3/\u5c08\u5bb6 +AHLCG-Revelation-tag=\u986f\u73fe -- +AHLCG-AdditionalRequirements-format=\u9644\u52a0\u9700\u6c42\uff1a +AHLCG-IllustratorShort=Illus. +AHLCG-Guide-Standalone=\u5192\u96aa\u6a21\u5f0f diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh_CN.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh_CN.properties new file mode 100644 index 0000000..73c0ea1 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Game_zh_CN.properties @@ -0,0 +1,36 @@ +#AHLCG-Game_zh.properties +#Tue Jan 04 10:16:23 CST 2022 +AHLCG-Label-Enemy=\u654c\u4eba +AHLCG-Haunted-tag=\u95f9\u9b3c -- +AHLCG-Label-Act=\u573a\u666f +AHLCG-DeckRestrictions-format=\u724c\u7ec4\u6784\u5efa\u9650\u5236\uff1a +AHLCG-Difficulty-Back=\u56f0\u96be/\u4e13\u5bb6 +AHLCG-Guide-Keys=\u94a5\u5319 +AHLCG-Spawn-tag=\u751f\u6210 -- +AHLCG-Objective-tag=\u76ee\u6807 -- +AHLCG-SecondaryClass-format=\u7b2c\u4e8c\u804c\u9636\u9009\u9879\uff1a +AHLCG-Resolution-tag=e\u7ed3\u5c40 +AHLCG-Label-Skill=\u6280\u80fd +AHLCG-Label-Asset=\u652f\u63f4 +AHLCG-Label-BasicWeakness=\u57fa\u7840\u5f31\u70b9 +AHLCG-DeckSize-formatEnd=\u3002 +AHLCG-Difficulty-Front=\u7b80\u5355/\u666e\u901a +AHLCG-Label-Location=\u5730\u70b9 +AHLCG-Label-Agenda=\u5bc6\u8c0b +AHLCG-DeckOptions-format=\u724c\u7ec4\u6784\u5efa\u9009\u9879\uff1a +AHLCG-DeckRequirements-format=\u724c\u7ec4\u6784\u5efa\u9700\u6c42(\u4e0d\u8ba1\u5165\u5361\u724c\u5f20\u6570)\uff1a +AHLCG-DeckSize-format=\u5361\u724c\u5f20\u6570\uff1a +AHLCG-Label-Event=\u4e8b\u4ef6 +AHLCG-Label-Weakness=\u5f31\u70b9 +AHLCG-Label-Treachery=\u8be1\u8ba1 +AHLCG-Label-Story=\u6545\u4e8b +AHLCG-Scenario-Header2=\u5192\u9669\u7ed3\u675f\u65f6\u67e5\u770b +AHLCG-Scenario-Header1=\u8bf7\u52ff\u9605\u8bfb +AHLCG-Forced-tag=\u5f3a\u5236 -- +AHLCG-Scenario-Header=\u8bf7\u52ff\u9605\u8bfb\n\u5192\u9669\u7ed3\u675f\u65f6\u67e5\u770b +AHLCG-Prey-tag=\u730e\u7269 -- +AHLCG-Difficulty-Unique=\u7b80\u5355/\u666e\u901a/\u56f0\u96be/\u4e13\u5bb6 +AHLCG-Revelation-tag=\u663e\u73b0 -- +AHLCG-AdditionalRequirements-format=\u9644\u52a0\u9700\u6c42\uff1a +AHLCG-IllustratorShort=Illus. +AHLCG-Guide-Standalone=\u5192\u9669\u6a21\u5f0f diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface.properties index c263b5b..94edab6 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface.properties @@ -1,7 +1,7 @@ AHLCG-ArkhamHorrorLCG = Arkham Horror\: The Card Game AHLCG = Arkham Horror\: The Card Game -AHLCG-Description = +AHLCG-Description = // types AHLCG-Act = Act @@ -23,12 +23,15 @@ AHLCG-AssetStoryAsset = Story Asset / Story Asset AHLCG-AssetStoryEnemy = Story Asset / Enemy AHLCG-AssetStoryPortrait = Story Asset / Portrait AHLCG-ChaosEffects = Chaos Token Effects +AHLCG-Customizable = Customizable Upgrades AHLCG-Divider = Divider AHLCG-EnemyWeakness = Enemy (Weakness) AHLCG-EnemyEncounter = Enemy (Encounter) AHLCG-EnemyPortrait = Enemy / Portrait AHLCG-EnemyEnemy = Enemy / Enemy AHLCG-Event = Event +AHLCG-Key = Key +AHLCG-Concealed = Concealed AHLCG-Investigator = Investigator AHLCG-StoryInvestigator = Story Investigator AHLCG-Location = Location @@ -41,13 +44,19 @@ AHLCG-StoryEnemy = Story / Enemy AHLCG-StoryLocation = Story / Location AHLCG-StoryChaos = Story / Chaos Token Effects AHLCG-StoryTreachery = Story / Treachery -AHLCG-StoryStory = Story / Story +AHLCG-StoryStory = Story AHLCG-TreacheryEncounter = Treachery (Encounter) AHLCG-TreacheryWeakness = Treachery (Weakness) AHLCG-TreacheryPortrait = Treachery / Portrait +AHLCG-TreacheryLocation = TreacheryLocation (Encounter) +AHLCG-EnemyLocation = EnemyLocation AHLCG-TreacheryStory = Story Treachery (Weakness) +AHLCG-Ultimatum = Ultimatum AHLCG-CampaignGuide75 = Campaign Guide (7.5"x7.5") AHLCG-CampaignGuideA4 = Campaign Guide A4 (210mm x 297mm) +AHLCG-CampaignGuideLetter = Campaign Guide Letter (8.5" x 11") +AHLCG-PackCover = Pack Cover +AHLCG-BoxCover = Box Cover // interface AHLCG-Front = Front @@ -67,6 +76,7 @@ AHLCG-Header = Header AHLCG-TextScale = Text Scale AHLCG-Portrait = Portrait AHLCG-Mirror = Mirror +AHLCG-Option = Option AHLCG-Options = Options AHLCG-Artist = Artist AHLCG-Collection = Collection @@ -82,7 +92,10 @@ AHLCG-AgendaStory = Story AHLCG-AccentedStory = Story AHLCG-Subtitle = Subtitle AHLCG-Class = Class -AHLCG-Class2 = Dual Class +AHLCG-Class1 = Class 1 +AHLCG-Class2 = Class 2 +AHLCG-Class3 = Class 3 +AHLCG-Name = Name AHLCG-Icon = Icon AHLCG-Cost = Cost AHLCG-Level = Level @@ -140,6 +153,10 @@ AHLCG-Standard = Standard AHLCG-TCUPrologue = TCU Prologue AHLCG-Sections = Sections AHLCG-Template = Template +#@AHLCG-ShowOnBack = Show on back +AHLCG-TemplateReplacement = Template replacement +AHLCG-LineSpacing = Line spacing +AHLCG-Height = Height // list boxes AHLCG-Class-None = None @@ -152,7 +169,12 @@ AHLCG-Class-ParallelRogue = Rogue (Parallel) AHLCG-Class-Mystic = Mystic AHLCG-Class-ParallelMystic = Mystic (Parallel) AHLCG-Class-Survivor = Survivor +AHLCG-Class-ParallelSurvivor = Survivor (Parallel) AHLCG-Class-Neutral = Neutral +AHLCG-Class-Specialist = Specialist +AHLCG-Class-ParallelNeutral = Neutral (Parallel) +AHLCG-Class-Story = Story +AHLCG-Class-StoryWeakness = Story Weakness AHLCG-Class-Weakness = Weakness AHLCG-Class-BasicWeakness = Basic Weakness @@ -172,6 +194,10 @@ AHLCG-Slot-2Hands = 2 Hands AHLCG-Slot-1Arcane = 1 Arcane AHLCG-Slot-2Arcane = 2 Arcane AHLCG-Slot-Tarot = Tarot +AHLCG-Slot-Foot = Foot +AHLCG-Slot-Mask = Mask +AHLCG-Slot-Education = Education +AHLCG-Slot-Hat = Hat AHLCG-Stamina-None = None AHLCG-Sanity-None = None @@ -197,7 +223,8 @@ AHLCG-LocIcon-DoubleSlash = Double Slash AHLCG-LocIcon-Heart = Heart AHLCG-LocIcon-Star = Star AHLCG-LocIcon-Quote = Quotation Mark -AHLCG-LocIcon-Clover = Clover +AHLCG-LocIcon-Clover = Clover +AHLCG-LocIcon-Spade = Spade AHLCG-LocIcon-CircleAlt = Circle (Alt) AHLCG-LocIcon-SquareAlt = Square (Alt) @@ -223,6 +250,11 @@ AHLCG-Back-Encounter = Encounter AHLCG-StoryTemplate-Story = Story AHLCG-StoryTemplate-Token = Token effects +AHLCG-StoryTemplate-TokenFull = Token effects (Full card text) + +AHLCG-ConcealedTemplate-Standard = Standard +AHLCG-ConcealedTemplate-Decoy = Decoy +AHLCG-ConcealedTemplate-NamedDecoy = Named decoy AHLCG-Guide-None = None AHLCG-Guide-Title = Title @@ -230,19 +262,24 @@ AHLCG-Guide-Empty = Empty AHLCG-Guide-TopLeftSmall = Top left, small AHLCG-Guide-TopLeftMedium = Top left, medium AHLCG-Guide-TopLarge = Top, large +AHLCG-Guide-TopHalf = Top, half page AHLCG-Guide-BottomLeftSmall = Bottom left, small AHLCG-Guide-BottomLeftMedium = Bottom left, medium AHLCG-Guide-BottomLarge = Bottom, large +AHLCG-Guide-BottomHalf = Bottom left, half page AHLCG-Guide-LeftLarge = Left, large AHLCG-Guide-TopLeftCorner = Top left, corner AHLCG-Guide-BottomLeftCorner = Bottom left, corner +AHLCG-Guide-FullPage = Full page AHLCG-Guide-TopRightSmall = Top right, small AHLCG-Guide-TopRightMedium = Top right, medium AHLCG-Guide-TopLarge = Top, large +AHLCG-Guide-TopRightHalf = Top, half page AHLCG-Guide-BottomRightSmall = Bottom right, small AHLCG-Guide-BottomRightMedium = Bottom right, medium AHLCG-Guide-BottomLarge = Bottom, large +AHLCG-Guide-BottomHalf = Bottom, half page AHLCG-Guide-RightLarge = Right, large AHLCG-Guide-TopRightCorner = Top right, corner AHLCG-Guide-BottomRightCorner = Bottom right, corner @@ -265,8 +302,22 @@ AHLCG-Pref-EncounterSets = Encounter Sets AHLCG-Pref-Collections = Collections AHLCG-Pref-DefaultValues = Default values -AHLCG-Pref-DefaultSet = Default encounter set: -AHLCG-Pref-DefaultCollection = Default collection: +AHLCG-Pref-DefaultSet = Default encounter set +AHLCG-Pref-DefaultCollection = Default collection +AHLCG-Pref-DefaultFonts = Default fonts +AHLCG-Pref-TitleFont = Title font +AHLCG-Pref-SubtitleFont = Subtitle font +AHLCG-Pref-CardTypeFont = Card type font +AHLCG-Pref-BodyFont = Body font +AHLCG-Pref-TraitFont = Trait font +AHLCG-Pref-VictoryFont = Header/Victory font +AHLCG-Pref-FlavorFont = Flavor font +AHLCG-Pref-StoryFont = Story font +AHLCG-Pref-CollectionFont = Collection info font +AHLCG-Pref-Size = Size (%) +AHLCG-Pref-VerticalOffset = Vertical offset +AHLCG-Pref-LanguageOptions = Language options +AHLCG-Pref-RotateTitle = Rotate title on act/agenda backs AHLCG-Pref-StandardSets = Standard Sets: AHLCG-Pref-CheckSets = Check selected sets AHLCG-Pref-UncheckSets = Uncheck selected sets @@ -304,6 +355,7 @@ AHLCG-ReturnToThePathToCarcosa = Return to The Path to Carcosa AHLCG-MurderAtTheExcelsiorHotel = Murder at the Excelsior Hotel AHLCG-TheDreamEaters = The Dream-Eaters AHLCG-ParallelInvestigators = Parallel Investigators +AHLCG-Promos = Promos AHLCG-ReturnToTheForgottenAge = Return to The Forgotten Age AHLCG-NathanielCho = Nathaniel Cho AHLCG-HarveyWalters = Harvey Walters @@ -313,7 +365,16 @@ AHLCG-StellaClark = Stella Clark AHLCG-TheBlobThatAteEverything = The Blob That Ate Everything AHLCG-TheInnsmouthConspiracy = The Innsmouth Conspiracy AHLCG-WarOfTheOuterGods = War of the Outer Gods - +AHLCG-ReturnToTheCircleUndone = Return to The Circle Undone +AHLCG-EdgeOfTheEarth = Edge of the Earth Campaign +# I don't know why the extra space is needed +AHLCG-EdgeOfTheEarthInv = Edge of the Earth Investigator +AHLCG-TheScarletKeys = The Scarlet Keys Campaign +AHLCG-TheScarletKeysInv = The Scarlet Keys Investigator +AHLCG-MachinationsThroughTime = Machinations through Time +AHLCG-FortuneAndFolly = Fortune and Folly +AHLCG-TheBlobThatAteEverythingElse = The Blob that Ate Everything Else! + // encounter sets AHLCG-AbyssalGifts = Abyssal Gifts AHLCG-AbyssalTribute = Abyssal Tribute @@ -325,8 +386,11 @@ AHLCG-AgentsOfHastur = Agents Of Hastur AHLCG-AgentsOfHydra = Agents of Hydra AHLCG-AgentsOfNyarlathotep = Agents of Nyarlathotep AHLCG-AgentsOfShubNiggurath = Agents Of Shub-Niggurath +AHLCG-AgentsOfTheOutside = Agents of the Outside +AHLCG-AgentsOfTheUnknown = Agents of the Unknown AHLCG-AgentsOfYogSothoth = Agents Of Yog-Sothoth AHLCG-AgentsOfYig = Agents of Yig +AHLCG-AgentsOfYuggoth = Agents of Yuggoth AHLCG-AlienInterference = Alien Interference AHLCG-ALightInTheFog = A Light in the Fog AHLCG-AllOrNothing = All or Nothing @@ -336,33 +400,48 @@ AHLCG-APhantomOfTruth = A Phantom of Truth AHLCG-ArmitagesFate = Armitage's Fate AHLCG-AtDeathsDoorstep = At Death's Doorstep AHLCG-AThousandShapesOfHorror = A Thousand Shapes of Horror +AHLCG-BadBlood = Bad Blood AHLCG-BadLuck = Bad Luck AHLCG-BeastThralls = Beast-thralls AHLCG-BeforeTheBlackThrone = Before the Black Throne +AHLCG-BeyondTheBeyond = Beyond the Beyond AHLCG-BeyondTheGatesOfSleep = Beyond the Gates of Sleep AHLCG-BeyondTheThreshold = Beyond the Threshold AHLCG-BishopsThralls = Bishop's Thralls AHLCG-BlackStarsRise = Black Stars Rise AHLCG-BloodOnTheAltar = Blood on the Altar +AHLCG-BloodthirstySpirits = Bloodthirsty Spirits AHLCG-BrotherhoodOfTheBeast = Brotherhood of the Beast +AHLCG-ByTheBook = By the Book AHLCG-Byakhee = Byakhee AHLCG-CarnevaleOfHorrorsE = Carnevale of Horrors AHLCG-ChildrenOfParadise = Children of Paradise AHLCG-ChillingCold = Chilling Cold +AHLCG-ChillingMists = Chilling Mists AHLCG-CityOfSins = City of Sins +AHLCG-CityOfTheDamned = City of the Damned +AHLCG-CityOfTheElderThings = City of the Elder Things +AHLCG-CleanupCrew = Cleanup Crew +AHLCG-CongressOfTheKeys = Congress of the Keys AHLCG-Corsairs = Corsairs +AHLCG-CreaturesInTheIce = Creatures in the Ice AHLCG-CreaturesOfTheDeep = Creatures of the Deep AHLCG-CreaturesOfTheUnderworld = Creatures of the Underworld AHLCG-CreepingCold = Creeping Cold +AHLCG-CrimsonConspiracy = Crimson Conspiracy AHLCG-CultOfPnakotus = Cult of Pnakotus AHLCG-CultOfTheYellowSign = Cult of the Yellow Sign AHLCG-CultOfUmordhoth = Cult of Umordhoth AHLCG-CurtainCall = Curtain Call AHLCG-CurseOfTheRougarouE = Curse of the Rougarou +AHLCG-DancingMad = Dancing Mad AHLCG-DarkCult = Dark Cult AHLCG-DarkRituals = Dark Rituals -AHLCG-DarkSideOfTheMoon = Dark Side of the Mon +AHLCG-DarkSideOfTheMoon = Dark Side of the Moon +AHLCG-DarkVeiling = Dark Veiling +AHLCG-DeadHeat = Dead Heat AHLCG-DeadlyTraps = Deadly Traps +AHLCG-DeadlyWeather = Deadly Weather AHLCG-DeathOfStars = Death of Stars AHLCG-DecayAndFilth = Decay & Filth AHLCG-DecayingReality = Decaying Reality @@ -372,67 +451,100 @@ AHLCG-DescentIntoThePitch = Descent into the Pitch AHLCG-DevilReef = Devil Reef AHLCG-DimCarcosa = Dim Carcosa AHLCG-DisappearanceAtTheTwilightEstate = Disappearance at the Twilight Estate +AHLCG-DealingsInTheDark = Dealings in the Dark +AHLCG-DogsOfWar = Dogs of War AHLCG-DoomedExpedition = Doomed Expedition AHLCG-DreamersCurse = Dreamer's Curse AHLCG-Dreamlands = Dreamlands AHLCG-Dunwich = Dunwich AHLCG-EchoesOfThePast = Echoes of the Past +AHLCG-ElderThings = Elder Things AHLCG-EpicMultiplayer = Epic Multiplayer AHLCG-ErraticFear = Erratic Fear AHLCG-EvilPortents = Evil Portents AHLCG-ExcelsiorManagement = Excelsior Management AHLCG-Expedition = Expedition +AHLCG-ExpeditionTeam = Expedition Team AHLCG-ExtracurricularActivity = Extracurricular Activity +AHLCG-FatalMirage = Fatal Mirage AHLCG-FloodedCaverns = Flooded Caverns AHLCG-FogOverInnsmouth = Fog over Innsmouth AHLCG-ForgottenRuins = Forgotten Ruins AHLCG-ForTheGreaterGood = For the Greater Good +AHLCG-FortuneAndFollyE = Fortune and Folly +AHLCG-FortunesChosen = Fortune's Chosen AHLCG-Ghouls = Ghouls AHLCG-GhoulsOfUmordhoth = Ghouls of Umordhoth +AHLCG-Globetrotting = Globetrotting AHLCG-GuardiansOfTime = Guardians of Time AHLCG-HastursEnvoys = Hastur's Envoys AHLCG-HastursGift = Hastur's Gift AHLCG-Hauntings = Hauntings +AHLCG-HazardsOfAntarctica = Hazards of Antarctica AHLCG-HeartOfTheElders = Heart of the Elders +AHLCG-Hexcraft = Hexcraft AHLCG-HideousAbominations = Hideous Abominations AHLCG-HorrorInHighGear = Horror in High Gear +AHLCG-IceAndDeath = Ice and Death +AHLCG-ImpendingEvils = Impending Evils AHLCG-InexorableFate = Inexorable Fate AHLCG-InhabitantsOfCarcosa = Inhabitants of Carcosa AHLCG-InTheClutchesOfChaos = In the Clutches of Chaos AHLCG-InTooDeep = In Too Deep AHLCG-IntoTheMaelstrom = Into the Maelstrom AHLCG-KnYan = K'n-Yan +AHLCG-LaidToRest = Laid to Rest +AHLCG-LeftBehind = Left Behind AHLCG-LockedDoors = Locked Doors +AHLCG-LostInTheNight = Lost in the Night AHLCG-LostInTimeAndSpace = Lost in Time and Space +AHLCG-MachinationsThroughTimeE = Machinations through Time AHLCG-MaddeningDelusions = Maddening Delusions AHLCG-Malfunction = Malfunction +AHLCG-MemorialsOfTheLost = Memorials of the Lost AHLCG-MergingRealities = Merging Realities +AHLCG-Miasma = Miasma AHLCG-MiGoIncursion = Mi-Go Incursion +AHLCG-MiGoIncursionII = Mi-Go Incursion II AHLCG-MurderAtTheExcelsiorHotelE = Murder at the Excelsior Hotel AHLCG-MusicOfTheDamned = Music of the Damned +AHLCG-MysteriesAbound = Mysteries Abound +AHLCG-NamelessHorrors = Nameless Horrors AHLCG-NaomisCrew = Naomi's Crew AHLCG-NeuroticFear = Neurotic Fear AHLCG-Nightgaunts = Nightgaunts AHLCG-TheNightsUsurper = The Night's Usurper +AHLCG-OnThinIce = On Thin Ice +AHLCG-Outsiders = Outsiders +AHLCG-Penguins = Penguins AHLCG-PillarsOfJudgment = Pillars of Judgment +AHLCG-PlanInShambles = Plan in Shambles AHLCG-PnakoticBrotherhood = Pnakotic Brotherhood AHLCG-PointOfNoReturn = Point of No Return AHLCG-Poison = Poison +AHLCG-Promos = Promos AHLCG-Rainforest = Rainforest AHLCG-Rats = Rats AHLCG-ReadOrDie = Read or Die AHLCG-RealmOfDeath = Realm of Death +AHLCG-RedCoterie = Red Coterie AHLCG-RedTideRising = Red Tide Rising +AHLCG-RelicsOfThePast = Relics of the Past AHLCG-ResurgentEvils = Resurgent Evils AHLCG-ReturnToAPhantomOfTruth = Return to A Phantom of Truth +AHLCG-ReturnToAtDeathsDoorstep = Return to At Death's Doorstep +AHLCG-ReturnToBeforeTheBlackThrone = Return to Before the Black Throne AHLCG-ReturnToBlackStarsRise = Return to Black Stars Rise AHLCG-ReturnToBloodOnTheAltar = Return to Blood on the Altar AHLCG-ReturnToCultOfUmordhoth = Cult of Umordhoth (Return) AHLCG-ReturnToCurtainCall = Return to Curtain Call AHLCG-ReturnToDimCarcosa = Return to Dim Carcosa +AHLCG-ReturnToDisappearanceAtTheTwilightEstate = Return to Disappearance at the Twilight Estate AHLCG-ReturnToEchoesOfThePast = Return to Echoes of the Past AHLCG-ReturnToExtracurricularActivities = Return to Extracurricular Activities +AHLCG-ReturnToForTheGreaterGood = Return to For the Greater Good AHLCG-ReturnToHeartOfTheElders = Return to Heart of the Elders +AHLCG-ReturnToInTheClutchesOfChaos = Return to In the Clutches of Chaos AHLCG-ReturnToKnYan = Return to K'n-Yan AHLCG-ReturnToLostInTimeAndSpace = Return to Lost in Time and Space AHLCG-ReturnToPillarsOfJudgment = Return to Pillars of Judgment @@ -450,36 +562,56 @@ AHLCG-ReturnToTheMidnightMasks = Return to The Midnight Masks AHLCG-ReturnToTheMiskatonicMuseum = Return to The Miskatonic Museum AHLCG-ReturnToThePallidMask = Return to The Pallid Mask AHLCG-ReturnToTheRainforest = Return to The Rainforest +AHLCG-ReturnToTheSecretName = Return to The Secret Name AHLCG-ReturnToTheUnspeakableOath = Return to The Unspeakable Oath AHLCG-ReturnToTheUntamedWilds = Return to The Untamed Wilds +AHLCG-ReturnToTheWagesOfSin = Return to The Wages of Sin +AHLCG-ReturnToTheWitchingHour = Return to The Witching Hour AHLCG-ReturnToThreadsOfFate = Return to Threads of Fate AHLCG-ReturnToTurnBackTime = Return to Turn Back Time AHLCG-ReturnToUndimensionedAndUnseen = Return to Undimensioned and Unseen +AHLCG-ReturnToUnionAndDisillusion = Return to Union and Disillusion AHLCG-ReturnToWhereDoomAwaits = Return to Where Doom Awaits +AHLCG-RiddlesAndRain = Riddles and Rain AHLCG-RisingTide = Rising Tide AHLCG-SandsOfEgypt = Sands of Egypt +AHLCG-SanguineShadows = Sanguine Shadows +AHLCG-ScarletSorcery = Scarlet Sorcery AHLCG-SecretDoors = Secret Doors +AHLCG-SecretWar = Secret War AHLCG-SecretsOfTheUniverse = Secrets of the Universe +AHLCG-SeepingNightmares = Seeping Nightmares AHLCG-Serpents = Serpents +AHLCG-ShadesOfSuffering = Shades of Suffering +AHLCG-ShadowOfADoubt = Shadow of a Doubt AHLCG-ShatteredAeons = Shattered Aeons AHLCG-ShatteredMemories = Shattered Memories +AHLCG-Shoggoths = Shoggoths +AHLCG-SilenceAndMystery = Silence and Mystery AHLCG-SilverTwilightLodge = Silver Twilight Lodge AHLCG-SingleGroup = Single Group AHLCG-SinsOfThePast = Sins of the Past AHLCG-Sorcery = Sorcery +AHLCG-SpatialAnomaly = Spatial Anomaly AHLCG-SpectralPredators = Spectral Predators AHLCG-Spiders = Spiders +AHLCG-SpreadingCorruption = Spreading Corruption +AHLCG-StirringInTheDeep = Stirring in the Deep +AHLCG-StrangeHappenings = Strange Happenings AHLCG-StrikingFear = Striking Fear AHLCG-SwarmOfAssimilation = Swarm of Assimilation AHLCG-Syzygy = Syzygy +AHLCG-TekeliLi = Tekeli-Li AHLCG-TemporalFlux = Temporal Flux AHLCG-TemporalHunters = Temporal Hunters AHLCG-TerrorOfTheVale = Terror of the Vale AHLCG-TheBayou = The Bayou AHLCG-TheBeyond = The Beyond AHLCG-TheBlobThatAteEverythingE = The Blob That Ate Everything +AHLCG-TheBlobThatAteEverythingElseE = The Blob that Ate Everything Else! AHLCG-TheBoundaryBeyond = The Boundary Beyond AHLCG-TheCityOfArchives = The City of Archives +AHLCG-TheCrash = The Crash AHLCG-TheDepthsOfYoth = The Depths of Yoth AHLCG-TheDevourerBelow = The Devourer Below AHLCG-TheDevourersCult = The Devourer's Cult @@ -488,6 +620,8 @@ AHLCG-TheEssexCountyExpress = The Essex County Express AHLCG-TheEternalSlumber = The Eternal Slumber AHLCG-TheFloodBelow = The Flood Below AHLCG-TheGathering = The Gathering +AHLCG-TheGreatSeal = The Great Seal +AHLCG-TheHeartOfMadness = The Heart of Madness AHLCG-TheHouseAlwaysWins = The House Always Wins AHLCG-TheLabyrinthsOfLunacyE = The Labyrinths of Lunacy AHLCG-TheLairOfDagon = The Lair of Dagon @@ -508,10 +642,13 @@ AHLCG-TheWagesOfSin = The Wages of Sin AHLCG-TheWatcher = The Watcher AHLCG-TheWitchingHour = The Witching Hour AHLCG-ThreadsOfFate = Threads of Fate +AHLCG-ToTheForbiddenPeaks = To the Forbidden Peaks AHLCG-TrappedSpirits = Trapped Spirits AHLCG-TurnBackTime = Turn Back Time AHLCG-UndimensionedAndUnseen = Undimensioned and Unseen AHLCG-UnionAndDisillusion = Union and Disillusion +AHLCG-UnspeakableFate = Unspeakable Fate +AHLCG-UnstableRealm = Unstable Realm AHLCG-VenomousHate = Venomous Hate AHLCG-VileExperiments = Vile Experiments AHLCG-WakingNightmare = Waking Nightmare @@ -522,63 +659,82 @@ AHLCG-WhereTheGodsDwell = Where the Gods Dwell AHLCG-Whippoorwills = Whippoorwills AHLCG-WhispersOfHypnos = Whispers of Hypnos AHLCG-Witchcraft = Witchcraft +AHLCG-WithoutATrace = Without a Trace AHLCG-YigsVenom = Yig's Venom AHLCG-YogSothothsEmissaries = Yog-Sothoth's Emissaries AHLCG-Zoogs = Zoogs +AHLCG-agents_of_the_colour = Agents of the Colour +AHLCG-blight = Blight +AHLCG-day_of_rain = Day of Rain +AHLCG-day_of_rest = Day of Rest +AHLCG-day_of_the_feast = Day of the Feast +AHLCG-fate_of_the_vale = Fate of the Vale +AHLCG-TheFeastOfHemlockVale = The Feast of Hemlock Vale +AHLCG-TheFeastOfHemlockValePlayerExpansion = The Feast of Hemlock Vale Player Expansion +AHLCG-fire = Fire +AHLCG-heirlooms = Heirlooms +AHLCG-hemlock_house = Hemlock House +AHLCG-horrors_in_the_rock = Horrors In The Rock +AHLCG-mutations = Mutations +AHLCG-myconids = Myconids +AHLCG-refractions = Refractions +AHLCG-residents = Residents +AHLCG-the_final_day = The Final Day +AHLCG-the_first_day = The First Day +AHLCG-the_forest = The Forest +AHLCG-the_longest_night = The Longest Night +AHLCG-the_lost_sister = The Lost Sister +AHLCG-the_second_day = The Second Day +AHLCG-the_silent_heath = The Silent Heath +AHLCG-the_thing_in_the_depths = The Thing In The Depths +AHLCG-the_twisted_hollow = The Twisted Hollow +AHLCG-the_vale = The Vale +AHLCG-transfiguration = Transfiguration +AHLCG-written_in_rock = Written In Rock // tips AHLCG-TraitsTip1 = Official traits (player cards)\:\n\ -Agency, Ally, Armor, Artist, Assistant, Augury, Believer, Blessed, Bold, Boon, Bystander, Charm, Clairvoyant, Clothing, Composure,\n\ -Condition, Connection, Conspirator, Covenant, Creature, Criminal, Cultist, Cursed, Desperate, Detective, Developed, Dreamer, Drifter, Dunwich,\n\ -Expert, Eztli, Fated, Favor, Firearm, Footwear, Fortune, Gambit, Geist, Ghoul, Historical Society, Human, Hunter, Hybrid, Illicit, Improvised,\n\ -Innate, Insight, Instrument, Item, Key, Lunatic, Medic, Melee, Monster, Miskatonic, Occult, Ooze, Pact, Paradox, Patron, Performer, Police,\n\ -Practiced, Ranged, Relic, Reporter, Ritual, Science, Scholar, Service, Silver Twilight, Socialite, Song, Sorcerer, Spell, Spirit, Supply\n\ -Tactic, Talent, Tarot, Task, Tome, Tool, Trap, Trick, Upgrade, Vehicle, Veteran, Warden, Wayfarer, Weapon, Witch, Yithian +Agency, Ally, Armor, Artist, Assistant, Augury, Believer, Blessed, Bold, Boon, Broken, Bystander, Casino, Charm, Chosen, Civic, Clairvoyant, Clothing, Composure,\n\ +Condition, Connection, Conspirator, Coterie, Covenant, Creature, Crew, Criminal, Cultist, Cursed, Desperate, Detective, Developed, Dilemma, Double, Dreamer, Drifter, Dunwich,\n\ +Entrepreneur, Expedition, Expert, Eztli, Fated, Favor, Firearm, Footwear, Fortune, Future, Gambit, Game, Geist, Ghoul, Historical Society, Human, Hunter, Hybrid,\n\ +Illicit, Improvised, Inconspicuous, Innate, Insight, Instrument, Item, Key, Lunatic, Medic, Melee, Monster, Miskatonic, Occult, Ooze, Pact, Paradox, Past, Patron,\n\ +Performer, Police, Power, Practiced, Present, Public, Ranged, Relic, Reporter, Resolute, Restricted, Ritual, Role, Sanctum, Science, Scientist, Scholar, Service, Silver Twilight, Socialite, Song, Sorcerer,\n\ +Spell, Spirit, Stable, Summon, Supply, Synergy, Tactic, Talent, Tarot, Task, Tome, Tool, Trap, Trick, Unbroken, Unpracticed, Unstable, Upgrade, Vehicle, Veteran, Warden, Wayfarer, Weapon,\n\ +Witch, Yithian AHLCG-TraitsTip2 = Official traits (encounter cards/weaknesses)\:\n\ -Attack, Avatar, Blunder, Curse, Endtimes, Flaw, Geist, Hazard, Hex, Illicit, Injury, Insight, Madness, Mi-Go, Monster, Mystery, Obstacle,\n\ -Omen, Ooze, Pact, Paradox, Poison, Power, Scheme, Servitor, Spectral, Tactic, Task, Terror, Trap, Yithian +Attack, Avatar, Blunder, Bystander, Corruption, Curse, Endtimes, Evidence, Flaw, Geist, Hardship, Hazard, Hex, Illicit, Injury, Insight, Item, Madness, Manifold, Mi-Go, Monster, Mystery, Obstacle,\n\ +Omen, Ooze, Pact, Paradox, Plot, Poison, Power, Scheme, Servitor, Spectral, Tactic, Task, Terror, Trap, Yithian AHLCG-TraitsTip3 = Official traits (enemies)\:\n\ -Abomination, Ancient One, Avatar, Byakhee, Conspirator, Creature, Criminal, Cultist, Cursed, Dark Young, Deep One, Detective, Dhole,\n\ -Dreamlands, Elite, Extradimensional, Eztli, Familiar, Flora, Geist, Ghast, Ghoul, Gug, Human, Humanoid, Hybrid, Insect, Lunatic, Manifold, Monster,\n\ -Mutated, Nightgaunt, Ooze, Serpent, Servitor, Shoggoth, Silver Twilight, Sorcerer, Spectral, Spider, Staff, Suspect, Syndicate, Vehicle, Warden,\n\ -Witch, Yithian, Zoog +Abomination, Ancient One, Avatar, Byakhee, Casino, Conspirator, Coterie, Creature, Criminal, Cultist, Cursed, Dark Young, Deep One, Detective, Dhole, Dreamlands,\n\ +Eidolon, Elder Thing, Elite, Extradimensional, Eztli, Familiar, Flora, Geist, Ghast, Ghoul, Gug, Human, Humanoid, Hybrid, Insect, Lunatic, Manifold,\n\ +Monster, Mutated, Nightgaunt, Ooze, Outsider, Possessed, Risen, Ritual, Serpent, Servitor, Shoggoth, Silver Twilight, Sorcerer, Spectral, Spider, Staff, Suspect, Syndicate,\n\ +Tindalos, Vehicle, Warden, Witch, Yithian, Yuggoth, Zoog AHLCG-TraitsTip4 = Official traits (locations)\:\n\ -Altered, Ancient, Arkham, Arkham Asylum, Basement, Campsite, Cave, Central, City, Clover Club, Coastal, Depths, Dunwich, Exhibit,\n\ -Extradimensional, Falcon Point, Forbidden, Forgotten, Future, Graveyard, Ground Floor, Hideout, Innsmouth, Island, Jungle, Lair, Lodge,\n\ -Mexico City, Midtown, Miskatonic, Mnar, Montr\u00e9al, Mountain, New York City, Ocean, Ooth-Nargai, Oozified, Oriab, Otherworld, Paris, Passageway,\n\ -Pnakotus, Port, Present-Day, Private, Providence, Rail, Ritual Site, River, Road, Ruins, Salem, Sanctum, Second Floor, Sentinel Hill,\n\ -Shattered, Ship, Skai, Spectral, St. Mary's, Steps, Surface, Temple, Tenochtitl\u00e1n, Third Floor, Train, Vale, Void, Wastes, Witch House,\n\ -Woods, Y'ha-nthlei, Yoth +Abandoned, Alexandria, Altered, Ancient, Arkham, Arkham Asylum, Basement, Bazaar, Buenos Aires, Campsite, Cave, Central, City, Clover Club, Coastal, Depths, Dunwich, Exhibit, Extradimensional,\n\ +Falcon Point, Forbidden, Forgotten, Future, Glacier, Graveyard, Ground Floor, Haunted, Havana, Hideout, Innsmouth, Island, Istanbul, Jungle, Kuala Lumpur, Lair, Locus Site, Lodge, London, Mainland, Marrakesh, Mexico City,\n\ +Midtown, Mirage, Miskatonic, Mnar, Montr\u00e9al, Mountain, Mountains, New York City, Ocean, Ooth-Nargai, Oozified, Oriab, Otherworld, Paris, Passageway, Past\n\ +Pnakotus, Port, Portal, Present, Present-Day, Private, Providence, Rail, Ritual Site, River, Road, Ruins, Salem, Sanctum, Second Floor, Sentinel Hill, Shattered,\n\ +Ship, Skai, Spectral, St. Mary's, Steps, Surface, Temple, Tenochtitl\u00e1n, Third Floor, Tower, Train, Uncharted, Vale, Void, Wastes, Wilderness, Witch House, Woods,\n\ +Y'ha-nthlei, Yoth AHLCG-KeywordsTip1 = Official keywords\:\n\ -Alert, Aloof, Exceptional, Fast, Hidden, Hunter, Retaliate, Peril, Permanent, Road X, Surge, Swarming X, Uses (X type), Veiled\n\n\ +Alert, Aloof, Concealed X, Exceptional, Fast, Hidden, Hunter, Massive, Mirage X, Retaliate, Partner, Peril, Patrol,, Permanent, Retaliate, Road X, Surge, Swarming X, Uses (X type), Veiled\n\n\ ----- AVAILABLE TAGS -----\n\
 Prey\n\
  Spawn
 
 AHLCG-RulesTip1 = ----- AVAILABLE TAGS -----\n\
- Card name\n\n\
- Guardian\n\
- Seeker\n\
- Rogue\n\
- Mystic\n\
- Survivor\n\n\
- Willpower\n\
- Intellect\n\
- Combat\n\
- Agility\n\
- Wild\n\n\
- Skull\n\
- Cultist\n\
- Tablet\n\
- Elder Thing\n\
- Bless\n\
- Curse\n\
- Elder Sign\n\
- Tentacles\n\n\
+ Card name\n\
+ Back title\n\
+\n\
+Classes: , , , , \n\
+Skills: , , , , \n\
+Tokens: , , , , , , , \n\
+Icons:  Damage,  Horror,  Resource,  Per investigator\n\
+\n\
 Encounter set and collection icon tags are listed in the  \n\
 Arkham Horror\: The Card Game section in Preferences.\n\
 Add 's' for a small icon, 'm' for a medium icon, and 'l'\n\
@@ -586,31 +742,36 @@ for a large icon.\n\
 Examples\: , , 
 
 AHLCG-RulesTip2 = ----- AVAILABLE TAGS -----\n\
- Action\n\
- Free\n\n\
- Reaction\n\
- Forced\n\
- Haunted\n\
- Objective\n\
- Patrol\n\n\
- Revelation\n\
- Unique\n\
- Per investigator\n\n\
- Bullet\n\
- Square\n\
- Tab spacing for\n\
-         bullet sections\n\n\
+Action types:  Action,  Free,  Reaction\n\
+Keywords:  Forced,  Haunted,  Objective,  Revelation,  Shift\n\
+\n\
+Glyphs:  Unique,  Bullet,  Square,  Asterisk\n\
  Resolution arrow + R\n\
- End resolution\n\n\
+ End resolution\n\
+ Checkbox\n\
  Trait\n\
+ Tab spacing for bullet sections\n\
  Horizontal spacer\n\
  Large vertical spacer\n\
  Vertical spacer\n\
  Small vertical spacer
 
 AHLCG-RulesTip3 = ----- AVAILABLE TAGS -----\n\
-
...
Section header\n\ -
...
Secondary header\n\n\ + Body\n\ + Header\n\ + Flavor\n\ + Story\n\ + Victory\n\n\ +... Edge of the Earth seal symbols\n\n\ +... Text entry line\n\ + 1: Short, 5: Long + +AHLCG-RulesTip4 = ----- AVAILABLE TAGS -----\n\ +
...
Section header\n\ +
...
Secondary header\n\ +color : Text color as HEX code\n\ + "color=rrggbb"\n\ + e.g.
\n\n\ Resolution box\n\ Standalone box\n\ Interlude box\n\ @@ -654,3 +815,5 @@ Tag\: The base used for tags to insert the icon into text areas. If the base is <corel> \: Inserts a large icon

\ Any open cards will have to be reopened before the changes will take effect. +AHLCG-PrefDefaultFontsTip = Primarily used for substituting fonts for supporting different languages,
\ +but can also allow a font to be used throughout a project without the use of a <family> tag. diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_de.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_de.properties index d1a77ab..9dee5b4 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_de.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_de.properties @@ -1,281 +1,281 @@ -#AHLCG-Interface_de.properties -#Tue Sep 29 15:55:32 EDT 2020 -AHLCG-Pref-Collections=Erweiterungen -AHLCG-Stamina-None=Keine -AHLCG-Guide-BottomRightSmall=Unten-rechts, klein -AHLCG-DeckRequirements=Deckbau-Voraussetzungen -AHLCG-Level=Stufe -AHLCG-Back-Standard=Standard -AHLCG-Slot-2Hands=2 H\u00E4nde -AHLCG-AgentsOfYogSothoth=Anh\u00E4nger von Yog-Sothoth -AHLCG-BeastThralls=Bestiendiener -AHLCG-Icon=Symbol -AHLCG-AgendaStandard=Agenda (Normal) -AHLCG-ActStoryAsset=Szene / Storyvorteil -AHLCG-ChaosEffects=Szenario\u00FCbersicht -AHLCG-Guide-BottomLeftSmall=Unten-links, klein -AHLCG-AncientEvils=B\u00F6ses aus uralter Zeit -AHLCG-Slot-Body=K\u00F6rper -AHLCG-TraitsTip4=Offizielle Merkmale (Orte)\:\nAnderswelt, Arkham, Arkham Sanatorium, Au\u00DFerdimensional, Ausstellung, Bahngleis, Clover Club, Dunwich, Durchgang, Erdgeschoss,\nErster Stock, H\u00F6hle, Miskatonic, Paris, Privat, Sentinel Hill, W\u00E4lder, Ver\u00E4ndert, Zentral, Zug, Zweiter Stock -AHLCG-TextScale=Schriftgr\u00F6\u00DFe -AHLCG-Investigator=Ermittler -AHLCG-TraitsTip3=Offizielle Merkmale (Gegner)\:\nAbscheulichkeit, Avatar, Byakhee, Detective, Diener, Dunkeld\u00FCrrer, Dunkles Junges, Elite, Ghul, Gro\u00DFer Alter,\nHumanoid, Kreatur, Krimineller, Kultist, Monster, Shoggothe, Silberloge der D\u00E4mmerung, Spuk, Syndikat,\nTiefes Wesen, Verr\u00FCckt, Yith, Zauberer -AHLCG-TraitsTip2=Offizielle Merkmake (Begegnungskarten/Schw\u00E4chen)\:\nAufgabe, Endzeit, Fluch, Gefahr, Gift, Hindernis, Illegal, Komplott, Macht, Makel, Omen, Pakt, Schrecken,\nSpuk, Taktik, Verletzung, Verw\u00FCnschung, Wahnsinn -AHLCG-Pref-CheckSets=Haken bei markieren Sets setzen -AHLCG-TraitsTip1=Offizielle Merkmale (Spielerkarten)\:\nAngeboren, Assistent, Aufgabe, Beh\u00F6rde, Buch, Detective, Dunwich, Entwickelt, Erkenntnis, Experte, Eztli,\nFalle, Fernkampf, Feuerwaffe, Gefallen, Gegenstand, Geist, Gelassenheit, Gesegnet, Gesellschaft f\u00FCr Geschichte,\nGlaubender, Gl\u00FCcksbringer, Gl\u00FCcksfall, Herumtreiber, Hexe, Humanoid, Illegal, Improvisiert, Instrument, J\u00E4ger,\nKleidung, Kreatur, Krimineller, K\u00FChn, K\u00FCnstler, Lied, M\u00E4zen, Miskatonic, Nahkampf, Okkult, Pakt, Paradox,\nPerformer, Polizei, Relikt, Reporter, Ritual, R\u00FCstung, Schachzug, Schicksalhaft, Schl\u00FCssel, Taktik, Talent,\nTrainiert, Trick, Unbeteiligter, Verbesserung, Verbindung, Verb\u00FCndeter, Verflucht, Verr\u00FCckt, Verschw\u00F6rer,\nVerzweifelt, Veteran, Vorrat, Waffe, Wanderer, W\u00E4rter, Weissagung, Werkzeug, Wissenschaft, Zauber, Zauberer,\nZustand -AHLCG-AccentedStory=Geschichte -AHLCG-AssetStoryEnemy=Storyvorteil / Gegner -AHLCG-WknType-BasicWeakness=Grundschw\u00E4che -AHLCG-Title=Name -AHLCG-TreacheryPortrait=Verrat / Gro\u00DFbild -AHLCG-Pref-PermanentlyRemoveSets=Sollen die markierten Begegnungssets wirklich unwiederbringlich gel\u00F6scht werden? -AHLCG-Guide-TopRightCorner=Oben-rechts, \u00FCber Eck -AHLCG-CampaignGuideA4=Kampagnenleitfaden (210cm x 297cm) -AHLCG-Orientation=Ausrichtung -AHLCG-PrefCollectionTip=Legt fest, welche Erweiterungen im Auswahlmen\u00FC der Spielkomponenten angezeigt werden.

Name\: Der Name der Erweiterung/des Zyklus'
Dateipfad\: Der Dateipfad des Symbols einer selbst gemachten Erweiterung
Tag\: Der Grundstamm f\u00FCr die Tags, mit denen das Symbol auf Karten eingef\u00FCgt werden kann. Wenn der Grundstamm z.B. \u201Acore\u2018 ist, gibt es die folgenden Tags\:

<cores> \: F\u00FCgt ein kleines Symbol ein
<corem> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein
<corel> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein

Ge\u00F6ffnete Registerkarten m\u00FCssen erst geschlossen und wieder ge\u00F6ffnet werden, damit diese \u00C4nderungen wirksam werden. -AHLCG-LocIcon-Hourglass=Sanduhr -AHLCG-VictoryTip1=Offizielle Schl\u00FCsselworte\:\nSieg X -AHLCG-Pref-DefaultCollection=Standard-Erweiterung\: -AHLCG-Skill-Combat=Kampf -AHLCG-RulesTip3=----- VERF\u00DCGBARE TAGS -----\n
...
Kapitel-\u00DCberschrift\n
...
Absatz-\u00DCberschrift\n\n Aufl\u00F6sungs-Kasten\n Einzelspiel-Kasten\n\nbracket \: Zeigt die Verzierung oben am Kasten an\nheader \: Zeigt die Standard-\u00DCberschrift des Kastens an\n\n oder
beenden den Kasten (mit Verzierung)\n\nBeispiel\: ... \n\n Aufz\u00E4hlungspunkt in der Aufl\u00F6sung -AHLCG-AgentsOfHastur=Anh\u00E4nger von Hastur -AHLCG-RulesTip2=----- VERF\u00DCGBARE TAGS -----\n Aktion\n Reaktion\n Freie Aktion\n\n Enth\u00FCllung\n Erzwungen\n Ermittlungsziel\n\n Einzigartig\n Pro Ermittler\n\n Aufz\u00E4hlungspunkt\n Tabulatorzeichen\nf\u00FCr Aufz\u00E4hlungspunkte\n\n Aufl\u00F6sungspfeil + A\n Ende der Aufl\u00F6sung\n\n Merkmal\n Horizontaler Abstand\n Vertikaler Abstand\n Kleiner vertikaler\nAbstand -AHLCG-RulesTip1=----- VERF\u00DCGBARE TAGS -----\n Kartenname\n\n W\u00E4chter\n Sucher\n Schurke\n Mystiker\n \u00DCberlebender\n\n Willenskraft\n Intellekt\n Kampf\n Beweglichkeit\n Joker\n\n Sch\u00E4del\n Kultist\n Tafel\n \u00C4lteres Wesen\n \u00C4lteres Zeichen\n Tentakel\n\nDie Tags f\u00FCr die Symbole der Begegnungssets und\nErweiterungen sind im Bereich \u201EArkham Horror\: Das\nKartenspiel\u201C unter Bearbeiten->Optionen aufgef\u00FChrt.\nH\u00E4nge an die Tags ein 's' f\u00FCr ein kleines Symbol, ein\n'm' f\u00FCr ein mittelgro\u00DFes Symbol und ein 'l' f\u00FCr ein\ngro\u00DFes Symbol an.\nBeispiele\: , , -AHLCG-Dunwich=Dunwich -AHLCG-TheHouseAlwaysWins=Das Haus gewinnt immer -AHLCG-DeckRestrictions=Deckbau-Einschr\u00E4nkungen -AHLCG-Class-Weakness=Schw\u00E4che -AHLCG-LeftTop=Links / Oben -AHLCG-Collection=Erweiterung -AHLCG-Tablet=Tafel -AHLCG-Type=Typ -AHLCG-ThePallidMask=Die bleiche Maske -AHLCG-Nightgaunts=Dunkeld\u00FCrre -AHLCG-AgendaNumber=Agenda-Nummer -AHLCG-RightBottom=Rechts / Unten -AHLCG-Sanity-None=Keine -AHLCG-Stamina=Ausdauer -AHLCG-ActLocation=Szene / Ort -AHLCG-Skill-Willpower=Willenskraft -AHLCG-ActNumber=Szenennummer -AHLCG-Pref-AddSet=Begegnungsset erstellen -AHLCG-ElderThing=\u00C4lteres Wesen -AHLCG-Pref-DefaultValues=Standardwerte -AHLCG-DimCarcosa=Finsteres Carcosa -AHLCG-Page=Seite -AHLCG-TheMidnightMasks=Die Mitternachtsmasken -AHLCG-CarnevaleOfHorrorsE=Karneval des Schreckens -AHLCG-Hauntings=Heimsuchungen -AHLCG-Skull=Sch\u00E4del -AHLCG-CurseOfTheRougarouE=Der Fluch des Rougarou -AHLCG-Pref-Icon=Dateipfad -AHLCG-TheVortexAbove=Der Wirbel am Himmel -AHLCG-Cost=Kosten -AHLCG-Pref-UserSets=Eigene Begegnungssets\: -AHLCG-Connections=Verbindungen -AHLCG-TreacheryStory=Verrat (Storyschw\u00E4che) -AHLCG-Guide-TopLarge=Oben, gro\u00DF -AHLCG-LockedDoors=Verschlossene T\u00FCren -AHLCG-Slot-2Arcane=2 Arkane -AHLCG-EncounterSet=Begegnungsset -AHLCG-Pref-Select=Ausw\u00E4hlen... -AHLCG-Whippoorwills=Ziegenmelker -AHLCG-AgendaStory=Geschichte -AHLCG-CustomCollection=Eigene Erweiterung -AHLCG-DarkCult=Dunkler Kult -AHLCG-Part=Teil -AHLCG-LocIcon-Slash=Linie -AHLCG-Guide-BottomRightCorner=Unten-rechts, \u00FCber Eck -AHLCG-LocIcon-CopyFront=Wie vorne -AHLCG-CustomEncounterSet=Eigenes Begegnungsset -AHLCG-StoryAsset=Handlung / Storyvorteil -AHLCG-Pref-AddCollection=Erweiterung erstellen -AHLCG-Flavor=Stimmungstext -AHLCG-Front=Vorderseite -AHLCG-Class-Guardian=W\u00E4chter -AHLCG-BishopsThralls=Bishops seelenlose Diener -AHLCG-LocIcon-Star=Stern -AHLCG-Share=Teilen -AHLCG-Set=Begegnungsset -AHLCG-Guide-RightLarge=Rechts, gro\u00DF -AHLCG-Skill-None=Keins -AHLCG-EnemyEnemy=Gegner / Gegner -AHLCG-Slot-1Arcane=1 Arkaner -AHLCG-CurseOfTheRougarou=Der Fluch des Rougarou -AHLCG-Delusions=Wahnvorstellungen -AHLCG-KeywordsTip1=Offizielle Schl\u00FCsselworte\:\nAnwendungen (X \u201EArt\u201C), Au\u00DFergew\u00F6hnlich, Dauerhaft, Schnell, Verborgen, Wagnis,\nZur\u00FCckschlagen\n\n----- VERF\u00DCGBARE TAGS -----\n
 Beute\n Erscheinen
-AHLCG-Guide-Title=Titel
-AHLCG-Skill-Agility=Beweglichkeit
-AHLCG-Left=Links
-AHLCG-Skill=Fertigkeit
-AHLCG-Pref-CheckCollections=Haken bei markieren Erweiterungen setzen
-AHLCG-CultOfUmordhoth=Kult von Um\u00F4rdhoth
-AHLCG-EnemyEncounter=Gegner (Begegnung)
-AHLCG-TheMiskatonicMuseum=Das Miskatonic-Museum
-AHLCG-Keywords=Schl\u00FCsselworte
-AHLCG-CultOfTheYellowSign=Kult des gelben Zeichens
-AHLCG-Scenario-Title=Titel
-AHLCG-TheDevourerBelow=Der Verschlinger aus der Tiefe
-AHLCG-StrikingFear=L\u00E4hmende Angst
-AHLCG-BadLuck=Pech
-AHLCG-ScenarioInformation=Szenario-Regeln
-AHLCG-Pref-Cycle=Erweiterung
-AHLCG-CurtainCall=Ruf vor den Vorhang
-AHLCG-StoryTreachery=Handlung / Verrat
-AHLCG-LocIcon-Diamond=Karo
-AHLCG-Subtitle=Untertitel
-AHLCG-AssetAsset=Vorteil / Vorteil
-AHLCG-AgendaEnemy=Agenda / Gegner
-AHLCG-Evade=Entkommen-Wert
-AHLCG-LocIcon-Moon=Mond
-AHLCG-Traits=Merkmale
-AHLCG-BasicData=Grundwerte
-AHLCG-UndimensionedAndUnseen=Gestaltlos und unsichtbar
-AHLCG-Pref-EncounterSets=Begegnungssets
-AHLCG-Pref-UserCollections=Eigene Erweiterungen\:
-AHLCG-Ghouls=Ghule
-AHLCG-Class-Survivor=\u00DCberlebender
-AHLCG-Class-Rogue=Schurke
-AHLCG-Scenario-Resolution=Aufl\u00F6sung
-AHLCG-Back=R\u00FCckseite
-AHLCG-Skill-Wild=Joker
-AHLCG-CopyrightTip1=----- VERF\u00DCGBARE TAGS -----\n Copyright
-AHLCG-LocIcon-Triangle=Dreieck
-AHLCG-Pref-Tag=Tag
-AHLCG-Pref-AddCustomSet=Eigenes Begegnungsset hinzuf\u00FCgen\:
-AHLCG-AgentsOfShubNiggurath=Anh\u00E4nger von Shub-Niggurath
-AHLCG-Health=Ausdauer
-AHLCG-Pref-StandardSets=Offizielle Begegnungssets\:
-AHLCG-LocIcon-T=T
-AHLCG-DecayAndFilth=Verfall und Schmutz
-AHLCG-Clues=Hinweise
-AHLCG-Pref-UncheckSets=Haken bei markieren Sets entfernen
-AHLCG-Pref-Image=Bild
-AHLCG-Right=Rechts
-AHLCG-AssetStory=Storyvorteil
-AHLCG-ExtracurricularActivity=Aktivit\u00E4ten au\u00DFerhalb des Lehrplans
-AHLCG-Guide-TopLeftMedium=Oben-links, mittelgro\u00DF
-AHLCG-Pref-PermanentlyRemoveCollections=Sollen die markierten Erweiterungen wirklich unwiederbringlich gel\u00F6scht werden?
-AHLCG-TreacheryEncounter=Verrat (Begegnung)
-AHLCG-Pref-Name=Name
-AHLCG-APhantomOfTruth=Ein Phantom der Wahrheit
-AHLCG-Event=Ereignis
-AHLCG-BloodOnTheAltar=Blut auf dem Altar
-AHLCG-WhereDoomAwaits=Wo das Verderben wartet
-AHLCG-StoryEnemy=Handlung / Gegner
-AHLCG-Attack=Kampfwert
-AHLCG-InhabitantsOfCarcosa=Bewohner von Carcosa
-AHLCG-WknType-Weakness=Schw\u00E4che
-AHLCG-Sorcery=Zauberei
-AHLCG-Rats=Rattenschwarm
-AHLCG-Scenario-Portrait=Bild
-AHLCG-Class=Klasse
-AHLCG-Slot=Slot
-AHLCG-Guide-BottomLeftMedium=Unten-links, mittelgro\u00DF
-AHLCG-Shroud=Schleier
-AHLCG-Pref-RemoveSets=Begegnungssets l\u00F6schen
-AHLCG-TheLastKing=Der letzte K\u00F6nig
-AHLCG-General=Allgemeines
-AHLCG-TheEssexCountyExpress=Der Essex-County-Express
-AHLCG-AgendaPortrait=Agenda / Gro\u00DFbild
-AHLCG-ArmitagesFate=Armitages Schicksal
-AHLCG-Portrait=Bild
-AHLCG-EnemyWeakness=Gegner (Schw\u00E4che)
-AHLCG-NaomisCrew=Naomis Truppe
-AHLCG-CoreSet=Grundspiel
-AHLCG-Asset=Vorteil
-AHLCG-ThePathToCarcosa=Der Pfad nach Carcosa
-AHLCG-Back-Encounter=Begegnungskarte
-AHLCG-Byakhee=Byakhee
-AHLCG-ArkhamHorrorLCG=Arkham Horror\: Das Kartenspiel
-AHLCG-TheStranger=Der Fremde
-AHLCG-Pref-DeleteSets=Markierte Sets l\u00F6schen
-AHLCG-StrangeEons=Strange Eons
-AHLCG-Act=Szene
-AHLCG-ScenarioDeckID=Szenariodeck-ID
-AHLCG-Pref-AddCustomCollection=Eigene Erweiterung hinzuf\u00FCgen\:
-AHLCG-Mirror=Spiegeln
-AHLCG-WknType-InvestigatorWeakness=Ermitter-Schw\u00E4che
-AHLCG-Slot-Accessory=Zubeh\u00F6r
-AHLCG-CollectionNumber=Nummer
-AHLCG-SetNumber=Nummer
-AHLCG-Guide-LeftLarge=Links, gro\u00DF
-AHLCG-LocIcon-Empty=Leer
-AHLCG-Horror=Horror
-AHLCG-Slot-Ally=Verb\u00FCndeter
-AHLCG-AdditionalRequirements=Zus\u00E4tzliche Voraussetzungen
-AHLCG-Orientation-Reversed=Spiegelverkehrt
-AHLCG-Class-Mystic=Mystiker
-AHLCG-Guide-TopRightMedium=Oben-rechts, mittelgro\u00DF
-AHLCG-Pref-RemoveCollections=Erweiterungen l\u00F6schen
-AHLCG-Artist=K\u00FCnstler
-AHLCG-Class-Seeker=Sucher
-AHLCG-Story=Geschichte
-AHLCG-TheDunwichLegacy=Das Verm\u00E4chtnis von Dunwich
-AHLCG-ActStory=Geschichte
-AHLCG-Class-Neutral=Neutral
-AHLCG-AgendaStoryAsset=Agenda / Storyvorteil
-AHLCG-TheGathering=Die Zusammenkunft
-AHLCG-LocIcon-None=Keine
-AHLCG-Header=\u00DCberschrift
-AHLCG-Level-None=Keine
-AHLCG-DeckSize=Deckgr\u00F6\u00DFe
-AHLCG-Orientation-Standard=Normal
-AHLCG-Sanity=Geistige Gesundheit
-AHLCG-Copyright=Copyright
-AHLCG-EchoesOfThePast=Widerhall aus der Vergangenheit
-AHLCG-Cultist=Kultist
-AHLCG-Pref-DefaultSet=Standard-Begegnungsset\:
-AHLCG-HideousAbominations=Gr\u00E4ssliche Abscheulichkeiten
-AHLCG-Guide-Empty=Ohne Titel
-AHLCG-DeckOptions=Deckbau-Optionen
-AHLCG-Victory=Siegpunkte
-AHLCG-Guide-None=Kein Bild
-AHLCG-AgendaTreachery=Agenda / Verrat
-AHLCG-TheFloodBelow=Die Flut darunter
-AHLCG-AssetStoryAsset=Storyvorteil / Storyvorteil
-AHLCG-LocIcon-DoubleSlash=Zwei Linien
-AHLCG-EnemyPortrait=Gegner / Gro\u00DFbild
-AHLCG-Slot-1Hand=1 Hand
-AHLCG-Pref-DeleteCollections=Markierte Erweiterungen l\u00F6schen
-AHLCG-EvilPortents=B\u00F6se Vorzeichen
-AHLCG-Doom=Verderben
-AHLCG-Rules=Regeltext
-AHLCG-AgendaLocation=Agenda / Ort
-AHLCG-PrefEncounterTip=Legt fest, welche Begegnungssets im Auswahlmen\u00FC der Spielkomponenten angezeigt werden.

Name\: Der Name des Begegnungssets
Erweiterung\: Der Name der Erweiterung, die das Set enth\u00E4lt
Dateipfad\: Der Dateipfad des Symbols eines selbst gemachten Begegnungssets
Tag\: Der Grundstamm f\u00FCr die Tags, mit denen das Symbol auf Karten eingef\u00FCgt werden kann. Wenn der Grundstamm z.B. \u201Arats\u2018 ist, gibt es die folgenden Tags\:

<ratss> \: F\u00FCgt ein kleines Symbol ein
<ratsm> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein
<ratsl> \: F\u00FCgt ein gro\u00DFes Symbol ein

Ge\u00F6ffnete Registerkarten m\u00FCssen erst geschlossen und wieder ge\u00F6ffnet werden, damit diese \u00C4nderungen wirksam werden. -AHLCG-Location=Ort -AHLCG-Guide-BottomLarge=Unten, gro\u00DF -AHLCG-HastursGift=Hasturs Gabe -AHLCG-Damage=Schaden -AHLCG-Position=Position -AHLCG-LocIcon-Circle=Kreis -AHLCG-TreacheryWeakness=Verrat (Schw\u00E4che) -AHLCG-AssetStoryPortrait=Storyvorteil / Gro\u00DFbild -AHLCG-Slot-None=Keins -AHLCG-Pref-UncheckCollections=Haken bei markieren Erweiterungen entfernen -AHLCG-MiniInvestigator=Kleine Ermittlerkarte -AHLCG-Back-Player=Spielerkarte -AHLCG-Pref-StandardCollections=Offizielle Erweiterungen\: -AHLCG-Guide-TopLeftCorner=Oben-links \u00FCber Eck -AHLCG-CampaignGuide75=Kampagnenleitfaden (19cm x 19cm) -AHLCG-TheBeyond=Das Jenseits -AHLCG-Guide-TopRightSmall=Oben-rechts, klein -AHLCG-StoryLocation=Handlung / Ort -AHLCG-ChillingCold=Grabesk\u00E4lte -AHLCG-LocIcon-Heart=Herz -AHLCG-Guide-BottomRightMedium=Unten-rechts, mittelgro\u00DF -AHLCG-Options=Optionen -AHLCG-CarnevaleOfHorrors=Karneval des Schreckens -AHLCG=Arkham Horror\: Das Kartenspiel -AHLCG-LostInTimeAndSpace=Verloren in Zeit und Raum -AHLCG-LocIcon-Square=Quadrat -AHLCG-Skill-Intellect=Intellekt -AHLCG-TheUnspeakableOath=Der unaussprechliche Eid -AHLCG-Guide-TopLeftSmall=Oben-links, klein -AHLCG-LocIcon-Cross=Kreuz -AHLCG-Portraits=Bilder -AHLCG-Spacing=Abstand -AHLCG-AgentsOfCthulhu=Anh\u00E4nger von Cthulhu -AHLCG-Guide-BottomLeftCorner=Unten-links, \u00FCber Eck -AHLCG-BlackStarsRise=Die schwarzen Sterne gehen auf -AHLCG-CopyrightTitle=Copyright-Informationen +#AHLCG-Interface_de.properties +#Thu Oct 20 20:06:15 EDT 2022 +AHLCG-Pref-Collections=Erweiterungen +AHLCG-Stamina-None=Keine +AHLCG-Guide-BottomRightSmall=Unten-rechts, klein +AHLCG-DeckRequirements=Deckbau-Voraussetzungen +AHLCG-Level=Stufe +AHLCG-Back-Standard=Standard +AHLCG-Slot-2Hands=2 H\u00E4nde +AHLCG-AgentsOfYogSothoth=Anh\u00E4nger von Yog-Sothoth +AHLCG-BeastThralls=Bestiendiener +AHLCG-Icon=Symbol +AHLCG-DecayAndFilth=Verfall und Schmutz +AHLCG-AgendaStandard=Agenda (Normal) +AHLCG-ActStoryAsset=Szene / Storyvorteil +AHLCG-ChaosEffects=Szenario\u00FCbersicht +AHLCG-Guide-BottomLeftSmall=Unten-links, klein +AHLCG-AncientEvils=B\u00F6ses aus uralter Zeit +AHLCG-Slot-Body=K\u00F6rper +AHLCG-TraitsTip4=Offizielle Merkmale (Orte)\:\nAnderswelt, Arkham, Arkham Sanatorium, Au\u00DFerdimensional, Ausstellung, Bahngleis, Clover Club, Dunwich, Durchgang, Erdgeschoss,\nErster Stock, H\u00F6hle, Miskatonic, Paris, Privat, Sentinel Hill, W\u00E4lder, Ver\u00E4ndert, Zentral, Zug, Zweiter Stock +AHLCG-TextScale=Schriftgr\u00F6\u00DFe +AHLCG-Investigator=Ermittler +AHLCG-TraitsTip3=Offizielle Merkmale (Gegner)\:\nAbscheulichkeit, Avatar, Byakhee, Detective, Diener, Dunkeld\u00FCrrer, Dunkles Junges, Elite, Ghul, Gro\u00DFer Alter,\nHumanoid, Kreatur, Krimineller, Kultist, Monster, Shoggothe, Silberloge der D\u00E4mmerung, Spuk, Syndikat,\nTiefes Wesen, Verr\u00FCckt, Yith, Zauberer +AHLCG-TraitsTip2=Offizielle Merkmake (Begegnungskarten/Schw\u00E4chen)\:\nAufgabe, Endzeit, Fluch, Gefahr, Gift, Hindernis, Illegal, Komplott, Macht, Makel, Omen, Pakt, Schrecken,\nSpuk, Taktik, Verletzung, Verw\u00FCnschung, Wahnsinn +AHLCG-Pref-CheckSets=Haken bei markieren Sets setzen +AHLCG-TraitsTip1=Offizielle Merkmale (Spielerkarten)\:\nAngeboren, Assistent, Aufgabe, Beh\u00F6rde, Buch, Detective, Dunwich, Entwickelt, Erkenntnis, Experte, Eztli,\nFalle, Fernkampf, Feuerwaffe, Gefallen, Gegenstand, Geist, Gelassenheit, Gesegnet, Gesellschaft f\u00FCr Geschichte,\nGlaubender, Gl\u00FCcksbringer, Gl\u00FCcksfall, Herumtreiber, Hexe, Humanoid, Illegal, Improvisiert, Instrument, J\u00E4ger,\nKleidung, Kreatur, Krimineller, K\u00FChn, K\u00FCnstler, Lied, M\u00E4zen, Miskatonic, Nahkampf, Okkult, Pakt, Paradox,\nPerformer, Polizei, Relikt, Reporter, Ritual, R\u00FCstung, Schachzug, Schicksalhaft, Schl\u00FCssel, Taktik, Talent,\nTrainiert, Trick, Unbeteiligter, Verbesserung, Verbindung, Verb\u00FCndeter, Verflucht, Verr\u00FCckt, Verschw\u00F6rer,\nVerzweifelt, Veteran, Vorrat, Waffe, Wanderer, W\u00E4rter, Weissagung, Werkzeug, Wissenschaft, Zauber, Zauberer,\nZustand +AHLCG-AccentedStory=Geschichte +AHLCG-AssetStoryEnemy=Storyvorteil / Gegner +AHLCG-WknType-BasicWeakness=Grundschw\u00E4che +AHLCG-Title=Name +AHLCG-TreacheryPortrait=Verrat / Gro\u00DFbild +AHLCG-Pref-PermanentlyRemoveSets=Sollen die markierten Begegnungssets wirklich unwiederbringlich gel\u00F6scht werden? +AHLCG-Guide-TopRightCorner=Oben-rechts, \u00FCber Eck +AHLCG-CampaignGuideA4=Kampagnenleitfaden (210cm x 297cm) +AHLCG-Orientation=Ausrichtung +AHLCG-PrefCollectionTip=Legt fest, welche Erweiterungen im Auswahlmen\u00FC der Spielkomponenten angezeigt werden.

Name\: Der Name der Erweiterung/des Zyklus'
Dateipfad\: Der Dateipfad des Symbols einer selbst gemachten Erweiterung
Tag\: Der Grundstamm f\u00FCr die Tags, mit denen das Symbol auf Karten eingef\u00FCgt werden kann. Wenn der Grundstamm z.B. \u201Acore\u2018 ist, gibt es die folgenden Tags\:

<cores> \: F\u00FCgt ein kleines Symbol ein
<corem> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein
<corel> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein

Ge\u00F6ffnete Registerkarten m\u00FCssen erst geschlossen und wieder ge\u00F6ffnet werden, damit diese \u00C4nderungen wirksam werden. +AHLCG-LocIcon-Hourglass=Sanduhr +AHLCG-VictoryTip1=Offizielle Schl\u00FCsselworte\:\nSieg X +AHLCG-Pref-DefaultCollection=Standard-Erweiterung\: +AHLCG-Skill-Combat=Kampf +AHLCG-RulesTip3=----- VERF\u00DCGBARE TAGS -----\n
...
Kapitel-\u00DCberschrift\n
...
Absatz-\u00DCberschrift\n\n Aufl\u00F6sungs-Kasten\n Einzelspiel-Kasten\n\nbracket \: Zeigt die Verzierung oben am Kasten an\nheader \: Zeigt die Standard-\u00DCberschrift des Kastens an\n\n oder beenden den Kasten (mit Verzierung)\n\nBeispiel\: ... \n\n Aufz\u00E4hlungspunkt in der Aufl\u00F6sung +AHLCG-AgentsOfHastur=Anh\u00E4nger von Hastur +AHLCG-RulesTip2=----- VERF\u00DCGBARE TAGS -----\n Aktion\n Reaktion\n Freie Aktion\n\n Enth\u00FCllung\n Erzwungen\n Ermittlungsziel\n\n Einzigartig\n Pro Ermittler\n\n Aufz\u00E4hlungspunkt\n Tabulatorzeichen\nf\u00FCr Aufz\u00E4hlungspunkte\n\n Aufl\u00F6sungspfeil + A\n Ende der Aufl\u00F6sung\n\n Merkmal\n Horizontaler Abstand\n Vertikaler Abstand\n Kleiner vertikaler\nAbstand +AHLCG-RulesTip1=----- VERF\u00DCGBARE TAGS -----\n Kartenname\n\n W\u00E4chter\n Sucher\n Schurke\n Mystiker\n \u00DCberlebender\n\n Willenskraft\n Intellekt\n Kampf\n Beweglichkeit\n Joker\n\n Sch\u00E4del\n Kultist\n Tafel\n \u00C4lteres Wesen\n \u00C4lteres Zeichen\n Tentakel\n\nDie Tags f\u00FCr die Symbole der Begegnungssets und\nErweiterungen sind im Bereich \u201EArkham Horror\: Das\nKartenspiel\u201C unter Bearbeiten->Optionen aufgef\u00FChrt.\nH\u00E4nge an die Tags ein 's' f\u00FCr ein kleines Symbol, ein\n'm' f\u00FCr ein mittelgro\u00DFes Symbol und ein 'l' f\u00FCr ein\ngro\u00DFes Symbol an.\nBeispiele\: , , +AHLCG-Dunwich=Dunwich +AHLCG-TheHouseAlwaysWins=Das Haus gewinnt immer +AHLCG-DeckRestrictions=Deckbau-Einschr\u00E4nkungen +AHLCG-Class-Weakness=Schw\u00E4che +AHLCG-LeftTop=Links / Oben +AHLCG-Collection=Erweiterung +AHLCG-Tablet=Tafel +AHLCG-Type=Typ +AHLCG-ThePallidMask=Die bleiche Maske +AHLCG-Nightgaunts=Dunkeld\u00FCrre +AHLCG-AgendaNumber=Agenda-Nummer +AHLCG-RightBottom=Rechts / Unten +AHLCG-Sanity-None=Keine +AHLCG-Stamina=Ausdauer +AHLCG-ActLocation=Szene / Ort +AHLCG-Skill-Willpower=Willenskraft +AHLCG-ActNumber=Szenennummer +AHLCG-Pref-AddSet=Begegnungsset erstellen +AHLCG-ElderThing=\u00C4lteres Wesen +AHLCG-Pref-DefaultValues=Standardwerte +AHLCG-DimCarcosa=Finsteres Carcosa +AHLCG-Page=Seite +AHLCG-TheMidnightMasks=Die Mitternachtsmasken +AHLCG-CarnevaleOfHorrorsE=Karneval des Schreckens +AHLCG-Hauntings=Heimsuchungen +AHLCG-Skull=Sch\u00E4del +AHLCG-CurseOfTheRougarouE=Der Fluch des Rougarou +AHLCG-Pref-Icon=Dateipfad +AHLCG-TheVortexAbove=Der Wirbel am Himmel +AHLCG-Cost=Kosten +AHLCG-Pref-UserSets=Eigene Begegnungssets\: +AHLCG-Connections=Verbindungen +AHLCG-TreacheryStory=Verrat (Storyschw\u00E4che) +AHLCG-Guide-TopLarge=Oben, gro\u00DF +AHLCG-LockedDoors=Verschlossene T\u00FCren +AHLCG-Slot-2Arcane=2 Arkane +AHLCG-EncounterSet=Begegnungsset +AHLCG-Pref-Select=Ausw\u00E4hlen... +AHLCG-Whippoorwills=Ziegenmelker +AHLCG-AgendaStory=Geschichte +AHLCG-CustomCollection=Eigene Erweiterung +AHLCG-DarkCult=Dunkler Kult +AHLCG-Part=Teil +AHLCG-LocIcon-Slash=Linie +AHLCG-Guide-BottomRightCorner=Unten-rechts, \u00FCber Eck +AHLCG-LocIcon-CopyFront=Wie vorne +AHLCG-CustomEncounterSet=Eigenes Begegnungsset +AHLCG-StoryAsset=Handlung / Storyvorteil +AHLCG-Pref-AddCollection=Erweiterung erstellen +AHLCG-Flavor=Stimmungstext +AHLCG-Front=Vorderseite +AHLCG-Class-Guardian=W\u00E4chter +AHLCG-BishopsThralls=Bishops seelenlose Diener +AHLCG-LocIcon-Star=Stern +AHLCG-Share=Teilen +AHLCG-Set=Begegnungsset +AHLCG-Guide-RightLarge=Rechts, gro\u00DF +AHLCG-Skill-None=Keins +AHLCG-EnemyEnemy=Gegner / Gegner +AHLCG-Slot-1Arcane=1 Arkaner +AHLCG-CurseOfTheRougarou=Der Fluch des Rougarou +AHLCG-Delusions=Wahnvorstellungen +AHLCG-KeywordsTip1=Offizielle Schl\u00FCsselworte\:\nAnwendungen (X \u201EArt\u201C), Au\u00DFergew\u00F6hnlich, Dauerhaft, Schnell, Verborgen, Wagnis,\nZur\u00FCckschlagen\n\n----- VERF\u00DCGBARE TAGS -----\n
 Beute\n Erscheinen
+AHLCG-Guide-Title=Titel
+AHLCG-Skill-Agility=Beweglichkeit
+AHLCG-Left=Links
+AHLCG-Skill=Fertigkeit
+AHLCG-Pref-CheckCollections=Haken bei markieren Erweiterungen setzen
+AHLCG-CultOfUmordhoth=Kult von Um\u00F4rdhoth
+AHLCG-EnemyEncounter=Gegner (Begegnung)
+AHLCG-TheMiskatonicMuseum=Das Miskatonic-Museum
+AHLCG-Keywords=Schl\u00FCsselworte
+AHLCG-CultOfTheYellowSign=Kult des gelben Zeichens
+AHLCG-Scenario-Title=Titel
+AHLCG-TheDevourerBelow=Der Verschlinger aus der Tiefe
+AHLCG-StrikingFear=L\u00E4hmende Angst
+AHLCG-BadLuck=Pech
+AHLCG-ScenarioInformation=Szenario-Regeln
+AHLCG-Pref-Cycle=Erweiterung
+AHLCG-CurtainCall=Ruf vor den Vorhang
+AHLCG-StoryTreachery=Handlung / Verrat
+AHLCG-LocIcon-Diamond=Karo
+AHLCG-Subtitle=Untertitel
+AHLCG-AssetAsset=Vorteil / Vorteil
+AHLCG-AgendaEnemy=Agenda / Gegner
+AHLCG-Evade=Entkommen-Wert
+AHLCG-LocIcon-Moon=Mond
+AHLCG-Traits=Merkmale
+AHLCG-BasicData=Grundwerte
+AHLCG-UndimensionedAndUnseen=Gestaltlos und unsichtbar
+AHLCG-Pref-EncounterSets=Begegnungssets
+AHLCG-Pref-UserCollections=Eigene Erweiterungen\:
+AHLCG-Ghouls=Ghule
+AHLCG-Class-Survivor=\u00DCberlebender
+AHLCG-Class-Rogue=Schurke
+AHLCG-Scenario-Resolution=Aufl\u00F6sung
+AHLCG-Back=R\u00FCckseite
+AHLCG-Skill-Wild=Joker
+AHLCG-CopyrightTip1=----- VERF\u00DCGBARE TAGS -----\n Copyright
+AHLCG-LocIcon-Triangle=Dreieck
+AHLCG-Pref-Tag=Tag
+AHLCG-Pref-AddCustomSet=Eigenes Begegnungsset hinzuf\u00FCgen\:
+AHLCG-AgentsOfShubNiggurath=Anh\u00E4nger von Shub-Niggurath
+AHLCG-Health=Ausdauer
+AHLCG-Pref-StandardSets=Offizielle Begegnungssets\:
+AHLCG-LocIcon-T=T
+AHLCG-Clues=Hinweise
+AHLCG-Pref-UncheckSets=Haken bei markieren Sets entfernen
+AHLCG-Pref-Image=Bild
+AHLCG-Right=Rechts
+AHLCG-AssetStory=Storyvorteil
+AHLCG-ExtracurricularActivity=Aktivit\u00E4ten au\u00DFerhalb des Lehrplans
+AHLCG-Guide-TopLeftMedium=Oben-links, mittelgro\u00DF
+AHLCG-Pref-PermanentlyRemoveCollections=Sollen die markierten Erweiterungen wirklich unwiederbringlich gel\u00F6scht werden?
+AHLCG-TreacheryEncounter=Verrat (Begegnung)
+AHLCG-Pref-Name=Name
+AHLCG-APhantomOfTruth=Ein Phantom der Wahrheit
+AHLCG-Event=Ereignis
+AHLCG-BloodOnTheAltar=Blut auf dem Altar
+AHLCG-WhereDoomAwaits=Wo das Verderben wartet
+AHLCG-StoryEnemy=Handlung / Gegner
+AHLCG-Attack=Kampfwert
+AHLCG-InhabitantsOfCarcosa=Bewohner von Carcosa
+AHLCG-WknType-Weakness=Schw\u00E4che
+AHLCG-Sorcery=Zauberei
+AHLCG-Rats=Rattenschwarm
+AHLCG-Scenario-Portrait=Bild
+AHLCG-Class=Klasse
+AHLCG-Slot=Slot
+AHLCG-Guide-BottomLeftMedium=Unten-links, mittelgro\u00DF
+AHLCG-Shroud=Schleier
+AHLCG-Pref-RemoveSets=Begegnungssets l\u00F6schen
+AHLCG-TheLastKing=Der letzte K\u00F6nig
+AHLCG-General=Allgemeines
+AHLCG-TheEssexCountyExpress=Der Essex-County-Express
+AHLCG-AgendaPortrait=Agenda / Gro\u00DFbild
+AHLCG-ArmitagesFate=Armitages Schicksal
+AHLCG-Portrait=Bild
+AHLCG-EnemyWeakness=Gegner (Schw\u00E4che)
+AHLCG-NaomisCrew=Naomis Truppe
+AHLCG-CoreSet=Grundspiel
+AHLCG-Asset=Vorteil
+AHLCG-ThePathToCarcosa=Der Pfad nach Carcosa
+AHLCG-Back-Encounter=Begegnungskarte
+AHLCG-Byakhee=Byakhee
+AHLCG-ArkhamHorrorLCG=Arkham Horror\: Das Kartenspiel
+AHLCG-TheStranger=Der Fremde
+AHLCG-Pref-DeleteSets=Markierte Sets l\u00F6schen
+AHLCG-StrangeEons=Strange Eons
+AHLCG-Act=Szene
+AHLCG-ScenarioDeckID=Szenariodeck-ID
+AHLCG-Pref-AddCustomCollection=Eigene Erweiterung hinzuf\u00FCgen\:
+AHLCG-Mirror=Spiegeln
+AHLCG-WknType-InvestigatorWeakness=Ermitter-Schw\u00E4che
+AHLCG-Slot-Accessory=Zubeh\u00F6r
+AHLCG-CollectionNumber=Nummer
+AHLCG-SetNumber=Nummer
+AHLCG-Guide-LeftLarge=Links, gro\u00DF
+AHLCG-LocIcon-Empty=Leer
+AHLCG-Horror=Horror
+AHLCG-Slot-Ally=Verb\u00FCndeter
+AHLCG-AdditionalRequirements=Zus\u00E4tzliche Voraussetzungen
+AHLCG-Orientation-Reversed=Spiegelverkehrt
+AHLCG-Class-Mystic=Mystiker
+AHLCG-Guide-TopRightMedium=Oben-rechts, mittelgro\u00DF
+AHLCG-Pref-RemoveCollections=Erweiterungen l\u00F6schen
+AHLCG-Artist=K\u00FCnstler
+AHLCG-Class-Seeker=Sucher
+AHLCG-Story=Geschichte
+AHLCG-TheDunwichLegacy=Das Verm\u00E4chtnis von Dunwich
+AHLCG-ActStory=Geschichte
+AHLCG-Class-Neutral=Neutral
+AHLCG-AgendaStoryAsset=Agenda / Storyvorteil
+AHLCG-TheGathering=Die Zusammenkunft
+AHLCG-LocIcon-None=Keine
+AHLCG-Header=\u00DCberschrift
+AHLCG-Level-None=Keine
+AHLCG-DeckSize=Deckgr\u00F6\u00DFe
+AHLCG-Orientation-Standard=Normal
+AHLCG-Sanity=Geistige Gesundheit
+AHLCG-Copyright=Copyright
+AHLCG-EchoesOfThePast=Widerhall aus der Vergangenheit
+AHLCG-Cultist=Kultist
+AHLCG-Pref-DefaultSet=Standard-Begegnungsset\:
+AHLCG-HideousAbominations=Gr\u00E4ssliche Abscheulichkeiten
+AHLCG-Guide-Empty=Ohne Titel
+AHLCG-DeckOptions=Deckbau-Optionen
+AHLCG-Victory=Siegpunkte
+AHLCG-Guide-None=Kein Bild
+AHLCG-AgendaTreachery=Agenda / Verrat
+AHLCG-TheFloodBelow=Die Flut darunter
+AHLCG-AssetStoryAsset=Storyvorteil / Storyvorteil
+AHLCG-LocIcon-DoubleSlash=Zwei Linien
+AHLCG-EnemyPortrait=Gegner / Gro\u00DFbild
+AHLCG-Slot-1Hand=1 Hand
+AHLCG-Pref-DeleteCollections=Markierte Erweiterungen l\u00F6schen
+AHLCG-EvilPortents=B\u00F6se Vorzeichen
+AHLCG-Doom=Verderben
+AHLCG-Rules=Regeltext
+AHLCG-AgendaLocation=Agenda / Ort
+AHLCG-PrefEncounterTip=Legt fest, welche Begegnungssets im Auswahlmen\u00FC der Spielkomponenten angezeigt werden.

Name\: Der Name des Begegnungssets
Erweiterung\: Der Name der Erweiterung, die das Set enth\u00E4lt
Dateipfad\: Der Dateipfad des Symbols eines selbst gemachten Begegnungssets
Tag\: Der Grundstamm f\u00FCr die Tags, mit denen das Symbol auf Karten eingef\u00FCgt werden kann. Wenn der Grundstamm z.B. \u201Arats\u2018 ist, gibt es die folgenden Tags\:

<ratss> \: F\u00FCgt ein kleines Symbol ein
<ratsm> \: F\u00FCgt ein mittelgro\u00DFes Symbol ein
<ratsl> \: F\u00FCgt ein gro\u00DFes Symbol ein

Ge\u00F6ffnete Registerkarten m\u00FCssen erst geschlossen und wieder ge\u00F6ffnet werden, damit diese \u00C4nderungen wirksam werden. +AHLCG-Location=Ort +AHLCG-Guide-BottomLarge=Unten, gro\u00DF +AHLCG-HastursGift=Hasturs Gabe +AHLCG-Damage=Schaden +AHLCG-Position=Position +AHLCG-LocIcon-Circle=Kreis +AHLCG-TreacheryWeakness=Verrat (Schw\u00E4che) +AHLCG-AssetStoryPortrait=Storyvorteil / Gro\u00DFbild +AHLCG-Slot-None=Keins +AHLCG-Pref-UncheckCollections=Haken bei markieren Erweiterungen entfernen +AHLCG-MiniInvestigator=Kleine Ermittlerkarte +AHLCG-Back-Player=Spielerkarte +AHLCG-Pref-StandardCollections=Offizielle Erweiterungen\: +AHLCG-Guide-TopLeftCorner=Oben-links \u00FCber Eck +AHLCG-CampaignGuide75=Kampagnenleitfaden (19cm x 19cm) +AHLCG-TheBeyond=Das Jenseits +AHLCG-Guide-TopRightSmall=Oben-rechts, klein +AHLCG-StoryLocation=Handlung / Ort +AHLCG-ChillingCold=Grabesk\u00E4lte +AHLCG-LocIcon-Heart=Herz +AHLCG-Guide-BottomRightMedium=Unten-rechts, mittelgro\u00DF +AHLCG-Options=Optionen +AHLCG-CarnevaleOfHorrors=Karneval des Schreckens +AHLCG=Arkham Horror\: Das Kartenspiel +AHLCG-LostInTimeAndSpace=Verloren in Zeit und Raum +AHLCG-LocIcon-Square=Quadrat +AHLCG-Skill-Intellect=Intellekt +AHLCG-TheUnspeakableOath=Der unaussprechliche Eid +AHLCG-Guide-TopLeftSmall=Oben-links, klein +AHLCG-LocIcon-Cross=Kreuz +AHLCG-Portraits=Bilder +AHLCG-Spacing=Abstand +AHLCG-AgentsOfCthulhu=Anh\u00E4nger von Cthulhu +AHLCG-Guide-BottomLeftCorner=Unten-links, \u00FCber Eck +AHLCG-BlackStarsRise=Die schwarzen Sterne gehen auf +AHLCG-CopyrightTitle=Copyright-Informationen diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_es.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_es.properties index de64d68..09ada4f 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_es.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_es.properties @@ -1,311 +1,284 @@ -#AHLCG-Interface_es.properties -#Tue Feb 27 14:51:05 EST 2018 -AHLCG-ArkhamHorrorLCG=Arkham Horror\: El Juego de Cartas -AHLCG=Arkham Horror\: El Juego de Cartas -AHLCG-Description= - -// tipos -AHLCG-Act = Acto -AHLCG-ActLocation = Acto / Lugar -AHLCG-ActStoryAsset = Acto / Apoyo de historia -AHLCG-AgendaStandard = Plan (est\u00E1ndar) -AHLCG-AgendaPortrait = Plan (imagen) -AHLCG-AgendaEnemy = Plan / Enemigo -AHLCG-AgendaTreachery = Plan / Traici\u00F3n -AHLCG-AgendaLocation = Plan / Lugar -AHLCG-AgendaStoryAsset = Plan / Apoyo de historia -AHLCG-Asset = Apoyo -AHLCG-AssetAsset = Apoyo / Apoyo -AHLCG-AssetStory = Apoyo de historia -AHLCG-AssetStoryAsset = Apoyo de historia / Apoyo -AHLCG-AssetStoryEnemy = Apoyo de historia / Enemigo -AHLCG-AssetStoryPortrait = Apoyo de historia / Imagen -AHLCG-ChaosEffects = Efectos de ficha de Caos -AHLCG-EnemyWeakness = Enemigo (Debilidad) -AHLCG-EnemyEncounter = Enemigo (Encuentro) -AHLCG-EnemyPortrait = Enemigo / Imagen -AHLCG-EnemyEnemy = Enemigo / Enemigo -AHLCG-Event = Evento -AHLCG-Investigator = Investigador -AHLCG-Location = Lugar -AHLCG-MiniInvestigator = Marcador peque\u00F1o de Investigador -AHLCG-ScenarioInformation = Reglas de Campa\u00F1a -AHLCG-Skill = Habilidad -AHLCG-StoryAsset = Historia / Apoyo de historia -AHLCG-StoryEnemy = Historia / Enemigo -AHLCG-StoryLocation = Historia / Lugar -AHLCG-StoryTreachery = Historia / Traici\u00F3n -AHLCG-TreacheryEncounter = Traici\u00F3n (Encuentro) -AHLCG-TreacheryWeakness = Traici\u00F3n (Debilidad) -AHLCG-TreacheryPortrait = Traici\u00F3n / Imagen -AHLCG-CampaignGuide75 = Gu\u00EDa de Campa\u00F1a (7.5"x7.5") - -// interface -AHLCG-Front=Frente -AHLCG-Back=Trasera -AHLCG-General=General -AHLCG-Title=T\u00EDtulo -AHLCG-BasicData=Datos B\u00E1sicos -AHLCG-ActNumber=N\u00FAmero de Acto -AHLCG-Clues=Pistas -AHLCG-CopyrightTitle=Informaci\u00F3n de Copyright -AHLCG-Copyright=Copyright -AHLCG-ActStory=Historia -AHLCG-Spacing=Espaciado -AHLCG-Rules=Texto de juego -AHLCG-Part=Parte -AHLCG-Header=Encabezado -AHLCG-TextScale=Escala de texto -AHLCG-Portrait=Imagen -AHLCG-Mirror=Espejo -AHLCG-Options=Opciones -AHLCG-Artist=Artista -AHLCG-Collection=Colecci\u00F3n -AHLCG-CustomCollection=Colecci\u00F3n personalizada -AHLCG-CollectionNumber=N\u00FAmero -AHLCG-EncounterSet=Conjunto de Encuentros -AHLCG-Set=Conjunto -AHLCG-SetNumber=N\u00FAmero -AHLCG-CustomEncounterSet=Conjunto de Encuentros personalizado -AHLCG-AgendaNumber=N\u00FAmero de Plan -AHLCG-Doom=Perdici\u00F3n -AHLCG-AgendaStory=Historia -AHLCG-AccentedStory=Historia -AHLCG-Subtitle=Subt\u00EDtulo -AHLCG-Class=Clase -AHLCG-Icon=Ic\u00F3no -AHLCG-Cost=Coste -AHLCG-Level=Nivel -AHLCG-Slot=Espacio -AHLCG-Stamina=Salud -AHLCG-Sanity=Cordura -AHLCG-Traits=Rasgos -AHLCG-Keywords=Palabras clave -AHLCG-Flavor=Texto de ambientaci\u00F3n -AHLCG-Victory=Victoria -AHLCG-Skull=Calavera -AHLCG-Cultist=Sectario -AHLCG-Tablet=Tableta -AHLCG-ElderThing=Antiguo -AHLCG-Type=Clase -AHLCG-Page=P\u00E1gina -AHLCG-Portraits=Im\u00E1genes -AHLCG-Attack=Combate -AHLCG-Health=Salud -AHLCG-Evade=Evitar -AHLCG-Damage=Da\u00F1o -AHLCG-Horror=Horror -AHLCG-Story=Historia -AHLCG-DeckSize=Tama\u00F1o de mazo -AHLCG-DeckOptions=Opciones de creaci\u00F3n de mazos -AHLCG-DeckRequirements=Requerimientos de creaci\u00F3n de mazos -AHLCG-DeckRestrictions=Restricciones de creaci\u00F3n de mazos -AHLCG-AdditionalRequirements=Requerimientos adicionales -AHLCG-BackPortrait=Imagen trasera -AHLCG-Shroud=Velo -AHLCG-Connections=Conexiones -AHLCG-Share=Compartir -AHLCG-Left=Izquierda -AHLCG-Right=Derecha -AHLCG-LeftTop=Izquierda / Arriba -AHLCG-RightBottom=Derecha / Abajo -AHLCG-Position=Posici\u00F3n -AHLCG-Orientation= Orientaci\u00F3n -AHLCG-ScenarioDeckID = Identificador del mazo de Escenario - -// list boxes -AHLCG-Class-Guardian=Guardi\u00E1n -AHLCG-Class-Seeker=Buscador -AHLCG-Class-Rogue=Rebelde -AHLCG-Class-Mystic=M\u00EDstico -AHLCG-Class-Survivor=Superviviente -AHLCG-Class-Neutral=Neutral -AHLCG-Class-Weakness=Debilidad - -AHLCG-Skill-None=Ninguna -AHLCG-Skill-Willpower=Voluntad -AHLCG-Skill-Intellect=Intelecto -AHLCG-Skill-Combat=Combate -AHLCG-Skill-Agility=Agilidad -AHLCG-Skill-Wild=Comod\u00EDn - -AHLCG-Slot-None=Ninguno -AHLCG-Slot-Ally=Aliado -AHLCG-Slot-Accessory=Accesorio -AHLCG-Slot-Body=Cuerpo -AHLCG-Slot-1Hand=1 Mano -AHLCG-Slot-2Hands=2 Manos -AHLCG-Slot-1Arcane=1 Arcano -AHLCG-Slot-2Arcane=2 Arcanos - -AHLCG-Stamina-None=Ninguno -AHLCG-Sanity-None=Ninguno -AHLCG-Level-None=Ninguno - -AHLCG-Scenario-Portrait=Imagen -AHLCG-Scenario-Title=T\u00EDtulo -AHLCG-Scenario-Resolution=Resoluci\u00F3n - -AHLCG-LocIcon-CopyFront=Copiar Frente -AHLCG-LocIcon-None=Ninguno -AHLCG-LocIcon-Empty=Vac\u00EDo -AHLCG-LocIcon-Circle=C\u00EDrculo -AHLCG-LocIcon-Square=Cuadrado -AHLCG-LocIcon-Triangle=Tri\u00E1ngulo -AHLCG-LocIcon-Cross=Cruz -AHLCG-LocIcon-Diamond=Rombo -AHLCG-LocIcon-Slash=Gui\u00F3n -AHLCG-LocIcon-T=T -AHLCG-LocIcon-Hourglass=Reloj de Arena -AHLCG-LocIcon-Moon=Luna -AHLCG-LocIcon-DoubleSlash=Gui\u00F3n Doble -AHLCG-LocIcon-Heart=Coraz\u00F3n -AHLCG-LocIcon-Star=Estrella - -AHLCG-WknType-Weakness=Debilidad -AHLCG-WknType-BasicWeakness=Debilidad B\u00E1sica -AHLCG-WknType-InvestigatorWeakness=Debilidad de Investigador - -AHLCG-Back-Standard=Est\u00E1ndar -AHLCG-Back-Player=Jugador -AHLCG-Back-Encounter=Encuentro - -AHLCG-Guide-None=Ninguno -AHLCG-Guide-Title=Titulo -AHLCG-Guide-Empty=Vac\u00EDo -AHLCG-Guide-TopLeftSmall=Arriba izquierda, peque\u00F1o -AHLCG-Guide-TopLeftMedium=Arriba izquierda, medio -AHLCG-Guide-TopLarge=Arriba, grande -AHLCG-Guide-BottomLeftSmall=Abajo izquierda, peque\u00F1o -AHLCG-Guide-BottomLeftMedium=Abajo izquierda, medio -AHLCG-Guide-BottomLarge=Abajo, grande -AHLCG-Guide-LeftLarge=Izquierda, grande -AHLCG-Guide-TopLeftCorner=Arriba izquierda, esquina -AHLCG-Guide-BottomLeftCorner=Abajo izquierda, esquina -AHLCG-Guide-TopRightSmall=Arriba derecha, peque\u00F1o -AHLCG-Guide-TopRightMedium=Arriba derecha, medio -AHLCG-Guide-BottomRightSmall=Abajo derecha, peque\u00F1o -AHLCG-Guide-BottomRightMedium=Abajo derecha, medio -AHLCG-Guide-RightLarge=Derecha, grande -AHLCG-Guide-TopRightCorner=Arriba derecha, esquina -AHLCG-Guide-BottomRightCorner=Abajo derecha, esquina - -AHLCG-Orientation-Standard = est\u00E1ndar -AHLCG-Orientation-Reversed = Reverso - -AHLCG-Pref-Name=Nombre -AHLCG-Pref-Image=Imagen -AHLCG-Pref-Tag=Palabra clave -AHLCG-Pref-Cycle=Ciclo -AHLCG-Pref-Icon=Ic\u00F3no -AHLCG-Pref-EncounterSets=Conjuntos de Encuentros -AHLCG-Pref-Collections=Colecciones - -AHLCG-Pref-DefaultValues=Valores por defecto -AHLCG-Pref-DefaultSet=Conjunto de Encuentros por defecto\: -AHLCG-Pref-DefaultCollection=Colecci\u00F3n por defecto\: -AHLCG-Pref-StandardSets=Conjuntos est\u00E1ndar\: -AHLCG-Pref-CheckSets=Marcar conjuntos seleccionados -AHLCG-Pref-UncheckSets=Desmarcar conjuntos seleccionados -AHLCG-Pref-UserSets=Conjuntos personalizados\: -AHLCG-Pref-DeleteSets=Borrar conjuntos seleccionados -AHLCG-Pref-PermanentlyRemoveSets=\u00BFBorrar permanentemente los conjuntos de Encuentros personalizados seleccionados de la lista? -AHLCG-Pref-RemoveSets=Borrar conjuntos de Encuentros -AHLCG-Pref-Select=Seleccionar... -AHLCG-Pref-AddSet=Agregar conjunto a la lista -AHLCG-Pref-AddCustomSet=Agregar conjunto de Encuentros personalizado\: -AHLCG-Pref-StandardCollections=Colecciones est\u00E1ndar\: -AHLCG-Pref-CheckCollections=Marcar colecciones seleccionadas -AHLCG-Pref-UncheckCollections=Desmarcar colecciones seleccionadas -AHLCG-Pref-UserCollections=Colecciones personalizadas\: -AHLCG-Pref-DeleteCollections=Borrar colecciones seleccionadas -AHLCG-Pref-PermanentlyRemoveCollections=\u00BFBorrar permanentemente las colecciones personalizadas seleccionadas de la lista? -AHLCG-Pref-RemoveCollections=Borrar colecciones -AHLCG-Pref-AddCollection=Agregar colecciones a la lista -AHLCG-Pref-AddCustomCollection=Agregar colecci\u00F3n personalizada\: - -//Collections -AHLCG-StrangeEons=Strange Eons -AHLCG-CoreSet=Juego Base -AHLCG-TheDunwichLegacy=El Legado de Dunwich -AHLCG-ThePathToCarcosa=El Camino a Carcosa -AHLCG-CurseOfTheRougarou=La Maldici\u00F3n del Rougarou -AHLCG-CarnevaleOfHorrors=Carnevale de Horrores - -// encounter sets -AHLCG-APhantomOfTruth =El fantasma de la verdad -AHLCG-AgentsOfCthulhu=Agentes de Cthulhu -AHLCG-AgentsOfHastur=Agentes de Hastur -AHLCG-AgentsOfShubNiggurath=Agentes de Shub-Niggurath -AHLCG-AgentsOfYogSothoth=Agentes de Yog-Sothoth -AHLCG-AncientEvils=Antiguos Males -AHLCG-ArmitagesFate=El Destino de Armitage -AHLCG-BadLuck=Mala Suerte -AHLCG-BeastThralls=Esclavos Animales -AHLCG-BishopsThralls=Esclavos de Bishop -AHLCG-BlackStarsRise =Surgen estrellas negras -AHLCG-BloodOnTheAltar=Sangre en el Altar -AHLCG-Byakhee =Byakhee -AHLCG-CarnevaleOfHorrorsE=Carnevale de Horrores -AHLCG-ChillingCold=Fr\u00EDo Helador -AHLCG-CultOfTheYellowSign=Secta del Signo Amarillo -AHLCG-CultOfUmordhoth=Secta de Um\u00F4rdhoth -AHLCG-CurtainCall=Se Cierra el Tel\u00F3n -AHLCG-CurseOfTheRougarouE = La Maldici\u00F3n del Rougarou -AHLCG-DarkCult=Secta Oscura -AHLCG-DecayAndFilth=Podredumbre e Impurezas -AHLCG-Delusions=Delirios -AHLCG-DimCarcosa =Penumbra Carcosa -AHLCG-Dunwich=Dunwich -AHLCG-EchoesOfThePast=Ecos del Pasado -AHLCG-EvilPortents=Portentos Malignos -AHLCG-ExtracurricularActivity=Actividad Extracurricular -AHLCG-Ghouls=Gules -AHLCG-HastursGift=El Regalo de Hastur -AHLCG-Hauntings=Apariciones -AHLCG-HideousAbominations=Abominaciones Espantosas -AHLCG-InhabitantsOfCarcosa=Habitantes de Carcosa -AHLCG-LockedDoors=Puertas Cerradas -AHLCG-LostInTimeAndSpace=Perdidos en el Tiempo y el Espacio -AHLCG-NaomisCrew=La Banda de Naomi -AHLCG-Nightgaunts=\u00C1ngeles Descarnados -AHLCG-Rats=Ratas -AHLCG-Sorcery=Brujer\u00EDa -AHLCG-StrikingFear=Miedo Impactante -AHLCG-TheBayou=El Bayou -AHLCG-TheBeyond=El M\u00E1s All\u00E1 -AHLCG-TheDevourerBelow=El Devorador de las Profundidades -AHLCG-TheEssexCountyExpress=El Essex County Express -AHLCG-TheFloodBelow =La inundaci\u00F3n de abajo -AHLCG-TheGathering=El Encuentro -AHLCG-TheHouseAlwaysWins=La Casa Siempre Gana -AHLCG-TheLastKing=El \u00DAltimo Rey -AHLCG-TheMidnightMasks=Las M\u00E1scaras de Medianoche -AHLCG-TheMiskatonicMuseum=El Museo Miskatonic -AHLCG-ThePallidMask = *The Pallid Mask** -AHLCG-TheStranger=El Extranjero -AHLCG-TheUnspeakableOath=El Juramento Inconfesable -AHLCG-TheVortexAbove =El v\u00F3rtice de arriba -AHLCG-UndimensionedAndUnseen=Invisibles y Sin Dimensi\u00F3n -AHLCG-WhereDoomAwaits=Donde Aguarda la Perdici\u00F3n -AHLCG-Whippoorwills=Chotacabras - -// tips -AHLCG-TraitsTip1=Rasgos oficiales (cartas de jugador)\:\nAgencia, Aliado, Amuleto, Arma, Arma de fuego, Artista, Canci\u00F3n, Cazador, Ciencia, Conspirador,\nCreyente, Criatura, Criminal, Cuerpo a cuerpo, Detective, Desarrollado, Dunwich, Esp\u00EDritu, Estado,\nExperimentado, Experto, Fortuna, Hechicero, Hechizo, Herramienta, Humanoide, Ilegal, Innato,\nInspiraci\u00F3n, Instrumento, Llave, Miskatonic, Objeto, Pacto, Polic\u00EDa, Protecci\u00F3n, Reliquia,\nReportero, Ritual, Ropa, Suministros, T\u00E1ctica, Talento, Tarea, Tomo, Transe\u00FAnte, Truco, Vagabundo\nAssistant, Composure, Desperate, Favor, Gambit, Historical Society, Lunatic, Occult, Patron,\nPerformer, Veteran, Warden -AHLCG-TraitsTip2=Rasgos oficiales (cartas de encuentro/debilidades)\:\nAugurio, Defecto, Fin de los tiempos, Ilegal, Lesi\u00F3n, Locura, Maldici\u00F3n, Maleficio, Obst\u00E1culo, Pacto,\nPoder, Riesgo, T\u00E1ctica, Tarea, Terror, Veneno\nGeist, Scheme -AHLCG-TraitsTip3=Rasgos oficiales (enemigos)\:\nAbominaci\u00F3n, \u00C1ngel descarnado, Byakhee, Crep\u00FAsculo de Plata, Criatura, Criminal, Detective, \u00C9lite, Gul,\nHechicero, Humanoide, Monstruo, Primigenio, Profundo, Reto\u00F1o oscuro, Sectario, Sindicato, Shoggoth, Yithiano\nGeist, Lunatic, Servitor -AHLCG-TraitsTip4=Rasgos oficiales (lugares)\:\nAlterado, Arkham, Cueva, Central, Clover Club, Dunwich, Exposici\u00F3n, Extradimensional, Miskatonic,\nSobrenatural, Sentinel Hill, Tren, Bosque\nArkham Asylum, Ground Floor, Passageway, Private, Second Floor, Third Floor - -AHLCG-KeywordsTip1=Palabras clave oficiales\:\nDescomunal, R\u00E1pido, Oculto, Cazador, Represalia, Peligro, Permanente, Usos (X tipo)\n\n----- TAGS DISPONIBLES -----\n
 Presa\n Oleada
-
-AHLCG-RulesTip1=----- TAGS DISPONIBLES -----\n Nombre de carta\n\n Guardi\u00E1n\n Buscador\n Rebelde\n M\u00EDstico\n Superviviente\n\n Voluntad\n Intelecto\n Combate\n Agilidad\n Comod\u00EDn\n\n Calavera\n Sectario\n Tableta\n Antiguo\n S\u00EDmbolo Arcano\n Tent\u00E1culos\n\nEncounter set and collection icon tags are listed in the  \nArkham Horror\: The Card Game section in Preferences.\nAdd 's' for a small icon, 'm' for a medium icon, and 'l'\nfor a large icon.\nExamples\: , , 
-AHLCG-RulesTip2=----- TAGS DISPONIBLES -----\n Acci\u00F3n\n Reacci\u00F3n\n Libre\n\n Revelaci\u00F3n\n Obligado\n Objetivo\n\n \u00DAnico\n Por investigador\n\n Vi\u00F1eta\n Espaciado tabulaci\u00F3n para\nsecciones de vi\u00F1eta\n\n Flecha resoluci\u00F3n + R\n Fin resoluci\u00F3n\n\n Rasgo\n Espaciador horizontal\n Espaciador vertical\n Espaciador vertical peque\u00F1o
-AHLCG-RulesTip3=----- TAGS DISPONIBLES -----\n
...
Encabezado secci\u00F3n\n
...
Encabezado secundario\n\n Caja resoluci\u00F3n\n Caja independiente\n\nbracket \: Muestra llave encima de la caja\nheader \: Muestra un encabezado est\u00E1ndar encima de la caja\n\n or Fin caja resaltada (con llaves)\n\nExample\: ... \n\n Vi\u00F1eta resoluci\u00F3n - -AHLCG-VictoryTip1=Palabras clave oficiales\:\nVictoria X - -AHLCG-CopyrightTip1=----- TAGS DISPONIBLES -----\n Copyright - -AHLCG-PrefEncounterTip=Determines which encounter sets will appear in the Encounter set dropdown for each component.

Name\: The name of the set
Cycle\: The name of the cycle containing the set
Icon\: The filename to the icon representing a user encounter set
Tag\: The base used for tags to insert the icon into text areas. If the base is 'rats', the following tags will be available\:

<ratss> \: Inserts a small icon
<ratsm> \: Inserts a medium icon
<ratsl> \: Inserts a large icon

Any open cards will have to be reopened before the changes will take effect. - -AHLCG-PrefCollectionTip=Determines which collections will appear in the Collection dropdown for each component.

Name\: The name of the collection or cycle
Icon\: The filename to the icon representing a user collection
Tag\: The base used for tags to insert the icon into text areas. If the base is 'core', the following tags will be available\:

<cores> \: Inserts a small icon
<corem> \: Inserts a medium icon
<corel> \: Inserts a large icon

Any open cards will have to be reopened before the changes will take effect. \ No newline at end of file +#AHLCG-Interface_es.properties +#Mon Jan 08 19:02:49 EST 2024 +AHLCG-Pref-Collections=Colecciones +AHLCG-Stamina-None=Ninguno +AHLCG-Guide-BottomRightSmall=Abajo derecha, peque\u00F1o +AHLCG-DeckRequirements=Requerimientos de creaci\u00F3n de mazos +AHLCG-Level=Nivel +AHLCG-Back-Standard=Est\u00E1ndar +AHLCG-Slot-2Hands=2 Manos +AHLCG-AgentsOfYogSothoth=Agentes de Yog-Sothoth +AHLCG-BeastThralls=Esclavos Animales +AHLCG-Icon=Ic\u00F3no +AHLCG-DecayAndFilth=Podredumbre e Impurezas +AHLCG-AgendaStandard=Plan (est\u00E1ndar) +AHLCG-ActStoryAsset=Acto / Apoyo de historia +AHLCG-ChaosEffects=Efectos de ficha de Caos +AHLCG-Guide-BottomLeftSmall=Abajo izquierda, peque\u00F1o +AHLCG-AncientEvils=Antiguos Males +//=tips +AHLCG-Slot-Body=Cuerpo +AHLCG-TraitsTip4=Rasgos oficiales (lugares)\:\nAlterado, Arkham, Cueva, Central, Clover Club, Dunwich, Exposici\u00F3n, Extradimensional, Miskatonic,\nSobrenatural, Sentinel Hill, Tren, Bosque\nArkham Asylum, Ground Floor, Passageway, Private, Second Floor, Third Floor +AHLCG-TextScale=Escala de texto +AHLCG-Investigator=Investigador +AHLCG-TraitsTip3=Rasgos oficiales (enemigos)\:\nAbominaci\u00F3n, \u00C1ngel descarnado, Byakhee, Crep\u00FAsculo de Plata, Criatura, Criminal, Detective, \u00C9lite, Gul,\nHechicero, Humanoide, Monstruo, Primigenio, Profundo, Reto\u00F1o oscuro, Sectario, Sindicato, Shoggoth, Yithiano\nGeist, Lunatic, Servitor +AHLCG-TraitsTip2=Rasgos oficiales (cartas de encuentro/debilidades)\:\nAugurio, Defecto, Fin de los tiempos, Ilegal, Lesi\u00F3n, Locura, Maldici\u00F3n, Maleficio, Obst\u00E1culo, Pacto,\nPoder, Riesgo, T\u00E1ctica, Tarea, Terror, Veneno\nGeist, Scheme +AHLCG-Pref-CheckSets=Marcar conjuntos seleccionados +AHLCG-TraitsTip1=Rasgos oficiales (cartas de jugador)\:\nAgencia, Aliado, Amuleto, Arma, Arma de fuego, Artista, Canci\u00F3n, Cazador, Ciencia, Conspirador,\nCreyente, Criatura, Criminal, Cuerpo a cuerpo, Detective, Desarrollado, Dunwich, Esp\u00EDritu, Estado,\nExperimentado, Experto, Fortuna, Hechicero, Hechizo, Herramienta, Humanoide, Ilegal, Innato,\nInspiraci\u00F3n, Instrumento, Llave, Miskatonic, Objeto, Pacto, Polic\u00EDa, Protecci\u00F3n, Reliquia,\nReportero, Ritual, Ropa, Suministros, T\u00E1ctica, Talento, Tarea, Tomo, Transe\u00FAnte, Truco, Vagabundo\nAssistant, Composure, Desperate, Favor, Gambit, Historical Society, Lunatic, Occult, Patron,\nPerformer, Veteran, Warden +AHLCG-AccentedStory=Historia +AHLCG-AssetStoryEnemy=Apoyo de historia / Enemigo +AHLCG-WknType-BasicWeakness=Debilidad B\u00E1sica +AHLCG-Title=T\u00EDtulo +AHLCG-TreacheryPortrait=Traici\u00F3n / Imagen +AHLCG-Pref-PermanentlyRemoveSets=\u00BFBorrar permanentemente los conjuntos de Encuentros personalizados seleccionados de la lista? +AHLCG-Guide-TopRightCorner=Arriba derecha, esquina +AHLCG-Orientation=Orientaci\u00F3n +AHLCG-PrefCollectionTip=Determines which collections will appear in the Collection dropdown for each component.

Name\: The name of the collection or cycle
Icon\: The filename to the icon representing a user collection
Tag\: The base used for tags to insert the icon into text areas. If the base is 'core', the following tags will be available\:

<cores> \: Inserts a small icon
<corem> \: Inserts a medium icon
<corel> \: Inserts a large icon

Any open cards will have to be reopened before the changes will take effect. +AHLCG-LocIcon-Hourglass=Reloj de Arena +AHLCG-VictoryTip1=Palabras clave oficiales\:\nVictoria X +AHLCG-Pref-DefaultCollection=Colecci\u00F3n por defecto\: +AHLCG-Skill-Combat=Combate +AHLCG-RulesTip3=----- TAGS DISPONIBLES -----\n
...
Encabezado secci\u00F3n\n
...
Encabezado secundario\n\n Caja resoluci\u00F3n\n Caja independiente\n\nbracket \: Muestra llave encima de la caja\nheader \: Muestra un encabezado est\u00E1ndar encima de la caja\n\n or Fin caja resaltada (con llaves)\n\nExample\: ... \n\n Vi\u00F1eta resoluci\u00F3n +AHLCG-AgentsOfHastur=Agentes de Hastur +AHLCG-RulesTip2=----- TAGS DISPONIBLES -----\n Acci\u00F3n\n Reacci\u00F3n\n Libre\n\n Revelaci\u00F3n\n Obligado\n Objetivo\n\n \u00DAnico\n Por investigador\n\n Vi\u00F1eta\n Espaciado tabulaci\u00F3n para\nsecciones de vi\u00F1eta\n\n Flecha resoluci\u00F3n + R\n Fin resoluci\u00F3n\n\n Rasgo\n Espaciador horizontal\n Espaciador vertical\n Espaciador vertical peque\u00F1o +AHLCG-RulesTip1=----- TAGS DISPONIBLES -----\n Nombre de carta\n\n Guardi\u00E1n\n Buscador\n Rebelde\n M\u00EDstico\n Superviviente\n\n Voluntad\n Intelecto\n Combate\n Agilidad\n Comod\u00EDn\n\n Calavera\n Sectario\n Tableta\n Antiguo\n S\u00EDmbolo Arcano\n Tent\u00E1culos\n\nEncounter set and collection icon tags are listed in the \nArkham Horror\: The Card Game section in Preferences.\nAdd 's' for a small icon, 'm' for a medium icon, and 'l'\nfor a large icon.\nExamples\: , , +AHLCG-Dunwich=Dunwich +AHLCG-TheHouseAlwaysWins=La Casa Siempre Gana +AHLCG-DeckRestrictions=Restricciones de creaci\u00F3n de mazos +AHLCG-Class-Weakness=Debilidad +AHLCG-LeftTop=Izquierda / Arriba +AHLCG-Collection=Colecci\u00F3n +AHLCG-Tablet=Tableta +AHLCG-Type=Clase +AHLCG-ThePallidMask=*The Pallid Mask** +AHLCG-Nightgaunts=\u00C1ngeles Descarnados +AHLCG-AgendaNumber=N\u00FAmero de Plan +AHLCG-RightBottom=Derecha / Abajo +AHLCG-Sanity-None=Ninguno +AHLCG-Stamina=Salud +AHLCG-ActLocation=Acto / Lugar +AHLCG-Skill-Willpower=Voluntad +AHLCG-ActNumber=N\u00FAmero de Acto +AHLCG-Pref-AddSet=Agregar conjunto a la lista +AHLCG-ElderThing=Antiguo +AHLCG-Pref-DefaultValues=Valores por defecto +AHLCG-DimCarcosa=Penumbra Carcosa +AHLCG-Page=P\u00E1gina +AHLCG-TheMidnightMasks=Las M\u00E1scaras de Medianoche +AHLCG-CarnevaleOfHorrorsE=Carnevale de Horrores +AHLCG-Hauntings=Apariciones +AHLCG-Skull=Calavera +AHLCG-CurseOfTheRougarouE=La Maldici\u00F3n del Rougarou +AHLCG-Pref-Icon=Ic\u00F3no +AHLCG-TheVortexAbove=El v\u00F3rtice de arriba +AHLCG-Cost=Coste +AHLCG-Pref-UserSets=Conjuntos personalizados\: +AHLCG-Connections=Conexiones +AHLCG-Guide-TopLarge=Arriba, grande +AHLCG-LockedDoors=Puertas Cerradas +AHLCG-Slot-2Arcane=2 Arcanos +AHLCG-EncounterSet=Conjunto de Encuentros +AHLCG-Pref-Select=Seleccionar... +AHLCG-Whippoorwills=Chotacabras +AHLCG-AgendaStory=Historia +AHLCG-CustomCollection=Colecci\u00F3n personalizada +AHLCG-DarkCult=Secta Oscura +AHLCG-Part=Parte +AHLCG-LocIcon-Slash=Gui\u00F3n +AHLCG-Guide-BottomRightCorner=Abajo derecha, esquina +AHLCG-LocIcon-CopyFront=Copiar Frente +AHLCG-CustomEncounterSet=Conjunto de Encuentros personalizado +AHLCG-StoryAsset=Historia / Apoyo de historia +AHLCG-Pref-AddCollection=Agregar colecciones a la lista +AHLCG-Flavor=Texto de ambientaci\u00F3n +AHLCG-Front=Frente +AHLCG-Class-Guardian=Guardi\u00E1n +AHLCG-BishopsThralls=Esclavos de Bishop +AHLCG-LocIcon-Star=Estrella +//Collections= +AHLCG-Share=Compartir +AHLCG-Set=Conjunto +AHLCG-Guide-RightLarge=Derecha, grande +AHLCG-Skill-None=Ninguna +AHLCG-EnemyEnemy=Enemigo / Enemigo +AHLCG-Slot-1Arcane=1 Arcano +AHLCG-CurseOfTheRougarou=La Maldici\u00F3n del Rougarou +AHLCG-Delusions=Delirios +AHLCG-KeywordsTip1=Palabras clave oficiales\:\nDescomunal, R\u00E1pido, Oculto, Cazador, Represalia, Peligro, Permanente, Usos (X tipo)\n\n----- TAGS DISPONIBLES -----\n
 Presa\n Oleada
+AHLCG-Guide-Title=Titulo
+AHLCG-TheBayou=El Bayou
+AHLCG-Skill-Agility=Agilidad
+AHLCG-Left=Izquierda
+AHLCG-Skill=Habilidad
+AHLCG-Pref-CheckCollections=Marcar colecciones seleccionadas
+AHLCG-CultOfUmordhoth=Secta de Um\u00F4rdhoth
+AHLCG-EnemyEncounter=Enemigo (Encuentro)
+AHLCG-TheMiskatonicMuseum=El Museo Miskatonic
+AHLCG-BackPortrait=Imagen trasera
+AHLCG-Keywords=Palabras clave
+AHLCG-CultOfTheYellowSign=Secta del Signo Amarillo
+AHLCG-Scenario-Title=T\u00EDtulo
+AHLCG-TheDevourerBelow=El Devorador de las Profundidades
+AHLCG-StrikingFear=Miedo Impactante
+AHLCG-BadLuck=Mala Suerte
+AHLCG-ScenarioInformation=Reglas de Campa\u00F1a
+AHLCG-Pref-Cycle=Ciclo
+AHLCG-CurtainCall=Se Cierra el Tel\u00F3n
+AHLCG-StoryTreachery=Historia / Traici\u00F3n
+AHLCG-LocIcon-Diamond=Rombo
+AHLCG-Subtitle=Subt\u00EDtulo
+AHLCG-AssetAsset=Apoyo / Apoyo
+AHLCG-AgendaEnemy=Plan / Enemigo
+AHLCG-Evade=Evitar
+AHLCG-LocIcon-Moon=Luna
+AHLCG-Traits=Rasgos
+AHLCG-BasicData=Datos B\u00E1sicos
+AHLCG-UndimensionedAndUnseen=Invisibles y Sin Dimensi\u00F3n
+AHLCG-Description=
+AHLCG-Pref-EncounterSets=Conjuntos de Encuentros
+AHLCG-Pref-UserCollections=Colecciones personalizadas\:
+AHLCG-Ghouls=Gules
+AHLCG-Class-Survivor=Superviviente
+AHLCG-Class-Rogue=Rebelde
+AHLCG-Scenario-Resolution=Resoluci\u00F3n
+AHLCG-Skill-Wild=Comod\u00EDn
+AHLCG-Back=Trasera
+AHLCG-CopyrightTip1=----- TAGS DISPONIBLES -----\n Copyright
+AHLCG-LocIcon-Triangle=Tri\u00E1ngulo
+AHLCG-Pref-Tag=Palabra clave
+AHLCG-Pref-AddCustomSet=Agregar conjunto de Encuentros personalizado\:
+AHLCG-AgentsOfShubNiggurath=Agentes de Shub-Niggurath
+AHLCG-Health=Salud
+AHLCG-Pref-StandardSets=Conjuntos est\u00E1ndar\:
+AHLCG-LocIcon-T=T
+AHLCG-Clues=Pistas
+AHLCG-Pref-UncheckSets=Desmarcar conjuntos seleccionados
+AHLCG-Pref-Image=Imagen
+AHLCG-Right=Derecha
+AHLCG-AssetStory=Apoyo de historia
+AHLCG-ExtracurricularActivity=Actividad Extracurricular
+AHLCG-Guide-TopLeftMedium=Arriba izquierda, medio
+AHLCG-Pref-PermanentlyRemoveCollections=\u00BFBorrar permanentemente las colecciones personalizadas seleccionadas de la lista?
+AHLCG-TreacheryEncounter=Traici\u00F3n (Encuentro)
+AHLCG-Pref-Name=Nombre
+AHLCG-APhantomOfTruth=El fantasma de la verdad
+AHLCG-Event=Evento
+AHLCG-BloodOnTheAltar=Sangre en el Altar
+AHLCG-WhereDoomAwaits=Donde Aguarda la Perdici\u00F3n
+AHLCG-StoryEnemy=Historia / Enemigo
+AHLCG-Attack=Combate
+AHLCG-InhabitantsOfCarcosa=Habitantes de Carcosa
+AHLCG-WknType-Weakness=Debilidad
+AHLCG-Sorcery=Brujer\u00EDa
+AHLCG-Rats=Ratas
+AHLCG-Scenario-Portrait=Imagen
+AHLCG-Class=Clase
+AHLCG-Slot=Espacio
+AHLCG-Guide-BottomLeftMedium=Abajo izquierda, medio
+AHLCG-Shroud=Velo
+AHLCG-Pref-RemoveSets=Borrar conjuntos de Encuentros
+AHLCG-TheLastKing=El \u00DAltimo Rey
+AHLCG-General=General
+AHLCG-TheEssexCountyExpress=El Essex County Express
+AHLCG-AgendaPortrait=Plan (imagen)
+AHLCG-ArmitagesFate=El Destino de Armitage
+AHLCG-Portrait=Imagen
+AHLCG-EnemyWeakness=Enemigo (Debilidad)
+AHLCG-NaomisCrew=La Banda de Naomi
+AHLCG-CoreSet=Juego Base
+AHLCG-Asset=Apoyo
+AHLCG-ThePathToCarcosa=El Camino a Carcosa
+AHLCG-Back-Encounter=Encuentro
+AHLCG-Byakhee=Byakhee
+AHLCG-ArkhamHorrorLCG=Arkham Horror\: El Juego de Cartas
+AHLCG-TheStranger=El Extranjero
+AHLCG-Pref-DeleteSets=Borrar conjuntos seleccionados
+AHLCG-StrangeEons=Strange Eons
+AHLCG-Act=Acto
+AHLCG-ScenarioDeckID=Identificador del mazo de Escenario
+AHLCG-Pref-AddCustomCollection=Agregar colecci\u00F3n personalizada\:
+AHLCG-Mirror=Espejo
+AHLCG-WknType-InvestigatorWeakness=Debilidad de Investigador
+AHLCG-Slot-Accessory=Accesorio
+AHLCG-CollectionNumber=N\u00FAmero
+AHLCG-SetNumber=N\u00FAmero
+AHLCG-Guide-LeftLarge=Izquierda, grande
+AHLCG-LocIcon-Empty=Vac\u00EDo
+AHLCG-Horror=Horror
+AHLCG-Slot-Ally=Aliado
+AHLCG-AdditionalRequirements=Requerimientos adicionales
+AHLCG-Orientation-Reversed=Reverso
+AHLCG-Class-Mystic=M\u00EDstico
+AHLCG-Guide-TopRightMedium=Arriba derecha, medio
+AHLCG-Pref-RemoveCollections=Borrar colecciones
+AHLCG-Artist=Artista
+AHLCG-Class-Seeker=Buscador
+AHLCG-Story=Historia
+AHLCG-TheDunwichLegacy=El Legado de Dunwich
+AHLCG-ActStory=Historia
+AHLCG-Class-Neutral=Neutral
+AHLCG-AgendaStoryAsset=Plan / Apoyo de historia
+AHLCG-TheGathering=El Encuentro
+AHLCG-LocIcon-None=Ninguno
+AHLCG-Header=Encabezado
+AHLCG-Level-None=Ninguno
+AHLCG-DeckSize=Tama\u00F1o de mazo
+AHLCG-Orientation-Standard=est\u00E1ndar
+AHLCG-Sanity=Cordura
+AHLCG-Copyright=Copyright
+AHLCG-EchoesOfThePast=Ecos del Pasado
+AHLCG-Cultist=Sectario
+AHLCG-Pref-DefaultSet=Conjunto de Encuentros por defecto\:
+AHLCG-HideousAbominations=Abominaciones Espantosas
+AHLCG-Guide-Empty=Vac\u00EDo
+AHLCG-DeckOptions=Opciones de creaci\u00F3n de mazos
+AHLCG-Victory=Victoria
+AHLCG-Guide-None=Ninguno
+AHLCG-AgendaTreachery=Plan / Traici\u00F3n
+AHLCG-TheFloodBelow=La inundaci\u00F3n de abajo
+AHLCG-AssetStoryAsset=Apoyo de historia / Apoyo
+AHLCG-LocIcon-DoubleSlash=Gui\u00F3n Doble
+AHLCG-EnemyPortrait=Enemigo / Imagen
+AHLCG-Slot-1Hand=1 Mano
+AHLCG-Pref-DeleteCollections=Borrar colecciones seleccionadas
+AHLCG-EvilPortents=Portentos Malignos
+AHLCG-Doom=Perdici\u00F3n
+AHLCG-Rules=Texto de juego
+AHLCG-AgendaLocation=Plan / Lugar
+AHLCG-PrefEncounterTip=Determines which encounter sets will appear in the Encounter set dropdown for each component.

Name\: The name of the set
Cycle\: The name of the cycle containing the set
Icon\: The filename to the icon representing a user encounter set
Tag\: The base used for tags to insert the icon into text areas. If the base is 'rats', the following tags will be available\:

<ratss> \: Inserts a small icon
<ratsm> \: Inserts a medium icon
<ratsl> \: Inserts a large icon

Any open cards will have to be reopened before the changes will take effect. +AHLCG-Location=Lugar +AHLCG-Guide-BottomLarge=Abajo, grande +AHLCG-HastursGift=El Regalo de Hastur +AHLCG-Damage=Da\u00F1o +AHLCG-Position=Posici\u00F3n +AHLCG-LocIcon-Circle=C\u00EDrculo +AHLCG-TreacheryWeakness=Traici\u00F3n (Debilidad) +AHLCG-AssetStoryPortrait=Apoyo de historia / Imagen +AHLCG-Slot-None=Ninguno +AHLCG-Pref-UncheckCollections=Desmarcar colecciones seleccionadas +AHLCG-MiniInvestigator=Marcador peque\u00F1o de Investigador +AHLCG-Back-Player=Jugador +AHLCG-Pref-StandardCollections=Colecciones est\u00E1ndar\: +AHLCG-Guide-TopLeftCorner=Arriba izquierda, esquina +AHLCG-CampaignGuide75=Gu\u00EDa de Campa\u00F1a (7.5"x7.5") +AHLCG-TheBeyond=El M\u00E1s All\u00E1 +AHLCG-Guide-TopRightSmall=Arriba derecha, peque\u00F1o +AHLCG-StoryLocation=Historia / Lugar +AHLCG-ChillingCold=Fr\u00EDo Helador +AHLCG-LocIcon-Heart=Coraz\u00F3n +AHLCG-Guide-BottomRightMedium=Abajo derecha, medio +AHLCG-Options=Opciones +AHLCG-CarnevaleOfHorrors=Carnevale de Horrores +AHLCG=Arkham Horror\: El Juego de Cartas +AHLCG-LostInTimeAndSpace=Perdidos en el Tiempo y el Espacio +AHLCG-LocIcon-Square=Cuadrado +AHLCG-Skill-Intellect=Intelecto +AHLCG-TheUnspeakableOath=El Juramento Inconfesable +AHLCG-Guide-TopLeftSmall=Arriba izquierda, peque\u00F1o +AHLCG-LocIcon-Cross=Cruz +AHLCG-Portraits=Im\u00E1genes +AHLCG-Spacing=Espaciado +AHLCG-AgentsOfCthulhu=Agentes de Cthulhu +AHLCG-Guide-BottomLeftCorner=Abajo izquierda, esquina +AHLCG-BlackStarsRise=Surgen estrellas negras +AHLCG-CopyrightTitle=Informaci\u00F3n de Copyright diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_fr.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_fr.properties index 82655a3..406b129 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_fr.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_fr.properties @@ -1,476 +1,416 @@ #AHLCG-Interface_fr.properties -#Tue Apr 30 14:38:35 EDT 2019 +#Mon Nov 20 12:31:24 EST 2023 AHLCG-Guide-BottomRightMedium=Bas Droite, moyen +AHLCG-LocIcon-DoubleSlashAlt=Double Slash (Alt) +AHLCG-StoryInvestigator=Investigateur d'Histoire AHLCG-Page=Page AHLCG-Sanity=Sanity AHLCG-Guide-BottomRightSmall=Bas Droite, petit AHLCG-TextScale=Echelle de Texte +AHLCG-TheFloodBelow=Le D\u00e9luge en Dessous AHLCG-Pref-Select=Selectioner... -AHLCG-TheFloodBelow=Le D\u00E9luge en Dessous AHLCG-Guide-BottomLeftCorner=Bas Gauche, coin -AHLCG-Evade=Agilit\u00E9 -AHLCG-PnakoticBrotherhood=Confr\u00E9rie Pnakotique +AHLCG-Evade=Agilit\u00e9 +AHLCG-PnakoticBrotherhood=Confr\u00e9rie Pnakotique +AHLCG-AgentsOfAzathoth=Agents d'Azathoth AHLCG-Copyright=Copyright //=tips AHLCG-AgentsOfCthulhu=Agents de Cthulhu +AHLCG-SpectralPredators=Predateurs Spectraux +AHLCG-TheLabyrinthsOfLunacy=Les Labyrinthes de la Folie AHLCG-CultOfUmordhoth=Culte d'Umordhoth +AHLCG-AnettesCoven=La Congr\u00e9gation d'Anette AHLCG-ElderThing=Choses anciennes -AHLCG-ThePallidMask=Le Masque Bl\u00EAme -AHLCG-TheDevourerBelow=Le d\u00E9voreur du dessous -AHLCG-Location=Lieu +AHLCG-ThePallidMask=Le Masque Bl\u00eame +AHLCG-TheDevourerBelow=Le d\u00e9voreur du dessous +AHLCG-BrotherhoodOfTheBeast=Fraternit\u00e9 de la Bete AHLCG-Pref-Cycle=Cycle -AHLCG-LocIcon-T=T +AHLCG-Location=Lieu AHLCG-Icon=Icone +AHLCG-LocIcon-T=T AHLCG-Portraits=Portraits -AHLCG-CustomCollection=Collection personnalis\u00E9e +AHLCG-CustomCollection=Collection personnalis\u00e9e AHLCG-ActNumber=Numero d'acte +AHLCG-Class2=Double Classe +AHLCG-GuardiansOfTheAbyss=Gardiens de l'Abime AHLCG-Guide-None=Aucun AHLCG-DarkCult=Sombre Culte +AHLCG-TheWagesOfSin=Le Salaire du P\u00e9ch\u00e9 AHLCG-TemporalFlux=Flux Temporels -AHLCG-StoryTreachery=Histoire / Tra\u00EEtrise +AHLCG-DecayAndFilth=Salet\u00e9s et immondices +AHLCG-Witchcraft=Pratiques Occultes +AHLCG-LocIcon-Clover=Tr\u00e9fle +AHLCG-DisappearanceAtTheTwilightEstate=Disparition dans la Demeure du Cr\u00e9puscule +AHLCG-StoryTreachery=Histoire / Tra\u00eetrise +AHLCG-HastursEnvoys=Envoy\u00e9s d'Hastur AHLCG-LocIcon-Cross=Croix +AHLCG-TheDevourersCult=Le Culte du D\u00e9voreur AHLCG-PillarsOfJudgment=Pilliers du Jugement AHLCG-Serpents=Serpents +AHLCG-InTheClutchesOfChaos=Dans les Griffes du Chaos AHLCG-AgentsOfYogSothoth=Agents de Yog-Sothoth AHLCG-Pref-UserCollections=Collections de l'utilisateur\: AHLCG-Header=Header +AHLCG-ReturnToAPhantomOfTruth=Renouveau - Le Spectre de la v\u00e9rit\u00e9 AHLCG-CopyrightTitle=Copyright information AHLCG-Rules=Texte de Jeu +AHLCG-AlienInterference=Ing\u00e9rence Extraterrestre AHLCG-TheMidnightMasks=Les Masques de Minuit +AHLCG-ReturnToCurtainCall=Renouveau - Lever de rideau AHLCG-GuardiansOfTime=Gardiens du Temps AHLCG-Slot-2Arcane=2 Arcanes AHLCG-Dunwich=Dunwich AHLCG-BloodOnTheAltar=Du Sang sur l'Autel -AHLCG-UndimensionedAndUnseen=Aux fronti\u00E8res du visible +AHLCG-UndimensionedAndUnseen=Aux fronti\u00e8res du visible AHLCG-Orientation=Orientation AHLCG-StoryAsset=Histoire / Histoire Soutien -AHLCG-Rainforest=For\u00EAt Vierge +AHLCG-Class-None=Aucune +AHLCG-Rainforest=For\u00eat Vierge AHLCG-Guide-TopRightCorner=Haut Droite, coin -AHLCG-Pref-AddCustomSet=Ajouter set rencontre personnalis\u00E9\: +AHLCG-Pref-AddCustomSet=Ajouter set rencontre personnalis\u00e9\: AHLCG-YigsVenom=Venin de Yig AHLCG-Horror=Horreur AHLCG-Subtitle=Sous-Titre +AHLCG-ReturnToExtracurricularActivities=Renouveau - Activit\u00e9 Extrascolaire +AHLCG-CreepingCold=Un Froid Insidieux AHLCG-Whippoorwills=Les Engoulevents AHLCG-WknType-BasicWeakness=Faiblesse de base AHLCG-Back-Standard=Standard -AHLCG-TheEssexCountyExpress=L'Express du comt\u00E9 d'Essex +AHLCG-TheEssexCountyExpress=L'Express du comt\u00e9 d'Essex AHLCG-Type=Type +AHLCG-ReturnToTheGathering=Renouveau - Le Rassemblement +AHLCG-LocIcon-TriangleAlt=Triangle (Alt) +AHLCG-TheCircleUndone=Le Cercle Bris\u00e9 AHLCG-Asset=Soutien -AHLCG-CollectionNumber=Num\u00E9ro -AHLCG-CurseOfTheRougarou=La Mal\u00E9diction du Rougarou +AHLCG-CurseOfTheRougarou=La Mal\u00e9diction du Rougarou +AHLCG-CollectionNumber=Num\u00e9ro AHLCG-ChillingCold=Froid Mordant AHLCG-Sanity-None=Aucun +AHLCG-CityOfSins=La Cit\u00e9 des P\u00e9ch\u00e9s AHLCG-ActStory=Histoire -AHLCG-Doom=Fatalit\u00E9 -AHLCG-LocIcon-Square=Carr\u00E9 +AHLCG-ReturnToThePathToCarcosa=Renouveau La Route de Carcosa +AHLCG-ReturnToDimCarcosa=Renouveau - P\u00e2le Carcosa +AHLCG-Doom=Fatalit\u00e9 +AHLCG-ReturnToBlackStarsRise=Renouveau - Sous les \u00e9toiles noires +AHLCG-LocIcon-Square=Carr\u00e9 AHLCG-DeckSize=Taille du deck +AHLCG-KeywordsTip1=Mots Cl\u00e9s officiels\:\nAlerte, Distant, Exceptionnel, Rapide, Cach\u00e9e, Chasseur, Riposte, P\u00e9ril, Permanent, Renfort, Utilisations (X type)\n\n----- TAGS DISPONIBLES -----\n
 Proie\n G\u00e9n\u00e9ration
+AHLCG-BeyondTheThreshold=Au Del\u00e0 du Seuil
 AHLCG-EnemyEnemy=Ennemi / Ennemi
-AHLCG-TheMiskatonicMuseum=Le Mus\u00E9e Miskatonic
-AHLCG-Divider=S\u00E9parateur
+AHLCG-TheMiskatonicMuseum=Le Mus\u00e9e Miskatonic
+AHLCG-Divider=S\u00e9parateur
 AHLCG-Guide-TopRightSmall=Haut Droite, petit
 AHLCG-Cultist=Cultiste
 AHLCG-Slot-1Arcane=1 Arcane
 AHLCG-Hauntings=Hantise
 AHLCG-Byakhee=Les Byakhees
 AHLCG-CopyrightTip1=----- AVAILABLE TAGS -----\n Copyright
+AHLCG-ActPortrait=Acte / Portrait
 AHLCG-Guide-TopLeftCorner=Haut Gauche, coin
-AHLCG-DimCarcosa=P\u00E2le Carcosa
+AHLCG-DimCarcosa=P\u00e2le Carcosa
+AHLCG-ReturnToLostInTimeAndSpace=Renouveau - Perdu dans le Temps et l'Espace
 AHLCG-WknType-Weakness=Faiblesse
 AHLCG-Pref-Icon=Icone
 AHLCG-LocIcon-Heart=Coeur
 AHLCG-Share=Partage
-AHLCG-Pref-UncheckSets=Decocher sets selectionn\u00E9s
-AHLCG-NaomisCrew=L'\u00E9quipe de Naomi
+AHLCG-Pref-UncheckSets=Decocher sets selectionn\u00e9s
+AHLCG-NaomisCrew=L'\u00e9quipe de Naomi
+AHLCG-NeuroticFear=Peur N\u00e9vrotique
+AHLCG-ReturnToTheUnspeakableOath=Renouveau - Le Serment Indicible
+AHLCG-ReturnToTheMiskatonicMuseum=Renouveau - Le Mus\u00e9e Miskatonic
 AHLCG-InhabitantsOfCarcosa=Les Habitants de Carcosa
-AHLCG-TheUntamedWilds=une Contr\u00E9e Sauvage
-AHLCG-Pref-CheckCollections=Cocher collections selectionn\u00E9s
-AHLCG-ArkhamHorrorLCG=Horreur \u00E0 Arkham\: Le jeu de carte
+AHLCG-TheUntamedWilds=une Contr\u00e9e Sauvage
+AHLCG-ReturnToEchoesOfThePast=Renouveau - Les \u00e9chos du pass\u00e9
+AHLCG-Pref-CheckCollections=Cocher collections selectionn\u00e9s
+AHLCG-ReturnToTheDunwichLegacy=Renouveau L'H\u00e9ritage de Dunwich
+AHLCG-ArkhamHorrorLCG=Horreur \u00e0 Arkham\: Le jeu de carte
 AHLCG-StoryEnemy=Histoire / Ennemi
 AHLCG-BadLuck=Malchance
-AHLCG-ScenarioDeckID=Scenario Deck ID
-AHLCG-DecayAndFilth=Salet\u00E9s et immondices
+AHLCG-ReturnToTheLastKing=Renouveau - Le Dernier Roi
 AHLCG-Chaos-Tablet=Tablette
+AHLCG-ScenarioDeckID=Scenario Deck ID
 AHLCG-LocIcon-Circle=Cercle
-AHLCG-TheForgottenAge=La Civilisation Oubli\u00E9
-AHLCG-Nightgaunts=Maigres B\u00EAtes de la nuit
+AHLCG-TheForgottenAge=La Civilisation Oubli\u00e9
+AHLCG-Nightgaunts=Maigres B\u00eates de la nuit
 AHLCG-Guide-BottomRightCorner=Bas Droite, coin
 AHLCG-Chaos-ElderThing=Choses anciennes
-AHLCG-TreacheryWeakness=Tra\u00EEtrise (Faiblesse)
+AHLCG-TreacheryWeakness=Tra\u00eetrise (Faiblesse)
 AHLCG-DeckRequirements=Exigences du Deck
-AHLCG-TraitsTip4=Traits Officiels (lieux)\:\nAlt\u00E9r\u00E9, Arkham, Asile d'Arkham , Grotte, Central, Club du Tr\u00E8fle, Dunwich, Exposition, Extradimensionnel, Rez-de-chauss\u00E9e, Miskatonic,\nAutre Monde, Paris, Passage, Private, Voie Ferr\u00E9e, Premier Etage, Colline de la Sentinelle, Deuxi\u00E8me Etage, Train, Bois
-AHLCG-TraitsTip3=Traits Officiels (ennemis)\:\nAbomination, Grand Ancien, Avatar, Byakhee, Cr\u00E9ature, Criminel, Cultiste, Sombre Rejeton, Profond, D\u00E9tective, Elite,\nGeist, Goule, Humain, Humano\u00EFde, Ali\u00E9n\u00E9, Monstre, Maigre B\u00EAte de la Nuit, Serviteur, Shoggoth, Cr\u00E9puscule d'Argent, Sorcier,\nSyndicat, Yithien
-AHLCG-TraitsTip2=Traits Officiels (cartes rencontre/faiblesses)\:\nMal\u00E9diction, Fin des Temps, D\u00E9faut, Geist, Risque, Sortil\u00E8ge, Illicite, Blessure, Folie, Obstacle, Pr\u00E9sage, Pacte, Poison, Pouvoir,\nManigance, Tactique, T\u00E2che, 
-AHLCG-StrikingFear=R\u00E9pandre la peur
-AHLCG-TraitsTip1=Traits Officiels (cartes joueur)\:\nAgence, Alli\u00E9, Armure, Artiste, Assistant, Croyant, Audacieux, Passant, Charme, V\u00EAtement, Aplomb, Etat,\nConspirateur, Cr\u00E9ature, Criminel, D\u00E9sesp\u00E9r\u00E9, D\u00E9tective, Developp\u00E9, Vagabond, Dunwich, Expert, Condamn\u00E9, Faveur,\nArme \u00E0 feu, Chance, Stratag\u00E8me, Soci\u00E9t\u00E9 des Historiens, Humain, Chasseur, Illicite, Improvis\u00E9, Inn\u00E9, Perspicasit\u00E9, Instrument,\nObjet, Cl\u00E9, Ali\u00E9n\u00E9, Corps-\u00E0-corps, Miskatonic, Occulte, Pacte, Paradoxe, M\u00E9c\u00E8ne, Interpr\u00E8te, Police, Entrain\u00E9, Relique,\nReporter, Rituel, Science, Chanson, Sorcier, Sort, Esprit, Ravitaillement, Tactique, Talent, T\u00E2che, Livre, Outil, Pi\u00E8ge,\nRuse, V\u00E9t\u00E9ran, Veilleur, 
+AHLCG-DarkRituals=Sombres Rituels
+AHLCG-LocIcon-HourglassAlt=Sablier (Alt)
+AHLCG-Slot2=Slot 2
+AHLCG-LocIcon-MoonAlt=Lune (Alt)
+AHLCG-Slot1=Slot 1
+AHLCG-TraitsTip4=Traits Officiels (lieux)\:\nAlt\u00e9r\u00e9, Arkham, Asile d'Arkham , Grotte, Central, Club du Tr\u00e8fle, Dunwich, Exposition, Extradimensionnel, Rez-de-chauss\u00e9e, Miskatonic,\nAutre Monde, Paris, Passage, Private, Voie Ferr\u00e9e, Premier Etage, Colline de la Sentinelle, Deuxi\u00e8me Etage, Train, Bois
+AHLCG-TraitsTip3=Traits Officiels (ennemis)\:\nAbomination, Grand Ancien, Avatar, Byakhee, Cr\u00e9ature, Criminel, Cultiste, Sombre Rejeton, Profond, D\u00e9tective, Elite,\nGeist, Goule, Humain, Humano\u00efde, Ali\u00e9n\u00e9, Monstre, Maigre B\u00eate de la Nuit, Serviteur, Shoggoth, Cr\u00e9puscule d'Argent, Sorcier,\nSyndicat, Yithien
+AHLCG-TraitsTip2=Traits Officiels (cartes rencontre/faiblesses)\:\nMal\u00e9diction, Fin des Temps, D\u00e9faut, Geist, Risque, Sortil\u00e8ge, Illicite, Blessure, Folie, Obstacle, Pr\u00e9sage, Pacte, Poison, Pouvoir,\nManigance, Tactique, T\u00e2che, 
+AHLCG-TraitsTip1=Traits Officiels (cartes joueur)\:\nAgence, Alli\u00e9, Armure, Artiste, Assistant, Croyant, Audacieux, Passant, Charme, V\u00eatement, Aplomb, Etat,\nConspirateur, Cr\u00e9ature, Criminel, D\u00e9sesp\u00e9r\u00e9, D\u00e9tective, Developp\u00e9, Vagabond, Dunwich, Expert, Condamn\u00e9, Faveur,\nArme \u00e0 feu, Chance, Stratag\u00e8me, Soci\u00e9t\u00e9 des Historiens, Humain, Chasseur, Illicite, Improvis\u00e9, Inn\u00e9, Perspicasit\u00e9, Instrument,\nObjet, Cl\u00e9, Ali\u00e9n\u00e9, Corps-\u00e0-corps, Miskatonic, Occulte, Pacte, Paradoxe, M\u00e9c\u00e8ne, Interpr\u00e8te, Police, Entrain\u00e9, Relique,\nReporter, Rituel, Science, Chanson, Sorcier, Sort, Esprit, Ravitaillement, Tactique, Talent, T\u00e2che, Livre, Outil, Pi\u00e8ge,\nRuse, V\u00e9t\u00e9ran, Veilleur, 
+AHLCG-StrikingFear=R\u00e9pandre la peur
 AHLCG-TheBayou=Le Bayou
 AHLCG-Front=Recto
+AHLCG-TheNightsUsurper=L'Usurpateur de la Nuit
 AHLCG-Right=Droite
 AHLCG-TheGathering=Le Rassemblement
-AHLCG-BlackStarsRise=Sous les \u00E9toiles noires
-AHLCG-Pref-UncheckCollections=Decocher collections selectionn\u00E9s
+AHLCG-SecretDoors=Portes Secretes
+AHLCG-BlackStarsRise=Sous les \u00e9toiles noires
+AHLCG-Pref-UncheckCollections=Decocher collections selectionn\u00e9s
 AHLCG-Back-Player=Joueur
-AHLCG-ScenarioInformation=R\u00E8gles de Campagne
 AHLCG-Poison=Poison
+AHLCG-ScenarioInformation=R\u00e8gles de Campagne
 AHLCG-HeartOfTheElders=Le Coeur des Anciens
+AHLCG-MaddeningDelusions=Hallucinations D\u00e9rangeantes
 AHLCG-Left=Gauche
-AHLCG-WhereDoomAwaits=L\u00E0 o\u00F9 le Destin Attend
+AHLCG-WhereDoomAwaits=L\u00e0 o\u00f9 le Destin Attend
 AHLCG-Pref-UserSets=Sets de l'utilisateur\:
+AHLCG-LocIcon-TAlt=T (Alt)
 AHLCG-Artist=Artiste
 AHLCG-Slot-Body=Torse
 AHLCG-Pref-RemoveCollections=Enlever collections
-AHLCG-Scenario-Resolution=R\u00E9solution
+AHLCG-Scenario-Resolution=R\u00e9solution
 AHLCG-Guide-BottomLarge=Bas, grand
 AHLCG-LocIcon-DoubleSlash=Double Slash
+AHLCG-LocIcon-StarAlt=Etoile (Alt)
+AHLCG-LocIcon-SlashAlt=Slash (Alt)
 AHLCG-Pref-StandardSets=Sets Standards \:
-AHLCG-StoryLocation=Histoire / Lieu
-AHLCG-LocIcon-Triangle=Triangle
 AHLCG-AgendaStandard=Intrigue (Standard)
+AHLCG-LocIcon-Triangle=Triangle
+AHLCG-StoryLocation=Histoire / Lieu
 AHLCG-CoreSet=Boite de base
-AHLCG-Chaos-Skull=Cr\u00E2ne
-AHLCG-TheDoomOfEztli=Le Fl\u00E9au des Etzli
+AHLCG-Chaos-Skull=Cr\u00e2ne
+AHLCG-TheDoomOfEztli=Le Fl\u00e9au des Etzli
+AHLCG-ReturnToThePallidMask=Renouveau - Le Masque Bl\u00eame
 AHLCG-Pref-Image=Image
 AHLCG-Connections=Connexions
-AHLCG-General=G\u00E9n\u00E9ral
+AHLCG-General=G\u00e9n\u00e9ral
+AHLCG-MusicOfTheDamned=Musique des Damn\u00e9s
 AHLCG-WknType-InvestigatorWeakness=Faiblesse d'investigateur
-AHLCG-HastursGift=Pr\u00E9sent d'Hastur
 AHLCG-Columns=Colonnes
+AHLCG-HastursGift=Pr\u00e9sent d'Hastur
 AHLCG-AssetAsset=Soutien / Soutien
 AHLCG-AgendaEnemy=Intrigue / Ennemi
 AHLCG-BackPortrait=Verso Portrait
-AHLCG-ParagraphSpacing=Espacement Paragraphe
 AHLCG-Clues=Indices
-AHLCG-Orientation-Reversed=Renvers\u00E9
-AHLCG-Pref-DefaultValues=Valeur par d\u00E9faut
+AHLCG-ParagraphSpacing=Espacement Paragraphe
+AHLCG-Orientation-Reversed=Renvers\u00e9
+AHLCG-LocIcon-CrossAlt=Croix (Alt)
+AHLCG-ReturnToTheDevourerBelow=Renouveau - Le d\u00e9voreur du dessous
+AHLCG-Pref-DefaultValues=Valeur par d\u00e9faut
+AHLCG-TurnBackTime=Paradoxes Temporels
 AHLCG-KnYan=K'n-Yan
 AHLCG-Level=Niveau
+AHLCG-ExcelsiorManagement=Equipe de l'Excelsior 
 AHLCG-AgentsOfShubNiggurath=Agents de Shub-Niggurath
 AHLCG-PrefEncounterTip=Determine comment le set de roncontre va apparaitre dans la liste deroulante de chaque composant.

Nom\: Le nom du set rencontre
Cycle\: Le nom du cycle contenant le set
Icone\: Le fichier de l'icone representant le set set
Tag\: La base utilise les tags pour inserer l'icone dans les zones de texte. Si en base c'est 'rats', les tags suivants seront disponible \:

<ratss> \: Insere un petit icone
<ratsm> \: Insere un icone moyen
<ratsl> \: Insere un grand icone

Chaque carte ouverte devra etre reouverte pour que le changement prenne effet AHLCG-Chaos-None=Rien AHLCG-BeastThralls=Thralls Bestiaux +AHLCG-TheWatcher=Le Guetteur AHLCG-ThePathToCarcosa=La Route de Carcosa -AHLCG-Health=Sant\u00E9 +AHLCG-Health=Sant\u00e9 +AHLCG-TheEternalSlumber=Eternelle Torpeur AHLCG-TheBoundaryBeyond=Par dela les limites AHLCG-Collection=Collection AHLCG-CarnevaleOfHorrorsE=Carnaval des Horreurs +AHLCG-LocIcon-SquareAlt=Carr\u00e9 (Alt) +AHLCG-DelusoryEvils=Fl\u00e9aux Illusoires AHLCG-Guide-Title=Titre AHLCG-ActStoryAsset=Acte / Histoire Soutien AHLCG-EnemyWeakness=Ennemi (Faiblesse) -AHLCG-AncientEvils=Antiques Fl\u00E9aux +AHLCG-AncientEvils=Antiques Fl\u00e9aux +AHLCG-RulesTip3=----- TAGS DISPONIBLES -----\n
...
Section en-tete\n
...
En-tete secondaire\n\n Box de resolution\n Box Independante\n\nbracket \: Affiche un support en haut de la box\nheader \: Affiche une en-tete standard en haut de la box\n\n or Fin de la box (avec support)\nExample \: ... \n\n Resolution pastille +AHLCG-RulesTip2=----- TAGS DISPONIBLES -----\n Action\n R\u00e9action\n Libre\n R\u00e9velation\n Forc\u00e9\n Objectif\n Unique\n Hant\u00e9\n\n Par investigateur\n Munition\n Carr\u00c3\u00a9 +AHLCG-RulesTip1=----- TAGS DISPONIBLES -----\n Nom de carte\n\n Gardien\n Chercheur\n Truand\n Mystique\n Survivant\n Volont\u00e9\n Savoir\n Force\n Agilit\u00e9\n Libre\n Cr\u00e2ne\n Cultiste\n Tablette\n Chose Ancienne\n Signe des anciens\n Tentacules\nLes Tag de Set de Rencontre et de Collection sont list\u00e9s dans \nEdition Parametres.\nAjouter 's' pour un petit \u00eecone, 'm' pour un \u00eecone moyen, et 'l'\npour un grand \u00eecone.\nExemples\: , , AHLCG-LocIcon-Moon=Lune +AHLCG-SingleGroup=Groupe Unique AHLCG-TheVortexAbove=Le tourbillon Au-Dessus AHLCG-Part=Part -AHLCG-VictoryTip1=Mots cl\u00E9s officiels\:\nVictoire X , Vengeance X +AHLCG-ForTheGreaterGood=Pour le Bien Commun +AHLCG-VictoryTip1=Mots cl\u00e9s officiels\:\nVictoire X , Vengeance X AHLCG-Pref-Tag=Tag +AHLCG-ReturnToTheMidnightMasks=Renouveau - Les Masques de Minuit AHLCG-CultOfTheYellowSign=Culte du Signe Jaune -AHLCG-Keywords=Mots cl\u00E9s -AHLCG-Pref-DefaultCollection=collection par d\u00E9faut\: +AHLCG-Keywords=Mots cl\u00e9s +AHLCG-Pref-DefaultCollection=collection par d\u00e9faut\: +AHLCG-CampaignGuideA4=Guide de Campagne A4 (210mm x 297mm) AHLCG-Slot-2Hands=2 Mains AHLCG-Act=Acte AHLCG-CurtainCall=Lever de rideau AHLCG-Pref-RemoveSets=Enlever set rencontre -AHLCG-Damage=D\u00E9gat physique -AHLCG-TheStranger=L'\u00E9tranger +AHLCG-Damage=D\u00e9gat physique +AHLCG-TheStranger=L'\u00e9tranger AHLCG-Guide-TopLarge=Haut, grand +AHLCG-EpicMultiplayer=Multijoueur Epique AHLCG-DeckRestrictions=Restrictions du Deck -AHLCG-TreacheryPortrait=Tra\u00EEtrise / Portrait -AHLCG-APhantomOfTruth=Le Spectre de la v\u00E9rit\u00E9 -AHLCG-Pref-AddCustomCollection=Ajouter collection personnalis\u00E9e\: +AHLCG-TreacheryPortrait=Tra\u00eetrise / Portrait +AHLCG-VileExperiments=Atroces Experiences +AHLCG-APhantomOfTruth=Le Spectre de la v\u00e9rit\u00e9 +AHLCG-Pref-AddCustomCollection=Ajouter collection personnalis\u00e9e\: +AHLCG-ReturnToCultOfUmordhoth=Renouveau - Culte d'Umordhoth AHLCG-AccentedStory=Histoire AHLCG-Class-Weakness=Faiblesse AHLCG-Pref-EncounterSets=Sets Rencontre AHLCG-Guide-BottomLeftSmall=Bas Gauche, petit AHLCG-Class-Seeker=Chercheur AHLCG-Event=Evenement +AHLCG-ReturnToTheHouseAlwaysWins=Renouveau - La Banque gagne toujours AHLCG-LocIcon-Slash=Slash AHLCG-LostInTimeAndSpace=Perdu dans le Temps et l'Espace AHLCG-ThreadsOfFate=Les Fils du Destin -AHLCG-Story=Histoire +AHLCG-LocIcon-DiamondAlt=Losange (Alt) AHLCG-ActLocation=Acte / Lieu +AHLCG-Story=Histoire AHLCG-MiniInvestigator=Mini Marqueur Investigateur -AHLCG-Pref-DefaultSet=Set de rencontre par d\u00E9faut\: +AHLCG-ReturnToUndimensionedAndUnseen=Renouveau - Aux fronti\u00e8res du visible +AHLCG-LocIcon-CircleAlt=Cercle (Alt) +AHLCG-Pref-DefaultSet=Set de rencontre par d\u00e9faut\: AHLCG-TheUnspeakableOath=Le Serment Indicible AHLCG-TheHouseAlwaysWins=La Banque gagne toujours AHLCG-Slot-Accessory=Accessoire +AHLCG-MurderAtTheExcelsiorHotel=Meurtre \u00c3\u00a0 l'Hotel Excelsior AHLCG-Shroud=Enveloppe AHLCG-Traits=Traits +AHLCG-ResurgentEvils=Fl\u00e9aux R\u00e9surgents +AHLCG-AtDeathsDoorstep=Aux Portes de la Mort AHLCG-Slot-1Hand=1 Main -AHLCG-Pref-CheckSets=Cocher sets selectionn\u00E9s -AHLCG-Sorcery=Sorcellerie +AHLCG-Pref-CheckSets=Cocher sets selectionn\u00e9s AHLCG-Scenario-Portrait=Portrait -AHLCG-AgendaStoryAsset=Intrigue / Histoire Soutien +AHLCG-Sorcery=Sorcellerie AHLCG-Pref-Name=Nom +AHLCG-AgendaStoryAsset=Intrigue / Histoire Soutien AHLCG-Class-Survivor=Survivant AHLCG-CarnevaleOfHorrors=Carnaval des Horreurs AHLCG-Description= AHLCG-Scenario-Title=Titre AHLCG-Class-Guardian=Gardien AHLCG-Position=Position -AHLCG-Slot-Ally=Alli\u00E9 -AHLCG-AgendaTreachery=Intrigue / Tra\u00EEtrise +AHLCG-Slot-Ally=Alli\u00e9 +AHLCG-SecretsOfTheUniverse=Secrets de Univers +AHLCG-AgendaTreachery=Intrigue / Tra\u00eetrise AHLCG-Delusions=Hallucinations AHLCG-DeadlyTraps=Pieges Mortels AHLCG-BishopsThralls=Les Thrall de Bishop -AHLCG-Pref-DeleteSets=Effacer sets selectionn\u00E9s +AHLCG-Pref-DeleteSets=Effacer sets selectionn\u00e9s AHLCG-Guide-BottomLeftMedium=Bas Gauche, moyen +AHLCG-ReturnToBloodOnTheAltar=Renouveau - Du Sang sur l'Autel AHLCG-Ghouls=Goules +AHLCG-SinsOfThePast=P\u00e9ch\u00e9s du Pass\u00e9 +AHLCG-SilverTwilightLodge=Loge du Cr\u00e9puscule d'Argent AHLCG-AgendaStory=Histoire -AHLCG-BasicData=Donn\u00E9e Basique +AHLCG-BasicData=Donn\u00e9e Basique AHLCG-Orientation-Standard=Standard AHLCG-Class-Neutral=Neutre -AHLCG-CustomEncounterSet=Set de rencontre personnalis\u00E9 +AHLCG-CustomEncounterSet=Set de rencontre personnalis\u00e9 AHLCG-Skill-None=Aucun AHLCG-TheLastKing=Le Dernier Roi AHLCG-Class-Rogue=Truand -AHLCG-EchoesOfThePast=Les \u00E9chos du pass\u00E9 +AHLCG-EchoesOfThePast=Les \u00e9chos du pass\u00e9 +AHLCG-YogSothothsEmissaries=Emissaires de Yog-Sothoth AHLCG-LocIcon-None=Aucun AHLCG-LockedDoors=Portes Closes -AHLCG-Skill-Willpower=Volont\u00E9 +AHLCG-Skill-Willpower=Volont\u00e9 AHLCG-LocIcon-Diamond=Losange +AHLCG-SecondaryClass=Choix Classe Secondaire AHLCG-Skill-Wild=Libre -AHLCG-EnemyPortrait=Ennemi / Portrait AHLCG-AssetStoryPortrait=Histoire Soutien / Portrait -AHLCG-EvilPortents=Pr\u00E9sages Funestes +AHLCG-DecayingReality=R\u00e9alit\u00e9 D\u00e9liquescente +AHLCG-EvilPortents=Pr\u00e9sages Funestes +AHLCG-EnemyPortrait=Ennemi / Portrait AHLCG-DeckOptions=Construction du Deck -AHLCG-AdditionalRequirements=Exigences Suppl\u00E9mentaires -AHLCG-CurseOfTheRougarouE=La Mal\u00E9diction du Rougarou +AHLCG-AdditionalRequirements=Exigences Suppl\u00e9mentaires +AHLCG-CurseOfTheRougarouE=La Mal\u00e9diction du Rougarou AHLCG-Pref-StandardCollections=Collections Standards \: -AHLCG-AgentsOfYig=Agents de Yig AHLCG-ArmitagesFate=Le destin d'Armitage +AHLCG-AgentsOfYig=Agents de Yig AHLCG-Rats=Rats AHLCG-LocIcon-Star=Etoile AHLCG-Skill-Combat=Force AHLCG-Class-BasicWeakness=Faiblesse de Base AHLCG-Title=Titre -AHLCG-Skill-Agility=Agilit\u00E9 +AHLCG-Skill-Agility=Agilit\u00e9 AHLCG-AssetStoryAsset=Histoire Soutien / Histoire Soutien AHLCG-AgendaPortrait=Intrigue / Portrait AHLCG-Victory=Victoire -AHLCG-Pref-PermanentlyRemoveSets=Enlever d\u00E9finitivement les sets rencontre choisis par l'utilisateur de la liste? -AHLCG-TreacheryStory=Tra\u00EEtrise Histoire (Faiblesse) +AHLCG-BeforeTheBlackThrone=Devant le Trone Noir +AHLCG-Pref-PermanentlyRemoveSets=Enlever d\u00e9finitivement les sets rencontre choisis par l'utilisateur de la liste? +AHLCG-TheSecretName=Le Nom Secret +AHLCG-TreacheryStory=Tra\u00eetrise Histoire (Faiblesse) +AHLCG-AbyssalGifts=Cadeaux de l'Abime AHLCG-Tablet=Tablette -AHLCG-Pref-PermanentlyRemoveCollections=Enlever d\u00E9finitivement les collections choisies par l'utilisateur de la liste? -AHLCG-TheBeyond=L'Au-del\u00E0 +AHLCG-TheWitchingHour=L'Heure des Sorcieres +AHLCG-Pref-PermanentlyRemoveCollections=Enlever d\u00e9finitivement les collections choisies par l'utilisateur de la liste? +AHLCG-TheBeyond=L'Au-del\u00e0 +AHLCG-RealmOfDeath=Royaume des Morts AHLCG-Expedition=Expedition +AHLCG-SandsOfEgypt=Sables D'Egypte AHLCG-StrangeEons=Strange Eons AHLCG-AssetStory=Histoire Soutien AHLCG-Guide-TopRightMedium=Haut Droite, moyen -AHLCG-ExtracurricularActivity=Activit\u00E9 Extrascolaire +AHLCG-ExtracurricularActivity=Activit\u00e9 Extrascolaire AHLCG-RightBottom=Droite / Bas AHLCG-ChaosEffects=Effets Jetons Chaos AHLCG-Skill-Intellect=Savoir +AHLCG-Slot-Tarot=Tarot +AHLCG-Customizable=Am\u00e9liorations Personnalisables AHLCG-LocIcon-CopyFront=Copie Recto -AHLCG-Pref-AddSet=Ajouter set \u00E0 la liste -AHLCG-CombineWith=Combin\u00E9 avec +AHLCG-Pref-AddSet=Ajouter set \u00e0 la liste +AHLCG-AbyssalTribute=Tribut de l'Abime +AHLCG-CombineWith=Combin\u00e9 avec AHLCG-AgendaLocation=Intrigue / Lieu -AHLCG-LocationLocation = Lieu / Lieu AHLCG-Guide-RightLarge=Droite, grand -AHLCG-AgendaNumber=Num\u00E9ro intrigue +AHLCG-AgendaNumber=Num\u00e9ro intrigue AHLCG-Skip=Echap AHLCG-Spacing=Espacement AHLCG-Guide-Empty=Vide AHLCG-LocIcon-Empty=Vide +AHLCG-TrappedSpirits=Esprits Pi\u00e9g\u00e9s AHLCG-Class-Mystic=Mystique -AHLCG-ForgottenRuins=Ruines Oubli\u00E9es +AHLCG-ForgottenRuins=Ruines Oubli\u00e9es AHLCG-HideousAbominations=Hideuses Abominations -AHLCG-TheDunwichLegacy=L'H\u00E9ritage de Dunwich +AHLCG-TheDunwichLegacy=L'H\u00e9ritage de Dunwich AHLCG-EncounterSet=Set de rencontre AHLCG-Mirror=Miroir AHLCG-Stamina=Stamina AHLCG-Cost=Cout +AHLCG-ReturnToTheEssexCountyExpress=Renouveau - L'Express du comt\u00e9 d'Essex AHLCG-Investigator=Investigateur -AHLCG-Skull=Cr\u00E2ne +AHLCG-InexorableFate=Destin In\u00e9luctable +AHLCG-ErraticFear=Peur Erratique +AHLCG-UnionAndDisillusion=Union et D\u00e9sillusion +AHLCG-Skull=Cr\u00e2ne AHLCG-Guide-TopLeftMedium=Haut Gauche, moyen -AHLCG-Pref-DeleteCollections=Effacer collections selectionn\u00E9s +AHLCG-ReturnToWhereDoomAwaits=Renouveau - L\u00e0 o\u00f9 le Destin Attend +AHLCG-Pref-DeleteCollections=Effacer collections selectionn\u00e9s AHLCG-Set=Set AHLCG-PrefCollectionTip=Determine comment le set de collection va apparaitre dans la liste deroulante de chaque composant.

Nom\: Le nom de la collection ou cycle
Icone\: Le fichier de l'icone representant la collection
Tag\: La base utilise les tags pour inserer l'icone dans les zones de texte. Si en base c'est 'core', les tags suivants seront disponible \:

<cores> \: Insere un petit icone
<corem> \: Insere un icone moyen
<corel> \: Insere un grand icone

Chaque carte ouverte devra etre reouverte pour que le changement prenne effet. AHLCG-Pref-Collections=Collections -AHLCG-TreacheryEncounter=Tra\u00EEtrise (Rencontre) +AHLCG-TreacheryEncounter=Tra\u00eetrise (Rencontre) +Tab=espacement pour\nsections munitions\n\n Conclusion fl\u00e8che + C\n Fin Conclusion\n\n Trait\n Horizontal espacement\n Grand espacement vertical\n Vertical espacement\n Petit espacement vertical AHLCG-Back=Verso -AHLCG=Horreur \u00E0 Arkham\: Le jeu de carte -AHLCG-Slot-None=None +AHLCG=Horreur \u00e0 Arkham\: Le jeu de carte AHLCG-AssetStoryEnemy=Histoire Soutien / Ennemi +AHLCG-Slot-None=None AHLCG-LocIcon-Hourglass=Sablier AHLCG-Stamina-None=Aucun +AHLCG-LocIcon-HeartAlt=Coeur (Alt) AHLCG-Attack=Force AHLCG-Guide-LeftLarge=Gauche, grand +AHLCG-ReturnToTheNightOfTheZealot=Renouveau La Nuit de la Z\u00e9latrice +AHLCG-TheLabyrinthsOfLunacyE=Les Labyrinthes de la Folie AHLCG-Back-Encounter=Rencontre AHLCG-Class=Classe AHLCG-EnemyEncounter=Ennemi (Rencontre) -AHLCG-Skill=Comp\u00E9tences +AHLCG-Skill=Comp\u00e9tences AHLCG-TheDepthsOfYoth=Les Profondeurs de Yoth AHLCG-Chaos-Cultist=Cultiste AHLCG-CampaignGuide75=Guide de Campagne (7.5"x7.5") -AHLCG-CampaignGuideA4=Guide de Campagne A4 (210mm x 297mm) AHLCG-Flavor=Texte d'Ambiance -AHLCG-SetNumber=Num\u00E9ro +AHLCG-GhoulsOfUmordhoth=Les Goules d'Umordhoth +AHLCG-SetNumber=Num\u00e9ro AHLCG-Level-None=Aucun AHLCG-LineSpacing=Espacement Ligne AHLCG-LeftTop=Gauche / Haut AHLCG-Guide-TopLeftSmall=Haut Gauche, petit -AHLCG-Pref-AddCollection=Ajouter collection \u00E0 la liste +AHLCG-Pref-AddCollection=Ajouter collection \u00e0 la liste AHLCG-Options=Options AHLCG-AgentsOfHastur=Agents d'Hastur +AHLCG-LocationLocation=Lieu / Lieu AHLCG-Portrait=Portrait -AHLCG-StoryInvestigator = Investigateur d'Histoire - -AHLCG-LocIcon-CircleAlt = Cercle (Alt) -AHLCG-LocIcon-SquareAlt = Carr\u00E9 (Alt) -AHLCG-LocIcon-TriangleAlt = Triangle (Alt) -AHLCG-LocIcon-CrossAlt = Croix (Alt) -AHLCG-LocIcon-DiamondAlt = Losange (Alt) -AHLCG-LocIcon-SlashAlt = Slash (Alt) -AHLCG-LocIcon-TAlt = T (Alt) -AHLCG-LocIcon-HourglassAlt = Sablier (Alt) -AHLCG-LocIcon-MoonAlt = Lune (Alt) -AHLCG-LocIcon-DoubleSlashAlt = Double Slash (Alt) -AHLCG-LocIcon-HeartAlt = Coeur (Alt) -AHLCG-LocIcon-StarAlt = Etoile (Alt) - -AHLCG-ActPortrait = Acte / Portrait -AHLCG-Class2 = Double Classe -AHLCG-Slot1 = Slot 1 -AHLCG-Slot2 = Slot 2 -AHLCG-SecondaryClass = Choix Classe Secondaire -AHLCG-Class-None = Aucune -AHLCG-Slot-Tarot = Tarot -AHLCG-LocIcon-Clover = Tr\u00E9fle -AHLCG-TheLabyrinthsOfLunacy = Les Labyrinthes de la Folie -AHLCG-ReturnToTheNightOfTheZealot = Renouveau La Nuit de la Z\u00E9latrice -AHLCG-ReturnToThePathToCarcosa = Renouveau La Route de Carcosa -AHLCG-GuardiansOfTheAbyss = Gardiens de l'Abime -AHLCG-ReturnToTheDunwichLegacy = Renouveau L'H\u00E9ritage de Dunwich -AHLCG-TheCircleUndone = Le Cercle Bris\u00E9 -AHLCG-AbyssalGifts = Cadeaux de l'Abime -AHLCG-AbyssalTribute = Tribut de l'Abime -AHLCG-AgentsOfAzathoth = Agents d'Azathoth -AHLCG-AlienInterference = Ing\u00E9rence Extraterrestre -AHLCG-AnettesCoven = La Congr\u00E9gation d'Anette -AHLCG-AtDeathsDoorstep = Aux Portes de la Mort -AHLCG-BeforeTheBlackThrone = Devant le Trone Noir -AHLCG-BeyondTheThreshold = Au Del\u00E0 du Seuil -AHLCG-BrotherhoodOfTheBeast = Fraternit\u00E9 de la Bete -AHLCG-CityOfSins = La Cit\u00E9 des P\u00E9ch\u00E9s -AHLCG-CreepingCold = Un Froid Insidieux -AHLCG-DarkRituals = Sombres Rituels -AHLCG-DecayingReality = R\u00E9alit\u00E9 D\u00E9liquescente -AHLCG-DelusoryEvils = Fl\u00E9aux Illusoires -AHLCG-DisappearanceAtTheTwilightEstate = Disparition dans la Demeure du Cr\u00E9puscule -AHLCG-EpicMultiplayer = Multijoueur Epique -AHLCG-ErraticFear = Peur Erratique -AHLCG-ExcelsiorManagement = Equipe de l'Excelsior -AHLCG-ForTheGreaterGood = Pour le Bien Commun -AHLCG-GhoulsOfUmordhoth = Les Goules d'Umordhoth -AHLCG-HastursEnvoys = Envoy\u00E9s d'Hastur -AHLCG-InexorableFate = Destin In\u00E9luctable -AHLCG-InTheClutchesOfChaos = Dans les Griffes du Chaos -AHLCG-MaddeningDelusions = Hallucinations D\u00E9rangeantes -AHLCG-MurderAtTheExcelsiorHotel = Meurtre à l'Hotel Excelsior -AHLCG-MusicOfTheDamned = Musique des Damn\u00E9s -AHLCG-NeuroticFear = Peur N\u00E9vrotique -AHLCG-TheNightsUsurper = L'Usurpateur de la Nuit -AHLCG-RealmOfDeath = Royaume des Morts -AHLCG-ResurgentEvils = Fl\u00E9aux R\u00E9surgents -AHLCG-ReturnToAPhantomOfTruth = Renouveau - Le Spectre de la v\u00E9rit\u00E9 -AHLCG-ReturnToBlackStarsRise = Renouveau - Sous les \u00E9toiles noires -AHLCG-ReturnToBloodOnTheAltar = Renouveau - Du Sang sur l'Autel -AHLCG-ReturnToCultOfUmordhoth = Renouveau - Culte d'Umordhoth -AHLCG-ReturnToCurtainCall = Renouveau - Lever de rideau -AHLCG-ReturnToDimCarcosa = Renouveau - P\u00E2le Carcosa -AHLCG-ReturnToEchoesOfThePast = Renouveau - Les \u00E9chos du pass\u00E9 -AHLCG-ReturnToExtracurricularActivities = Renouveau - Activit\u00E9 Extrascolaire -AHLCG-ReturnToLostInTimeAndSpace = Renouveau - Perdu dans le Temps et l'Espace -AHLCG-ReturnToTheDevourerBelow = Renouveau - Le d\u00E9voreur du dessous -AHLCG-ReturnToTheEssexCountyExpress = Renouveau - L'Express du comt\u00E9 d'Essex -AHLCG-ReturnToTheGathering = Renouveau - Le Rassemblement -AHLCG-ReturnToTheHouseAlwaysWins = Renouveau - La Banque gagne toujours -AHLCG-ReturnToTheLastKing = Renouveau - Le Dernier Roi -AHLCG-ReturnToTheMidnightMasks = Renouveau - Les Masques de Minuit -AHLCG-ReturnToTheMiskatonicMuseum = Renouveau - Le Mus\u00E9e Miskatonic -AHLCG-ReturnToThePallidMask = Renouveau - Le Masque Bl\u00EAme -AHLCG-ReturnToTheUnspeakableOath = Renouveau - Le Serment Indicible -AHLCG-ReturnToUndimensionedAndUnseen = Renouveau - Aux fronti\u00E8res du visible -AHLCG-ReturnToWhereDoomAwaits = Renouveau - L\u00E0 o\u00F9 le Destin Attend -AHLCG-SandsOfEgypt = Sables D'Egypte -AHLCG-SecretDoors = Portes Secretes -AHLCG-SecretsOfTheUniverse = Secrets de Univers -AHLCG-SilverTwilightLodge = Loge du Cr\u00E9puscule d'Argent -AHLCG-SingleGroup = Groupe Unique -AHLCG-SinsOfThePast = P\u00E9ch\u00E9s du Pass\u00E9 -AHLCG-SpectralPredators = Predateurs Spectraux -AHLCG-TheDevourersCult = Le Culte du D\u00E9voreur -AHLCG-TheEternalSlumber = Eternelle Torpeur -AHLCG-TheLabyrinthsOfLunacyE = Les Labyrinthes de la Folie -AHLCG-TheSecretName = Le Nom Secret -AHLCG-TheWagesOfSin = Le Salaire du P\u00E9ch\u00E9 -AHLCG-TheWatcher = Le Guetteur -AHLCG-TheWitchingHour = L'Heure des Sorcieres -AHLCG-TrappedSpirits = Esprits Pi\u00E9g\u00E9s -AHLCG-TurnBackTime = Paradoxes Temporels -AHLCG-UnionAndDisillusion = Union et D\u00E9sillusion -AHLCG-VileExperiments = Atroces Experiences -AHLCG-Witchcraft = Pratiques Occultes -AHLCG-YogSothothsEmissaries = Emissaires de Yog-Sothoth - -AHLCG-KeywordsTip1=Mots Cl\u00E9s officiels\:\n\ -Alerte, Distant, Exceptionnel, Rapide, Cach\u00E9e, Chasseur, Riposte, P\u00E9ril, Permanent, Renfort, Utilisations (X type)\n\n\ ------ TAGS DISPONIBLES -----\n\ -
 Proie\n\
- G\u00E9n\u00E9ration
-
-AHLCG-RulesTip1=----- TAGS DISPONIBLES -----\n\
- Nom de carte\n\n\
- Gardien\n\
- Chercheur\n\
- Truand\n\
- Mystique\n\
- Survivant\n\
- Volont\u00E9\n\
- Savoir\n\
- Force\n\
- Agilit\u00E9\n\
- Libre\n\
- Cr\u00E2ne\n\
- Cultiste\n\
- Tablette\n\
- Chose Ancienne\n\
- Signe des anciens\n\
- Tentacules\n\
-Les Tag de Set de Rencontre et de Collection sont list\u00E9s dans \n\
-Edition Parametres.\n\
-Ajouter 's' pour un petit \u00EEcone, 'm' pour un \u00EEcone moyen, et 'l'\n\
-pour un grand \u00EEcone.\n\
-Exemples\: , , 
-
-AHLCG-RulesTip2=----- TAGS DISPONIBLES -----\n\
- Action\n\
- R\u00E9action\n\
- Libre\n\
- R\u00E9velation\n\
- Forc\u00E9\n\
- Objectif\n\
- Unique\n\
- Hant\u00E9\n\
- Patrouille\n\n\
- Par investigateur\n\
- Munition\n\
- Carré
-Tab espacement pour\n\
-        sections munitions\n\n\
- Conclusion fl\u00E8che + C\n\
- Fin Conclusion\n\n\
- Trait\n\
- Horizontal espacement\n\
- Grand espacement vertical\n\
- Vertical espacement\n\
- Petit espacement vertical
-
-AHLCG-RulesTip3=----- TAGS DISPONIBLES -----\n\
-
...
Section en-tete\n\ -
...
En-tete secondaire\n\n\ - Box de resolution\n\ - Box Independante\n\n\ -bracket : Affiche un support en haut de la box\n\ -header : Affiche une en-tete standard en haut de la box\n\n\ - or Fin de la box (avec support)\n\ -Example : ... \n\n\ - Resolution pastille diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_it.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_it.properties index ae540cf..1f8dc64 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_it.properties +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_it.properties @@ -21,7 +21,7 @@ AHLCG-Investigator=Investigatore AHLCG-TraitsTip3=Caratteristiche ufficiali (nemici)\:\nAbominazione, Antico, Byakhee, Creatura, Criminale, Cultista, Cucciolo Oscuro, Abitatore del Profondo, Detective, Esperto, Ghast, Ghoul, Gug, Umano, Umanoide, Lunatico, Mostro, Magro Notturno, Mi-go, Servitore, Shoggoth ,Crepuscolo d'Argento, Stregone, Sindacato, Yithiano AHLCG-TraitsTip2=Caratteristiche ufficiali (incontri/debolezze)\:\nMaledizione, Fine dei tempi, Ghast, Rischio, Stregoneria, Illecito, Infortunio, Pazzia, Ostacolo, Omen, Patto, Veleno, Potere, Schema, Tattica, compito, Terrore AHLCG-Pref-CheckSets=Marca set selezionati -AHLCG-TraitsTip1=Caratteristiche ufficiali (carte giocatore)\:\nAgenzia, Alleato, Armatura, Artista, Assistente, Credente, Astante, \nFascino, Abbigliamento, Compostezza, Condizione, Cospiratore, Creatura, Criminale, Detective, Sviluppato, Esploratore, Incostante, Dunwich, Esperto, Favore, Arma da fuoco, \nFortuna, Gambit, Societ\u00E0 Storica, Umano, Cacciatore, Illecito, Innato, Intuizione, \nStrumento, Oggetto, Chiave, Lunatico, Mischia, Miskatonic, Occulto, Patto, Patrono, Esecutore, Polizia, Praticato, Reliquia, Reporter, Rituale, Scienza, Canto, Stregone, Incantesimo, Spirito, Rifornimento, Tattica, Talento, Compito, Tomo, Strumento, Trucco, Veterano, Custode, Arma +AHLCG-TraitsTip1=Caratteristiche ufficiali (carte giocatore)\:\nAgenzia, Alleato, Armatura, Artista, Assistente, Credente, Astante, \nFascino, Abbigliamento, Compostezza, Condizione, Cospiratore, Creatura, Criminale, Detective, Sviluppato, Esploratore, Incostante, Dunwich, Esperto, Favore, Arma da fuoco, \nFortuna, Gambit, Societ\u00e0 Storica, Umano, Cacciatore, Illecito, Innato, Intuizione, \nStrumento, Oggetto, Chiave, Lunatico, Mischia, Miskatonic, Occulto, Patto, Patrono, Esecutore, Polizia, Praticato, Reliquia, Reporter, Rituale, Scienza, Canto, Stregone, Incantesimo, Spirito, Rifornimento, Tattica, Talento, Compito, Tomo, Strumento, Trucco, Veterano, Custode, Arma AHLCG-AccentedStory=Storia AHLCG-AssetStoryEnemy=Supporto Storia / Nemico AHLCG-WknType-BasicWeakness=Debolezza Base @@ -30,7 +30,7 @@ AHLCG-Pref-PermanentlyRemoveSets=Rimuovere definitivamente dalla lista i set inc AHLCG-TreacheryPortrait=Sventura / Immagine AHLCG-Guide-TopRightCorner=in Alto a Destra, ad angolo AHLCG-CampaignGuideA4=Guida alla Campagna A4 (210mm x 297mm) -AHLCG-PrefCollectionTip=Determina quale collezione apparir\u00E0 nel dropdown Collezione per ogni conponente.

Nome\: Il nome della collezione o del ciclo
Icona\: Il filename dell'icona che rappresenta una collezione utente
Tag\: La base per i tag usati per inserire l'icona nelle aree di testo. Se la base \u00E8 'core', saranno disponibili i seguenti tag\:

<cores> \: Inserisce un'icona piccola
<corem> \: Inserisce un'icona media
<corel> \: Inserisce un'icona grande

Ogni carta aperta dovr\u00E0 essere riaperta prima che il cambiamento sia visibile. +AHLCG-PrefCollectionTip=Determina quale collezione apparir\u00e0 nel dropdown Collezione per ogni conponente.

Nome\: Il nome della collezione o del ciclo
Icona\: Il filename dell'icona che rappresenta una collezione utente
Tag\: La base per i tag usati per inserire l'icona nelle aree di testo. Se la base \u00e8 'core', saranno disponibili i seguenti tag\:

<cores> \: Inserisce un'icona piccola
<corem> \: Inserisce un'icona media
<corel> \: Inserisce un'icona grande

Ogni carta aperta dovr\u00e0 essere riaperta prima che il cambiamento sia visibile. AHLCG-LocIcon-Hourglass=Clessidra AHLCG-VictoryTip1=Parola chiave Ufficiale\:\nVittoria X AHLCG-Pref-DefaultCollection=Collezione preimpostata\: @@ -38,7 +38,7 @@ AHLCG-Skill-Combat=Scontro AHLCG-RulesTip3=----- TAG DISPONIBILI -----\n
...
Intestazione di Sezione\n
...
Intestazione Secondaria\n\n Inizia un Riquadro Risoluzione\n Inizia un Riquadro Autoconclusivo\n\nbracket \: Visualizza un glifo nella parte superiore del riquadro\nheader \: Visualizza una intestazione standard all'inizio del riquadro\n\n or Termina la sezione evidenziata (con un glifo)\n\nEsempio\: ... \n\n bullet per la Guida\n\n\n AHLCG-AgentsOfHastur=Agents Of Hastur AHLCG-RulesTip2=----- TAG DISPONIBILI -----\n Innesco Azione\n Innesco Reazione\n Innesco Gratuito\n\n Rivelazione\n Obbligo\n Obiettivo\n\n Unico\n Per investigatore\n\n Elenco puntato\n Tabulazione per sezione elenco\n\n Indicatore Risoluzione + R\n Fine risoluzione\n\n Trattino\n Spaziatore orizzontale\n Spaziatore verticale\n Piccolo spaziatore verticale -AHLCG-RulesTip1=----- TAG DISPONIBILI -----\n Nome della Carta\n\n Guardiano\n Studioso\n Canaglia\n Mistico\n Sopravvissuto\n\n Volont\u00E0\n Intelletto\n Scontro\n Agilit\u00E0\n Jolly\n\n Teschio\n Cultista\n Tavoletta\n Mostro\n Segno degli Antichi\n Tentacoli\n\nTag relativi a Set Incontri e Collezioni sono elencati nella\nsezione Arkham Horror\: Il Gioco di Carte delle Preferenze.\nGrandezza delle icone\: Aggiungere 's' per piccola, 'm' per media, e 'l'\nper grande.\nEs\: , , +AHLCG-RulesTip1=----- TAG DISPONIBILI -----\n Nome della Carta\n\n Guardiano\n Studioso\n Canaglia\n Mistico\n Sopravvissuto\n\n Volont\u00e0\n Intelletto\n Scontro\n Agilit\u00e0\n Jolly\n\n Teschio\n Cultista\n Tavoletta\n Mostro\n Segno degli Antichi\n Tentacoli\n\nTag relativi a Set Incontri e Collezioni sono elencati nella\nsezione Arkham Horror\: Il Gioco di Carte delle Preferenze.\nGrandezza delle icone\: Aggiungere 's' per piccola, 'm' per media, e 'l'\nper grande.\nEs\: , , AHLCG-Dunwich=Dunwich AHLCG-TheHouseAlwaysWins=The House Always Wins AHLCG-DeckRestrictions=Restrizioni del Mazzo @@ -48,12 +48,13 @@ AHLCG-Collection=Collezione AHLCG-Tablet=Tavoletta AHLCG-Type=Tipo AHLCG-Nightgaunts=Nightgaunts -AHLCG-AgendaNumber=Trama Numero +AHLCG-AgendaNumber=Trama N +umero AHLCG-RightBottom=Destra / Basso AHLCG-Sanity-None=Nessuna AHLCG-Stamina=Salute AHLCG-ActLocation=Capitolo / Luogo -AHLCG-Skill-Willpower=Volont\u00E0 +AHLCG-Skill-Willpower=Volont\u00e0 AHLCG-ActNumber=Capitolo Numero AHLCG-Pref-AddSet=Aggiungi set alla lista AHLCG-ElderThing=Cosa degli Antichi @@ -97,12 +98,12 @@ AHLCG-EnemyEnemy=Nemico / Nemico AHLCG-Slot-1Arcane=1 Arcano AHLCG-CurseOfTheRougarou=La Maledizione dei Rougarou AHLCG-Delusions=Delusions -AHLCG-KeywordsTip1=Parole Chiave Ufficiali\:\nCacciatore, Capacit\u00E0, Impulso, Isolamento, Massiccio, Permanente, Ritorsione, Sfuggente, Straordinario, Utilizzo (X tipo), Veloce\n\n----- TAG DISPONIBILI -----\n
 Preda\n Generazione
+AHLCG-KeywordsTip1=Parole Chiave Ufficiali\:\nCacciatore, Capacit\u00e0, Impulso, Isolamento, Massiccio, Permanente, Ritorsione, Sfuggente, Straordinario, Utilizzo (X tipo), Veloce\n\n----- TAG DISPONIBILI -----\n
 Preda\n Generazione
 AHLCG-Guide-Title=Titolo
 AHLCG-TheBayou=The Bayou
-AHLCG-Skill-Agility=Agilit\u00E0
+AHLCG-Skill-Agility=Agilit\u00e0
 AHLCG-Left=Sinistra
-AHLCG-Skill=Abilit\u00E0
+AHLCG-Skill=Abilit\u00e0
 AHLCG-Pref-CheckCollections=Marca collezioni selezionate
 AHLCG-CultOfUmordhoth=Cult of Umordhoth
 AHLCG-EnemyEncounter=Nemico (Incontro)
@@ -168,7 +169,7 @@ AHLCG-Scenario-Portrait=Immagine
 AHLCG-Class=Classe
 AHLCG-Slot=Slot
 AHLCG-Guide-BottomLeftMedium=in Basso a Sinistra, media
-AHLCG-Shroud=Oscurit\u00E0
+AHLCG-Shroud=Oscurit\u00e0
 AHLCG-Pref-RemoveSets=Rimuove i set incontri
 AHLCG-TheLastKing=The Last King
 AHLCG-General=Generale
@@ -204,7 +205,7 @@ AHLCG-Pref-RemoveCollections=Rimuove le collezioni
 AHLCG-Artist=Artista
 AHLCG-Class-Seeker=Studioso
 AHLCG-Story=Storia
-AHLCG-TheDunwichLegacy=L'Eredit\u00E0 di Dunwich
+AHLCG-TheDunwichLegacy=L'Eredit\u00e0 di Dunwich
 AHLCG-ActStory=Storia
 AHLCG-Class-Neutral=Neutrale
 AHLCG-TheGathering=The Gathering
@@ -212,7 +213,7 @@ AHLCG-LocIcon-None=Nessuno
 AHLCG-Header=Intestazione
 AHLCG-Level-None=Nessuno
 AHLCG-DeckSize=Dimensione del Mazzo
-AHLCG-Sanity=Sanit\u00E0 Mentale
+AHLCG-Sanity=Sanit\u00e0 Mentale
 AHLCG-Copyright=Copyright
 AHLCG-EchoesOfThePast=Echoes of the Past
 AHLCG-Cultist=Cultista
@@ -232,7 +233,7 @@ AHLCG-EvilPortents=Evil Portents
 AHLCG-Doom=Destini
 AHLCG-Rules=Testo del Gioco
 AHLCG-AgendaLocation=Trama / Luogo
-AHLCG-PrefEncounterTip=Determina quale set di incontri apparir\u00E0 nel dropdown di selezione Set Incontri per ogni componente.

Nome\: Il nome del set
Ciclo\: Il nome del Ciclo contenente il set
Icona\: Il filename dell'icona reppresentante un set utente di incontri
Tag\: La base per il tag usato per inserire l'icona nelle aree di testo. Se la base \u00E8 'rats', saranno disponibili i seguenti tags\:

<ratss> \: Inserisce un'icona piccola
<ratsm> \: Inserisce un'icona media
<ratsl> \: Inserisce un'icona grande

Ogni carta aperta dovr\u00E0 essere riaperta prima che il cambiamento sia visibile. +AHLCG-PrefEncounterTip=Determina quale set di incontri apparir\u00e0 nel dropdown di selezione Set Incontri per ogni componente.

Nome\: Il nome del set
Ciclo\: Il nome del Ciclo contenente il set
Icona\: Il filename dell'icona reppresentante un set utente di incontri
Tag\: La base per il tag usato per inserire l'icona nelle aree di testo. Se la base \u00e8 'rats', saranno disponibili i seguenti tags\:

<ratss> \: Inserisce un'icona piccola
<ratsm> \: Inserisce un'icona media
<ratsl> \: Inserisce un'icona grande

Ogni carta aperta dovr\u00e0 essere riaperta prima che il cambiamento sia visibile. AHLCG-Location=Luogo AHLCG-Guide-BottomLarge=in Basso, grande AHLCG-HastursGift=Hastur's Gift diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_uk.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_uk.properties new file mode 100644 index 0000000..484d597 --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_uk.properties @@ -0,0 +1,764 @@ + +AHLCG-ArkhamHorrorLCG = \u0416\u0430\u0445 \u0410\u0440\u043a\u0433\u0435\u043c\u0430\: \u041a\u0430\u0440\u0442\u043a\u043e\u0432\u0430 \u0433\u0440\u0430 +AHLCG = \u0416\u0430\u0445 \u0410\u0440\u043a\u0433\u0435\u043c\u0430\: \u041a\u0430\u0440\u0442\u043a\u043e\u0432\u0430 \u0433\u0440\u0430 +AHLCG-Description = + +// types +AHLCG-Act = \u0421\u043f\u0440\u0430\u0432\u0430 +AHLCG-ActEnemy = \u0421\u043f\u0440\u0430\u0432\u0430 / \u0412\u043e\u0440\u043e\u0433 +AHLCG-ActLocation = \u0421\u043f\u0440\u0430\u0432\u0430 / \u041b\u043e\u043a\u0430\u0446\u0456\u044f +AHLCG-ActPortrait = \u0421\u043f\u0440\u0430\u0432\u0430 / \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-ActStoryAsset = \u0421\u043f\u0440\u0430\u0432\u0430 / \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-AgendaStandard = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 (\u0417\u0432\u0438\u0447\u0430\u0439\u043d\u0430) +AHLCG-AgendaFrontPortrait = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 (\u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f) +AHLCG-AgendaPortrait = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 / \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-AgendaEnemy = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 / \u0412\u043e\u0440\u043e\u0433 +AHLCG-AgendaTreachery = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 / \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c +AHLCG-AgendaLocation = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 / \u041b\u043e\u043a\u0430\u0446\u0456\u044f +AHLCG-AgendaStoryAsset = \u0417\u0430\u0433\u0440\u043e\u0437\u0430 / \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-Asset = \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-AssetAsset = \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a / \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-AssetStory = \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-AssetStoryAsset = \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a / \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-AssetStoryEnemy = \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a / \u0412\u043e\u0440\u043e\u0433 +AHLCG-AssetStoryPortrait = \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a / \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-ChaosEffects = \u0415\u0444\u0435\u043a\u0442\u0438 \u0436\u0435\u0442\u043e\u043d\u0443 \u0445\u0430\u043e\u0441\u0443 +AHLCG-Customizable = Customizable Upgrades +AHLCG-Divider = \u0420\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0438\u043a +AHLCG-EnemyWeakness = \u0412\u043e\u0440\u043e\u0433 (\u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c) +AHLCG-EnemyEncounter = \u0412\u043e\u0440\u043e\u0433 (\u041a\u0430\u0440\u0442\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443) +AHLCG-EnemyPortrait = \u0412\u043e\u0440\u043e\u0433 / \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-EnemyEnemy = \u0412\u043e\u0440\u043e\u0433 / \u0412\u043e\u0440\u043e\u0433 +AHLCG-Event = \u041f\u043e\u0434\u0456\u044f +AHLCG-Investigator = \u0414\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a +AHLCG-StoryInvestigator = \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0414\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a +AHLCG-Location = \u041b\u043e\u043a\u0430\u0446\u0456\u044f +AHLCG-LocationLocation = \u041b\u043e\u043a\u0430\u0446\u0456\u044f / \u041b\u043e\u043a\u0430\u0446\u0456\u044f +AHLCG-MiniInvestigator = \u041c\u0456\u043d\u0456-\u043a\u0430\u0440\u0442\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a\u0430 +AHLCG-ScenarioInformation = \u041f\u0440\u0430\u0432\u0438\u043b\u0430 \u043a\u0430\u043c\u043f\u0430\u043d\u0456\u0457 +AHLCG-Skill = \u0412\u043c\u0456\u043d\u043d\u044f +AHLCG-StoryAsset = \u0421\u044e\u0436\u0435\u0442 / \u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0417\u0434\u043e\u0431\u0443\u0442\u043e\u043a +AHLCG-StoryEnemy = \u0421\u044e\u0436\u0435\u0442 / \u0412\u043e\u0440\u043e\u0433 +AHLCG-StoryLocation = \u0421\u044e\u0436\u0435\u0442 / \u041b\u043e\u043a\u0430\u0446\u0456\u044f +AHLCG-StoryChaos = \u0421\u044e\u0436\u0435\u0442 / \u0415\u0444\u0435\u043a\u0442\u0438 \u0436\u0435\u0442\u043e\u043d\u0443 \u0445\u0430\u043e\u0441\u0443 +AHLCG-StoryTreachery = \u0421\u044e\u0436\u0435\u0442 / \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c +AHLCG-StoryStory = \u0421\u044e\u0436\u0435\u0442 +AHLCG-TreacheryEncounter = \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c (\u041a\u0430\u0440\u0442\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0443) +AHLCG-TreacheryWeakness = \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c (\u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c) +AHLCG-TreacheryPortrait = \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c / \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-TreacheryStory = \u0421\u044e\u0436\u0435\u0442\u043d\u0430 \u041f\u0456\u0434\u0441\u0442\u0443\u043f\u043d\u0456\u0441\u0442\u044c (\u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c) +AHLCG-CampaignGuide75 = \u041f\u0443\u0442\u0456\u0432\u043d\u0438\u043a \u043f\u043e \u043a\u0430\u043c\u043f\u0430\u043d\u0456\u0457 (7.5"x7.5") +AHLCG-CampaignGuideA4 = \u041f\u0443\u0442\u0456\u0432\u043d\u0438\u043a \u043f\u043e \u043a\u0430\u043c\u043f\u0430\u043d\u0456\u0457 A4 (210mm x 297mm) + +// interface +AHLCG-Front = \u041b\u0438\u0446\u044c\u043e\u0432\u0430 \u0441\u0442\u043e\u0440\u043e\u043d\u0430 +AHLCG-Back = \u0417\u0432\u043e\u0440\u043e\u0442 +AHLCG-General = \u0417\u0430\u0433\u0430\u043b\u044c\u043d\u0435 +AHLCG-Title = \u041d\u0430\u0437\u0432\u0430 +AHLCG-BasicData = \u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u0434\u0430\u043d\u0456 +AHLCG-ActNumber = \u041d\u043e\u043c\u0435\u0440 \u0441\u043f\u0440\u0430\u0432\u0438 +AHLCG-Clues = \u0417\u0434\u043e\u0433\u0430\u0434\u043a\u0438 +AHLCG-CopyrightTitle = Copyright information +AHLCG-Copyright = Copyright +AHLCG-ActStory = \u0421\u044e\u0436\u0435\u0442 +AHLCG-Spacing = \u0412\u0456\u0434\u0441\u0442\u0443\u043f +AHLCG-Rules = \u0406\u0433\u0440\u043e\u0432\u0438\u0439 \u0442\u0435\u043a\u0441\u0442 +AHLCG-Part = \u0427\u0430\u0441\u0442\u0438\u043d\u0430 +AHLCG-Header = \u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a +AHLCG-TextScale = \u041c\u0430\u0441\u0448\u0442\u0430\u0431\u0443\u0432\u0430\u043d\u043d\u044f \u0442\u0435\u043a\u0441\u0442\u0443 +AHLCG-Portrait = \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-Mirror = \u0412\u0456\u0434\u0437\u0435\u0440\u043a\u0430\u043b\u0438\u0442\u0438 +AHLCG-Option = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440 +AHLCG-Options = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 +AHLCG-Artist = \u0410\u0432\u0442\u043e\u0440 +AHLCG-Collection = \u0426\u0438\u043a\u043b +AHLCG-CustomCollection = \u0412\u043b\u0430\u0441\u043d\u0438\u0439 \u0446\u0438\u043a\u043b +AHLCG-CollectionNumber = \u041d\u043e\u043c\u0435\u0440 +AHLCG-EncounterSet = \u041d\u0430\u0431\u0456\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 +AHLCG-Set = \u041d\u0430\u0431\u0456\u0440 +AHLCG-SetNumber = \u041d\u043e\u043c\u0435\u0440 +AHLCG-CustomEncounterSet = \u0412\u043b\u0430\u0441\u043d\u0438\u0439 \u043d\u0430\u0431\u0456\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 +AHLCG-AgendaNumber = \u041d\u043e\u043c\u0435\u0440 \u0437\u0430\u0433\u0440\u043e\u0437\u0438 +AHLCG-Doom = \u041f\u0440\u0438\u0440\u0435\u0447\u0435\u043d\u0456\u0441\u0442\u044c +AHLCG-AgendaStory = \u0421\u044e\u0436\u0435\u0442 +AHLCG-AccentedStory = \u0421\u044e\u0436\u0435\u0442 +AHLCG-Subtitle = \u041f\u0456\u0434\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a +AHLCG-Class = \u041a\u043b\u0430\u0441 +AHLCG-Class1 = \u041a\u043b\u0430\u0441 1 +AHLCG-Class2 = \u041a\u043b\u0430\u0441 2 +AHLCG-Class3 = \u041a\u043b\u0430\u0441 3 +AHLCG-Name = \u0406\u043c'\u044f +AHLCG-Icon = \u0406\u043a\u043e\u043d\u043a\u0430 +AHLCG-Cost = \u0412\u0430\u0440\u0456\u0441\u0442\u044c +AHLCG-Level = \u0420\u0456\u0432\u0435\u043d\u044c +AHLCG-Slot1 = \u0421\u043b\u043e\u0442 1 +AHLCG-Slot2 = \u0421\u043b\u043e\u0442 2 +AHLCG-Stamina = \u0417\u0434\u043e\u0440\u043e\u0432'\u044f +AHLCG-Sanity = \u0420\u043e\u0437\u0443\u043c +AHLCG-Traits = \u0420\u0438\u0441\u0438 +AHLCG-Keywords = \u041a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430 +AHLCG-Flavor = \u0425\u0443\u0434\u043e\u0436\u043d\u0456\u0439 \u0442\u0435\u043a\u0441\u0442 +AHLCG-Victory = \u041f\u0435\u0440\u0435\u043c\u043e\u0433\u0430 +AHLCG-Skull = \u0427\u0435\u0440\u0435\u043f +AHLCG-Cultist = \u041a\u0443\u043b\u044c\u0442\u0438\u0441\u0442 +AHLCG-Tablet = \u0422\u0430\u0431\u043b\u0438\u0447\u043a\u0430 +AHLCG-ElderThing = \u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0454 \u0449\u043e\u0441\u044c +AHLCG-Type = \u0422\u0438\u043f +AHLCG-Page = \u0421\u0442\u043e\u0440\u0456\u043d\u043a\u0430 +AHLCG-Columns = \u041a\u043e\u043b\u043e\u043d\u043a\u0430 +AHLCG-Portraits = \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-Attack = \u0421\u0438\u043b\u0430 +AHLCG-Health = \u0417\u0434\u043e\u0440\u043e\u0432'\u044f +AHLCG-Evade = \u0421\u043f\u0440\u0438\u0442\u043d\u0456\u0441\u0442\u044c +AHLCG-Damage = \u0420\u0430\u043d\u0438 +AHLCG-Horror = \u0416\u0430\u0445 +AHLCG-Story = \u0421\u044e\u0436\u0435\u0442 +AHLCG-DeckSize = \u0420\u043e\u0437\u043c\u0456\u0440 \u043a\u043e\u043b\u043e\u0434\u0438 +# unofficial +AHLCG-SecondaryClass = \u0412\u0438\u0431\u0456\u0440 \u0434\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0443 +AHLCG-DeckOptions = \u041c\u043e\u0436\u043b\u0438\u0432\u0456 \u043a\u0430\u0440\u0442\u0438 +AHLCG-DeckRequirements = \u041e\u0431\u043e\u0432'\u044f\u0437\u043a\u043e\u0432\u0456 \u043a\u0430\u0440\u0442\u0438 +AHLCG-DeckRestrictions = \u041e\u0441\u043e\u0431\u043b\u0438\u0432\u0456 \u043e\u0431\u043c\u0435\u0436\u0435\u043d\u043d\u044f +# unofficial +AHLCG-AdditionalRequirements = \u0414\u043e\u0434\u0430\u0442\u043a\u043e\u0432\u0456 \u0432\u0438\u043c\u043e\u0433\u0438 +AHLCG-BackPortrait = \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f (\u0437\u0432\u043e\u0440\u043e\u0442) +AHLCG-Shroud = \u041c\u043e\u0440\u043e\u043a +AHLCG-Connections = \u0421\u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044f +AHLCG-Share = \u041f\u043e\u0434\u0456\u043b\u0438\u0442\u0438\u0441\u044f +AHLCG-SharePortrait = \u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u043b\u0438\u0446\u044c\u043e\u0432\u0435 \u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437 \u043e\u0431\u043e\u0445 \u0441\u0442\u043e\u0440\u0456\u043d +AHLCG-Left = \u0417\u043b\u0456\u0432\u0430 +AHLCG-Right = \u0421\u043f\u0440\u0430\u0432\u0430 +AHLCG-LeftTop = \u0417\u043b\u0456\u0432\u0430 / \u0417\u0432\u0435\u0440\u0445\u0443 +AHLCG-RightBottom = \u0421\u043f\u0440\u0430\u0432\u0430 / \u0417\u043d\u0438\u0437\u0443 +AHLCG-Position = \u041f\u043e\u043b\u043e\u0436\u0435\u043d\u043d\u044f +AHLCG-Orientation = \u041e\u0440\u0456\u0454\u043d\u0442\u0430\u0446\u0456\u044f +AHLCG-ScenarioDeckID = \u0406\u0434\u0435\u043d\u0442\u0438\u0444\u0456\u043a\u0430\u0442\u043e\u0440 \u043a\u043e\u043b\u043e\u0434\u0438 \u0441\u0446\u0435\u043d\u0430\u0440\u0456\u044e +AHLCG-Skip = \u041f\u0440\u043e\u043f\u0443\u0441\u0442\u0438\u0442\u0438 +AHLCG-CombineWith = \u041e\u0431'\u0454\u0434\u043d\u0430\u0442\u0438 \u0437 +AHLCG-LineSpacing = \u041c\u0456\u0436\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b +AHLCG-ParagraphSpacing = \u0406\u043d\u0442\u0435\u0440\u0432\u0430\u043b \u043c\u0456\u0436 \u043f\u0430\u0440\u0430\u0433\u0440\u0430\u0444\u0430\u043c\u0438 +AHLCG-TrackerBox = Tracking box +AHLCG-Setup = \u041f\u0456\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 +AHLCG-StartingPlayArea = Starting Play Area +AHLCG-OpeningHand = Opening Hand +AHLCG-Section = \u0420\u043e\u0437\u0434\u0456\u043b +AHLCG-Text = \u0422\u0435\u043a\u0441\u0442 +AHLCG-Standard = \u0417\u0432\u0438\u0447\u0430\u0439\u043d\u0430 +AHLCG-TCUPrologue = TCU Prologue +AHLCG-Sections = \u0420\u043e\u0437\u0434\u0456\u043b\u0438 +AHLCG-Template = \u0428\u0430\u0431\u043b\u043e\u043d +#@AHLCG-ShowOnBack = Show on back +AHLCG-TemplateReplacement = \u0417\u0430\u043c\u0456\u043d\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0443 +AHLCG-LineSpacing = \u041c\u0456\u0436\u0440\u044f\u0434\u043a\u043e\u0432\u0438\u0439 \u0456\u043d\u0442\u0435\u0440\u0432\u0430\u043b + +// list boxes +AHLCG-Class-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439 +AHLCG-Class-Guardian = \u0412\u0430\u0440\u0442\u043e\u0432\u0438\u0439 +AHLCG-Class-ParallelGuardian = \u0412\u0430\u0440\u0442\u043e\u0432\u0438\u0439 (\u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0439) +AHLCG-Class-Seeker = \u0428\u0443\u043a\u0430\u0447 +AHLCG-Class-ParallelSeeker = \u0428\u0443\u043a\u0430\u0447 (\u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0439) +AHLCG-Class-Rogue = \u0421\u043f\u0440\u0438\u0442\u043d\u0438\u043a +AHLCG-Class-ParallelRogue = \u0421\u043f\u0440\u0438\u0442\u043d\u0438\u043a (\u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0439) +AHLCG-Class-Mystic = \u041c\u0456\u0441\u0442\u0438\u043a +AHLCG-Class-ParallelMystic = \u041c\u0456\u0441\u0442\u0438\u043a (\u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0439) +AHLCG-Class-Survivor = \u0412\u0446\u0456\u043b\u0456\u043b\u0438\u0439 +AHLCG-Class-ParallelSurvivor = \u0412\u0446\u0456\u043b\u0456\u043b\u0438\u0439 (\u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0438\u0439) +AHLCG-Class-Neutral = \u041d\u0435\u0439\u0442\u0440\u0430\u043b\u044c\u043d\u0430 +AHLCG-Class-Weakness = \u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c +AHLCG-Class-BasicWeakness = \u0411\u0430\u0437\u043e\u0432\u0430 \u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c + +AHLCG-Skill-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0454 +AHLCG-Skill-Willpower = \u0412\u043e\u043b\u044f +AHLCG-Skill-Intellect = \u0406\u043d\u0442\u0435\u043b\u0435\u043a\u0442 +AHLCG-Skill-Combat = \u0421\u0438\u043b\u0430 +AHLCG-Skill-Agility = \u0421\u043f\u0440\u0438\u0442\u043d\u0456\u0441\u0442\u044c +AHLCG-Skill-Wild = \u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439 + +AHLCG-Slot-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439 +AHLCG-Slot-Ally = \u0421\u043e\u044e\u0437\u043d\u0438\u043a +AHLCG-Slot-Accessory = \u0410\u043a\u0441\u0435\u0441\u0443\u0430\u0440 +AHLCG-Slot-Body = \u041e\u0434\u044f\u0433 +AHLCG-Slot-1Hand = 1 \u0420\u0443\u043a\u0430 +AHLCG-Slot-2Hands = 2 \u0420\u0443\u043a\u0438 +AHLCG-Slot-1Arcane = 1 \u041c\u0430\u0433\u0456\u0447\u043d\u0438\u0439 +AHLCG-Slot-2Arcane = 2 \u041c\u0430\u0433\u0456\u0447\u043d\u0456 +AHLCG-Slot-Tarot = Tarot + +AHLCG-Stamina-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0454 +AHLCG-Sanity-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439 +AHLCG-Level-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439 + +AHLCG-Scenario-Portrait = \u0417\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f +AHLCG-Scenario-Title = \u041d\u0430\u0437\u0432\u0430 +AHLCG-Scenario-Resolution = \u0420\u043e\u0437\u0434\u0456\u043b\u044c\u043d\u0456\u0441\u0442\u044c + +AHLCG-LocIcon-CopyFront = \u041a\u043e\u043f\u0456\u044e\u0432\u0430\u0442\u0438 \u043b\u0438\u0446\u044c\u043e\u0432\u0435 +AHLCG-LocIcon-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0454 +AHLCG-LocIcon-Empty = \u041f\u0443\u0441\u0442\u043e +AHLCG-LocIcon-Circle = \u041a\u043e\u043b\u043e +AHLCG-LocIcon-Square = \u041a\u0432\u0430\u0434\u0440\u0430\u0442 +AHLCG-LocIcon-Triangle = \u0422\u0440\u0438\u043a\u0443\u0442\u043d\u0438\u043a +AHLCG-LocIcon-Cross = \u0425\u0440\u0435\u0441\u0442 +AHLCG-LocIcon-Diamond = \u0414\u0456\u0430\u043c\u0430\u043d\u0442 +AHLCG-LocIcon-Slash = \u0421\u043b\u0435\u0448 +AHLCG-LocIcon-T = T +AHLCG-LocIcon-Hourglass = \u041f\u0456\u0441\u043e\u0447\u043d\u0438\u0439 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a +AHLCG-LocIcon-Moon = \u041c\u0456\u0441\u044f\u0446\u044c +AHLCG-LocIcon-DoubleSlash = \u041f\u043e\u0434\u0432\u0456\u0439\u043d\u0438\u0439 \u0441\u043b\u0435\u0448 +AHLCG-LocIcon-Heart = \u0421\u0435\u0440\u0446\u0435 +AHLCG-LocIcon-Star = \u0417\u0456\u0440\u043a\u0430 +AHLCG-LocIcon-Quote = \u041b\u0430\u043f\u043a\u0438 +AHLCG-LocIcon-Clover = \u041a\u043e\u043d\u044e\u0448\u0438\u043d\u0430 +AHLCG-LocIcon-Spade = \u041f\u0456\u043a\u0430 + +AHLCG-LocIcon-CircleAlt = \u041a\u043e\u043b\u043e (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-SquareAlt = \u041a\u0432\u0430\u0434\u0440\u0430\u0442 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-TriangleAlt = \u0422\u0440\u0438\u043a\u0443\u0442\u043d\u0438\u043a (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-CrossAlt = \u0425\u0440\u0435\u0441\u0442 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-DiamondAlt = \u0414\u0456\u0430\u043c\u0430\u043d\u0442 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-SlashAlt = \u0421\u043b\u0435\u0448 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-TAlt = T (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-HourglassAlt = \u041f\u0456\u0441\u043e\u0447\u043d\u0438\u0439 \u0433\u043e\u0434\u0438\u043d\u043d\u0438\u043a (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-MoonAlt = \u041c\u0456\u0441\u044f\u0446\u044c (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-DoubleSlashAlt = \u041f\u043e\u0434\u0432\u0456\u0439\u043d\u0438\u0439 \u0441\u043b\u0435\u0448 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-HeartAlt = \u0421\u0435\u0440\u0446\u0435 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) +AHLCG-LocIcon-StarAlt = \u0417\u0456\u0440\u043a\u0430 (\u0410\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u043d\u0430) + +AHLCG-WknType-Weakness = \u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c +AHLCG-WknType-BasicWeakness = \u0411\u0430\u0437\u043e\u0432\u0430 \u0441\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c +AHLCG-WknType-InvestigatorWeakness = \u0421\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a\u0430 +AHLCG-WknType-StoryWeakness = \u0421\u044e\u0436\u0435\u0442\u043d\u0430 \u0441\u043b\u0430\u0431\u043a\u0456\u0441\u0442\u044c + +AHLCG-Back-Standard = \u0417\u0432\u0438\u0447\u0430\u0439\u043d\u0438\u0439 +AHLCG-Back-Player = \u041a\u0430\u0440\u0442\u0430 \u0433\u0440\u0430\u0432\u0446\u0456\u0432 +AHLCG-Back-Encounter = \u041a\u0430\u0440\u0442\u0430 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 + +AHLCG-StoryTemplate-Story = \u0421\u044e\u0436\u0435\u0442 +AHLCG-StoryTemplate-Token = \u0415\u0444\u0435\u043a\u0442\u0438 \u0436\u0435\u0442\u043e\u043d\u0456\u0432 +AHLCG-StoryTemplate-TokenFull = \u0415\u0444\u0435\u043a\u0442\u0438 \u0436\u0435\u0442\u043e\u043d\u0456\u0432 (\u041b\u0438\u0448\u0435 \u0442\u0435\u043a\u0441\u0442) + +AHLCG-Guide-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0454 +AHLCG-Guide-Title = \u041d\u0430\u0437\u0432\u0430 +AHLCG-Guide-Empty = \u041f\u0443\u0441\u0442\u043e +AHLCG-Guide-TopLeftSmall = \u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043b\u0456\u0432\u0430, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0435 +AHLCG-Guide-TopLeftMedium = \u0417\u0432\u0435\u0440\u0445\u0443 \u0437\u043b\u0456\u0432\u0430, \u0441\u0435\u0440\u0435\u0434\u043d\u0454 +AHLCG-Guide-TopLarge = \u0417\u0432\u0435\u0440\u0445\u0443, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-TopHalf = \u0417\u0432\u0435\u0440\u0445\u0443, \u043f\u0456\u0432\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 +AHLCG-Guide-BottomLeftSmall = \u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0435 +AHLCG-Guide-BottomLeftMedium = \u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430, \u0441\u0435\u0440\u0435\u0434\u043d\u0454 +AHLCG-Guide-BottomLarge = \u0417\u043d\u0438\u0437\u0443, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-BottomHalf = \u0417\u043d\u0438\u0437\u0443 \u0437\u043b\u0456\u0432\u0430, \u043f\u0456\u0432\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 +AHLCG-Guide-LeftLarge = \u0417\u043b\u0456\u0432\u0430, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-TopLeftCorner = \u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043b\u0456\u0432\u0438\u0439 \u043a\u0443\u0442 +AHLCG-Guide-BottomLeftCorner = \u041d\u0438\u0436\u043d\u0456\u0439 \u043b\u0456\u0432\u0438\u0439 \u043a\u0443\u0442 +AHLCG-Guide-FullPage = \u0412\u0441\u044f \u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0430 + +AHLCG-Guide-TopRightSmall = \u0417\u0432\u0435\u0440\u0445\u0443 \u0441\u043f\u0440\u0430\u0432\u0430, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0435 +AHLCG-Guide-TopRightMedium = \u0417\u0432\u0435\u0440\u0445\u0443 \u0441\u043f\u0440\u0430\u0432\u0430, \u0441\u0435\u0440\u0435\u0434\u043d\u0454 +AHLCG-Guide-TopLarge = \u0417\u0432\u0435\u0440\u0445\u0443, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-TopRightHalf = \u0417\u0432\u0435\u0440\u0445\u0443, \u043f\u0456\u0432\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 +AHLCG-Guide-BottomRightSmall = \u0417\u043d\u0438\u0437\u0443 \u0441\u043f\u0440\u0430\u0432\u0430, \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0435 +AHLCG-Guide-BottomRightMedium = \u0417\u043d\u0438\u0437\u0443 \u0441\u043f\u0440\u0430\u0432\u0430, \u0441\u0435\u0440\u0435\u0434\u043d\u0454 +AHLCG-Guide-BottomLarge = \u0417\u043d\u0438\u0437\u0443, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-BottomHalf = \u0417\u043d\u0438\u0437\u0443, \u043f\u0456\u0432\u0441\u0442\u043e\u0440\u0456\u043d\u043a\u0438 +AHLCG-Guide-RightLarge = \u0421\u043f\u0440\u0430\u0432\u0430, \u0432\u0435\u043b\u0438\u043a\u0435 +AHLCG-Guide-TopRightCorner = \u0412\u0435\u0440\u0445\u043d\u0456\u0439 \u043f\u0440\u0430\u0432\u0438\u0439 \u043a\u0443\u0442 +AHLCG-Guide-BottomRightCorner = \u041d\u0438\u0436\u043d\u0456\u0439 \u043f\u0440\u0430\u0432\u0438\u0439 \u043a\u0443\u0442 + +AHLCG-Orientation-Standard = \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0430 +AHLCG-Orientation-Reversed = \u041f\u0435\u0440\u0435\u0432\u0435\u0440\u043d\u0443\u0442\u0430 + +AHLCG-Chaos-None = \u0412\u0456\u0434\u0441\u0443\u0442\u043d\u0456\u0439 +AHLCG-Chaos-Skull = \u0427\u0435\u0440\u0435\u043f +AHLCG-Chaos-Cultist = \u041a\u0443\u043b\u044c\u0442\u0438\u0441\u0442 +AHLCG-Chaos-Tablet = \u0422\u0430\u0431\u043b\u0438\u0447\u043a\u0430 +AHLCG-Chaos-ElderThing = \u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0454 \u0449\u043e\u0441\u044c + +AHLCG-Pref-Name = \u0406\u043c'\u044f +AHLCG-Pref-Image = \u041a\u0430\u0440\u0442\u0438\u043d\u043a\u0430 +AHLCG-Pref-Tag = \u0422\u0435\u0433 +AHLCG-Pref-Cycle = \u0426\u0438\u043a\u043b +AHLCG-Pref-Icon = \u0406\u043a\u043e\u043d\u043a\u0430 +AHLCG-Pref-EncounterSets = \u041d\u0430\u0431\u043e\u0440\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 +AHLCG-Pref-Collections = \u0426\u0438\u043a\u043b\u0438 + +AHLCG-Pref-DefaultValues = \u0417\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +AHLCG-Pref-DefaultSet = \u041d\u0430\u0431\u0456\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +AHLCG-Pref-DefaultCollection = \u0426\u0438\u043a\u043b \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +AHLCG-Pref-DefaultFonts = \u0428\u0440\u0438\u0444\u0442\u0438 \u0437\u0430 \u0437\u0430\u043c\u043e\u0432\u0447\u0443\u0432\u0430\u043d\u043d\u044f\u043c +AHLCG-Pref-TitleFont = \u0428\u0440\u0438\u0444\u0442 \u043d\u0430\u0437\u0432\u0438 +AHLCG-Pref-SubtitleFont = \u0428\u0440\u0438\u0444\u0442 \u043f\u0456\u0434\u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0443 +AHLCG-Pref-CardTypeFont = \u0428\u0440\u0438\u0444\u0442 \u0442\u0438\u043f\u0443 \u043a\u0430\u0440\u0442\u0438 +AHLCG-Pref-BodyFont = \u0428\u0440\u0438\u0444\u0442 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443 +AHLCG-Pref-TraitFont = \u0428\u0440\u0438\u0444\u0442 \u0440\u0438\u0441 +AHLCG-Pref-VictoryFont = \u0428\u0440\u0438\u0444\u0442 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a\u0456\u0432/\u043f\u0435\u0440\u0435\u043c\u043e\u0433\u0438 +AHLCG-Pref-FlavorFont = \u0428\u0440\u0438\u0444\u0442 \u0445\u0443\u0434\u043e\u0436\u043d\u044c\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443 +AHLCG-Pref-StoryFont = \u0428\u0440\u0438\u0444\u0442 \u0441\u044e\u0436\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0435\u043a\u0441\u0442\u0443 +AHLCG-Pref-CollectionFont = \u0428\u0440\u0438\u0444\u0442 \u0446\u0438\u043a\u043b\u0443 +AHLCG-Pref-Size = \u0420\u043e\u0437\u043c\u0456\u0440 (%) +AHLCG-Pref-VerticalOffset = \u0412\u0435\u0440\u0442\u0438\u043a\u0430\u043b\u044c\u043d\u0435 \u0437\u043c\u0456\u0449\u0435\u043d\u043d\u044f +AHLCG-Pref-LanguageOptions = \u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438 \u043c\u043e\u0432\u0438 +AHLCG-Pref-RotateTitle = \u041e\u0431\u0435\u0440\u0442\u0430\u0442\u0438 \u043d\u0430\u0437\u0432\u0443 \u043d\u0430 \u0437\u0432\u043e\u0440\u043e\u0442\u0456 \u0441\u043f\u0440\u0430\u0432\u0438/\u0437\u0430\u0433\u0440\u043e\u0437\u0438 +AHLCG-Pref-StandardSets = \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0456 \u043d\u0430\u0431\u043e\u0440\u0438: +AHLCG-Pref-CheckSets = \u0412\u0456\u0434\u043c\u0456\u0442\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u043d\u0430\u0431\u043e\u0440\u0438 +AHLCG-Pref-UncheckSets = \u0417\u043d\u044f\u0442\u0438 \u0432\u0456\u0434\u043c\u0456\u0442\u043a\u0443 \u0437 \u043e\u0431\u0440\u0430\u043d\u0438\u0445 \u043d\u0430\u0431\u043e\u0440\u0456\u0432 +AHLCG-Pref-UserSets = \u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0456 \u043d\u0430\u0431\u043e\u0440\u0438: +AHLCG-Pref-DeleteSets = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u043d\u0430\u0431\u043e\u0440\u0438 +AHLCG-Pref-PermanentlyRemoveSets = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0456 \u043d\u0430\u0431\u043e\u0440\u0438 \u0437\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043d\u0430\u0437\u0430\u0432\u0436\u0434\u0438? +AHLCG-Pref-RemoveSets = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043d\u0430\u0431\u043e\u0440\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 +AHLCG-Pref-Select = \u041e\u0431\u0440\u0430\u0442\u0438... +AHLCG-Pref-AddSet = \u0414\u043e\u0434\u0430\u0442\u0438 \u043d\u0430\u0431\u0456\u0440 \u0434\u043e \u0441\u043f\u0438\u0441\u043a\u0443 +AHLCG-Pref-AddCustomSet = \u0414\u043e\u0434\u0430\u0442\u0438 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u043d\u0430\u0431\u0456\u0440 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432: +AHLCG-Pref-StandardCollections = \u0421\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u0456 \u0446\u0438\u043a\u043b\u0438: +AHLCG-Pref-CheckCollections = \u0412\u0456\u0434\u043c\u0456\u0442\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u0446\u0438\u043a\u043b\u0438 +AHLCG-Pref-UncheckCollections = \u0417\u043d\u044f\u0442\u0438 \u0432\u0456\u0434\u043c\u0456\u0442\u043a\u0443 \u0437 \u043e\u0431\u0440\u0430\u043d\u0438\u0445 \u0446\u0438\u043a\u043b\u0456\u0432 +AHLCG-Pref-UserCollections = \u041a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0456 \u0446\u0438\u043a\u043b\u0438: +AHLCG-Pref-DeleteCollections = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u0446\u0438\u043a\u043b\u0438 +AHLCG-Pref-PermanentlyRemoveCollections = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u043e\u0431\u0440\u0430\u043d\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0446\u044c\u043a\u0456 \u0446\u0438\u043a\u043b\u0438 \u0437\u0456 \u0441\u043f\u0438\u0441\u043a\u0443 \u043d\u0430\u0437\u0430\u0432\u0436\u0434\u0438? +AHLCG-Pref-RemoveCollections = \u0412\u0438\u0434\u0430\u043b\u0438\u0442\u0438 \u0446\u0438\u043a\u043b\u0438 +AHLCG-Pref-AddCollection = \u0414\u043e\u0434\u0430\u0442\u0438 \u0446\u0438\u043a\u043b \u0434\u043e \u0441\u043f\u0438\u0441\u043a\u0443 +AHLCG-Pref-AddCustomCollection = \u0414\u043e\u0434\u0430\u0442\u0438 \u0432\u043b\u0430\u0441\u043d\u0438\u0439 \u0446\u0438\u043a\u043b: + +// collections +AHLCG-StrangeEons = Strange Eons +AHLCG-CoreSet = \u0411\u0430\u0437\u0430 +AHLCG-CurseOfTheRougarou = Curse of the Rougarou +AHLCG-CarnevaleOfHorrors = Carnevale of Horrors +AHLCG-TheDunwichLegacy = \u0421\u043f\u0430\u0434\u0449\u0438\u043d\u0430 \u0414\u0430\u043d\u0432\u0456\u0447\u0430 +AHLCG-ThePathToCarcosa = The Path to Carcosa +AHLCG-TheForgottenAge = The Forgotten Age +AHLCG-TheLabyrinthsOfLunacy = The Labyrinths of Lunacy +AHLCG-ReturnToTheNightOfTheZealot = Return to The Night of the Zealot +AHLCG-GuardiansOfTheAbyss = Guardians of the Abyss +AHLCG-ReturnToTheDunwichLegacy = Return to The Dunwich Legacy +AHLCG-TheCircleUndone = The Circle Undone +AHLCG-ReturnToThePathToCarcosa = Return to The Path to Carcosa +AHLCG-MurderAtTheExcelsiorHotel = Murder at the Excelsior Hotel +AHLCG-TheDreamEaters = The Dream-Eaters +AHLCG-ParallelInvestigators = \u041f\u0430\u0440\u0430\u043b\u0435\u043b\u044c\u043d\u0456 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a\u0438 +AHLCG-Promos = \u041f\u0440\u043e\u043c\u043e +AHLCG-ReturnToTheForgottenAge = Return to The Forgotten Age +AHLCG-NathanielCho = Nathaniel Cho +AHLCG-HarveyWalters = Harvey Walters +AHLCG-WinifredHabbamock = Winifred Habbamock +AHLCG-JacquelineFine = Jacqueline Fine +AHLCG-StellaClark = Stella Clark +AHLCG-TheBlobThatAteEverything = The Blob That Ate Everything +AHLCG-TheInnsmouthConspiracy = The Innsmouth Conspiracy +AHLCG-WarOfTheOuterGods = War of the Outer Gods +AHLCG-ReturnToTheCircleUndone = Return to The Circle Undone +AHLCG-EdgeOfTheEarth = Edge of the Earth Campaign +# I don't know why the extra space is needed +AHLCG-EdgeOfTheEarthInv = Edge of the Earth Investigator + +// encounter sets +AHLCG-AbyssalGifts = Abyssal Gifts +AHLCG-AbyssalTribute = Abyssal Tribute +AHLCG-AgentsOfAtlachNacha = Agents of Atlach-Nacha +AHLCG-AgentsOfAzathoth = Agents of Azathoth +AHLCG-AgentsOfCthulhu = \u0410\u0433\u0435\u043d\u0442\u0438 \u041a\u0442\u0443\u043b\u0445\u0443 +AHLCG-AgentsOfDagon = Agents of Dagon +AHLCG-AgentsOfHastur = \u0410\u0433\u0435\u043d\u0442\u0438 \u0425\u0430\u0441\u0442\u0443\u0440\u0430 +AHLCG-AgentsOfHydra = Agents of Hydra +AHLCG-AgentsOfNyarlathotep = Agents of Nyarlathotep +AHLCG-AgentsOfShubNiggurath = \u0410\u0433\u0435\u043d\u0442\u0438 \u0428\u0443\u0431-\u041d\u0456\u0433\u0433\u0443\u0440\u0430\u0442\u0430 +AHLCG-AgentsOfTheUnknown = Agents of the Unknown +AHLCG-AgentsOfYogSothoth = \u0410\u0433\u0435\u043d\u0442\u0438 \u0419\u043e\u0433-\u0421\u043e\u0442\u043e\u0442\u0430 +AHLCG-AgentsOfYig = Agents of Yig +AHLCG-AlienInterference = Alien Interference +AHLCG-ALightInTheFog = A Light in the Fog +AHLCG-AllOrNothing = \u0412\u0441\u0435 \u0430\u0431\u043e \u043d\u0456\u0447\u043e\u0433\u043e +AHLCG-AncientEvils = \u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0454 \u0417\u043b\u043e +AHLCG-AnettesCoven = Anette's Coven +AHLCG-APhantomOfTruth = A Phantom of Truth +AHLCG-ArmitagesFate = Armitage's Fate +AHLCG-AtDeathsDoorstep = At Death's Doorstep +AHLCG-AThousandShapesOfHorror = A Thousand Shapes of Horror +AHLCG-BadBlood = \u041f\u043e\u0433\u0430\u043d\u0430 \u043a\u0440\u043e\u0432 +AHLCG-BadLuck = \u041d\u0435\u0432\u0434\u0430\u0447\u0430 +AHLCG-BeastThralls = \u041f\u043e\u043d\u0435\u0432\u043e\u043b\u0435\u043d\u0456 \u0437\u0432\u0456\u0440\u0456 +AHLCG-BeforeTheBlackThrone = Before the Black Throne +AHLCG-BeyondTheGatesOfSleep = Beyond the Gates of Sleep +AHLCG-BeyondTheThreshold = Beyond the Threshold +AHLCG-BishopsThralls = \u041f\u043e\u043d\u0435\u0432\u043e\u043b\u0435\u043d\u0456 \u0411\u0456\u0448\u043e\u043f\u0456\u0432 +AHLCG-BlackStarsRise = Black Stars Rise +AHLCG-BloodOnTheAltar = \u041a\u0440\u043e\u0432 \u043d\u0430 \u0432\u0456\u0432\u0442\u0430\u0440\u0456 +AHLCG-BloodthirstySpirits = Bloodthirsty Spirits +AHLCG-BrotherhoodOfTheBeast = Brotherhood of the Beast +AHLCG-ByTheBook = \u042f\u043a \u043a\u043d\u0438\u0436\u043a\u0430 \u043f\u0438\u0448\u0435 +AHLCG-Byakhee = Byakhee +AHLCG-CarnevaleOfHorrorsE = Carnevale of Horrors +AHLCG-ChildrenOfParadise = Children of Paradise +AHLCG-ChillingCold = \u041f\u0440\u043e\u043d\u0438\u0437\u043b\u0438\u0432\u0438\u0439 \u0445\u043e\u043b\u043e\u0434 +AHLCG-ChillingMists = Chilling Mists +AHLCG-CityOfSins = City of Sins +AHLCG-CityOfTheDamned = City of the Damned +AHLCG-CityOfTheElderThings = City of the Elder Things +AHLCG-Corsairs = Corsairs +AHLCG-CreaturesInTheIce = Creatures in the Ice +AHLCG-CreaturesOfTheDeep = Creatures of the Deep +AHLCG-CreaturesOfTheUnderworld = Creatures of the Underworld +AHLCG-CreepingCold = Creeping Cold +AHLCG-CultOfPnakotus = Cult of Pnakotus +AHLCG-CultOfTheYellowSign = Cult of the Yellow Sign +AHLCG-CultOfUmordhoth = \u041a\u0443\u043b\u044c\u0442 \u0423\u043c\u043e\u0440\u0434\u0445\u043e\u0442\u0430 +AHLCG-CurtainCall = Curtain Call +AHLCG-CurseOfTheRougarouE = Curse of the Rougarou +AHLCG-DarkCult = \u0422\u0435\u043c\u043d\u0438\u0439 \u043a\u0443\u043b\u044c\u0442 +AHLCG-DarkRituals = Dark Rituals +AHLCG-DarkSideOfTheMoon = Dark Side of the Moon +AHLCG-DeadlyTraps = Deadly Traps +AHLCG-DeadlyWeather = Deadly Weather +AHLCG-DeathOfStars = Death of Stars +AHLCG-DecayAndFilth = Decay & Filth +AHLCG-DecayingReality = Decaying Reality +AHLCG-Delusions = Delusions +AHLCG-DelusoryEvils = Delusory Evils +AHLCG-DescentIntoThePitch = Descent into the Pitch +AHLCG-DevilReef = Devil Reef +AHLCG-DimCarcosa = Dim Carcosa +AHLCG-DisappearanceAtTheTwilightEstate = Disappearance at the Twilight Estate +AHLCG-DoomedExpedition = Doomed Expedition +AHLCG-DreamersCurse = Dreamer's Curse +AHLCG-Dreamlands = Dreamlands +AHLCG-Dunwich = \u0414\u0430\u043d\u0432\u0456\u0447 +AHLCG-EchoesOfThePast = Echoes of the Past +AHLCG-ElderThings = Elder Things +AHLCG-EpicMultiplayer = Epic Multiplayer +AHLCG-ErraticFear = Erratic Fear +AHLCG-EvilPortents = Evil Portents +AHLCG-ExcelsiorManagement = Excelsior Management +AHLCG-Expedition = Expedition +AHLCG-ExpeditionTeam = Expedition Team +AHLCG-ExtracurricularActivity = \u041f\u043e\u0437\u0430\u043a\u043b\u0430\u0441\u043d\u0456 \u0437\u0430\u043d\u044f\u0442\u0442\u044f +AHLCG-FatalMirage = Fatal Mirage +AHLCG-FloodedCaverns = Flooded Caverns +AHLCG-FogOverInnsmouth = Fog over Innsmouth +AHLCG-ForgottenRuins = Forgotten Ruins +AHLCG-ForTheGreaterGood = For the Greater Good +AHLCG-Ghouls = \u0413\u0443\u043b\u0456 +AHLCG-GhoulsOfUmordhoth = Ghouls of Umordhoth +AHLCG-GuardiansOfTime = Guardians of Time +AHLCG-HastursEnvoys = Hastur's Envoys +AHLCG-HastursGift = Hastur's Gift +AHLCG-Hauntings = Hauntings +AHLCG-HazardsOfAntarctica = Hazards of Antarctica +AHLCG-HeartOfTheElders = Heart of the Elders +AHLCG-Hexcraft = Hexcraft +AHLCG-HideousAbominations = \u041c\u0435\u0440\u0437\u0435\u043d\u043d\u0456 \u0447\u0443\u0434\u043e\u0432\u0438\u0441\u044c\u043a\u0430 +AHLCG-HorrorInHighGear = Horror in High Gear +AHLCG-IceAndDeath = Ice and Death +AHLCG-ImpendingEvils = Impending Evils +AHLCG-InexorableFate = Inexorable Fate +AHLCG-InhabitantsOfCarcosa = Inhabitants of Carcosa +AHLCG-InTheClutchesOfChaos = In the Clutches of Chaos +AHLCG-InTooDeep = In Too Deep +AHLCG-IntoTheMaelstrom = Into the Maelstrom +AHLCG-KnYan = K'n-Yan +AHLCG-LeftBehind = Left Behind +AHLCG-LockedDoors = \u0417\u0430\u0447\u0438\u043d\u0435\u043d\u0456 \u0414\u0432\u0435\u0440\u0456 +AHLCG-LostInTheNight = Lost in the Night +AHLCG-LostInTimeAndSpace = \u0417\u0430\u0433\u0443\u0431\u043b\u0435\u043d\u0456 \u0443 \u0447\u0430\u0441\u0456 \u0456 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0456 +AHLCG-MaddeningDelusions = Maddening Delusions +AHLCG-Malfunction = Malfunction +AHLCG-MemorialsOfTheLost = Memorials of the Lost +AHLCG-MergingRealities = Merging Realities +AHLCG-Miasma = Miasma +AHLCG-MiGoIncursion = Mi-Go Incursion +AHLCG-MurderAtTheExcelsiorHotelE = Murder at the Excelsior Hotel +AHLCG-MusicOfTheDamned = Music of the Damned +AHLCG-NamelessHorrors = Nameless Horrors +AHLCG-NaomisCrew = \u041b\u044e\u0434\u0438 \u041d\u0430\u043e\u043c\u0456 +AHLCG-NeuroticFear = Neurotic Fear +AHLCG-Nightgaunts = \u041d\u0456\u0447\u043d\u0456 \u043f\u0440\u0438\u043c\u0430\u0440\u0438 +AHLCG-TheNightsUsurper = The Night's Usurper +AHLCG-Penguins = Penguins +AHLCG-PillarsOfJudgment = Pillars of Judgment +AHLCG-PnakoticBrotherhood = Pnakotic Brotherhood +AHLCG-PointOfNoReturn = Point of No Return +AHLCG-Poison = Poison +AHLCG-Promos = \u041f\u0440\u043e\u043c\u043e +AHLCG-Rainforest = Rainforest +AHLCG-Rats = \u0429\u0443\u0440\u0438 +AHLCG-ReadOrDie = \u0427\u0438\u0442\u0430\u0439 \u0430\u0431\u043e \u043f\u043e\u043c\u0440\u0438 +AHLCG-RealmOfDeath +\ += Realm of Death +AHLCG-RedTideRising = Red Tide Rising +AHLCG-ResurgentEvils = Resurgent Evils +AHLCG-ReturnToAPhantomOfTruth = Return to A Phantom of Truth +AHLCG-ReturnToAtDeathsDoorstep = Return to At Death's Doorstep +AHLCG-ReturnToBeforeTheBlackThrone = Return to Before the Black Throne +AHLCG-ReturnToBlackStarsRise = Return to Black Stars Rise +AHLCG-ReturnToBloodOnTheAltar = Return to Blood on the Altar +AHLCG-ReturnToCultOfUmordhoth = Cult of Umordhoth (Return) +AHLCG-ReturnToCurtainCall = Return to Curtain Call +AHLCG-ReturnToDimCarcosa = Return to Dim Carcosa +AHLCG-ReturnToDisappearanceAtTheTwilightEstate = Return to Disappearance at the Twilight Estate +AHLCG-ReturnToEchoesOfThePast = Return to Echoes of the Past +AHLCG-ReturnToExtracurricularActivities = Return to Extracurricular Activities +AHLCG-ReturnToForTheGreaterGood = Return to For the Greater Good +AHLCG-ReturnToHeartOfTheElders = Return to Heart of the Elders +AHLCG-ReturnToInTheClutchesOfChaos = Return to In the Clutches of Chaos +AHLCG-ReturnToKnYan = Return to K'n-Yan +AHLCG-ReturnToLostInTimeAndSpace = Return to Lost in Time and Space +AHLCG-ReturnToPillarsOfJudgment = Return to Pillars of Judgment +AHLCG-ReturnToShatteredAeons = Return to Shattered Aeons +AHLCG-ReturnToTheBoundaryBeyond = Return to The Boundary Beyond +AHLCG-ReturnToTheCityOfArchives = Return to The City of Archives +AHLCG-ReturnToTheDepthsOfYoth = Return to The Depths of Yoth +AHLCG-ReturnToTheDevourerBelow = Return to The Devourer Below +AHLCG-ReturnToTheDoomOfEztli = Return to The Doom of Eztli +AHLCG-ReturnToTheEssexCountyExpress = Return to The Essex County Express +AHLCG-ReturnToTheGathering = Return to The Gathering +AHLCG-ReturnToTheHouseAlwaysWins = Return to The House Always Wins +AHLCG-ReturnToTheLastKing = Return to The Last King +AHLCG-ReturnToTheMidnightMasks = Return to The Midnight Masks +AHLCG-ReturnToTheMiskatonicMuseum = Return to The Miskatonic Museum +AHLCG-ReturnToThePallidMask = Return to The Pallid Mask +AHLCG-ReturnToTheRainforest = Return to The Rainforest +AHLCG-ReturnToTheSecretName = Return to The Secret Name +AHLCG-ReturnToTheUnspeakableOath = Return to The Unspeakable Oath +AHLCG-ReturnToTheUntamedWilds = Return to The Untamed Wilds +AHLCG-ReturnToTheWagesOfSin = Return to The Wages of Sin +AHLCG-ReturnToTheWitchingHour = Return to The Witching Hour +AHLCG-ReturnToThreadsOfFate = Return to Threads of Fate +AHLCG-ReturnToTurnBackTime = Return to Turn Back Time +AHLCG-ReturnToUndimensionedAndUnseen = Return to Undimensioned and Unseen +AHLCG-ReturnToUnionAndDisillusion = Return to Union and Disillusion +AHLCG-ReturnToWhereDoomAwaits = Return to Where Doom Awaits +AHLCG-RisingTide = Rising Tide +AHLCG-SandsOfEgypt = Sands of Egypt +AHLCG-SecretDoors = Secret Doors +AHLCG-SecretsOfTheUniverse = Secrets of the Universe +AHLCG-SeepingNightmares = Seeping Nightmares +AHLCG-Serpents = Serpents +AHLCG-ShatteredAeons = Shattered Aeons +AHLCG-ShatteredMemories = Shattered Memories +AHLCG-Shoggoths = Shoggoths +AHLCG-SilenceAndMystery = Silence and Mystery +AHLCG-SilverTwilightLodge = Silver Twilight Lodge +AHLCG-SingleGroup = Single Group +AHLCG-SinsOfThePast = Sins of the Past +AHLCG-Sorcery = \u0427\u0430\u043a\u043b\u0443\u043d\u0441\u0442\u0432\u043e +AHLCG-SpectralPredators = Spectral Predators +AHLCG-Spiders = Spiders +AHLCG-StirringInTheDeep = Stirring in the Deep +AHLCG-StrikingFear = \u041e\u0445\u043e\u043f\u043b\u0435\u043d\u0456 \u0441\u0442\u0440\u0430\u0445\u043e\u043c +AHLCG-SwarmOfAssimilation = Swarm of Assimilation +AHLCG-Syzygy = Syzygy +AHLCG-TekeliLi = Tekeli-Li +AHLCG-TemporalFlux = Temporal Flux +AHLCG-TemporalHunters = Temporal Hunters +AHLCG-TerrorOfTheVale = Terror of the Vale +AHLCG-TheBayou = The Bayou +AHLCG-TheBeyond = \u041f\u043e\u0437\u0430\u043c\u0435\u0436\u0436\u044f +AHLCG-TheBlobThatAteEverythingE = The Blob That Ate Everything +AHLCG-TheBoundaryBeyond = The Boundary Beyond +AHLCG-TheCityOfArchives = The City of Archives +AHLCG-TheCrash = The Crash +AHLCG-TheDepthsOfYoth = The Depths of Yoth +AHLCG-TheDevourerBelow = \u041f\u043e\u0436\u0438\u0440\u0430\u0447 \u0456\u0437 \u0433\u043b\u0438\u0431\u0438\u043d +AHLCG-TheDevourersCult = The Devourer's Cult +AHLCG-TheDoomOfEztli = The Doom of Eztli +AHLCG-TheEssexCountyExpress = \u0415\u043a\u0441\u043f\u0440\u0435\u0441 \u043e\u043a\u0440\u0443\u0433\u0443 \u0415\u0441\u0441\u0435\u043a\u0441 +AHLCG-TheEternalSlumber = The Eternal Slumber +AHLCG-TheFloodBelow = The Flood Below +AHLCG-TheGathering = \u0417\u0456\u0431\u0440\u0430\u043d\u043d\u044f +AHLCG-TheGreatSeal = The Great Seal +AHLCG-TheHeartOfMadness = The Heart of Madness +AHLCG-TheHouseAlwaysWins = \u041a\u0430\u0437\u0438\u043d\u043e \u0437\u0430\u0432\u0436\u0434\u0438 \u0432\u0438\u0433\u0440\u0430\u0454 +AHLCG-TheLabyrinthsOfLunacyE = The Labyrinths of Lunacy +AHLCG-TheLairOfDagon = The Lair of Dagon +AHLCG-TheLastKing = The Last King +AHLCG-TheLocals = The Locals +AHLCG-TheMidnightMasks = \u041e\u043f\u0456\u0432\u043d\u0456\u0447\u043d\u0456 \u043c\u0430\u0441\u043a\u0438 +AHLCG-TheMiskatonicMuseum = \u041c\u0456\u0441\u043a\u0430\u0442\u043e\u043d\u0456\u043a\u0441\u044c\u043a\u0438\u0439 \u043c\u0443\u0437\u0435\u0439 +AHLCG-ThePallidMask = The Pallid Mask +AHLCG-ThePitOfDespair = The Pit of Despair +AHLCG-TheSearchForKadath = The Search for Kadath +AHLCG-TheSecretName = The Secret Name +AHLCG-TheStranger = The Stranger +AHLCG-TheUnspeakableOath = The Unspeakable Oath +AHLCG-TheUntamedWilds = The Untamed Wilds +AHLCG-TheVanishingOfElinaHarper = The Vanishing of Elina Harper +AHLCG-TheVortexAbove = The Vortex Above +AHLCG-TheWagesOfSin = The Wages of Sin +AHLCG-TheWatcher = The Watcher +AHLCG-TheWitchingHour = The Witching Hour +AHLCG-ThreadsOfFate = Threads of Fate +AHLCG-ToTheForbiddenPeaks = To the Forbidden Peaks +AHLCG-TrappedSpirits = Trapped Spirits +AHLCG-TurnBackTime = Turn Back Time +AHLCG-UndimensionedAndUnseen = \u041d\u0435\u0437\u043c\u0456\u0440\u043d\u0456 \u0456 \u043d\u0435\u0432\u0438\u0434\u0438\u043c\u0456 +AHLCG-UnionAndDisillusion = Union and Disillusion +AHLCG-UnspeakableFate = Unspeakable Fate +AHLCG-UnstableRealm = Unstable Realm +AHLCG-VenomousHate = Venomous Hate +AHLCG-VileExperiments = Vile Experiments +AHLCG-WakingNightmare = Waking Nightmare +AHLCG-WarOfTheOuterGodsE = War of the Outer Gods +AHLCG-WeaverOfTheCosmos = Weaver of the Cosmos +AHLCG-WhereDoomAwaits = \u0422\u0430\u043c, \u0434\u0435 \u0447\u0435\u043a\u0430\u0454 \u0437\u0430\u0433\u0438\u0431\u0435\u043b\u044c +AHLCG-WhereTheGodsDwell = Where the Gods Dwell +AHLCG-Whippoorwills = \u0414\u0440\u0456\u043c\u043b\u044e\u0433\u0438 +AHLCG-WhispersOfHypnos = Whispers of Hypnos +AHLCG-Witchcraft = Witchcraft +AHLCG-YigsVenom = Yig's Venom +AHLCG-YogSothothsEmissaries = Yog-Sothoth's Emissaries +AHLCG-Zoogs = Zoogs + +// tips +AHLCG-TraitsTip1 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u0440\u0438\u0441\u0438 (\u043a\u0430\u0440\u0442\u0438 \u0433\u0440\u0430\u0432\u0446\u0456\u0432)\:\n\ +Agency (\u0410\u0433\u0435\u043d\u0442\u0441\u0442\u0432\u043e), Ally (\u0421\u043e\u044e\u0437\u043d\u0438\u043a), Armor (\u0417\u0430\u0445\u0438\u0441\u0442), Artist, Assistant, Augury, Believer (\u0412\u0456\u0440\u0443\u044e\u0447\u0438\u0439), Blessed, Bold, Boon, Broken,\n\ +Bystander (\u0421\u0442\u043e\u0440\u043e\u043d\u043d\u0456\u0439), Charm, Chosen, Clairvoyant, Clothing (\u041e\u0434\u044f\u0433), Composure, Condition (\u0421\u0442\u0430\u043d), Connection, Conspirator (\u0417\u043c\u043e\u0432\u043d\u0438\u043a),\n\ +Covenant, Creature (\u0406\u0441\u0442\u043e\u0442\u0430), Criminal (\u0417\u043b\u043e\u0447\u0438\u043d\u0435\u0446\u044c), Cultist (\u041a\u0443\u043b\u044c\u0442\u0438\u0441\u0442), Cursed, Desperate, Detective (\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432), Developed (\u0420\u043e\u0437\u0432\u0438\u043d\u0443\u0442\u0435),\n\ +Dreamer, Drifter (\u0411\u043b\u0443\u043a\u0430\u0447), Dunwich (\u0414\u0430\u043d\u0432\u0456\u0447), Entrepreneur, Expedition, Expert (\u0415\u043a\u0441\u043f\u0435\u0440\u0442\u043d\u0435), Eztli, Fated, Favor, Firearm (\u0412\u043e\u0433\u043d\u0435\u043f\u0430\u043b\u044c\u043d\u0430),\n\ +Footwear, Fortune (\u0424\u043e\u0440\u0442\u0443\u043d\u0430), Gambit, Geist, Ghoul (\u0413\u0443\u043b\u044c), Historical Society, Human (\u041b\u044e\u0434\u0438\u043d\u0430), Hunter (\u041c\u0438\u0441\u043b\u0438\u0432\u0435\u0446\u044c), Hybrid,\n\ +Illicit (\u041d\u0435\u0437\u0430\u043a\u043e\u043d\u043d\u0438\u0439), Improvised, Innate (\u0412\u0440\u043e\u0434\u0436\u0435\u043d\u0435), Insight (\u0406\u043d\u0442\u0443\u0457\u0446\u0456\u044f), Instrument (\u0406\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442), Item (\u041f\u0440\u0435\u0434\u043c\u0435\u0442), Key (\u041a\u043b\u044e\u0447), Lunatic,\n\ +Medic, Melee (\u0411\u043b\u0438\u0436\u043d\u0456\u0439 \u0431\u0456\u0439), Monster (\u041c\u043e\u043d\u0441\u0442\u0440), Miskatonic (\u041c\u0456\u0441\u043a\u0430\u0442\u043e\u043d\u0456\u043a), Occult, Ooze, Pact (\u0423\u0433\u043e\u0434\u0430), Paradox, Patron, Performer (\u0410\u0440\u0442\u0438\u0441\u0442),\n\ +Police (\u041f\u043e\u043b\u0456\u0446\u0456\u044f), Practiced (\u041d\u0430\u0431\u0443\u0442\u0435), Ranged, Relic (\u0420\u0435\u043b\u0456\u043a\u0432\u0456\u044f), Reporter (\u0420\u0435\u043f\u043e\u0440\u0442\u0435\u0440), Resolute, Ritual, Science (\u041d\u0430\u0443\u043a\u0430), Scholar, Service,\n\ +Silver Twilight (\u0421\u0440\u0456\u0431\u043d\u0456 \u0421\u0443\u0442\u0456\u043d\u043a\u0438), Socialite, Song (\u041f\u0456\u0441\u043d\u044f), Sorcerer (\u0427\u0430\u043a\u043b\u0443\u043d), Spell (\u0417\u0430\u043a\u043b\u0438\u043d\u0430\u043d\u043d\u044f), Spirit (\u0414\u0443\u0445), Supply (\u0417\u0430\u043f\u0430\u0441), Synergy,\n\ +Tactic (\u0422\u0430\u043a\u0442\u0438\u043a\u0430), Talent (\u0422\u0430\u043b\u0430\u043d\u0442), Tarot, Task (\u041e\u0431\u043e\u0432'\u044f\u0437\u043e\u043a), Tome (\u041a\u043d\u0438\u0433\u0430), Tool, Trap, Trick, Unbroken, Upgrade, Vehicle, Veteran, Warden,\n\ +Wayfarer, Weapon (\u0417\u0431\u0440\u043e\u044f), Witch, Yithian (\u0419\u0456\u0442\u0456\u0430\u043d\u0438\u043d) + +AHLCG-TraitsTip2 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u0440\u0438\u0441\u0438 (\u043a\u0430\u0440\u0442\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432/\u0441\u043b\u0430\u0431\u043a\u043e\u0441\u0442\u0456)\:\n\ +Attack, Avatar, Blunder, Curse (\u041f\u0440\u043e\u043a\u043b\u044f\u0442\u0442\u044f), Endtimes (\u041a\u0456\u043d\u0435\u0446\u044c \u0447\u0430\u0441\u0456\u0432), Flaw (\u041d\u0435\u0434\u043e\u043b\u0456\u043a), Geist, Hazard (\u0420\u0438\u0437\u0438\u043a), Hex (\u0427\u0430\u043a\u043b\u0443\u043d\u0441\u0442\u0432\u043e),\n\ +Illicit (\u041d\u0435\u0437\u0430\u043a\u043e\u043d\u043d\u0438\u0439), Injury (\u041f\u043e\u0448\u043a\u043e\u0434\u0436\u0435\u043d\u043d\u044f), Insight (\u0406\u043d\u0442\u0443\u0457\u0446\u0456\u044f), Item (\u041f\u0440\u0435\u0434\u043c\u0435\u0442), Madness (\u0411\u043e\u0436\u0435\u0432\u0456\u043b\u043b\u044f), Mi-Go, Monster, Mystery,\n\ +Obstacle (\u041f\u0435\u0440\u0435\u0448\u043a\u043e\u0434\u0430), Omen (\u0417\u043d\u0430\u043c\u0435\u043d\u043d\u044f), Ooze, Pact (\u0423\u0433\u043e\u0434\u0430), Paradox, Poison (\u041e\u0442\u0440\u0443\u0442\u0430), Power (\u041c\u0456\u0446\u044c), Scheme, Servitor, Spectral,\n\ +Tactic (\u0422\u0430\u043a\u0442\u0438\u043a\u0430), Task (\u041e\u0431\u043e\u0432'\u044f\u0437\u043e\u043a), Terror (\u0416\u0430\u0445\u0456\u0442\u0442\u044f), Trap, Yithian (\u0419\u0456\u0442\u0456\u0430\u043d\u0438\u043d) + +AHLCG-TraitsTip3 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u0440\u0438\u0441\u0438 (\u0432\u043e\u0440\u043e\u0433\u0438)\:\n\ +Abomination (\u0427\u0443\u0434\u043e\u0432\u0438\u0441\u044c\u043a\u043e), Ancient One (\u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0456\u0439), Avatar, Byakhee (\u0411'\u044f\u043a\u0445\u0456), Conspirator (\u0417\u043c\u043e\u0432\u043d\u0438\u043a), Creature (\u0406\u0441\u0442\u043e\u0442\u0430),\n\ +Criminal (\u0417\u043b\u043e\u0447\u0438\u043d\u0435\u0446\u044c), Cultist (\u041a\u0443\u043b\u044c\u0442\u0438\u0441\u0442), Cursed, Dark Young (\u0422\u0435\u043c\u043d\u0430 \u043f\u0430\u043c\u043e\u043b\u043e\u0434\u044c), Deep One (\u0413\u043b\u0438\u0431\u043e\u043a\u043e\u0432\u043e\u0434\u043d\u0438\u0439), Detective (\u0414\u0435\u0442\u0435\u043a\u0442\u0438\u0432),\n\ +Dhole, Dreamlands, Eidolon, Elder Thing, Elite (\u0415\u043b\u0456\u0442\u043d\u0438\u0439), Extradimensional, Eztli, Familiar, Flora, Geist, Ghast, Ghoul (\u0413\u0443\u043b\u044c),\n\ +Gug, Human (\u041b\u044e\u0434\u0438\u043d\u0430), Humanoid (\u0413\u0443\u043c\u0430\u043d\u043e\u0457\u0434), Hybrid, Insect, Lunatic, Manifold, Monster (\u041c\u043e\u043d\u0441\u0442\u0440), Mutated, Nightgaunt (\u041d\u0456\u0447\u043d\u0430 \u043f\u0440\u0438\u043c\u0430\u0440\u0430),\n\ +Ooze, Possessed, Serpent, Servitor, Shoggoth (\u0428\u043e\u0433\u0433\u043e\u0442), Silver Twilight (\u0421\u0440\u0456\u0431\u043d\u0456 \u0421\u0443\u0442\u0456\u043d\u043a\u0438), Sorcerer (\u0427\u0430\u043a\u043b\u0443\u043d), Spectral, Spider, Staff,\n\ +Suspect, Syndicate (\u0421\u0438\u043d\u0434\u0438\u043a\u0430\u0442), Vehicle, Warden, Witch, Yithian (\u0419\u0456\u0442\u0456\u0430\u043d\u0438\u043d), Zoog + +AHLCG-TraitsTip4 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u0440\u0438\u0441\u0438 (\u043b\u043e\u043a\u0430\u0446\u0456\u0457)\:\n\ +\u0412\u0438\u0434\u043e\u0437\u043c\u0456\u043d\u0435\u043d\u0430, Ancient, Arkham (\u0410\u0440\u043a\u0433\u0435\u043c), Arkham Asylum, Basement, Campsite, Cave (\u041f\u0435\u0447\u0435\u0440\u0430), Central (\u0426\u0435\u043d\u0442\u0440), City,\n\ +Clover Club (\u041a\u043b\u0443\u0431 \u00ab\u041a\u043b\u043e\u0432\u0435\u0440\u00bb), Coastal, Depths, Dunwich (\u0414\u0430\u043d\u0432\u0456\u0447), Exhibit (\u0412\u0438\u0441\u0442\u0430\u0432\u043a\u0430), Extradimensional, Falcon Point, Forbidden,\n\ +Forgotten, Future, Glacier, Graveyard, Ground Floor, Hideout, Innsmouth, Island, Jungle, Lair, Lodge, Mainland, Mexico City,\n\ +Midtown, Mirage, Miskatonic (\u041c\u0456\u0441\u043a\u0430\u0442\u043e\u043d\u0456\u043a), Mnar, Montr\u00e9al, Mountain, Mountains, New York City, Ocean, Ooth-Nargai, Oozified,\n\ +Oriab, Otherworld (\u0406\u043d\u0448\u0438\u0439 \u0441\u0432\u0456\u0442), Paris, Passageway, Pnakotus, Port, Present-Day, Private, Providence, Rail, Ritual Site, River,\n\ +Road, Ruins, Salem, Sanctum, Second Floor, Sentinel Hill (\u0412\u0430\u0440\u0442\u043e\u0432\u0438\u0439 \u043f\u0430\u0433\u043e\u0440\u0431), Shattered, Ship, Skai, Spectral, St. Mary's, Steps,\n\ +Surface, Temple, Tenochtitl\u00e1n, Third Floor, Train (\u041f\u043e\u0442\u044f\u0433), Uncharted, Vale, Void, Wastes, Witch House, Woods (\u041b\u0456\u0441\u0438),Y'ha-nthlei,Yoth + +AHLCG-KeywordsTip1 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u043a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430\:\n\ +Alert, Aloof (\u0412\u0456\u0434\u0447\u0443\u0436\u0435\u043d\u0438\u0439), Exceptional (\u0412\u0438\u043d\u044f\u0442\u043a\u043e\u0432\u0438\u0439), Fast (\u041c\u0438\u0442\u0442\u0454\u0432\u0430), Hidden, Hunter (\u041c\u0438\u0441\u043b\u0438\u0432\u0435\u0446\u044c), Massive (\u041c\u0430\u0441\u0438\u0432\u043d\u0438\u0439), Mirage X, Retaliate (\u041c\u0435\u0441\u043d\u0438\u043a),\n\ +Partner, Peril (\u041d\u0435\u0431\u0435\u0437\u043f\u0435\u043a\u0430), Permanent (\u041f\u043e\u0441\u0442\u0456\u0439\u043d\u0438\u0439), Road X, Surge (\u041d\u0430\u0432\u0430\u043b\u0430), Swarming X, Uses (X type) (\u0417\u0430\u0441\u0442\u043e\u0432\u043e\u0441\u043d\u0456\u0441\u0442\u044c (\u0425)), Veiled\n\n\ +----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\ +
 Prey (\u0416\u0435\u0440\u0442\u0432\u0430)\n\
+ Spawn (\u0420\u043e\u0437\u043c\u0456\u0449\u0435\u043d\u043d\u044f)
+
+AHLCG-RulesTip1 = ----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\
+ Card name (\u0406\u043c'\u044f \u043a\u0430\u0440\u0442\u0438)\n\n\
+ Guardian (\u0412\u0430\u0440\u0442\u043e\u0432\u0438\u0439)\n\
+ Seeker (\u0428\u0443\u043a\u0430\u0447)\n\
+ Rogue (\u0421\u043f\u0440\u0438\u0442\u043d\u0438\u043a)\n\
+ Mystic (\u041c\u0456\u0441\u0442\u0438\u043a)\n\
+ Survivor (\u0412\u0446\u0456\u043b\u0456\u043b\u0438\u0439)\n\n\
+ Willpower (\u0412\u043e\u043b\u044f)\n\
+ Intellect (\u0406\u043d\u0442\u0435\u043b\u0435\u043a\u0442)\n\
+ Combat (\u0421\u0438\u043b\u0430)\n\
+ Agility (\u0421\u043f\u0440\u0438\u0442\u043d\u0456\u0441\u0442\u044c)\n\
+ Wild (\u0423\u043d\u0456\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u0438\u0439)\n\n\
+ Skull (\u0427\u0435\u0440\u0435\u043f)\n\
+ Cultist (\u041a\u0443\u043b\u044c\u0442\u0438\u0441\u0442)\n\
+ Tablet (\u0422\u0430\u0431\u043b\u0438\u0447\u043a\u0430)\n\
+ Elder Thing (\u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0454 \u0449\u043e\u0441\u044c)\n\
+ Bless\n\
+ Curse\n\
+ Elder Sign (\u0417\u043d\u0430\u043a \u041f\u0440\u0430\u0434\u0430\u0432\u043d\u0456\u0445)\n\
+ Tentacles (\u041c\u0430\u0446\u0430\u043a\u0438)\n\n\
+\u0422\u0435\u0433\u0438 \u043d\u0430\u0431\u043e\u0440\u0456\u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 \u0456 \u0446\u0438\u043a\u043b\u0456\u0432 \u043f\u0435\u0440\u0435\u0440\u0430\u0445\u043e\u0432\u0430\u043d\u0456 \u0432 \u0440\u043e\u0437\u0434\u0456\u043b\u0456 \n\
+\u0416\u0430\u0445 \u0410\u0440\u043a\u0433\u0435\u043c\u0430\: \u041a\u0430\u0440\u0442\u043a\u043e\u0432\u0430 \u0433\u0440\u0430 \u0443 \u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u0445.\n\
+\u0414\u043e\u0434\u0430\u0439\u0442\u0435 's' \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u043e\u0457 \u0456\u043a\u043e\u043d\u043a\u0438, 'm' \u0434\u043b\u044f \u0441\u0435\u0440\u0435\u0434\u043d\u044c\u043e\u0457, \u0442\u0430 'l'\n\
+\u0434\u043b\u044f \u0432\u0435\u043b\u0438\u043a\u043e\u0457.\n\
+\u041d\u0430\u043f\u0440\u0438\u043a\u043b\u0430\u0434\: , , 
+
+AHLCG-RulesTip2 = ----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\
+ Action (\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0456\u044f \u0434\u0456\u0454\u044e)\n\
+ Free (\u0411\u0435\u0437\u043a\u043e\u0448\u0442\u043e\u0432\u043d\u0430 \u0430\u043a\u0442\u0438\u0432\u0430\u0446\u0456\u044f)\n\
+ Reaction (\u0410\u043a\u0442\u0438\u0432\u0430\u0446\u0456\u044f \u0440\u0435\u0430\u043a\u0446\u0456\u0454\u044e)\n\n\
+ Forced (\u041f\u0440\u0438\u043c\u0443\u0441\u043e\u0432\u043e)\n\
+ Haunted\n\
+ Objective (\u0426\u0456\u043b\u044c)\n\n\
+ Revelation (\u0420\u043e\u0437\u043a\u0440\u0438\u0442\u0442\u044f)\n\
+ Unique (\u0423\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0430)\n\
+ Per investigator (\u0417\u0430 \u0434\u043e\u0441\u043b\u0456\u0434\u043d\u0438\u043a\u0430)\n\
+ Back title (\u041d\u0430\u0437\u0432\u0430 \u0437\u0432\u043e\u0440\u043e\u0442\u0443)\n\n\
+ Bullet\n\
+ Square\n\
+ Asterisk\n\
+ Tab spacing for\n\
+         bullet sections\n\n\
+ Resolution arrow + R\n\
+ End resolution\n\
+ Customizable checkbox\n\n\
+ Trait (\u0420\u0438\u0441\u0430)\n\
+ Horizontal spacer\n\
+ Large vertical spacer\n\
+ Vertical spacer\n\
+ Small vertical spacer
+
+AHLCG-RulesTip3 = ----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\
+ Body (\u041e\u0441\u043d\u043e\u0432\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442)\n\
+ Header (\u0417\u0430\u0433\u043e\u043b\u043e\u0432\u043e\u043a)\n\
+ Flavor (\u0425\u0443\u0434\u043e\u0436\u043d\u0456\u0439 \u0442\u0435\u043a\u0441\u0442)\n\
+ Story (\u0421\u044e\u0436\u0435\u0442\u043d\u0438\u0439 \u0442\u0435\u043a\u0441\u0442)\n\
+ Victory (\u041f\u0435\u0440\u0435\u043c\u043e\u0433\u0430)\n\n\
+... Edge of the Earth seal symbols
+
+AHLCG-RulesTip4 = ----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\
+
...
Section header\n\ +
...
Secondary header\n\ +color : Text color as HEX code\n\ + "color=rrggbb"\n\ + e.g.
\n\n\ + Resolution box\n\ + Standalone box\n\ + Interlude box\n\ +: Flashback box\n\n\ +bracket : Displays bracket at top of box\n\ +header : Displays a standard header at top of box\n\ +color : Tints the box using the supplied H, S, B values\n\ + "color=H, S, B", where:\n\ + H = hue (0.0 - 1.0)\n\ + S = saturation (0.0 - 1.0)\n\ + B = brightness (0.0 - 1.0)\n\ + (Text will still need to be colored separately)\n\ + e.g. \n\n\ + or End highlight box (with bracket)\n\ + or End interlude/flashback box\n\n\ +Example: ... \n\n\ + Resolution bullet + +AHLCG-VictoryTip1 = \u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0456 \u043a\u043b\u044e\u0447\u043e\u0432\u0456 \u0441\u043b\u043e\u0432\u0430\:\n\ +Victory X (\u041f\u0435\u0440\u0435\u043c\u043e\u0433\u0430 \u0425), Vengeance X + +AHLCG-CopyrightTip1 = ----- \u0414\u041e\u0421\u0422\u0423\u041f\u041d\u0406 \u0422\u0415\u0413\u0418 -----\n\ + Copyright + +AHLCG-PrefEncounterTip = \u0412\u0438\u0437\u043d\u0430\u0447\u0430\u0454, \u044f\u043a\u0456 \u043d\u0430\u0431\u043e\u0440\u0438 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438\u043c\u0443\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u043f\u0430\u0434\u0430\u044e\u0447\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u041d\u0430\u0431\u043e\u0440\u0456\u0432 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.

\ +\u0406\u043c'\u044f\: \u041d\u0430\u0437\u0432\u0430 \u043d\u0430\u0431\u043e\u0440\u0443
\ +\u0426\u0438\u043a\u043b\: \u041d\u0430\u0437\u0432\u0430 \u0446\u0438\u043a\u043b\u0443
\ +\u0406\u043a\u043e\u043d\u043a\u0430\: \u0406\u043c\u2019\u044f \u0444\u0430\u0439\u043b\u0443 \u0456\u043a\u043e\u043d\u043a\u0438 - \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u041d\u0430\u0431\u043e\u0440\u0443 \u043a\u043e\u043d\u0442\u0430\u043a\u0442\u0456\u0432
\ +\u0422\u0435\u0433\: \u041e\u0441\u043d\u043e\u0432\u0438\u0439 \u0442\u0435\u0433, \u044f\u043a\u0438\u0439 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0456\u043a\u043e\u043d\u043a\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0456 \u043e\u0431\u043b\u0430\u0441\u0442\u0456. \u042f\u043a\u0449\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u043c \u0442\u0435\u0433\u043e\u043c \u0454 "rats", \u0431\u0443\u0434\u0443\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u0456 \u0442\u0435\u0433\u0438\:

\ +<ratss> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443 \u0456\u043a\u043e\u043d\u043a\u0443
\ +<ratsm> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u0441\u0435\u0440\u0435\u0434\u043d\u044e \u0456\u043a\u043e\u043d\u043a\u0443
\ +<ratsl> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u0432\u0435\u043b\u0438\u043a\u0443 \u0456\u043a\u043e\u043d\u043a\u0443

\ +\u0414\u043b\u044f \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043c\u0456\u043d, \u0431\u0443\u0434\u044c-\u044f\u043a\u0456 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0456 \u043a\u0430\u0440\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438. + +AHLCG-PrefCollectionTip = \u0412\u0438\u0437\u043d\u0430\u0447\u0430\u0454, \u044f\u043a\u0456 \u0446\u0438\u043a\u043b\u0438 \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u0438\u043c\u0443\u0442\u044c\u0441\u044f \u0443 \u0432\u0438\u043f\u0430\u0434\u0430\u044e\u0447\u043e\u043c\u0443 \u0441\u043f\u0438\u0441\u043a\u0443 \u0426\u0438\u043a\u043b\u0456\u0432 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0430.

\ +\u0406\u043c'\u044f\: \u041d\u0430\u0437\u0432\u0430 \u0446\u0438\u043a\u043b\u0443
\ +\u0406\u043a\u043e\u043d\u043a\u0430\: \u0406\u043c\u2019\u044f \u0444\u0430\u0439\u043b\u0443 \u0456\u043a\u043e\u043d\u043a\u0438 - \u0441\u0438\u043c\u0432\u043e\u043b\u0443 \u0426\u0438\u043a\u043b\u0443
\ +\u0422\u0435\u0433\: \u041e\u0441\u043d\u043e\u0432\u0438\u0439 \u0442\u0435\u0433, \u044f\u043a\u0438\u0439 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0438 \u0456\u043a\u043e\u043d\u043a\u0438 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0456 \u043e\u0431\u043b\u0430\u0441\u0442\u0456. \u042f\u043a\u0449\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0438\u043c \u0442\u0435\u0433\u043e\u043c \u0454 "core", \u0431\u0443\u0434\u0443\u0442\u044c \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0456 \u0442\u0430\u043a\u0456 \u0442\u0435\u0433\u0438\:

\ +<cores> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0443 \u0456\u043a\u043e\u043d\u043a\u0443
\ +<corem> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u0441\u0435\u0440\u0435\u0434\u043d\u044e \u0456\u043a\u043e\u043d\u043a\u0443
\ +<corel> \: \u0412\u0441\u0442\u0430\u0432\u043b\u044f\u0454 \u0432\u0435\u043b\u0438\u043a\u0443 \u0456\u043a\u043e\u043d\u043a\u0443

\ +\u0414\u043b\u044f \u0432\u0456\u0434\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u043d\u044f \u0437\u043c\u0456\u043d, \u0431\u0443\u0434\u044c-\u044f\u043a\u0456 \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0456 \u043a\u0430\u0440\u0442\u0438 \u043f\u043e\u0442\u0440\u0456\u0431\u043d\u043e \u0437\u0430\u043d\u043e\u0432\u043e \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u0438. + +AHLCG-PrefDefaultFontsTip = \u0412 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c\u0443 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0454\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u0437\u0430\u043c\u0456\u043d\u0438 \u0448\u0440\u0438\u0444\u0442\u0456\u0432 \u0434\u043b\u044f \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0438 \u0440\u0456\u0437\u043d\u0438\u0445 \u043c\u043e\u0432,
\ +\u0430\u043b\u0435 \u0442\u0430\u043a\u043e\u0436 \u043c\u043e\u0436\u0435 \u0434\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u0438 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u0432\u0430\u0442\u0438 \u0448\u0440\u0438\u0444\u0442 \u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0456 \u0431\u0435\u0437 \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u0442\u0435\u0433\u0443 <family>. diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh.properties new file mode 100644 index 0000000..a662e1d --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh.properties @@ -0,0 +1,514 @@ +#AHLCG-Interface_zh.properties +#Fri Jan 07 11:24:06 CST 2022 +AHLCG-Guide-BottomRightMedium=\u53f3\u4e0b, \u4e2d +AHLCG-LocIcon-DoubleSlashAlt=\u96d9\u659c\u7dda(\u7570\u8272) +AHLCG-StoryInvestigator=\u6545\u4e8b\u8abf\u67e5\u54e1 +AHLCG-WeaverOfTheCosmos=Weaver of the Cosmos +AHLCG-Page=\u9801 +AHLCG-TrackerBox=\u7d00\u9304\u6b04 +AHLCG-Sanity=\u795e\u667a\u503c +AHLCG-ReturnToTheBoundaryBeyond=\u91cd\u8fd4\u754c\u9650\u5f7c\u7aef +AHLCG-Guide-BottomRightSmall=\u53f3\u4e0b, \u5c0f +AHLCG-TextScale=\u6587\u5b57\u7e2e\u653e +AHLCG-TheBlobThatAteEverything=\u541e\u566c\u842c\u7269 +AHLCG-TheFloodBelow=\u5730\u5e95\u6d2a\u6d41 +AHLCG-Pref-Select=\u9078\u64c7... +AHLCG-Guide-BottomLeftCorner=\u5de6\u4e0b, L\u5f62 +AHLCG-Evade=\u8eb2\u907f\u503c +AHLCG-PnakoticBrotherhood=\u7d0d\u514b\u7279\u5144\u5f1f\u6703 +AHLCG-WhereTheGodsDwell=Where the Gods Dwell +AHLCG-AgentsOfAzathoth=\u963f\u6492\u6258\u65af\u7684\u4f7f\u5f92 +AHLCG-Copyright=\u7248\u6b0a +//=tips +AHLCG-AgentsOfCthulhu=\u514b\u8607\u9b6f\u7684\u4f7f\u8005 +AHLCG-SpectralPredators=\u5e7d\u9748\u6355\u98df\u8005 +AHLCG-TheLabyrinthsOfLunacy=The Labyrinths of Lunacy +AHLCG-ElderThing=\u53e4\u795e +AHLCG-AgentsOfNyarlathotep=Agents of Nyarlathotep +AHLCG-CultOfUmordhoth=\u70cf\u9ed8\u723e\u591a\u65af\u7684\u5d07\u62dc\u8005 +AHLCG-AnettesCoven=\u5b89\u59ae\u7279\u7684\u5973\u5deb\u96c6\u6703 +AHLCG-ParallelInvestigators=\u5e73\u884c\u8abf\u67e5\u54e1 +AHLCG-ThePallidMask=\u84bc\u767d\u9762\u5177 +AHLCG-TheDevourerBelow=\u5730\u5e95\u566c\u9b54 +AHLCG-BrotherhoodOfTheBeast=\u60e1\u7378\u5144\u5f1f\u6703 +AHLCG-Dreamlands=Dreamlands +AHLCG-Pref-Cycle=\u5faa\u74b0 +AHLCG-Location=\u5730\u9ede +AHLCG-Icon=\u5716\u6a19 +AHLCG-LocIcon-T=T\u5b57\u5f62 +AHLCG-Portraits=\u756b\u50cf +AHLCG-CustomCollection=\u975e\u5b98\u65b9\u6536\u85cf +AHLCG-ActNumber=\u5834\u666f\u7de8\u865f +AHLCG-TCUPrologue=\u842c\u8c61\u7121\u7d42\u5e8f\u5e55 +AHLCG-TheSearchForKadath=The Search for Kadath +AHLCG-Class2=\u7b2c\u4e8c\u8077\u968e +AHLCG-TemporalHunters=Temporal Hunters +AHLCG-GuardiansOfTheAbyss=\u6df1\u6df5\u5b88\u885b +AHLCG-VenomousHate=Venomous Hate +AHLCG-Guide-None=\u7121 +AHLCG-DarkCult=\u9ed1\u6697\u7570\u6559\u5f92 +AHLCG-TheWagesOfSin=\u60e1\u7f6a\u5831\u61c9 +AHLCG-TemporalFlux=\u6642\u9593\u6e67\u52d5 +AHLCG-AgentsOfAtlachNacha=Agents of Atlach-Nacha +AHLCG-DecayAndFilth=\u8870\u6557\u8207\u6c59\u7a62 +AHLCG-Witchcraft=\u5deb\u6cd5 +AHLCG-LocIcon-Clover=\u4e09\u8449\u8349\u5f62 +AHLCG-DisappearanceAtTheTwilightEstate=\u66ae\u8272\u838a\u5712\u5931\u8e64\u4e8b\u4ef6 +AHLCG-StoryTreachery=\u6545\u4e8b/\u8a6d\u8a08 +AHLCG-HastursEnvoys=Hastur's Envoys +AHLCG-LocIcon-Cross=\u5341\u5b57 +AHLCG-TheDevourersCult=\u566c\u9b54\u7570\u6559\u5f92 +AHLCG-PillarsOfJudgment=\u5be9\u5224\u4e4b\u67f1 +AHLCG-Serpents=\u86c7\u65cf +AHLCG-InTheClutchesOfChaos=\u6df7\u6c8c\u9b54\u638c +AHLCG-Class-ParallelRogue=\u6d41\u6d6a\u8005(\u5e73\u884c\u7248) +AHLCG-AgentsOfYogSothoth=\u7336\u683c\u00b7\u7d22\u6258\u65af\u7684\u4f7f\u8005 +AHLCG-Pref-UserCollections=\u81ea\u8a02\u6536\u85cf\u5305\: +AHLCG-BeyondTheGatesOfSleep=Beyond the Gates of Sleep +AHLCG-Header=\u6bb5\u843d\u6a19\u984c +AHLCG-ReturnToAPhantomOfTruth=\u91cd\u8fd4\u771f\u76f8\u5e7b\u5f71 +AHLCG-DarkSideOfTheMoon=Dark Side of the Moon +AHLCG-CopyrightTitle=\u7248\u6b0a\u8cc7\u8a0a +AHLCG-Rules=\u904a\u6232\u6587\u672c +AHLCG-AlienInterference=\u5916\u661f\u5e72\u64fe +AHLCG-TheMidnightMasks=\u5348\u591c\u5047\u9762 +AHLCG-ReturnToCurtainCall=\u91cd\u8fd4\u8b1d\u5e55 +AHLCG-WhispersOfHypnos=Whispers of Hypnos +AHLCG-AThousandShapesOfHorror=A Thousand Shapes of Horror +AHLCG-GuardiansOfTime=\u6642\u9593\u5b88\u885b\u8005 +AHLCG-Slot-2Arcane=2\u500b\u6cd5\u8853\u69fd +AHLCG-Dunwich=\u6566\u5a01\u6cbb +AHLCG-StellaClark=\u65af\u7279\u62c9\u00b7\u514b\u62c9\u514b +AHLCG-BloodOnTheAltar=\u8840\u8272\u796d\u58c7 +AHLCG-UndimensionedAndUnseen=\u7121\u4eba\u77e5\u66c9 +AHLCG-Orientation=\u65b9\u5411 +AHLCG-StoryAsset=\u6545\u4e8b/\u6545\u4e8b\u652f\u63f4\u5361 +AHLCG-JacquelineFine=\u5091\u594e\u7433\u00b7\u6cd5\u6069 +AHLCG-Class-None=\u7121\u8077\u968e +AHLCG-Rainforest=\u96e8\u6797 +AHLCG-ReturnToKnYan=\u91cd\u8fd4\u6606\u63da +AHLCG-Guide-TopRightCorner=\u53f3\u4e0a, L\u5f62 +AHLCG-Pref-AddCustomSet=\u65b0\u589e\u81ea\u8a02\u906d\u9047\u7d44\: +AHLCG-YigsVenom=\u4f0a\u683c\u7684\u6bd2\u6db2 +AHLCG-Class-ParallelSeeker=\u63a2\u6c42\u8005(\u5e73\u884c\u7248) +AHLCG-Horror=\u6050\u61fc\u503c +AHLCG-Subtitle=\u526f\u6a19\u984c +AHLCG-ReturnToExtracurricularActivities=\u91cd\u8fd4\u8ab2\u5916\u6d3b\u52d5 +AHLCG-CreepingCold=\u5bd2\u51b7\u8513\u5ef6 +AHLCG-Whippoorwills=\u591c\u9df9 +AHLCG-WknType-BasicWeakness=\u57fa\u790e\u5f31\u9ede +AHLCG-Back-Standard=\u6a19\u6e96 +AHLCG-TheEssexCountyExpress=\u760b\u72c2\u5217\u8eca +AHLCG-Type=\u7a2e\u985e +AHLCG-ReturnToTheGathering=\u91cd\u8fd4\u805a\u96c6\u65bc\u6b64 +AHLCG-LocIcon-TriangleAlt=\u4e09\u89d2\u5f62(\u7570\u8272) +AHLCG-TheCircleUndone=\u842c\u8c61\u7121\u7d42 +AHLCG-Asset=\u652f\u63f4 +AHLCG-CurseOfTheRougarou=\u72fc\u4eba\u8a5b\u5492 +AHLCG-CollectionNumber=\u7de8\u865f +AHLCG-ChillingCold=\u5bd2\u51b7\u523a\u9aa8 +AHLCG-Sanity-None=\u7121\u795e\u667a\u503c +AHLCG-CityOfSins=\u7f6a\u60e1\u4e4b\u57ce +AHLCG-ActStory=\u6545\u4e8b +AHLCG-ReturnToThePathToCarcosa=\u91cd\u8fd4\u5361\u723e\u514b\u85a9\u4e4b\u8def +AHLCG-ReturnToDimCarcosa=\u91cd\u8fd4\u5361\u57ce\u5e7d\u5f71 +AHLCG-Doom=\u6bc0\u6ec5\u6a19\u8a18 +AHLCG-AgentsOfDagon=Agents of Dagon +AHLCG-ReturnToBlackStarsRise=\u91cd\u8fd4\u9ed1\u661f\u5347\u8d77 +AHLCG-LocIcon-Square=\u65b9\u5f62 +AHLCG-DeckSize=\u724c\u7d44\u5f35\u6578 +AHLCG-DescentIntoThePitch=Descent into the Pitch +AHLCG-KeywordsTip1=\u5b98\u65b9\u5361\u724c\u95dc\u9375\u8a5e\:\n\u8b66\u6212, \u51b7\u6f20, \u5353\u8d8a, \u5feb\u901f, \u96b1\u79c1, \u7375\u624b, \u53cd\u64ca, \u798d\u5bb3, \u6c38\u4e45, Road X, \u6e67\u52d5, \u8702\u64c1X, \u4f7f\u7528(X type), Veiled\n\n----- \u53ef\u7528\u6a19\u7c64 -----\n
 \u7375\u7269\n \u751f\u6210
+AHLCG-BeyondTheThreshold=\u7570\u4e16\u754c\u5f7c\u7aef
+AHLCG-EnemyEnemy=\u6575\u4eba/\u6575\u4eba
+AHLCG-ReturnToTheCityOfArchives=\u91cd\u8fd4\u5929\u6a5f\u4e4b\u57ce
+AHLCG-TheMiskatonicMuseum=\u535a\u7269\u9928\u4e4b\u591c
+AHLCG-Divider=\u5206\u9694\u677f
+AHLCG-Guide-TopRightSmall=\u53f3\u4e0a, \u5c0f
+AHLCG-Cultist=\u7570\u6559\u5f92
+AHLCG-Slot-1Arcane=1\u500b\u6cd5\u8853\u69fd
+AHLCG-StartingPlayArea=\u8d77\u59cb\u904a\u6232\u5340\u57df
+AHLCG-Hauntings=\u5982\u5f71\u96a8\u5f62
+AHLCG-WinifredHabbamock=\u6eab\u59ae\u5f17\u96f7\u5fb7\u00b7\u54c8\u5df4\u9ed8\u514b
+AHLCG-Byakhee=\u62dc\u4e9e\u57fa
+AHLCG-CopyrightTip1=----- \u53ef\u7528\u6a19\u7c64 -----\n Copyright
+AHLCG-ActPortrait=\u5834\u666f/\u5716\u50cf
+AHLCG-Guide-TopLeftCorner=\u5de6\u4e0a, L\u5f62
+AHLCG-DimCarcosa=\u5361\u57ce\u5e7d\u5f71
+AHLCG-ReturnToLostInTimeAndSpace=\u91cd\u8fd4\u8ff7\u5931\u6642\u7a7a
+AHLCG-WknType-Weakness=\u5f31\u9ede
+AHLCG-ChildrenOfParadise=\u6a02\u5712\u4e4b\u5b50
+AHLCG-MiGoIncursion=\u7c73\u6208\u5165\u4fb5
+AHLCG-HorrorInHighGear=Horror in High Gear
+AHLCG-Pref-Icon=\u5716\u6a19
+AHLCG-LocIcon-Heart=\u5fc3\u5f62
+AHLCG-Share=Share
+AHLCG-Pref-UncheckSets=\u53d6\u6d88\u52fe\u9078\u906d\u9047\u7d44
+AHLCG-NaomisCrew=\u5a1c\u5967\u7c73\u7684\u6253\u624b
+AHLCG-WknType-StoryWeakness=\u6545\u4e8b\u5f31\u9ede
+AHLCG-StoryTemplate-Token=\u6a19\u8a18\u6548\u679c
+AHLCG-CreaturesOfTheDeep=Creatures of the Deep
+AHLCG-NeuroticFear=Neurotic Fear
+AHLCG-ReturnToTheUnspeakableOath=\u91cd\u8fd4\u90aa\u7a62\u8a93\u7d04
+AHLCG-ReturnToTheMiskatonicMuseum=\u91cd\u8fd4\u535a\u7269\u9928\u4e4b\u591c
+AHLCG-InhabitantsOfCarcosa=\u5361\u723e\u514b\u85a9\u5c45\u6c11
+AHLCG-TheUntamedWilds=\u8352\u83bd\u5bc6\u6797
+AHLCG-ReturnToEchoesOfThePast=\u91cd\u8fd4\u5f80\u4e8b\u56de\u8072
+AHLCG-ShatteredAeons=\u7834\u788e\u6c38\u4e16
+AHLCG-DevilReef=Devil Reef
+AHLCG-Pref-CheckCollections=\u52fe\u9078\u9078\u64c7\u7684\u6536\u85cf\u5305
+AHLCG-ReturnToTheDoomOfEztli=\u91cd\u8fd4\u57c3\u8332\u7279\u91cc\u7684\u8986\u6ec5
+AHLCG-ReturnToTheDunwichLegacy=\u91cd\u8fd4\u6566\u5a01\u6cbb\u907a\u7522
+AHLCG-ArkhamHorrorLCG=\u8a6d\u93ae\u5947\u8ac7\uff1a\u5361\u724c\u7248
+AHLCG-StoryEnemy=\u6545\u4e8b/\u6575\u4eba
+AHLCG-Spiders=Spiders
+AHLCG-BadLuck=\u58de\u904b
+AHLCG-ReturnToTheLastKing=\u91cd\u8fd4\u6700\u5f8c\u7684\u738b\u8005
+AHLCG-Chaos-Tablet=\u788e\u77f3\u7248
+AHLCG-ScenarioDeckID=\u5192\u96aa\u724c\u7d44ID
+AHLCG-LocIcon-Circle=\u5713\u5f62
+AHLCG-TheForgottenAge=\u5931\u843d\u7684\u6642\u4ee3
+AHLCG-IntoTheMaelstrom=Into the Maelstrom
+AHLCG-ReturnToTurnBackTime=\u91cd\u8fd4\u6642\u9593\u5012\u6d41
+AHLCG-Nightgaunts=\u591c\u9b58
+AHLCG-Guide-BottomRightCorner=\u53f3\u4e0b, L\u5f62
+AHLCG-Chaos-ElderThing=\u53e4\u795e
+AHLCG-TreacheryWeakness=\u8a6d\u8a08(\u5f31\u9ede)
+AHLCG-DeckRequirements=\u724c\u7d44\u9700\u6c42
+AHLCG-DarkRituals=\u9ed1\u6697\u5100\u5f0f
+AHLCG-LocIcon-HourglassAlt=\u6c99\u6f0f\u5f62(\u7570\u8272)
+AHLCG-Slot2=\u69fd\u4f4d2
+AHLCG-LocIcon-MoonAlt=\u6708\u4eae\u5f62(\u7570\u8272)
+AHLCG-Slot1=\u69fd\u4f4d1
+AHLCG-TraitsTip4=\u5b98\u65b9\u5361\u724c\u5c6c\u6027(\u5730\u9ede)\:\n\u5e7b\u5883, \u53e4\u4ee3, \u963f\u5361\u59c6, \u963f\u5361\u59c6\u760b\u4eba\u9662, Basement, \u71df\u5730, \u6d1e\u7a74, \u4e2d\u5fc3, City, \u56db\u8449\u8349\u4ff1\u6a02\u90e8, Coastal,  Depths, \u6566\u5a01\u6cbb, \u5c55\u89bd,\n\u7570\u6b21\u5143, Falcon Point, Forbidden, \u5931\u843d, \u672a\u4f86, Graveyard, \u4e00\u6a13, Hideout, \u5370\u65af\u8305\u65af, Island, \u53e2\u6797, Lair, \u79d8\u793e,\n\u58a8\u897f\u54e5\u57ce, Midtown, \u7c73\u65af\u5361\u5854\u5c3c\u514b, Mnar, \u8499\u7279\u5229\u723e, Mountain, \u7d10\u7d04\u57ce, Ocean, Ooth-Nargai, \u8edf\u6ce5\u6c59\u67d3, Oriab, \u7570\u754c, \u5df4\u9ece, \u901a\u9053,\n\u7d0d\u514b\u7279, Port, \u73fe\u4ee3, \u79c1\u5bc6, \u666e\u7f85\u7dad\u767b\u65af, \u8ecc\u9053\u6cbf\u7dda, \u5100\u5f0f\u5730, \u6cb3\u6d41, Road, \u907a\u8de1, \u585e\u52d2\u59c6, \u8056\u5802, \u4e8c\u6a13, \u54e8\u5175\u5c71,\n\u7834\u788e, Ship, Skai, \u5e7d\u9748, St. Mary's, Steps, Surface, Temple, \u7279\u8afe\u5947\u8482\u7279\u862d, \u4e09\u6a13, \u706b\u8eca, Vale, \u865b\u7a7a, Wastes, \u5deb\u5b85,\n\u6a39\u6797, Y'ha-nthlei, \u5e7d\u5636
+AHLCG-TraitsTip3=\u5b98\u65b9\u5361\u724c\u5c6c\u6027(\u6575\u4eba)\:\n\u7570\u5f62, \u53e4\u795e, \u5316\u8eab, \u62dc\u4e9e\u57fa, \u540c\u8b00, \u751f\u7269, \u7f6a\u72af, \u7570\u6559\u5f92, \u8a5b\u5492\u7e08\u7e5e, \u9ed1\u5c71\u7f8a\u5e7c\u5d3d, \u6df1\u6f5b\u8005, \u5075\u63a2, \u8815\u87f2,\n\u5e7b\u5922\u5883, \u7cbe\u82f1, \u7570\u6b21\u5143, \u57c3\u8332\u7279\u91cc, \u9b54\u5bf5, \u690d\u7269, \u9748\u602a, Ghast, \u98df\u5c4d\u9b3c, \u53e4\u683c\u5de8\u4eba, \u985e\u4eba, Hybrid, \u6606\u87f2, \u72c2\u4eba, \u8907\u9ad4, \u602a\u7269,\n\u7a81\u8b8a, \u591c\u9b58, \u8edf\u6ce5, \u86c7\u65cf, \u50d5\u5f9e, \u4fee\u683c\u65af, \u9280\u66ae\u79d8\u793e, \u6cd5\u5e2b, \u5e7d\u9748, \u8718\u86db, \u54e1\u5de5, Suspect, \u72af\u7f6a\u5718\u5925, Vehicle, \u5805\u5b88,\n\u5973\u5deb, \u4f0a\u65af, Zoog
+AHLCG-TraitsTip2=\u5b98\u65b9\u5361\u724c\u5c6c\u6027(\u906d\u9047\u5361/\u5f31\u9ede)\:\n\u653b\u64ca, \u5316\u8eab, \u758f\u5ffd, \u8a5b\u5492, \u7d42\u7d50, \u7f3a\u9677, \u9748\u602a, \u5371\u96aa, \u5deb\u8853, \u9055\u6cd5, \u640d\u50b7, \u6d1e\u5bdf, \u760b\u72c2, \u7c73\u6208, \u602a\u7269, \u795e\u79d8, \u5c4f\u969c,\n\u5fb5\u5146, \u8edf\u6ce5, \u5951\u7d04, \u6096\u8ad6, \u6bd2\u85e5, \u529b\u91cf, \u9670\u8b00, \u50d5\u5f9e, \u5e7d\u9748, \u7b56\u7565, \u4efb\u52d9, \u6050\u6016, \u9677\u9631, \u4f0a\u65af
+AHLCG-TraitsTip1=\u5b98\u65b9\u5361\u724c\u5c6c\u6027(\u73a9\u5bb6\u5361)\:\n\u7279\u5de5, \u76df\u53cb, \u8b77\u7532, \u85dd\u8853\u5bb6, \u52a9\u7406, \u9810\u8a00, \u4fe1\u5f92, \u795d\u798f, \u679c\u65b7, \u798f\u7949, \u65c1\u4eba, \u5b88\u8b77, \u9810\u77e5, \u670d\u88dd, \u6c89\u7a69,\n\u72c0\u614b, \u4eba\u8108, \u540c\u8b00, Covenant, \u751f\u7269, \u7f6a\u72af, \u7570\u6559\u5f92, \u8a5b\u5492\u7e08\u7e5e, \u7d55\u671b, \u5075\u63a2, \u719f\u7df4, Dreamer, \u6f02\u6cca\u8005, \u6566\u5a01\u6cbb,\n\u5c08\u5bb6, \u57c3\u8332\u7279\u91cc, \u5b9a\u547d, \u6069\u60e0, \u69cd\u68b0, \u978b\u5b50, \u5e78\u904b, \u5c40\u52e2, \u9748\u602a, \u98df\u5c4d\u9b3c, \u6b77\u53f2\u5354\u6703, \u985e\u4eba, \u7375\u4eba, Hybrid, \u9055\u6cd5, \u81e8\u6642\u88fd\u54c1,\n\u5929\u6027, \u6d1e\u5bdf, \u6a02\u5668, \u9053\u5177, \u9470\u5319, \u72c2\u4eba, \u91ab\u5e2b, \u8fd1\u6230, \u602a\u7269, \u7c73\u65af\u5361\u5854\u5c3c\u514b, \u5bc6\u6559, \u8edf\u6ce5, \u5951\u7d04, \u6096\u8ad6, \u8d0a\u52a9\u4eba, \u85dd\u4eba, \u8b66\u5bdf,\n\u7cbe\u901a, \u9060\u7a0b, \u907a\u7269, \u8a18\u8005, \u5100\u5f0f, \u79d1\u5b78, Scholar, \u670d\u52d9, \u9280\u66ae\u79d8\u793e, \u793e\u6703\u540d\u6d41, \u6b4c\u66f2, \u6cd5\u5e2b, \u6cd5\u8853, \u52c7\u6c23, \u4f9b\u7d66,\n\u7b56\u7565, \u624d\u80fd, \u5854\u7f85, \u4efb\u52d9, \u66f8\u7c4d, \u5de5\u5177, \u9677\u9631, \u6280\u5de7, \u5347\u7d1a, Vehicle, \u8001\u5175, \u5805\u5b88, \u65c5\u4eba, \u6b66\u5668, \u5973\u5deb, \u4f0a\u65af
+AHLCG-StrikingFear=\u6050\u61fc\u6253\u64ca
+AHLCG-TheBayou=\u6cb3\u53e3
+AHLCG-Front=\u6b63\u9762
+AHLCG-TheNightsUsurper=\u591c\u4e4b\u4e82\u81e3
+AHLCG-Right=\u53f3
+AHLCG-TheGathering=\u805a\u96c6\u65bc\u6b64
+AHLCG-SecretDoors=\u96b1\u5bc6\u7684\u9580
+AHLCG-BlackStarsRise=\u9ed1\u661f\u5347\u8d77
+AHLCG-Pref-UncheckCollections=\u53d6\u6d88\u52fe\u9078\u6536\u85cf\u5305
+AHLCG-Back-Player=\u73a9\u5bb6
+AHLCG-Poison=\u6bd2\u85e5
+AHLCG-ScenarioInformation=\u5287\u672c\u624b\u518a
+AHLCG-HeartOfTheElders=\u4e45\u9060\u8179\u5730
+AHLCG-MaddeningDelusions=Maddening Delusions
+AHLCG-TheDreamEaters=The Dream-Eaters
+AHLCG-Left=\u5de6
+AHLCG-WhereDoomAwaits=\u6bc0\u6ec5\u4e4b\u5730
+AHLCG-Pref-UserSets=\u81ea\u8a02\u906d\u9047\u7d44\:
+AHLCG-ALightInTheFog=A Light in the Fog
+AHLCG-DeathOfStars=\u661f\u8fb0\u6d88\u901d
+AHLCG-LocIcon-TAlt=T\u5b57\u5f62(\u7570\u8272)
+AHLCG-Artist=\u85dd\u8853\u5bb6
+AHLCG-Slot-Body=\u670d\u88dd\u69fd
+AHLCG-Pref-RemoveCollections=\u79fb\u9664\u6536\u85cf\u5305
+AHLCG-Scenario-Resolution=\u7d50\u5c40
+AHLCG-Guide-BottomLarge=\u4e0b, \u5927
+AHLCG-LocIcon-DoubleSlash=\u96d9\u659c\u7dda
+AHLCG-LocIcon-StarAlt=\u661f\u5f62(\u7570\u8272)
+AHLCG-AgentsOfHydra=Agents of Hydra
+AHLCG-LocIcon-SlashAlt=\u659c\u7dda(\u7570\u8272)
+AHLCG-TerrorOfTheVale=Terror of the Vale
+AHLCG-Pref-StandardSets=\u6a19\u6e96\u906d\u9047\u7d44\:
+AHLCG-AgendaStandard=\u5bc6\u8b00(\u6a19\u6e96)
+AHLCG-LocIcon-Triangle=\u4e09\u89d2\u5f62
+AHLCG-StoryLocation=\u6545\u4e8b/\u5730\u9ede
+AHLCG-StoryChaos=\u6545\u4e8b/\u6df7\u4e82\u6a19\u8a18\u6548\u679c
+AHLCG-TheLairOfDagon=The Lair of Dagon
+AHLCG-CoreSet=\u57fa\u790e\u904a\u6232
+AHLCG-Chaos-Skull=\u9ab7\u9871
+AHLCG-ReturnToThePallidMask=\u91cd\u8fd4\u84bc\u767d\u9762\u5177
+AHLCG-TheDoomOfEztli=\u57c3\u8332\u7279\u91cc\u7684\u8986\u6ec5
+AHLCG-Pref-Image=\u5716\u5f62
+AHLCG-Connections=\u9023\u63a5\u5716\u6a19
+AHLCG-General=\u6982\u89bd
+AHLCG-MusicOfTheDamned=\u53d7\u8a5b\u5492\u7684\u6b4c\u8072
+AHLCG-ReturnToShatteredAeons=\u91cd\u8fd4\u7834\u788e\u6c38\u4e16
+AHLCG-WknType-InvestigatorWeakness=\u8abf\u67e5\u54e1\u5f31\u9ede
+AHLCG-Columns=\u6b04
+AHLCG-HastursGift=\u54c8\u65af\u5854\u7684\u993d\u8d08
+AHLCG-AssetAsset=\u652f\u63f4/\u652f\u63f4
+AHLCG-AgendaEnemy=\u5bc6\u8b00/\u6575\u4eba
+AHLCG-BackPortrait=\u80cc\u9762\u756b\u50cf
+AHLCG-Clues=\u7dda\u7d22
+AHLCG-ParagraphSpacing=\u6bb5\u843d\u9593\u9694
+AHLCG-Orientation-Reversed=\u53cd\u5411
+AHLCG-LocIcon-CrossAlt=\u5341\u5b57(\u7570\u8272)
+AHLCG-Class-ParallelMystic=\u6f5b\u4fee\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-ParallelGuardian=\u5b88\u885b\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-ParallelSurvivor=\u6c42\u751f\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-Guardian=\u5b88\u885b\u8005
+AHLCG-Class-Survivor=\u6c42\u751f\u8005
+AHLCG-ReturnToTheDevourerBelow=\u91cd\u8fd4\u5730\u5e95\u566c\u9b54
+AHLCG-Pref-DefaultValues=\u9810\u8a2d\u503c
+AHLCG-TurnBackTime=\u6642\u9593\u5012\u6d41
+AHLCG-KnYan=\u6606\u63da
+AHLCG-AgendaFrontPortrait=\u5bc6\u8b00(\u5716\u50cf)
+AHLCG-Level=\u7b49\u7d1a
+AHLCG-ExcelsiorManagement=\u9152\u5e97\u7d93\u71df
+AHLCG-WarOfTheOuterGods=\u5916\u795e\u4e4b\u6230
+AHLCG-AgentsOfShubNiggurath=\u838e\u5e03\u00b7\u5c3c\u53e4\u62c9\u7d72\u7684\u4f7f\u8005
+AHLCG-PrefEncounterTip=\u9078\u64c7\u54ea\u4e9b\u906d\u9047\u7d44\u6703\u51fa\u73fe\u5728\u7d44\u4ef6\u7de8\u8f2f\u9801\u9762\u4e4b\u4e2d\u906d\u9047\u7d44\u7684\u9078\u55ae\u88e1\u9762\u3002

\u540d\u7a31\: \u906d\u9047\u7d44\u540d\u7a31
\u5faa\u74b0\: \u5305\u542b\u6b64\u906d\u9047\u7d44\u7684\u5faa\u74b0\u540d\u7a31
\u5716\u6a19\: \u81ea\u8a02\u906d\u9047\u7d44\u5716\u6a19\u7684\u6a94\u6848\u540d\u7a31
\u6a19\u7c64\: \u5728\u6587\u672c\u4e2d\u63d2\u5165\u5716\u6a19\u6240\u4f7f\u7528\u7684\u6a19\u7c64\u57fa\u5e95. \u5982\u679c\u6a19\u7c64\u6a19\u7c64\u57fa\u5e95\u662f 'rats', \u90a3\u9ebc\u4ee5\u4e0b\u662f\u80fd\u8cfc\u4f7f\u7528\u7684\u6a19\u7c64\:

<ratss> \: \u63d2\u5165\u4e00\u500b\u5c0f\u5716\u6a19
<ratsm> \: \u63d2\u5165\u4e00\u500b\u4e2d\u5716\u6a19
<ratsl> \: \u63d2\u5165\u4e00\u500b\u5927\u5716\u6a19

\u5df2\u958b\u555f\u7684\u5361\u724c, \u5fc5\u9808\u91cd\u65b0\u958b\u555f\u6a94\u6848, \u8b8a\u66f4\u624d\u6703\u751f\u6548\u3002 +AHLCG-Chaos-None=\u7121 +AHLCG-BeastThralls=\u7378\u4e4b\u5974\u50d5 +AHLCG-SharePortrait=\u96d9\u9762\u7686\u4f7f\u7528\u6b63\u9762\u7684\u756b\u50cf +AHLCG-TheWatcher=\u770b\u5b88\u4eba +AHLCG-ReturnToTheDepthsOfYoth=\u91cd\u8fd4\u5e7d\u5636\u6df1\u6df5 +AHLCG-ReturnToTheRainforest=\u91cd\u8fd4\u96e8\u6797 +AHLCG-ThePathToCarcosa=\u5361\u723e\u514b\u85a9\u4e4b\u8def +AHLCG-Health=\u751f\u547d\u503c +AHLCG-TheEternalSlumber=\u6c38\u6046\u6c89\u7761 +AHLCG-TheBoundaryBeyond=\u754c\u9650\u5f7c\u7aef +AHLCG-Collection=\u6536\u85cf +AHLCG-CarnevaleOfHorrorsE=\u6050\u6016\u5609\u5e74\u83ef +AHLCG-LocIcon-SquareAlt=\u65b9\u5f62(\u7570\u8272) +AHLCG-DelusoryEvils=Delusory Evils +AHLCG-Guide-Title=\u6a19\u984c\u9801 +AHLCG-ActStoryAsset=\u5834\u666f/\u6545\u4e8b\u652f\u63f4 +AHLCG-EnemyWeakness=\u6575\u4eba(\u5f31\u9ede) +AHLCG-AncientEvils=\u9060\u53e4\u60e1\u9b54 +AHLCG-RulesTip3=----- \u53ef\u7528\u6a19\u7c64 -----\n
...
\u6bb5\u843d\u6a19\u982d\n
...
\u6b21\u8981\u6a19\u982d\n\n \u7d50\u5c40\u6846\n \u5192\u96aa\u6a21\u5f0f\u6846\n \u5e55\u9593\u6545\u4e8b\u6846\n\: \u5012\u6558\u6545\u4e8b\u6846\n\nbracket \: \u5728\u65b9\u584a\u7684\u6700\u4e0a\u65b9\u986f\u793a\u6846\u67b6\nheader \: \u5728\u65b9\u584a\u7684\u6700\u4e0a\u65b9\u986f\u793a\u6a19\u6e96\u7684\u6a19\u982d\ncolor \: \u4f7f\u7528\u63d0\u4f9b\u7684 H, S, B \u503c\u70ba\u65b9\u6846\u8457\u8272\n\u8a9e\u6cd5 "color\=H, S, B", \u5176\u4e2d\:\nH \= hue (0.0 - 1.0)\nS \= saturation (0.0 - 1.0)\nB \= brightness (0.0 - 1.0)\n(\u6587\u5b57\u4ecd\u9700\u8981\u5206\u958b\u8457\u8272)\ne.g. \n\n \u6216 \u7d50\u675f\u7d50\u5c40\u6846\u548c\u5192\u96aa\u6a21\u5f0f\u6846(\u542b\u6700\u4e0b\u65b9\u7684\u6846\u67b6)\n \u6216 \u7d50\u675f\u5e55\u9593\u6545\u4e8b/\u5012\u6558\u6545\u4e8b\u6846\n\n\u7bc4\u4f8b\: ... \n\n \u7d50\u5c40\u9805\u76ee\u6a19\u8a18 +AHLCG-RulesTip2=----- \u53ef\u7528\u6a19\u7c64 -----\n \u884c\u52d5\u89f8\u767c\u80fd\u529b\n \u514d\u8cbb\u89f8\u767c\u80fd\u529b\n\n \u53cd\u61c9\u89f8\u767c\u80fd\u529b\n \u5f37\u5236\n \u9b27\u9b3c\n \u76ee\u6a19\n\n \u986f\u73fe\n \u7368\u7279\n \u6bcf\u8abf\u67e5\u54e1\n\n \u83f1\u5f62\u9805\u76ee\u7b26\u865f\n \u65b9\u584a\u9805\u76ee\u7b26\u865f\n \u9805\u76ee\u7684Tab\u7a7a\u767d\n\n \u7d50\u5c40\u7bad\u982d + R\n \u7d50\u675f\u7d50\u5c40\n\n \u5c6c\u6027\n \u6c34\u5e73\u7a7a\u9694\n \u5927\u578b\u5782\u76f4\u7a7a\u9694\n \u5782\u76f4\u7a7a\u9694\n \u5c0f\u5782\u76f4\u7a7a\u9694 +AHLCG-RulesTip1=----- \u53ef\u7528\u6a19\u7c64 -----\n \u5361\u724c\u540d\u7a31\n\n \u5b88\u885b\u8005\n \u63a2\u6c42\u8005\n \u6d41\u6d6a\u8005\n \u6f5b\u4fee\u8005\n \u751f\u5b58\u8005\n\n \u610f\u5fd7\n \u667a\u6167\n \u6230\u9b25\n \u654f\u6377\n \u5168\u80fd\n\n \u9ab7\u9871\n \u7570\u6559\u5f92\n \u788e\u77f3\u7248\n \u53e4\u795e\n \u795d\u798f\n \u8a5b\u5492\n \u9060\u53e4\u5370\u8a18\n \u89f8\u624b\n\n\u906d\u9047\u7d44\u548c\u6536\u85cf\u5305\u5716\u6a19\u7684\u6a19\u7c64\u5217\u8868\u53ef\u4ee5\u5728\u504f\u597d\u8a2d\u5b9a\u4e2d\u300a\u8a6d\u93ae\u5947\u8ac7\uff1a\u5361\n\u724c\u7248\u300b\u7684\u9801\u9762\u627e\u5230\u3002\n\u5728\u6a19\u7c64\u5f8c\u52a0\u4e0a's'\u70ba\u5c0f\u5716\u6a19\uff0c\u52a0\u4e0a'm'\u70ba\u4e2d\u5716\u6a19\uff0c\u52a0\u4e0a'l'\u70ba\u5927\u5716\u6a19\u3002\n\u7bc4\u4f8b\: , , +AHLCG-LocIcon-Moon=\u6708\u4eae\u5f62 +AHLCG-TheVortexAbove=\u7a7a\u4e2d\u6f29\u6e26 +AHLCG-SingleGroup=\u55ae\u7d44\u5718\u968a +AHLCG-Part=Part +AHLCG-ForTheGreaterGood=\u5d07\u9ad8\u5229\u76ca +AHLCG-VictoryTip1=\u5b98\u65b9\u5361\u724c\u95dc\u9375\u8a5e\:\n\u52dd\u5229X, \u5fa9\u4ec7X +AHLCG-Pref-Tag=\u6a19\u7c64 +AHLCG-ReturnToTheMidnightMasks=\u91cd\u8fd4\u5348\u591c\u5047\u9762 +AHLCG-CultOfTheYellowSign=\u9ec3\u8272\u5370\u8a18\u4fe1\u5f92 +AHLCG-Keywords=\u95dc\u9375\u8a5e +AHLCG-Pref-DefaultCollection=\u9810\u8a2d\u6536\u85cf\: +AHLCG-CampaignGuideA4=\u5287\u672c\u624b\u518aA4 (210mm x 297mm) +AHLCG-StoryStory=\u6545\u4e8b/\u6545\u4e8b +AHLCG-Slot-2Hands=2\u500b\u624b\u90e8\u69fd +AHLCG-Act=\u5834\u666f +AHLCG-CurtainCall=\u8b1d\u5e55 +AHLCG-Pref-RemoveSets=\u79fb\u9664\u906d\u9047\u7d44 +AHLCG-Damage=\u50b7\u5bb3\u503c +AHLCG-TheStranger=\u964c\u751f\u4eba +AHLCG-Guide-TopLarge=\u4e0a, \u5927 +AHLCG-EpicMultiplayer=\u591a\u7d44\u53f2\u8a69 +AHLCG-DeckRestrictions=\u724c\u7d44\u9650\u5236 +AHLCG-TreacheryPortrait=\u8a6d\u8a08/\u756b\u50cf +AHLCG-VileExperiments=\u4f4e\u52a3\u5be6\u9a57 +AHLCG-APhantomOfTruth=\u771f\u76f8\u5e7b\u5f71 +AHLCG-Pref-AddCustomCollection=\u65b0\u589e\u81ea\u8a02\u6536\u85cf\u5305\: +AHLCG-Sections=\u6bb5\u843d\u9078\u9805 +AHLCG-ReturnToCultOfUmordhoth=\u70cf\u9ed8\u723e\u591a\u65af\u6559\u5718 +AHLCG-AccentedStory=\u6545\u4e8b +AHLCG-StoryTemplate-Story=\u6545\u4e8b +AHLCG-LocIcon-Quote=\u554f\u865f +AHLCG-Class-Weakness=\u5f31\u9ede +AHLCG-Pref-EncounterSets=\u906d\u9047\u7d44 +AHLCG-Guide-BottomLeftSmall=\u5de6\u4e0b, \u5c0f +AHLCG-Class-Seeker=\u63a2\u6c42\u8005 +AHLCG-Event=\u4e8b\u4ef6 +AHLCG-ReturnToTheHouseAlwaysWins=\u91cd\u8fd4\u767e\u8ced\u767e\u52dd +AHLCG-Template=\u6a21\u677f +AHLCG-LocIcon-Slash=\u659c\u7dda +AHLCG-LostInTimeAndSpace=\u8ff7\u5931\u6642\u7a7a +AHLCG-ThreadsOfFate=\u547d\u904b\u4e4b\u7dda +AHLCG-LocIcon-DiamondAlt=\u83f1\u5f62(\u7570\u8272) +AHLCG-InTooDeep=In Too Deep +AHLCG-FogOverInnsmouth=Fog over Innsmouth +AHLCG-ActLocation=\u5834\u666f/\u5730\u9ede +AHLCG-Story=\u6545\u4e8b +AHLCG-ReturnToPillarsOfJudgment=\u91cd\u8fd4\u5be9\u5224\u4e4b\u67f1 +AHLCG-MiniInvestigator=\u8ff7\u4f60\u8abf\u67e5\u54e1\u5361 +AHLCG-ReturnToUndimensionedAndUnseen=\u91cd\u8fd4\u7121\u4eba\u77e5\u66c9 +AHLCG-Standard=\u6a19\u6e96 +AHLCG-LocIcon-CircleAlt=\u5713\u5f62(\u7570\u8272) +AHLCG-Pref-DefaultSet=\u9810\u8a2d\u906d\u9047\u7d44\: +AHLCG-TheUnspeakableOath=\u90aa\u7a62\u8a93\u7d04 +AHLCG-TheBlobThatAteEverythingE=\u541e\u566c\u842c\u7269 +AHLCG-TheHouseAlwaysWins=\u767e\u8ced\u767e\u52dd +AHLCG-Slot-Accessory=\u98fe\u54c1\u69fd +AHLCG-MurderAtTheExcelsiorHotel=\u827e\u8096\u5e0c\u723e\u9152\u5e97\u8b00\u6bba\u6848 +AHLCG-Shroud=\u96b1\u85cf\u503c +AHLCG-Traits=\u5c6c\u6027 +AHLCG-ResurgentEvils=\u7526\u751f\u60e1\u9b54 +AHLCG-AtDeathsDoorstep=\u6b7b\u4ea1\u9580\u524d +AHLCG-Slot-1Hand=1\u500b\u624b\u90e8\u69fd +AHLCG-Pref-CheckSets=\u52fe\u9078\u9078\u64c7\u7684\u906d\u9047\u7d44 +AHLCG-Sorcery=\u5deb\u8853 +AHLCG-Scenario-Portrait=\u756b\u50cf +AHLCG-Pref-Name=\u540d\u7a31 +AHLCG-AgendaStoryAsset=\u5bc6\u8b00/\u6545\u4e8b\u652f\u63f4 +AHLCG-CreaturesOfTheUnderworld=Creatures of the Underworld +AHLCG-CarnevaleOfHorrors=\u6050\u6016\u72c2\u6b61\u7bc0 +AHLCG-Description= +AHLCG-Scenario-Title=\u6a19\u984c +AHLCG-Position=\u4f4d\u7f6e +AHLCG-Slot-Ally=\u76df\u53cb\u69fd +AHLCG-SecretsOfTheUniverse=\u5b87\u5b99\u4e4b\u79d8 +AHLCG-AgendaTreachery=\u5bc6\u8b00/\u8a6d\u8a08 +AHLCG-TheInnsmouthConspiracy=The Innsmouth Conspiracy +AHLCG-Delusions=\u5984\u60f3 +AHLCG-DeadlyTraps=\u81f4\u6b7b\u9677\u9631 +AHLCG-BishopsThralls=\u7562\u66c9\u666e\u4e4b\u50d5 +AHLCG-Pref-DeleteSets=\u522a\u9664\u9078\u64c7\u7684\u906d\u9047\u7d44 +AHLCG-Guide-BottomLeftMedium=\u5de6\u4e0b, \u4e2d +AHLCG-ReturnToBloodOnTheAltar=\u91cd\u8fd4\u8840\u8272\u796d\u58c7 +AHLCG-Ghouls=\u98df\u5c4d\u9b3c +AHLCG-SinsOfThePast=\u904e\u5f80\u7f6a\u5b7d +AHLCG-SilverTwilightLodge=\u9280\u66ae\u7955\u793e +AHLCG-AgendaStory=\u6545\u4e8b +AHLCG-ShatteredMemories=Shattered Memories +AHLCG-MurderAtTheExcelsiorHotelE=\u827e\u8096\u5e0c\u723e\u9152\u5e97\u8b00\u6bba\u6848 +AHLCG-BasicData=\u57fa\u790e\u8cc7\u8a0a +AHLCG-Orientation-Standard=\u6a19\u6e96 +AHLCG-Class-Neutral=\u4e2d\u7acb +AHLCG-SwarmOfAssimilation=\u540c\u5316\u87f2\u7fa4 +AHLCG-TheCityOfArchives=\u5929\u6a5f\u4e4b\u57ce +AHLCG-CustomEncounterSet=\u975e\u5b98\u65b9\u906d\u9047\u7d44 +AHLCG-Skill-None=\u7121\u6280\u80fd +AHLCG-TheLastKing=\u6700\u5f8c\u7684\u738b\u8005 +AHLCG-Class-Rogue=\u6d41\u6d6a\u8005 +AHLCG-EchoesOfThePast=\u5f80\u4e8b\u56de\u8072 +AHLCG-YogSothothsEmissaries=\u7336\u683c\u00b7\u7d22\u6258\u65af\u7684\u5bc6\u4f7f +AHLCG-Syzygy=Syzygy +AHLCG-LocIcon-None=\u7121 +AHLCG-LockedDoors=\u4e0a\u9396\u7684\u9580 +AHLCG-Skill-Willpower=\u610f\u5fd7 +AHLCG-LocIcon-Diamond=\u83f1\u5f62 +AHLCG-SecondaryClass=\u7b2c\u4e8c\u8077\u968e\u9078\u64c7 +AHLCG-MergingRealities=Merging Realities +AHLCG-Skill-Wild=\u5168\u80fd +AHLCG-AssetStoryPortrait=\u6545\u4e8b\u652f\u63f4/\u5716\u50cf +AHLCG-DecayingReality=Decaying Reality +AHLCG-EvilPortents=\u90aa\u5146 +AHLCG-EnemyPortrait=\u6575\u4eba/\u5716\u50cf +AHLCG-DeckOptions=\u724c\u7d44\u9078\u9805 +AHLCG-AdditionalRequirements=\u984d\u5916\u9700\u6c42 +AHLCG-CurseOfTheRougarouE=Curse of the Rougarou +AHLCG-Pref-StandardCollections=\u6a19\u6e96\u6536\u85cf\u5305\: +AHLCG-NathanielCho=\u7d0d\u6492\u5c3c\u723e\u00b7\u66f9 +AHLCG-ArmitagesFate=\u963f\u7c73\u8482\u5947\u7684\u547d\u904b +AHLCG-AgentsOfYig=\u4f0a\u683c\u7684\u4f7f\u5f92 +AHLCG-Rats=\u8001\u9f20 +AHLCG-Zoogs=Zoogs +AHLCG-ReturnToHeartOfTheElders=\u91cd\u8fd4\u4e45\u9060\u8179\u5730 +AHLCG-LocIcon-Star=\u661f\u5f62 +AHLCG-Skill-Combat=\u6230\u9b25 +AHLCG-Class-BasicWeakness=\u57fa\u790e\u5f31\u9ede +AHLCG-Title=\u6a19\u984c +AHLCG-Skill-Agility=\u654f\u6377 +AHLCG-AssetStoryAsset=\u6545\u4e8b\u652f\u63f4/\u6545\u4e8b\u652f\u63f4 +AHLCG-AgendaPortrait=\u5bc6\u8b00/\u5716\u50cf +AHLCG-Victory=\u52dd\u5229 +AHLCG-BeforeTheBlackThrone=\u9ed1\u8272\u738b\u5ea7 +AHLCG-DreamersCurse=Dreamer's Curse +AHLCG-Pref-PermanentlyRemoveSets=\u662f\u5426\u8981\u6c38\u9060\u5c07\u9078\u53d6\u7684\u81ea\u8a02\u906d\u9047\u7d44\u79fb\u9664? +AHLCG-WarOfTheOuterGodsE=\u5916\u795e\u4e4b\u6230 +AHLCG-WakingNightmare=Waking Nightmare +AHLCG-TheSecretName=\u96b1\u5bc6\u4e4b\u540d +AHLCG-TreacheryStory=\u6545\u4e8b\u8a6d\u8a08(\u5f31\u9ede) +AHLCG-TheLocals=The Locals +AHLCG-AbyssalGifts=\u6df1\u6df5\u8d08\u79ae +AHLCG-Tablet=\u788e\u77f3\u7248 +AHLCG-TheWitchingHour=\u5deb\u7570\u6642\u523b +AHLCG-ReturnToTheUntamedWilds=\u91cd\u8fd4\u8352\u83bd\u5bc6\u6797 +AHLCG-HarveyWalters=\u54c8\u7dad\u00b7\u6c83\u723e\u7279\u65af +AHLCG-Pref-PermanentlyRemoveCollections=\u662f\u5426\u8981\u6c38\u9060\u5c07\u9078\u53d6\u7684\u81ea\u8a02\u6536\u85cf\u5305\u79fb\u9664? +AHLCG-TheBeyond=\u7570\u4e16\u754c +AHLCG-RealmOfDeath=\u51a5\u754c +AHLCG-Expedition=\u63a2\u96aa +AHLCG-RisingTide=Rising Tide +AHLCG-SandsOfEgypt=\u57c3\u53ca\u4e4b\u6c99 +AHLCG-StrangeEons=Strange Eons +AHLCG-AssetStory=\u6545\u4e8b\u652f\u63f4 +AHLCG-AllOrNothing=\u5b64\u6ce8\u4e00\u64f2 +AHLCG-Guide-TopRightMedium=\u53f3\u4e0a, \u4e2d +AHLCG-ExtracurricularActivity=\u8ab2\u5916\u6d3b\u52d5 +AHLCG-Setup=\u8a2d\u7f6e +AHLCG-RightBottom=\u5c0d\u9f4a\u53f3/\u4e0b +AHLCG-ChaosEffects=\u6df7\u4e82\u6a19\u8a18\u6548\u679c +AHLCG-Skill-Intellect=\u667a\u6167 +AHLCG-Slot-Tarot=\u5854\u7f85\u69fd +AHLCG-LocIcon-CopyFront=\u8207\u6b63\u9762\u76f8\u540c +AHLCG-Pref-AddSet=\u5c07\u906d\u9047\u7d44\u52a0\u5165\u5217\u8868 +AHLCG-AbyssalTribute=\u6df1\u6df5\u796d\u54c1 +AHLCG-CombineWith=\u5408\u4f75 +AHLCG-AgendaLocation=\u5bc6\u8b00/\u5730\u9ede +AHLCG-Guide-RightLarge=\u53f3, \u5927 +AHLCG-AgendaNumber=\u5bc6\u8b00\u7de8\u865f +AHLCG-ReturnToTheForgottenAge=\u91cd\u8fd4\u5931\u843d\u7684\u6642\u4ee3 +AHLCG-Skip=\u8df3\u904e +AHLCG-Spacing=\u9593\u9694 +AHLCG-Guide-Empty=\u7a7a\u767d\u9801 +AHLCG-LocIcon-Empty=\u7a7a\u767d +AHLCG-Corsairs=Corsairs +AHLCG-TrappedSpirits=\u88ab\u56f0\u7684\u9748\u9b42 +AHLCG-Class-Mystic=\u6f5b\u4fee\u8005 +AHLCG-ReadOrDie=\u6b7b\u4ea1\u95b1\u8b80 +AHLCG-ForgottenRuins=Forgotten Ruins +AHLCG-CultOfPnakotus=Cult of Pnakotus +AHLCG-Malfunction=Malfunction +AHLCG-HideousAbominations=\u919c\u964b\u7570\u5f62 +AHLCG-TheDunwichLegacy=\u6566\u5a01\u6cbb\u907a\u7522 +AHLCG-EncounterSet=\u906d\u9047\u7d44 +AHLCG-Mirror=\u93e1\u50cf +AHLCG-Stamina=\u751f\u547d\u503c +AHLCG-Cost=\u8cbb\u7528 +AHLCG-ReturnToTheEssexCountyExpress=\u91cd\u8fd4\u760b\u72c2\u5217\u8eca +AHLCG-Investigator=\u8abf\u67e5\u54e1 +AHLCG-InexorableFate=\u5728\u52ab\u96e3\u9003 +AHLCG-PointOfNoReturn=Point of No Return +AHLCG-ErraticFear=\u6050\u61fc\u7121\u5e38 +AHLCG-ThePitOfDespair=The Pit of Despair +AHLCG-FloodedCaverns=Flooded Caverns +AHLCG-UnionAndDisillusion=\u805a\u5408\u5e7b\u6ec5 +AHLCG-Skull=\u9ab7\u9871 +AHLCG-Guide-TopLeftMedium=\u5de6\u4e0a, \u4e2d +AHLCG-ReturnToWhereDoomAwaits=\u91cd\u8fd4\u6bc0\u6ec5\u4e4b\u5730 +AHLCG-Text=\u6587\u672c +AHLCG-Pref-DeleteCollections=\u522a\u9664\u9078\u64c7\u7684\u6536\u85cf\u5305 +AHLCG-Set=\u906d\u9047\u7d44 +AHLCG-PrefCollectionTip=\u9078\u64c7\u54ea\u4e9b\u6536\u85cf\u5305\u6703\u51fa\u73fe\u5728\u7d44\u4ef6\u7de8\u8f2f\u9801\u9762\u4e4b\u4e2d\u6536\u85cf\u5305\u7684\u9078\u55ae\u88e1\u9762\u3002

\u540d\u7a31\: \u6536\u85cf\u5305\u540d\u7a31\u6216\u662f\u5faa\u74b0\u540d\u7a31
\u5716\u6a19\: \u81ea\u8a02\u6536\u85cf\u5305\u5716\u6a19\u7684\u6a94\u6848\u540d\u7a31
\u6a19\u7c64\: \u5728\u6587\u672c\u4e2d\u63d2\u5165\u5716\u6a19\u6240\u4f7f\u7528\u7684\u6a19\u7c64\u57fa\u5e95. \u5982\u679c\u6a19\u7c64\u6a19\u7c64\u57fa\u5e95\u662f 'core', \u90a3\u9ebc\u4ee5\u4e0b\u662f\u80fd\u8cfc\u4f7f\u7528\u7684\u6a19\u7c64\:

<cores> \: \u63d2\u5165\u4e00\u500b\u5c0f\u5716\u6a19
<corem> \: \u63d2\u5165\u4e00\u500b\u4e2d\u5716\u6a19
<corel> \: \u63d2\u5165\u4e00\u500b\u5927\u5716\u6a19

\u5df2\u958b\u555f\u7684\u5361\u724c, \u5fc5\u9808\u91cd\u65b0\u958b\u555f\u6a94\u6848, \u8b8a\u66f4\u624d\u6703\u751f\u6548\u3002 +AHLCG-Pref-Collections=\u6536\u85cf +AHLCG-TreacheryEncounter=\u8a6d\u8a08(\u906d\u9047) +AHLCG-OpeningHand=\u8d77\u59cb\u624b\u724c +AHLCG-Back=\u80cc\u9762 +AHLCG=\u8a6d\u93ae\u5947\u8ac7\uff1a\u5361\u724c\u7248 +AHLCG-AssetStoryEnemy=\u6545\u4e8b\u652f\u63f4/\u6575\u4eba +AHLCG-Slot-None=\u7121\u69fd\u4f4d +AHLCG-LocIcon-Hourglass=\u6c99\u6f0f\u5f62\n +AHLCG-Section=\u6bb5\u843d +AHLCG-Stamina-None=\u7121\u751f\u547d\u503c +AHLCG-LocIcon-HeartAlt=\u5fc3\u5f62(\u7570\u8272) +AHLCG-Attack=\u653b\u64ca\u503c +AHLCG-Guide-LeftLarge=\u5de6, \u5927 +AHLCG-ReturnToTheNightOfTheZealot=\u91cd\u8fd4\u72c2\u71b1\u4e4b\u591c +AHLCG-DoomedExpedition=Doomed Expedition +AHLCG-TheLabyrinthsOfLunacyE=The Labyrinths of Lunacy +AHLCG-Back-Encounter=\u906d\u9047 +AHLCG-Class=\u8077\u968e +AHLCG-EnemyEncounter=\u6575\u4eba(\u906d\u9047) +AHLCG-Skill=\u6280\u80fd +AHLCG-TheDepthsOfYoth=\u5e7d\u5636\u6df1\u6df5 +AHLCG-Chaos-Cultist=\u7570\u6559\u5f92 +AHLCG-CampaignGuide75=\u5287\u672c\u624b\u518a(7.5"x7.5") +AHLCG-Flavor=\u4ecb\u7d39\u6587\u672c +AHLCG-ActEnemy=\u5834\u666f/\u6575\u4eba +AHLCG-GhoulsOfUmordhoth=\u70cf\u9ed8\u723e\u591a\u65af\u7684\u98df\u5c4d\u9b3c +AHLCG-SetNumber=\u7de8\u865f +AHLCG-Level-None=\u7121\u7b49\u7d1a +AHLCG-LineSpacing=\u884c\u8ddd\u9593\u9694 +AHLCG-LeftTop=\u5c0d\u9f4a\u5de6/\u4e0a +AHLCG-TheVanishingOfElinaHarper=The Vanishing of Elina Harper +AHLCG-Guide-TopLeftSmall=\u5de6\u4e0a, \u5c0f +AHLCG-Pref-AddCollection=\u5c07\u6536\u85cf\u5305\u52a0\u5165\u5217\u8868 +AHLCG-Options=\u9078\u9805 +AHLCG-AgentsOfHastur=\u54c8\u65af\u5854\u7684\u4f7f\u8005 +AHLCG-ReturnToThreadsOfFate=\u91cd\u8fd4\u547d\u904b\u4e4b\u7dda +AHLCG-LocationLocation=\u5730\u9ede/\u5730\u9ede +AHLCG-Portrait=\u756b\u50cf diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh_CN.properties b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh_CN.properties new file mode 100644 index 0000000..140431b --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text/AHLCG-Interface_zh_CN.properties @@ -0,0 +1,514 @@ +#AHLCG-Interface_zh.properties +#Fri Jan 07 11:24:06 CST 2022 +AHLCG-Guide-BottomRightMedium=\u53f3\u4e0b, \u4e2d +AHLCG-LocIcon-DoubleSlashAlt=\u53cc\u659c\u7ebf(\u5f02\u8272) +AHLCG-StoryInvestigator=\u6545\u4e8b\u8c03\u67e5\u5458 +AHLCG-WeaverOfTheCosmos=Weaver of the Cosmos +AHLCG-Page=\u9875 +AHLCG-TrackerBox=\u7eaa\u5f55\u680f +AHLCG-Sanity=\u795e\u667a\u503c +AHLCG-ReturnToTheBoundaryBeyond=\u91cd\u8fd4\u754c\u9650\u5f7c\u7aef +AHLCG-Guide-BottomRightSmall=\u53f3\u4e0b, \u5c0f +AHLCG-TextScale=\u6587\u5b57\u7f29\u653e +AHLCG-TheBlobThatAteEverything=\u541e\u566c\u4e07\u7269 +AHLCG-TheFloodBelow=\u5730\u5e95\u6d2a\u6d41 +AHLCG-Pref-Select=\u9009\u62e9... +AHLCG-Guide-BottomLeftCorner=\u5de6\u4e0b, L\u5f62 +AHLCG-Evade=\u8eb2\u907f\u503c +AHLCG-PnakoticBrotherhood=\u7eb3\u514b\u7279\u5144\u5f1f\u4f1a +AHLCG-WhereTheGodsDwell=Where the Gods Dwell +AHLCG-AgentsOfAzathoth=\u963f\u6492\u6258\u65af\u7684\u4f7f\u5f92 +AHLCG-Copyright=\u7248\u6743 +//=tips +AHLCG-AgentsOfCthulhu=\u514b\u82cf\u9c81\u7684\u4f7f\u8005 +AHLCG-SpectralPredators=\u5e7d\u7075\u6355\u98df\u8005 +AHLCG-TheLabyrinthsOfLunacy=The Labyrinths of Lunacy +AHLCG-ElderThing=\u53e4\u795e +AHLCG-AgentsOfNyarlathotep=Agents of Nyarlathotep +AHLCG-CultOfUmordhoth=\u4e4c\u9ed8\u5c14\u591a\u65af\u7684\u5d07\u62dc\u8005 +AHLCG-AnettesCoven=\u5b89\u59ae\u7279\u7684\u5973\u5deb\u96c6\u4f1a +AHLCG-ParallelInvestigators=\u5e73\u884c\u8c03\u67e5\u5458 +AHLCG-ThePallidMask=\u82cd\u767d\u9762\u5177 +AHLCG-TheDevourerBelow=\u5730\u5e95\u566c\u9b54 +AHLCG-BrotherhoodOfTheBeast=\u6076\u517d\u5144\u5f1f\u4f1a +AHLCG-Dreamlands=Dreamlands +AHLCG-Pref-Cycle=\u5faa\u73af +AHLCG-Location=\u5730\u70b9 +AHLCG-Icon=\u56fe\u6807 +AHLCG-LocIcon-T=T\u5b57\u5f62 +AHLCG-Portraits=\u753b\u50cf +AHLCG-CustomCollection=\u975e\u5b98\u65b9\u6536\u85cf +AHLCG-ActNumber=\u573a\u666f\u7f16\u53f7 +AHLCG-TCUPrologue=\u4e07\u8c61\u65e0\u7ec8\u5e8f\u5e55 +AHLCG-TheSearchForKadath=The Search for Kadath +AHLCG-Class2=\u7b2c\u4e8c\u804c\u9636 +AHLCG-TemporalHunters=Temporal Hunters +AHLCG-GuardiansOfTheAbyss=\u6df1\u6e0a\u5b88\u536b +AHLCG-VenomousHate=Venomous Hate +AHLCG-Guide-None=\u65e0 +AHLCG-DarkCult=\u9ed1\u6697\u5f02\u6559\u5f92 +AHLCG-TheWagesOfSin=\u6076\u7f6a\u62a5\u5e94 +AHLCG-TemporalFlux=\u65f6\u95f4\u6d8c\u52a8 +AHLCG-AgentsOfAtlachNacha=Agents of Atlach-Nacha +AHLCG-DecayAndFilth=\u8870\u8d25\u4e0e\u6c61\u79fd +AHLCG-Witchcraft=\u5deb\u6cd5 +AHLCG-LocIcon-Clover=\u4e09\u53f6\u8349\u5f62 +AHLCG-DisappearanceAtTheTwilightEstate=\u66ae\u8272\u5e84\u56ed\u5931\u8e2a\u4e8b\u4ef6 +AHLCG-StoryTreachery=\u6545\u4e8b/\u8be1\u8ba1 +AHLCG-HastursEnvoys=Hastur's Envoys +AHLCG-LocIcon-Cross=\u5341\u5b57 +AHLCG-TheDevourersCult=\u566c\u9b54\u5f02\u6559\u5f92 +AHLCG-PillarsOfJudgment=\u5ba1\u5224\u4e4b\u67f1 +AHLCG-Serpents=\u86c7\u65cf +AHLCG-InTheClutchesOfChaos=\u6df7\u6c8c\u9b54\u638c +AHLCG-Class-ParallelRogue=\u6d41\u6d6a\u8005(\u5e73\u884c\u7248) +AHLCG-AgentsOfYogSothoth=\u72b9\u683c\u00b7\u7d22\u6258\u65af\u7684\u4f7f\u8005 +AHLCG-Pref-UserCollections=\u81ea\u8ba2\u6536\u85cf\u5305\: +AHLCG-BeyondTheGatesOfSleep=Beyond the Gates of Sleep +AHLCG-Header=\u6bb5\u843d\u6807\u9898 +AHLCG-ReturnToAPhantomOfTruth=\u91cd\u8fd4\u771f\u76f8\u5e7b\u5f71 +AHLCG-DarkSideOfTheMoon=Dark Side of the Moon +AHLCG-CopyrightTitle=\u7248\u6743\u8d44\u8baf +AHLCG-Rules=\u6e38\u620f\u6587\u672c +AHLCG-AlienInterference=\u5916\u661f\u5e72\u6270 +AHLCG-TheMidnightMasks=\u5348\u591c\u5047\u9762 +AHLCG-ReturnToCurtainCall=\u91cd\u8fd4\u8c22\u5e55 +AHLCG-WhispersOfHypnos=Whispers of Hypnos +AHLCG-AThousandShapesOfHorror=A Thousand Shapes of Horror +AHLCG-GuardiansOfTime=\u65f6\u95f4\u5b88\u536b\u8005 +AHLCG-Slot-2Arcane=2\u4e2a\u6cd5\u672f\u69fd +AHLCG-Dunwich=\u6566\u5a01\u6cbb +AHLCG-StellaClark=\u65af\u7279\u62c9\u00b7\u514b\u62c9\u514b +AHLCG-BloodOnTheAltar=\u8840\u8272\u796d\u575b +AHLCG-UndimensionedAndUnseen=\u65e0\u4eba\u77e5\u6653 +AHLCG-Orientation=\u65b9\u5411 +AHLCG-StoryAsset=\u6545\u4e8b/\u6545\u4e8b\u652f\u63f4\u5361 +AHLCG-JacquelineFine=\u6770\u594e\u7433\u00b7\u6cd5\u6069 +AHLCG-Class-None=\u65e0\u804c\u9636 +AHLCG-Rainforest=\u96e8\u6797 +AHLCG-ReturnToKnYan=\u91cd\u8fd4\u6606\u626c +AHLCG-Guide-TopRightCorner=\u53f3\u4e0a, L\u5f62 +AHLCG-Pref-AddCustomSet=\u65b0\u589e\u81ea\u8ba2\u906d\u9047\u7ec4\: +AHLCG-YigsVenom=\u4f0a\u683c\u7684\u6bd2\u6db2 +AHLCG-Class-ParallelSeeker=\u63a2\u6c42\u8005(\u5e73\u884c\u7248) +AHLCG-Horror=\u6050\u60e7\u503c +AHLCG-Subtitle=\u526f\u6807\u9898 +AHLCG-ReturnToExtracurricularActivities=\u91cd\u8fd4\u8bfe\u5916\u6d3b\u52a8 +AHLCG-CreepingCold=\u5bd2\u51b7\u8513\u5ef6 +AHLCG-Whippoorwills=\u591c\u9e70 +AHLCG-WknType-BasicWeakness=\u57fa\u7840\u5f31\u70b9 +AHLCG-Back-Standard=\u6807\u51c6 +AHLCG-TheEssexCountyExpress=\u75af\u72c2\u5217\u8f66 +AHLCG-Type=\u79cd\u7c7b +AHLCG-ReturnToTheGathering=\u91cd\u8fd4\u805a\u96c6\u4e8e\u6b64 +AHLCG-LocIcon-TriangleAlt=\u4e09\u89d2\u5f62(\u5f02\u8272) +AHLCG-TheCircleUndone=\u4e07\u8c61\u65e0\u7ec8 +AHLCG-Asset=\u652f\u63f4 +AHLCG-CurseOfTheRougarou=\u72fc\u4eba\u8bc5\u5492 +AHLCG-CollectionNumber=\u7f16\u53f7 +AHLCG-ChillingCold=\u5bd2\u51b7\u523a\u9aa8 +AHLCG-Sanity-None=\u65e0\u795e\u667a\u503c +AHLCG-CityOfSins=\u7f6a\u6076\u4e4b\u57ce +AHLCG-ActStory=\u6545\u4e8b +AHLCG-ReturnToThePathToCarcosa=\u91cd\u8fd4\u5361\u5c14\u514b\u8428\u4e4b\u8def +AHLCG-ReturnToDimCarcosa=\u91cd\u8fd4\u5361\u57ce\u5e7d\u5f71 +AHLCG-Doom=\u6bc1\u706d\u6807\u8bb0 +AHLCG-AgentsOfDagon=Agents of Dagon +AHLCG-ReturnToBlackStarsRise=\u91cd\u8fd4\u9ed1\u661f\u5347\u8d77 +AHLCG-LocIcon-Square=\u65b9\u5f62 +AHLCG-DeckSize=\u724c\u7ec4\u5f20\u6570 +AHLCG-DescentIntoThePitch=Descent into the Pitch +AHLCG-KeywordsTip1=\u5b98\u65b9\u5361\u724c\u5173\u952e\u8bcd\:\n\u8b66\u6212, \u51b7\u6f20, \u5353\u8d8a, \u5feb\u901f, \u9690\u79c1, \u730e\u624b, \u53cd\u51fb, \u7978\u5bb3, \u6c38\u4e45, Road X, \u6d8c\u52a8, \u8702\u62e5X, \u4f7f\u7528(X type), Veiled\n\n----- \u53ef\u7528\u6807\u7b7e -----\n
 \u730e\u7269\n \u751f\u6210
+AHLCG-BeyondTheThreshold=\u5f02\u4e16\u754c\u5f7c\u7aef
+AHLCG-EnemyEnemy=\u654c\u4eba/\u654c\u4eba
+AHLCG-ReturnToTheCityOfArchives=\u91cd\u8fd4\u5929\u673a\u4e4b\u57ce
+AHLCG-TheMiskatonicMuseum=\u535a\u7269\u9986\u4e4b\u591c
+AHLCG-Divider=\u5206\u9694\u677f
+AHLCG-Guide-TopRightSmall=\u53f3\u4e0a, \u5c0f
+AHLCG-Cultist=\u5f02\u6559\u5f92
+AHLCG-Slot-1Arcane=1\u4e2a\u6cd5\u672f\u69fd
+AHLCG-StartingPlayArea=\u8d77\u59cb\u6e38\u620f\u533a\u57df
+AHLCG-Hauntings=\u5982\u5f71\u968f\u5f62
+AHLCG-WinifredHabbamock=\u6e29\u59ae\u5f17\u96f7\u5fb7\u00b7\u54c8\u5df4\u9ed8\u514b
+AHLCG-Byakhee=\u62dc\u4e9a\u57fa
+AHLCG-CopyrightTip1=----- \u53ef\u7528\u6807\u7b7e -----\n Copyright
+AHLCG-ActPortrait=\u573a\u666f/\u56fe\u50cf
+AHLCG-Guide-TopLeftCorner=\u5de6\u4e0a, L\u5f62
+AHLCG-DimCarcosa=\u5361\u57ce\u5e7d\u5f71
+AHLCG-ReturnToLostInTimeAndSpace=\u91cd\u8fd4\u8ff7\u5931\u65f6\u7a7a
+AHLCG-WknType-Weakness=\u5f31\u70b9
+AHLCG-ChildrenOfParadise=\u4e50\u56ed\u4e4b\u5b50
+AHLCG-MiGoIncursion=\u7c73\u6208\u5165\u4fb5
+AHLCG-HorrorInHighGear=Horror in High Gear
+AHLCG-Pref-Icon=\u56fe\u6807
+AHLCG-LocIcon-Heart=\u5fc3\u5f62
+AHLCG-Share=Share
+AHLCG-Pref-UncheckSets=\u53d6\u6d88\u52fe\u9009\u906d\u9047\u7ec4
+AHLCG-NaomisCrew=\u5a1c\u5965\u7c73\u7684\u6253\u624b
+AHLCG-WknType-StoryWeakness=\u6545\u4e8b\u5f31\u70b9
+AHLCG-StoryTemplate-Token=\u6807\u8bb0\u6548\u679c
+AHLCG-CreaturesOfTheDeep=Creatures of the Deep
+AHLCG-NeuroticFear=Neurotic Fear
+AHLCG-ReturnToTheUnspeakableOath=\u91cd\u8fd4\u90aa\u79fd\u8a93\u7ea6
+AHLCG-ReturnToTheMiskatonicMuseum=\u91cd\u8fd4\u535a\u7269\u9986\u4e4b\u591c
+AHLCG-InhabitantsOfCarcosa=\u5361\u5c14\u514b\u8428\u5c45\u6c11
+AHLCG-TheUntamedWilds=\u8352\u83bd\u5bc6\u6797
+AHLCG-ReturnToEchoesOfThePast=\u91cd\u8fd4\u5f80\u4e8b\u56de\u58f0
+AHLCG-ShatteredAeons=\u7834\u788e\u6c38\u4e16
+AHLCG-DevilReef=Devil Reef
+AHLCG-Pref-CheckCollections=\u52fe\u9009\u9009\u62e9\u7684\u6536\u85cf\u5305
+AHLCG-ReturnToTheDoomOfEztli=\u91cd\u8fd4\u57c3\u5179\u7279\u91cc\u7684\u8986\u706d
+AHLCG-ReturnToTheDunwichLegacy=\u91cd\u8fd4\u6566\u5a01\u6cbb\u9057\u4ea7
+AHLCG-ArkhamHorrorLCG=\u8be1\u9547\u5947\u8c08\uff1a\u5361\u724c\u7248
+AHLCG-StoryEnemy=\u6545\u4e8b/\u654c\u4eba
+AHLCG-Spiders=Spiders
+AHLCG-BadLuck=\u574f\u8fd0
+AHLCG-ReturnToTheLastKing=\u91cd\u8fd4\u6700\u540e\u7684\u738b\u8005
+AHLCG-Chaos-Tablet=\u788e\u77f3\u7248
+AHLCG-ScenarioDeckID=\u5192\u9669\u724c\u7ec4ID
+AHLCG-LocIcon-Circle=\u5706\u5f62
+AHLCG-TheForgottenAge=\u5931\u843d\u7684\u65f6\u4ee3
+AHLCG-IntoTheMaelstrom=Into the Maelstrom
+AHLCG-ReturnToTurnBackTime=\u91cd\u8fd4\u65f6\u95f4\u5012\u6d41
+AHLCG-Nightgaunts=\u591c\u9b47
+AHLCG-Guide-BottomRightCorner=\u53f3\u4e0b, L\u5f62
+AHLCG-Chaos-ElderThing=\u53e4\u795e
+AHLCG-TreacheryWeakness=\u8be1\u8ba1(\u5f31\u70b9)
+AHLCG-DeckRequirements=\u724c\u7ec4\u9700\u6c42
+AHLCG-DarkRituals=\u9ed1\u6697\u4eea\u5f0f
+AHLCG-LocIcon-HourglassAlt=\u6c99\u6f0f\u5f62(\u5f02\u8272)
+AHLCG-Slot2=\u69fd\u4f4d2
+AHLCG-LocIcon-MoonAlt=\u6708\u4eae\u5f62(\u5f02\u8272)
+AHLCG-Slot1=\u69fd\u4f4d1
+AHLCG-TraitsTip4=\u5b98\u65b9\u5361\u724c\u5c5e\u6027(\u5730\u70b9)\:\u5e7b\u5883, \u53e4\u4ee3, \u963f\u5361\u59c6, \u963f\u5361\u59c6\u75af\u4eba\u9662, Basement, \u8425\u5730, \u6d1e\u7a74, \u4e2d\u5fc3, City, \u56db\u53f6\u8349\u4ff1\u4e50\u90e8, Coastal,  Depths, \u6566\u5a01\u6cbb, \u5c55\u89c8,\u5f02\u6b21\u5143, Falcon Point, Forbidden, \u5931\u843d, \u672a\u6765, Graveyard, \u4e00\u697c, Hideout, \u5370\u65af\u8305\u65af, Island, \u4e1b\u6797, Lair, \u79d8\u793e,\u58a8\u897f\u54e5\u57ce, Midtown, \u7c73\u65af\u5361\u5854\u5c3c\u514b, Mnar, \u8499\u7279\u5229\u5c14, Mountain, \u7ebd\u7ea6\u57ce, Ocean, Ooth-Nargai, \u8f6f\u6ce5\u6c61\u67d3, Oriab, \u5f02\u754c, \u5df4\u9ece, \u901a\u9053,\u7eb3\u514b\u7279, Port, \u73b0\u4ee3, \u79c1\u5bc6, \u666e\u7f57\u7ef4\u767b\u65af, \u8f68\u9053\u6cbf\u7ebf, \u4eea\u5f0f\u5730, \u6cb3\u6d41, Road, \u9057\u8ff9, \u585e\u52d2\u59c6, \u5723\u5802, \u4e8c\u697c, \u54e8\u5175\u5c71,\u7834\u788e, Ship, Skai, \u5e7d\u7075, St. Mary's, Steps, Surface, Temple, \u7279\u8bfa\u5947\u8482\u7279\u5170, \u4e09\u697c, \u706b\u8f66, Vale, \u865a\u7a7a, Wastes, \u5deb\u5b85,\u6811\u6797, Y'ha-nthlei, \u5e7d\u5636
+AHLCG-TraitsTip3=\u5b98\u65b9\u5361\u724c\u5c5e\u6027(\u654c\u4eba)\:\u5f02\u5f62, \u53e4\u795e, \u5316\u8eab, \u62dc\u4e9a\u57fa, \u540c\u8c0b, \u751f\u7269, \u7f6a\u72af, \u5f02\u6559\u5f92, \u8bc5\u5492\u8426\u7ed5, \u9ed1\u5c71\u7f8a\u5e7c\u5d3d, \u6df1\u6f5c\u8005, \u4fa6\u63a2, \u8815\u866b,\u5e7b\u68a6\u5883, \u7cbe\u82f1, \u5f02\u6b21\u5143, \u57c3\u5179\u7279\u91cc, \u9b54\u5ba0, \u690d\u7269, \u7075\u602a, Ghast, \u98df\u5c38\u9b3c, \u53e4\u683c\u5de8\u4eba, \u7c7b\u4eba, Hybrid, \u6606\u866b, \u72c2\u4eba, \u590d\u4f53, \u602a\u7269,\u7a81\u53d8, \u591c\u9b47, \u8f6f\u6ce5, \u86c7\u65cf, \u4ec6\u4ece, \u4fee\u683c\u65af, \u94f6\u66ae\u79d8\u793e, \u6cd5\u5e08, \u5e7d\u7075, \u8718\u86db, \u5458\u5de5, Suspect, \u72af\u7f6a\u56e2\u4f19, Vehicle, \u575a\u5b88,\u5973\u5deb, \u4f0a\u65af, Zoog
+AHLCG-TraitsTip2=\u5b98\u65b9\u5361\u724c\u5c5e\u6027(\u906d\u9047\u5361/\u5f31\u70b9)\:\u653b\u51fb, \u5316\u8eab, \u758f\u5ffd, \u8bc5\u5492, \u7ec8\u7ed3, \u7f3a\u9677, \u7075\u602a, \u5371\u9669, \u5deb\u672f, \u8fdd\u6cd5, \u635f\u4f24, \u6d1e\u5bdf, \u75af\u72c2, \u7c73\u6208, \u602a\u7269, \u795e\u79d8, \u5c4f\u969c,\u5f81\u5146, \u8f6f\u6ce5, \u5951\u7ea6, \u6096\u8bba, \u6bd2\u836f, \u529b\u91cf, \u9634\u8c0b, \u4ec6\u4ece, \u5e7d\u7075, \u7b56\u7565, \u4efb\u52a1, \u6050\u6016, \u9677\u9631, \u4f0a\u65af
+AHLCG-TraitsTip1=\u5b98\u65b9\u5361\u724c\u5c5e\u6027(\u73a9\u5bb6\u5361)\:\u7279\u5de5, \u76df\u53cb, \u62a4\u7532, \u827a\u672f\u5bb6, \u52a9\u7406, \u9884\u8a00, \u4fe1\u5f92, \u795d\u798f, \u679c\u65ad, \u798f\u7949, \u65c1\u4eba, \u5b88\u62a4, \u9884\u77e5, \u670d\u88c5, \u6c89\u7a33,\u72b6\u6001, \u4eba\u8109, \u540c\u8c0b, Covenant, \u751f\u7269, \u7f6a\u72af, \u5f02\u6559\u5f92, \u8bc5\u5492\u8426\u7ed5, \u7edd\u671b, \u4fa6\u63a2, \u719f\u7ec3, Dreamer, \u6f02\u6cca\u8005, \u6566\u5a01\u6cbb,\u4e13\u5bb6, \u57c3\u5179\u7279\u91cc, \u5b9a\u547d, \u6069\u60e0, \u67aa\u68b0, \u978b\u5b50, \u5e78\u8fd0, \u5c40\u52bf, \u7075\u602a, \u98df\u5c38\u9b3c, \u5386\u53f2\u534f\u4f1a, \u7c7b\u4eba, \u730e\u4eba, Hybrid, \u8fdd\u6cd5, \u4e34\u65f6\u5236\u54c1,\u5929\u6027, \u6d1e\u5bdf, \u4e50\u5668, \u9053\u5177, \u94a5\u5319, \u72c2\u4eba, \u533b\u5e08, \u8fd1\u6218, \u602a\u7269, \u7c73\u65af\u5361\u5854\u5c3c\u514b, \u5bc6\u6559, \u8f6f\u6ce5, \u5951\u7ea6, \u6096\u8bba, \u8d5e\u52a9\u4eba, \u827a\u4eba, \u8b66\u5bdf,\u7cbe\u901a, \u8fdc\u7a0b, \u9057\u7269, \u8bb0\u8005, \u4eea\u5f0f, \u79d1\u5b66, Scholar, \u670d\u52a1, \u94f6\u66ae\u79d8\u793e, \u793e\u4f1a\u540d\u6d41, \u6b4c\u66f2, \u6cd5\u5e08, \u6cd5\u672f, \u52c7\u6c14, \u4f9b\u7ed9,\u7b56\u7565, \u624d\u80fd, \u5854\u7f57, \u4efb\u52a1, \u4e66\u7c4d, \u5de5\u5177, \u9677\u9631, \u6280\u5de7, \u5347\u7ea7, Vehicle, \u8001\u5175, \u575a\u5b88, \u65c5\u4eba, \u6b66\u5668, \u5973\u5deb, \u4f0a\u65af
+AHLCG-StrikingFear=\u6050\u60e7\u6253\u51fb
+AHLCG-TheBayou=\u6cb3\u53e3
+AHLCG-Front=\u6b63\u9762
+AHLCG-TheNightsUsurper=\u591c\u4e4b\u4e71\u81e3
+AHLCG-Right=\u53f3
+AHLCG-TheGathering=\u805a\u96c6\u4e8e\u6b64
+AHLCG-SecretDoors=\u9690\u5bc6\u7684\u95e8
+AHLCG-BlackStarsRise=\u9ed1\u661f\u5347\u8d77
+AHLCG-Pref-UncheckCollections=\u53d6\u6d88\u52fe\u9009\u6536\u85cf\u5305
+AHLCG-Back-Player=\u73a9\u5bb6
+AHLCG-Poison=\u6bd2\u836f
+AHLCG-ScenarioInformation=\u5267\u672c\u624b\u518c
+AHLCG-HeartOfTheElders=\u4e45\u8fdc\u8179\u5730
+AHLCG-MaddeningDelusions=Maddening Delusions
+AHLCG-TheDreamEaters=The Dream-Eaters
+AHLCG-Left=\u5de6
+AHLCG-WhereDoomAwaits=\u6bc1\u706d\u4e4b\u5730
+AHLCG-Pref-UserSets=\u81ea\u8ba2\u906d\u9047\u7ec4\:
+AHLCG-ALightInTheFog=A Light in the Fog
+AHLCG-DeathOfStars=\u661f\u8fb0\u6d88\u901d
+AHLCG-LocIcon-TAlt=T\u5b57\u5f62(\u5f02\u8272)
+AHLCG-Artist=\u827a\u672f\u5bb6
+AHLCG-Slot-Body=\u670d\u88c5\u69fd
+AHLCG-Pref-RemoveCollections=\u79fb\u9664\u6536\u85cf\u5305
+AHLCG-Scenario-Resolution=\u7ed3\u5c40
+AHLCG-Guide-BottomLarge=\u4e0b, \u5927
+AHLCG-LocIcon-DoubleSlash=\u53cc\u659c\u7ebf
+AHLCG-LocIcon-StarAlt=\u661f\u5f62(\u5f02\u8272)
+AHLCG-AgentsOfHydra=Agents of Hydra
+AHLCG-LocIcon-SlashAlt=\u659c\u7ebf(\u5f02\u8272)
+AHLCG-TerrorOfTheVale=Terror of the Vale
+AHLCG-Pref-StandardSets=\u6807\u51c6\u906d\u9047\u7ec4\:
+AHLCG-AgendaStandard=\u5bc6\u8c0b(\u6807\u51c6)
+AHLCG-LocIcon-Triangle=\u4e09\u89d2\u5f62
+AHLCG-StoryLocation=\u6545\u4e8b/\u5730\u70b9
+AHLCG-StoryChaos=\u6545\u4e8b/\u6df7\u4e71\u6807\u8bb0\u6548\u679c
+AHLCG-TheLairOfDagon=The Lair of Dagon
+AHLCG-CoreSet=\u57fa\u7840\u6e38\u620f
+AHLCG-Chaos-Skull=\u9ab7\u9885
+AHLCG-ReturnToThePallidMask=\u91cd\u8fd4\u82cd\u767d\u9762\u5177
+AHLCG-TheDoomOfEztli=\u57c3\u5179\u7279\u91cc\u7684\u8986\u706d
+AHLCG-Pref-Image=\u56fe\u5f62
+AHLCG-Connections=\u8fde\u63a5\u56fe\u6807
+AHLCG-General=\u6982\u89c8
+AHLCG-MusicOfTheDamned=\u53d7\u8bc5\u5492\u7684\u6b4c\u58f0
+AHLCG-ReturnToShatteredAeons=\u91cd\u8fd4\u7834\u788e\u6c38\u4e16
+AHLCG-WknType-InvestigatorWeakness=\u8c03\u67e5\u5458\u5f31\u70b9
+AHLCG-Columns=\u680f
+AHLCG-HastursGift=\u54c8\u65af\u5854\u7684\u993d\u8d60
+AHLCG-AssetAsset=\u652f\u63f4/\u652f\u63f4
+AHLCG-AgendaEnemy=\u5bc6\u8c0b/\u654c\u4eba
+AHLCG-BackPortrait=\u80cc\u9762\u753b\u50cf
+AHLCG-Clues=\u7ebf\u7d22
+AHLCG-ParagraphSpacing=\u6bb5\u843d\u95f4\u9694
+AHLCG-Orientation-Reversed=\u53cd\u5411
+AHLCG-LocIcon-CrossAlt=\u5341\u5b57(\u5f02\u8272)
+AHLCG-Class-ParallelMystic=\u6f5c\u4fee\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-ParallelGuardian=\u5b88\u536b\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-ParallelSurvivor=\u6c42\u751f\u8005(\u5e73\u884c\u7248)
+AHLCG-Class-Guardian=\u5b88\u536b\u8005
+AHLCG-Class-Survivor=\u6c42\u751f\u8005
+AHLCG-ReturnToTheDevourerBelow=\u91cd\u8fd4\u5730\u5e95\u566c\u9b54
+AHLCG-Pref-DefaultValues=\u9884\u8bbe\u503c
+AHLCG-TurnBackTime=\u65f6\u95f4\u5012\u6d41
+AHLCG-KnYan=\u6606\u626c
+AHLCG-AgendaFrontPortrait=\u5bc6\u8c0b(\u56fe\u50cf)
+AHLCG-Level=\u7b49\u7ea7
+AHLCG-ExcelsiorManagement=\u9152\u5e97\u7ecf\u8425
+AHLCG-WarOfTheOuterGods=\u5916\u795e\u4e4b\u6218
+AHLCG-AgentsOfShubNiggurath=\u838e\u5e03\u00b7\u5c3c\u53e4\u62c9\u4e1d\u7684\u4f7f\u8005
+AHLCG-PrefEncounterTip=\u9009\u62e9\u54ea\u4e9b\u906d\u9047\u7ec4\u4f1a\u51fa\u73b0\u5728\u7ec4\u4ef6\u7f16\u8f91\u9875\u9762\u4e4b\u4e2d\u906d\u9047\u7ec4\u7684\u9009\u5355\u91cc\u9762\u3002

\u540d\u79f0\: \u906d\u9047\u7ec4\u540d\u79f0
\u5faa\u73af\: \u5305\u542b\u6b64\u906d\u9047\u7ec4\u7684\u5faa\u73af\u540d\u79f0
\u56fe\u6807\: \u81ea\u8ba2\u906d\u9047\u7ec4\u56fe\u6807\u7684\u6863\u6848\u540d\u79f0
\u6807\u7b7e\: \u5728\u6587\u672c\u4e2d\u63d2\u5165\u56fe\u6807\u6240\u4f7f\u7528\u7684\u6807\u7b7e\u57fa\u5e95. \u5982\u679c\u6807\u7b7e\u6807\u7b7e\u57fa\u5e95\u662f 'rats', \u90a3\u4e48\u4ee5\u4e0b\u662f\u80fd\u8d2d\u4f7f\u7528\u7684\u6807\u7b7e\:

<ratss> \: \u63d2\u5165\u4e00\u4e2a\u5c0f\u56fe\u6807
<ratsm> \: \u63d2\u5165\u4e00\u4e2a\u4e2d\u56fe\u6807
<ratsl> \: \u63d2\u5165\u4e00\u4e2a\u5927\u56fe\u6807

\u5df2\u5f00\u542f\u7684\u5361\u724c, \u5fc5\u987b\u91cd\u65b0\u5f00\u542f\u6863\u6848, \u53d8\u66f4\u624d\u4f1a\u751f\u6548\u3002 +AHLCG-Chaos-None=\u65e0 +AHLCG-BeastThralls=\u517d\u4e4b\u5974\u4ec6 +AHLCG-SharePortrait=\u53cc\u9762\u7686\u4f7f\u7528\u6b63\u9762\u7684\u753b\u50cf +AHLCG-TheWatcher=\u770b\u5b88\u4eba +AHLCG-ReturnToTheDepthsOfYoth=\u91cd\u8fd4\u5e7d\u5636\u6df1\u6e0a +AHLCG-ReturnToTheRainforest=\u91cd\u8fd4\u96e8\u6797 +AHLCG-ThePathToCarcosa=\u5361\u5c14\u514b\u8428\u4e4b\u8def +AHLCG-Health=\u751f\u547d\u503c +AHLCG-TheEternalSlumber=\u6c38\u6046\u6c89\u7761 +AHLCG-TheBoundaryBeyond=\u754c\u9650\u5f7c\u7aef +AHLCG-Collection=\u6536\u85cf +AHLCG-CarnevaleOfHorrorsE=\u6050\u6016\u5609\u5e74\u534e +AHLCG-LocIcon-SquareAlt=\u65b9\u5f62(\u5f02\u8272) +AHLCG-DelusoryEvils=Delusory Evils +AHLCG-Guide-Title=\u6807\u9898\u9875 +AHLCG-ActStoryAsset=\u573a\u666f/\u6545\u4e8b\u652f\u63f4 +AHLCG-EnemyWeakness=\u654c\u4eba(\u5f31\u70b9) +AHLCG-AncientEvils=\u8fdc\u53e4\u6076\u9b54 +AHLCG-RulesTip3=----- \u53ef\u7528\u6807\u7b7e -----
...
\u6bb5\u843d\u6807\u5934
...
\u6b21\u8981\u6807\u5934 \u7ed3\u5c40\u6846 \u5192\u9669\u6a21\u5f0f\u6846 \u5e55\u95f4\u6545\u4e8b\u6846\: \u5012\u53d9\u6545\u4e8b\u6846bracket \: \u5728\u65b9\u5757\u7684\u6700\u4e0a\u65b9\u663e\u793a\u6846\u67b6header \: \u5728\u65b9\u5757\u7684\u6700\u4e0a\u65b9\u663e\u793a\u6807\u51c6\u7684\u6807\u5934color \: \u4f7f\u7528\u63d0\u4f9b\u7684 H, S, B \u503c\u4e3a\u65b9\u6846\u7740\u8272\u8bed\u6cd5 "color\\=H, S, B", \u5176\u4e2d\:H \\= hue (0.0 - 1.0)S \\= saturation (0.0 - 1.0)B \\= brightness (0.0 - 1.0)(\u6587\u5b57\u4ecd\u9700\u8981\u5206\u5f00\u7740\u8272)e.g. \u6216 \u7ed3\u675f\u7ed3\u5c40\u6846\u548c\u5192\u9669\u6a21\u5f0f\u6846(\u542b\u6700\u4e0b\u65b9\u7684\u6846\u67b6) \u6216 \u7ed3\u675f\u5e55\u95f4\u6545\u4e8b/\u5012\u53d9\u6545\u4e8b\u6846\u8303\u4f8b\: ... \u7ed3\u5c40\u9879\u76ee\u6807\u8bb0 +AHLCG-RulesTip2=----- \u53ef\u7528\u6807\u7b7e ----- \u884c\u52a8\u89e6\u53d1\u80fd\u529b \u514d\u8d39\u89e6\u53d1\u80fd\u529b \u53cd\u5e94\u89e6\u53d1\u80fd\u529b \u5f3a\u5236 \u95f9\u9b3c \u76ee\u6807 \u663e\u73b0 \u72ec\u7279 \u6bcf\u8c03\u67e5\u5458 \u83f1\u5f62\u9879\u76ee\u7b26\u53f7 \u65b9\u5757\u9879\u76ee\u7b26\u53f7 \u9879\u76ee\u7684Tab\u7a7a\u767d \u7ed3\u5c40\u7bad\u5934 + R \u7ed3\u675f\u7ed3\u5c40 \u5c5e\u6027 \u6c34\u5e73\u7a7a\u9694 \u5927\u578b\u5782\u76f4\u7a7a\u9694 \u5782\u76f4\u7a7a\u9694 \u5c0f\u5782\u76f4\u7a7a\u9694 +AHLCG-RulesTip1=----- \u53ef\u7528\u6807\u7b7e ----- \u5361\u724c\u540d\u79f0 \u5b88\u536b\u8005 \u63a2\u6c42\u8005 \u6d41\u6d6a\u8005 \u6f5c\u4fee\u8005 \u751f\u5b58\u8005 \u610f\u5fd7 \u667a\u6167 \u6218\u6597 \u654f\u6377 \u5168\u80fd \u9ab7\u9885 \u5f02\u6559\u5f92 \u788e\u77f3\u7248 \u53e4\u795e \u795d\u798f \u8bc5\u5492 \u8fdc\u53e4\u5370\u8bb0 \u89e6\u624b\u906d\u9047\u7ec4\u548c\u6536\u85cf\u5305\u56fe\u6807\u7684\u6807\u7b7e\u5217\u8868\u53ef\u4ee5\u5728\u504f\u597d\u8bbe\u5b9a\u4e2d\u300a\u8be1\u9547\u5947\u8c08\uff1a\u5361\u724c\u7248\u300b\u7684\u9875\u9762\u627e\u5230\u3002\u5728\u6807\u7b7e\u540e\u52a0\u4e0a's'\u4e3a\u5c0f\u56fe\u6807\uff0c\u52a0\u4e0a'm'\u4e3a\u4e2d\u56fe\u6807\uff0c\u52a0\u4e0a'l'\u4e3a\u5927\u56fe\u6807\u3002\u8303\u4f8b\: , , +AHLCG-LocIcon-Moon=\u6708\u4eae\u5f62 +AHLCG-TheVortexAbove=\u7a7a\u4e2d\u6f29\u6da1 +AHLCG-SingleGroup=\u5355\u7ec4\u56e2\u961f +AHLCG-Part=Part +AHLCG-ForTheGreaterGood=\u5d07\u9ad8\u5229\u76ca +AHLCG-VictoryTip1=\u5b98\u65b9\u5361\u724c\u5173\u952e\u8bcd\:\u80dc\u5229X, \u590d\u4ec7X +AHLCG-Pref-Tag=\u6807\u7b7e +AHLCG-ReturnToTheMidnightMasks=\u91cd\u8fd4\u5348\u591c\u5047\u9762 +AHLCG-CultOfTheYellowSign=\u9ec4\u8272\u5370\u8bb0\u4fe1\u5f92 +AHLCG-Keywords=\u5173\u952e\u8bcd +AHLCG-Pref-DefaultCollection=\u9884\u8bbe\u6536\u85cf\: +AHLCG-CampaignGuideA4=\u5267\u672c\u624b\u518cA4 (210mm x 297mm) +AHLCG-StoryStory=\u6545\u4e8b/\u6545\u4e8b +AHLCG-Slot-2Hands=2\u4e2a\u624b\u90e8\u69fd +AHLCG-Act=\u573a\u666f +AHLCG-CurtainCall=\u8c22\u5e55 +AHLCG-Pref-RemoveSets=\u79fb\u9664\u906d\u9047\u7ec4 +AHLCG-Damage=\u4f24\u5bb3\u503c +AHLCG-TheStranger=\u964c\u751f\u4eba +AHLCG-Guide-TopLarge=\u4e0a, \u5927 +AHLCG-EpicMultiplayer=\u591a\u7ec4\u53f2\u8bd7 +AHLCG-DeckRestrictions=\u724c\u7ec4\u9650\u5236 +AHLCG-TreacheryPortrait=\u8be1\u8ba1/\u753b\u50cf +AHLCG-VileExperiments=\u4f4e\u52a3\u5b9e\u9a8c +AHLCG-APhantomOfTruth=\u771f\u76f8\u5e7b\u5f71 +AHLCG-Pref-AddCustomCollection=\u65b0\u589e\u81ea\u8ba2\u6536\u85cf\u5305\: +AHLCG-Sections=\u6bb5\u843d\u9009\u9879 +AHLCG-ReturnToCultOfUmordhoth=\u4e4c\u9ed8\u5c14\u591a\u65af\u6559\u56e2 +AHLCG-AccentedStory=\u6545\u4e8b +AHLCG-StoryTemplate-Story=\u6545\u4e8b +AHLCG-LocIcon-Quote=\u95ee\u53f7 +AHLCG-Class-Weakness=\u5f31\u70b9 +AHLCG-Pref-EncounterSets=\u906d\u9047\u7ec4 +AHLCG-Guide-BottomLeftSmall=\u5de6\u4e0b, \u5c0f +AHLCG-Class-Seeker=\u63a2\u6c42\u8005 +AHLCG-Event=\u4e8b\u4ef6 +AHLCG-ReturnToTheHouseAlwaysWins=\u91cd\u8fd4\u767e\u8d4c\u767e\u80dc +AHLCG-Template=\u6a21\u677f +AHLCG-LocIcon-Slash=\u659c\u7ebf +AHLCG-LostInTimeAndSpace=\u8ff7\u5931\u65f6\u7a7a +AHLCG-ThreadsOfFate=\u547d\u8fd0\u4e4b\u7ebf +AHLCG-LocIcon-DiamondAlt=\u83f1\u5f62(\u5f02\u8272) +AHLCG-InTooDeep=In Too Deep +AHLCG-FogOverInnsmouth=Fog over Innsmouth +AHLCG-ActLocation=\u573a\u666f/\u5730\u70b9 +AHLCG-Story=\u6545\u4e8b +AHLCG-ReturnToPillarsOfJudgment=\u91cd\u8fd4\u5ba1\u5224\u4e4b\u67f1 +AHLCG-MiniInvestigator=\u8ff7\u4f60\u8c03\u67e5\u5458\u5361 +AHLCG-ReturnToUndimensionedAndUnseen=\u91cd\u8fd4\u65e0\u4eba\u77e5\u6653 +AHLCG-Standard=\u6807\u51c6 +AHLCG-LocIcon-CircleAlt=\u5706\u5f62(\u5f02\u8272) +AHLCG-Pref-DefaultSet=\u9884\u8bbe\u906d\u9047\u7ec4\: +AHLCG-TheUnspeakableOath=\u90aa\u79fd\u8a93\u7ea6 +AHLCG-TheBlobThatAteEverythingE=\u541e\u566c\u4e07\u7269 +AHLCG-TheHouseAlwaysWins=\u767e\u8d4c\u767e\u80dc +AHLCG-Slot-Accessory=\u9970\u54c1\u69fd +AHLCG-MurderAtTheExcelsiorHotel=\u827e\u8096\u5e0c\u5c14\u9152\u5e97\u8c0b\u6740\u6848 +AHLCG-Shroud=\u9690\u85cf\u503c +AHLCG-Traits=\u5c5e\u6027 +AHLCG-ResurgentEvils=\u7526\u751f\u6076\u9b54 +AHLCG-AtDeathsDoorstep=\u6b7b\u4ea1\u95e8\u524d +AHLCG-Slot-1Hand=1\u4e2a\u624b\u90e8\u69fd +AHLCG-Pref-CheckSets=\u52fe\u9009\u9009\u62e9\u7684\u906d\u9047\u7ec4 +AHLCG-Sorcery=\u5deb\u672f +AHLCG-Scenario-Portrait=\u753b\u50cf +AHLCG-Pref-Name=\u540d\u79f0 +AHLCG-AgendaStoryAsset=\u5bc6\u8c0b/\u6545\u4e8b\u652f\u63f4 +AHLCG-CreaturesOfTheUnderworld=Creatures of the Underworld +AHLCG-CarnevaleOfHorrors=\u6050\u6016\u72c2\u6b22\u8282 +AHLCG-Description= +AHLCG-Scenario-Title=\u6807\u9898 +AHLCG-Position=\u4f4d\u7f6e +AHLCG-Slot-Ally=\u76df\u53cb\u69fd +AHLCG-SecretsOfTheUniverse=\u5b87\u5b99\u4e4b\u79d8 +AHLCG-AgendaTreachery=\u5bc6\u8c0b/\u8be1\u8ba1 +AHLCG-TheInnsmouthConspiracy=The Innsmouth Conspiracy +AHLCG-Delusions=\u5984\u60f3 +AHLCG-DeadlyTraps=\u81f4\u6b7b\u9677\u9631 +AHLCG-BishopsThralls=\u6bd5\u6653\u666e\u4e4b\u4ec6 +AHLCG-Pref-DeleteSets=\u5220\u9664\u9009\u62e9\u7684\u906d\u9047\u7ec4 +AHLCG-Guide-BottomLeftMedium=\u5de6\u4e0b, \u4e2d +AHLCG-ReturnToBloodOnTheAltar=\u91cd\u8fd4\u8840\u8272\u796d\u575b +AHLCG-Ghouls=\u98df\u5c38\u9b3c +AHLCG-SinsOfThePast=\u8fc7\u5f80\u7f6a\u5b7d +AHLCG-SilverTwilightLodge=\u94f6\u66ae\u7955\u793e +AHLCG-AgendaStory=\u6545\u4e8b +AHLCG-ShatteredMemories=Shattered Memories +AHLCG-MurderAtTheExcelsiorHotelE=\u827e\u8096\u5e0c\u5c14\u9152\u5e97\u8c0b\u6740\u6848 +AHLCG-BasicData=\u57fa\u7840\u8d44\u8baf +AHLCG-Orientation-Standard=\u6807\u51c6 +AHLCG-Class-Neutral=\u4e2d\u7acb +AHLCG-SwarmOfAssimilation=\u540c\u5316\u866b\u7fa4 +AHLCG-TheCityOfArchives=\u5929\u673a\u4e4b\u57ce +AHLCG-CustomEncounterSet=\u975e\u5b98\u65b9\u906d\u9047\u7ec4 +AHLCG-Skill-None=\u65e0\u6280\u80fd +AHLCG-TheLastKing=\u6700\u540e\u7684\u738b\u8005 +AHLCG-Class-Rogue=\u6d41\u6d6a\u8005 +AHLCG-EchoesOfThePast=\u5f80\u4e8b\u56de\u58f0 +AHLCG-YogSothothsEmissaries=\u72b9\u683c\u00b7\u7d22\u6258\u65af\u7684\u5bc6\u4f7f +AHLCG-Syzygy=Syzygy +AHLCG-LocIcon-None=\u65e0 +AHLCG-LockedDoors=\u4e0a\u9501\u7684\u95e8 +AHLCG-Skill-Willpower=\u610f\u5fd7 +AHLCG-LocIcon-Diamond=\u83f1\u5f62 +AHLCG-SecondaryClass=\u7b2c\u4e8c\u804c\u9636\u9009\u62e9 +AHLCG-MergingRealities=Merging Realities +AHLCG-Skill-Wild=\u5168\u80fd +AHLCG-AssetStoryPortrait=\u6545\u4e8b\u652f\u63f4/\u56fe\u50cf +AHLCG-DecayingReality=Decaying Reality +AHLCG-EvilPortents=\u90aa\u5146 +AHLCG-EnemyPortrait=\u654c\u4eba/\u56fe\u50cf +AHLCG-DeckOptions=\u724c\u7ec4\u9009\u9879 +AHLCG-AdditionalRequirements=\u989d\u5916\u9700\u6c42 +AHLCG-CurseOfTheRougarouE=Curse of the Rougarou +AHLCG-Pref-StandardCollections=\u6807\u51c6\u6536\u85cf\u5305\: +AHLCG-NathanielCho=\u7eb3\u6492\u5c3c\u5c14\u00b7\u66f9 +AHLCG-ArmitagesFate=\u963f\u7c73\u8482\u5947\u7684\u547d\u8fd0 +AHLCG-AgentsOfYig=\u4f0a\u683c\u7684\u4f7f\u5f92 +AHLCG-Rats=\u8001\u9f20 +AHLCG-Zoogs=Zoogs +AHLCG-ReturnToHeartOfTheElders=\u91cd\u8fd4\u4e45\u8fdc\u8179\u5730 +AHLCG-LocIcon-Star=\u661f\u5f62 +AHLCG-Skill-Combat=\u6218\u6597 +AHLCG-Class-BasicWeakness=\u57fa\u7840\u5f31\u70b9 +AHLCG-Title=\u6807\u9898 +AHLCG-Skill-Agility=\u654f\u6377 +AHLCG-AssetStoryAsset=\u6545\u4e8b\u652f\u63f4/\u6545\u4e8b\u652f\u63f4 +AHLCG-AgendaPortrait=\u5bc6\u8c0b/\u56fe\u50cf +AHLCG-Victory=\u80dc\u5229 +AHLCG-BeforeTheBlackThrone=\u9ed1\u8272\u738b\u5ea7 +AHLCG-DreamersCurse=Dreamer's Curse +AHLCG-Pref-PermanentlyRemoveSets=\u662f\u5426\u8981\u6c38\u8fdc\u5c06\u9009\u53d6\u7684\u81ea\u8ba2\u906d\u9047\u7ec4\u79fb\u9664? +AHLCG-WarOfTheOuterGodsE=\u5916\u795e\u4e4b\u6218 +AHLCG-WakingNightmare=Waking Nightmare +AHLCG-TheSecretName=\u9690\u5bc6\u4e4b\u540d +AHLCG-TreacheryStory=\u6545\u4e8b\u8be1\u8ba1(\u5f31\u70b9) +AHLCG-TheLocals=The Locals +AHLCG-AbyssalGifts=\u6df1\u6e0a\u8d60\u793c +AHLCG-Tablet=\u788e\u77f3\u7248 +AHLCG-TheWitchingHour=\u5deb\u5f02\u65f6\u523b +AHLCG-ReturnToTheUntamedWilds=\u91cd\u8fd4\u8352\u83bd\u5bc6\u6797 +AHLCG-HarveyWalters=\u54c8\u7ef4\u00b7\u6c83\u5c14\u7279\u65af +AHLCG-Pref-PermanentlyRemoveCollections=\u662f\u5426\u8981\u6c38\u8fdc\u5c06\u9009\u53d6\u7684\u81ea\u8ba2\u6536\u85cf\u5305\u79fb\u9664? +AHLCG-TheBeyond=\u5f02\u4e16\u754c +AHLCG-RealmOfDeath=\u51a5\u754c +AHLCG-Expedition=\u63a2\u9669 +AHLCG-RisingTide=Rising Tide +AHLCG-SandsOfEgypt=\u57c3\u53ca\u4e4b\u6c99 +AHLCG-StrangeEons=Strange Eons +AHLCG-AssetStory=\u6545\u4e8b\u652f\u63f4 +AHLCG-AllOrNothing=\u5b64\u6ce8\u4e00\u63b7 +AHLCG-Guide-TopRightMedium=\u53f3\u4e0a, \u4e2d +AHLCG-ExtracurricularActivity=\u8bfe\u5916\u6d3b\u52a8 +AHLCG-Setup=\u8bbe\u7f6e +AHLCG-RightBottom=\u5bf9\u9f50\u53f3/\u4e0b +AHLCG-ChaosEffects=\u6df7\u4e71\u6807\u8bb0\u6548\u679c +AHLCG-Skill-Intellect=\u667a\u6167 +AHLCG-Slot-Tarot=\u5854\u7f57\u69fd +AHLCG-LocIcon-CopyFront=\u4e0e\u6b63\u9762\u76f8\u540c +AHLCG-Pref-AddSet=\u5c06\u906d\u9047\u7ec4\u52a0\u5165\u5217\u8868 +AHLCG-AbyssalTribute=\u6df1\u6e0a\u796d\u54c1 +AHLCG-CombineWith=\u5408\u4f75 +AHLCG-AgendaLocation=\u5bc6\u8c0b/\u5730\u70b9 +AHLCG-Guide-RightLarge=\u53f3, \u5927 +AHLCG-AgendaNumber=\u5bc6\u8c0b\u7f16\u53f7 +AHLCG-ReturnToTheForgottenAge=\u91cd\u8fd4\u5931\u843d\u7684\u65f6\u4ee3 +AHLCG-Skip=\u8df3\u8fc7 +AHLCG-Spacing=\u95f4\u9694 +AHLCG-Guide-Empty=\u7a7a\u767d\u9875 +AHLCG-LocIcon-Empty=\u7a7a\u767d +AHLCG-Corsairs=Corsairs +AHLCG-TrappedSpirits=\u88ab\u56f0\u7684\u7075\u9b42 +AHLCG-Class-Mystic=\u6f5c\u4fee\u8005 +AHLCG-ReadOrDie=\u6b7b\u4ea1\u9605\u8bfb +AHLCG-ForgottenRuins=Forgotten Ruins +AHLCG-CultOfPnakotus=Cult of Pnakotus +AHLCG-Malfunction=Malfunction +AHLCG-HideousAbominations=\u4e11\u964b\u5f02\u5f62 +AHLCG-TheDunwichLegacy=\u6566\u5a01\u6cbb\u9057\u4ea7 +AHLCG-EncounterSet=\u906d\u9047\u7ec4 +AHLCG-Mirror=\u955c\u50cf +AHLCG-Stamina=\u751f\u547d\u503c +AHLCG-Cost=\u8d39\u7528 +AHLCG-ReturnToTheEssexCountyExpress=\u91cd\u8fd4\u75af\u72c2\u5217\u8f66 +AHLCG-Investigator=\u8c03\u67e5\u5458 +AHLCG-InexorableFate=\u5728\u52ab\u96be\u9003 +AHLCG-PointOfNoReturn=Point of No Return +AHLCG-ErraticFear=\u6050\u60e7\u65e0\u5e38 +AHLCG-ThePitOfDespair=The Pit of Despair +AHLCG-FloodedCaverns=Flooded Caverns +AHLCG-UnionAndDisillusion=\u805a\u5408\u5e7b\u706d +AHLCG-Skull=\u9ab7\u9885 +AHLCG-Guide-TopLeftMedium=\u5de6\u4e0a, \u4e2d +AHLCG-ReturnToWhereDoomAwaits=\u91cd\u8fd4\u6bc1\u706d\u4e4b\u5730 +AHLCG-Text=\u6587\u672c +AHLCG-Pref-DeleteCollections=\u5220\u9664\u9009\u62e9\u7684\u6536\u85cf\u5305 +AHLCG-Set=\u906d\u9047\u7ec4 +AHLCG-PrefCollectionTip=\u9009\u62e9\u54ea\u4e9b\u6536\u85cf\u5305\u4f1a\u51fa\u73b0\u5728\u7ec4\u4ef6\u7f16\u8f91\u9875\u9762\u4e4b\u4e2d\u6536\u85cf\u5305\u7684\u9009\u5355\u91cc\u9762\u3002

\u540d\u79f0\: \u6536\u85cf\u5305\u540d\u79f0\u6216\u662f\u5faa\u73af\u540d\u79f0
\u56fe\u6807\: \u81ea\u8ba2\u6536\u85cf\u5305\u56fe\u6807\u7684\u6863\u6848\u540d\u79f0
\u6807\u7b7e\: \u5728\u6587\u672c\u4e2d\u63d2\u5165\u56fe\u6807\u6240\u4f7f\u7528\u7684\u6807\u7b7e\u57fa\u5e95. \u5982\u679c\u6807\u7b7e\u6807\u7b7e\u57fa\u5e95\u662f 'core', \u90a3\u4e48\u4ee5\u4e0b\u662f\u80fd\u8d2d\u4f7f\u7528\u7684\u6807\u7b7e\:

<cores> \: \u63d2\u5165\u4e00\u4e2a\u5c0f\u56fe\u6807
<corem> \: \u63d2\u5165\u4e00\u4e2a\u4e2d\u56fe\u6807
<corel> \: \u63d2\u5165\u4e00\u4e2a\u5927\u56fe\u6807

\u5df2\u5f00\u542f\u7684\u5361\u724c, \u5fc5\u987b\u91cd\u65b0\u5f00\u542f\u6863\u6848, \u53d8\u66f4\u624d\u4f1a\u751f\u6548\u3002 +AHLCG-Pref-Collections=\u6536\u85cf +AHLCG-TreacheryEncounter=\u8be1\u8ba1(\u906d\u9047) +AHLCG-OpeningHand=\u8d77\u59cb\u624b\u724c +AHLCG-Back=\u80cc\u9762 +AHLCG=\u8be1\u9547\u5947\u8c08\uff1a\u5361\u724c\u7248 +AHLCG-AssetStoryEnemy=\u6545\u4e8b\u652f\u63f4/\u654c\u4eba +AHLCG-Slot-None=\u65e0\u69fd\u4f4d +AHLCG-LocIcon-Hourglass=\u6c99\u6f0f\u5f62 +AHLCG-Section=\u6bb5\u843d +AHLCG-Stamina-None=\u65e0\u751f\u547d\u503c +AHLCG-LocIcon-HeartAlt=\u5fc3\u5f62(\u5f02\u8272) +AHLCG-Attack=\u653b\u51fb\u503c +AHLCG-Guide-LeftLarge=\u5de6, \u5927 +AHLCG-ReturnToTheNightOfTheZealot=\u91cd\u8fd4\u72c2\u70ed\u4e4b\u591c +AHLCG-DoomedExpedition=Doomed Expedition +AHLCG-TheLabyrinthsOfLunacyE=The Labyrinths of Lunacy +AHLCG-Back-Encounter=\u906d\u9047 +AHLCG-Class=\u804c\u9636 +AHLCG-EnemyEncounter=\u654c\u4eba(\u906d\u9047) +AHLCG-Skill=\u6280\u80fd +AHLCG-TheDepthsOfYoth=\u5e7d\u5636\u6df1\u6e0a +AHLCG-Chaos-Cultist=\u5f02\u6559\u5f92 +AHLCG-CampaignGuide75=\u5267\u672c\u624b\u518c(7.5"x7.5") +AHLCG-Flavor=\u4ecb\u7ecd\u6587\u672c +AHLCG-ActEnemy=\u573a\u666f/\u654c\u4eba +AHLCG-GhoulsOfUmordhoth=\u4e4c\u9ed8\u5c14\u591a\u65af\u7684\u98df\u5c38\u9b3c +AHLCG-SetNumber=\u7f16\u53f7 +AHLCG-Level-None=\u65e0\u7b49\u7ea7 +AHLCG-LineSpacing=\u884c\u8ddd\u95f4\u9694 +AHLCG-LeftTop=\u5bf9\u9f50\u5de6/\u4e0a +AHLCG-TheVanishingOfElinaHarper=The Vanishing of Elina Harper +AHLCG-Guide-TopLeftSmall=\u5de6\u4e0a, \u5c0f +AHLCG-Pref-AddCollection=\u5c06\u6536\u85cf\u5305\u52a0\u5165\u5217\u8868 +AHLCG-Options=\u9009\u9879 +AHLCG-AgentsOfHastur=\u54c8\u65af\u5854\u7684\u4f7f\u8005 +AHLCG-ReturnToThreadsOfFate=\u91cd\u8fd4\u547d\u8fd0\u4e4b\u7ebf +AHLCG-LocationLocation=\u5730\u70b9/\u5730\u70b9 +AHLCG-Portrait=\u753b\u50cf diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/abbrev/game-AHLCG.settings b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/abbrev/game-AHLCG.settings new file mode 100644 index 0000000..f89b2dd --- /dev/null +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/resources/abbrev/game-AHLCG.settings @@ -0,0 +1,40 @@ +eld = effect: $||$ +onepa = (Limit once per action.) +maxpa = (Max once per action.) +onepg = (Limit once per game.) +maxpg = (Max once per game.) +onepi = Limit 1 per investigator. +maxpi = Max 1 per investigator. +onepp = (Limit once per phase.) +maxpp = (Max once per phase.) +onepr = (Limit once per round.) +maxpr = (Max once per round.) +onept = (Limit once per test.) +maxpt = (Max once per test.) +onept = (Limit once per turn.) +maxpt = (Max once per turn.) +ex = exhaust +Ex = Exhaust +guac = Guardian cards () +mysc = Mystic cards () +neuc = Neutral cards +rogc = Rogue cards () +seec = Seeker cards () +surc = Survivor cards () +rbw = 1 random basic weakness +lv0 = level 0. +lv1 = level 0-1. +lv2 = level 0-2. +lv3 = level 0-3. +lv4 = level 0-4. +lv5 = level 0-5. +tr = $||$ +threat = Put into play in your threat area. +symbol = , , , , or +pat = Patrol ($||$). +vs = \n +vic = Victory $|1|$. +tests = Test (3). If you succeed +testse = Test (3). For each point you succeed by +testf = Test (3). If you fail +testfe = Test (3). For each point you fail by diff --git a/ArkhamHorrorLCG/ArkhamHorrorLCG/seproject b/ArkhamHorrorLCG/ArkhamHorrorLCG/seproject index d3db980..6218ebd 100644 --- a/ArkhamHorrorLCG/ArkhamHorrorLCG/seproject +++ b/ArkhamHorrorLCG/ArkhamHorrorLCG/seproject @@ -1,7 +1,5 @@ -#WARNING: -#If this file is deleted then this folder will no -#longer appear to be a project/task in Strange Eons. -#Wed Jun 30 21:54:00 EDT 2021 -type=PLUGIN -bundle-file=ArkhamHorrorLCG.seext -clean-ext=class +# WARNING: If this file is deleted, Strange Eons will no longer +# see this as a project/task folder! +clean-ext = class +bundle-file = ArkhamHorrorLCG.seext +type = PLUGIN \ No newline at end of file diff --git a/ArkhamHorrorLCG/seproject b/ArkhamHorrorLCG/seproject index 5042bcd..f211544 100644 --- a/ArkhamHorrorLCG/seproject +++ b/ArkhamHorrorLCG/seproject @@ -1,10 +1,12 @@ -#WARNING: -#If this file is deleted then this folder will no -#longer appear to be a project/task in Strange Eons. -#Wed Jun 30 21:54:00 EDT 2021 -first-row=94 -open-folders=\:ArkhamHorrorLCG\:ArkhamHorrorLCG/resources\:ArkhamHorrorLCG/resources/ArkhamHorrorLCG\:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/diy\:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/fonts\:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/settings\:ArkhamHorrorLCG/resources/ArkhamHorrorLCG/text -res-id=tim -notes= -type=PROJECT -selected-members=\:ArkhamHorrorLCG.seext +# WARNING: If this file is deleted, Strange Eons will no longer +# see this as a project/task folder! +first-row = 94 +selected-members = rkhamHorrorLCG.seext +open-folders = \ + rkhamHorrorLCGrkhamHorrorLCG/resourcesrkhamHorrorLCG/resources/ArkhamHorrorLCGrkh\ + amHorrorLCG/resources/ArkhamHorrorLCG/diyrkhamHorrorLCG/resources/ArkhamHorrorLCG\ + /fontsrkhamHorrorLCG/resources/ArkhamHorrorLCG/settingsrkhamHorrorLCG/resources/A\ + rkhamHorrorLCG/text +notes = +res-id = tim +type = TASKGROUP \ No newline at end of file diff --git a/JsonExporter/JsonConverter.py b/JsonExporter/JsonConverter.py new file mode 100644 index 0000000..4244065 --- /dev/null +++ b/JsonExporter/JsonConverter.py @@ -0,0 +1,37 @@ +import json + +FILE_PATH = '/home/toke/Documents/Blood of Walachia/result_raw.json' + +def update_json(): + # Read the JSON file + with open(FILE_PATH, 'r') as file: + data = json.load(file) + + # Process each element in the list + for item in data: + # Create factions list from existing fields + factions = [] + for slot in ['CardClass', 'CardClass2', 'CardClass3']: + if slot in item: + faction = item.pop(slot) + if faction != 'None': + factions.append(faction) + + # Create icon list from existing fields + icons = [] + for slot in [f'Skill{n}' for n in range(1,7)]: + if slot in item: + icon = item.pop(slot) + if icon != 'None': + icons.append(icon) + + # Add factions list to item + item['factions'] = factions + item['icons'] = icons + + # Write updated data back to file + with open('result.json', 'x') as file: + json.dump(data, file, indent=4) + +# Run the update +update_json() diff --git a/JsonExporter/JsonExporter.js b/JsonExporter/JsonExporter.js new file mode 100644 index 0000000..6829d41 --- /dev/null +++ b/JsonExporter/JsonExporter.js @@ -0,0 +1,77 @@ +useLibrary("threads"); +importClass(java.io.File); +importClass(java.io.FileWriter); +importClass(java.nio.file.Files); +importClass(java.nio.file.Paths); +importClass(arkham.project.ProjectUtilities); +importClass(ca.cgjennings.apps.arkham.project.Project); + +const PROJECT_FOLDER = "/home/toke/Documents/Blood of Walachia/"; +const OUTPUT_FILE = "result_raw.json"; + +let headless = Eons.getScriptRunner() !== null; +let project = headless + ? Project.open(new File(PROJECT_FOLDER)) + : Eons.getOpenProject(); + +function process(progress) { + function syncProject() { + if (!headless) { + project.synchronizeAll(); + } + } + + function reportStatus(progress, status) { + if (headless) { + println(status); + } else { + progress.status = status; + } + } + + let cards = []; + Files.walk(Paths.get(PROJECT_FOLDER)).forEach((card) => { + if (card.toString().slice(-4) === ".eon") { + cards.push(card.toString()); + println(card); + } + }); + + let collection = []; + for (let path of cards) { + let card = ResourceKit.getGameComponentFromFile(new File(path), true); + let out = {}; + + println("processing " + path); + out["name"] = card.getFullName(); + out["comment"] = card.getComment(); + let keys = card.getSettings().getKeySet(); + for (let k of keys) { + out[k] = card.getSettings().get(k); + } + out["Portraits"] = []; + for ( + let portrait_index = 0; + portrait_index < card.getPortraitCount(); + portrait_index++ + ) { + out["Portraits"].push(card.getPortrait(portrait_index).getSource()); + } + out["DIYScript"] = card.getClassName(); + collection.push(out); + } + + let output_file = new File(PROJECT_FOLDER, OUTPUT_FILE); + output_file.createNewFile(); // returns true/false depending on if created or exists + let writer = new FileWriter(output_file); + writer.write(JSON.stringify(collection)); + writer.close(); + println("Done writing to " + String(output_file)); +} + +if (headless) { + process({ cancelled: false }); + project.close(); +} else { + Thread.busyWindow(process, "Building...", true); +} diff --git a/JsonExporter/KeepAlive.js b/JsonExporter/KeepAlive.js new file mode 100644 index 0000000..d7011a7 --- /dev/null +++ b/JsonExporter/KeepAlive.js @@ -0,0 +1 @@ +println("KeepAlive.js ran"); diff --git a/JsonExporter/main.py b/JsonExporter/main.py new file mode 100644 index 0000000..4122b83 --- /dev/null +++ b/JsonExporter/main.py @@ -0,0 +1,66 @@ +from zipfile import ZipFile +import os, shutil +import subprocess + +path_orig = '~/.StrangeEons3/plug-ins/ArkhamHorrorLCG.seext' +path_backup = '~/.StrangeEons3/plug-ins/ArkhamHorrorLCG.seext_bak' + +path_orig = os.path.expanduser(path_orig) +path_backup = os.path.expanduser(path_backup) + + +def create_plugin_file(): + with ZipFile('./test_bundle.seext', 'w') as zipf: + for root, dirs, files in os.walk('./ArkhamHorrorLCG/'): + for file in files: + file_path = os.path.join(root, file) + arcname = os.path.relpath(file_path, './ArkhamHorrorLCG/') + zipf.write(file_path, arcname) + + +def ensure_output_folder_exist(): + shutil.rmtree("./test_output") + os.makedirs("./test_output/cards") + if not os.path.exists("./test_output/seproject"): + open("./test_output/seproject", "x").close() + with open("./test_output/seproject", "w") as file: + file.write("type = PROJECT") + + +def install_plugin(): + if os.path.exists(path_orig): + os.replace(path_orig, path_backup) + os.replace('./test_bundle.seext', path_orig) + + +def restore_old_plugin(): + os.replace(path_backup, path_orig) + + +def run_script(): + command = [ + "/usr/lib/jvm/java-11-openjdk/bin/java", + "--illegal-access=permit", + "-javaagent:/home/toke/Downloads/strange-eons33.jar", + #"-javaagent:/home/toke/Downloads/strange-eons-b4421a/strange-eons.jar", + "-cp", + "/home/toke/Downloads/strange-eons-b4421a/strange-eons.jar", + "strangeeons", + "--run", + "./ArkhamHorrorLCG/resources/ArkhamHorrorLCG/scripts/headless.js", + ] + result = subprocess.run(command, capture_output=True, text=True) + print("--- stderr ---") + print(result.stderr) + print("--- stdout ---") + print(result.stdout) + + +if __name__ == '__main__': + create_plugin_file() + ensure_output_folder_exist() + install_plugin() + try: + run_script() + finally: + restore_old_plugin() diff --git a/README.md b/README.md new file mode 100644 index 0000000..0216f30 --- /dev/null +++ b/README.md @@ -0,0 +1,42 @@ +An Arkham Horror LCG plugin for Strange Eons. + +This is a fork of the original AHLCG plugin by Pilute23/JaqenZann + +# How to use +0. Download and install [Strange Eons](https://cgjennings.ca/eons/) by C.G.Jennings. +1. Download ArkhamHorrorLCG.seext (Strange Eons Extension file) found in ArkhamHorrorLCG/ArkhamHorrorLCG.seext +2. Drag the file into SE while open - that should install it. +3. Create new content for Arkham Horror LCG and share it with the community. Repeat ad infinitum. + +Note that the ArkhamHorrorLCG plugin found in the StrangeEons built-in plugin repository is outdated by this point. It works fine, it just doesn't have all the changes and fixes found here. + +# How to contribute +If you wish to make changes to the AHLCG plugin yourself, and potentially make a pull request, here's how to do it: + +1. Clone/download this repository +2. Add the `/ArkhamHorrorLCG/ArkhamHorrorLCG` (yes, the second subfolder of the same name) folder to a SE project. This will make it easier to build and test. (If you're on linux, you can symlink to this folder for easier access.) +3. Open the Plugin folder in SE, find the file you want to change, and make changes. +4. Right-click on the Plugin folder in SE, and click "test plugin". This will open up a test instance of SE with your new version installed. +5. Repeat steps 3-4 until you're satisfied. +6. Copy back the changes (if you symlinked the folders, skip this step). +7. Make sure to copy over the new .seext file as well +8. Make a pull request with your changes, and a solid description of what they fix. + +## What even is github? +This "step by step" guide is a bit superficial - this is because git and github usage is outside the scope of this guide. If you've made a change and what to contribute it, but don't know how, message me wherever you can find me. I'm @tokeeto on discord, message me directly, or in the #eons-development channel on the Mythosbusters discord server. (I prefer the latter, but you don't have to join a server just for that.) + +## What is java and javascript? +Programming in general is also outside the scope of this guide, but many this can be changed without knowing exactly why it works the way it does. + +Generally, cards are handled by a `diy/CardType.js` file, and a `settings/AHLCG-CardType.setting` file. In there, a lot of stuff, like location on card, text alignment, color, font type, are plainly readable and can be changed. More advanced stuff, like showing/hiding stuff under certain conditions, requires javascript knowledge. + +## What's a useful change? +I generally accept any quality improvements, or custom additions - like new slot icons, or card types - but please make sure to test that it works across different OS's. If you can't (most of us can't) make sure to note which OS you've been making your change for, so I can find someone to test it out elsewhere. There are minor rendering differences between OS's, so not all discrepancies are worth fixing (as it's simply a question of who's gonna get the short end of the stick). + +I will not accept the inclusion of Arno fonts, as we don't have distribution rights for those. + +I will, in most cases, not accept deviations from the official cards, simply because you think it looks better. Some people use this project to create errata cards, or "return to" style content, and need it to match. + +I will, as noted above, accept additional versions of cards, that deviate from the official products. + +And generally, try to ensure that your feature is "complete". If you add a new class, make sure that it's available for all applicable cards for instance. diff --git a/scripts/SE_Generator/seproject b/scripts/SE_Generator/seproject new file mode 100644 index 0000000..a1d329d --- /dev/null +++ b/scripts/SE_Generator/seproject @@ -0,0 +1,3 @@ +# WARNING: If this file is deleted, Strange Eons will no longer +# see this as a project/task folder! +type = PROJECT diff --git a/scripts/headless.js b/scripts/headless.js new file mode 100644 index 0000000..af4fc71 --- /dev/null +++ b/scripts/headless.js @@ -0,0 +1,111 @@ +useLibrary("threads"); +importClass(java.io.File); +importClass(java.util.UUID); +importClass(arkham.project.ProjectUtilities); +importClass(arkham.sheet.RenderTarget); +importClass(ca.cgjennings.apps.arkham.project.Project); +importClass(ca.cgjennings.apps.arkham.diy.DIY); +importClass(ca.cgjennings.imageio.SimpleImageWriter); +importClass(ca.cgjennings.seplugins.csv.CsvFactory); +importClass(gamedata.ClassMap); + +const PROJECT_FOLDER = "./test_output"; +const TEMPLATE_FOLDER = "template"; +const DATA_FOLDER = "."; +const CARD_FOLDER = "./test_output/cards"; +const IMAGE_FOLDER = "images"; + +let headless = Eons.getScriptRunner() !== null; +let project = headless + ? Project.open(new File(PROJECT_FOLDER)) + : Eons.getOpenProject(); + +// step 1: Find files +// step 2: read json files +let types = []; +//let data_file = new File("test_cards.json").read(); +//let data = JSON.parse(data_file); + +let cardFolder = new File(CARD_FOLDER); + +let factory = new CsvFactory(); +factory.setDelimiter(","); +factory.setQuote('"'); +factory.setExtraSpaceIgnored(false); +factory.setIgnoreUnknownKeys(false); +factory.setTemplateClearedForEachRow(false); +factory.setOutputFolder(cardFolder); + +// step 3: output to card images +function process(progress) { + function syncProject() { + if (!headless) { + project.synchronizeAll(); + } + } + + function reportStatus(progress, status) { + if (headless) { + println(status); + } else { + progress.status = status; + } + } + + let cardFolder = new File(project.getFile(), CARD_FOLDER); + cardFolder.mkdirs(); + syncProject(); + + let imageWriter = new SimpleImageWriter("png"); + var data = [ + { + title: "MonsterSlayer", + type: "Event", + cost: 4, + class: ["Seeker", "Guardian"], + icons: [0, 1, 1], + text: "This is a test card", + }, + ]; + + for (let card of data) { + diy = null; + if (card.type == "Event") { + let template = new DIY( + "res://ArkhamHorrorLCG/diy/Event.js", + "AHLCG", + false, + ); + println(template.getSettings().get("CardClass")); + println(template.getSettings().get("$ResourceCost")); + + let csvFile = new File("temp_csv_file.csv"); + reportStatus(progress, "Processing " + csvFile.getName() + "..."); + let csv = ProjectUtilities.getFileText(csvFile, "utf-8"); + + factory.process(template, csv); + syncProject(); + } + } + + for (var i = 1; i < data.length + 1; i++) { + let cardFile = new File(CARD_FOLDER + "/" + String(i) + ".eon"); + let card = ResourceKit.getGameComponentFromFile(cardFile, true); + let imageWriter = new SimpleImageWriter("png"); + let imageFile = new File(CARD_FOLDER + "/" + String(i) + ".png"); + + let sheets = card.createDefaultSheets(); + let sheet = sheets[0]; + reportStatus(progress, "Making image of " + cardFile.getName() + "..."); + let image = sheet.paint(RenderTarget.EXPORT, 300, false); + imageWriter.write(image, imageFile); + syncProject(); + } +} + +if (headless) { + process({ cancelled: false }); + project.close(); +} else { + Thread.busyWindow(process, "Building...", true); +} diff --git a/scripts/test.py b/scripts/test.py new file mode 100644 index 0000000..4122b83 --- /dev/null +++ b/scripts/test.py @@ -0,0 +1,66 @@ +from zipfile import ZipFile +import os, shutil +import subprocess + +path_orig = '~/.StrangeEons3/plug-ins/ArkhamHorrorLCG.seext' +path_backup = '~/.StrangeEons3/plug-ins/ArkhamHorrorLCG.seext_bak' + +path_orig = os.path.expanduser(path_orig) +path_backup = os.path.expanduser(path_backup) + + +def create_plugin_file(): + with ZipFile('./test_bundle.seext', 'w') as zipf: + for root, dirs, files in os.walk('./ArkhamHorrorLCG/'): + for file in files: + file_path = os.path.join(root, file) + arcname = os.path.relpath(file_path, './ArkhamHorrorLCG/') + zipf.write(file_path, arcname) + + +def ensure_output_folder_exist(): + shutil.rmtree("./test_output") + os.makedirs("./test_output/cards") + if not os.path.exists("./test_output/seproject"): + open("./test_output/seproject", "x").close() + with open("./test_output/seproject", "w") as file: + file.write("type = PROJECT") + + +def install_plugin(): + if os.path.exists(path_orig): + os.replace(path_orig, path_backup) + os.replace('./test_bundle.seext', path_orig) + + +def restore_old_plugin(): + os.replace(path_backup, path_orig) + + +def run_script(): + command = [ + "/usr/lib/jvm/java-11-openjdk/bin/java", + "--illegal-access=permit", + "-javaagent:/home/toke/Downloads/strange-eons33.jar", + #"-javaagent:/home/toke/Downloads/strange-eons-b4421a/strange-eons.jar", + "-cp", + "/home/toke/Downloads/strange-eons-b4421a/strange-eons.jar", + "strangeeons", + "--run", + "./ArkhamHorrorLCG/resources/ArkhamHorrorLCG/scripts/headless.js", + ] + result = subprocess.run(command, capture_output=True, text=True) + print("--- stderr ---") + print(result.stderr) + print("--- stdout ---") + print(result.stdout) + + +if __name__ == '__main__': + create_plugin_file() + ensure_output_folder_exist() + install_plugin() + try: + run_script() + finally: + restore_old_plugin() diff --git a/scripts/test_cards.json b/scripts/test_cards.json new file mode 100644 index 0000000..8483f5a --- /dev/null +++ b/scripts/test_cards.json @@ -0,0 +1,10 @@ +[ + { + "title": "MonsterSlayer", + "type": "Event", + "cost": 4, + "class": ["Seeker", "Guardian"], + "icons": [0, 1, 1], + "text": "This is a test card" + } +]