v.0.0.16
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 104 KiB |
|
After Width: | Height: | Size: 135 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 111 KiB |
|
After Width: | Height: | Size: 275 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 124 KiB |
|
After Width: | Height: | Size: 128 KiB |
|
After Width: | Height: | Size: 98 KiB |
|
After Width: | Height: | Size: 144 KiB |
|
After Width: | Height: | Size: 101 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 120 KiB |
|
After Width: | Height: | Size: 116 KiB |
|
After Width: | Height: | Size: 121 KiB |
|
After Width: | Height: | Size: 94 KiB |
|
After Width: | Height: | Size: 95 KiB |
|
After Width: | Height: | Size: 103 KiB |
|
After Width: | Height: | Size: 126 KiB |
@@ -1,4 +1,16 @@
|
|||||||
{
|
{
|
||||||
|
"SETTINGS": {
|
||||||
|
"world": {
|
||||||
|
"game_mode": {
|
||||||
|
"name":"Choix du mode de jeu",
|
||||||
|
"hint":"À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers."
|
||||||
|
},
|
||||||
|
"first_run": {
|
||||||
|
"name":"Affichage du tour d'accueil",
|
||||||
|
"hint":"Pour aider les débutantEs à bien commencer avec le système Vermine 2047."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"VERMINE.WorldSettings.GameMode.Name":"Choix du mode de jeu",
|
"VERMINE.WorldSettings.GameMode.Name":"Choix du mode de jeu",
|
||||||
"VERMINE.WorldSettings.GameMode.Hint":"À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers.",
|
"VERMINE.WorldSettings.GameMode.Hint":"À l’image de certains jeux vidéo proposant différents, Vermine 2047 permet aux joueurs de choisir leur Mode de jeu et de fixer eux-mêmes le degré de réalisme, de surnaturel et de dangerosité de l’univers.",
|
||||||
"GAME_MODES": {
|
"GAME_MODES": {
|
||||||
@@ -8,6 +20,26 @@
|
|||||||
},
|
},
|
||||||
"VERMINE.roll_tool": "Lanceur de dés",
|
"VERMINE.roll_tool": "Lanceur de dés",
|
||||||
"VERMINE.roll_dice": "Jeter les dés",
|
"VERMINE.roll_dice": "Jeter les dés",
|
||||||
|
"TOURS": {
|
||||||
|
"ChatMessage": "<h3>Bienvenue dans Vermine!</h3><p>Si vous utilisez ce système pour la première fois, notre shaman va vous guider vers votre rite d'initiation</p> <button id=\"vermine-tour-chat-button\"> <i class=\"fas fa-person-hiking\"></i> J'y vais mais j'ai peur </button>",
|
||||||
|
"Welcome": {
|
||||||
|
"Title": "Bienvenue dans Vermine",
|
||||||
|
"Description": "Aperçu du système Vermine",
|
||||||
|
"WelcomeTitle": "Bienvenue",
|
||||||
|
"WelcomeContent": "<p>Bienvenue dans Vermine, survivantE ! Faire le tour de notre zone d'action te permettre de retrouver tes marques, même si c'est ton premier jour parmi nous.</p><p>En haut de la colonne de droite, tu as tout ce que tu as le droit de faire chez nous : parler, voir les autres tronches de ta commu, gérer ton matos et celui de tes potes, étudier les cartes, lire les journaux des clamsés, aller nous chercher de la bouffe à coups de surin. Entrons dans le vif du sujet.</p>",
|
||||||
|
"ActorTabTitle": "Peupler son univers",
|
||||||
|
"ActorTabContent": "<p>Bien installéE, survivantE ? Tournons pas au tour du pot, si tu veux rester avec nous, va falloir nous dire qui tu es, d'où tu viens, et à qui tu fais confiance. Une fois que t'es prêtE pour ca, clique donc sur le bouton \"Créer un acteur\"</p>",
|
||||||
|
"CharacterCreateTitle": "Créer un groupe",
|
||||||
|
"CharacterCreateContent": "<p>Ce bouton crée une fiche de groupe, parce que c'est par là qu'on commence, dans ce trou ! Ta tronche viendra ensuite, quand tu créeras ta fiche de personnage. Au fur et à mesure que tu progresses, tu voudras peut-être rajouter des infos sur ce que tu vois trainer autour du camp.</p>",
|
||||||
|
"CompendiumTitle": "Cartes",
|
||||||
|
"CompendiumContent": "<p>Vous aurez probablement besoin d'une carte des Terres de Fer ou d'un secteur de la Forge. Vous pouvez créer votre propre scène pour cela, ou vous pouvez utiliser l'une des nôtres. Ouvrez l'un de ces compendiums et faites glisser une carte dans votre zone de scènes (l'onglet qui ressemble à une carte pliée).</p>",
|
||||||
|
"OracleToolTitle": "Totem",
|
||||||
|
"OracleToolContent": "<p>Aucune partie d'Vermine ou Starforged ne serait complète sans oracles. Ce bouton fera apparaître une fenêtre avec tous les oracles du jeu choisi. Les oracles sont également disponibles depuis la fiche de personnage.</p>",
|
||||||
|
"ToursTitle": "Prochaines étapes",
|
||||||
|
"ToursContent": "<p>Tu t'en sors pas si mal ! Moi je vais te laisser là, mais si tu as d'autres questions, tu peux venir me trouver. Si ca concerne la mécanique, inscris-toi dans notre groupe de parole, par là <a href=\"https://discord.gg/FqGHYvXg\">Totem Foundry Discord</a>. Sinon, tu peux rejoindre la place centrale par ici <a href=\"https://discord.gg/qejqmSxr\">Vermine Discord</a></p><p>Enjoy!</p>"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
"IDENTITY": {
|
"IDENTITY": {
|
||||||
"name": "Nom",
|
"name": "Nom",
|
||||||
"height": "Taille",
|
"height": "Taille",
|
||||||
@@ -25,6 +57,7 @@
|
|||||||
"notes": "Notes"
|
"notes": "Notes"
|
||||||
},
|
},
|
||||||
"VERMINE": {
|
"VERMINE": {
|
||||||
|
"name": "Vermine",
|
||||||
"stats": "Statistiques",
|
"stats": "Statistiques",
|
||||||
"level": "Niveau",
|
"level": "Niveau",
|
||||||
"experience": "Expérience",
|
"experience": "Expérience",
|
||||||
@@ -73,7 +106,11 @@
|
|||||||
"information": "Informations",
|
"information": "Informations",
|
||||||
"boost": "boost",
|
"boost": "boost",
|
||||||
"group_abilities": "Capacités de groupe",
|
"group_abilities": "Capacités de groupe",
|
||||||
"totem_abilities": "Capacités de totem"
|
"totem_abilities": "Capacités de totem",
|
||||||
|
"type_group": "Groupe",
|
||||||
|
"type_character": "Personnage",
|
||||||
|
"type_npc": "PNJ",
|
||||||
|
"type_creature": "Créature"
|
||||||
},
|
},
|
||||||
"ITEMS": {
|
"ITEMS": {
|
||||||
"defense": "Protection",
|
"defense": "Protection",
|
||||||
|
|||||||
@@ -156,9 +156,6 @@ export class VermineCharacterSheet extends VermineActorSheet {
|
|||||||
// Active Effect management
|
// Active Effect management
|
||||||
html.find(".effect-control").click(ev => onManageActiveEffect(ev, this.actor));
|
html.find(".effect-control").click(ev => onManageActiveEffect(ev, this.actor));
|
||||||
|
|
||||||
// test print dice
|
|
||||||
// html.find(".skill").change(ev => this.printSkillLevels(ev, this.actor));
|
|
||||||
|
|
||||||
// Rollable abilities.
|
// Rollable abilities.
|
||||||
html.find('.rollable').click(this._onRoll.bind(this));
|
html.find('.rollable').click(this._onRoll.bind(this));
|
||||||
|
|
||||||
@@ -173,17 +170,6 @@ export class VermineCharacterSheet extends VermineActorSheet {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*printSkillLevels(event){
|
|
||||||
const newLevel = event.target.value;
|
|
||||||
const levelData = CONFIG.VERMINE.SkillLevels[newLevel] || null;
|
|
||||||
if (levelData != null){
|
|
||||||
console.log(/*levelData.dicePool, levelData.reroll, game.i18n.localize(levelData.label), * /$(event.target).parent().find('.die.pool').get(0), $(event.target).parent().find('.die.reroll').get(0));
|
|
||||||
$(event.target).parent().find('.die.pool').text(levelData.dicePool);
|
|
||||||
$(event.target).parent().find('.die.reroll').text(levelData.reroll);
|
|
||||||
}
|
|
||||||
|
|
||||||
} */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset
|
* Handle creating a new Owned Item for the actor using initial data defined in the HTML dataset
|
||||||
* @param {Event} event The originating click event
|
* @param {Event} event The originating click event
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
import { registerTours } from "./tour.mjs";
|
||||||
|
|
||||||
export const registerHooks = function () {
|
export const registerHooks = function () {
|
||||||
/**
|
/**
|
||||||
@@ -6,6 +7,7 @@ export const registerHooks = function () {
|
|||||||
|
|
||||||
Hooks.once("ready", async () => {
|
Hooks.once("ready", async () => {
|
||||||
console.info("Vermine 2047 | System Initialized.");
|
console.info("Vermine 2047 | System Initialized.");
|
||||||
|
await registerTours();
|
||||||
});
|
});
|
||||||
|
|
||||||
// changement de la pause
|
// changement de la pause
|
||||||
@@ -58,7 +60,7 @@ export const registerHooks = function () {
|
|||||||
|
|
||||||
Hooks.on("preCreateItem", function (item) {
|
Hooks.on("preCreateItem", function (item) {
|
||||||
if (item.img == "icons/svg/item-bag.svg") {
|
if (item.img == "icons/svg/item-bag.svg") {
|
||||||
item.updateSource({"img": `systems/vermine2047/icons/items/${item.type}.webp`});
|
item.updateSource({"img": `systems/vermine2047/assets/icons/items/${item.type}.webp`});
|
||||||
// item.updateSource({"img": `systems/vermine2047/icons/competence.webp`});
|
// item.updateSource({"img": `systems/vermine2047/icons/competence.webp`});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
export const registerSettings = function () {
|
export const registerSettings = function () {
|
||||||
game.settings.register("vermine2047", "game-mode", {
|
game.settings.register("vermine2047", "game-mode", {
|
||||||
name: game.i18n.localize("VERMINE.WorldSettings.GameMode.Name"),
|
name: game.i18n.localize("SETTINGS.world.game_mode.name"),
|
||||||
hint: game.i18n.localize("VERMINE.WorldSettings.GameMode.Hint"),
|
hint: game.i18n.localize("SETTINGS.world.game_mode.hint"),
|
||||||
scope: "system",
|
scope: "system",
|
||||||
config: true,
|
config: true,
|
||||||
type: String,
|
type: String,
|
||||||
@@ -15,4 +15,13 @@ export const registerSettings = function () {
|
|||||||
// console.log(value);
|
// console.log(value);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
game.settings.register("vermine2047", "first-run-tips-shown", {
|
||||||
|
name: game.i18n.localize("SETTINGS.world.first_run.name"),
|
||||||
|
hint: game.i18n.localize("SETTINGS.world.first_run.hint"),
|
||||||
|
scope: "system",
|
||||||
|
config: true,
|
||||||
|
type: Boolean,
|
||||||
|
default: false
|
||||||
|
});
|
||||||
}
|
}
|
||||||
@@ -0,0 +1,157 @@
|
|||||||
|
function compact(array) {
|
||||||
|
var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
|
||||||
|
while (++index2 < length) {
|
||||||
|
var value2 = array[index2];
|
||||||
|
if (value2) {
|
||||||
|
result[resIndex++] = value2;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
class CreateActorDialog extends FormApplication {
|
||||||
|
constructor() {
|
||||||
|
super({});
|
||||||
|
}
|
||||||
|
async _updateObject() {
|
||||||
|
}
|
||||||
|
static get defaultOptions() {
|
||||||
|
return mergeObject(super.defaultOptions, {
|
||||||
|
title: game.i18n.format("DOCUMENT.Create", {
|
||||||
|
type: game.i18n.localize("DOCUMENT.Actor")
|
||||||
|
}),
|
||||||
|
template: "systems/vermine2047/templates/actor/create.hbs",
|
||||||
|
id: "new-actor-dialog",
|
||||||
|
resizable: false,
|
||||||
|
classes: ["vermine2047", "sheet", "new-actor"],
|
||||||
|
width: 650,
|
||||||
|
height: 200
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getData(_options) {
|
||||||
|
return {
|
||||||
|
// sfenabled: IronswornSettings.starforgedToolsEnabled
|
||||||
|
};
|
||||||
|
}
|
||||||
|
activateListeners(html) {
|
||||||
|
super.activateListeners(html);
|
||||||
|
html.find(".vermine__character__create").on("click", async (ev) => {
|
||||||
|
await this._characterCreate.call(this, ev);
|
||||||
|
});
|
||||||
|
html.find(".vermine__shared__create").on("click", async (ev) => {
|
||||||
|
await this._sharedCreate.call(this, ev);
|
||||||
|
});
|
||||||
|
html.find(".vermine__site__create").on("click", async (ev) => {
|
||||||
|
await this._siteCreate.call(this, ev);
|
||||||
|
});
|
||||||
|
html.find(".vermine__foe__create").on("click", async (ev) => {
|
||||||
|
await this._foeCreate.call(this, ev);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
class VermineTour extends Tour {
|
||||||
|
/** @override */
|
||||||
|
async _preStep() {
|
||||||
|
var _a2, _b, _c, _d, _e;
|
||||||
|
await super._preStep();
|
||||||
|
if ((_a2 = this.currentStep) == null ? void 0 : _a2.sidebarTab) {
|
||||||
|
await ((_b = ui.sidebar) == null ? void 0 : _b.activateTab(this.currentStep.sidebarTab));
|
||||||
|
}
|
||||||
|
if ((_c = this.currentStep) == null ? void 0 : _c.layer) {
|
||||||
|
const layer = canvas == null ? void 0 : canvas[this.currentStep.layer];
|
||||||
|
if (layer.active && this.currentStep.tool)
|
||||||
|
(_d = ui.controls) == null ? void 0 : _d.initialize({ tool: this.currentStep.tool });
|
||||||
|
else
|
||||||
|
layer.activate({ tool: this.currentStep.tool });
|
||||||
|
}
|
||||||
|
if (((_e = this.currentStep) == null ? void 0 : _e.hook) != null) {
|
||||||
|
await this.currentStep.hook();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class WelcomeTour extends VermineTour {
|
||||||
|
constructor() {
|
||||||
|
super({
|
||||||
|
title: "TOURS.Welcome.Title",
|
||||||
|
description: "TOURS.Welcome.Description",
|
||||||
|
canBeResumed: false,
|
||||||
|
display: true,
|
||||||
|
steps: []
|
||||||
|
});
|
||||||
|
}
|
||||||
|
get steps() {
|
||||||
|
var _a2;
|
||||||
|
return compact([
|
||||||
|
{
|
||||||
|
id: "welcome",
|
||||||
|
title: "TOURS.Welcome.WelcomeTitle",
|
||||||
|
content: "TOURS.Welcome.WelcomeContent"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "character-tab",
|
||||||
|
title: "TOURS.Welcome.ActorTabTitle",
|
||||||
|
content: "TOURS.Welcome.ActorTabContent",
|
||||||
|
sidebarTab: "actors",
|
||||||
|
selector: "#actors .create-document"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: "character-create",
|
||||||
|
title: "TOURS.Welcome.CharacterCreateTitle",
|
||||||
|
content: "TOURS.Welcome.CharacterCreateContent",
|
||||||
|
hook: async () => {
|
||||||
|
this.createActorDialog = new CreateActorDialog();
|
||||||
|
await this.createActorDialog.render(true);
|
||||||
|
await new Promise((r) => setTimeout(r, 100));
|
||||||
|
},
|
||||||
|
selector: "#new-actor-dialog #new-group"
|
||||||
|
},
|
||||||
|
/*{
|
||||||
|
id: "compendia",
|
||||||
|
title: "TOURS.Welcome.CompendiumTitle",
|
||||||
|
content: "TOURS.Welcome.CompendiumContent",
|
||||||
|
hook: async () => {
|
||||||
|
var _a3;
|
||||||
|
return await ((_a3 = this.createActorDialog) == null ? void 0 : _a3.close());
|
||||||
|
},
|
||||||
|
sidebarTab: "compendium",
|
||||||
|
selector: 'li[data-pack="vermine2047.verminescenes"]'
|
||||||
|
},*/
|
||||||
|
/*((_a2 = game.user) == null ? void 0 : _a2.viewedScene) && {
|
||||||
|
id: "oracletool",
|
||||||
|
title: "TOURS.Welcome.OracleToolTitle",
|
||||||
|
content: "TOURS.Welcome.OracleToolContent",
|
||||||
|
layer: "tokens",
|
||||||
|
selector: '[data-tool="Oracles"]'
|
||||||
|
},*/
|
||||||
|
{
|
||||||
|
id: "tours",
|
||||||
|
title: "TOURS.Welcome.ToursTitle",
|
||||||
|
content: "TOURS.Welcome.ToursContent",
|
||||||
|
hook: async () => {
|
||||||
|
var _a3;
|
||||||
|
return await ((_a3 = this.createActorDialog) == null ? void 0 : _a3.close());
|
||||||
|
},
|
||||||
|
sidebarTab: "settings",
|
||||||
|
selector: 'button[data-action="tours"]'
|
||||||
|
}
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
export async function registerTours() {
|
||||||
|
game.tours.register("vermine2047", "welcome", new WelcomeTour());
|
||||||
|
$(document).on("click", "#chat-log #vermine-tour-chat-button", (el) => {
|
||||||
|
const tour = game.tours.get("vermine2047.welcome");
|
||||||
|
tour == null ? void 0 : tour.start();
|
||||||
|
});
|
||||||
|
if (game.settings.get("vermine2047", "first-run-tips-shown"))
|
||||||
|
return;
|
||||||
|
console.log("Posting first-start messages...");
|
||||||
|
const gms = ChatMessage.getWhisperRecipients("GM");
|
||||||
|
ChatMessage.implementation;
|
||||||
|
ChatMessage.create({
|
||||||
|
whisper: gms,
|
||||||
|
speaker: { alias: game.i18n.localize("VERMINE.name") },
|
||||||
|
content: game.i18n.localize("TOURS.ChatMessage")
|
||||||
|
});
|
||||||
|
game.settings.set("vermine2047", "first-run-tips-shown", true);
|
||||||
|
}
|
||||||
@@ -2,7 +2,7 @@
|
|||||||
"id": "vermine2047",
|
"id": "vermine2047",
|
||||||
"title": "Vermine 2047",
|
"title": "Vermine 2047",
|
||||||
"description": "The Vermine 2047 system for FoundryVTT!",
|
"description": "The Vermine 2047 system for FoundryVTT!",
|
||||||
"version": "0.0.15",
|
"version": "0.0.16",
|
||||||
"compatibility": {
|
"compatibility": {
|
||||||
"minimum": 10,
|
"minimum": 10,
|
||||||
"verified": "10.287",
|
"verified": "10.287",
|
||||||
|
|||||||
@@ -0,0 +1,28 @@
|
|||||||
|
{{#*inline "createBox"}}
|
||||||
|
<div
|
||||||
|
{{#if id}}id="{{id}}"{{/if}}
|
||||||
|
class="flexrow box clickable block ironsworn__{{type}}__create"
|
||||||
|
style="align-items: center; padding: 1rem;"
|
||||||
|
data-img="{{img}}"
|
||||||
|
>
|
||||||
|
<div class="flexcol" style="align-items: center;">
|
||||||
|
<img src="{{img}}" width="75" height="75" alt="">
|
||||||
|
<h4 style="margin: 0.1rem 0;">{{localize labelkey}}</h4>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{{/inline}}
|
||||||
|
|
||||||
|
<form class='{{cssClass}} flexcol' autocomplete='off'>
|
||||||
|
<div class="flexcol">
|
||||||
|
<div class="flexrow boxrow">
|
||||||
|
{{>createBox type="group" id="new-group" labelkey="VERMINE.type_group" img="icons/environment/settlement/wagon-black.webp"}}
|
||||||
|
{{>createBox type="character" labelkey="VERMINE.type_character" img="icons/creatures/eyes/human-single-blue.webp"}}
|
||||||
|
{{>createBox type="npc" labelkey="VERMINE.type_npc" img="icons/environment/wilderness/cave-entrance-vulcano.webp"}}
|
||||||
|
{{>createBox type="creature" labelkey="VERMINE.type_creature" img="icons/creatures/eyes/lizard-single-slit-pink.webp"}}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{{#if sfenabled}}
|
||||||
|
{{/if}}
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||