diff --git a/assets/ui/banner_compendium.png b/assets/ui/banner_compendium.png deleted file mode 100644 index 76c4b08..0000000 Binary files a/assets/ui/banner_compendium.png and /dev/null differ diff --git a/assets/ui/hellborn_background_01.webp b/assets/ui/hellborn_background_01.webp deleted file mode 100644 index 853c1d7..0000000 Binary files a/assets/ui/hellborn_background_01.webp and /dev/null differ diff --git a/assets/ui/hellborn_logo.webp b/assets/ui/hellborn_logo.webp deleted file mode 100644 index 44235b2..0000000 Binary files a/assets/ui/hellborn_logo.webp and /dev/null differ diff --git a/assets/ui/illu_alknonost_01.webp b/assets/ui/illu_alknonost_01.webp new file mode 100644 index 0000000..09a4232 Binary files /dev/null and b/assets/ui/illu_alknonost_01.webp differ diff --git a/assets/ui/pentagram_logo.webp b/assets/ui/pentagram_logo.webp deleted file mode 100644 index d5f2720..0000000 Binary files a/assets/ui/pentagram_logo.webp and /dev/null differ diff --git a/assets/ui/rose_des_vents_01.webp b/assets/ui/rose_des_vents_01.webp new file mode 100644 index 0000000..1b27db2 Binary files /dev/null and b/assets/ui/rose_des_vents_01.webp differ diff --git a/css/fvtt-hamalron.css b/css/fvtt-hamalron.css index 5d3e050..e511305 100644 --- a/css/fvtt-hamalron.css +++ b/css/fvtt-hamalron.css @@ -13,7 +13,7 @@ --font-primary: "TimesNewRoman"; --font-secondary: "TimesNewRoman"; --font-title: "EagleLake"; - --logo-standard: url("../assets/ui/pentagram_logo.webp"); + --logo-standard: url("../assets/ui/rose_des_vents_01.webp"); --title-color: #dea60b; --background-box: #e0dcdc; --color-success: #0f7a0f; @@ -2936,6 +2936,58 @@ i.fvtt-hamalron { color: #f39c12; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.2); } +.fvtt-hamalron.chat-tarot-summary { + background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf1 100%); + border: 2px solid #667eea; + border-radius: 0.5rem; + padding: 1rem; +} +.fvtt-hamalron.chat-tarot-summary .tarot-summary-title { + text-align: center; + color: #667eea; + font-size: 1.2rem; + margin: 0 0 1rem 0; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.05em; +} +.fvtt-hamalron.chat-tarot-summary .tarot-summary-title i { + margin-right: 0.5rem; +} +.fvtt-hamalron.chat-tarot-summary .tarot-cards-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0.5rem; +} +.fvtt-hamalron.chat-tarot-summary .tarot-cards-grid .tarot-card-summary-item { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + background: white; + border: 1px solid #ddd; + border-radius: 0.25rem; + padding: 0.35rem; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + transition: transform 0.2s, box-shadow 0.2s; +} +.fvtt-hamalron.chat-tarot-summary .tarot-cards-grid .tarot-card-summary-item:hover { + transform: translateY(-2px); + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.15); +} +.fvtt-hamalron.chat-tarot-summary .tarot-cards-grid .tarot-card-summary-item img { + width: 35px; + height: auto; + border-radius: 0.2rem; + margin-bottom: 0.3rem; + object-fit: contain; +} +.fvtt-hamalron.chat-tarot-summary .tarot-cards-grid .tarot-card-summary-item .card-name { + font-size: 0.65rem; + color: #333; + font-weight: 600; + line-height: 1.1; +} @keyframes pulse-banner { 0%, 100% { @@ -2952,7 +3004,9 @@ i.fvtt-hamalron { .application.dialog.fvtt-hamalron button { background-image: none; background-color: var(--color-dark-6); - color: var(--color-light-1); + color: #ffffff; + font-weight: 500; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } .application.dialog.fvtt-hamalron input, .application.dialog.fvtt-hamalron select { diff --git a/lang/fr.json b/lang/fr.json index 1fd6f29..bd99fd0 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -604,7 +604,7 @@ }, "Roll": { "cancel": "Annuler", - "roll": "Lancer", + "roll": "Lancer l'épreuve", "rollCompetence": "Jet de compétence", "skill": "Compétence" }, @@ -678,10 +678,10 @@ "CollectHandsConfirm": "Récupérer toutes les mains ?", "CollectHandsWarning": "Cela récupérera toutes les cartes de tarot de tous les personnages joueurs et les réintégrera dans le deck. Les doublons seront supprimés pour garantir un deck de 78 cartes.", "HandsCollected": "{collected} cartes récupérées. Deck réinitialisé avec {deckSize} cartes uniques.", - "DistributeCards": "Distribuer 8 cartes", - "DistributeConfirm": "Distribuer les cartes ?", - "DistributeWarning": "Cela distribuera 8 cartes du deck à chaque joueur connecté.", - "CardsDistributed": "{cards} cartes distribuées à {players} joueur(s).", + "DistributeCards": "Main de départ", + "DistributeConfirm": "Distribuer la main de départ ?", + "DistributeWarning": "Cela distribuera 8 cartes du deck à chaque joueur connecté (le Mat est exclu de la distribution initiale).", + "CardsDistributed": "{cards} cartes distribuées à {players} joueur(s). Le Mat a été remis dans le deck et le paquet a été remélangé.", "NotEnoughCards": "Pas assez de cartes dans le deck (minimum 8 requises).", "DeckEmpty": "Le jeu est vide", "DeckEmptyWarning": "Le jeu est vide. Veuillez réinitialiser le jeu pour continuer.", @@ -692,6 +692,16 @@ "DrawOne": "Tirer 1 carte", "DrawTension": "Tirage sous tension", "DrawThree": "Tirer 3 cartes", + "DrawThreeTrumps": "Tirer 3 atouts", + "DrawEightNumbered": "Tirer 8 cartes numérotées", + "DrawOneTrump": "Tirer 1 atout", + "EightNumberedCardsDrawn": "8 Cartes Numérotées Tirées", + "ThreeTrumpsDrawn": "3 atouts tirés et remélangés dans le deck", + "EightNumberedDrawn": "8 cartes numérotées tirées et remélangées dans le deck", + "OneTrumpDrawn": "1 atout tiré et remélangé dans le deck", + "NotEnoughTrumps": "Pas assez d'atouts dans le deck (minimum 3 requis)", + "NotEnoughNumbered": "Pas assez de cartes numérotées dans le deck (minimum 8 requises)", + "NoTrumpsAvailable": "Aucun atout disponible dans le deck", "GMOnly": "Seul le MJ peut accéder au gestionnaire de jeu de tarot", "NoCardsFound": "Aucune carte de tarot trouvée dans le monde. Veuillez d'abord créer des objets tarot.", "NoDiscard": "La défausse est vide", diff --git a/module/applications/tarot-deck-manager.mjs b/module/applications/tarot-deck-manager.mjs index d22c846..9c8fd39 100644 --- a/module/applications/tarot-deck-manager.mjs +++ b/module/applications/tarot-deck-manager.mjs @@ -30,6 +30,9 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin collectHands: HamalronTarotDeckManager.#onCollectHands, distributeCards: HamalronTarotDeckManager.#onDistributeCards, drawTension: HamalronTarotDeckManager.#onDrawTension, + drawThreeTrumps: HamalronTarotDeckManager.#onDrawThreeTrumps, + drawEightNumbered: HamalronTarotDeckManager.#onDrawEightNumbered, + drawOneTrump: HamalronTarotDeckManager.#onDrawOneTrump, }, } @@ -316,7 +319,8 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin } /** - * Distribute 8 cards to all connected players + * Distribute 8 cards to all connected players (starting hand) + * Excludes the Mat from distribution, then returns it to the deck and reshuffles * @param {Event} event * @param {HTMLElement} target */ @@ -337,6 +341,7 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin let distributedCount = 0 let playersCount = 0 + let matCard = null // Récupérer tous les utilisateurs connectés (sauf le GM) const connectedPlayers = game.users.filter(u => u.active && !u.isGM) @@ -349,10 +354,22 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin ) if (playerCharacter) { - // Tirer 8 cartes pour ce personnage + // Tirer 8 cartes pour ce personnage (en ignorant le Mat) const cardsToDistribute = [] - for (let i = 0; i < 8 && this.deck.length > 0; i++) { + let attempts = 0 + const maxAttempts = this.deck.length + 10 // Safety limit + + while (cardsToDistribute.length < 8 && this.deck.length > 0 && attempts < maxAttempts) { const card = this.deck.shift() + attempts++ + + // Si c'est le Mat, le mettre de côté + if (card.valeur === "lemat") { + matCard = card + console.log("Le Mat trouvé et mis de côté pour être remis dans le deck après distribution") + continue + } + cardsToDistribute.push(card) } @@ -362,14 +379,6 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin if (originalItem) { await playerCharacter.createEmbeddedDocuments("Item", [originalItem.toObject()]) distributedCount++ - - // Cas spécial : Le Mat - if (card.valeur === "lemat") { - console.log(`Le Mat distributed to ${playerCharacter.name}! Executing special rules...`) - // Import de TirageTarot pour accéder à la fonction helper - const { default: HamalronTirageTarot } = await import("../documents/tirage-tarot.mjs") - await HamalronTirageTarot.handleLeMatEffect(playerCharacter, this) - } } } @@ -377,6 +386,16 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin } } + // Remettre le Mat dans le deck si il a été trouvé + if (matCard) { + this.deck.push(matCard) + console.log("Le Mat a été remis dans le deck") + } + + // Remélanger le deck restant + this.shuffleDeck() + console.log("Le deck restant a été remélangé") + this.saveDeckState() ui.notifications.info( @@ -389,6 +408,105 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin this.render() } + /** + * Draw 3 trumps (atouts only) + * Cards are returned to deck and reshuffled after draw + * @param {Event} event + * @param {HTMLElement} target + */ + static async #onDrawThreeTrumps(event, target) { + const trumpCards = this.deck.filter(card => card.type === "atout") + + if (trumpCards.length < 3) { + ui.notifications.warn(game.i18n.localize("HAMALRON.TarotDeck.NotEnoughTrumps")) + return + } + + // Tirer 3 atouts au hasard + const drawnCards = [] + const availableTrumps = [...trumpCards] + + for (let i = 0; i < 3; i++) { + const randomIndex = Math.floor(Math.random() * availableTrumps.length) + const card = availableTrumps.splice(randomIndex, 1)[0] + drawnCards.push(card) + } + + // Envoyer au chat + await this.sendCardsToChat(drawnCards) + + // Remélanger le deck (les cartes restent dedans) + this.shuffleDeck() + this.saveDeckState() + this.render() + + ui.notifications.info(game.i18n.localize("HAMALRON.TarotDeck.ThreeTrumpsDrawn")) + } + + /** + * Draw 8 numbered cards (cards 1-10 from the 4 symbols) + * Cards are returned to deck and reshuffled after draw + * @param {Event} event + * @param {HTMLElement} target + */ + static async #onDrawEightNumbered(event, target) { + const numberedCards = this.deck.filter(card => card.type === "numéro") + + if (numberedCards.length < 8) { + ui.notifications.warn(game.i18n.localize("HAMALRON.TarotDeck.NotEnoughNumbered")) + return + } + + // Tirer 8 cartes numérotées au hasard + const drawnCards = [] + const availableNumbered = [...numberedCards] + + for (let i = 0; i < 8; i++) { + const randomIndex = Math.floor(Math.random() * availableNumbered.length) + const card = availableNumbered.splice(randomIndex, 1)[0] + drawnCards.push(card) + } + + // Envoyer un résumé au chat + await this.sendNumberedCardsSummaryToChat(drawnCards) + + // Remélanger le deck (les cartes restent dedans) + this.shuffleDeck() + this.saveDeckState() + this.render() + + ui.notifications.info(game.i18n.localize("HAMALRON.TarotDeck.EightNumberedDrawn")) + } + + /** + * Draw 1 trump (atout only) + * Card is returned to deck and reshuffled after draw + * @param {Event} event + * @param {HTMLElement} target + */ + static async #onDrawOneTrump(event, target) { + const trumpCards = this.deck.filter(card => card.type === "atout") + + if (trumpCards.length === 0) { + ui.notifications.warn(game.i18n.localize("HAMALRON.TarotDeck.NoTrumpsAvailable")) + return + } + + // Tirer 1 atout au hasard + const randomIndex = Math.floor(Math.random() * trumpCards.length) + const card = trumpCards[randomIndex] + + // Envoyer au chat + await this.sendCardsToChat([card]) + + // Remélanger le deck (la carte reste dedans) + this.shuffleDeck() + this.saveDeckState() + this.render() + + ui.notifications.info(game.i18n.localize("HAMALRON.TarotDeck.OneTrumpDrawn")) + } + /** * Shuffle discard pile back into deck * @param {Event} event @@ -437,7 +555,7 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin const content = `
- + @@ -524,6 +642,44 @@ export default class HamalronTarotDeckManager extends HandlebarsApplicationMixin }) } + /** + * Send numbered cards summary to chat + * @param {Array} cards - Array of numbered cards + */ + async sendNumberedCardsSummaryToChat(cards) { + const speaker = ChatMessage.getSpeaker({ alias: "Maître du Jeu" }) + + // Créer la liste des cartes + const cardsList = cards.map(card => { + const symboleLabel = game.i18n.localize(`HAMALRON.Tarot.FIELDS.symbole.${card.symbole}`) + const valeurLabel = game.i18n.localize(`HAMALRON.Tarot.FIELDS.valeur.${card.valeur}`) + return ` +
+ ${card.name} + ${valeurLabel} de ${symboleLabel} +
+ ` + }).join('') + + const content = ` +
+

+ + ${game.i18n.localize("HAMALRON.TarotDeck.EightNumberedCardsDrawn")} +

+
+ ${cardsList} +
+
+ ` + + await ChatMessage.create({ + speaker: speaker, + content: content, + type: CONST.CHAT_MESSAGE_TYPES.OTHER, + }) + } + /** * Open the Tarot Deck Manager application * @returns {HamalronTarotDeckManager} diff --git a/module/documents/tirage-tarot.mjs b/module/documents/tirage-tarot.mjs index e419a00..8cc79b2 100644 --- a/module/documents/tirage-tarot.mjs +++ b/module/documents/tirage-tarot.mjs @@ -76,12 +76,16 @@ export default class HamalronTirageTarot { // Marquer les cartes de succès if (options.tarotCards && actor.system.cartesSucces) { + const competenceSymbole = options.rollItem.system.carteSymbole options.tarotCards = options.tarotCards.map(card => { - const isSuccessCard = card.system.type !== "atout" && Object.keys(actor.system.cartesSucces).some(symbole => { - const successCardData = actor.system.cartesSucces[symbole] - return card.system.symbole === symbole && - card.system.valeur === successCardData.value.toString() - }) + // Pour qu'une carte soit une carte de succès : + // 1. Elle ne doit pas être un atout + // 2. Son symbole doit correspondre à celui de la compétence + // 3. Sa valeur doit correspondre à celle d'une carte de succès pour ce symbole + const isSuccessCard = card.system.type !== "atout" && + card.system.symbole === competenceSymbole && + actor.system.cartesSucces[competenceSymbole] && + card.system.valeur === actor.system.cartesSucces[competenceSymbole].value.toString() // Créer un objet simple avec toutes les propriétés nécessaires return { id: card.id, @@ -339,12 +343,15 @@ export default class HamalronTirageTarot { cardSymboleMatch = selectedCard.system.symbole === options.rollItem.system.carteSymbole // Vérifier si c'est une carte de succès (les atouts ne peuvent jamais être des cartes de succès) + // Pour qu'une carte soit une carte de succès : + // 1. Elle ne doit pas être un atout + // 2. Son symbole doit correspondre à celui de la compétence + // 3. Sa valeur doit correspondre à celle d'une carte de succès pour ce symbole if (actor.system.cartesSucces && selectedCard.system.type !== "atout") { - isAutomaticSuccess = Object.keys(actor.system.cartesSucces).some(symbole => { - const successCardData = actor.system.cartesSucces[symbole] - return selectedCard.system.symbole === symbole && - selectedCard.system.valeur === successCardData.value.toString() - }) + const competenceSymbole = options.rollItem.system.carteSymbole + isAutomaticSuccess = selectedCard.system.symbole === competenceSymbole && + actor.system.cartesSucces[competenceSymbole] && + selectedCard.system.valeur === actor.system.cartesSucces[competenceSymbole].value.toString() } } } diff --git a/module/models/personnage.mjs b/module/models/personnage.mjs index 33a6a83..9e70596 100644 --- a/module/models/personnage.mjs +++ b/module/models/personnage.mjs @@ -44,6 +44,7 @@ export default class HamalronPersonnage extends foundry.abstract.TypeDataModel { hair: new fields.StringField({ required: true, nullable: false, initial: "" }), home: new fields.StringField({ required: true, nullable: false, initial: "" }), weight: new fields.StringField({ required: true, nullable: false, initial: "" }), + origineSociale: new fields.StringField({ required: true, nullable: false, initial: "" }), }) return schema diff --git a/packs-system/hamalron-items/CURRENT b/packs-system/hamalron-items/CURRENT index 32108be..ecb0b4b 100644 --- a/packs-system/hamalron-items/CURRENT +++ b/packs-system/hamalron-items/CURRENT @@ -1 +1 @@ -MANIFEST-000016 +MANIFEST-000036 diff --git a/packs-system/hamalron-items/LOG b/packs-system/hamalron-items/LOG index 68621cc..3029c78 100644 --- a/packs-system/hamalron-items/LOG +++ b/packs-system/hamalron-items/LOG @@ -1,7 +1,7 @@ -2026/01/02-10:10:10.253712 7f93ebfff6c0 Recovering log #15 -2026/01/02-10:10:10.307712 7f93ebfff6c0 Delete type=0 #15 -2026/01/02-10:10:10.307764 7f93ebfff6c0 Delete type=3 #14 -2026/01/02-20:13:00.317288 7f93e9ffb6c0 Level-0 table #19: started -2026/01/02-20:13:00.317383 7f93e9ffb6c0 Level-0 table #19: 0 bytes OK -2026/01/02-20:13:00.324182 7f93e9ffb6c0 Delete type=0 #17 -2026/01/02-20:13:00.343771 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) +2026/04/23-21:08:40.433784 7f9ca63fd6c0 Recovering log #34 +2026/04/23-21:08:40.485675 7f9ca63fd6c0 Delete type=3 #32 +2026/04/23-21:08:40.485751 7f9ca63fd6c0 Delete type=0 #34 +2026/04/24-08:02:08.256846 7f9ca53fb6c0 Level-0 table #39: started +2026/04/24-08:02:08.256902 7f9ca53fb6c0 Level-0 table #39: 0 bytes OK +2026/04/24-08:02:08.263739 7f9ca53fb6c0 Delete type=0 #37 +2026/04/24-08:02:08.263920 7f9ca53fb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) diff --git a/packs-system/hamalron-items/LOG.old b/packs-system/hamalron-items/LOG.old index 9e33e46..5937ba5 100644 --- a/packs-system/hamalron-items/LOG.old +++ b/packs-system/hamalron-items/LOG.old @@ -1,3 +1,7 @@ -2025/12/28-22:58:25.963740 7f4a83fff6c0 Recovering log #12 -2025/12/28-22:58:25.975413 7f4a83fff6c0 Delete type=3 #10 -2025/12/28-22:58:25.975552 7f4a83fff6c0 Delete type=0 #12 +2026/01/05-22:50:34.529979 7f93eaffd6c0 Recovering log #30 +2026/01/05-22:50:34.539962 7f93eaffd6c0 Delete type=3 #28 +2026/01/05-22:50:34.540010 7f93eaffd6c0 Delete type=0 #30 +2026/01/05-22:53:30.707035 7f93e9ffb6c0 Level-0 table #35: started +2026/01/05-22:53:30.707107 7f93e9ffb6c0 Level-0 table #35: 0 bytes OK +2026/01/05-22:53:30.713792 7f93e9ffb6c0 Delete type=0 #33 +2026/01/05-22:53:30.735909 7f93e9ffb6c0 Manual compaction at level-0 from 'undefined' @ 72057594037927935 : 1 .. 'undefined' @ 0 : 0; will stop at (end) diff --git a/packs-system/hamalron-items/MANIFEST-000016 b/packs-system/hamalron-items/MANIFEST-000016 deleted file mode 100644 index 5fc379e..0000000 Binary files a/packs-system/hamalron-items/MANIFEST-000016 and /dev/null differ diff --git a/packs-system/hamalron-items/MANIFEST-000036 b/packs-system/hamalron-items/MANIFEST-000036 new file mode 100644 index 0000000..6ad80af Binary files /dev/null and b/packs-system/hamalron-items/MANIFEST-000036 differ diff --git a/styles/chat.less b/styles/chat.less index e7aca5b..d330749 100644 --- a/styles/chat.less +++ b/styles/chat.less @@ -713,6 +713,69 @@ } } } + + // Style pour le résumé des cartes numérotées + &.chat-tarot-summary { + background: linear-gradient(135deg, #f5f7fa 0%, #e8ecf1 100%); + border: 2px solid #667eea; + border-radius: 0.5rem; + padding: 1rem; + + .tarot-summary-title { + text-align: center; + color: #667eea; + font-size: 1.2rem; + margin: 0 0 1rem 0; + font-weight: bold; + text-transform: uppercase; + letter-spacing: 0.05em; + + i { + margin-right: 0.5rem; + } + } + + .tarot-cards-grid { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 0.5rem; + + .tarot-card-summary-item { + display: flex; + flex-direction: column; + align-items: center; + text-align: center; + background: white; + border: 1px solid #ddd; + border-radius: 0.25rem; + padding: 0.35rem; + box-shadow: 0 1px 3px rgba(0, 0, 0, 0.1); + transition: + transform 0.2s, + box-shadow 0.2s; + + &:hover { + transform: translateY(-2px); + box-shadow: 0 3px 6px rgba(0, 0, 0, 0.15); + } + + img { + width: 35px; + height: auto; + border-radius: 0.2rem; + margin-bottom: 0.3rem; + object-fit: contain; + } + + .card-name { + font-size: 0.65rem; + color: #333; + font-weight: 600; + line-height: 1.1; + } + } + } + } } @keyframes pulse-banner { diff --git a/styles/global.less b/styles/global.less index 873e342..35e11ff 100644 --- a/styles/global.less +++ b/styles/global.less @@ -5,7 +5,7 @@ --font-primary: "TimesNewRoman"; --font-secondary: "TimesNewRoman"; --font-title: "EagleLake"; - --logo-standard: url("../assets/ui/pentagram_logo.webp"); + --logo-standard: url("../assets/ui/rose_des_vents_01.webp"); --title-color: #dea60b; --background-box: #e0dcdc; --color-success: rgb(15, 122, 15); diff --git a/styles/roll.less b/styles/roll.less index 3d21bdc..a684586 100644 --- a/styles/roll.less +++ b/styles/roll.less @@ -5,7 +5,9 @@ button { background-image: none; background-color: var(--color-dark-6); - color: var(--color-light-1); + color: #ffffff; + font-weight: 500; + text-shadow: 0 1px 2px rgba(0, 0, 0, 0.3); } input, diff --git a/system.json b/system.json index 8fedf76..7f00e3e 100644 --- a/system.json +++ b/system.json @@ -6,7 +6,7 @@ "download": "#{DOWNLOAD}#", "url": "https://www.uberwald.me/gitea/public/fvtt-hamalron", "license": "LICENSE", - "version": "13.0.0", + "version": "14.0.0", "authors": [ { "name": "Uberwald", @@ -20,7 +20,7 @@ } }, "compatibility": { "minimum": "13", - "verified": "13" + "verified": "14" }, "esmodules": ["fvtt-hamalron.mjs"], "styles": ["css/fvtt-hamalron.css"], @@ -65,5 +65,5 @@ }, "primaryTokenAttribute": "hp", "socket": true, - "background": "systems/fvtt-hamalron/assets/ui/hamalron_background_01.webp" + "background": "systems/fvtt-hamalron/assets/ui/illu_alknonost_01.webp" } diff --git a/templates/personnage-biographie.hbs b/templates/personnage-biographie.hbs index 563281c..d0bc402 100644 --- a/templates/personnage-biographie.hbs +++ b/templates/personnage-biographie.hbs @@ -68,6 +68,12 @@ rootId=partId disabled=isPlayMode }} + {{formField + systemFields.biodata.fields.origineSociale + value=system.biodata.origineSociale + rootId=partId + disabled=isPlayMode + }}
@@ -82,142 +88,6 @@ }} -
- {{localize "HAMALRON.Label.backstory"}} - {{formInput - systemFields.backstory - enriched=enrichedBackstory - value=system.backstory - name="system.backstory" - toggled=true - }} -
- -
-
- {{localize "HAMALRON.Label.appearance"}} - {{formInput - systemFields.appearance - enriched=enrichedAppearance - value=system.appearance - name="system.appearance" - toggled=true - }} -
-
- {{localize "HAMALRON.Label.scars"}} - {{formInput - systemFields.scars - enriched=scars - value=system.scars - name="system.scars" - toggled=true - }} -
-
- -
-
- {{localize "HAMALRON.Label.likes"}} - {{formInput - systemFields.likes - enriched=enrichedLikes - value=system.likes - name="system.likes" - toggled=true - }} -
-
- {{localize "HAMALRON.Label.dislikes"}} - {{formInput - systemFields.dislikes - enriched=enrichedDislikes - value=system.dislikes - name="system.dislikes" - toggled=true - }} -
-
- -
-
- {{localize "HAMALRON.Label.fears"}} - {{formInput - systemFields.fears - enriched=enrichedFears - value=system.fears - name="system.fears" - toggled=true - }} -
-
- {{localize "HAMALRON.Label.vices"}} - {{formInput - systemFields.vices - enriched=enrichedVices - value=system.vices - name="system.vices" - toggled=true - }} -
-
- -
-
- {{localize "HAMALRON.Label.goals"}} - {{formInput - systemFields.goals - enriched=enrichedGoals - value=system.goals - name="system.goals" - toggled=true - }} -
-
- {{localize "HAMALRON.Label.ambitions"}} - {{formInput - systemFields.ambitions - enriched=enrichedAmbitions - value=system.ambitions - name="system.ambitions" - toggled=true - }} -
-
- -
-
- {{localize "HAMALRON.Label.values"}} - {{formInput - systemFields.values - enriched=enrichedValues - value=system.values - name="system.values" - toggled=true - }} -
-
- {{localize "HAMALRON.Label.bonds"}} - {{formInput - systemFields.bonds - enriched=enrichedBonds - value=system.bonds - name="system.bonds" - toggled=true - }} -
-
- -
- {{localize "HAMALRON.Label.notes"}} - {{formInput - systemFields.notes - enriched=enrichedNotes - value=system.notes - name="system.notes" - toggled=true - }} -
\ No newline at end of file diff --git a/templates/tarot-deck-manager.hbs b/templates/tarot-deck-manager.hbs index 2fe837b..0f3ecd5 100644 --- a/templates/tarot-deck-manager.hbs +++ b/templates/tarot-deck-manager.hbs @@ -50,6 +50,21 @@ {{localize "HAMALRON.TarotDeck.DrawTension"}} + + + + + + {{#unless hasCards}}