diff --git a/css/les-oublies.css b/css/les-oublies.css
index 8df000f..c0a5a6c 100644
--- a/css/les-oublies.css
+++ b/css/les-oublies.css
@@ -233,6 +233,9 @@
.fvtt-les-oublies .sheet-grid-2 {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
+.fvtt-les-oublies .sheet-grid-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+}
.fvtt-les-oublies .sheet-card {
background: linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)), linear-gradient(135deg, rgba(255, 255, 255, 0.24), transparent);
border: 1px solid rgba(133, 99, 74, 0.5);
@@ -362,6 +365,46 @@
.fvtt-les-oublies .group-block + .group-block {
margin-top: var(--lo-space-lg);
}
+.fvtt-les-oublies .reserve-card .reserve-grid {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: var(--lo-space-sm);
+ margin-bottom: var(--lo-space-sm);
+}
+.fvtt-les-oublies .reserve-panel {
+ min-width: 0;
+ padding: 0.55rem 0.65rem;
+ border-radius: var(--lo-radius-lg);
+ background: linear-gradient(180deg, rgba(255, 250, 243, 0.7), rgba(230, 214, 185, 0.6));
+ border: 1px solid rgba(130, 98, 71, 0.2);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
+}
+.fvtt-les-oublies .reserve-panel h3 {
+ margin-bottom: 0.45rem;
+}
+.fvtt-les-oublies .transfer-list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.35rem;
+ margin-top: 0.45rem;
+}
+.fvtt-les-oublies .transfer-row {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto auto;
+ gap: 0.4rem;
+ align-items: center;
+}
+.fvtt-les-oublies .transfer-row strong {
+ min-width: 0;
+ font-size: var(--lo-font-body);
+}
+.fvtt-les-oublies .transfer-row input[type="number"] {
+ width: 3.6rem;
+ min-width: 3.6rem;
+}
+.fvtt-les-oublies .transfer-row .item-controls {
+ justify-content: flex-end;
+}
.fvtt-les-oublies .group-header {
display: flex;
align-items: center;
@@ -723,8 +766,10 @@
}
@media (max-width: 900px) {
.fvtt-les-oublies .sheet-grid-2,
+ .fvtt-les-oublies .sheet-grid-3,
.fvtt-les-oublies .profile-grid,
- .fvtt-les-oublies .creation-slots {
+ .fvtt-les-oublies .creation-slots,
+ .fvtt-les-oublies .reserve-card .reserve-grid {
grid-template-columns: 1fr;
}
.fvtt-les-oublies .hero-banner {
diff --git a/css/les-oublies.css.map b/css/les-oublies.css.map
index a6ae705..cb81cd6 100644
--- a/css/les-oublies.css.map
+++ b/css/les-oublies.css.map
@@ -1 +1 @@
-{"version":3,"sources":["../https:/fonts.googleapis.com/css2?family=Cinzel:wght@400;600;700&family=Cormorant+Garamond:wght@400;500;600;700&family=IM+Fell+English+SC&display=swap","../components/sheets.less"],"names":[],"mappings":"AAAA;EACE,aAAa,QAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,yFAAyF,OAAO,WAAhG;;AAEF;EACE,aAAa,QAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,yFAAyF,OAAO,WAAhG;;AAEF;EACE,aAAa,QAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,yFAAyF,OAAO,WAAhG;;AAEF;EACE,aAAa,oBAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oHAAoH,OAAO,WAA3H;;AAEF;EACE,aAAa,oBAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oHAAoH,OAAO,WAA3H;;AAEF;EACE,aAAa,oBAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oHAAoH,OAAO,WAA3H;;AAEF;EACE,aAAa,oBAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,oHAAoH,OAAO,WAA3H;;AAEF;EACE,aAAa,oBAAb;EACA,kBAAA;EACA,gBAAA;EACA,kBAAA;EACA,iGAAiG,OAAO,WAAxG;;ACpDF,iBAAiB;AACjB,iBAAiB,MAAO;EACtB,qBAAA;EACA,qBAAA;EACA,sBAAA;EACA,qCAAA;EACA,2CAAA;EACA,0CAAA;EACA,iBAAA;EACA,sBAAA;EACA,kBAAA;EACA,oBAAA;EACA,mBAAA;EACA,gCAAA;EACA,iCAAA;EACA,oCAAA;EACA,uBAAA;EACA,qBAAA;EACA,sBAAA;EACA,sBAAA;EACA,qBAAA;EACA,mBAAA;EACA,oBAAA;EACA,oBAAA;EACA,oBAAA;EACA,oBAAA;EACA,uBAAA;EACA,uBAAA;EACA,wBAAA;EACA,yBAAA;EACA,4BAAA;EACA,0BAAA;;AAGF,iBAAiB;EACf,OAAO,aAAP;EACA,aAAa,oCAAb;EACA,YACE,gFACA,gFACA,uEAHF;;AAMF,iBAAiB,MAAO;EACtB,YACE,yEACA,8EAFF;EAGA,OAAO,aAAP;EACA,kBAAA;EACA,gBAAA;;AAGF;EACE,OAAO,aAAP;;AADF,iBAGE;EACE,SAAS,kBAAT;EACA,kBAAA;;AALJ,iBAQE,mBAAkB;EAChB,SAAS,EAAT;EACA,kBAAA;EACA,eAAA;EACA,2CAAA;EACA,mBAAA;EACA,oBAAA;EACA,+EAAA;;AAfJ,iBAkBE;EACE,aAAA;EACA,+BAAA;EACA,KAAK,kBAAL;EACA,oBAAA;EACA,eAAe,kBAAf;EACA,+BAAA;EACA,eAAe,mBAAf;EACA,YACE,+EACA,2EAFF;EAGA,0CAAA;EACA,wBACc,iGADd;EAIA,kBAAA;EACA,gBAAA;;AAnCJ,iBAsCE,aAAY;EACV,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,YACE,6EACA,4EAFF;EAGA,0BAAA;EACA,oBAAA;;AA9CJ,iBAiDE;EACE,WAAA;EACA,aAAA;EACA,iBAAA;EACA,uCAAA;EACA,eAAe,mBAAf;EACA,YAAY,yCAAZ;EACA,kFAAA;EAGA,kBAAA;EACA,UAAA;;AA5DJ,iBA+DE;AA/DF,iBAgEE;EACE,OAAA;EACA,kBAAA;EACA,UAAA;EACA,qBAAA;;AApEJ,iBAuEE;EACE,mBAAA;EACA,OAAO,eAAP;EACA,aAAa,eAAb;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;;AA7EJ,iBAgFE;EACE,SAAA;EACA,cAAA;;AAlFJ,iBAqFE,aAAa;AArFf,iBAsFE,eAAe,GAAG;EAChB,aAAa,sBAAsB,eAAnC;EACA,WAAW,8BAAX;EACA,sBAAA;EACA,cAAA;EACA,uBAAA;EACA,YAAA;EACA,gBAAA;EACA,UAAA;EACA,YAAA;;AA/FJ,iBAkGE;EACE,QAAQ,sBAAR;EACA,OAAO,kBAAP;EACA,WAAW,mBAAX;EACA,kBAAA;;AAtGJ,iBAyGE;EACE,aAAA;EACA,KAAK,kBAAL;EACA,eAAe,kBAAf;;AA5GJ,iBA+GE;EACE,aAAA;EACA,eAAA;EACA,uBAAA;EACA,KAAK,kBAAL;EACA,YAAY,kBAAZ;;AApHJ,iBAuHE;EACE,oBAAA;EACA,mBAAA;EACA,KAAK,kBAAL;EACA,kBAAA;EACA,uBAAA;EACA,oBAAA;EACA,2CAAA;EACA,oCAAA;EACA,cAAA;EACA,aAAa,eAAb;EACA,WAAW,qBAAX;EACA,sBAAA;EACA,yBAAA;EACA,gFAAA;;AArIJ,iBAwIE,kBAAiB;AAxInB,iBAyIE,kBAAiB;EACf,oCAAA;EACA,sCAAA;EACA,WAAW,gBAAX;;AA5IJ,iBA+IE,kBAAiB;EACf,YAAY,6EAAZ;EACA,cAAA;EACA,uCAAA;EACA,0CAAA;;AAnJJ,iBAsJE;EACE,aAAA;;AAvJJ,iBA0JE,WAAU;EACR,cAAA;;AA3JJ,iBA8JE;EACE,uBAAuB,UAAU,eAAjC;;AA/JJ,iBAkKE;EACE,YACE,wBAAwB,iBAAiB,wBACzC,+DAFF;EAGA,wCAAA;EACA,eAAe,mBAAf;EACA,gCAAA;EACA,eAAe,kBAAf;EACA,8HAAA;EAIA,kBAAA;EACA,gBAAA;;AA/KJ,iBAkLE,YAAW;EACT,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,YACE,qEACA,4EAFF;EAGA,oBAAA;;AAzLJ,iBA4LE,YAAY;AA5Ld,iBA6LE,YAAY;EACV,aAAa,eAAb;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAjMJ,iBAoME,YAAY;EACV,YAAY,kBAAZ;EACA,gBAAgB,kBAAhB;EACA,gDAAA;EACA,kBAAA;;AAxMJ,iBA2ME,YAAY;EACV,YAAY,kBAAZ;EACA,kBAAA;;AA7MJ,iBAgNE;EACE,YACE,+EACA,mEAFF;;AAjNJ,iBAsNE;EACE,YACE,6EADF;;AAvNJ,iBA2NE;EACE,YACE,6EADF;;AA5NJ,iBAgOE;EACE,YACE,6EADF;;AAjOJ,iBAqOE;EACE,gCAAA;;AAtOJ,iBAyOE,wBAAwB;EACtB,qBAAA;EACA,sBAAA;EACA,kBAAA;;AA5OJ,iBA+OE,wBAAwB;EACtB,wBAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,oBAAA;;AAlPJ,iBAqPE,wBAAwB;EACtB,WAAA;EACA,gBAAA;EACA,YAAA;;AAxPJ,iBA2PE,wBAAwB,WAAW;EACjC,kBAAA;EACA,kBAAA;EACA,sBAAA;;AA9PJ,iBAiQE,wBAAwB,WAAW,MAAK;EACtC,gBAAA;EACA,aAAA;EACA,iBAAA;;AApQJ,iBAuQE,wBAAwB,WAAW,MAAK;EACtC,YAAA;;AAxQJ,iBA2QE,wBAAwB,WAAW,MAAK;EACtC,SAAA;;AA5QJ,iBA+QE;AA/QF,iBAgRE;AAhRF,iBAiRE;AAjRF,iBAkRE;EACE,aAAA;EACA,KAAK,kBAAL;EACA,mBAAA;EACA,8BAAA;EACA,eAAA;;AAvRJ,iBA0RE;AA1RF,iBA2RE;EACE,aAAA;EACA,mBAAA;EACA,KAAK,kBAAL;EACA,eAAe,kBAAf;;AA/RJ,iBAkSE,WAAW;AAlSb,iBAmSE,cAAc;EACZ,gBAAA;EACA,aAAa,eAAb;EACA,WAAW,oBAAX;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AA1SJ,iBA6SE,WAAW;EACT,aAAa,eAAb;EACA,WAAW,mBAAX;EACA,OAAO,eAAP;;AAhTJ,iBAmTE;EACE,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,KAAK,mBAAmB,kBAAxB;;AAtTJ,iBAyTE;EACE,wBAAA;EACA,eAAe,mBAAf;EACA,YAAY,2EAAZ;EACA,wCAAA;EACA,kDAAA;EACA,8BAAA;EACA,eAAA;;AAhUJ,iBAmUE,aAAa;EACX,YAAY,kBAAZ;;AApUJ,iBAuUE;EACE,aAAA;EACA,mBAAA;EACA,8BAAA;EACA,KAAK,kBAAL;EACA,eAAe,kBAAf;EACA,eAAA;;AA7UJ,iBAgVE;EACE,oBAAA;EACA,mBAAA;EACA,KAAK,kBAAL;EACA,SAAA;EACA,uBAAA;EACA,oBAAA;EACA,yCAAA;EACA,qCAAA;EACA,mDAAA;;AAzVJ,iBA4VE,eAAe;EACb,aAAa,eAAb;EACA,WAAW,oBAAX;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAlWJ,iBAqWE,eAAe,MAAK;EAClB,aAAA;EACA,iBAAA;;AAvWJ,iBA0WE;EACE,aAAA;EACA,sBAAA;EACA,KAAK,kBAAL;;AA7WJ,iBAgXE;EACE,aAAA;EACA,8BAAA;EACA,KAAK,kBAAL;EACA,wBAAA;EACA,yCAAA;EACA,eAAe,mBAAf;EACA,YACE,+EACA,+DAFF;EAGA,mFAAA;EAGA,kBAAA;;AA7XJ,iBAgYE,WAAU;EACR,SAAS,EAAT;EACA,kBAAA;EACA,aAAA;EACA,YAAA;EACA,eAAA;EACA,UAAA;EACA,oBAAA;EACA,YAAY,wBAAwB,gBAAgB,gBAApD;EACA,YAAA;;AAzYJ,iBA4YE,WAAW,MAAK;EACd,oBAAA;;AA7YJ,iBAgZE,WAAW;AAhZb,iBAiZE,gBAAgB;EACd,aAAa,eAAb;EACA,sBAAA;EACA,cAAA;;AApZJ,iBAuZE;EACE,gCAAA;;AAxZJ,iBA2ZE,oBAAoB;EAClB,sBAAA;;AA5ZJ,iBA+ZE,cAAc;EACZ,kBAAA;EACA,oBAAA;EACA,6CAAA;;AAlaJ,iBAqaE;EACE,wBAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,WAAA;EACA,kBAAA;;AAzaJ,iBA4aE;EACE,YAAA;;AA7aJ,iBAgbE,oBAAoB;EAClB,qBAAA;EACA,YAAA;;AAlbJ,iBAqbE,oBAAoB,cAAc;EAChC,SAAA;EACA,kBAAA;;AAvbJ,iBA0bE,oBAAoB;EAClB,uBAAA;EACA,YAAA;;AA5bJ,iBA+bE,oBAAoB,eAAe;EACjC,kBAAA;;AAhcJ,iBAmcE,oBAAoB,eAAe,MAAK;EACtC,aAAA;EACA,iBAAA;;AArcJ,iBAwcE;EACE,YAAA;;AAzcJ,iBA4cE;EACE,YAAA;EACA,wBAAA;;AA9cJ,iBAidE,YAAW;EACT,aAAA;EACA,YAAA;EACA,eAAA;;AApdJ,iBAudE,YAAY,MAAK;EACf,qBAAA;;AAxdJ,iBA2dE;EACE,aAAA;EACA,mBAAA;EACA,YAAA;EACA,YAAA;EACA,eAAA;;AAheJ,iBAmeE,YAAY;EACV,kBAAA;EACA,gBAAA;;AAreJ,iBAweE;EACE,cAAA;EACA,kBAAA;EACA,gBAAA;;AA3eJ,iBA8eE;EACE,YAAA;EACA,iBAAA;;AAhfJ,iBAmfE,oBAAoB,eAAe;EACjC,kBAAA;EACA,wBAAA;EACA,kBAAA;;AAGF,QAA0B;EAA1B,iBACE;IACE,uBAAuB,cAAvB;;;AA3fN,iBA+fE;EACE,SAAA;EACA,kBAAA;;AAjgBJ,iBAogBE,gBAAgB,GAAG;EACjB,YAAY,kBAAZ;;AArgBJ,iBAwgBE;EACE,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,KAAK,kBAAL;EACA,eAAe,kBAAf;;AA5gBJ,iBA+gBE;EACE,QAAQ,sBAAR;EACA,KAAK,kBAAL;;AAjhBJ,iBAohBE;EACE,aAAA;EACA,sBAAA;EACA,KAAK,kBAAL;EACA,mBAAA;EACA,gBAAA;EACA,eAAe,mBAAf;EACA,0CAAA;EACA,YACE,8EACA,+DAFF;EAGA,mFAAA;;AA/hBJ,iBAoiBE,eAAc;EACZ,mBAAA;EACA,qCAAA;;AAtiBJ,iBAyiBE,eAAc;EACZ,uBAAA;EACA,YACE,8EACA,4HAFF;;AA3iBJ,iBAsjBE;AAtjBF,iBAujBE;EACE,aAAA;EACA,uBAAA;EACA,8BAAA;EACA,KAAK,kBAAL;;AA3jBJ,iBA8jBE;EACE,OAAA;;AA/jBJ,iBAkkBE;EACE,mBAAA;EACA,aAAa,eAAb;EACA,WAAW,oBAAX;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAzkBJ,iBA4kBE;EACE,cAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,cAAA;;AAhlBJ,iBAmlBE;EACE,WAAA;EACA,YAAA;EACA,iBAAA;EACA,eAAe,mBAAf;EACA,yCAAA;EACA,0CAAA;;AAzlBJ,iBA4lBE,eAAe;EACb,yBAAA;;AA7lBJ,iBAgmBE,eAAe,eAAe;EAC5B,mBAAA;EACA,sBAAA;;AAlmBJ,iBAqmBE,eAAe;EACb,SAAA;EACA,OAAA;;AAvmBJ,iBA0mBE;EACE,gBAAA;EACA,uBAAA;EACA,KAAK,kBAAL;;AA7mBJ,iBAgnBE,wBAAwB;EACtB,mBAAA;;AAjnBJ,iBAonBE,wBAAwB;EACtB,sBAAA;EACA,iBAAA;;AAtnBJ,iBAynBE,wBAAwB;EACtB,kBAAA;EACA,gBAAA;;AA3nBJ,iBA8nBE;EACE,WAAA;;AA/nBJ,iBAkoBE,wBAAwB;EACtB,kBAAA;EACA,wBAAA;EACA,kBAAA;;AAroBJ,iBAwoBE;EACE,OAAO,kBAAP;EACA,WAAW,mBAAX;EACA,kBAAA;;AA3oBJ,iBA8oBE;AA9oBF,iBA+oBE,gBAAgB;EACd,eAAA;EACA,wCAAA;EACA,oBAAA;EACA,YACE,yCADF;EAEA,cAAA;EACA,aAAa,eAAb;EACA,WAAW,qBAAX;EACA,qBAAA;EACA,yBAAA;EACA,kBAAA;EACA,wBAAA;EACA,mFAAA;EAGA,gFAAA;;AA/pBJ,iBAkqBE;EACE,kBAAA;EACA,MAAA;EACA,QAAA;EACA,oBAAA;EACA,mBAAA;EACA,uBAAA;EACA,kBAAA;EACA,mBAAA;EACA,UAAA;EACA,UAAA;;AA5qBJ,iBA+qBE,mBAAmB;EACjB,oBAAA;;AAhrBJ,iBAmrBE;EACE,OAAO,aAAP;;AAprBJ,iBAmrBE,yBAGE;EACE,gBAAA;;AAvrBN,iBAmrBE,yBAOE,WAAW;AA1rBf,iBAmrBE,yBAQE,WAAW;EACT,OAAA;;AA5rBN,iBAmrBE,yBAYE,WAAW,MAAK;EACd,UAAU,sBAAV;;AAhsBN,iBAosBE,OAAM;AApsBR,iBAqsBE,OAAM;EACJ,WAAW,gBAAX;EACA,uCAAA;EACA,gFAAA;;AAxsBJ,iBA6sBE,MAAK;AA7sBP,iBA8sBE,MAAK;AA9sBP,iBA+sBE;AA/sBF,iBAgtBE;EACE,YAAY,6EAAZ;EACA,yCAAA;EACA,eAAe,mBAAf;EACA,cAAA;EACA,aAAa,oCAAb;EACA,WAAW,mBAAX;EACA,YAAY,wBAAZ;EACA,uBAAA;EACA,kDAAA;;AAztBJ,iBA4tBE,MAAK;EACH,OAAO,sBAAP;EACA,WAAW,sBAAX;EACA,kBAAA;;AA/tBJ,iBAkuBE,MAAK;EACH,qBAAA;;AAnuBJ,iBAsuBE,YAAY;AAtuBd,iBAuuBE,YAAY;AAvuBd,iBAwuBE,YAAY;AAxuBd,iBAyuBE;EACE,qCAAA;EACA,eAAe,mBAAf;;AA3uBJ,iBA8uBE;EACE,yCAAA;EACA,wBAAA;;AAhvBJ,iBAmvBE;AAnvBF,iBAovBE,OAAM;AApvBR,iBAqvBE,OAAM;EACJ,qBAAA;;AAtvBJ,iBAyvBE,OAAM;AAzvBR,iBA0vBE,OAAM;EACJ,YAAY,yCAAZ;EACA,cAAA;;AA5vBJ,iBA+vBE,iBAAiB;EACf,YACE,+EACA,0EAFF;;AAhwBJ,iBAqwBE,gBAAgB;EACd,YACE,+EACA,4EAFF;;AAKF,QAA0B;EAA1B,iBACE;EADF,iBAEE;EAFF,iBAGE;IACE,0BAAA;;EAJJ,iBAOE;IACE,0BAAA;;EARJ,iBAWE;IACE,WAAA;IACA,gBAAA;;;AAKN,YAAY,OAAO,IAAI;EACrB,qBAAA;EACA,qBAAA;EACA,sBAAA;EACA,qCAAA;EACA,2CAAA;EACA,0CAAA;EACA,iBAAA;EACA,sBAAA;EACA,kBAAA;EACA,mBAAA;EACA,iCAAA;EACA,gCAAA;EACA,OAAO,aAAP;EACA,YACE,gFACA,gFACA,uEAHF;;AAMF,YAAY,OAAO,IAAI,0BAA2B;EAChD,YACE,yEACA,4EAFF;EAGA,cAAA;EACA,kDAAA;;AAGF,YAAY,OAAO,IAAI,0BAA2B;EAChD,aAAa,eAAb;EACA,sBAAA;EACA,yBAAA;;AAGF,YAAY,OAAO,IAAI,0BAA2B;EAChD,UAAA;EACA,YACE,yEACA,8EAFF;EAGA,OAAO,aAAP;;AAGF,YAAY,OAAO,IAAI,kCAAmC;EACxD,YAAY,gBAAZ;EACA,2BAAA;EACA,6BAAA;;AAGF,YAAY,OAAO,IAAI,0BAA2B;AAClD,YAAY,OAAO,IAAI,0BAA2B;EAChD,8BAAA;EACA,YACE,uEADF;EAEA,+CAAA;;AAGF,YAAY,OAAO,IAAI,0BAA2B,eAAe;AACjE,YAAY,OAAO,IAAI,0BAA2B,aAAa;EAC7D,eAAA;EACA,wCAAA;EACA,oBAAA;EACA,YAAY,yCAAZ;EACA,cAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,qBAAA;EACA,yBAAA;EACA,mBAAA;EACA,uBAAA;EACA,mFAAA;;AAKF,YAAY,OAAO,IAAI,0BAA2B,eAAe,OAAM;AACvE,YAAY,OAAO,IAAI,0BAA2B,eAAe,OAAM;AACvE,YAAY,OAAO,IAAI,0BAA2B,aAAa,OAAM;AACrE,YAAY,OAAO,IAAI,0BAA2B,aAAa,OAAM;EACnE,WAAW,gBAAX;EACA,uCAAA;EACA,gFAAA;;AAKF;EACE,aAAA;EACA,WAAA;EACA,eAAA;EACA,OAAO,sBAAP;EACA,YACE,sEADF;;AAIF,wBAAyB;EACvB,gBAAA;;AAGF;EACE,YAAA;EACA,gBAAA;;AAGF,gCAAiC;EAC/B,kBAAA;;AAGF,wBAAyB;EACvB,aAAA;EACA,sBAAA;EACA,YAAA;;AAGF,wBAAyB;EACvB,aAAA;EACA,8BAAA;EACA,WAAA;EACA,wBAAA;EACA,yCAAA;EACA,mBAAA;EACA,YACE,+EACA,+DAFF;EAGA,mFAAA;EAGA,kBAAA;;AAGF,wBAAyB,WAAU;EACjC,SAAS,EAAT;EACA,kBAAA;EACA,aAAA;EACA,YAAA;EACA,eAAA;EACA,UAAA;EACA,oBAAA;EACA,YAAY,wBAAwB,gBAAgB,gBAApD;EACA,YAAA;;AAGF,wBAAyB,WAAW,MAAK;EACvC,oBAAA;;AAGF,wBAAyB,WAAW;EAClC,aAAa,eAAb;EACA,sBAAA;EACA,cAAA;;AAGF,wBAAyB;EACvB,gBAAA;EACA,YACE,+EACA,+DAFF;EAGA,wCAAA;EACA,mBAAA;EACA,8BAAA;EACA,8HAAA;EAIA,kBAAA;EACA,gBAAA;;AAGF,wBAAyB,YAAW;EAClC,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,YACE,qEACA,4EAFF;EAGA,oBAAA;;AAGF,wBAAyB,YAAY;EACnC,kBAAA;EACA,UAAA;;AAGF,wBAAyB,YAAY;EACnC,mBAAA;EACA,uBAAA;EACA,gDAAA;EACA,aAAa,eAAb;EACA,iBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAGF,wBAAyB;EACvB,aAAA;EACA,mBAAA;EACA,YAAA;EACA,sBAAA;;AAGF,gCAAiC;EAC/B,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,mBAAA;;AAGF,gCAAiC;EAC/B,WAAA;EACA,gBAAA;EACA,YAAA;;AAGF,gCAAiC;EAC/B,mBAAA;;AAGF,gCAAiC,mBAAmB,MAAK;EACvD,iBAAA;;AAGF,wBAAyB,WAAW;EAClC,iBAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,gBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AAGF,gCAAiC,WAAW;EAC1C,iBAAA;EACA,kBAAA;EACA,sBAAA;;AAGF,wBAAyB,WAAW;AACpC,wBAAyB,WAAW;EAClC,OAAA;;AAGF,gCAAiC,WAAW,MAAK;AACjD,gCAAiC,WAAW;EAC1C,YAAA;;AAGF,wBAAyB,WAAW,MAAK;EACvC,iBAAA;;AAGF,gCAAiC,WAAW,MAAK;EAC/C,gBAAA;EACA,aAAA;EACA,iBAAA;;AAGF,QAA0B;EACxB,gCAAiC;EACjC,gCAAiC;IAC/B,uBAAuB,cAAvB;;;AAIJ,wBAAyB,MAAK;AAC9B,wBAAyB,MAAK;AAC9B,wBAAyB;AACzB,wBAAyB;EACvB,YAAY,6EAAZ;EACA,yCAAA;EACA,mBAAA;EACA,cAAA;EACA,aAAa,oCAAb;EACA,kBAAA;EACA,mBAAA;EACA,uBAAA;EACA,kDAAA;;AAGF,wBAAyB,MAAK;EAC5B,qBAAA;;AAGF,wBAAyB;EACvB,mBAAA;EACA,wBAAA;EACA,mBAAA;EACA,qCAAA;EACA,yCAAA;EACA,cAAA;EACA,kBAAA;EACA,kBAAA;;AAGF,wBAAyB;EACvB,kBAAA;EACA,iBAAA;;AAGF,wBAAyB,eAAc;EACrC,mCAAA;EACA,qCAAA;EACA,cAAA;;AAGF,wBAAyB,eAAc;EACrC,kCAAA;EACA,oCAAA;EACA,cAAA;;AAGF,aAGE;AAFF,YAEE;AADF,SACE;EACE,2CAAA;EACA,8CAAA;EACA,uCAAA;EACA,sBAAA;EACA,uBAAA;EACA,uBAAA;EACA,wBAAA;EACA,OAAO,kBAAP;EACA,YACE,wBAAwB,uBAAuB,2BAC/C,mEAFF;EAGA,yCAAA;EACA,eAAe,mBAAf;EACA,wBAAA;EACA,iBAAA;EACA,oFAAA;EAGA,kBAAA;EACA,gBAAA;;AAvBJ,aA0BE,uBAAsB;AAzBxB,YAyBE,uBAAsB;AAxBxB,SAwBE,uBAAsB;EACpB,SAAS,EAAT;EACA,kBAAA;EACA,QAAA;EACA,oBAAA;EACA,YACE,qEACA,6EAFF;;AA/BJ,aAoCE,uBAAsB;AAnCxB,YAmCE,uBAAsB;AAlCxB,SAkCE,uBAAsB;EACpB,uHAAA;;AArCJ,aA2CE,uBAAsB;AA1CxB,YA0CE,uBAAsB;AAzCxB,SAyCE,uBAAsB;EACpB,uHAAA;;AA5CJ,aAkDE;AAjDF,YAiDE;AAhDF,SAgDE;EACE,aAAA;EACA,sCAAA;EACA,YAAA;EACA,mBAAA;EACA,kBAAA;EACA,UAAA;;AAxDJ,aA2DE;AA1DF,YA0DE;AAzDF,SAyDE;EACE,aAAA;EACA,cAAA;EACA,iBAAA;EACA,eAAe,mBAAf;EACA,uCAAA;EACA,0CAAA;EACA,YAAY,yCAAZ;;AAlEJ,aAqEE;AApEF,YAoEE;AAnEF,SAmEE;EACE,SAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,OAAO,oBAAP;;AA3EJ,aA8EE,kBAAkB;AA7EpB,YA6EE,kBAAkB;AA5EpB,SA4EE,kBAAkB;EAChB,mBAAA;EACA,aAAa,eAAb;EACA,iBAAA;EACA,sBAAA;EACA,yBAAA;EACA,cAAA;;AApFJ,aAuFE;AAtFF,YAsFE;AArFF,SAqFE;EACE,mBAAA;EACA,OAAO,mBAAP;EACA,kBAAA;EACA,gBAAA;;AA3FJ,aA8FE;AA7FF,YA6FE;AA5FF,SA4FE;EACE,8BAA8B,cAA9B;EACA,qBACE,mBACA,kBAFF;EAGA,kBAAA;EACA,oBAAA;;AApGJ,aAuGE,iCAAiC;AAtGnC,YAsGE,iCAAiC;AArGnC,SAqGE,iCAAiC;EAC/B,mBAAA;;AAxGJ,aA2GE,iCAAiC;AA1GnC,YA0GE,iCAAiC;AAzGnC,SAyGE,iCAAiC;EAC/B,kBAAA;EACA,YAAA;;AA7GJ,aAgHE,iCAAiC;AA/GnC,YA+GE,iCAAiC;AA9GnC,SA8GE,iCAAiC;EAC/B,kBAAA;EACA,YAAA;;AAlHJ,aAqHE;AApHF,YAoHE;AAnHF,SAmHE;EACE,aAAA;EACA,eAAA;EACA,YAAA;EACA,sBAAA;;AAzHJ,aA4HE;AA3HF,YA2HE;AA1HF,SA0HE;EACE,oBAAA;EACA,mBAAA;EACA,wBAAA;EACA,oBAAA;EACA,mCAAA;EACA,yCAAA;EACA,OAAO,oBAAP;EACA,aAAa,eAAb;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,gBAAA;;AAxIJ,aA2IE;AA1IF,YA0IE;AAzIF,SAyIE;EACE,qCAAA;EACA,OAAO,mBAAP;EACA,qCAAA;;AA9IJ,aAiJE,iCAAiC;AAhJnC,YAgJE,iCAAiC;AA/InC,SA+IE,iCAAiC;EAC/B,aAAA;EACA,kBAAA;EACA,iBAAA;;AApJJ,aAuJE,iCAAiC;AAtJnC,YAsJE,iCAAiC;AArJnC,SAqJE,iCAAiC;EAC/B,oBAAA;EACA,uBAAA;EACA,eAAA;;AA1JJ,aA6JE;AA5JF,YA4JE;AA3JF,SA2JE;EACE,iBAAA;EACA,wBAAA;EACA,oBAAA;EACA,kBAAkB,mBAAlB;EACA,oCAAA;EACA,cAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,kBAAA;EACA,gBAAA;EACA,iBAAA;;AA1KJ,aA6KE,iBAAgB;AA5KlB,YA4KE,iBAAgB;AA3KlB,SA2KE,iBAAgB;EACd,qCAAA;EACA,cAAA;;AA/KJ,aAkLE,iBAAgB;AAjLlB,YAiLE,iBAAgB;AAhLlB,SAgLE,iBAAgB;EACd,qCAAA;EACA,cAAA;;AApLJ,aAuLE,iBAAgB;AAtLlB,YAsLE,iBAAgB;AArLlB,SAqLE,iBAAgB;EACd,qCAAA;;AAxLJ,aA2LE;AA1LF,YA0LE;AAzLF,SAyLE;EACE,kBAAA;EACA,UAAA;;AA7LJ,aAgME,gBAAgB;AA/LlB,YA+LE,gBAAgB;AA9LlB,SA8LE,gBAAgB;EACd,mBAAA;;AAjMJ,aAoME;AAnMF,YAmME;AAlMF,SAkME;EACE,aAAA;EACA,uBAAuB,UAAU,eAAjC;EACA,oBAAA;EACA,yBAAA;;AAxMJ,aA2ME,mBAAmB;AA1MrB,YA0ME,mBAAmB;AAzMrB,SAyME,mBAAmB;EACjB,aAAA;EACA,qBAAA;EACA,8BAAA;EACA,YAAA;EACA,wBAAA;EACA,eAAe,mBAAf;EACA,oCAAA;EACA,wCAAA;EACA,mDAAA;;AApNJ,aAuNE,mBAAmB;AAtNrB,YAsNE,mBAAmB;AArNrB,SAqNE,mBAAmB;EACjB,eAAA;EACA,aAAa,eAAb;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,OAAO,oBAAP;EACA,gBAAA;;AA9NJ,aAiOE,mBAAmB;AAhOrB,YAgOE,mBAAmB;AA/NrB,SA+NE,mBAAmB;EACjB,cAAA;EACA,kBAAA;EACA,OAAO,kBAAP;EACA,cAAA;EACA,iBAAA;;AAtOJ,aAyOE;AAxOF,YAwOE;AAvOF,SAuOE;EACE,YAAY,mBAAZ;EACA,wBAAA;EACA,eAAe,mBAAf;EACA,qCAAA;EACA,wCAAA;EACA,iBAAA;EACA,kBAAA;;AAhPJ,aAmPE;AAlPF,YAkPE;AAjPF,SAiPE;EACE,aAAA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAvPJ,aA0PE;AAzPF,YAyPE;AAxPF,SAwPE;EACE,iBAAA;EACA,wBAAA;EACA,eAAe,mBAAf;EACA,qCAAA;EACA,yCAAA;EACA,mDAAA;;AAhQJ,aAmQE,UAAS;AAlQX,YAkQE,UAAS;AAjQX,SAiQE,UAAS;EACP,uCAAA;EACA,qCAAA;EACA,wFAAA;;AAtQJ,aA2QE,UAAU;AA1QZ,YA0QE,UAAU;AAzQZ,SAyQE,UAAU;AA3QZ,aA4QE,UAAU;AA3QZ,YA2QE,UAAU;AA1QZ,SA0QE,UAAU;AA5QZ,aA6QE,UAAU;AA5QZ,YA4QE,UAAU;AA3QZ,SA2QE,UAAU;EACR,eAAA;;AA9QJ,aAiRE,UAAU;AAhRZ,YAgRE,UAAU;AA/QZ,SA+QE,UAAU;EACR,qBAAA;EACA,kBAAA;;AAnRJ,aAsRE,UAAU;AArRZ,YAqRE,UAAU;AApRZ,SAoRE,UAAU;EACR,OAAO,kBAAP;EACA,kBAAA;;AAxRJ,aA2RE,UAAU;AA1RZ,YA0RE,UAAU;AAzRZ,SAyRE,UAAU;EACR,OAAO,oBAAP;EACA,cAAA;EACA,mBAAA;EACA,kBAAA;EACA,gBAAA;;AAhSJ,aAmSE;AAlSF,YAkSE;AAjSF,SAiSE;EACE,aAAA;EACA,eAAA;EACA,YAAA;EACA,kBAAA;;AAvSJ,aA0SE;AAzSF,YAySE;AAxSF,SAwSE;EACE,eAAA;EACA,cAAA;EACA,aAAA;EACA,qBAAA;EACA,eAAA;EACA,mBAAA;EACA,wBAAA;EACA,eAAe,mBAAf;EACA,qCAAA;EACA,wCAAA;;AApTJ,aAuTE,cAAc;AAtThB,YAsTE,cAAc;AArThB,SAqTE,cAAc;AAvThB,aAwTE,cAAc;AAvThB,YAuTE,cAAc;AAtThB,SAsTE,cAAc;AAxThB,aAyTE,cAAc;AAxThB,YAwTE,cAAc;AAvThB,SAuTE,cAAc;EACZ,eAAA;;AA1TJ,aA6TE,cAAc;AA5ThB,YA4TE,cAAc;AA3ThB,SA2TE,cAAc;EACZ,aAAa,eAAb;EACA,kBAAA;EACA,sBAAA;EACA,yBAAA;EACA,OAAO,oBAAP;;AAlUJ,aAqUE,cAAc;AApUhB,YAoUE,cAAc;AAnUhB,SAmUE,cAAc;EACZ,OAAO,kBAAP;EACA,kBAAA;EACA,gBAAA;;AAxUJ,aA2UE,cAAc;AA1UhB,YA0UE,cAAc;AAzUhB,SAyUE,cAAc;EACZ,OAAO,mBAAP;EACA,kBAAA;EACA,gBAAA;;AA9UJ,aAiVE,cAAa;AAhVf,YAgVE,cAAa;AA/Uf,SA+UE,cAAa;EACX,qCAAA;;AAlVJ,aAqVE;AApVF,YAoVE;AAnVF,SAmVE;EACE,aAAA;EACA,0BAAA;EACA,YAAA;EACA,mBAAA;;AAzVJ,aA4VE;AA3VF,YA2VE;AA1VF,SA0VE;EACE,uBAAA;EACA,eAAe,mBAAf;EACA,yCAAA;EACA,qCAAA;EACA,mFAAA;;AAjWJ,aAsWE,gBAAe;AArWjB,YAqWE,gBAAe;AApWjB,SAoWE,gBAAe;EACb,gDAAA;;AAvWJ,aA0WE,gBAAe;AAzWjB,YAyWE,gBAAe;AAxWjB,SAwWE,gBAAe;EACb,gDAAA;;AA3WJ,aA8WE;AA7WF,YA6WE;AA5WF,SA4WE;EACE,aAAA;EACA,8BAAA;EACA,YAAA;EACA,qBAAA;EACA,sBAAA;;AAnXJ,aAsXE,gBAAgB;AArXlB,YAqXE,gBAAgB;AApXlB,SAoXE,gBAAgB;EACd,SAAA;EACA,aAAa,eAAb;EACA,iBAAA;EACA,yBAAA;EACA,sBAAA;EACA,cAAA;;AA5XJ,aA+XE;AA9XF,YA8XE;AA7XF,SA6XE;EACE,OAAO,mBAAP;EACA,kBAAA;EACA,kBAAA;;AAGF,QAA0B;EAA1B,aACE;EADF,YACE;EADF,SACE;IACE,+BAAA;;EAFJ,aAKE;EALF,YAKE;EALF,SAKE;IACE,mBAAA;IACA,mBAAA;;EAPJ,aAUE;EAVF,YAUE;EAVF,SAUE;IACE,8BAAA","file":"les-oublies.css","sourcesContent":[]}
\ No newline at end of file
+{"version":3,"sources":["../https:/fonts.googleapis.com/css2?family=Cinzel:wght@400;600;700&family=Cormorant+Garamond:wght@400;500;600;700&family=IM+Fell+English+SC&display=swap","../components/sheets.less"],"names":[],"mappings":"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","file":"les-oublies.css","sourcesContent":[]}
\ No newline at end of file
diff --git a/lang/fr.json b/lang/fr.json
index fd88021..9caadbc 100644
--- a/lang/fr.json
+++ b/lang/fr.json
@@ -169,6 +169,14 @@
"creditCauchemar": "Crédits Cauchemar",
"pointsSonges": "Points de Songes",
"pointsCauchemar": "Points de Cauchemar",
+ "threadReserves": "Fils et globes",
+ "personalReserve": "Réserve personnelle",
+ "companyReserve": "Réserve de compagnie",
+ "threadSonges": "Fils de Songes",
+ "threadCauchemar": "Fils de Cauchemar",
+ "emptyGlobes": "Globes vides",
+ "toCompany": "→ Compagnie",
+ "toActor": "← Perso",
"degats": "Dégâts",
"sortilegesSonges": "Sortilèges de Songes",
"sortilegesCauchemar": "Sortilèges de Cauchemar",
diff --git a/less/components/sheets.less b/less/components/sheets.less
index 09b86b5..86f6c11 100644
--- a/less/components/sheets.less
+++ b/less/components/sheets.less
@@ -214,6 +214,10 @@
grid-template-columns: repeat(2, minmax(0, 1fr));
}
+ .sheet-grid-3 {
+ grid-template-columns: repeat(3, minmax(0, 1fr));
+ }
+
.sheet-card {
background:
linear-gradient(180deg, var(--lo-panel), var(--lo-panel-heavy)),
@@ -379,6 +383,54 @@
margin-top: var(--lo-space-lg);
}
+ .reserve-card .reserve-grid {
+ display: grid;
+ grid-template-columns: repeat(2, minmax(0, 1fr));
+ gap: var(--lo-space-sm);
+ margin-bottom: var(--lo-space-sm);
+ }
+
+ .reserve-panel {
+ min-width: 0;
+ padding: 0.55rem 0.65rem;
+ border-radius: var(--lo-radius-lg);
+ background: linear-gradient(180deg, rgba(255, 250, 243, 0.7), rgba(230, 214, 185, 0.6));
+ border: 1px solid rgba(130, 98, 71, 0.2);
+ box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.5);
+ }
+
+ .reserve-panel h3 {
+ margin-bottom: 0.45rem;
+ }
+
+ .transfer-list {
+ display: flex;
+ flex-direction: column;
+ gap: 0.35rem;
+ margin-top: 0.45rem;
+ }
+
+ .transfer-row {
+ display: grid;
+ grid-template-columns: minmax(0, 1fr) auto auto;
+ gap: 0.4rem;
+ align-items: center;
+ }
+
+ .transfer-row strong {
+ min-width: 0;
+ font-size: var(--lo-font-body);
+ }
+
+ .transfer-row input[type="number"] {
+ width: 3.6rem;
+ min-width: 3.6rem;
+ }
+
+ .transfer-row .item-controls {
+ justify-content: flex-end;
+ }
+
.group-header {
display: flex;
align-items: center;
@@ -833,8 +885,10 @@
@media (max-width: 900px) {
.sheet-grid-2,
+ .sheet-grid-3,
.profile-grid,
- .creation-slots {
+ .creation-slots,
+ .reserve-card .reserve-grid {
grid-template-columns: 1fr;
}
diff --git a/modules/applications/sheets/base-actor-sheet.mjs b/modules/applications/sheets/base-actor-sheet.mjs
index d4dcad1..9a14398 100644
--- a/modules/applications/sheets/base-actor-sheet.mjs
+++ b/modules/applications/sheets/base-actor-sheet.mjs
@@ -37,6 +37,7 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
openCombatPreset: LesOubliesActorSheet.#onOpenCombatPreset,
openThreadHarvest: LesOubliesActorSheet.#onOpenThreadHarvest,
openLinkedActor: LesOubliesActorSheet.#onOpenLinkedActor,
+ transferThread: LesOubliesActorSheet.#onTransferThread,
},
}
@@ -217,4 +218,26 @@ export default class LesOubliesActorSheet extends HandlebarsApplicationMixin(fou
const actor = game.actors.get(actorId)
if (actor) actor.sheet.render(true)
}
+
+ static async #onTransferThread(event, target) {
+ const resourceKey = target.dataset.resourceKey
+ const direction = target.dataset.direction || "toCompany"
+ if (!resourceKey || !this.document?.transferThreadReserve) return
+
+ const row = target.closest("[data-transfer-row]")
+ const amountField = row?.querySelector?.("[data-transfer-amount]")
+ const amount = Math.max(Math.trunc(Number(amountField?.value ?? 1)), 0)
+ if (amount < 1) {
+ ui.notifications.warn("Indiquez une quantité à transférer.")
+ return
+ }
+
+ const success = await this.document.transferThreadReserve(resourceKey, amount, direction)
+ if (!success) {
+ ui.notifications.warn("Transfert impossible avec les réserves actuelles.")
+ return
+ }
+
+ this.render()
+ }
}
diff --git a/modules/applications/sheets/compagnie-sheet.mjs b/modules/applications/sheets/compagnie-sheet.mjs
index ec49c2c..809ecc3 100644
--- a/modules/applications/sheets/compagnie-sheet.mjs
+++ b/modules/applications/sheets/compagnie-sheet.mjs
@@ -17,7 +17,7 @@ export default class LesOubliesCompagnieSheet extends LesOubliesActorSheet {
static PARTS = {
sheet: {
- template: "systems/fvtt-les-oublies/templates/actor-compagnie-sheet-v4.hbs",
+ template: "systems/fvtt-les-oublies/templates/actor-compagnie-sheet-v5.hbs",
},
}
diff --git a/modules/applications/sheets/competence-sheet.mjs b/modules/applications/sheets/competence-sheet.mjs
index a21923f..9791c84 100644
--- a/modules/applications/sheets/competence-sheet.mjs
+++ b/modules/applications/sheets/competence-sheet.mjs
@@ -3,7 +3,7 @@ import LesOubliesItemSheet from "./base-item-sheet.mjs"
export default class LesOubliesCompetenceSheet extends LesOubliesItemSheet {
static PARTS = {
sheet: {
- template: "systems/fvtt-les-oublies/templates/item-competence-sheet.hbs",
+ template: "systems/fvtt-les-oublies/templates/item-competence-sheet-v2.hbs",
},
}
}
diff --git a/modules/applications/sheets/personnage-sheet.mjs b/modules/applications/sheets/personnage-sheet.mjs
index b03924e..2ab6380 100644
--- a/modules/applications/sheets/personnage-sheet.mjs
+++ b/modules/applications/sheets/personnage-sheet.mjs
@@ -20,7 +20,7 @@ export default class LesOubliesPersonnageSheet extends LesOubliesActorSheet {
static PARTS = {
sheet: {
- template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet-v14.hbs",
+ template: "systems/fvtt-les-oublies/templates/actor-personnage-sheet-v18.hbs",
},
}
diff --git a/modules/les-oublies-actor.js b/modules/les-oublies-actor.js
index f0e2d71..c31426e 100644
--- a/modules/les-oublies-actor.js
+++ b/modules/les-oublies-actor.js
@@ -4,6 +4,7 @@ import { LesOubliesRolls } from "./les-oublies-rolls.js"
export class LesOubliesActor extends Actor {
static CREATION_ITEM_TYPES = new Set(["race", "tribu", "metier"])
+ static THREAD_RESOURCE_KEYS = new Set(["songesThreads", "cauchemarThreads", "emptyGlobes"])
prepareDerivedData() {
super.prepareDerivedData()
@@ -22,6 +23,18 @@ export class LesOubliesActor extends Actor {
system.cauchemar.max = totals.cauchemarPoints
system.songes.points = Math.clamp(Number(system.songes.points ?? totals.songesPoints), 0, totals.songesPoints)
system.cauchemar.points = Math.clamp(Number(system.cauchemar.points ?? totals.cauchemarPoints), 0, totals.cauchemarPoints)
+ system.reserves.songesThreads = Math.max(Number(system.reserves?.songesThreads ?? 0), 0)
+ system.reserves.cauchemarThreads = Math.max(Number(system.reserves?.cauchemarThreads ?? 0), 0)
+ system.reserves.emptyGlobes = Math.max(Number(system.reserves?.emptyGlobes ?? 0), 0)
+ return
+ }
+
+ if (this.type === "compagnie") {
+ const system = this.system
+ system.power.sharedDreamPoints = Math.max(Number(system.power?.sharedDreamPoints ?? 0), 0)
+ system.reserves.songesThreads = Math.max(Number(system.reserves?.songesThreads ?? 0), 0)
+ system.reserves.cauchemarThreads = Math.max(Number(system.reserves?.cauchemarThreads ?? 0), 0)
+ system.reserves.emptyGlobes = Math.max(Number(system.reserves?.emptyGlobes ?? 0), 0)
return
}
@@ -62,6 +75,7 @@ export class LesOubliesActor extends Actor {
async assignCreationItem(sourceItem) {
if (!sourceItem || !LesOubliesActor.CREATION_ITEM_TYPES.has(sourceItem.type)) return null
+ const previousItem = this.getCreationItem(sourceItem.type)
const itemData = sourceItem.toObject()
delete itemData._id
@@ -77,12 +91,19 @@ export class LesOubliesActor extends Actor {
[`system.references.${sourceItem.type}Id`]: createdItem.id,
})
+ if (sourceItem.type === "race") {
+ await this.syncRaceProfiles({ currentRace: createdItem })
+ await this.syncRaceDomains({ currentRace: createdItem, previousRace: previousItem })
+ }
+
return createdItem
}
async clearCreationItem(type) {
if (!LesOubliesActor.CREATION_ITEM_TYPES.has(type)) return
+ const previousItem = this.getCreationItem(type)
+
const existingIds = this.getEmbeddedItems(type).map((item) => item.id)
if (existingIds.length) {
await this.deleteEmbeddedDocuments("Item", existingIds, { renderSheet: false })
@@ -91,6 +112,11 @@ export class LesOubliesActor extends Actor {
await this.update({
[`system.references.${type}Id`]: "",
})
+
+ if (type === "race") {
+ await this.syncRaceProfiles({ currentRace: null })
+ await this.syncRaceDomains({ currentRace: null, previousRace: previousItem })
+ }
}
getCompagnie() {
@@ -98,10 +124,94 @@ export class LesOubliesActor extends Actor {
return compagnieId ? game.actors.get(compagnieId) ?? null : null
}
+ getThreadReserveOwner(source = "actor") {
+ if (source === "company" || source === "compagnie") return this.getCompagnie()
+ return this
+ }
+
+ getThreadReserves(source = "actor") {
+ const owner = this.getThreadReserveOwner(source)
+ return {
+ owner,
+ songesThreads: Math.max(Number(owner?.system?.reserves?.songesThreads ?? 0), 0),
+ cauchemarThreads: Math.max(Number(owner?.system?.reserves?.cauchemarThreads ?? 0), 0),
+ emptyGlobes: Math.max(Number(owner?.system?.reserves?.emptyGlobes ?? 0), 0),
+ }
+ }
+
+ async transferThreadReserve(resourceKey, amount, direction = "toCompany") {
+ if (!LesOubliesActor.THREAD_RESOURCE_KEYS.has(resourceKey)) return false
+ const company = this.getCompagnie()
+ if (!company) return false
+
+ const transferAmount = Math.max(Math.trunc(Number(amount ?? 0)), 0)
+ if (transferAmount < 1) return false
+
+ const fromActor = direction === "toCompany" ? this : company
+ const toActor = direction === "toCompany" ? company : this
+ const current = Math.max(Number(fromActor.system?.reserves?.[resourceKey] ?? 0), 0)
+ if (current < transferAmount) return false
+
+ const path = `system.reserves.${resourceKey}`
+ const targetCurrent = Math.max(Number(toActor.system?.reserves?.[resourceKey] ?? 0), 0)
+
+ await fromActor.update({ [path]: current - transferAmount })
+ await toActor.update({ [path]: targetCurrent + transferAmount })
+ return true
+ }
+
getCompetenceByKey(skillKey) {
return this.getEmbeddedItems("competence").find((item) => item.system.key === skillKey) ?? null
}
+ getRaceLanguageDomains(race = this.getCreationItem("race")) {
+ return LesOubliesUtility.uniqueStrings(race?.system?.languageDomains ?? [])
+ }
+
+ getRaceProfiles(race = this.getCreationItem("race")) {
+ const profiles = LesOubliesUtility.createEmptyProfiles()
+ for (const key of Object.keys(profiles)) {
+ profiles[key] = Math.trunc(Number(race?.system?.profiles?.[key] ?? 0))
+ }
+ return profiles
+ }
+
+ async syncRaceProfiles({ currentRace = this.getCreationItem("race") } = {}) {
+ if (this.type !== "personnage") return false
+ const profiles = this.getRaceProfiles(currentRace)
+ const updateData = Object.fromEntries(
+ Object.entries(profiles).map(([key, value]) => [`system.profils.${key}`, value]),
+ )
+ await this.update(updateData)
+ if (currentRace) {
+ ui.notifications.info(`Profils raciaux appliqués depuis ${currentRace.name}.`)
+ }
+ return true
+ }
+
+ async syncRaceDomains({ currentRace = this.getCreationItem("race"), previousRace = null } = {}) {
+ if (this.type !== "personnage") return false
+
+ const competence = this.getCompetenceByKey("langues")
+ if (!competence) return false
+
+ const currentAutoDomains = LesOubliesUtility.uniqueStrings(competence.system.fixedDomains ?? [])
+ const previousRaceDomains = previousRace
+ ? this.getRaceLanguageDomains(previousRace)
+ : currentAutoDomains
+ const autoDomainsToReplace = currentAutoDomains.length ? currentAutoDomains : previousRaceDomains
+ const nextAutoDomains = this.getRaceLanguageDomains(currentRace)
+ const manualDomains = LesOubliesUtility.uniqueStrings(
+ (competence.system.domains ?? []).filter((domain) => !autoDomainsToReplace.includes(domain)),
+ )
+
+ await competence.update({
+ "system.fixedDomains": nextAutoDomains,
+ "system.domains": LesOubliesUtility.uniqueStrings([...manualDomains, ...nextAutoDomains]),
+ })
+ return true
+ }
+
getSkillScoreByKey(skillKey) {
const competence = this.getCompetenceByKey(skillKey)
return competence ? this.computeSkillValue(competence) : 0
@@ -119,6 +229,8 @@ export class LesOubliesActor extends Actor {
item,
finalValue: this.computeSkillValue(item),
profileLabel: LESOUBLIES_CONFIG.profileLabels[item.system.profileKey] ?? item.system.profileKey,
+ domains: LesOubliesUtility.uniqueStrings(item.system.domains ?? []),
+ fixedDomains: LesOubliesUtility.uniqueStrings(item.system.fixedDomains ?? []),
}))
}
@@ -146,6 +258,8 @@ export class LesOubliesActor extends Actor {
cauchemarMax: this.system.cauchemar?.max ?? this.system.cauchemar?.points ?? 0,
songesPoints: this.system.songes?.points ?? 0,
cauchemarPoints: this.system.cauchemar?.points ?? 0,
+ reserves: this.getThreadReserves(),
+ companyReserves: this.getThreadReserves("company"),
race: this.getCreationItem("race"),
tribu: this.getCreationItem("tribu"),
metier: this.getCreationItem("metier"),
diff --git a/modules/les-oublies-rolls.js b/modules/les-oublies-rolls.js
index 873cb06..7063535 100644
--- a/modules/les-oublies-rolls.js
+++ b/modules/les-oublies-rolls.js
@@ -439,7 +439,12 @@ export class LesOubliesRolls {
const data = await this.#promptSpellOptions(actor, spell)
if (!data) return null
- const activation = await this.#withActorLock(`spell:${actor.id}`, async () => {
+ const paymentMode = String(data.paymentMode || "points")
+ const paymentSource = this.#normalizeThreadReserveSource(data.paymentSource)
+ const paymentOwner = paymentMode === "fils"
+ ? this.#getThreadReserveOwner(actor, paymentSource)
+ : actor
+ const activation = await this.#withActorLock(`spell:${paymentOwner?.id ?? actor.id}:${paymentMode}`, async () => {
const skill = actor.getCompetenceByKey?.(spell.system.skillKey) ?? null
const skillBase = Number(skill?.system?.base ?? 0)
if (skillBase < 1) {
@@ -450,7 +455,6 @@ export class LesOubliesRolls {
const métierMatch = this.#actorMatchesSpellGrant(actor, spell)
const surcharge = !métierMatch
const effectiveCost = Number(data.actualCost ?? 0) * (surcharge ? 2 : 1)
- const paymentMode = String(data.paymentMode || "points")
if (paymentMode === "points") {
const resource = spell.system.polarity || "songes"
const available = Number(actor.system?.[resource]?.points ?? 0)
@@ -468,9 +472,43 @@ export class LesOubliesRolls {
[`system.${resource}.points`]: Math.max(available - effectiveCost, 0),
})
}
+ } else {
+ const reserve = this.#getThreadReserveState(actor, paymentSource)
+ if (!reserve.owner) {
+ ui.notifications.warn("Aucune réserve de compagnie n'est liée à ce personnage.")
+ return null
+ }
+
+ const resourceKey = this.#getThreadResourceKey(spell.system.polarity)
+ const available = Number(reserve[resourceKey] ?? 0)
+ if (available < effectiveCost) {
+ ui.notifications.warn(game.i18n.format("LESOUBLIES.rolls.notEnoughResourceDetailed", {
+ resource: `${effectiveCost > 1 ? "fils" : "fil"} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`,
+ actor: reserve.label,
+ required: effectiveCost,
+ available,
+ }))
+ return null
+ }
+
+ if (effectiveCost > 0) {
+ await reserve.owner.update({
+ [`system.reserves.${resourceKey}`]: Math.max(available - effectiveCost, 0),
+ "system.reserves.emptyGlobes": Number(reserve.emptyGlobes ?? 0) + effectiveCost,
+ })
+ }
}
- return { métierMatch, surcharge, effectiveCost, paymentMode }
+ return {
+ métierMatch,
+ surcharge,
+ effectiveCost,
+ paymentMode,
+ paymentSource,
+ paymentSourceLabel: paymentMode === "fils"
+ ? this.#getThreadReserveLabel(actor, paymentSource)
+ : actor.name,
+ }
})
if (!activation) return null
@@ -487,6 +525,7 @@ export class LesOubliesRolls {
costLabel: activation.paymentMode === "points"
? `${activation.effectiveCost} point${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`
: `${activation.effectiveCost} fil${activation.effectiveCost > 1 ? "s" : ""} de ${spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"}`,
+ paymentSourceLabel: activation.paymentSourceLabel,
métierMatch: activation.métierMatch,
surcharge: activation.surcharge,
notes: data.notes?.trim() || "",
@@ -578,6 +617,17 @@ export class LesOubliesRolls {
if (!data) return null
const threadCount = Math.max(Number(data.threadCount ?? 1), 1)
+ const destinationSource = this.#normalizeThreadReserveSource(data.destinationSource)
+ const destinationReserve = this.#getThreadReserveState(actor, destinationSource)
+ if (!destinationReserve.owner) {
+ ui.notifications.warn("Aucune réserve de compagnie n'est liée à ce personnage.")
+ return null
+ }
+ if (Number(destinationReserve.emptyGlobes ?? 0) < threadCount) {
+ ui.notifications.warn(`${destinationReserve.label} ne dispose pas de suffisamment de globes vides pour stocker cette récolte.`)
+ return null
+ }
+
const damageTaken = threadCount
const difficulty = -3 * (threadCount - 1)
const result = await this.resolveTest(actor, {
@@ -599,8 +649,11 @@ export class LesOubliesRolls {
if (!result) return null
await this.#applyDamageToActor(actor, damageTaken)
- const durationRoll = await (new Roll("1d12")).evaluate()
- const effectRoll = await (new Roll("1d12")).evaluate()
+ if (result.success) {
+ await this.#storeHarvestedThreads(actor, destinationSource, data.threadType, threadCount)
+ }
+ const durationRoll = await this.#evaluateDisplayedRoll("1d12")
+ const effectRoll = await this.#evaluateDisplayedRoll("1d12")
const effectIndex = Number(effectRoll.total ?? 1)
result.metadata.action.harvest = {
threadType: data.threadType,
@@ -611,6 +664,8 @@ export class LesOubliesRolls {
sideEffectRoll: effectIndex,
sideEffectText: HARVEST_SIDE_EFFECTS[effectIndex],
sleeperLabel: data.sleeperLabel?.trim() || "Dormeur non précisé",
+ destinationLabel: destinationReserve.label,
+ stored: result.success,
}
return this.#createChatMessage(actor, result)
@@ -1129,17 +1184,20 @@ export class LesOubliesRolls {
const polarityLabel = spell.system.polarity === "cauchemar"
? game.i18n.localize("LESOUBLIES.ui.cauchemar")
: game.i18n.localize("LESOUBLIES.ui.songes")
+ const threadReserves = this.#getThreadDialogState(actor)
const content = await foundry.applications.handlebars.renderTemplate(
- "systems/fvtt-les-oublies/templates/dialog-spell-activation.hbs",
+ "systems/fvtt-les-oublies/templates/dialog-spell-activation-v2.hbs",
{
actor,
spell,
resources: this.#getDialogResources(actor),
+ threadReserves,
isMetierMatch,
effectiveCostLabel: `${effectiveCost} point${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`,
values: {
actualCost: Number(spell.system.cost ?? 0),
paymentMode: "points",
+ paymentSource: "actor",
targetLabel: "",
notes: "",
},
@@ -1151,6 +1209,9 @@ export class LesOubliesRolls {
title: `Activer ${spell.name}`,
},
content,
+ render: (_event, dialog) => {
+ this.#bindSpellPaymentSelection(dialog, { actor, spell, effectiveCost })
+ },
buttons: [
{
action: "activate",
@@ -1161,8 +1222,9 @@ export class LesOubliesRolls {
if (!form) return null
const data = this.#formToObject(form)
return {
- actualCost: Number(data.actualCost ?? spell.system.cost ?? 0),
+ actualCost: Math.max(Number(data.actualCost ?? spell.system.cost ?? 0), 0),
paymentMode: String(data.paymentMode || "points"),
+ paymentSource: String(data.paymentSource || "actor"),
targetLabel: String(data.targetLabel || ""),
notes: String(data.notes || ""),
}
@@ -1338,16 +1400,19 @@ export class LesOubliesRolls {
}
static async #promptThreadHarvestOptions(actor) {
+ const threadReserves = this.#getThreadDialogState(actor)
const content = await foundry.applications.handlebars.renderTemplate(
- "systems/fvtt-les-oublies/templates/dialog-thread-harvest.hbs",
+ "systems/fvtt-les-oublies/templates/dialog-thread-harvest-v2.hbs",
{
actor,
rollModes: this.getRollModes(),
extraDieModes: this.getExtraDieModes(),
resources: this.#getDialogResources(actor),
+ threadReserves,
values: {
threadType: "songes",
threadCount: 1,
+ destinationSource: "actor",
rollMode: this.getDefaultRollMode(actor),
extraDie: "",
sleeperLabel: "",
@@ -1373,6 +1438,7 @@ export class LesOubliesRolls {
return {
threadType: String(data.threadType || "songes"),
threadCount: Number(data.threadCount ?? 1),
+ destinationSource: String(data.destinationSource || "actor"),
rollMode: String(data.rollMode || this.getDefaultRollMode(actor)),
extraDie: String(data.extraDie || ""),
sleeperLabel: String(data.sleeperLabel || ""),
@@ -1443,12 +1509,14 @@ export class LesOubliesRolls {
static async #rollExplodingDie({ type, index, source = "base" }) {
const faces = []
+ const rolls = []
let total = 0
let lastFace = 12
while (lastFace === 12) {
- const roll = await (new Roll("1d12")).evaluate()
+ const roll = await this.#evaluateDisplayedRoll("1d12")
lastFace = Number(roll.total ?? 0)
+ rolls.push(roll)
faces.push(lastFace)
total += lastFace
}
@@ -1461,6 +1529,7 @@ export class LesOubliesRolls {
source,
sourceLabel: source === "extra" ? game.i18n.localize("LESOUBLIES.rolls.extraDie") : null,
faces,
+ rolls,
firstFace: faces[0] ?? 0,
total,
exploded: faces.length > 1,
@@ -1468,6 +1537,39 @@ export class LesOubliesRolls {
}
}
+ static async #evaluateDisplayedRoll(formula) {
+ const roll = await (new Roll(formula)).evaluate()
+ await this.#showDiceSoNice(roll)
+ return roll
+ }
+
+ static async #showDiceSoNice(roll) {
+ if (!game.modules.get("dice-so-nice")?.active) return
+ if (!game.dice3d?.showForRoll) return
+
+ const coreRollMode = game.settings.get("core", "rollMode")
+ let whisper = null
+ let blind = false
+
+ switch (coreRollMode) {
+ case "blindroll":
+ blind = true
+ case "gmroll":
+ whisper = ChatMessage.getWhisperRecipients("GM").map((user) => user.id)
+ break
+ case "selfroll":
+ whisper = [game.user.id]
+ break
+ case "publicroll":
+ case "roll":
+ default:
+ whisper = null
+ break
+ }
+
+ await game.dice3d.showForRoll(roll, game.user, true, whisper, blind)
+ }
+
static #needsSelection(dice) {
return new Set(dice.map((die) => die.type)).size > 1
}
@@ -1571,9 +1673,106 @@ export class LesOubliesRolls {
songesPoints: Number(context.system.songes?.points ?? 0),
cauchemarValue: Number(context.system.cauchemar?.value ?? 0),
cauchemarPoints: Number(context.system.cauchemar?.points ?? 0),
+ songesThreads: Number(context.system.reserves?.songesThreads ?? 0),
+ cauchemarThreads: Number(context.system.reserves?.cauchemarThreads ?? 0),
+ emptyGlobes: Number(context.system.reserves?.emptyGlobes ?? 0),
}
}
+ static #normalizeThreadReserveSource(source) {
+ return ["company", "compagnie"].includes(String(source || "").toLowerCase()) ? "company" : "actor"
+ }
+
+ static #getThreadReserveOwner(actor, source = "actor") {
+ return this.#normalizeThreadReserveSource(source) === "company"
+ ? actor?.getCompagnie?.() ?? null
+ : actor
+ }
+
+ static #getThreadReserveLabel(actor, source = "actor") {
+ const normalized = this.#normalizeThreadReserveSource(source)
+ if (normalized === "actor") return "Réserve personnelle"
+ const company = this.#getThreadReserveOwner(actor, normalized)
+ return company ? `Réserve de compagnie — ${company.name}` : "Réserve de compagnie"
+ }
+
+ static #getThreadResourceKey(polarity) {
+ return polarity === "cauchemar" ? "cauchemarThreads" : "songesThreads"
+ }
+
+ static #getThreadReserveState(actor, source = "actor") {
+ const owner = this.#getThreadReserveOwner(actor, source)
+ return {
+ owner,
+ source: this.#normalizeThreadReserveSource(source),
+ label: this.#getThreadReserveLabel(actor, source),
+ songesThreads: Math.max(Number(owner?.system?.reserves?.songesThreads ?? 0), 0),
+ cauchemarThreads: Math.max(Number(owner?.system?.reserves?.cauchemarThreads ?? 0), 0),
+ emptyGlobes: Math.max(Number(owner?.system?.reserves?.emptyGlobes ?? 0), 0),
+ }
+ }
+
+ static #getThreadDialogState(actor) {
+ const actorReserve = this.#getThreadReserveState(actor, "actor")
+ const companyReserve = this.#getThreadReserveState(actor, "company")
+ const options = [
+ { value: "actor", label: actorReserve.label },
+ ]
+ if (companyReserve.owner) options.push({ value: "company", label: companyReserve.label })
+ return {
+ actor: actorReserve,
+ company: companyReserve,
+ options,
+ hasCompany: Boolean(companyReserve.owner),
+ }
+ }
+
+ static async #storeHarvestedThreads(actor, destinationSource, threadType, threadCount) {
+ const reserve = this.#getThreadReserveState(actor, destinationSource)
+ if (!reserve.owner || threadCount < 1) return false
+ const resourceKey = this.#getThreadResourceKey(threadType)
+ await reserve.owner.update({
+ [`system.reserves.${resourceKey}`]: Number(reserve[resourceKey] ?? 0) + threadCount,
+ "system.reserves.emptyGlobes": Math.max(Number(reserve.emptyGlobes ?? 0) - threadCount, 0),
+ })
+ return true
+ }
+
+ static #bindSpellPaymentSelection(dialog, { actor, spell, effectiveCost }) {
+ const root = this.#getDialogElement(dialog)
+ const form = root?.querySelector("form")
+ if (!form) return
+
+ const modeField = form.elements.namedItem("paymentMode")
+ const sourceField = form.elements.namedItem("paymentSource")
+ const effectiveCostField = root.querySelector("[data-effective-cost]")
+ const sourceWrapper = root.querySelector("[data-payment-source]")
+ const sourceHint = root.querySelector("[data-payment-source-hint]")
+
+ const update = () => {
+ const paymentMode = modeField instanceof HTMLSelectElement ? String(modeField.value || "points") : "points"
+ const paymentSource = sourceField instanceof HTMLSelectElement ? String(sourceField.value || "actor") : "actor"
+ const polarityLabel = spell.system.polarity === "cauchemar" ? "Cauchemar" : "Songes"
+ if (effectiveCostField instanceof HTMLInputElement) {
+ effectiveCostField.value = paymentMode === "points"
+ ? `${effectiveCost} point${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`
+ : `${effectiveCost} fil${effectiveCost > 1 ? "s" : ""} de ${polarityLabel}`
+ }
+ if (sourceWrapper instanceof HTMLElement) {
+ sourceWrapper.hidden = paymentMode !== "fils"
+ }
+ if (sourceHint instanceof HTMLElement) {
+ sourceHint.textContent = paymentMode === "fils"
+ ? `${this.#getThreadReserveLabel(actor, paymentSource)} utilisée. Les globes vidés y retournent automatiquement.`
+ : "La dépense se fait dans les points de Songes ou de Cauchemar du personnage."
+ }
+ }
+
+ if (modeField instanceof HTMLSelectElement) modeField.addEventListener("change", update)
+ if (sourceField instanceof HTMLSelectElement) sourceField.addEventListener("change", update)
+ update()
+ }
+
static #createSpentResource(extraDie) {
if (!extraDie) return null
return {
diff --git a/modules/les-oublies-utility.js b/modules/les-oublies-utility.js
index 0ccc8e1..9251d6c 100644
--- a/modules/les-oublies-utility.js
+++ b/modules/les-oublies-utility.js
@@ -97,6 +97,12 @@ export class LesOubliesUtility {
return [...documents].sort((left, right) => left.name.localeCompare(right.name, "fr"))
}
+ static uniqueStrings(values = []) {
+ return [...new Set((Array.isArray(values) ? values : [])
+ .map((value) => String(value ?? "").trim())
+ .filter(Boolean))]
+ }
+
static async prepareEnrichedHtml(documentName, type, systemData) {
const htmlFields = game.system.documentTypes?.[documentName]?.[type]?.htmlFields ?? []
const enriched = {}
diff --git a/modules/models/compagnie.mjs b/modules/models/compagnie.mjs
index 074ce3a..bd55e82 100644
--- a/modules/models/compagnie.mjs
+++ b/modules/models/compagnie.mjs
@@ -21,6 +21,11 @@ export default class CompagnieDataModel extends foundry.abstract.TypeDataModel {
label: new fields.StringField({ initial: "" }),
details: new fields.StringField({ initial: "" }),
}), { initial: [] }),
+ reserves: new fields.SchemaField({
+ songesThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ cauchemarThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ emptyGlobes: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ }),
}
}
}
diff --git a/modules/models/personnage.mjs b/modules/models/personnage.mjs
index 725dd8f..91e793d 100644
--- a/modules/models/personnage.mjs
+++ b/modules/models/personnage.mjs
@@ -56,6 +56,11 @@ export default class PersonnageDataModel extends foundry.abstract.TypeDataModel
money: new fields.SchemaField({
ecorces: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
}),
+ reserves: new fields.SchemaField({
+ songesThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ cauchemarThreads: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ emptyGlobes: new fields.NumberField({ initial: 0, integer: true, min: 0 }),
+ }),
flagsNarratifs: new fields.SchemaField({
ombreDuTourment: new fields.BooleanField({ initial: false }),
isCaptain: new fields.BooleanField({ initial: false }),
diff --git a/packs/armes/000003.log b/packs/armes/000003.log
deleted file mode 100644
index 582ccc8..0000000
Binary files a/packs/armes/000003.log and /dev/null differ
diff --git a/packs/armes/000007.log b/packs/armes/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/armes/000009.ldb b/packs/armes/000009.ldb
new file mode 100644
index 0000000..a44c975
Binary files /dev/null and b/packs/armes/000009.ldb differ
diff --git a/packs/armes/LOG b/packs/armes/LOG
index 758a6be..c47050d 100644
--- a/packs/armes/LOG
+++ b/packs/armes/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.428719 7f25c15fe6c0 Delete type=3 #1
+2026/05/04-08:07:36.049759 7ff4349fd6c0 Delete type=3 #1
diff --git a/packs/armes/MANIFEST-000002 b/packs/armes/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/armes/MANIFEST-000002 and /dev/null differ
diff --git a/packs/armures/000003.log b/packs/armures/000003.log
deleted file mode 100644
index b3fad41..0000000
Binary files a/packs/armures/000003.log and /dev/null differ
diff --git a/packs/armures/000007.log b/packs/armures/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/armures/000009.ldb b/packs/armures/000009.ldb
new file mode 100644
index 0000000..c02a216
Binary files /dev/null and b/packs/armures/000009.ldb differ
diff --git a/packs/armures/LOG b/packs/armures/LOG
index 671d2ce..409e851 100644
--- a/packs/armures/LOG
+++ b/packs/armures/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.445629 7f2577fff6c0 Delete type=3 #1
+2026/05/04-08:07:36.080095 7ff3e7fff6c0 Delete type=3 #1
diff --git a/packs/armures/MANIFEST-000002 b/packs/armures/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/armures/MANIFEST-000002 and /dev/null differ
diff --git a/packs/competences/000003.log b/packs/competences/000003.log
deleted file mode 100644
index efc2271..0000000
Binary files a/packs/competences/000003.log and /dev/null differ
diff --git a/packs/competences/000007.log b/packs/competences/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/competences/000009.ldb b/packs/competences/000009.ldb
new file mode 100644
index 0000000..aa99b8b
Binary files /dev/null and b/packs/competences/000009.ldb differ
diff --git a/packs/competences/LOG b/packs/competences/LOG
index 9e7981b..bf67512 100644
--- a/packs/competences/LOG
+++ b/packs/competences/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.492466 7f25c15fe6c0 Delete type=3 #1
+2026/05/04-08:07:36.144804 7ff4349fd6c0 Delete type=3 #1
diff --git a/packs/competences/MANIFEST-000002 b/packs/competences/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/competences/MANIFEST-000002 and /dev/null differ
diff --git a/packs/equipements/000003.log b/packs/equipements/000003.log
deleted file mode 100644
index 72a5f14..0000000
Binary files a/packs/equipements/000003.log and /dev/null differ
diff --git a/packs/equipements/000007.log b/packs/equipements/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/equipements/000009.ldb b/packs/equipements/000009.ldb
new file mode 100644
index 0000000..12651e0
Binary files /dev/null and b/packs/equipements/000009.ldb differ
diff --git a/packs/equipements/LOG b/packs/equipements/LOG
index 10ccbe0..039ef9c 100644
--- a/packs/equipements/LOG
+++ b/packs/equipements/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.461618 7f25c1dff6c0 Delete type=3 #1
+2026/05/04-08:07:36.101347 7ff4359ff6c0 Delete type=3 #1
diff --git a/packs/equipements/MANIFEST-000002 b/packs/equipements/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/equipements/MANIFEST-000002 and /dev/null differ
diff --git a/packs/metiers/000003.log b/packs/metiers/000003.log
deleted file mode 100644
index 19bd26f..0000000
Binary files a/packs/metiers/000003.log and /dev/null differ
diff --git a/packs/metiers/000007.log b/packs/metiers/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/metiers/000009.ldb b/packs/metiers/000009.ldb
new file mode 100644
index 0000000..fa7ea03
Binary files /dev/null and b/packs/metiers/000009.ldb differ
diff --git a/packs/metiers/LOG b/packs/metiers/LOG
index 5282c63..52845e2 100644
--- a/packs/metiers/LOG
+++ b/packs/metiers/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.538848 7f25c0dfd6c0 Delete type=3 #1
+2026/05/04-08:07:36.206891 7ff4351fe6c0 Delete type=3 #1
diff --git a/packs/metiers/MANIFEST-000002 b/packs/metiers/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/metiers/MANIFEST-000002 and /dev/null differ
diff --git a/packs/pouvoirs-compagnie/000003.log b/packs/pouvoirs-compagnie/000003.log
deleted file mode 100644
index 0b9d2b7..0000000
Binary files a/packs/pouvoirs-compagnie/000003.log and /dev/null differ
diff --git a/packs/pouvoirs-compagnie/000007.log b/packs/pouvoirs-compagnie/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/pouvoirs-compagnie/000009.ldb b/packs/pouvoirs-compagnie/000009.ldb
new file mode 100644
index 0000000..9f5d0d4
Binary files /dev/null and b/packs/pouvoirs-compagnie/000009.ldb differ
diff --git a/packs/pouvoirs-compagnie/LOG b/packs/pouvoirs-compagnie/LOG
index 7375a2d..ea31773 100644
--- a/packs/pouvoirs-compagnie/LOG
+++ b/packs/pouvoirs-compagnie/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.476671 7f25c0dfd6c0 Delete type=3 #1
+2026/05/04-08:07:36.123812 7ff4351fe6c0 Delete type=3 #1
diff --git a/packs/pouvoirs-compagnie/MANIFEST-000002 b/packs/pouvoirs-compagnie/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/pouvoirs-compagnie/MANIFEST-000002 and /dev/null differ
diff --git a/packs/races/000003.log b/packs/races/000003.log
deleted file mode 100644
index 4f2c391..0000000
Binary files a/packs/races/000003.log and /dev/null differ
diff --git a/packs/races/000007.log b/packs/races/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/races/000009.ldb b/packs/races/000009.ldb
new file mode 100644
index 0000000..a3ce1d6
Binary files /dev/null and b/packs/races/000009.ldb differ
diff --git a/packs/races/LOG b/packs/races/LOG
index 0e1e14c..dc14cba 100644
--- a/packs/races/LOG
+++ b/packs/races/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.509155 7f2577fff6c0 Delete type=3 #1
+2026/05/04-08:07:36.166025 7ff3e7fff6c0 Delete type=3 #1
diff --git a/packs/races/MANIFEST-000002 b/packs/races/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/races/MANIFEST-000002 and /dev/null differ
diff --git a/packs/sortileges/000003.log b/packs/sortileges/000003.log
deleted file mode 100644
index 6a169ac..0000000
Binary files a/packs/sortileges/000003.log and /dev/null differ
diff --git a/packs/sortileges/000007.log b/packs/sortileges/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/sortileges/000009.ldb b/packs/sortileges/000009.ldb
new file mode 100644
index 0000000..1000989
Binary files /dev/null and b/packs/sortileges/000009.ldb differ
diff --git a/packs/sortileges/LOG b/packs/sortileges/LOG
index 800afdc..3878286 100644
--- a/packs/sortileges/LOG
+++ b/packs/sortileges/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.554628 7f25c15fe6c0 Delete type=3 #1
+2026/05/04-08:07:36.229139 7ff4349fd6c0 Delete type=3 #1
diff --git a/packs/sortileges/MANIFEST-000002 b/packs/sortileges/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/sortileges/MANIFEST-000002 and /dev/null differ
diff --git a/packs/tribus/000003.log b/packs/tribus/000003.log
deleted file mode 100644
index e2ccc48..0000000
Binary files a/packs/tribus/000003.log and /dev/null differ
diff --git a/packs/tribus/000007.log b/packs/tribus/000007.log
new file mode 100644
index 0000000..e69de29
diff --git a/packs/tribus/000009.ldb b/packs/tribus/000009.ldb
new file mode 100644
index 0000000..9eaea43
Binary files /dev/null and b/packs/tribus/000009.ldb differ
diff --git a/packs/tribus/LOG b/packs/tribus/LOG
index 1ccac27..0a6cdea 100644
--- a/packs/tribus/LOG
+++ b/packs/tribus/LOG
@@ -1 +1 @@
-2026/05/03-20:13:00.523663 7f25c1dff6c0 Delete type=3 #1
+2026/05/04-08:07:36.186743 7ff4359ff6c0 Delete type=3 #1
diff --git a/packs/tribus/MANIFEST-000002 b/packs/tribus/MANIFEST-000002
deleted file mode 100644
index bbbc585..0000000
Binary files a/packs/tribus/MANIFEST-000002 and /dev/null differ
diff --git a/templates/actor-compagnie-sheet-v5.hbs b/templates/actor-compagnie-sheet-v5.hbs
new file mode 100644
index 0000000..1756f34
--- /dev/null
+++ b/templates/actor-compagnie-sheet-v5.hbs
@@ -0,0 +1,128 @@
+ Sélectionnez le capitaine et l'ombre du tourment parmi les personnages du monde. Capitaine : {{captain.name}} Ombre : {{shadow.name}} {{localize "LESOUBLIES.ui.readOnlyCollection"}} {{slot.label}} Liez une compagnie pour gérer une réserve commune de fils et de globes. Les dépenses en fils rendent automatiquement autant de globes vides à la réserve utilisée. {{localize "LESOUBLIES.labels.compagnie"}} : {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}—{{/if}} {{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} : {{activeCompanyPower.name}} — {{activeCompanyPower.system.activationCondition}} Aucune arme équipée. {{slot.label}} {{localize "LESOUBLIES.labels.compagnie"}} : {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}—{{/if}} {{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} : {{activeCompanyPower.name}} — {{activeCompanyPower.system.activationCondition}} Aucune arme équipée. Liez une compagnie pour gérer une réserve commune de fils et de globes. Les dépenses en fils rendent automatiquement autant de globes vides à la réserve utilisée. {{slot.label}} {{localize "LESOUBLIES.labels.compagnie"}} : {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}—{{/if}} {{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} : {{activeCompanyPower.name}} — {{activeCompanyPower.system.activationCondition}} Aucune arme équipée. Liez une compagnie pour gérer une réserve commune de fils et de globes. Les dépenses en fils rendent automatiquement autant de globes vides à la réserve utilisée. {{slot.label}} {{localize "LESOUBLIES.labels.compagnie"}} : {{#if derived.compagnie}}{{derived.compagnie.name}}{{else}}—{{/if}} {{localize "LESOUBLIES.labels.pouvoirCompagnieActif"}} : {{activeCompanyPower.name}} — {{activeCompanyPower.system.activationCondition}} Aucune arme équipée. Liez une compagnie pour gérer une réserve commune de fils et de globes. Les dépenses en fils rendent automatiquement autant de globes vides à la réserve utilisée.
+
{{localize "LESOUBLIES.labels.pouvoir"}}
+ {{localize "LESOUBLIES.labels.threadReserves"}}
+ Items de pouvoir
+
+ {{localize "LESOUBLIES.ui.membres"}}
+
+ {{#each members as |member|}}
+
+ {{localize "LESOUBLIES.labels.liensNarratifs"}}
+
+ {{#each links as |link|}}
+
+ {{localize "LESOUBLIES.labels.description"}}
+ {{formInput systemFields.description enriched=enriched.description value=system.description name="system.description" toggled=true}}
+ {{localize "LESOUBLIES.labels.notes"}}
+ {{formInput systemFields.notes enriched=enriched.notes value=system.notes name="system.notes" toggled=true}}
+
+
{{localize "LESOUBLIES.ui.derivedOverview"}}
+ {{localize "LESOUBLIES.labels.threadReserves"}}
+ {{localize "LESOUBLIES.labels.personalReserve"}}
+ {{localize "LESOUBLIES.labels.companyReserve"}}
+ {{#if derived.compagnie}}
+ {{localize "LESOUBLIES.labels.compagnie"}}
+ {{localize "LESOUBLIES.ui.competences"}}
+
+ {{group.label}}
+
+ {{localize "LESOUBLIES.ui.combat"}}
+
+ {{localize "LESOUBLIES.ui.magie"}}
+
+ {{localize "LESOUBLIES.ui.equipement"}}
+
+ {{localize "LESOUBLIES.labels.identite"}}
+ {{localize "LESOUBLIES.ui.notes"}}
+
+ {{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
+
+ {{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
+
+
{{localize "LESOUBLIES.ui.derivedOverview"}}
+ {{localize "LESOUBLIES.labels.compagnie"}}
+ {{localize "LESOUBLIES.ui.competences"}}
+
+ {{group.label}}
+
+ {{localize "LESOUBLIES.ui.combat"}}
+
+ {{localize "LESOUBLIES.ui.magie"}}
+
+ {{localize "LESOUBLIES.labels.threadReserves"}}
+ {{localize "LESOUBLIES.labels.personalReserve"}}
+ {{localize "LESOUBLIES.labels.companyReserve"}}
+ {{#if derived.compagnie}}
+ {{localize "LESOUBLIES.ui.equipement"}}
+
+ {{localize "LESOUBLIES.labels.identite"}}
+ {{localize "LESOUBLIES.ui.notes"}}
+
+ {{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
+
+ {{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
+
+
{{localize "LESOUBLIES.ui.derivedOverview"}}
+ {{localize "LESOUBLIES.labels.compagnie"}}
+ {{localize "LESOUBLIES.ui.competences"}}
+
+ {{group.label}}
+
+ {{localize "LESOUBLIES.ui.combat"}}
+
+ {{localize "LESOUBLIES.ui.magie"}}
+
+ {{localize "LESOUBLIES.labels.threadReserves"}}
+ {{localize "LESOUBLIES.labels.personalReserve"}}
+ {{localize "LESOUBLIES.labels.companyReserve"}}
+ {{#if derived.compagnie}}
+ {{localize "LESOUBLIES.ui.equipement"}}
+
+ {{localize "LESOUBLIES.labels.identite"}}
+ {{localize "LESOUBLIES.ui.notes"}}
+
+ {{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
+
+ {{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
+
+
{{localize "LESOUBLIES.ui.derivedOverview"}}
+ {{localize "LESOUBLIES.labels.compagnie"}}
+ {{localize "LESOUBLIES.ui.competences"}}
+
+ {{group.label}}
+
+ {{localize "LESOUBLIES.ui.combat"}}
+
+ {{localize "LESOUBLIES.ui.magie"}}
+
+ {{localize "LESOUBLIES.labels.threadReserves"}}
+
+ {{localize "LESOUBLIES.labels.personalReserve"}}
+ {{localize "LESOUBLIES.labels.companyReserve"}}
+ {{#if derived.compagnie}}
+ {{localize "LESOUBLIES.ui.equipement"}}
+
+ {{localize "LESOUBLIES.labels.identite"}}
+ {{localize "LESOUBLIES.ui.notes"}}
+
+ {{formInput systemFields.biodata.fields.description enriched=enriched.biodata.description value=system.biodata.description name="system.biodata.description" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.notes enriched=enriched.biodata.notes value=system.biodata.notes name="system.biodata.notes" toggled=true}}
+
+ {{formInput systemFields.biodata.fields.gmnotes enriched=enriched.biodata.gmnotes value=system.biodata.gmnotes name="system.biodata.gmnotes" toggled=true}}
+
+ {{formInput systemFields.visions enriched=enriched.visions value=system.visions name="system.visions" toggled=true}}
+
{{#if isMetierMatch}}Le métier de l'acteur couvre ce sortilège : le coût de base s'applique.{{else}}Le métier de l'acteur ne couvre pas ce sortilège : le coût est doublé conformément aux règles.{{/if}}
+{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}
+Réserve perso : Songes {{threadReserves.actor.songesThreads}} · Cauchemar {{threadReserves.actor.cauchemarThreads}} · Globes vides {{threadReserves.actor.emptyGlobes}}
+ {{#if threadReserves.hasCompany}} +{{threadReserves.company.label}} : Songes {{threadReserves.company.songesThreads}} · Cauchemar {{threadReserves.company.cauchemarThreads}} · Globes vides {{threadReserves.company.emptyGlobes}}
+ {{/if}} +La dépense se fait dans les points de Songes ou de Cauchemar du personnage.
+Difficulté : -3 par fil supplémentaire. Dégâts subis : 1 par fil souhaité. En cas d'échec, plus aucune récolte possible sur ce dormeur cette nuit.
+{{localize "LESOUBLIES.rolls.resourceState"}} : Songes {{resources.songesPoints}} / {{resources.songesValue}} · Cauchemar {{resources.cauchemarPoints}} / {{resources.cauchemarValue}}
+Réserve perso : Songes {{threadReserves.actor.songesThreads}} · Cauchemar {{threadReserves.actor.cauchemarThreads}} · Globes vides {{threadReserves.actor.emptyGlobes}}
+ {{#if threadReserves.hasCompany}} +{{threadReserves.company.label}} : Songes {{threadReserves.company.songesThreads}} · Cauchemar {{threadReserves.company.cauchemarThreads}} · Globes vides {{threadReserves.company.emptyGlobes}}
+ {{/if}} +Savoir-faire
+ + +