From c5ff02ae1c06412b9adfec59a4df8f0d831da46a Mon Sep 17 00:00:00 2001 From: SRag <106696114+SRagg@users.noreply.github.com> Date: Tue, 8 Nov 2022 20:12:34 +0900 Subject: [PATCH 01/78] Update ko.json --- lang/ko.json | 212 ++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 203 insertions(+), 9 deletions(-) diff --git a/lang/ko.json b/lang/ko.json index 33530fa91..4131eaaf4 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -6,6 +6,11 @@ "CoC7.Entities.Creature": "크리쳐", "CoC7.Entities.Npc": "NPC", "CoC7.Entities.Vehicle": "탈것", + "CoC7.ActorIsTokenHint": "캐릭터 토큰", + "CoC7.ActorDataLinked": "캐릭터 시트가 연동되었습니다", + "CoC7.ActorDataNotLinked": "캐릭터 시트가 연동되어있지않습니다", + "CoC7.ActorIsSyntheticActor": "이 캐릭터 시트는 변장(변장한 캐릭터의 시트) 입니다", + "CoC7.Entities.Archetype": "캐릭터 타입", "CoC7.Entities.Book": "서적", @@ -56,6 +61,8 @@ "CoC7.DailyLoss": "일일 손실", "CoC7.Luck": "운", "CoC7.Movement": "이동력", + "CoC7.MovementAction": "이동 동작", + "CoC7.AdjustedMovement": "조정된 움직임", "CoC7.Mov": "이동력", "CoC7.BonusDamage": "피해 보너스", "CoC7.DB": "피해", @@ -77,9 +84,11 @@ "CoC7.UnderlyingInsanity": "잠재적 광기", "CoC7.TemporaryInsanity": "일시적 광기", "CoC7.IndefiniteInsanity": "장기적 광기", + "CoC7.DefinitelyInsane": "오늘의 날씨는 좋습니다 정신병원으로 향하기에는 말이죠", + "CoC7.FINISH": "--이-야-기-의-엔-딩--", "CoC7.NotInsane": "정상", - "CoC7.UnlockActor": "액터 해금", - "CoC7.LockActor": "액터 잠금", + "CoC7.UnlockActor": "캐릭터 해금", + "CoC7.LockActor": "캐릭터 잠금", "CoC7.NpcRollCharacteristics": "특성치 굴림", "CoC7.NpcAvarageCharacteristics": "특성치 평준화", "CoC7.NpcCharacteristicsFormula": "수식", @@ -121,8 +130,11 @@ "CoC7.Check": "판정", "CoC7.ItemWeapon": "아이템 (무기)", "CoC7.AttacksPerRound": "라운드당 공격횟수", + "CoC7.Restart": "다시 시작", + "CoC7.Reset": "재설정", + "CoC7.Initiative": "계획", - "CoC7.Cast": "조건", + "CoC7.Cast": "시전", "CoC7.SanityCost": "이성 조건", "CoC7.PowerCost": "정신력 조건", "CoC7.HitPointsCost": "체력 조건", @@ -149,6 +161,7 @@ "CoC7.DiceModifierPenalty": "패널티", "CoC7.Modifiers": "수정", "CoC7.BonusDice": "보너스 주사위", + "CoC7.PenaltyDice": "패널티 주사위", "CoC7.UnitsDie": "1 단위 주사위", "CoC7.TensDie": "10면주사위", "CoC7.TensDice": "10면주사위", @@ -162,6 +175,8 @@ "CoC7.LuckSpent": "{luckAmount} 성공하기 위해 행운 소모", "CoC7.LuckSpentAlt": "행운 소모", "CoC7.LuckError": "{actorName} 은(는) 판정에 필요한 행운이 모자랍니다", + "CoC7.LuckNotEnough": "{name}은(는) 판정에 사용할만한 운이 충분하지 않습니다", + "CoC7.UpgradeSuccessWithLuck": "{luckToSend} 행운에 대해 {diabilityName}(으)로 업그레이드해주세요.", "CoC7.check.AutoSuccess": "자동. 성공", "CoC7.check.AutoFailure": "자동. 실패", "CoC7.RevealCheck": "판정 공개", @@ -175,6 +190,8 @@ "CoC7.KeeperSentDecoy": "플레이어가 눈속임판정을 받았습니다", "CoC7.FakeRoll": "플레이어에게 눈속임판정을 보냅니다", "CoC7.ErrorMissingKeeperUser": "이 작업을 수행하려면 수호자가 연결되어 있어야 합니다.", + "CoC7.BonusDieAssailantReason": "보너스 다이스 1개 (타켓가 구속되어있거나 엎드려있는 상태 입니다)", + "CoC7.PenaltyDieSelfReason": "패널티 다이스 1개 (캐릭터가 구속되어있거나 엎드려있는 상태 입니다)", "CoC7.ConstitutionCheck": "건강 판정", @@ -216,6 +233,7 @@ "CoC7.CheckRawValue": "({rawvalue}%) - {difficulty} 난이도", "CoC7.ArmorAbsorbsDamage": "장갑이 모든 피해 흡수", + "CoC7.ArmorIgnored": "장갑 무시", "CoC7.Critical": "치명타", "CoC7.Impale": "관통상", "CoC7.CriticalTitle": "치명타를 입었습니다", @@ -252,9 +270,12 @@ "CoC7.InflictPain": "고통을 입힘", "CoC7.AdvantageAttacker": "우위: 공격측", "CoC7.AdvantageDefender": "우위: 방어측", - "CoC7.Tie": "묶임", + "CoC7.Tie": "구속", "CoC7.DamageInflicted": "피해 반영됨", "CoC7.TotalDamage": "총 피해", + "CoC7.CheckFailed": "실패", + "CoC7.CheckPassed": "성공", + "CoC7.CheckMemoryRepressed": "억압된 기억", "CoC7.combatCard.dive4cover": "엄페물에 뛰어들기", @@ -338,7 +359,7 @@ "CoC7.EraNvct": "인빅터스", "CoC7.EraDrka": "암흑기", "CoC7.EraDdts": "더 어두운 오솔길로", - "CoC7.EraGlit": "크툴루 바이 가스라이트", + "CoC7.EraGlit": "가스등의 크툴루", "CoC7.Era1920": "1920년대", "CoC7.EraPulp": "펄프 크툴루", "CoC7.EraMdrn": "현대", @@ -347,6 +368,7 @@ "CoC7.SkillNoAdjustments": "수정 불가", "CoC7.SkillNoXpGain": "경험치 습득 불가", + "CoC7.SkillXpGainDisabled": "경험지 습득에 문제가 생겼습니다.", "CoC7.SkillSpecial": "전문화", "CoC7.SkillRarity": "희귀", "CoC7.SkillPush": "강행", @@ -400,6 +422,8 @@ "CoC7.NewSkillName": "새 기능", "CoC7.AddSkill": "기능 추가", + "CoC7.CleanSkillList": "기능 목록 정렬", + "CoC7.CleanSkillListHint": "

기능에서 전문화 기능를 제거하여 기능 목록을 정리합니다.

이렇게 하면 스킬을 '전문화(기능)'로 표시하지 않습니다.

", "CoC7.DevelopemmentPhase": "성장 단계", "CoC7.RecoverLuckPoints": "행운 점수 회복", "CoC7.SkillCantGainXp": "기능이 자동으로 경험치를 얻지 못합니다.", @@ -445,6 +469,7 @@ "CoC7.RangeWeapons": "원거리 무기", "CoC7.WeaponName": "이름", "CoC7.WeaponSkill": "기능", + "CoC7.WeaponSkillMain": "주요 기능", "CoC7.WeaponSkillAlt": "모든 기능", "CoC7.Inventory": "소지품", "CoC7.InventoryIsCurrentlyEmpty": "현재 소지품이 없습니다.", @@ -456,7 +481,7 @@ "CoC7.SanRollHint": "대상에 대한 이성수치 판정", "CoC7.SANCheckTitle": "이성 감소 : {name} ({sanMin}/{sanMax})", "CoC7.NoSkill": "기능 없음", - "CoC7.AddWeapontHint": "

{actor}에게 {weapon}.
이(가)없습니다 입력하시겠습니까?

", + "CoC7.AddWeapontHint": "

{actor}에게 {weapon}.
이(가)없습니다 추가하시겠습니까?

", "CoC7.LinkCheck": " {name} 판정", "CoC7.LinkCheckDiff": "[{difficulty}] {name} 판정", @@ -544,6 +569,7 @@ "CoC7.MinSanloss": "최소 손실", "CoC7.AlreadyLost": "이미 손실됨", "CoC7.AlreadyEncountered": "이미 조우함", + "CoC7.AlreadyEncounteredInformation": "이미 발생됨: {reason}에서 {lost}/{max}이(가) 손실됨", "CoC7.CreatureMaxLoss": "크리처 최대 손실", "CoC7.MaxLossToCreature": "이 크리처의 최대 손실", "CoC7.MaxPossibleSanLoss": "최대 손실 가능 이성", @@ -560,6 +586,123 @@ "CoC7.YouGainedCthulhuMythos": "당신의 마음은 이 소름끼치는 현실앞에서 움츠러듭니다 (+{value}% 크툴루 신화)", "CoC7.CardResolved": "카드 해결", + "CoC7.InsertLocation": "지정 위치", + "CoC7.RemoveLocation": "위치 삭제", + "CoC7.LocationNotEmpty": "캐릭터가 있는 위치를 삭제할 수 없습니다.", + "CoC7.LocationInit": "시작 위치를 제거할 수 없습니다.", + "CoC7.SomethingInTheWay": "지정한 위치에 무언가 있습니다", + "CoC7.FacingObstacle": "{type}을(를) 마주하고 있습니다.", + "CoC7.ABarrier": "장벽", + "CoC7.Barrier": "장벽", + "CoC7.AHazard": "위험물", + "CoC7.Hazard": "위험", + "CoC7.Obstacle": "길에 무언가 있습니다", + "CoC7.ConsumeBonusDice": "보너스 주사위 사용", + "CoC7.Breakable": "쉽게 깨뜨릴수 있는 물건", + "CoC7.NoValidCheck": "사용할수 없는 수표입니다", + "CoC7.NoValidSkill": "유효하지 않은 기능입니다", + "CoC7.AskIntentions": "당신의 행동은 무엇입니까?", + "CoC7.WaitForPlayerInput": "플레이어의 입력 대기중..", + "CoC7.AskRoll": "{name} 굴림({value}%)", + "CoC7.ActionCost": "조취 비용", + "CoC7.Negotiate": "협상", + "CoC7.BreakDown": "브레이크 다운", + "CoC7.BeingCautious": "당신은 신중한 접근을 선택합니다.", + "CoC7.BeingVeryCautious": "당신은 매우 신중하고 있습니다.", + "CoC7.ReflectObstacleChanges": "장애물에 변경 사항을 적용합니다", + "CoC7.PlayerMovesToLocation": "플레이어가 다음 위치로 이동합니다.", + "CoC7.ObstaclePassed": "당신은 성공적인 방법을 찾아냈습니다.", + "CoC7.GotLucky": "운이 좋으셨군요, 이번엔...", + "CoC7.ObstacleFail": "실패했습니다", + "CoC7.ObstacleFumble": "불행하게도 안좋은 결과를 만들어냈습니다.", + "CoC7.YouLostTime": "당신의 생각은 좋았지만 시간이 지나갔습니다.", + "CoC7.MoveToLocation": "다음 장소로 이동합니다.", + "CoC7.DontMoveToLocation": "당신은 이곳에 머무릅니다.", + "CoC7.ObstacleDamage": "장애물 손상", + "CoC7.RemoveObstacle": "장애물 파괴", + "CoC7.YouTakeNoDamage": "당신은 부상을 입지않았습니다.", + "CoC7.YouTakeSomeDamage": "당신{amount}개의 데미지를 입습니다.", + "CoC7.TryToNegotiateHazard": "당신은 협상을 시도합니다.", + "CoC7.TryToGetPastBarriers": "당신은 그 장벽을 통과하려고 시도합니다.", + "CoC7.TryToBreak": "당신은 그 장벽을 부수려고 시도합니다..", + "CoC7.DragOnCanvas": "원하는 위치를 설정하려면 캔버스에 원하는위치에다가 끌어다 놓으십시오.", + "CoC7.LocationCoordinate": "위치가 {x}, {y}.\n우클릭하여 지우십시오.\n위치를 변경하려면 캔버스에 끌어다 놓으십시오..", + "CoC7.ConfirmRestartChase": "추격을 다시 하시겠습니까?", + "CoC7.ConfirmRestartChaseHint": "추격이 다시 시작됩니다.\n모든 위치가 재설정됩니다.\n속도 점검을 수행하지 않은 캐릭터는 굴려야 합니다..", + "CoC7.ConfirmResetChase": "추격을 다시 설정하시겠습니까?", + "CoC7.ConfirmResetChaseHint": "추격 기능이 재설정됩니다.\b모든 위치와 장애물이 제거됩니다.", + "CoC7.IncludeEscapees": "가장 빨리 도주하는 캐릭터를 참여시키십시오.", + "CoC7.TooSlow": "너무 느림", + "CoC7.TooFast": "너무 빠름", + "CoC7.DoesNotMeetMinimumReqToBeAdded": "참가자를 추가할 수 없습니다. 유효한 이동 작업이 필요합니다.", + "CoC7.IncludeLatecomers": "느린 추적자를 참여시킵니다.", + "CoC7.VehicleChase": "추격에는 차량이 포함될 수 있습니다(실행되지 않음).", + "CoC7.StartingRange": "사전 시작 위치 ", + "CoC7.StartingIndex": "도망가는 캐릭터의 시작 지표", + "CoC7.CutToTheChase": "바로 추격 씬으로 넘어갑니다", + "CoC7.ChaseSetup": "추격 설정", + "CoC7.ParticipantsList": "참가하는 캐릭터 목록", + "CoC7.NotAllHaveSpeedRoll": "일부 참가자들은 민첩을 가지고 있지 않습니다!", + "CoC7.NeedMin2Participants": "추격자와 사냥감이 있어야 추격을 시작할 수 있습니다!", + "CoC7.ConfirmCut2Chase": "추격으로 바로 넘어갑니까?", + "CoC7.ConfirmCut2ChaseHint": "그러면 추격과 첫 번째 추격 라운드가 시작됩니다.", + "CoC7.NextRound": "다음 라운드", + "CoC7.ConfirmNextChaseRound": "다음 라운드로 넘어가시겠습니까?", + "CoC7.ConfirmNextChaseRoundHint": "일부 캐릭터에게 사용할 수 있는 액션이 있습니다. 계속하시겠습니까?", + "CoC7.CheckName": "확인", + "CoC7.ObstacleHasHitPoint": "위치의 적중위치 바꾸기.", + "CoC7.ActionCostOnFail": "실패 시 패널티 다이스로 전환.", + "CoC7.DamageOnFail": "고장 시 피해 버튼.", + "CoC7.OpenObstacleResolutionCard": "장애물 해결 흐름 카드 시작.", + "CoC7.AddBonusDie": "보너스 다이스 추가", + "CoC7.RemoveBonusDie": "보너스 다이스 사용", + "CoC7.DecreaseMovementAction": "이동 범위 감소", + "CoC7.IncreaseMovementAction": "이동 범위 증가", + "CoC7.CautiousApproach": "은밀하게 접근", + "CoC7.Cautious": "은밀행동", + "CoC7.Assist": "지원 동맹", + "CoC7.MoveForward": "앞으로 이동", + "CoC7.MoveBackward": "뒤로 이동", + "CoC7.AddActorToChase": "추격 씬에 캐릭터 추가", + "CoC7.ParticipantDropHint": "이 씬 또는 추적 위치에서 직접 드롭 및 작업을 수행할 수 있습니다.", + "CoC7.OverrideCalc": "재 설정", + "CoC7.NeedRecalculate": "재 설정이 필요합니다", + "CoC7.NeedToRecalculate": "모든 캐릭터는 이동력을 다시 계산하게 됩니다", + "CoC7.SpeedCheck": "이동력 확인", + "CoC7.Initialize": "초기 설정", + "CoC7.Locations": "위치 추척 ", + "CoC7.NoDamageDealt": "데미지 없음", + "CoC7.DamageDealt": "{value} 피해를 입힙니다.", + "CoC7.NothingToRoll": "굴릴수 없습니다!", + "CoC7.ParticipantDataMissing": "캐릭터 데이터가 누락되었습니다", + "CoC7.ParticipantNotFound": "캐릭터를 찾을수 없습니다", + "CoC7.ParticipantUuidNotFound": "{participantUuid}를 찾을수 없습니다", + "CoC7.ParticipantNotEnoughMovement": "참가하는 {assistantUuid}은 {actions} 이동력이 남아있습니다", + "CoC7.ParticipantAlreadyProcessed": "캐릭터가 이미 처리되었습니다.", + "CoC7.ErrorEmptyLocationsList": " 캐릭터 목록이 비어있습니다", + "CoC7.ErrorBeneficiaryAtMaxBonus": "{name}는 이미 가질수 있는 다이스를 모두가지고있습니다", + "CoC7.ErrorParticipantAtMaxBonus": "{participantUuid}는 가질수 있는 보너스 주사위를 모두 가지고있습니다", + "CoC7.ErrorTokenNotOnScene": "토큰이 이 씬의 설정한 위치에 속해있지않습니다.", + "CoC7.AddParticipant": "캐릭터 추가", + "CoC7.Remove": "초기화", + "CoC7.Delete": "삭제", + "CoC7.Edit": "편집", + "CoC7.Create": "창조", + "CoC7.MakeActive": "활성화", + "CoC7.SelectNewSkill": "기능 선택", + "CoC7.AskDamageRoll": "데미지 굴림을 요청 합니다", + "CoC7.AttemptNegotiateObstacle": "장애물을 넘어가려고 시도할수 있습니다", + "CoC7.AttemptBreakDown": "고장날수 있습니다!!", + "CoC7.ObstacleName": "장애물 이름:", + "CoC7.Actions": "행동:", + "CoC7.Chase.InitiativeShort": "INIT: {value}", + "CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}", + "CoC7.Chase.CheckName": "이름 확인", + "CoC7.Chase.PreysMin": "도망자 최소수치: {value}", + "CoC7.Chase.PreysMax": "도망자 최고수치: {value}", + "CoC7.Chase.ChasersMin": "추격자 최소수치: {value}", + "CoC7.Chase.ChasersMax": "추격자 최고수치: {value}", + "CoC7.SpellCastingTime": "시전 시간", "CoC7.SpellCastingCost": "시전 비용", "CoC7.CallSpell": "강림", @@ -616,6 +759,7 @@ "CoC7.MiscellaneousTalent": "잡다한", "CoC7.BasicTalent": "기본", "CoC7.InsaneTalent": "광기", + "CoC7.Sane": "정신", "CoC7.OtherTalent": "기타", "CoC7.Items": "아이템", @@ -712,6 +856,15 @@ "CoC7.ErrorManeuverNotPossible": "상대가 너무 강해서 대처할 수 없습니다.", "CoC7.ErrorNotFound": "{missing} 을(를) 찾을수없습니다!", "CoC7.ErrorNotFoundForActor": "{actor}에서 {missing} 을(를) 찾을 수 없습니다!", + "CoC7.ErrorUnableToParseFormula": "{value}은(는) 올바른 수식이 아닙니다.", + "CoC7.ErrorUnableToParseArmorFormula": "장갑 값 {value}을(를) 처리할 수 없습니다 장갑을 무시합니다", + "CoC7.ErrorUnableToParseSkillFormula": "{name} 기능에 대해 {value} 공식을 구문 분석할 수 없습니다.", + "CoC7.ErrorActorHasNoWeaponNamed": "{actorName} 시트에 이름이 {weaponName}인 무기가 없습니다", + "CoC7.ErrorActorHasTooManyWeaponsNamed": "'캐릭터 {actorName}에 이름이 {weaponName}인 두 개 이상의 무기가 있습니다. 첫 번째 무기가 사용됩니다`", + "CoC7.ErrorUnexpectedWeaponText": "예기치 않은 무기 버그 텍스트입니다. 가져오려는 텍스트로 버그 보고서를 제출하십시오.", + "CoC7.ErrorUnexpectedSkillsText": "예상치 못한 기능 버그 텍스트입니다. 가져오려는 텍스트로 버그 보고서를 제출하십시오.", + "CoC7.ErrorNoTokensSelected": "토큰을 선택하지 않았습니다.", + "CoC7.ErrorEvaluatingDamage": "피해 표기 오류", "CoC7.InfoLessSkillThanOptions": "{skillCount} 과 {optionsCount} 옵션만 있으므로, 모두 추가합니다.", "CoC7.InfoAllSkillsAlreadySelected": "이미 모든 기능이 선택되었습니다.", @@ -722,13 +875,20 @@ "CoC7.MessageSelectSingleUserForTarget": "이 토큰은 여러 플레이어에 의해 제어되고있습니다 이 공격에 대응할 수 있는 플레이어를 선택해주세요.", "CoC7.MessageBoutOfMadnessTableNotFound": "광기표의 결과를 찾을 수 없습니다. 모든 롤 테이블이 생성되었는지 확인해주세요.", "CoC7.MessageBoutOfMadnessItemNotFound": "광기표의 결과를 찾을 수 없습니다. 모든 특성치가 생성되었는지 확인해 주세요.", + "CoC7.MessageRollingCharacteristic": "굴림 특성 {label}: {formula}", "CoC7.DealDamage": "{damage}의 피해를 {target}에게 주겠습니까?", + "CoC7.DamageDealTo": "Damage {name} {damage}HP", "CoC7.NoTargetSelected": " {weapon} 무기 판정의 목표를 선택하지 않았습니다. 계속 진행하시겠습니까?", "CoC7.Import": "불러오기", "CoC7.Proceed": "진행", "CoC7.Cancel": "취소", + "CoC7.Add": "추가", + "CoC7.Update": "업데이트", + "CoC7.Enable": "허용", + "CoC7.Disable": "삭제", + "CoC7.Duration": "지속", "CoC7.ActorImporter": "캐릭터 불러오기", "CoC7.ActorImporterSummary": "NPC 혹은 크리처의 설명과 특성치를 불러옵니다. 해당 형식의 플레인 텍스트를 붙여넣으십시오.", @@ -751,11 +911,20 @@ "CoC7.ImportedUnnamedCharacter": "익명의 캐릭터 불러옴", "CoC7.CreatedImportedCharactersFolder": "'불러온 캐릭터'폴더 생성 완료", "CoC7.ImportedCharactersFolder": "불러온 캐릭터", + "CoC7.PickDirectory": "폴더 선택", "CoC7.ImportSkillItemLocations": "다음에서 기능/주문/무기를 찾습니다. :", "CoC7.ImportActorItemsNone": "없음", "CoC7.ImportActorItemsItem": "아이템", "CoC7.ImportActorItemsItemWorldModuleSystem": "아이템 / 월드 / 모듈 / 시스템", "CoC7.ImportActorItemsWorldModuleItemSystem": "월드 / 모듈 / 아이템 / 시스템", + "CoC7.ActorImported": "새로운 {actorType} 이름밎 유형: {actorName}", + + "CoC7.DholeHouseActorImporter": "The Dhole's House의 캐릭터 JSON 파일 을(를) 가져옵니다", + "CoC7.DholeHouseActorImporterSummary": "DholeHouse의 캐릭터를 JSON 파일 을(를)여기에 업로드하세요.", + "CoC7.DholeHouseImportingName": "가져오기: ", + "CoC7.DholeHousePickYourJSONFile": "Dhole's House에서 내보낸 JSON 파일을 선택하십시오.", + "CoC7.DholeHouseActorImporterSource": "The Dhole's House 에서 가져온 캐릭터", + "CoC7.DholeHouseInvalidActor": "선택한 JSON 파일은 유효한 Dhole's House의 파일이 아닌 것 같습니다.", "CoC7.HowToTranslateTitle": "번역 방법", "CoC7.HowToTranslateWarning": "신뢰할 수 없는 모듈은 설치하지 마십시오.", @@ -780,6 +949,12 @@ "CoC7.Migrate.UpdateCurrentScene": "현재 장면 마이그레이션", "CoC7.Migrate.Complete": "데이터 마이그레이션 완료", + "CoC7.Migrate.ErrorDocumentPack": "{collection} 팩의 {name} 문서에 대한 CoC7 시스템 마이그레이션 실패: {message}", + "CoC7.Migrate.ErrorScene": "장면 {name}: {message}에 대한 CoC7 시스템 마이그레이션 실패", + "CoC7.Migrate.ErrorMacro": "매크로 {name}: {message}에 대한 CoC7 시스템 마이그레이션 실패", + "CoC7.Migrate.ErrorTable": "{name} 테이블에 대한 CoC7 시스템 마이그레이션 실패: {message}", + "CoC7.Migrate.ErrorItem": "{name} 항목에 대한 CoC7 시스템 마이그레이션 실패: {message}", + "CoC7.Migrate.ErrorActor": "캐릭터 {name}: {message}에 대한 CoC7 시스템 마이그레이션 실패", "CoC7.Settings.CoreRules.Title": "코어 룰북 옵션 룰", "CoC7.Settings.Rules.Name": "변형/옵션 룰", @@ -799,13 +974,19 @@ "CoC7.Settings.PulpRules.FasterRecovery.Name": "빠른 회복", "CoC7.Settings.PulpRules.FasterRecovery.Hint": "자연 치유력이 하루 2회까지 늘어납니다", "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "큰 상처 무시", - "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "Foundry/Data 파일과 관련된 The Hole's House 이미지의 업로드 경로", + "CoC7.Settings.DholeUpload.Directory.Name": "Dhole's House 이미지 업로드 폴더", + "CoC7.Settings.DholeUpload.Directory.Hint": "Foundry/Data 폴더와 관련된 The Hole's House 이미지의 업로드 경로.", + "CoC7.Maximize": "최대화", "CoC7.Summarize": "요약", + "CoC7.ClearAllConditions": "모든 조건 초기화", "CoC7.UnableToInteractWithChatCard": "이 메시지와 상호 작용할 수 없습니다. 변경이 필요한 경우 수호자에게 요청해 옵션을 선택하세요.", "CoC7.UnableToCopyToClipboard": "브라우저 보안 설정으로 인해 클립보드에 복사할 수 없습니다.", + "CoC7.UnableToUploadDholeImage": "이미지를 업로드할 권한이 없습니다. 기본 이미지가 사용됩니다.", + "CoC7.MessageTitleSelectUserToGiveTo": "다른 캐릭터에게 아이템 제공", "CoC7.MessageSelectUserToGiveTo": "이 아이템을 어떤 캐릭터와 교환하시겠습니까?", @@ -833,7 +1014,8 @@ "SETTINGS.TitleWeapon": "무기 설정", "SETTINGS.TitleDiceSoNice": "Dice So Nice 설정", "SETTINGS.TitleDeveloperDebug": "개발자 밎 디버깅 설정", - "SETTINGS.TitleRollTable": "", + "SETTINGS.TitleRollTable": "롤 테이블 설정", + "SETTINGS.TitleChaseSettings": "추격 설정", "SETTINGS.DebugMode": "시스템 디버깅 모드", "SETTINGS.DebugModeHint": "!!재시작 필요!!", "SETTINGS.DefautDifficulty": "판정 난이도 기본값", @@ -843,6 +1025,10 @@ "SETTINGS.showIconsOnly": "요약 시트에서 기능 목록에 아이콘만 표시.", "SETTINGS.UseToken": "토큰 이미지 사용", "SETTINGS.UseTokenHint": "채팅 카드에서 초상화 대신 토큰 이미지 사용", + "SETTINGS.TrustedCanModfyChatCard": "신뢰할 수 있는 사용자에게 대화 카드 수정 허용", + "SETTINGS.TrustedCanModfyChatCardHint": "이 설정을 선택하면 신뢰할 수 있는 사용자에게 대화 카드의 옵션을 선택할 수 있는 권한이 부여됩니다. GM 전용 섹션은 여전히 표시되지 않습니다.", + "SETTINGS.TrustedCanSeeChatCard": "신뢰할 수 있는 사용자에게 GM 섹션만 표시 허용", + "SETTINGS.TrustedCanSeeChatCardHint": "이 설정을 활성화하면 신뢰할 수 있는 사용자에게 채팅 카드의 GM 섹션만 볼 수 있는 권한이 부여됩니다. 이것을 조심해서 사용하세요!", "SETTINGS.DisplayActorOnCard": "카드에 캐릭터 표시", "SETTINGS.DisplayActorOnCardHint": "전투 채팅 카드에 캐릭터의 이미지/토큰 표시", "SETTINGS.InitiativeRule": "행동 순서 룰 설정", @@ -938,7 +1124,15 @@ "SETTINGS.CheckElevation": "거리에 고도 포함", "SETTINGS.CheckElevationHint": "전투 거리 계산에 고도 사용", "CoC7.toolTipDelay": "툴팁이 표시될 때까지의 지연 시간(밀리초), 표시하지 않을 경우 0", + "SETTINGS.ChaseShowTokenMovement": "토큰 이동 표시.", + "SETTINGS.ChaseShowTokenMovementHint": "토큰을 다음 위치로 이동할 때 그리드에 이동 표시.", + "SETTINGS.UseContextMenus": "콘텍스트 메뉴 사용", + "SETTINGS.UseContextMenusHint": "[실험] 굴림의 경우 키 조합 대신 상황에 맞는 메뉴를 사용합니다..", + "CoC7.getTheExample": "예시 복사", - "CoC7.Copied": "클립보드에 예시 텍스트를 복사했습니다." + "CoC7.Copied": "클립보드에 예시 텍스트를 복사했습니다", + + "CoC7.EffectNew": "새로운 효과", + "CoC7.EffectAppliedCantOverride": "활성 효과가 적용됩니다. [{name}]은(는) 수정할 수 없습니다. 해당 효과를 비활성화해야 이 값을 수정할수있습니다." } From fd019f411161b016cb5354e3653819b3d547ebc7 Mon Sep 17 00:00:00 2001 From: acd-jake <67855941+acd-jake@users.noreply.github.com> Date: Thu, 17 Nov 2022 17:35:56 +0100 Subject: [PATCH 02/78] Added special property to chat card The special description of attack if any is added to the chat card. --- templates/chat/combat/melee-initiator.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/chat/combat/melee-initiator.html b/templates/chat/combat/melee-initiator.html index c3c3e0ae1..7f4fb01c4 100644 --- a/templates/chat/combat/melee-initiator.html +++ b/templates/chat/combat/melee-initiator.html @@ -14,6 +14,10 @@

{{{item.system.description.value}}} + {{#if this.item.system.properties.spcl}} + {{localize 'CoC7.WeaponSpecial'}} + {{{this.item.system.description.special}}} + {{/if}} {{#if rolled}}
{{#if advantage}}{{localize 'CoC7.Advantage'}}{{/if}} @@ -147,4 +151,4 @@

{{check.malfunctionTxt}}

{{/each}}
{{/if}} - \ No newline at end of file + From a70347efb7d8d328df4c4c0943c69b2a04a78fab Mon Sep 17 00:00:00 2001 From: acd-jake <67855941+acd-jake@users.noreply.github.com> Date: Fri, 18 Nov 2022 22:27:08 +0100 Subject: [PATCH 03/78] Update range-initiator.html Added attack's special property to range intiator chat card. --- templates/chat/combat/range-initiator.html | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/templates/chat/combat/range-initiator.html b/templates/chat/combat/range-initiator.html index ff2a7420f..94cb5ee8e 100644 --- a/templates/chat/combat/range-initiator.html +++ b/templates/chat/combat/range-initiator.html @@ -10,6 +10,11 @@

{{{item.system.description.value}}} + {{#if this.item.system.properties.spcl}} + {{localize 'CoC7.WeaponSpecial'}} + {{{this.item.system.description.special}}} + {{/if}} + {{#if rolled}} @@ -338,4 +343,4 @@

{{localize 'CoC7.Target'}}: {{d.targetName}}

{{/unless}} {{/if}} - \ No newline at end of file + From f53d5678799b12ed140854d30d4f68c5bc510ab8 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:49:26 +0000 Subject: [PATCH 04/78] Update ko.json --- lang/ko.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lang/ko.json b/lang/ko.json index 4131eaaf4..4c406991b 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -176,7 +176,7 @@ "CoC7.LuckSpentAlt": "행운 소모", "CoC7.LuckError": "{actorName} 은(는) 판정에 필요한 행운이 모자랍니다", "CoC7.LuckNotEnough": "{name}은(는) 판정에 사용할만한 운이 충분하지 않습니다", - "CoC7.UpgradeSuccessWithLuck": "{luckToSend} 행운에 대해 {diabilityName}(으)로 업그레이드해주세요.", + "CoC7.UpgradeSuccessWithLuck": "{luckToSend} 행운에 대해 {difficultyName}(으)로 업그레이드해주세요.", "CoC7.check.AutoSuccess": "자동. 성공", "CoC7.check.AutoFailure": "자동. 실패", "CoC7.RevealCheck": "판정 공개", From a0a8929229b677f571f6e0a78d82736c6b70f024 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:51:25 +0000 Subject: [PATCH 05/78] Updated translations list --- .github/TRANSLATIONS.md | 179 ++++++++++++++++++++-------------------- 1 file changed, 91 insertions(+), 88 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index e89082fcd..b6dc34932 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -4,95 +4,96 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry The following translations are currently up to date **de**, **fr**, **it** -The following translations have more than 100 untranslated strings **cn**, **cs**, **es**, **ja**, **ko**, **ru**, **sv**, [are you able to help?](./ABANDONED.md) +The following translations have more than 100 untranslated strings **cn**, **cs**, **es**, **ja**, **ru**, **sv**, [are you able to help?](./ABANDONED.md) -|Key|pl|pt-BR|zh-TW| -|:---|:---:|:---:|:---:| -|**Remaining**:|**2**|**84**|**3**| -|[CoC7.ActorDataLinked](#coc7actordatalinked)|✅|❌|✅| -|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|✅|❌|✅| -|[CoC7.ActorImported](#coc7actorimported)|✅|❌|✅| -|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|✅|❌|✅| -|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|✅|❌|✅| -|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|✅|❌|✅| -|[CoC7.Add](#coc7add)|✅|❌|✅| -|[CoC7.AdjustedMovement](#coc7adjustedmovement)|✅|❌|✅| -|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|✅|❌|✅| -|[CoC7.ArmorIgnored](#coc7armorignored)|✅|❌|✅| -|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|✅|❌|✅| -|[CoC7.CheckFailed](#coc7checkfailed)|✅|❌|✅| -|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|✅|❌|✅| -|[CoC7.CheckPassed](#coc7checkpassed)|✅|❌|✅| -|[CoC7.CleanSkillList](#coc7cleanskilllist)|✅|❌|✅| -|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|✅|❌|✅| -|[CoC7.ClearAllConditions](#coc7clearallconditions)|✅|❌|✅| -|[CoC7.Damage](#coc7damage)|✅|❌|✅| -|[CoC7.DamageDealTo](#coc7damagedealto)|✅|❌|✅| -|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|✅|❌|✅| -|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|✅|❌|✅| -|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|✅|❌|✅| -|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|✅|❌|✅| -|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|✅|❌|✅| -|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|✅|❌|✅| -|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|✅|❌|✅| -|[CoC7.Disable](#coc7disable)|✅|❌|✅| -|[CoC7.Duration](#coc7duration)|✅|❌|✅| -|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|✅|❌|✅| -|[CoC7.EffectNew](#coc7effectnew)|✅|❌|✅| -|[CoC7.Enable](#coc7enable)|✅|❌|✅| -|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|✅|❌|✅| -|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|✅|❌|✅| -|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|✅|❌|✅| -|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|✅|❌|✅| -|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|✅|❌|✅| -|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|✅|❌|✅| -|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|✅|❌|✅| -|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|✅|❌|✅| -|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|✅|❌|✅| -|[CoC7.FINISH](#coc7finish)|✅|❌|✅| -|[CoC7.FileUploadError](#coc7fileuploaderror)|✅|❌|✅| -|[CoC7.Initiative](#coc7initiative)|✅|❌|✅| -|[CoC7.LuckNotEnough](#coc7lucknotenough)|✅|❌|✅| -|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|✅|❌|✅| -|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|✅|❌|✅| -|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|✅|❌|✅| -|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|✅|❌|✅| -|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|✅|❌|✅| -|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|✅|❌|✅| -|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|✅|❌|✅| -|[CoC7.MovementAction](#coc7movementaction)|✅|❌|✅| -|[CoC7.PenaltyDice](#coc7penaltydice)|✅|❌|✅| -|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|✅|❌|✅| -|[CoC7.PickDirectory](#coc7pickdirectory)|✅|❌|✅| -|[CoC7.RemoveParticipant](#coc7removeparticipant)|✅|❌|✅| -|[CoC7.RemoveParticipantHint](#coc7removeparticipanthint)|✅|❌|✅| -|[CoC7.Reset](#coc7reset)|✅|❌|✅| -|[CoC7.Restart](#coc7restart)|✅|❌|✅| -|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|✅|❌|✅| -|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|✅|❌|✅| -|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|✅|❌|✅| -|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|✅|❌|✅| -|[CoC7.Sane](#coc7sane)|✅|❌|✅| -|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|✅|❌|✅| -|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|✅|❌|✅| -|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|✅|❌|✅| -|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|✅|❌|✅| -|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|✅|❌|✅| -|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|✅|❌|✅| -|[CoC7.Update](#coc7update)|✅|❌|✅| -|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|✅|❌|✅| -|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|✅|❌|✅| -|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|✅|❌|✅| -|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|✅|❌|❌| -|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|✅|❌|✅| -|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|✅|❌|✅| -|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|✅|❌|✅| -|[SETTINGS.TrustedCanModfyChatCard](#settingstrustedcanmodfychatcard)|✅|❌|✅| -|[SETTINGS.TrustedCanModfyChatCardHint](#settingstrustedcanmodfychatcardhint)|✅|❌|✅| -|[SETTINGS.TrustedCanSeeChatCard](#settingstrustedcanseechatcard)|✅|❌|✅| -|[SETTINGS.TrustedCanSeeChatCardHint](#settingstrustedcanseechatcardhint)|✅|❌|✅| -|[SETTINGS.UseContextMenus](#settingsusecontextmenus)|❌|❌|❌| -|[SETTINGS.UseContextMenusHint](#settingsusecontextmenushint)|❌|❌|❌| +|Key|ko|pl|pt-BR|zh-TW| +|:---|:---:|:---:|:---:|:---:| +|**Remaining**:|**14**|**2**|**84**|**3**| +|[CoC7.ActorDataLinked](#coc7actordatalinked)|✅|✅|❌|✅| +|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|✅|✅|❌|✅| +|[CoC7.ActorImported](#coc7actorimported)|✅|✅|❌|✅| +|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|✅|❌|✅| +|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|✅|✅|❌|✅| +|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|✅|✅|❌|✅| +|[CoC7.Add](#coc7add)|✅|✅|❌|✅| +|[CoC7.AdjustedMovement](#coc7adjustedmovement)|✅|✅|❌|✅| +|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|✅|✅|❌|✅| +|[CoC7.ArmorIgnored](#coc7armorignored)|✅|✅|❌|✅| +|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|✅|✅|❌|✅| +|[CoC7.CheckFailed](#coc7checkfailed)|✅|✅|❌|✅| +|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|✅|✅|❌|✅| +|[CoC7.CheckPassed](#coc7checkpassed)|✅|✅|❌|✅| +|[CoC7.CleanSkillList](#coc7cleanskilllist)|✅|✅|❌|✅| +|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|✅|✅|❌|✅| +|[CoC7.ClearAllConditions](#coc7clearallconditions)|✅|✅|❌|✅| +|[CoC7.Damage](#coc7damage)|❌|✅|❌|✅| +|[CoC7.DamageDealTo](#coc7damagedealto)|✅|✅|❌|✅| +|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|✅|✅|❌|✅| +|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|✅|✅|❌|✅| +|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|✅|✅|❌|✅| +|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|✅|✅|❌|✅| +|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|✅|✅|❌|✅| +|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|✅|✅|❌|✅| +|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|✅|✅|❌|✅| +|[CoC7.Disable](#coc7disable)|✅|✅|❌|✅| +|[CoC7.Duration](#coc7duration)|✅|✅|❌|✅| +|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|✅|✅|❌|✅| +|[CoC7.EffectNew](#coc7effectnew)|✅|✅|❌|✅| +|[CoC7.Enable](#coc7enable)|✅|✅|❌|✅| +|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|✅|✅|❌|✅| +|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|✅|✅|❌|✅| +|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|✅|✅|❌|✅| +|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|✅|✅|❌|✅| +|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|✅|✅|❌|✅| +|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|✅|✅|❌|✅| +|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|✅|✅|❌|✅| +|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|✅|✅|❌|✅| +|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|✅|✅|❌|✅| +|[CoC7.FINISH](#coc7finish)|✅|✅|❌|✅| +|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|✅|❌|✅| +|[CoC7.Initiative](#coc7initiative)|✅|✅|❌|✅| +|[CoC7.LuckNotEnough](#coc7lucknotenough)|✅|✅|❌|✅| +|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|✅|✅|❌|✅| +|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|✅|✅|❌|✅| +|[CoC7.MovementAction](#coc7movementaction)|✅|✅|❌|✅| +|[CoC7.PenaltyDice](#coc7penaltydice)|✅|✅|❌|✅| +|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|✅|✅|❌|✅| +|[CoC7.PickDirectory](#coc7pickdirectory)|✅|✅|❌|✅| +|[CoC7.RemoveParticipant](#coc7removeparticipant)|❌|✅|❌|✅| +|[CoC7.RemoveParticipantHint](#coc7removeparticipanthint)|❌|✅|❌|✅| +|[CoC7.Reset](#coc7reset)|✅|✅|❌|✅| +|[CoC7.Restart](#coc7restart)|✅|✅|❌|✅| +|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|✅|❌|✅| +|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|✅|❌|✅| +|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|✅|❌|✅| +|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|✅|❌|✅| +|[CoC7.Sane](#coc7sane)|✅|✅|❌|✅| +|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|✅|✅|❌|✅| +|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|✅|✅|❌|✅| +|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|✅|✅|❌|✅| +|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|✅|❌|✅| +|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|✅|✅|❌|✅| +|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|✅|❌|✅| +|[CoC7.Update](#coc7update)|✅|✅|❌|✅| +|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|✅|✅|❌|✅| +|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|✅|✅|❌|✅| +|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|✅|❌|✅| +|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|✅|❌|❌| +|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|✅|✅|❌|✅| +|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|✅|✅|❌|✅| +|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|❌|✅|✅|✅| +|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|✅|✅|❌|✅| +|[SETTINGS.TrustedCanModfyChatCard](#settingstrustedcanmodfychatcard)|✅|✅|❌|✅| +|[SETTINGS.TrustedCanModfyChatCardHint](#settingstrustedcanmodfychatcardhint)|✅|✅|❌|✅| +|[SETTINGS.TrustedCanSeeChatCard](#settingstrustedcanseechatcard)|✅|✅|❌|✅| +|[SETTINGS.TrustedCanSeeChatCardHint](#settingstrustedcanseechatcardhint)|✅|✅|❌|✅| +|[SETTINGS.UseContextMenus](#settingsusecontextmenus)|✅|❌|❌|❌| +|[SETTINGS.UseContextMenusHint](#settingsusecontextmenushint)|✅|❌|❌|❌| ##### CoC7.ActorDataLinked ``` "CoC7.ActorDataLinked": "Actor data are linked",``` ##### CoC7.ActorDataNotLinked @@ -247,6 +248,8 @@ The following translations have more than 100 untranslated strings **cn**, **cs* ``` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",``` ##### SETTINGS.ChaseShowTokenMovementHint ``` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",``` +##### SETTINGS.DefaultDifficulty +``` "SETTINGS.DefaultDifficulty": "Default check difficulty",``` ##### SETTINGS.TitleChaseSettings ``` "SETTINGS.TitleChaseSettings": "Chase Settings",``` ##### SETTINGS.TrustedCanModfyChatCard From 428452273b43bbf5e51c92b3a59f0df6483d18de Mon Sep 17 00:00:00 2001 From: snap01 Date: Wed, 23 Nov 2022 14:51:26 +0000 Subject: [PATCH 06/78] [create-pull-request] automated change --- .github/ABANDONED.md | 207 ------------------------------------------- 1 file changed, 207 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index c15806bb6..a7efe1f0c 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -10,8 +10,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry [ja.json (202 untranslated strings)](#jajson) -[ko.json (201 untranslated strings)](#kojson) - [ru.json (1079 untranslated strings)](#rujson) [sv.json (200 untranslated strings)](#svjson) @@ -1098,211 +1096,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.EffectNew": "New effect", "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." ``` -## ko.json -201 untranslated strings -``` -"CoC7.ActorIsTokenHint": "Actor is a token", -"CoC7.ActorDataLinked": "Actor data are linked", -"CoC7.ActorDataNotLinked": "Actor data are NOT linked", -"CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)", -"CoC7.MovementAction": "Movement action", -"CoC7.AdjustedMovement": "Adjusted movement", -"CoC7.DefinitelyInsane": "Good for the asylum", -"CoC7.FINISH": "--F-I-N-I-S-H--", -"CoC7.Restart": "Restart", -"CoC7.Reset": "Reset", -"CoC7.Initiative": "Initiative", -"CoC7.PenaltyDice": "Penalty Dice", -"CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check", -"CoC7.UpgradeSuccessWithLuck": "Upgrade to {difficultyName} success for {luckToSpend} luck.", -"CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)", -"CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)", -"CoC7.RollDifficultyRegularTitle": "Regular difficulty", -"CoC7.RollDifficultyHardTitle": "Hard difficulty", -"CoC7.RollDifficultyExtremeTitle": "Extreme difficulty", -"CoC7.RollDifficultyCriticalTitle": "Critical difficulty", -"CoC7.ArmorIgnored": "Armor Ignored", -"CoC7.combatCard.automaticSuccess": "Automatic Success", -"CoC7.Damage": "Damage", -"CoC7.CheckFailed": "Check failed", -"CoC7.CheckPassed": "Check passed", -"CoC7.CheckMemoryRepressed": "Memory repressed", -"CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", -"CoC7.SkillXpGainDisabled": "XP Gain disabled.", -"CoC7.UnarmedWeaponName": "Unarmed", -"CoC7.CleanSkillList": "Clean skill list", -"CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

", -"CoC7.WeaponSkillMain": "Main skill", -"CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}", -"CoC7.InsertLocation": "Insert location", -"CoC7.RemoveLocation": "Remove location", -"CoC7.LocationNotEmpty": "You can't remove a location with an actor", -"CoC7.LocationInit": "You can't remove a starting location", -"CoC7.SomethingInTheWay": "There is something in the way", -"CoC7.FacingObstacle": "You are facing {type}.", -"CoC7.ABarrier": "a barrier", -"CoC7.Barrier": "Barrier", -"CoC7.AHazard": "a hazard", -"CoC7.Hazard": "Hazard", -"CoC7.Obstacle": "Something in the way", -"CoC7.ConsumeBonusDice": "Consume Bonus Dice", -"CoC7.Breakable": "Breakable", -"CoC7.NoValidCheck": "No valid check", -"CoC7.NoValidSkill": "Fake skill", -"CoC7.AskIntentions": "What are your intentions ?", -"CoC7.WaitForPlayerInput": "Wait for player's input", -"CoC7.AskRoll": "Roll {name} ({value}%)", -"CoC7.ActionCost": "Action cost", -"CoC7.Negotiate": "Negotiate", -"CoC7.BreakDown": "Break Down", -"CoC7.BeingCautious": "You elect to take a cautious approach.", -"CoC7.BeingVeryCautious": "You are being very cautious.", -"CoC7.ReflectObstacleChanges": "Reflect changes to obstacle", -"CoC7.PlayerMovesToLocation": "PLayer is moving to the next location", -"CoC7.ObstaclePassed": "You succeesfully found a way.", -"CoC7.GotLucky": "You got lucky, this time...", -"CoC7.ObstacleFail": "You fail.", -"CoC7.ObstacleFumble": "You fail misarably !", -"CoC7.YouLostTime": "You lost time in your attempt.", -"CoC7.MoveToLocation": "You're moving to the next location.", -"CoC7.DontMoveToLocation": "You're staying there !", -"CoC7.ObstacleDamage": "Obstacle damage", -"CoC7.RemoveObstacle": "Destroy Obstacle", -"CoC7.YouTakeNoDamage": "You did not suffer any injury.", -"CoC7.YouTakeSomeDamage": "You take {amount} points of damage.", -"CoC7.TryToNegotiateHazard": "You try to negotiate that hazard.", -"CoC7.TryToGetPastBarriers": "You try to get past that barrier.", -"CoC7.TryToBreak": "You try to break down that barrier.", -"CoC7.DragOnCanvas": "Drag this on canvas to set the position of this location.", -"CoC7.LocationCoordinate": "Location set to : {x}, {y}.\nRight click to clear.\nDrag this on canvas to change the position.", -"CoC7.ConfirmRestartChase": "Do you want to restart the chase ?", -"CoC7.ConfirmRestartChaseHint": "This will restart your chase.\nAll position will be reseted.\nActors that did not rool a speedcheck will have to roll.", -"CoC7.ConfirmResetChase": "Do you want to restet the chase ?", -"CoC7.ConfirmResetChaseHint": "This will reset your chase.\nAll positions and obstacles will be removed.", -"CoC7.IncludeEscapees": "Let fastest fleeing actors participate.", -"CoC7.TooSlow": "Too slow", -"CoC7.TooFast": "Too fast", -"CoC7.DoesNotMeetMinimumReqToBeAdded": "Can not add participant, need at least valid movement action", -"CoC7.IncludeLatecomers": "Let slow pursuer participate.", -"CoC7.VehicleChase": "Chase can include vehicle (NOT IMPLEMENTED)", -"CoC7.StartingRange": "Starting locations advance", -"CoC7.StartingIndex": "Starting index of fleeing actors", -"CoC7.CutToTheChase": "Cut to the chase", -"CoC7.ChaseSetup": "Chase setup", -"CoC7.ParticipantsList": "Participants list", -"CoC7.NotAllHaveSpeedRoll": "Some participants don't have a speed roll!", -"CoC7.NeedMin2Participants": "You need to have a chaser and a prey to start a chase!", -"CoC7.ConfirmCut2Chase": "Are you ready to cut to the chase ?", -"CoC7.ConfirmCut2ChaseHint": "This will start the chase and the first chase round.", -"CoC7.NextRound": "Next round", -"CoC7.ConfirmNextChaseRound": "Proceed to next round ?", -"CoC7.ConfirmNextChaseRoundHint": "You still have action available on some actors. Are you sure you want to proceed ?", -"CoC7.CheckName": "Check", -"CoC7.ObstacleHasHitPoint": "Toggle location's hit points.", -"CoC7.ActionCostOnFail": "Toggle action penalty on fail.", -"CoC7.DamageOnFail": "Toggle damage on fail.", -"CoC7.OpenObstacleResolutionCard": "Start obstacle resolution flow card.", -"CoC7.AddBonusDie": "Add bonus die", -"CoC7.RemoveBonusDie": "Remove bonus die", -"CoC7.DecreaseMovementAction": "Decrease movement action", -"CoC7.IncreaseMovementAction": "Increase movement action", -"CoC7.CautiousApproach": "Take cautious approach", -"CoC7.Cautious": "Cautious", -"CoC7.Assist": "Assist ally", -"CoC7.MoveForward": "Move forward", -"CoC7.MoveBackward": "Go back", -"CoC7.AddActorToChase": "Add an actor to the chase", -"CoC7.ParticipantDropHint": "You can drop and actor on this window or directly on a chase location.", -"CoC7.OverrideCalc": "Override calculation", -"CoC7.NeedRecalculate": "Recalculation needed", -"CoC7.NeedToRecalculate": "All participant will have their movement action recalculated", -"CoC7.SpeedCheck": "Speed check", -"CoC7.Initialize": "Initialize", -"CoC7.Locations": "Chase locations", -"CoC7.NoDamageDealt": "No damage dealt", -"CoC7.DamageDealt": "You deal {value} damage.", -"CoC7.NothingToRoll": "Nothing to roll!", -"CoC7.ParticipantDataMissing": "Participant data missing", -"CoC7.ParticipantNotFound": "Cannot find participant", -"CoC7.ParticipantUuidNotFound": "Cannot find participant {participantUuid}", -"CoC7.ParticipantNotEnoughMovement": "Particpant {assistantUuid} only has {actions} movement actions", -"CoC7.ParticipantAlreadyProcessed": "Participant was already processed.", -"CoC7.ErrorEmptyLocationsList": "Empty locations list", -"CoC7.ErrorBeneficiaryAtMaxBonus": "Beneficiary {name} already has max bonus dice", -"CoC7.ErrorParticipantAtMaxBonus": "{participantUuid} already has max bonus dice", -"CoC7.ErrorTokenNotOnScene": "Token does not belongs to this location's scene", -"CoC7.AddParticipant": "Add Participant", -"CoC7.RemoveParticipant": "Remove participant", -"CoC7.RemoveParticipantHint": "Participant will be completely removed from the chase", -"CoC7.Remove": "Remove", -"CoC7.Delete": "Delete", -"CoC7.Edit": "Edit", -"CoC7.Create": "Create", -"CoC7.MakeActive": "Make Active", -"CoC7.SelectNewSkill": "Select skill", -"CoC7.AskDamageRoll": "Ask damage roll", -"CoC7.AttemptNegotiateObstacle": "Attempt to negotiate that obstacle", -"CoC7.AttemptBreakDown": "Attempt to break down !!", -"CoC7.ObstacleName": "Obstacle name:", -"CoC7.Actions": "actions:", -"CoC7.Chase.InitiativeShort": "INIT: {value}", -"CoC7.Chase.AdjustedMovementShort": "ADJ. MOV: {value}", -"CoC7.Chase.CheckName": "check name", -"CoC7.Chase.PreysMin": "Preys Min: {value}", -"CoC7.Chase.PreysMax": "Preys Max: {value}", -"CoC7.Chase.ChasersMin": "Chasers Min: {value}", -"CoC7.Chase.ChasersMax": "Chasers Max: {value}", -"CoC7.Sane": "Sane", -"CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula", -"CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.", -"CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}", -"CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}", -"CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`", -"CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import", -"CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import", -"CoC7.ErrorNoTokensSelected": "No tokens selected", -"CoC7.ErrorEvaluatingDamage": "Error evaluating damage", -"CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}", -"CoC7.DamageDealTo": "Damage {name} {damage}HP", -"CoC7.Add": "Add", -"CoC7.Update": "Update", -"CoC7.Enable": "Enable", -"CoC7.Disable": "Disable", -"CoC7.Duration": "Duration", -"CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", -"CoC7.ActorImporterUploadError": "Import stopped, unable to write image", -"CoC7.FileUploadError": "Unable to write image, file upload error", -"CoC7.PickDirectory": "Pick Directory", -"CoC7.ActorImported": "New {actorType} imported: {actorName}", -"CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON", -"CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.", -"CoC7.DholeHouseImportingName": "About to import: ", -"CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House", -"CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor", -"CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character", -"CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}", -"CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}", -"CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}", -"CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}", -"CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}", -"CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", -"CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", -"CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", -"CoC7.ClearAllConditions": "Clear All Conditions", -"CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", -"SETTINGS.TitleChaseSettings": "Chase Settings", -"SETTINGS.DefaultDifficulty": "Default check difficulty", -"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", -"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", -"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", -"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", -"SETTINGS.ChaseShowTokenMovement": "Show token movement.", -"SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", -"SETTINGS.UseContextMenus": "Use context menus", -"SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", -"CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." -``` ## ru.json 1079 untranslated strings ``` From 11931cbc2a03a52b7c1ed25e697e7094c48aec79 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Wed, 23 Nov 2022 14:54:18 +0000 Subject: [PATCH 07/78] Update CHANGELOG.md --- .github/CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/CHANGELOG.md b/.github/CHANGELOG.md index c34a5a759..1ce85c3ed 100644 --- a/.github/CHANGELOG.md +++ b/.github/CHANGELOG.md @@ -5,6 +5,13 @@ Happy gaming ! +## Upcoming Release + +When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. + +- Show special property of weapons on combat chat cards, thanks to @acd-jake #1291 +- Update to Korean localization, thanks to @SRagg #1288 + ## Version 0.9.2 When not specified, all changes were made by @castanhocorreia, @HavlockV, and @snap01. From 708db0dea22c81bbe5cc72a2ec94854ac133684e Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 16 Jan 2023 00:16:37 +0000 Subject: [PATCH 08/78] CoC ID implementation --- compendiums/items.yaml | 251 +++ compendiums/skills.yaml | 1977 +++++++++++++++++ generate-compendiums.js | 107 + lang/cn.json | 18 +- lang/cs.json | 16 +- lang/de.json | 18 +- lang/en.json | 59 +- lang/es.json | 18 +- lang/fr.json | 18 +- lang/it.json | 18 +- lang/ja.json | 18 +- lang/ko.json | 18 +- lang/pl.json | 18 +- lang/pt-BR.json | 18 +- lang/ru.json | 10 +- lang/sv.json | 18 +- lang/zh-TW.json | 18 +- module/actors/actor.js | 177 +- module/actors/sheets/base.js | 9 +- module/actors/sheets/container.js | 7 + module/apps/coc-id-editor.js | 247 ++ module/apps/drop-coc-id.js | 47 + .../skill-specialization-select-dialog.js | 77 + module/coc7.js | 53 +- module/config.js | 26 +- module/hooks/index.js | 2 + module/hooks/init.js | 2 + module/hooks/render-chat-message.js | 15 +- module/hooks/render-player-list.js | 8 + module/items/book/data.js | 4 +- module/items/book/sheet.js | 7 + module/items/chase/sheet.js | 14 +- module/items/item.js | 31 +- module/items/sheets/archetype.js | 15 +- module/items/sheets/item-sheetV2.js | 8 + module/items/sheets/occupation.js | 23 +- module/items/sheets/setup.js | 28 +- module/items/sheets/skill.js | 17 +- module/items/sheets/status.js | 7 + module/items/sheets/talent.js | 7 + module/items/sheets/weapon-sheet.js | 12 +- module/items/spell/sheet.js | 8 + module/scripts/coc-id-button.js | 19 + module/scripts/coc-id.js | 530 +++++ module/scripts/compendium-filter.js | 28 +- module/scripts/register-settings.js | 28 + module/scripts/register-sheets.js | 33 +- module/sheets/coc7-journal-sheet.js | 10 + module/sheets/coc7-macro-config.js | 10 + module/sheets/coc7-playlist-config.js | 10 + module/sheets/coc7-roll-table-config.js | 10 + module/sheets/coc7-scene-config.js | 10 + module/updater.js | 330 ++- module/utilities.js | 13 + packs/examples.db | 10 +- packs/items.db | 24 +- packs/skills.db | 187 +- styles/sheets/sheet.less | 72 + styles/sheets/sheets.less | 104 +- template.json | 5 - .../parts/character-development-v2.html | 2 +- .../actors/parts/development-controls.html | 4 +- templates/apps/coc-id-editor.hbs | 168 ++ .../apps/skill-specialization-select.hbs | 39 + templates/items/occupation.html | 2 +- templates/items/setup.html | 2 +- templates/items/skill-sheet.html | 2 +- templates/items/weapon-sheet.html | 2 +- 68 files changed, 4551 insertions(+), 572 deletions(-) create mode 100644 compendiums/items.yaml create mode 100644 compendiums/skills.yaml create mode 100644 generate-compendiums.js create mode 100644 module/apps/coc-id-editor.js create mode 100644 module/apps/drop-coc-id.js create mode 100644 module/apps/skill-specialization-select-dialog.js create mode 100644 module/hooks/render-player-list.js create mode 100644 module/scripts/coc-id-button.js create mode 100644 module/scripts/coc-id.js create mode 100644 module/sheets/coc7-journal-sheet.js create mode 100644 module/sheets/coc7-macro-config.js create mode 100644 module/sheets/coc7-playlist-config.js create mode 100644 module/sheets/coc7-roll-table-config.js create mode 100644 module/sheets/coc7-scene-config.js create mode 100644 templates/apps/coc-id-editor.hbs create mode 100644 templates/apps/skill-specialization-select.hbs diff --git a/compendiums/items.yaml b/compendiums/items.yaml new file mode 100644 index 000000000..e5259ad74 --- /dev/null +++ b/compendiums/items.yaml @@ -0,0 +1,251 @@ +_id: CcH7CdXGtGTjMSCg +name: 1920's Setup Example +type: setup +img: icons/svg/item-bag.svg +system: + description: + value:

Default setup for 1920's character.

+ source: '' + items: + - i.skill.accounting + - i.skill.anthropology + - i.skill.appraise + - i.skill.archaeology + - i.skill.art-craft-any + - i.skill.charm + - i.skill.climb + - i.skill.credit-rating + - i.skill.cthulhu-mythos + - i.skill.disguise + - i.skill.dodge + - i.skill.drive-auto + - i.skill.electrical-repair + - i.skill.fast-talk + - i.skill.fighting-brawl + - i.skill.fighting-throw + - i.skill.firearms-handgun + - i.skill.firearms-rifle-shotgun + - i.skill.first-aid + - i.skill.history + - i.skill.intimidate + - i.skill.jump + - i.skill.language-own + - i.skill.law + - i.skill.library-use + - i.skill.listen + - i.skill.locksmith + - i.skill.mechanical-repair + - i.skill.medicine + - i.skill.natural-world + - i.skill.navigate + - i.skill.occult + - i.skill.operate-heavy-machinery + - i.skill.persuade + - i.skill.pilot-any + - i.skill.psychoanalysis + - i.skill.psychology + - i.skill.ride + - i.skill.science-any + - i.skill.sleight-of-hand + - i.skill.spot-hidden + - i.skill.stealth + - i.skill.survival-any + - i.skill.swim + - i.skill.track + - i.weapon.brawl + bioSections: + - Personal Description + - Ideology/Beliefs + - Significant People + - Meaningful Locations + - Treasured Possessions + - Traits +flags: + cocidFlag: + id: i.setup.standard + lang: en + eras: + standard: true + priority: 0 +--- +_id: lu04TIRrg9P3vRqY +name: Archetype Example +type: archetype +img: icons/svg/item-bag.svg +system: + source: '' + coreCharacteristics: + app: true + int: true + skills: + - i.skill.appraise + - i.skill.art-craft-acting + - i.skill.art-craft-any + - i.skill.charm + - i.skill.disguise + - i.skill.drive-auto + - i.skill.fast-talk + - i.skill.fighting-brawl + - i.skill.firearms-handgun + - i.skill.listen + - i.skill.psychology + - i.skill.sleight-of-hand + - i.skill.stealth +--- +_id: zyCszwqyTg21l9E2 +name: Death ray (prototype) +type: weapon +img: icons/svg/sword.svg +system: + range: + normal: + value: 50ft + damage: 5d6 + usesPerRound: + max: '' + burst: '' + bullets: '' + malfunction: '' + properties: + rngd: true + slnt: true +--- +_id: uWQYNsMURpspTetM +name: Experimental weapon +type: weapon +img: icons/svg/sword.svg +system: + description: + value:

Description of the weapon

selecting 'Area of effect' will enable 3 different damage and range

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

selecting 'Special' will activate the special input field

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

Edit the weapon and select the correct skill.

+ special: '

You can add special description or slugs there:

Slug 1: [[/r 2d17kh]]

' + skill: + main: + name: To be selected once the weapon is owned + range: + normal: + value: 15ft + damage: 3d6 + usesPerRound: + max: '' + burst: '' + bullets: '' + malfunction: 85 + properties: + rngd: true + brst: true + spcl: true +--- +_id: DVdvEDizPZPux1pK +name: Mania 1 +type: status +img: icons/svg/aura.svg +system: + source: '' + type: + mania: true +--- +_id: Vm9OzZnAVOpDdwfB +name: Mania 2 +type: status +img: icons/svg/aura.svg +system: + source: '' + type: + mania: true +--- +_id: NOsh6EdNSjpjahDF +name: Occupation Example +type: occupation +img: icons/svg/item-bag.svg +system: + source: '' + type: + classic: true + occupationSkillPoints: + app: + multiplier: 2 + selected: true + edu: + multiplier: 2 + selected: true + creditRating: + min: 10 + max: 80 + skills: + - i.skill.art-craft-any + - i.skill.art-craft-any + - i.skill.drive-auto + - i.skill.listen + - i.skill.stealth + groups: + - options: 2 + skills: + - i.skill.charm + - i.skill.fast-talk + - i.skill.intimidate + - i.skill.persuade + - options: 1 + skills: + - i.skill.fighting-brawl + - i.skill.firearms-handgun + personal: 1 +--- +_id: PFpgtSKUcBDLVLY6 +name: Phobia 1 +type: status +img: icons/svg/aura.svg +system: + source: '' + type: + phobia: true +--- +_id: 2dqgtyGfwr8M60he +name: Phobia 2 +type: status +img: icons/svg/aura.svg +system: + source: '' + type: + phobia: true +--- +_id: 3elxAwnv7WCUNwng +name: Punch +type: weapon +img: systems/CoC7/assets/icons/skills/fighting_brawl.svg +system: + skill: + main: + name: Brawl + range: + normal: + damage: 1D3 + usesPerRound: + max: '' + bullets: '' + malfunction: '' + properties: + melee: true + addb: true +flags: + cocidFlag: + id: i.weapon.brawl + lang: en + priority: 0 +--- +_id: yqvwz769ZeJplOW7 +name: Talent 1 +type: talent +img: icons/svg/item-bag.svg +system: + source: '' + type: + physical: true +--- +_id: NVz7eCFnoH8J12qH +name: Talent 2 +type: talent +img: icons/svg/item-bag.svg +system: + source: '' + type: + mental: true diff --git a/compendiums/skills.yaml b/compendiums/skills.yaml new file mode 100644 index 000000000..d9814842f --- /dev/null +++ b/compendiums/skills.yaml @@ -0,0 +1,1977 @@ +_id: 0qCTuRFUCACSEsWj +name: Mechanical Repair +type: skill +img: systems/CoC7/assets/icons/skills/mechanical_repair.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.mechanical-repair + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: 0rlp7EuZDzQGjIYf +name: Science (Zoology) +type: skill +img: systems/CoC7/assets/icons/skills/science_zoology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-zoology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: 1c3fdvpQtvZf5YXK +name: Navigate +type: skill +img: systems/CoC7/assets/icons/skills/navigate.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.navigate + lang: en + priority: 0 +--- +_id: 1zSIeY0eat2AxQok +name: Swim +type: skill +img: systems/CoC7/assets/icons/skills/swim.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.swim + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: 23vdyJDDfjyneH3I +name: Firearms (Heavy Weapons) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-heavy-weapons + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: 35dvJDsrY8JipXRU +name: Firearms (Flamethrower) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_flamethrower.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-flamethrower + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: 4lN6yD6zwbjX6BFp +name: Diving +type: skill +img: systems/CoC7/assets/icons/skills/diving_helmet.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true + rarity: true +flags: + cocidFlag: + id: i.skill.diving + lang: en + eras: + standard: true + modern: true + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: 64hnBZNC8FM7oTkg +name: Law +type: skill +img: systems/CoC7/assets/icons/skills/law.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.law + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: 6pSfZVS68jSHxa5T +name: Occult +type: skill +img: systems/CoC7/assets/icons/skills/occult.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.occult + lang: en + priority: 0 +--- +_id: 8twBT7nbyh5dEp3J +name: Science (Chemistry) +type: skill +img: systems/CoC7/assets/icons/skills/science_chemistry.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-chemistry + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: 9zy7PLmTLXknFce4 +name: Science (Engineering) +type: skill +img: systems/CoC7/assets/icons/skills/spanner.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-engineering + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: AcUIbZFhfoXqQP2m +name: Track +type: skill +img: systems/CoC7/assets/icons/skills/track.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.track + lang: en + priority: 0 +--- +_id: BcWHh8EhmyKj7bNk +name: Library Use +type: skill +img: systems/CoC7/assets/icons/skills/library_use.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.library-use + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: DcV524K0jNfjDEZC +name: Stealth +type: skill +img: systems/CoC7/assets/icons/skills/stealth.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.stealth + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + darkAges: true + darkAgesPulp: true + gasLight: true + priority: 0 +--- +_id: Dh6sHWep0qKQmi3I +name: Science (Physics) +type: skill +img: systems/CoC7/assets/icons/skills/science_physics.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-physics + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: EMA6uEtQBgJtBcPl +name: Rope Use +type: skill +img: systems/CoC7/assets/icons/skills/lasso.svg +system: + description: + value:

See the Down Darker Trails Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.rope-use + lang: en + eras: + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: Ed8OShyl7D834Ihk +name: Fighting (Chainsaw) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_chainsaw.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-chainsaw + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: GHhkcJUqjcP4lToY +name: Archaeology +type: skill +img: systems/CoC7/assets/icons/skills/archaeology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.archaeology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: HAuFBG4ZT2yO9yn7 +name: Art/Craft (Any) +type: skill +img: systems/CoC7/assets/icons/skills/art_craft_any.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + special: true + requiresname: true + push: true +flags: + cocidFlag: + id: i.skill.art-craft-any + lang: en + priority: 0 +--- +_id: HzOGu2yLcL9obry3 +name: Trap +type: skill +img: systems/CoC7/assets/icons/skills/wolf-trap.svg +system: + description: + value:

See the Down Darker Trails Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.trap + lang: en + eras: + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: I80gmmo830LuOBKl +name: Civics +type: skill +img: systems/CoC7/assets/icons/skills/shaking-hands.svg +system: + description: + value:

See the Cthulhu Invictus

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.civics + lang: en + eras: + invictus: true + priority: 0 +--- +_id: IBSDR6U4dE1uejVp +name: Science (Biology) +type: skill +img: systems/CoC7/assets/icons/skills/science_biology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-biology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: IttOdCAGTeE6VU3F +name: Fighting (Spear) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_spear.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-spear + lang: en + priority: 0 +--- +_id: JgtxiN3KzooOWIQV +name: Charm +type: skill +img: systems/CoC7/assets/icons/skills/charm.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + push: true +flags: + cocidFlag: + id: i.skill.charm + lang: en + priority: 0 +--- +_id: KKFNX5M4LtEtiuxs +name: Sleight of Hand +type: skill +img: systems/CoC7/assets/icons/skills/sleight_of_hand.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.sleight-of-hand + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: KmDGtn7ukUFVb265 +name: Firearms (Handgun) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_handgun.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-handgun + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: KvZuYcg3AmVrwKi2 +name: Science (Any) +type: skill +img: systems/CoC7/assets/icons/skills/science_any.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + requiresname: true + push: true +flags: + cocidFlag: + id: i.skill.science-any + lang: en + priority: 0 +--- +_id: MFR4eR79niGaLfph +name: Psychology +type: skill +img: systems/CoC7/assets/icons/skills/psychology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.psychology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: MRbFH52Zh9TzhLBh +name: Locksmith +type: skill +img: systems/CoC7/assets/icons/skills/locksmith.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.locksmith + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: MoAB0NRNlpEc2qWr +name: Listen +type: skill +img: systems/CoC7/assets/icons/skills/listen.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.listen + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: NBkq8oCGM1FjmsyF +name: Electrical Repair +type: skill +img: systems/CoC7/assets/icons/skills/electrical_repair.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.electrical-repair + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: Nw5tSvi2Knxlqmg1 +name: Science (Forensics) +type: skill +img: systems/CoC7/assets/icons/skills/science_forensics.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-forensics + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: OcnZzOYWaP4VsjXS +name: Fighting (Flail) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_flail.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-flail + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: Og2OWQH93aSDWAMZ +name: Drive Auto +type: skill +img: systems/CoC7/assets/icons/skills/drive_auto.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.drive-auto + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: Pb3QI7x9xJVeXi8a +name: Fighting (Whip) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_whip.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-whip + lang: en + priority: 0 +--- +_id: QcomAOgmOS5g3dsh +name: Firearms (Machine Gun) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_machine_gun.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-machine-gun + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: QwaL3UC3Gvjd3hmF +name: Science (Geology) +type: skill +img: systems/CoC7/assets/icons/skills/science_geology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-geology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: SL2OorS0Xx6ty02A +name: Read Lips +type: skill +img: systems/CoC7/assets/icons/skills/read_lips.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + rarity: true + push: true +flags: + cocidFlag: + id: i.skill.read-lips + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: SflwB1bbjaQebiPQ +name: Gambling +type: skill +img: systems/CoC7/assets/icons/skills/poker-hand.svg +system: + description: + value:

See the Down Darker Trails Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.gambling + lang: en + eras: + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: ShPoibiLsd07AtZv +name: Science (Botany) +type: skill +img: systems/CoC7/assets/icons/skills/science_botany.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-botany + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: Sxviv60td6kbS4kp +name: Drive Carriage +type: skill +img: systems/CoC7/assets/icons/skills/cartwheel.svg +system: + description: + value:

See the Cthulhu by Gaslight

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.drive-carriage + lang: en + eras: + gasLight: true + priority: 0 +--- +_id: T8fSLCwSD8C0iK8t +name: Fighting (Axe) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_axe.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-axe + lang: en + priority: 0 +--- +_id: TPOu48DT4QIrqE68 +name: Fighting (Garrote) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_garrote.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-garrote + lang: en + priority: 0 +--- +_id: TwYYqLHe1PXnOCDF +name: Science (Mathematics) +type: skill +img: systems/CoC7/assets/icons/skills/science_mathematics.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-mathematics + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: UASTWOvgCYi8G1QQ +name: Science (Cryptography) +type: skill +img: systems/CoC7/assets/icons/skills/science_cryptography.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-cryptography + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: UOuN0gESXPp2HXwH +name: Accounting +type: skill +img: systems/CoC7/assets/icons/skills/accounting.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.accounting + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: URo2NSSJSNdvOqXU +name: History +type: skill +img: systems/CoC7/assets/icons/skills/history.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.history + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: V9ulAwDyLVqqQ0su +name: Science (Pharmacy) +type: skill +img: systems/CoC7/assets/icons/skills/science_pharmacy.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-pharmacy + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: VZSv9eodMQ4ZPcrO +name: Computer Use +type: skill +img: systems/CoC7/assets/icons/skills/computer_use.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.computer-use + lang: en + eras: + modern: true + modernPulp: true + priority: 0 +--- +_id: VwGWZ2LBOwtMaw08 +name: Firearms (Bow) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_bow.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-bow + lang: en + priority: 0 +--- +_id: WJky66ezt2ef5ksH +name: Cthulhu Mythos +type: skill +img: systems/CoC7/assets/icons/skills/cthulhu_mythos.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 0 + properties: + noadjustments: true + noxpgain: true +flags: + cocidFlag: + id: i.skill.cthulhu-mythos + lang: en + priority: 0 +--- +_id: WLYZNASZ2YP8zN3g +name: Art/Craft (Photography) +type: skill +img: systems/CoC7/assets/icons/skills/art_craft_photography.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.art-craft-photography + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +_id: X99v5MtRlfTNjL3B +name: Survival (Any) +type: skill +img: systems/CoC7/assets/icons/skills/survival_any.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + special: true + requiresname: true + push: true +flags: + cocidFlag: + id: i.skill.survival-any + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: Xmg7oAy70DKpv4kq +name: Medicine +type: skill +img: systems/CoC7/assets/icons/skills/medicine.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.medicine + lang: en + priority: 0 +--- +_id: Yu3Xk8kZBlz0G82y +name: Language (Any) +type: skill +img: systems/CoC7/assets/icons/skills/language.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + requiresname: true + push: true +flags: + cocidFlag: + id: i.skill.language-any + lang: en + priority: 0 +--- +_id: bJt90h73GqdP7ti6 +name: Demolitions +type: skill +img: systems/CoC7/assets/icons/skills/demolitions.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + rarity: true + push: true +flags: + cocidFlag: + id: i.skill.demolitions + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: c5utlFbDM7J8TA8b +name: Jump +type: skill +img: systems/CoC7/assets/icons/skills/jump.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.jump + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: cuExWy1130KUwuWz +name: Operate Heavy Machinery +type: skill +img: systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.operate-heavy-machinery + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: dQ4zUjSteT3sgwKx +name: Animal Handling +type: skill +img: systems/CoC7/assets/icons/skills/animal_handling.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true + rarity: true +flags: + cocidFlag: + id: i.skill.animal-handling + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: gRUXG91zIJXOLye1 +name: Firearms (Submachine Gun) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-submachine-gun + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: gzNPM9gbx0EZffBV +name: Disguise +type: skill +img: systems/CoC7/assets/icons/skills/disguise.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.disguise + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + darkAges: true + darkAgesPulp: true + gasLight: true + priority: 0 +--- +_id: hDr4eUbS398oniTa +name: Intimidate +type: skill +img: systems/CoC7/assets/icons/skills/intimidate.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 15 + properties: + push: true +flags: + cocidFlag: + id: i.skill.intimidate + lang: en + priority: 0 +--- +_id: hRPbMl2N0t6aBlyc +name: Fighting (Sword) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_sword.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-sword + lang: en + priority: 0 +--- +_id: hhvqA2BOljk1FHVg +name: Science (Astronomy) +type: skill +img: systems/CoC7/assets/icons/skills/science_astronomy.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true + special: true +flags: + cocidFlag: + id: i.skill.science-astronomy + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: jTcu6Ni2ek7Yz5q3 +name: Natural World +type: skill +img: systems/CoC7/assets/icons/skills/natural_world.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.natural-world + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +_id: ld78TITwKNFPpanQ +name: Fast Talk +type: skill +img: systems/CoC7/assets/icons/skills/fast_talk.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.fast-talk + lang: en + priority: 0 +--- +_id: m2pYjKk4Gk3FcEBL +name: Firearms (Rifle/Shotgun) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 25 + properties: + firearm: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.firearms-rifle-shotgun + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: m6V53lyfz7zh95FE +name: Art/Craft (Acting) +type: skill +img: systems/CoC7/assets/icons/skills/art_craft_acting.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.art-craft-acting + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +_id: m8sBJxvuUdtQ2mDU +name: Art/Craft (Fine Art) +type: skill +img: systems/CoC7/assets/icons/skills/art_craft_fine_art.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.art-craft-fine-art + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +_id: mEblnQjptKvKCeIg +name: Hypnosis +type: skill +img: systems/CoC7/assets/icons/skills/hypnosis.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + rarity: true + push: true +flags: + cocidFlag: + id: i.skill.hypnosis + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: nHaWNwtW3Lg0sqYJ +name: Spot Hidden +type: skill +img: systems/CoC7/assets/icons/skills/spot_hidden.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 25 + properties: + push: true +flags: + cocidFlag: + id: i.skill.spot-hidden + lang: en + priority: 0 +--- +_id: nZ8rdL4PLb7A7f5B +name: First Aid +type: skill +img: systems/CoC7/assets/icons/skills/first_aid.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 30 + properties: + push: true +flags: + cocidFlag: + id: i.skill.first-aid + lang: en + priority: 0 +--- +_id: o7TdzbuSP7ticONf +name: Ride +type: skill +img: systems/CoC7/assets/icons/skills/ride.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.ride + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +_id: oEfvPMTx0cgyPlgV +name: Electronics +type: skill +img: systems/CoC7/assets/icons/skills/electronics.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.electronics + lang: en + eras: + modern: true + modernPulp: true + priority: 0 +--- +_id: oh5eFj00Wohnx1My +name: Climb +type: skill +img: systems/CoC7/assets/icons/skills/climb.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.climb + lang: en + priority: 0 +--- +_id: ovIp66Luwfwbq28F +name: Anthropology +type: skill +img: systems/CoC7/assets/icons/skills/anthropology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.anthropology + lang: en + eras: + standard: true + modern: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: qET2wCGGdy3z18Gc +name: Firearms (Artillery) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_artillery.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + firearm: true + combat: true + special: true + rarity: true +flags: + cocidFlag: + id: i.skill.firearms-artillery + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: rAK5soSX1n3jXj2A +name: Drive Horse / Oxen +type: skill +img: systems/CoC7/assets/icons/skills/cartwheel.svg +system: + description: + value:

See the Cthulhu Invictus

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.drive-horse-oxen + lang: en + eras: + darkAges: true + darkAgesPulp: true + invictus: true + priority: 0 +--- +_id: rCJKGay6D0ucqgeg +name: Lore (Any) +type: skill +img: systems/CoC7/assets/icons/skills/classical_knowledge.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + requiresname: true + rarity: true + push: true +flags: + cocidFlag: + id: i.skill.lore-any + lang: en + eras: + standard: true + modern: true + priority: 0 +--- +_id: rXBU2GofiO2qOsGv +name: Psychoanalysis +type: skill +img: systems/CoC7/assets/icons/skills/psychoanalysis.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + push: true +flags: + cocidFlag: + id: i.skill.psychoanalysis + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: rhJ1Q9OB3uTUZmjD +name: Language (Own) +type: skill +img: systems/CoC7/assets/icons/skills/language.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: '@EDU' + properties: + push: true + special: true + requiresname: true + keepbasevalue: true +flags: + cocidFlag: + id: i.skill.language-own + lang: en + priority: 0 +--- +_id: sWt5Q3ZXd6NlwhXU +name: Fighting (Throw) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_throw.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 20 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-throw + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: sqenne0VZoF54W5k +name: Drive Wagon / Coach +type: skill +img: systems/CoC7/assets/icons/skills/cartwheel.svg +system: + description: + value:

See the Down Darker Trails Rulebook

+ base: 20 + properties: + push: true +flags: + cocidFlag: + id: i.skill.drive-wagon-coach + lang: en + eras: + downDarkerTrails: true + downDarkerTrailsPulp: true + priority: 0 +--- +_id: t7uiYybrk8dHFdjp +name: Empire +type: skill +img: systems/CoC7/assets/icons/skills/laurel_crown.svg +system: + description: + value:

See the Cthulhu Invictus

+ base: 25 + properties: + push: true +flags: + cocidFlag: + id: i.skill.empire + lang: en + eras: + invictus: true + priority: 0 +--- +_id: uMzSNURmZqjxr7mU +name: Persuade +type: skill +img: systems/CoC7/assets/icons/skills/persuade.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 10 + properties: + push: true +flags: + cocidFlag: + id: i.skill.persuade + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: uQsVn8K6XRXQmtaI +name: Pilot (Any) +type: skill +img: systems/CoC7/assets/icons/skills/pilot_any.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + requiresname: true + push: true +flags: + cocidFlag: + id: i.skill.pilot-any + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: vS8bsPWFlwgOecoB +name: Fighting (Brawl) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_brawl.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 25 + properties: + fighting: true + combat: true + special: true +flags: + cocidFlag: + id: i.skill.fighting-brawl + lang: en + priority: 0 +--- +_id: vYrJ5h9cIQBzvw8E +name: Credit Rating +type: skill +img: systems/CoC7/assets/icons/skills/credit_rating.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 0 + properties: + noxpgain: true + push: true +flags: + cocidFlag: + id: i.skill.credit-rating + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + downDarkerTrails: true + downDarkerTrailsPulp: true + gasLight: true + priority: 0 +--- +_id: w7hWVU14syjweIH2 +name: Science (Meteorology) +type: skill +img: systems/CoC7/assets/icons/skills/science_meteorology.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.science-meteorology + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + priority: 0 +--- +_id: wK8XxNj9QwXlGFEb +name: Dodge +type: skill +img: systems/CoC7/assets/icons/skills/dodge.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 1/2*@DEX +flags: + cocidFlag: + id: i.skill.dodge + lang: en + priority: 0 +--- +_id: wOs3gryeGRPkGoWD +name: Appraise +type: skill +img: systems/CoC7/assets/icons/skills/appraise.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + push: true +flags: + cocidFlag: + id: i.skill.appraise + lang: en + priority: 0 +--- +_id: zcvnv8qY4GrVwwTL +name: Art/Craft (Forgery) +type: skill +img: systems/CoC7/assets/icons/skills/art_craft_forgery.svg +system: + description: + value:

See the Call of Cthulhu - 7th Ed Core Rulebook

+ base: 5 + properties: + special: true + push: true +flags: + cocidFlag: + id: i.skill.art-craft-forgery + lang: en + eras: + standard: true + modern: true + modernPulp: true + pulp: true + gasLight: true + priority: 0 +--- +name: Fighting (Any) +type: skill +img: systems/CoC7/assets/icons/skills/fighting_brawl.svg +system: + base: 0 + description: + value:

Use in occupations / archetypes to prompt to select one Fighting skill

+ properties: + fighting: true + combat: true + special: true + picknameonly: true +flags: + cocidFlag: + id: i.skill.fighting-any + lang: en + priority: 0 +--- +name: Firearms (Any) +type: skill +img: systems/CoC7/assets/icons/skills/firearms_handgun.svg +system: + base: 0 + description: + value:

Use in occupations / archetypes to prompt to select one Firearms skill

+ properties: + firearm: true + combat: true + special: true + picknameonly: true +flags: + cocidFlag: + id: i.skill.firearms-any + lang: en + priority: 0 diff --git a/generate-compendiums.js b/generate-compendiums.js new file mode 100644 index 000000000..59de7f496 --- /dev/null +++ b/generate-compendiums.js @@ -0,0 +1,107 @@ +import * as crypto from 'crypto' +import * as fs from 'fs' +import glob from './node_modules/glob/glob.js' +import { loadAll } from './node_modules/js-yaml/index.js' + +const lang = 'en' + +let foundryVTTFile = '' +let check = '' +const collisions = {} +if (fs.existsSync(check = './system.json')) { + foundryVTTFile = check +} else if (fs.existsSync(check = './module.json')) { + foundryVTTFile = check +} + +if (foundryVTTFile !== '') { + const packs = {} + const json = JSON.parse(fs.readFileSync(foundryVTTFile, 'utf8')) + for (const pack of json.packs) { + const match = pack.path.match(/([^\\/]+)\.db$/) + if (match) { + packs[match[1]] = pack.type + } + } + console.log('Known packs', packs) + const dbList = glob.sync('./compendiums/*.yaml', {}) + for (const filename of dbList) { + const match = filename.match(/^\.\/compendiums\/([^/]+)\.yaml$/) + if (match) { + const fileslug = match[1] + if (typeof packs[fileslug] !== 'undefined') { + const type = packs[fileslug] + let yaml = loadAll(fs.readFileSync(filename, 'utf8')) + yaml = yaml.filter(doc => doc).map(doc => { + if (!doc._id) { + // Make sure we don't generate new ids everytime we rebuild + doc._id = generateBuildConsistentID(doc.name + lang + JSON.stringify(doc.flags.cocidFlag.eras)) + } + doc.flags = { + CoC7: doc.flags + } + switch (type) { + case 'Item': + switch (doc.type) { + case 'skill': { + const match = doc.name.match(/^(.+)\s*\((.+)\)$/) + if (match) { + doc.system.skillName = match[2].trim() + doc.system.specialization = match[1].trim() + } else { + doc.system.skillName = doc.name + doc.system.specialization = '' + } + break + } + } + break + case 'RollTable': + if (typeof doc.results !== 'undefined') { + let range = 0 + for (const offset in doc.results) { + if (!doc.results[offset]._id) { + doc.results[offset]._id = generateBuildConsistentID(doc.name + lang + JSON.stringify(doc.flags.CoC7.cocidFlag.eras) + offset) + } + if (!doc.results[offset].range) { + range++ + doc.results[offset].range = [range, range] + } else { + range = doc.results[offset].range[1] + } + } + if (!doc.formula) { + doc.formula = '1d' + range + } + } + } + return doc + }) + const packDir = './packs/' + const file = packDir + fileslug + '.db' + if (!fs.existsSync(packDir)) { + fs.mkdirSync(packDir, { recursive: true }) + } + console.log('Generating: ' + file) + fs.writeFileSync(file, yaml.map(doc => JSON.stringify(doc)).join('\n')) + } + } + } +} + +/** + * generateBuildConsistentID uses idSource to generate an id that will be consistent across builds. + * + * Note: This is called outside of foundry to build manual .db files and substitutes foundry.utils.randomID in a build consistent way. + * It creates a hash from the key so it is consistent between builds and the converts to base 64 so it uses the same range of characters as FoundryVTTs generator. + * @param {string} idSource + * @returns id, an string of 16 characters with the id consistently generated from idSource + */ +function generateBuildConsistentID (idSource) { + let id = crypto.createHash('md5').update(idSource).digest('base64').replace(/[\\+=\\/]/g, '').substring(0, 16) + while (typeof collisions[id] !== 'undefined') { + console.log('collision on ' + idSource) + id = crypto.createHash('md5').update(idSource + Math.random().toString()).digest('base64').replace(/[\\+=\\/]/g, '').substring(0, 16) + } + return id +} diff --git a/lang/cn.json b/lang/cn.json index 002fa7dce..91d5037ed 100644 --- a/lang/cn.json +++ b/lang/cn.json @@ -328,13 +328,13 @@ "CoC7.ItemPrice": "价格", "CoC7.Armor": "护甲", - "CoC7.EraNvct": "克苏鲁不败", - "CoC7.EraDrka": "克苏鲁黑暗时代", - "CoC7.EraDdts": "神秘冰岛", - "CoC7.EraGlit": "克苏鲁煤气灯", + "CoC7.EraInvictus": "克苏鲁不败", + "CoC7.EraDarkAges": "克苏鲁黑暗时代", + "CoC7.EraDownDarkerTrails": "神秘冰岛", + "CoC7.EraGasLight": "克苏鲁煤气灯", "CoC7.Era1920": "1920s", "CoC7.EraPulp": "通俗克苏鲁", - "CoC7.EraMdrn": "现代", + "CoC7.EraModern": "现代", "CoC7.Eras": "克苏鲁年代", "CoC7.EraAvailability": "可用性", @@ -377,10 +377,10 @@ "CoC7.NewBioSectionName": "新增章节", - "CoC7.DodgeSkillName": "闪避", - "CoC7.CthulhuMythosName": "克苏鲁神话", - "CoC7.CreditRatingSkillName": "信用", - "CoC7.DriveAutoSkillName": "自动驾驶", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "闪避", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "克苏鲁神话", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "信用", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "自动驾驶", "CoC7.FightingSpecializationName": "近身战斗", "CoC7.FirearmSpecializationName": "射击", "CoC7.DriveSpecializationName": "驾驶", diff --git a/lang/cs.json b/lang/cs.json index 352b53ecb..b51364ec5 100644 --- a/lang/cs.json +++ b/lang/cs.json @@ -271,13 +271,13 @@ "CoC7.WeaponSpecial": "Speciální", "CoC7.ItemPrice": "Cena", "CoC7.Armor": "Pancíř", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Dark Ages", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu od Gaslight", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Dark Ages", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu od Gaslight", "CoC7.Era1920": "1920s", "CoC7.EraPulp": "Pulpové Cthulhu", - "CoC7.EraMdrn": "Moderní", + "CoC7.EraModern": "Moderní", "CoC7.Eras": "Cthulhu Flavors", "CoC7.SkillNoAdjustments": "Bez úprav", "CoC7.SkillNoXpGain": "Žádný zisk XP", @@ -314,9 +314,9 @@ "CoC7.Validate": "Ověřit", "CoC7.Apply": "Aplikovat", "CoC7.NewBioSectionName": "Nová sekce", - "CoC7.DodgeSkillName": "Uhýbání", - "CoC7.CthulhuMythosName": "Mýtus Cthulhu", - "CoC7.CreditRatingSkillName": "Zámožnost", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Uhýbání", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Mýtus Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Zámožnost", "CoC7.FightingSpecializationName": "Boj", "CoC7.FirearmSpecializationName": "Střelné zbraně", "CoC7.DriveSpecializationName": "Řízení", diff --git a/lang/de.json b/lang/de.json index 596ee45e1..a32ddadf9 100644 --- a/lang/de.json +++ b/lang/de.json @@ -362,13 +362,13 @@ "CoC7.ItemPrice": "Preis", "CoC7.Armor": "Panzerung", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Mittelalter", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu: Gaslicht", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Mittelalter", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu: Gaslicht", "CoC7.Era1920": "1920er", "CoC7.EraPulp": "Pulp-Cthulhu", - "CoC7.EraMdrn": "Modern", + "CoC7.EraModern": "Modern", "CoC7.Eras": "Cthulhu Eras", "CoC7.EraAvailability": "Verfügbarkeit", @@ -414,10 +414,10 @@ "CoC7.NewBioSectionName": "Neuer Bereich", - "CoC7.DodgeSkillName": "Ausweichen", - "CoC7.CthulhuMythosName": "Cthulhu-Mythos", - "CoC7.CreditRatingSkillName": "Finanzkraft", - "CoC7.DriveAutoSkillName": "Autofahren", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Ausweichen", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Cthulhu-Mythos", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Finanzkraft", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Autofahren", "CoC7.FightingSpecializationName": "Nahkampf", "CoC7.UnarmedWeaponName": "Handgemenge", "CoC7.FirearmSpecializationName": "Fernkampf", diff --git a/lang/en.json b/lang/en.json index c0ed01ac0..02e7e9fda 100644 --- a/lang/en.json +++ b/lang/en.json @@ -115,6 +115,7 @@ "CoC7.All": "All", "CoC7.Success": "Success", "CoC7.CustomLabel": "Custom label", + "CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.SpecificLocations": "Specific locations", "CoC7.ArmourPlating": "Armour plating", "CoC7.Location": "Location", @@ -362,13 +363,16 @@ "CoC7.ItemPrice": "Price", "CoC7.Armor": "Armor", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Dark Ages", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu by Gaslight", - "CoC7.Era1920": "1920s", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Dark Ages - Standard", + "CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", + "CoC7.EraDownDarkerTrails": "Down Darker Trails - Standard", + "CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", + "CoC7.EraGasLight": "Cthulhu by Gaslight", + "CoC7.Era1920": "1920s - Standard", "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Modern", + "CoC7.EraModern": "Modern - Standard", + "CoC7.EraModernPulp": "Modern - Pulp", "CoC7.Eras": "Cthulhu Flavors", "CoC7.EraAvailability": "Availability", @@ -377,10 +381,14 @@ "CoC7.SkillXpGainDisabled": "XP Gain disabled.", "CoC7.SkillSpecial": "Specialization", "CoC7.SkillRarity": "Uncommon", + "CoC7.SkillRarityShort": "[UC]", "CoC7.SkillPush": "Pushed", "CoC7.SkillCombat": "Combat", "CoC7.SkillFighting": "Fighting", "CoC7.SkillFirearm": "Firearms", + "CoC7.SkillRequiresName": "Requires Name", + "CoC7.SkillKeepBaseValue": "Keep Base Value", + "CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.WeaponRngd": "Range", "CoC7.WeaponProperyManeuver": "Maneuver", @@ -414,10 +422,6 @@ "CoC7.NewBioSectionName": "New Section", - "CoC7.DodgeSkillName": "Dodge", - "CoC7.CthulhuMythosName": "Cthulhu Mythos", - "CoC7.CreditRatingSkillName": "Credit Rating", - "CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "Fighting", "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.FirearmSpecializationName": "Firearms", @@ -989,6 +993,15 @@ "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", + "CoC7.Settings.WorldEra.Name": "Era for the world", + "CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", + "CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", + "CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", + "CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", + "CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", + "CoC7.Settings.DropCoCID.Prompt": "Prompt each time", + "CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", + "CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", @@ -1143,5 +1156,29 @@ "CoC7.Copied": "Copied the Example Text to Clipboard", "CoC7.EffectNew": "New effect", - "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." + "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", + + "CoC7.CoCIDFlag.id": "ID", + "CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", + "CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", + "CoC7.CoCIDFlag.key": "System ID (CoC ID)", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Drive Auto", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Dodge", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Cthulhu Mythos", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Credit Rating", + "CoC7.CoCIDFlag.new": "- Custom System ID -", + "CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", + "CoC7.CoCIDFlag.priority": "System ID Priority", + "CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", + "CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", + "CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", + "CoC7.CoCIDFlag.foundry-id": "Foundry ID", + "CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", + "CoC7.CoCIDFlag.get-this-document": "Get this document", + "CoC7.CoCIDFlag.get-document-like-this": "Get document like this", + "CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", + "CoC7.CoCIDFlag.error.unknown-era": "Unknown Era \"{era}\"", + "CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", + "CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID \"{cocid}\", language \"{lang}\", and era \"{era}\". Please check your Era for the world setting.", + "CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language \"{lang}\", and era \"{era}\". Please check your Era for the world setting." } diff --git a/lang/es.json b/lang/es.json index a6d609fcd..bdff8dd97 100644 --- a/lang/es.json +++ b/lang/es.json @@ -331,13 +331,13 @@ "CoC7.ItemPrice": "Precio", "CoC7.Armor": "Armadura", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Edad Oscura", - "CoC7.EraDdts": "El Viejo Oeste", - "CoC7.EraGlit": "Luz de Gas", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Edad Oscura", + "CoC7.EraDownDarkerTrails": "El Viejo Oeste", + "CoC7.EraGasLight": "Luz de Gas", "CoC7.Era1920": "Años 20", "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Época Actual", + "CoC7.EraModern": "Época Actual", "CoC7.Eras": "Épocas Cthulhu", "CoC7.EraAvailability": "Disponibilidad", @@ -380,10 +380,10 @@ "CoC7.NewBioSectionName": "Nueva Sección", - "CoC7.DodgeSkillName": "Esquivar", - "CoC7.CthulhuMythosName": "Mitos de Cthulhu", - "CoC7.CreditRatingSkillName": "Crédito", - "CoC7.DriveAutoSkillName": "Conducir automóvil", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Esquivar", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Mitos de Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Crédito", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Conducir automóvil", "CoC7.FightingSpecializationName": "Combatir", "CoC7.FirearmSpecializationName": "Armas de fuego", "CoC7.DriveSpecializationName": "Conducir", diff --git a/lang/fr.json b/lang/fr.json index 626162196..27753e48f 100644 --- a/lang/fr.json +++ b/lang/fr.json @@ -362,13 +362,13 @@ "CoC7.ItemPrice": "Prix", "CoC7.Armor": "Armure", - "CoC7.EraNvct": "Cthulhu Invictus", - "CoC7.EraDrka": "An Mil", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu Gaslight", + "CoC7.EraInvictus": "Cthulhu Invictus", + "CoC7.EraDarkAges": "An Mil", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu Gaslight", "CoC7.Era1920": "Classique 1920", "CoC7.EraPulp": "Cthulhu Pulp", - "CoC7.EraMdrn": "Moderne", + "CoC7.EraModern": "Moderne", "CoC7.Eras": "Époques Cthulhiennes", "CoC7.EraAvailability": "Disponibilité", @@ -414,10 +414,10 @@ "CoC7.NewBioSectionName": "Nouvelle Section", - "CoC7.DodgeSkillName": "Esquive", - "CoC7.CthulhuMythosName": "Mythe de Cthulhu", - "CoC7.CreditRatingSkillName": "Crédit", - "CoC7.DriveAutoSkillName": "Conduite", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Esquive", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Mythe de Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Crédit", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Conduite", "CoC7.FightingSpecializationName": "Combat rapproché", "CoC7.UnarmedWeaponName": "Sans arme", "CoC7.FirearmSpecializationName": "Armes à feu", diff --git a/lang/it.json b/lang/it.json index 2c34db74e..5caba1b75 100644 --- a/lang/it.json +++ b/lang/it.json @@ -362,13 +362,13 @@ "CoC7.ItemPrice": "Prezzo", "CoC7.Armor": "Armatura", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Secoli Bui", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu by Gaslight", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Secoli Bui", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu by Gaslight", "CoC7.Era1920": "1920s", "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Moderno", + "CoC7.EraModern": "Moderno", "CoC7.Eras": "Tipologie di Cthulhu", "CoC7.EraAvailability": "Disponibilità", @@ -414,10 +414,10 @@ "CoC7.NewBioSectionName": "Nuova Sezione", - "CoC7.DodgeSkillName": "Schivare", - "CoC7.CthulhuMythosName": "Miti di Cthulhu", - "CoC7.CreditRatingSkillName": "Valore di Credito", - "CoC7.DriveAutoSkillName": "Guidare Auto", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Schivare", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Miti di Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Valore di Credito", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Guidare Auto", "CoC7.FightingSpecializationName": "Combattere", "CoC7.UnarmedWeaponName": "A mani nude", "CoC7.FirearmSpecializationName": "Armi da Fuoco", diff --git a/lang/ja.json b/lang/ja.json index 9c97b0017..f9cd72226 100644 --- a/lang/ja.json +++ b/lang/ja.json @@ -335,13 +335,13 @@ "CoC7.ItemPrice": "価格", "CoC7.Armor": "装甲", - "CoC7.EraNvct": "インヴィクタス", - "CoC7.EraDrka": "ダークエイジ", - "CoC7.EraDdts": "西部開拓", - "CoC7.EraGlit": "クトゥルフ・バイ・ガスライト", + "CoC7.EraInvictus": "インヴィクタス", + "CoC7.EraDarkAges": "ダークエイジ", + "CoC7.EraDownDarkerTrails": "西部開拓", + "CoC7.EraGasLight": "クトゥルフ・バイ・ガスライト", "CoC7.Era1920": "1920年代", "CoC7.EraPulp": "パルプ・クトゥルフ", - "CoC7.EraMdrn": "現代", + "CoC7.EraModern": "現代", "CoC7.Eras": "対応サプリメント", "CoC7.EraAvailability": "出典", @@ -386,10 +386,10 @@ "CoC7.NewBioSectionName": "新規セクション", - "CoC7.DodgeSkillName": "回避", - "CoC7.CthulhuMythosName": "クトゥルフ神話", - "CoC7.CreditRatingSkillName": "信用", - "CoC7.DriveAutoSkillName": "運転(自動車)", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "回避", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "クトゥルフ神話", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "信用", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "運転(自動車)", "CoC7.FightingSpecializationName": "近接格闘", "CoC7.FirearmSpecializationName": "射撃", "CoC7.DriveSpecializationName": "運転", diff --git a/lang/ko.json b/lang/ko.json index 4c406991b..dc28f4a39 100644 --- a/lang/ko.json +++ b/lang/ko.json @@ -356,13 +356,13 @@ "CoC7.ItemPrice": "가격", "CoC7.Armor": "장갑", - "CoC7.EraNvct": "인빅터스", - "CoC7.EraDrka": "암흑기", - "CoC7.EraDdts": "더 어두운 오솔길로", - "CoC7.EraGlit": "가스등의 크툴루", + "CoC7.EraInvictus": "인빅터스", + "CoC7.EraDarkAges": "암흑기", + "CoC7.EraDownDarkerTrails": "더 어두운 오솔길로", + "CoC7.EraGasLight": "가스등의 크툴루", "CoC7.Era1920": "1920년대", "CoC7.EraPulp": "펄프 크툴루", - "CoC7.EraMdrn": "현대", + "CoC7.EraModern": "현대", "CoC7.Eras": "크툴루 배경", "CoC7.EraAvailability": "시대 선택", @@ -408,10 +408,10 @@ "CoC7.NewBioSectionName": "새 단락", - "CoC7.DodgeSkillName": "회피", - "CoC7.CthulhuMythosName": "크툴루 신화", - "CoC7.CreditRatingSkillName": "신용 등급", - "CoC7.DriveAutoSkillName": "자동 운행", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "회피", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "크툴루 신화", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "신용 등급", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "자동 운행", "CoC7.FightingSpecializationName": "근접전", "CoC7.FirearmSpecializationName": "사격", "CoC7.DriveSpecializationName": "운전", diff --git a/lang/pl.json b/lang/pl.json index 967d3fefe..c61492e64 100644 --- a/lang/pl.json +++ b/lang/pl.json @@ -362,13 +362,13 @@ "CoC7.ItemPrice": "Cena", "CoC7.Armor": "Pancerz", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Mroczne czasy", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu by Gaslight", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Mroczne czasy", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu by Gaslight", "CoC7.Era1920": "1920", "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Współczesny", + "CoC7.EraModern": "Współczesny", "CoC7.Eras": "Cthulhu Flavors", "CoC7.EraAvailability": "Dostępność", @@ -414,10 +414,10 @@ "CoC7.NewBioSectionName": "Nowa sekcja", - "CoC7.DodgeSkillName": "Unik", - "CoC7.CthulhuMythosName": "Mity Cthulhu", - "CoC7.CreditRatingSkillName": "Majętność", - "CoC7.DriveAutoSkillName": "Prowadzenie Samochodu", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Unik", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Mity Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Majętność", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Prowadzenie Samochodu", "CoC7.FightingSpecializationName": "Walka Wręcz", "CoC7.UnarmedWeaponName": "Nieuzbrojony", "CoC7.FirearmSpecializationName": "Broń Palna", diff --git a/lang/pt-BR.json b/lang/pt-BR.json index a87295d0c..4879d855d 100644 --- a/lang/pt-BR.json +++ b/lang/pt-BR.json @@ -310,13 +310,13 @@ "CoC7.WeaponSpecial": "Especial", "CoC7.ItemPrice": "Preço", "CoC7.Armor": "Armadura", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Idade das Trevas", - "CoC7.EraDdts": "Entre Trilhas Sombrias", - "CoC7.EraGlit": "Cthulhu Era Vitoriana", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Idade das Trevas", + "CoC7.EraDownDarkerTrails": "Entre Trilhas Sombrias", + "CoC7.EraGasLight": "Cthulhu Era Vitoriana", "CoC7.Era1920": "Anos 1920", "CoC7.EraPulp": "Cthulhu Pulp", - "CoC7.EraMdrn": "Moderno", + "CoC7.EraModern": "Moderno", "CoC7.Eras": "Cthulhu Através das Eras", "CoC7.SkillNoAdjustments": "Sem Ajustes", "CoC7.SkillNoXpGain": "Sem ganho de Experiência", @@ -353,10 +353,10 @@ "CoC7.Validate": "Validar", "CoC7.Apply": "Aplicar", "CoC7.NewBioSectionName": "Nova Seção", - "CoC7.DodgeSkillName": "Esquivar", - "CoC7.CthulhuMythosName": "Mythos de Cthulhu", - "CoC7.CreditRatingSkillName": "Nível de Crédito", - "CoC7.DriveAutoSkillName": "Dirigir Automóveis", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Esquivar", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Mythos de Cthulhu", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Nível de Crédito", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Dirigir Automóveis", "CoC7.FightingSpecializationName": "Lutar", "CoC7.FirearmSpecializationName": "Armas de Fogo", "CoC7.DriveSpecializationName": "Dirigir", diff --git a/lang/ru.json b/lang/ru.json index ed287c780..76c4c5017 100644 --- a/lang/ru.json +++ b/lang/ru.json @@ -2414,13 +2414,13 @@ "WeaponSpecial": "Особое", "ItemPrice": "Цена", "Armor": "Броня", - "EraNvct": "Invictus", - "EraDrka": "Dark Ages", - "EraDdts": "Down Darker Trails", - "EraGlit": "Cthulhu by Gaslight", + "EraInvictus": "Invictus", + "EraDarkAges": "Dark Ages", + "EraDownDarkerTrails": "Down Darker Trails", + "EraGasLight": "Cthulhu by Gaslight", "Era1920": "1920s", "EraPulp": "Pulp Cthulhu", - "EraMdrn": "Modern", + "EraModern": "Modern", "Eras": "Cthulhu Flavors", "EraAvailability": "Доступность", "SkillNoAdjustments": "No adjustment", diff --git a/lang/sv.json b/lang/sv.json index ad1fdffcf..fd2bfd2d8 100644 --- a/lang/sv.json +++ b/lang/sv.json @@ -335,13 +335,13 @@ "CoC7.ItemPrice": "Pris", "CoC7.Armor": "Skydd", - "CoC7.EraNvct": "Invictus", - "CoC7.EraDrka": "Dark Ages", - "CoC7.EraDdts": "Down Darker Trails", - "CoC7.EraGlit": "Cthulhu by Gaslight", + "CoC7.EraInvictus": "Invictus", + "CoC7.EraDarkAges": "Dark Ages", + "CoC7.EraDownDarkerTrails": "Down Darker Trails", + "CoC7.EraGasLight": "Cthulhu by Gaslight", "CoC7.Era1920": "1920s", "CoC7.EraPulp": "Pulp Cthulhu", - "CoC7.EraMdrn": "Modern", + "CoC7.EraModern": "Modern", "CoC7.Eras": "Cthulhu-varianter", "CoC7.EraAvailability": "Tillgänglighet", @@ -386,10 +386,10 @@ "CoC7.NewBioSectionName": "Ny sektion", - "CoC7.DodgeSkillName": "Ducka", - "CoC7.CthulhuMythosName": "Cthulhumyten", - "CoC7.CreditRatingSkillName": "Levnadsstandard", - "CoC7.DriveAutoSkillName": "Köra bil", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "Ducka", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Cthulhumyten", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Levnadsstandard", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Köra bil", "CoC7.FightingSpecializationName": "Strid", "CoC7.FirearmSpecializationName": "Skjutvapen", "CoC7.DriveSpecializationName": "Chaufför", diff --git a/lang/zh-TW.json b/lang/zh-TW.json index c9ca18508..3ddb8a90c 100644 --- a/lang/zh-TW.json +++ b/lang/zh-TW.json @@ -192,13 +192,13 @@ "CoC7.WeaponSpecial": "特殊效果", "CoC7.ItemPrice": "價格", "CoC7.Armor": "護甲", - "CoC7.EraNvct": "克蘇魯不敗", - "CoC7.EraDrka": "克蘇魯黑暗時代", - "CoC7.EraDdts": "神秘冰島", - "CoC7.EraGlit": "克蘇魯煤氣燈", + "CoC7.EraInvictus": "克蘇魯不敗", + "CoC7.EraDarkAges": "克蘇魯黑暗時代", + "CoC7.EraDownDarkerTrails": "神秘冰島", + "CoC7.EraGasLight": "克蘇魯煤氣燈", "CoC7.Era1920": "1920s", "CoC7.EraPulp": "通俗克蘇魯", - "CoC7.EraMdrn": "現代", + "CoC7.EraModern": "現代", "CoC7.Eras": "克蘇魯年代", "CoC7.SkillNoAdjustments": "無調整", "CoC7.SkillNoXpGain": "無法成長", @@ -234,8 +234,8 @@ "CoC7.Validate": "套用", "CoC7.Apply": "套用", "CoC7.NewBioSectionName": "新增章節", - "CoC7.DodgeSkillName": "閃避", - "CoC7.CreditRatingSkillName": "信譽", + "CoC7.CoCIDFlag.keys.i.skill.dodge": "閃避", + "CoC7.CoCIDFlag.keys.i.skill.credit-rating": "信譽", "CoC7.FightingSpecializationName": "(戰鬥)近身", "CoC7.FirearmSpecializationName": "(戰鬥)射擊", "CoC7.AnySpecName": "任何", @@ -427,7 +427,7 @@ "CoC7.BonusSelectionWindowNamed": "選擇 {name}檢定的調整值", "CoC7.Value": "屬性%", "CoC7.WeaponProperyManeuver": "戰技", - "CoC7.CthulhuMythosName": "克蘇魯神話", + "CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "克蘇魯神話", "CoC7.SANCheckTitle": "損失SAN: {name} ({sanMin}/{sanMax})", "CoC7.LinkCheck": "{type} 檢定: {name} [{difficulty}/{modifier}]", "CoC7.LinkSanLoss": "損失SAN : ({sanMin}/{sanMax})", @@ -792,7 +792,7 @@ "CoC7.CastingSpell": "施放{spell}。", "CoC7.NoResponse": "無反應", "CoC7.InitiatorMissed": "{name}已錯過了。", - "CoC7.DriveAutoSkillName": "自動駕駛", + "CoC7.CoCIDFlag.keys.i.skill.drive-auto": "自動駕駛", "CoC7.SortBySkillName": "按技能名稱排序", "CoC7.SortBySkillValue": "按技能大小排序", "CoC7.UncommonSkillsShow": "顯示不常見的技能", diff --git a/module/actors/actor.js b/module/actors/actor.js index 0e0a3195a..e8e963015 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -9,6 +9,7 @@ import { PointSelectDialog } from '../apps/point-selection-dialog.js' import { CharacSelectDialog } from '../apps/char-selection-dialog.js' import { CharacRollDialog } from '../apps/char-roll-dialog.js' import { SkillSpecSelectDialog } from '../apps/skill-spec-select-dialog.js' +import { SkillSpecializationSelectDialog } from '../apps/skill-specialization-select-dialog.js' import { SkillValueDialog } from '../apps/skill-value-dialog.js' import { CoC7MeleeInitiator } from '../chat/combat/melee-initiator.js' import { CoC7RangeInitiator } from '../chat/rangecombat.js' @@ -896,9 +897,9 @@ export class CoCActor extends Actor { let baseCalculated = 0 let archetype = false let occupation = false - for (const data of dataArray) { + for (let data of dataArray) { switch (data.type) { - case 'skill': + case 'skill': { baseValue = data.system.base baseCalculated = await CoC7Item.calculateBase(this, data) if (this.type !== 'character') { @@ -929,10 +930,19 @@ export class CoCActor extends Actor { data.system.value = null } + let addThis = true + if (CoC7Item.isAnySpec(data)) { let skillList = [] + const group = game.system.api.cocid.guessGroup(data) + if (group) { + // Also check existing skills? CoC7.Skillpicknameonly + skillList = (await game.system.api.cocid.fromCoCIDRegexBest({ cocidRegExp: new RegExp('^' + CoC7Utilities.quoteRegExp(group) + '.+$'), type: 'i' })).filter(item => { + return !(item.system.properties?.special && !!(item.system.properties?.requiresname || item.system.properties?.picknameonly)) + }) + } if (data.system?.flags?.occupation || data.system?.flags?.archetype) { - skillList = this.skills.filter(el => { + const existingSkills = this.skills.filter(el => { if (!el.system.specialization) return false if ( data.system?.flags?.occupation && @@ -951,41 +961,105 @@ export class CoCActor extends Actor { el.system.specialization.toLocaleLowerCase() ) }) + if (existingSkills.length > 0) { + if (skillList.length > 0) { + for (let i = existingSkills.length - 1; i >= 0; i--) { + const found = skillList.findIndex(item => { + return item.name === existingSkills[i].name || item.flags?.CoC7?.cocidFlag?.id === existingSkills[i].flags?.CoC7?.cocidFlag?.id + }) + if (found > -1) { + skillList.splice(found, 1) + } + } + skillList = skillList.concat(existingSkills) + } else { + skillList = existingSkills + } + } } - const skillData = await SkillSpecSelectDialog.create( - skillList, - data.system.specialization, - baseCalculated - ) - if (skillData) { - baseCalculated = skillData.get('base-value') - data.system.value = baseCalculated - if (skillData.get('existing-skill')) { + if (skillList.length > 0) { + skillList.sort(CoC7Utilities.sortByNameKey) + } + const skillData = await SkillSpecializationSelectDialog.create({ + skills: skillList, + allowCustom: (data.system.properties?.requiresname ?? false), + fixedBaseValue: !(data.system.properties?.keepbasevalue ?? false), + specializationName: data.system.specialization, + label: data.name, + baseValue: data.system.base + }) + if (Object.prototype.hasOwnProperty.call(skillData, 'selected')) { + if (skillData.selected) { const existingItem = this.items.get( - skillData.get('existing-skill') + skillData.selected ) - for (const [key, value] of Object.entries(data.system.flags)) { - if (value) await existingItem.setItemFlag(key) + if (existingItem) { + const changes = {} + if (!(data.system.properties?.keepbasevalue ?? false)) { + if (skillData.baseValue !== '') { + baseCalculated = skillData.baseValue + changes['system.value'] = baseCalculated + } + } + for (const [key, value] of Object.entries(data.system.flags)) { + if (value) { + changes[`system.flags.${key}`] = true + } + } + if (Object.keys(changes).length > 0) { + changes._id = existingItem.id + await this.updateEmbeddedDocuments('Item', [changes]) + } + data.name = CoC7Item.getNameWithoutSpec(existingItem) + addThis = false + } else { + const existing = skillList.find(i => i.id === skillData.selected) + if (existing) { + const flags = data.system?.flags + data = duplicate(existing) + for (const [key, value] of Object.entries(flags)) { + if (value) { + data.system.flags[key] = true + } + } + if (!(data.system.properties?.keepbasevalue ?? false)) { + if (skillData.baseValue !== '') { + baseCalculated = skillData.baseValue + data.system.value = baseCalculated + } else { + baseValue = data.system.value + } + } + } } - data.name = CoC7Item.getNameWithoutSpec(existingItem) - return } else { const parts = CoC7Item.getNamePartsSpec( - skillData.get('new-skill-name'), + skillData.name, data.system.specialization ) + if (!(data.system.properties?.keepbasevalue ?? false)) { + if (skillData.baseValue !== '') { + baseCalculated = skillData.baseValue + data.system.value = baseCalculated + } else { + baseValue = data.system.value + } + } data.system.skillName = parts.skillName data.name = parts.name } } } - if (String(baseValue) !== String(baseCalculated)) { - data.system.base = baseCalculated - } + if (addThis) { + if (String(baseValue) !== String(baseCalculated)) { + data.system.base = baseCalculated + } - processedDataArray.push(duplicate(data)) + processedDataArray.push(duplicate(data)) + } break + } case 'weapon': { if (this.type !== 'container') { @@ -1124,8 +1198,10 @@ export class CoCActor extends Actor { }) } else return } - const skills = data.system.items.filter(it => it.type === 'skill') - const othersItems = data.system.items.filter(it => it.type !== 'skill') + const era = Object.entries(data.flags?.CoC7?.cocidFlag?.eras).filter(e => e[1]).map(e => e[0]) + const items = await game.system.api.cocid.expandItemArray({ itemList: data.system.items, era: (typeof era[0] !== 'undefined' ? era[0] : true) }) + const skills = items.filter(it => it.type === 'skill') + const othersItems = items.filter(it => it.type !== 'skill') await this.addUniqueItems(skills) await this.addItems(othersItems) if (game.settings.get('CoC7', 'oneBlockBackstory')) { @@ -1213,6 +1289,7 @@ export class CoCActor extends Actor { } // Add all skills + data.system.skills = await game.system.api.cocid.expandItemArray({ itemList: data.system.skills }) await this.addUniqueItems(data.system.skills, 'archetype') processedDataArray.push(duplicate(data)) @@ -1239,6 +1316,24 @@ export class CoCActor extends Actor { else return } + // Convert CoCIDs to items + data.system.skills = await game.system.api.cocid.expandItemArray({ itemList: data.system.skills }) + + if (Number(data.system.creditRating.max) > 0) { + // Occupations with a credit rating require a credit rating skill + const actorCreditRating = game.system.api.cocid.findCocIdInList('i.skill.credit-rating', data.system.skills) + if (actorCreditRating.length === 0) { + if (game.system.api.cocid.findCocIdInList('i.skill.credit-rating', this.items).length === 0) { + data.system.skills.push('i.skill.credit-rating') + data.system.skills = await game.system.api.cocid.expandItemArray({ itemList: data.system.skills }) + } + } else { + if (game.system.api.cocid.findCocIdInList('i.skill.credit-rating', this.items).length === 0) { + data.system.skills.push(actorCreditRating[0]) + } + } + } + // Select characteristic const pointsDialogData = {} pointsDialogData.characteristics = data.system.occupationSkillPoints @@ -1271,6 +1366,9 @@ export class CoCActor extends Actor { // Add optional skills for (let index = 0; index < data.system.groups.length; index++) { + // Convert CoCIds to items + data.system.groups[index].skills = await game.system.api.cocid.expandItemArray({ itemList: data.system.groups[index].skills }) + const dialogData = {} dialogData.skills = [] dialogData.type = 'occupation' @@ -1482,8 +1580,10 @@ export class CoCActor extends Actor { for (const value of this.items) { if ( - CoC7Item.getNameWithoutSpec(value).toLowerCase() === - name.toLowerCase() && + ( + CoC7Item.getNameWithoutSpec(value).toLowerCase() === name.toLowerCase() || + value.flags?.CoC7?.cocidFlag?.id === skillName + ) && value.type === 'skill' ) { skillList.push(value) @@ -1681,19 +1781,20 @@ export class CoCActor extends Actor { async addUniqueItems (skillList, flag = null) { const processed = [] - for (const skill of skillList) { + for (let skill of skillList) { + skill = duplicate(skill) + if (flag) { + if (!Object.prototype.hasOwnProperty.call(skill.system, 'flags')) { + skill.system.flags = {} + } + skill.system.flags[flag] = true + } if (CoC7Item.isAnySpec(skill)) { - if (!skill.system.flags) skill.system.flags = {} - if (flag) skill.system.flags[flag] = true - processed.push(duplicate(skill)) + processed.push(skill) } else { const itemId = this.getItemIdByName(skill.name) if (!itemId) { - if (flag) { - if (!skill.system.flags) skill.system.flags = {} - skill.system.flags[flag] = true - } - processed.push(duplicate(skill)) + processed.push(skill) } else if (flag) { const item = this.items.get(itemId) await item.setItemFlag(flag) @@ -3211,7 +3312,7 @@ export class CoCActor extends Actor { get dodgeSkill () { const skillList = this.getSkillsByName( - game.i18n.localize(COC7.dodgeSkillName) + game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.dodge') ) if (skillList.length !== 0) return skillList[0] return null @@ -3219,7 +3320,7 @@ export class CoCActor extends Actor { get creditRatingSkill () { const skillList = this.getSkillsByName( - game.i18n.localize(COC7.creditRatingSkillName) + game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.credit-rating') ) if (skillList.length !== 0) return skillList[0] return null @@ -3227,7 +3328,7 @@ export class CoCActor extends Actor { get cthulhuMythosSkill () { const skillList = this.getSkillsByName( - game.i18n.localize(COC7.CthulhuMythosName) + game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos') ) if (skillList.length !== 0) return skillList[0] return null diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index 89c2f10f4..b83fedfbc 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -1,4 +1,5 @@ /* global $, ActorSheet, ChatMessage, CONST, Dialog, FormData, foundry, game, getProperty, Hooks, Item, mergeObject, Roll, TextEditor, ui */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { RollDialog } from '../../apps/roll-dialog.js' import { CoC7ChatMessage } from '../../apps/coc7-chat-message.js' import { CoC7Check } from '../../check.js' @@ -20,6 +21,12 @@ import { CoC7Utilities } from '../../utilities.js' * Extend the basic ActorSheet with some very simple modifications */ export class CoC7ActorSheet extends ActorSheet { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = await super.getData() @@ -1886,7 +1893,7 @@ export class CoC7ActorSheet extends ActorSheet { }) } } - if (game.i18n.localize(COC7.creditRatingSkillName) === item.name) { + if (game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.credit-rating') === item.name) { const creditValue = (item.value || 0) - (item.system.adjustments?.experience || 0) diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index d4240a5d1..a43d4f838 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -1,4 +1,5 @@ /* global $, ActorSheet, CONST, Dialog, FormData, game, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { CoC7Parser } from '../../apps/parser.js' import { CoC7Utilities } from '../../utilities.js' @@ -47,6 +48,12 @@ export class CoC7ContainerSheet extends ActorSheet { onCloseSheet () {} + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = await super.getData() diff --git a/module/apps/coc-id-editor.js b/module/apps/coc-id-editor.js new file mode 100644 index 000000000..f429f68e4 --- /dev/null +++ b/module/apps/coc-id-editor.js @@ -0,0 +1,247 @@ +/* global $, CONFIG, flattenObject, FormApplication, game, mergeObject, TextEditor */ +import { COC7 } from '../config.js' +import { CoC7Utilities } from '../utilities.js' + +export class CoCIDEditor extends FormApplication { + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + classes: ['coc7', 'dialog', 'coc-id-editor'], + template: 'systems/CoC7/templates/apps/coc-id-editor.hbs', + width: 900, + height: 'auto', + title: 'CoC7.CoCIDFlag.title', + closeOnSubmit: false, + submitOnClose: true, + submitOnChange: true + }) + } + + async getData () { + const sheetData = super.getData() + + sheetData.supportedLanguages = CONFIG.supportedLanguages + + this.options.editable = this.object.sheet.isEditable + + sheetData.guessCode = game.system.api.cocid.guessId(this.object) + sheetData.idPrefix = game.system.api.cocid.getPrefix(this.object) + + sheetData.cocidFlag = this.object.flags?.CoC7?.cocidFlag + + sheetData.id = sheetData.cocidFlag?.id || '' + sheetData.lang = sheetData.cocidFlag?.lang || game.i18n.lang + sheetData.priority = sheetData.cocidFlag?.priority || 0 + + sheetData.eras = [] + for (const [key, value] of Object.entries(COC7.eras)) { + sheetData.eras.push({ + id: key, + name: game.i18n.localize(value), + isEnabled: (sheetData.cocidFlag?.eras ?? {})[key] === true + }) + } + sheetData.eras.sort(CoC7Utilities.sortByNameKey) + + const CoCIDKeys = flattenObject(game.i18n.translations.CoC7.CoCIDFlag.keys ?? {}) + const prefix = new RegExp('^' + CoC7Utilities.quoteRegExp(sheetData.idPrefix)) + sheetData.existingKeys = Object.keys(CoCIDKeys).reduce((obj, k) => { + if (k.match(prefix)) { + obj.push({ k, name: CoCIDKeys[k] }) + } + return obj + }, []).sort(CoC7Utilities.sortByNameKey) + + sheetData.isSystemID = (typeof CoCIDKeys[sheetData.id] !== 'undefined') + const match = sheetData.id.match(/^([^\\.]+)\.([^\\.]*)\.(.+)/) + sheetData._existing = (match && typeof match[3] !== 'undefined' ? match[3] : '') + + if (sheetData.id && sheetData.lang) { + // Find out if there exists a duplicate CoCID + const worldDocuments = await game.system.api.cocid.fromCoCIDAll({ + cocid: sheetData.id, + lang: sheetData.lang, + scope: 'world' + }) + const usedEras = {} + const uniqueWorldPriority = {} + sheetData.worldDocumentInfo = worldDocuments.map((d) => { + if (d.flags.CoC7.cocidFlag.eras) { + Object.entries(d.flags.CoC7.cocidFlag.eras).filter(e => e[1]).map(e => { + if (!Object.prototype.hasOwnProperty.call(uniqueWorldPriority, d.flags.CoC7.cocidFlag.priority + '/' + e[0])) { + uniqueWorldPriority[d.flags.CoC7.cocidFlag.priority + '/' + e[0]] = 0 + } + uniqueWorldPriority[d.flags.CoC7.cocidFlag.priority + '/' + e[0]]++ + return false + }) + } else { + uniqueWorldPriority[d.flags.CoC7.cocidFlag.priority + '/*'] = 1 + } + const eras = (d.flags.CoC7.cocidFlag.eras ? Object.entries(d.flags.CoC7.cocidFlag.eras).filter(e => e[1]).map(e => e[0]).sort() : []) + for (const era of eras) { + usedEras[era] = COC7.eras[era] ?? '?' + } + return { + eras: eras.reduce(function (all, current) { + all[current] = true + return all + }, {}), + priority: d.flags.CoC7.cocidFlag.priority, + lang: d.flags.CoC7.cocidFlag.lang ?? 'en', + link: TextEditor.enrichHTML(d.link, { async: false }), + folder: d?.folder?.name + } + }) + if (Object.entries(uniqueWorldPriority).filter(c => c[1] > 1).length > 0) { + sheetData.warnDuplicateWorldPriority = true + } + sheetData.worldDuplicates = worldDocuments.length ?? 0 + + const compendiumDocuments = await game.system.api.cocid.fromCoCIDAll({ + cocid: sheetData.id, + lang: sheetData.lang, + scope: 'compendiums' + }) + const uniqueCompendiumPriority = {} + sheetData.compendiumDocumentInfo = compendiumDocuments.map((d) => { + if (d.flags.CoC7.cocidFlag.eras) { + Object.entries(d.flags.CoC7.cocidFlag.eras).filter(e => e[1]).map(e => { + if (!Object.prototype.hasOwnProperty.call(uniqueCompendiumPriority, d.flags.CoC7.cocidFlag.priority + '/' + e[0])) { + uniqueCompendiumPriority[d.flags.CoC7.cocidFlag.priority + '/' + e[0]] = 0 + } + uniqueCompendiumPriority[d.flags.CoC7.cocidFlag.priority + '/' + e[0]]++ + return false + }) + } else { + uniqueCompendiumPriority[d.flags.CoC7.cocidFlag.priority + '/*'] = 1 + } + const eras = (d.flags.CoC7.cocidFlag.eras ? Object.entries(d.flags.CoC7.cocidFlag.eras).filter(e => e[1]).map(e => e[0]).sort() : []) + for (const era of eras) { + usedEras[era] = COC7.eras[era] ?? '?' + } + return { + eras: eras.reduce(function (all, current) { + all[current] = true + return all + }, {}), + priority: d.flags.CoC7.cocidFlag.priority, + lang: d.flags.CoC7.cocidFlag.lang ?? 'en', + link: TextEditor.enrichHTML(d.link, { async: false }), + folder: d?.folder?.name ?? '' + } + }) + if (Object.entries(uniqueCompendiumPriority).filter(c => c[1] > 1).length > 0) { + sheetData.warnDuplicateCompendiumPriority = true + } + sheetData.compendiumDuplicates = compendiumDocuments.length ?? 0 + sheetData.usedEras = [] + for (const [key, value] of Object.entries(usedEras)) { + sheetData.usedEras.push({ + id: key, + name: game.i18n.localize(value) + }) + } + sheetData.usedEras.sort(CoC7Utilities.sortByNameKey) + } else { + sheetData.compendiumDocumentInfo = [] + sheetData.worldDocumentInfo = [] + sheetData.worldDuplicates = 0 + sheetData.compendiumDuplicates = 0 + sheetData.warnDuplicateWorldPriority = false + sheetData.warnDuplicateCompendiumPriority = false + } + return sheetData + } + + activateListeners (html) { + super.activateListeners(html) + + html.find('a.copy-to-clipboard').click(function (e) { + CoC7Utilities.copyToClipboard($(this).siblings('input').val()) + }) + + if (!this.object.sheet.isEditable) return + + html.find('.toggle-switch').click(this._onClickToggle.bind(this)) + + html.find('input[name=_existing').change(function (e) { + const obj = $(this) + const prefix = obj.data('prefix') + let value = obj.val() + if (value !== '') { + value = prefix + CoC7Utilities.toKebabCase(value) + } + html.find('input[name=id]').val(value).trigger('change') + }) + + html.find('select[name=known]').change(function (e) { + const obj = $(this) + html.find('input[name=id]').val(obj.val()) + }) + + html.find('a[data-guess]').click(async function (e) { + e.preventDefault() + const obj = $(this) + const guess = obj.data('guess') + html.find('input[name=id]').val(guess).trigger('change') + }) + } + + static async eraToggle (document, propertyId) { + if (document.type === 'setup') { + // Setups can only have one era to make sure the correct skills are populated via CoC ID + const update = { + [propertyId]: true + } + if (typeof document.flags?.CoC7?.cocidFlag?.eras !== 'undefined') { + for (const [key] of Object.entries(document.flags.CoC7.cocidFlag.eras)) { + if (key !== propertyId) { + update['-=' + key] = null + } + } + } + await document.update({ + 'flags.CoC7.cocidFlag.eras': update + }) + } else if (typeof document.flags?.CoC7?.cocidFlag?.eras[propertyId] === 'undefined') { + if (typeof document.flags?.CoC7?.cocidFlag?.eras === 'undefined') { + await document.update({ + 'flags.CoC7.cocidFlag.eras': { + [propertyId]: true + } + }) + } else { + await document.update({ + [`flags.CoC7.cocidFlag.eras.${propertyId}`]: true + }) + } + } else { + await document.update({ + [`flags.CoC7.cocidFlag.eras.-=${propertyId}`]: null + }) + } + } + + async _onClickToggle (event) { + event.preventDefault() + const propertyId = event.currentTarget.dataset.property + await CoCIDEditor.eraToggle(this.object, propertyId) + this.render() + } + + async _updateObject (event, formData) { + const id = formData.id || '' + await this.object.update({ + 'flags.CoC7.cocidFlag.id': id, + 'flags.CoC7.cocidFlag.lang': formData.lang || game.i18n.lang, + 'flags.CoC7.cocidFlag.priority': formData.priority || 0, + 'flags.CoC7.cocidFlag.eras': (this.object.flags?.CoC7?.cocidFlag?.eras ?? {}) + }) + const html = $(this.object.sheet.element).find('header.window-header a.header-button.edit-coc-id-warning,header.window-header a.header-button.edit-coc-id-exisiting') + if (html.length) { + html.css({ + color: (id ? 'var(--color-text-light-highlight)' : 'red') + }) + } + this.render() + } +} diff --git a/module/apps/drop-coc-id.js b/module/apps/drop-coc-id.js new file mode 100644 index 000000000..b76fef54f --- /dev/null +++ b/module/apps/drop-coc-id.js @@ -0,0 +1,47 @@ +/* global Dialog, duplicate, game */ +export class DropCoCID extends Dialog { + static processForm (response, element, resolve) { + if (element.find('input').is(':checked')) { + game.settings.set('CoC7', 'dropCoCID', (response ? 'Y' : 'N')) + } + resolve(response) + } + + static processItem (response, item) { + if (response && item.flags?.CoC7?.cocidFlag?.id) { + return item.flags.CoC7.cocidFlag.id + } + return duplicate(item) + } + + static async create () { + const dropCoCID = game.settings.get('CoC7', 'dropCoCID') + switch (dropCoCID) { + case '': + return new Promise(resolve => { + const dlg = new DropCoCID({ + title: game.i18n.format('CoC7.Settings.DropCoCID.Name'), + content: '

' + game.i18n.format('CoC7.Settings.DropCoCID.Dialog') + '

', + classes: ['coc7', 'app', 'dialog'], + buttons: { + yes: { + icon: '', + label: game.i18n.localize('Yes'), + callback: (element) => { DropCoCID.processForm(true, element, resolve) } + }, + no: { + icon: '', + label: game.i18n.localize('No'), + callback: (element) => { DropCoCID.processForm(false, element, resolve) } + } + } + }) + dlg.render(true) + }) + case 'Y': + return true + case 'N': + return false + } + } +} diff --git a/module/apps/skill-specialization-select-dialog.js b/module/apps/skill-specialization-select-dialog.js new file mode 100644 index 000000000..4b41a4dbd --- /dev/null +++ b/module/apps/skill-specialization-select-dialog.js @@ -0,0 +1,77 @@ +/* global $, FormApplication, game, mergeObject */ + +export class SkillSpecializationSelectDialog extends FormApplication { + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + classes: ['coc7', 'skill-name-dialog'], + title: '', + template: 'systems/CoC7/templates/apps/skill-specialization-select.hbs', + width: 400, + height: 'auto', + closeOnSubmit: false + }) + } + + get title () { + return game.i18n.format('CoC7.SkillSpecSelectTitle', { + specialization: this.object.specializationName + }) + } + + activateListeners (html) { + super.activateListeners(html) + + html.find('.submit-button').click(this._onClickSubmit.bind(this)) + html.find('[name=existing-skill]').change(this._onSelectChange.bind(this)) + } + + async _onSelectChange (event) { + this.object.selected = event.currentTarget.value + this.render(true) + } + + async _onClickSubmit (event) { + if (this.object.selected === '') { + const obj = $(event.currentTarget).closest('form') + this.object.name = (obj.find('input[name=new-skill-name]').val() ?? '') + this.object.baseValue = (obj.find('input[name=base-value]').val() ?? '') + } + if (this.object.selected === '' && this.object.name === '') { + return false + } + this.object.resolve({ + selected: this.object.selected, + name: this.object.name, + baseValue: this.object.baseValue + }) + this.close() + } + + async _updateObject (event, formData) { + } + + static async create ({ skills = [], allowCustom = false, fixedBaseValue = false, specializationName = '', label = '', baseValue = null } = {}) { + const select = [] + for (const skill of skills) { + select.push({ + id: skill.id, + name: skill.name, + base: skill.system.base + }) + } + return await new Promise(resolve => { + new SkillSpecializationSelectDialog({ + specializationName, + allowCustom, + fixedBaseValue, + allowSelect: skills.length > 0, + skills: select, + selected: '', + name: '', + label, + baseValue, + resolve + }, {}).render(true) + }) + } +} diff --git a/module/coc7.js b/module/coc7.js index 40c7525db..ac991bcf1 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -1,4 +1,4 @@ -/* global $, Combat, CONFIG, game, Hooks, ItemDirectory, tinyMCE */ +/* global $, Combat, CONFIG, game, Hooks, ItemDirectory */ import { CoC7NPCSheet } from './actors/sheets/npc-sheet.js' import { CoC7CreatureSheet } from './actors/sheets/creature-sheet.js' import { CoC7CharacterSheet } from './actors/sheets/character.js' @@ -136,6 +136,9 @@ Hooks.once('init', async function () { alwaysCrit: false, alwaysFumble: false } + }, + eras: (era, name) => { + COC7.eras[era] = name } } Combat.prototype.rollInitiative = rollInitiative @@ -291,9 +294,6 @@ Hooks.on('hotbarDrop', async (bar, data, slot) => { Hooks.on('renderChatLog', (app, html, data) => CoC7Chat.chatListeners(app, html, data) ) -Hooks.on('renderChatMessage', (app, html, data) => - CoC7Chat.renderMessageHook(app, html, data) -) Hooks.on('updateChatMessage', (chatMessage, chatData, diff, speaker) => CoC7Chat.onUpdateChatMessage(chatMessage, chatData, diff, speaker) ) @@ -307,8 +307,6 @@ Hooks.on('ready', async () => { // setGlobalCssVar() - configureTinyMCE() - game.CoC7.skillList = await game.packs.get('CoC7.skills')?.getDocuments() game.socket.on('system.CoC7', async data => { @@ -471,13 +469,6 @@ Hooks.on('getSceneControlButtons', (/* controls */) => { Hooks.on('renderItemSheet', CoC7Parser.ParseSheetContent) Hooks.on('renderJournalPageSheet', CoC7Parser.ParseSheetContent) Hooks.on('renderActorSheet', CoC7Parser.ParseSheetContent) -// Chat command processing -// Hooks.on('preCreateChatMessage', CoC7Parser.ParseMessage); -// Hooks.on('createChatMessage', CoC7Chat.createChatMessageHook); -Hooks.on('renderChatMessage', (app, html, data) => { - CoC7Chat.renderChatMessageHook(app, html, data) - CoC7Parser.ParseMessage(app, html, data) -}) // Sheet css options // Hooks.on('renderCoC7CharacterSheet', CoC7CharacterSheet.renderSheet); Hooks.on('renderActorSheet', CoC7CharacterSheet.renderSheet) @@ -498,42 +489,6 @@ function activateGlobalListener () { document.addEventListener('mousedown', _onLeftClick) } -/** - * Configuration of TinyMCE editor - */ -function configureTinyMCE () { - // Add on drop event to tinyMCE to hendle the links drop - tinyMCE.PluginManager.add('CoC7_Editor_OnDrop', function (editor) { - editor.on('drop', event => CoC7Parser.onEditorDrop(event, editor)) - }) - - // Add custom plugins to list of plugins. - // CONFIG.TinyMCE.plugins = `CoC7_Editor_OnInit CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` - CONFIG.TinyMCE.plugins = `CoC7_Editor_OnDrop ${CONFIG.TinyMCE.plugins}` - // - // if (game.user.isGM) { - // // Define css and menu for keeper only blocks - // CONFIG.TinyMCE.content_css.push('/systems/CoC7/assets/mce.css') - // CONFIG.TinyMCE.style_formats.push({ - // title: 'CoC7', - // items: [ - // { - // title: 'Keeper Only', - // block: 'section', - // classes: 'keeper-only', - // wrapper: true - // } - // ] - // }) - // } else { - // // Prevent player to edit and view source code if settings is disabled - // if (!game.settings.get('CoC7', 'enablePlayerSourceCode')) - // CONFIG.TinyMCE.toolbar = CONFIG.TinyMCE.toolbar.replace(' code', '') - // // Hide keeper only blocks to players - // CONFIG.TinyMCE.content_style = '.keeper-only {display: none}' - // } -} - function _onLeftClick (event) { return event.shiftKey } diff --git a/module/config.js b/module/config.js index 411c60d2b..f95c0ce7d 100644 --- a/module/config.js +++ b/module/config.js @@ -9,13 +9,19 @@ export const COC7 = {} * @type {Object} */ COC7.eras = { - nvct: 'CoC7.EraNvct', - drka: 'CoC7.EraDrka', - ddts: 'CoC7.EraDdts', - glit: 'CoC7.EraGlit', - 1920: 'CoC7.Era1920', + standard: 'CoC7.Era1920', + modern: 'CoC7.EraModern', + modernPulp: 'CoC7.EraModernPulp', pulp: 'CoC7.EraPulp', - mdrn: 'CoC7.EraMdrn' + downDarkerTrails: 'CoC7.EraDownDarkerTrails', + downDarkerTrailsPulp: 'CoC7.EraDownDarkerTrailsPulp', + darkAges: 'CoC7.EraDarkAges', + darkAgesPulp: 'CoC7.EraDarkAgesPulp', + // Regency Cthulhu + // Regency Cthulhu Pulp + // Reign of Terror + gasLight: 'CoC7.EraGasLight', + invictus: 'CoC7.EraInvictus' } COC7.characteristics = { @@ -41,7 +47,10 @@ COC7.skillProperties = { push: 'CoC7.SkillPush', combat: 'CoC7.SkillCombat', fighting: 'CoC7.SkillFighting', - firearm: 'CoC7.SkillFirearm' + firearm: 'CoC7.SkillFirearm', + requiresname: 'CoC7.SkillRequiresName', + keepbasevalue: 'CoC7.SkillKeepBaseValue', + picknameonly: 'CoC7.SkillPickNameOnly' } COC7.weaponProperties = { @@ -146,9 +155,6 @@ COC7.newWeaponName = 'CoC7.NewWeaponName' COC7.creatureFightingSkill = 'CoC7.creatureFightingSkill' -COC7.dodgeSkillName = 'CoC7.DodgeSkillName' -COC7.creditRatingSkillName = 'CoC7.CreditRatingSkillName' -COC7.CthulhuMythosName = 'CoC7.CthulhuMythosName' COC7.fightingSpecializationName = 'CoC7.FightingSpecializationName' COC7.firearmSpecializationName = 'CoC7.FirearmSpecializationName' diff --git a/module/hooks/index.js b/module/hooks/index.js index c73160d85..c1c163bbe 100644 --- a/module/hooks/index.js +++ b/module/hooks/index.js @@ -7,6 +7,7 @@ import * as RenderChatMessage from './render-chat-message.js' import * as RenderDialog from './render-dialog.js' import * as RenderItemSheet from './render-item-sheet.js' import * as RenderPause from './render-pause.js' +import * as RenderPlayerList from './render-player-list.js' import * as RenderSettingsConfig from './render-settings-config.js' export const CoC7Hooks = { @@ -20,6 +21,7 @@ export const CoC7Hooks = { RenderPause.listen() DiceSoNiceReady.listen() DiceSoNiceRollStart.listen() + RenderPlayerList.listen() RenderSettingsConfig.listen() } } diff --git a/module/hooks/init.js b/module/hooks/init.js index 461e726b8..0ce1ae617 100644 --- a/module/hooks/init.js +++ b/module/hooks/init.js @@ -5,6 +5,7 @@ import { registerSettings } from '../scripts/register-settings.js' import { registerSheets } from '../scripts/register-sheets.js' import { handlebarsHelper } from '../scripts/handlebars-helper.js' import { compendiumFilter } from '../scripts/compendium-filter.js' +import { CoCID } from '../scripts/coc-id.js' export function listen () { Hooks.once('init', async () => { @@ -14,5 +15,6 @@ export function listen () { registerSheets() handlebarsHelper() compendiumFilter() + CoCID.init() }) } diff --git a/module/hooks/render-chat-message.js b/module/hooks/render-chat-message.js index 9a098a8fc..db064d1c1 100644 --- a/module/hooks/render-chat-message.js +++ b/module/hooks/render-chat-message.js @@ -1,4 +1,17 @@ /* global Hooks */ +import { CoC7Chat } from '../chat.js' +import { CoC7Parser } from '../apps/parser.js' + export function listen () { - Hooks.on('renderChatMessage', () => {}) + Hooks.on('renderChatMessage', (app, html, data) => { + CoC7Chat.renderMessageHook(app, html, data) + CoC7Chat.renderChatMessageHook(app, html, data) + CoC7Parser.ParseMessage(app, html, data) + html + .find('a.coc7-link') + .on('click', async event => await CoC7Parser._onCheck(event)) + html + .find('a.coc7-link') + .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) + }) } diff --git a/module/hooks/render-player-list.js b/module/hooks/render-player-list.js new file mode 100644 index 000000000..ca3888bd5 --- /dev/null +++ b/module/hooks/render-player-list.js @@ -0,0 +1,8 @@ +/* global $, game, Hooks */ +import { COC7 } from '../config.js' + +export function listen () { + Hooks.on('renderPlayerList', (playerList, html, data) => { + $('

').append('
' + game.i18n.format(COC7.eras[game.settings.get('CoC7', 'worldEra')] ?? 'CoC7.CoCIDFlag.error.unknown-era', { era: game.settings.get('CoC7', 'worldEra') }) + '
').insertAfter($('h3', html)) + }) +} diff --git a/module/items/book/data.js b/module/items/book/data.js index 04f7dde96..a815871f5 100644 --- a/module/items/book/data.js +++ b/module/items/book/data.js @@ -192,7 +192,7 @@ export class CoC7Book extends CoC7Item { */ developments.push( { - name: game.i18n.localize('CoC7.CthulhuMythosName'), + name: game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos'), gain: parseInt(mythosFinal) }, { @@ -229,7 +229,7 @@ export class CoC7Book extends CoC7Item { } if (mythos.type && mythos.gains) { developments.push({ - name: game.i18n.localize('CoC7.CthulhuMythosName'), + name: game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos'), gain: parseInt(mythos.gains) }) } diff --git a/module/items/book/sheet.js b/module/items/book/sheet.js index 088339883..aebfbf5d8 100644 --- a/module/items/book/sheet.js +++ b/module/items/book/sheet.js @@ -1,4 +1,5 @@ /* global $, duplicate, game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { CoC7Utilities } from '../../utilities.js' export class CoC7BookSheet extends ItemSheet { @@ -21,6 +22,12 @@ export class CoC7BookSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = super.getData() sheetData.initialReading = this.item.system.initialReading diff --git a/module/items/chase/sheet.js b/module/items/chase/sheet.js index c329576fb..4881e8663 100644 --- a/module/items/chase/sheet.js +++ b/module/items/chase/sheet.js @@ -1,4 +1,5 @@ /* global $, Dialog, DragDrop, duplicate, expandObject, flattenObject, FormDataExtended, foundry, game, getType, ItemSheet, mergeObject, TextEditor, ui */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { CoC7ChaseParticipantImporter } from '../../apps/chase-participant-importer.js' import { CoC7Chat } from '../../chat.js' import { chatHelper } from '../../chat/helper.js' @@ -38,12 +39,11 @@ export class CoC7ChaseSheet extends ItemSheet { return 'coc7ChaseSheet' } - // /** @override */ - // async render(force, options) { - // return super.render(force, options); - // } - - /** @override */ + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } getData (options = {}) { const sheetData = super.getData(options) @@ -1144,7 +1144,7 @@ export class CoC7ChaseSheet extends ItemSheet { } else { participant.speedCheck = { type: 'item', - name: game.i18n.localize('CoC7.DriveAutoSkillName') + name: game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.drive-auto') } } } diff --git a/module/items/item.js b/module/items/item.js index 652e3d742..855921444 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -2,6 +2,7 @@ import { CoC7Parser } from '../apps/parser.js' import { COC7 } from '../config.js' import { CoC7Utilities } from '../utilities.js' +import { CoCIDEditor } from '../apps/coc-id-editor.js' /** * Override and extend the basic :class:`Item` implementation @@ -53,9 +54,7 @@ export class CoC7Item extends Item { let fighting let firearms if (typeof COC7.eras[propertyId] !== 'undefined') { - checkedProps = { - ['system.eras.' + propertyId]: !(this.system.eras[propertyId] ?? false) - } + return CoCIDEditor.eraToggle(this, propertyId) } else if (this.type === 'weapon' && !override) { if (propertyId === 'ahdb') { if (!this.system.properties.ahdb) { @@ -297,22 +296,16 @@ export class CoC7Item extends Item { } static isAnySpec (item) { - if (item instanceof CoC7Item) { - if (item.type !== 'skill' || !item.system.properties?.special) { - return false - } - return [ - game.i18n.localize('CoC7.AnySpecName').toLowerCase(), - 'any' - ].includes(CoC7Item.getNameWithoutSpec(item).toLowerCase()) - } else { - // Assume it's data only - if (item.type !== 'skill' || !item.properties?.special) return false - return [ - game.i18n.localize('CoC7.AnySpecName').toLowerCase(), - 'any' - ].includes(CoC7Item.getNameWithoutSpec(item).toLowerCase()) + if (item.type !== 'skill' || !item.system.properties?.special) { + return false + } + if (item.system.properties?.requiresname || item.system.properties?.picknameonly) { + return true } + return [ + game.i18n.localize('CoC7.AnySpecName').toLowerCase(), + 'any' + ].includes(CoC7Item.getNameWithoutSpec(item).toLowerCase()) } async checkSkillProperties () { @@ -830,7 +823,7 @@ export class CoC7Item extends Item { if (this.type !== 'skill') return false return ( this.name.toLowerCase() === - game.i18n.localize('CoC7.DodgeSkillName').toLowerCase() + game.i18n.localize('CoC7.CoCIDFlag.keys.i.skill.dodge').toLowerCase() ) } } diff --git a/module/items/sheets/archetype.js b/module/items/sheets/archetype.js index ba494f1c4..916e7f415 100644 --- a/module/items/sheets/archetype.js +++ b/module/items/sheets/archetype.js @@ -1,6 +1,8 @@ /* global $, duplicate, game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { CoC7Item } from '../item.js' import { CoC7Utilities } from '../../utilities.js' +import { DropCoCID } from '../../apps/drop-coc-id.js' /** * Extend the basic ItemSheet with some very simple modifications @@ -29,6 +31,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { const dataList = await CoC7Utilities.getDataFromDropEvent(event, 'Item') + let useCoCID = 0 const collection = this.item.system[collectionName] ? duplicate(this.item.system[collectionName]) : [] for (const item of dataList) { if (!item || !item.system) continue @@ -41,7 +44,10 @@ export class CoC7ArchetypeSheet extends ItemSheet { } } - collection.push(duplicate(item)) + if (useCoCID === 0) { + useCoCID = await DropCoCID.create() + } + collection.push(DropCoCID.processItem(useCoCID, item)) } await this.item.update({ [`system.${collectionName}`]: collection }) } @@ -103,6 +109,12 @@ export class CoC7ArchetypeSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = super.getData() @@ -150,6 +162,7 @@ export class CoC7ArchetypeSheet extends ItemSheet { } ) + sheetData.data.system.skills = await game.system.api.cocid.expandItemArray({ itemList: sheetData.data.system.skills }) sheetData.skillListEmpty = sheetData.data.system.skills.length === 0 sheetData.data.system.skills.sort(CoC7Utilities.sortByNameKey) diff --git a/module/items/sheets/item-sheetV2.js b/module/items/sheets/item-sheetV2.js index 887fde862..2714fe444 100644 --- a/module/items/sheets/item-sheetV2.js +++ b/module/items/sheets/item-sheetV2.js @@ -1,5 +1,7 @@ /* global game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import CoC7ActiveEffect from '../../active-effect.js' + /** * Extend the basic ItemSheet with some very simple modifications */ @@ -25,6 +27,12 @@ export class CoC7ItemSheetV2 extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + /** * Prepare data for rendering the Item sheet * The prepared data object contains both the actor data as well as additional sheet options diff --git a/module/items/sheets/occupation.js b/module/items/sheets/occupation.js index 83dd76af2..9c8d101ab 100644 --- a/module/items/sheets/occupation.js +++ b/module/items/sheets/occupation.js @@ -1,7 +1,9 @@ /* global $, DragDrop, duplicate, expandObject, game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { COC7 } from '../../config.js' import { CoC7Item } from '../item.js' import { CoC7Utilities } from '../../utilities.js' +import { DropCoCID } from '../../apps/drop-coc-id.js' /** * Extend the basic ItemSheet with some very simple modifications @@ -43,6 +45,7 @@ export class CoC7OccupationSheet extends ItemSheet { const dataList = await CoC7Utilities.getDataFromDropEvent(event, 'Item') + let useCoCID = 0 const collection = this.item.system[collectionName] ? duplicate(this.item.system[collectionName]) : [] const groups = this.item.system.groups ? duplicate(this.item.system.groups) : [] @@ -63,7 +66,10 @@ export class CoC7OccupationSheet extends ItemSheet { } } - groups[index].skills = groups[index].skills.concat([item]) + if (useCoCID === 0) { + useCoCID = await DropCoCID.create() + } + groups[index].skills = groups[index].skills.concat([DropCoCID.processItem(useCoCID, item)]) } else { if (!CoC7Item.isAnySpec(item)) { // Generic specialization can be included many times @@ -81,7 +87,10 @@ export class CoC7OccupationSheet extends ItemSheet { } } } - collection.push(duplicate(item)) + if (useCoCID === 0) { + useCoCID = await DropCoCID.create() + } + collection.push(DropCoCID.processItem(useCoCID, item)) } } await this.item.update({ 'system.groups': groups }) @@ -188,16 +197,26 @@ export class CoC7OccupationSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = super.getData() sheetData.hasOwner = this.item.isEmbedded === true + sheetData.data.system.skills = await game.system.api.cocid.expandItemArray({ itemList: sheetData.data.system.skills }) + sheetData.skillListEmpty = sheetData.data.system.skills.length === 0 sheetData.data.system.skills.sort(CoC7Utilities.sortByNameKey) for (let index = 0, len = sheetData.data.system.groups.length; index < len; index++) { + sheetData.data.system.groups[index].skills = await game.system.api.cocid.expandItemArray({ itemList: sheetData.data.system.groups[index].skills }) + sheetData.data.system.groups[index].isEmpty = sheetData.data.system.groups[index].skills.length === 0 sheetData.data.system.groups[index].skills.sort(CoC7Utilities.sortByNameKey) diff --git a/module/items/sheets/setup.js b/module/items/sheets/setup.js index 2decb88ff..2dd78eaef 100644 --- a/module/items/sheets/setup.js +++ b/module/items/sheets/setup.js @@ -1,7 +1,9 @@ /* global $, duplicate, expandObject, game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { COC7 } from '../../config.js' import { CoC7Item } from '../item.js' import { CoC7Utilities } from '../../utilities.js' +import { DropCoCID } from '../../apps/drop-coc-id.js' import { isCtrlKey } from '../../chat/helper.js' /** @@ -48,6 +50,7 @@ export class CoC7SetupSheet extends ItemSheet { const dataList = await CoC7Utilities.getDataFromDropEvent(event, 'Item') + let useCoCID = 0 const collection = this.item.system[collectionName] ? duplicate(this.item.system[collectionName]) : [] for (const item of dataList) { if (!item || !item.system) continue @@ -61,8 +64,12 @@ export class CoC7SetupSheet extends ItemSheet { } } - collection.push(duplicate(item)) + if (useCoCID === 0) { + useCoCID = await DropCoCID.create() + } + collection.push(DropCoCID.processItem(useCoCID, item)) } + await this.item.update({ [`system.${collectionName}`]: collection }) } @@ -145,13 +152,23 @@ export class CoC7SetupSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = super.getData() sheetData.hasOwner = this.item.isEmbedded === true - sheetData.skills = this.item.system.items.filter(it => it.type === 'skill') - sheetData.otherItems = this.item.system.items.filter(it => it.type !== 'skill') + const era = Object.entries(this.item.flags?.CoC7?.cocidFlag?.eras ?? {}).filter(e => e[1]).map(e => e[0]) + + const items = await game.system.api.cocid.expandItemArray({ itemList: this.item.system.items, era: (typeof era[0] !== 'undefined' ? era[0] : true) }) + + sheetData.skills = items.filter(it => it.type === 'skill') + sheetData.otherItems = items.filter(it => it.type !== 'skill') sheetData.skillListEmpty = sheetData.skills.length === 0 sheetData.itemsListEmpty = sheetData.otherItems.length === 0 @@ -162,10 +179,11 @@ export class CoC7SetupSheet extends ItemSheet { for (const [key, value] of Object.entries(COC7.eras)) { sheetData._eras.push({ id: key, - name: value, - isEnabled: this.item.system.eras[key] === true + name: game.i18n.localize(value), + isEnabled: (this.item.flags?.CoC7?.cocidFlag?.eras ?? {})[key] === true }) } + sheetData._eras.sort(CoC7Utilities.sortByNameKey) sheetData.oneBlockBackStory = game.settings.get('CoC7', 'oneBlockBackstory') diff --git a/module/items/sheets/skill.js b/module/items/sheets/skill.js index c03dfc4f0..f97476132 100644 --- a/module/items/sheets/skill.js +++ b/module/items/sheets/skill.js @@ -1,6 +1,8 @@ /* global game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import CoC7ActiveEffect from '../../active-effect.js' import { COC7 } from '../../config.js' +import { CoC7Utilities } from '../../utilities.js' import { isCtrlKey } from '../../chat/helper.js' /** @@ -32,16 +34,16 @@ export class CoC7SkillSheet extends ItemSheet { }) } - /* -------------------------------------------- */ - /** @override */ get template () { return `systems/CoC7/templates/items/${this.item.type}-sheet.html` } - /* -------------------------------------------- */ - - /* -------------------------------------------- */ + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } /** * Prepare data for rendering the Item sheet @@ -70,10 +72,11 @@ export class CoC7SkillSheet extends ItemSheet { for (const [key, value] of Object.entries(COC7.eras)) { sheetData._eras.push({ id: key, - name: value, - isEnabled: this.item.system.eras[key] === true + name: game.i18n.localize(value), + isEnabled: (this.item.flags?.CoC7?.cocidFlag?.eras ?? {})[key] === true }) } + sheetData._eras.sort(CoC7Utilities.sortByNameKey) sheetData.isSpecialized = this.item.system.properties.special sheetData.canModifySpec = diff --git a/module/items/sheets/status.js b/module/items/sheets/status.js index 68b5c598a..e360d1f90 100644 --- a/module/items/sheets/status.js +++ b/module/items/sheets/status.js @@ -1,4 +1,5 @@ /* global game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import CoC7ActiveEffect from '../../active-effect.js' import { COC7 } from '../../config.js' @@ -34,6 +35,12 @@ export class CoC7StatusSheet extends ItemSheet { .click(ev => CoC7ActiveEffect.onManageActiveEffect(ev, this.item)) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + /* Prepare data for rendering the Item sheet * The prepared data object contains both the actor data as well as additional sheet options */ diff --git a/module/items/sheets/talent.js b/module/items/sheets/talent.js index 21f74d2f9..d164fe18f 100644 --- a/module/items/sheets/talent.js +++ b/module/items/sheets/talent.js @@ -1,4 +1,5 @@ /* global game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { COC7 } from '../../config.js' /** @@ -25,6 +26,12 @@ export class CoC7TalentSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + /* Prepare data for rendering the Item sheet * The prepared data object contains both the actor data as well as additional sheet options */ diff --git a/module/items/sheets/weapon-sheet.js b/module/items/sheets/weapon-sheet.js index 8dd335a49..dde181e09 100644 --- a/module/items/sheets/weapon-sheet.js +++ b/module/items/sheets/weapon-sheet.js @@ -1,4 +1,5 @@ /* global game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { COC7 } from '../../config.js' import { isCtrlKey } from '../../chat/helper.js' import { CoC7Utilities } from '../../utilities.js' @@ -33,6 +34,12 @@ export class CoC7WeaponSheet extends ItemSheet { return `${path}/weapon-sheet.html` } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + /** * Prepare data for rendering the Item sheet * The prepared data object contains both the actor data as well as additional sheet options @@ -72,10 +79,11 @@ export class CoC7WeaponSheet extends ItemSheet { sheetData._eras.push({ price: this.item.system.price[key] ?? 0, id: key, - name: value, - isEnabled: this.item.system.eras[key] === true + name: game.i18n.localize(value), + isEnabled: (this.item.flags?.CoC7?.cocidFlag?.eras ?? {})[key] === true }) } + sheetData._eras.sort(CoC7Utilities.sortByNameKey) sheetData.usesAlternateSkill = this.item.system.properties.auto === true || diff --git a/module/items/spell/sheet.js b/module/items/spell/sheet.js index 883f42a2b..9ef147d80 100644 --- a/module/items/spell/sheet.js +++ b/module/items/spell/sheet.js @@ -1,4 +1,6 @@ /* global $, game, ItemSheet, mergeObject, TextEditor */ +import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' + export class CoC7SpellSheet extends ItemSheet { static get defaultOptions () { return mergeObject(super.defaultOptions, { @@ -18,6 +20,12 @@ export class CoC7SpellSheet extends ItemSheet { }) } + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } + async getData () { const sheetData = super.getData() sheetData.hasOwner = this.item.isEmbedded === true diff --git a/module/scripts/coc-id-button.js b/module/scripts/coc-id-button.js new file mode 100644 index 000000000..b3adf3aa7 --- /dev/null +++ b/module/scripts/coc-id-button.js @@ -0,0 +1,19 @@ +/* global game */ +import { CoCIDEditor } from '../apps/coc-id-editor.js' + +export function addCoCIDSheetHeaderButton (headerButtons, sheet) { + if (game.user.isGM) { + const sheetCoCID = sheet.object.flags?.CoC7?.cocidFlag + const noId = (typeof sheetCoCID === 'undefined' || typeof sheetCoCID.id === 'undefined' || sheetCoCID.id === '') + const CoCIDEditorButton = { + class: (noId ? 'edit-coc-id-warning' : 'edit-coc-id-exisiting'), + label: 'CoC7.CoCIDFlag.id', + icon: 'fas fa-fingerprint', + onclick: () => { + new CoCIDEditor(sheet.object, {}).render(true, { focus: true }) + } + } + const numberOfButtons = headerButtons.length + headerButtons.splice(numberOfButtons - 1, 0, CoCIDEditorButton) + } +} diff --git a/module/scripts/coc-id.js b/module/scripts/coc-id.js new file mode 100644 index 000000000..c930e4399 --- /dev/null +++ b/module/scripts/coc-id.js @@ -0,0 +1,530 @@ +/* global Actor, Card, CONFIG, flattenObject, game, Item, JournalEntry, Macro, Playlist, RollTable, Scene, ui */ +import { COC7 } from '../config.js' +import { CoC7Utilities } from '../utilities.js' + +export class CoCID { + static init () { + CONFIG.Actor.compendiumIndexFields.push('flags.CoC7.cocidFlag') + // CONFIG.Cards.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.Item.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.Item.compendiumIndexFields.push('system.base') + CONFIG.Item.compendiumIndexFields.push('system.properties') + CONFIG.JournalEntry.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.Macro.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.Playlist.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.RollTable.compendiumIndexFields.push('flags.CoC7.cocidFlag') + CONFIG.Scene.compendiumIndexFields.push('flags.CoC7.cocidFlag') + game.system.api = { + cocid: CoCID + } + } + + /** + * Returns RegExp for valid type and format + * @returns RegExp + */ + static regExKey () { + return new RegExp('^(' + Object.keys(CoCID.gamePropertyLookup).join('|') + ')\\.(.*?)\\.(.+)$') + } + + /** + * Get CoCID type.subtype. based on document + * @param document + * @returns string + */ + static getPrefix (document) { + for (const type in CoCID.documentNameLookup) { + if (document instanceof CoCID.documentNameLookup[type]) { + return type + '.' + (document.type ?? '') + '.' + } + } + return '' + } + + /** + * Get CoCID type.subtype.name based on document + * @param document + * @returns string + */ + static guessId (document) { + return CoCID.getPrefix(document) + CoC7Utilities.toKebabCase(document.name) + } + + /** + * Get CoCID type.subtype.partial-name(-removed) + * @param document + * @returns string + */ + static guessGroup (document) { + const id = document.flags?.CoC7?.cocidFlag?.id + if (id) { + const key = id.replace(/([^\\.-]+)$/, '') + if (key.substr(-1) === '-') { + return key + } + } + return '' + } + + /** + * Returns translation of era key + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @returns string + */ + static eraText (era) { + if (era === false) { + return game.i18n.localize('CoC7.Any') + } + return game.i18n.format(COC7.eras[era] ?? 'CoC7.CoCIDFlag.error.unknown-era', { era }) + } + + /** + * Returns all items with matching CoCIDs, language, and eras + * ui.notifications.warn for missing keys + * @param itemList array of CoCIDs + * @param lang the language to match against ('en', 'es', ...) + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param langFallback should the system fall back to en incase there is no translation + * @returns array + */ + static async expandItemArray ({ itemList, lang = game.i18n.lang, era = true, langFallback = true } = {}) { + let items = [] + const cocids = itemList.filter(it => typeof it === 'string') + items = itemList.filter(it => typeof it !== 'string') + + if (cocids.length) { + const found = await CoCID.fromCoCIDRegexBest({ cocidRegExp: CoCID.makeGroupRegEx(cocids), type: 'i', lang, era, langFallback }) + const all = [] + for (const cocid of cocids) { + const item = found.find(i => i.flags.CoC7.cocidFlag.id === cocid) + if (item) { + all.push(item) + } + } + if (all.length < cocids.length) { + const notmissing = [] + for (const doc of all) { + notmissing.push(doc.flags.CoC7.cocidFlag.id) + } + if (era === true) { + era = game.settings.get('CoC7', 'worldEra') + } + ui.notifications.warn(game.i18n.format('CoC7.CoCIDFlag.error.documents-not-found', { cocids: cocids.filter(x => !notmissing.includes(x)).join(', '), lang, era: CoCID.eraText(era) })) + } + items = items.concat(all) + } + return items + } + + /** + * Returns item with matching CoCIDs from list + * Empty array return for missing keys + * @param cocid a single cocid + * @param list array of items + * @returns array + */ + static findCocIdInList (cocid, list) { + let itemName = '' + const CoCIDKeys = flattenObject(game.i18n.translations.CoC7.CoCIDFlag.keys) + if (typeof CoCIDKeys[cocid] !== 'undefined') { + itemName = CoCIDKeys[cocid] + } + return (typeof list.filter === 'undefined' ? Object.values(list) : list).filter(i => i.flags?.CoC7?.cocidFlag?.id === cocid || (itemName !== '' && itemName === i.name)) + } + + /** + * Returns RegExp matching all strings in array + * @param cocids an array of CoCID strings + * @param list array of items + * @returns RegExp + */ + static makeGroupRegEx (cocids) { + if (typeof cocids === 'string') { + cocids = [cocids] + } else if (typeof cocids === 'undefined' || typeof cocids.filter !== 'function') { + return undefined + } + const splits = {} + const rgx = CoCID.regExKey() + for (const i of cocids) { + const key = i.match(rgx) + if (key) { + if (typeof splits[key[1]] === 'undefined') { + splits[key[1]] = {} + } + if (typeof splits[key[1]][key[2]] === 'undefined') { + splits[key[1]][key[2]] = [] + } + splits[key[1]][key[2]].push(key[3]) + } else { + // Sliently error + } + } + const regExParts = [] + for (const t in splits) { + const row = [] + for (const s in splits[t]) { + if (splits[t][s].length > 1) { + row.push(s + '\\.' + '(' + splits[t][s].join('|') + ')') + } else { + row.push(s + '\\.' + splits[t][s].join('')) + } + } + if (row.length > 1) { + regExParts.push(t + '\\.' + '(' + row.join('|') + ')') + } else { + regExParts.push(t + '\\.' + row.join('')) + } + } + if (regExParts.length > 1) { + return new RegExp('^(' + regExParts.join('|') + ')$') + } + return new RegExp('^' + regExParts.join('') + '$') + } + + /** + * Returns all documents with an CoCID matching the regex and matching the document type + * and language, from the specified scope. + * Empty array return for no matches + * @param cocidRegExp regex used on the CoCID + * @param type the first part of the wanted CoCID, for example 'i', 'a', 'je' + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param lang the language to match against ('en', 'es', ...) + * @param scope defines where it will look: + * **match** same logic as fromCoCID function, + * **all**: find in both world & compendia, + * **world**: only search in world, + * **compendiums**: only search in compendiums + * @param langFallback should the system fall back to en incase there is no translation + * @returns array + */ + static async fromCoCIDRegexAll ({ cocidRegExp, type, lang = game.i18n.lang, era = false, scope = 'match', langFallback = true } = {}) { + if (!cocidRegExp) { + return [] + } + const result = [] + + if (['match', 'all', 'world'].includes(scope)) { + const worldDocuments = await CoCID.documentsFromWorld({ cocidRegExp, type, lang, era, langFallback }) + if (scope === 'match' && worldDocuments.length) { + return this.filterAllCoCID(worldDocuments, langFallback && lang !== 'en') + } + result.splice(0, 0, ...worldDocuments) + } + + if (['match', 'all', 'compendiums'].includes(scope)) { + const compendiaDocuments = await CoCID.documentsFromCompendia({ cocidRegExp, type, lang, era, langFallback }) + + result.splice(result.length, 0, ...compendiaDocuments) + } + + return this.filterAllCoCID(result, langFallback && lang !== 'en') + } + + /** + * Returns all documents with an CoCID, language, and era from the specified scope. + * Empty array return for no matches + * @param cocid a single cocid + * @param lang the language to match against ('en', 'es', ...) + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param scope defines where it will look: + * **match** same logic as fromCoCID function, + * **all**: find in both world & compendia, + * **world**: only search in world, + * **compendiums**: only search in compendiums + * @param langFallback should the system fall back to en incase there is no translation + * @returns array + */ + static async fromCoCIDAll ({ cocid, lang = game.i18n.lang, era = false, scope = 'match', langFallback = true } = {}) { + if (!cocid || typeof cocid !== 'string') { + return [] + } + const parts = cocid.match(CoCID.regExKey()) + if (!parts) { + return [] + } + if (lang === '') { + lang = game.i18n.lang + } + return CoCID.fromCoCIDRegexAll({ cocidRegExp: new RegExp('^' + CoC7Utilities.quoteRegExp(cocid) + '$'), type: parts[1], lang, era, scope, langFallback }) + } + + /** + * Gets only the highest priority documents for each CoCID that matches the RegExp and + * language, with the highest priority documents in the World taking precedence over + * any documents in compendium packs. + * Empty array return for no matches + * @param cocidRegExp regex used on the CoCID + * @param type the first part of the wanted CoCID, for example 'i', 'a', 'je' + * @param lang the language to match against ("en", "es", ...) + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param langFallback should the system fall back to en incase there is no translation + */ + static async fromCoCIDRegexBest ({ cocidRegExp, type, lang = game.i18n.lang, era = true, langFallback = true } = {}) { + const allDocuments = await this.fromCoCIDRegexAll({ cocidRegExp, type, lang, era, scope: 'all', langFallback }) + const bestDocuments = this.filterBestCoCID(allDocuments) + return bestDocuments + } + + /** + * Gets only the highest priority document for CoCID that matches the language, + * with the highest priority documents in the World taking precedence over + * any documents + * in compendium packs. + * @param cocid string CoCID + * @param lang the language to match against ("en", "es", ...) + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param langFallback should the system fall back to en incase there is no translation + */ + static fromCoCID (cocid, lang = game.i18n.lang, era = true, langFallback = true) { + return CoCID.fromCoCIDBest({ cocid, lang, era, langFallback }) + } + + /** + * Gets only the highest priority document for CoCID that matches the language, + * with the highest priority documents in the World taking precedence over + * any documents + * in compendium packs. + * @param cocid string CoCID + * @param lang the language to match against ("en", "es", ...) + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param langFallback should the system fall back to en incase there is no translation + */ + static fromCoCIDBest ({ cocid, lang = game.i18n.lang, era = true, langFallback = true } = {}) { + if (!cocid || typeof cocid !== 'string') { + return [] + } + const type = cocid.split('.')[0] + const cocidRegExp = new RegExp('^' + CoC7Utilities.quoteRegExp(cocid) + '$') + return CoCID.fromCoCIDRegexBest({ cocidRegExp, type, lang, era, langFallback }) + } + + /** + * For an array of documents, returns only those that are the "best" version of their CoCID + * @param documents + * @returns + */ + static filterBestCoCID (documents) { + const bestMatchDocuments = new Map() + + for (const doc of documents) { + const docCoCID = doc.getFlag('CoC7', 'cocidFlag')?.id + if (docCoCID) { + const currentExists = bestMatchDocuments.get(docCoCID)?.id + const docLang = doc.getFlag('CoC7', 'cocidFlag')?.lang ?? 'en' + const existingLang = bestMatchDocuments.get(docCoCID)?.getFlag('CoC7', 'cocidFlag')?.lang ?? 'en' + const preferLang = (!currentExists || existingLang === 'en' || existingLang === docLang) + // console.log('preferLang', '>', docLang, '< >', existingLang, '<', preferLang) + const docPack = (doc.pack ?? '') + const existingPack = (bestMatchDocuments.get(docCoCID)?.pack ?? '') + const preferWorld = (!currentExists || docPack === '' || existingPack !== '') + // console.log('preferWorld', '>', docPack, '< >', existingPack, '<', preferWorld) + const docPriority = parseInt(doc.getFlag('CoC7', 'cocidFlag')?.priority, 10) + const existingPriority = parseInt(bestMatchDocuments.get(docCoCID)?.getFlag('CoC7', 'cocidFlag')?.priority ?? Number.MIN_SAFE_INTEGER) + const preferPriority = (!currentExists || docPriority === existingPriority || docPriority > existingPriority) + // console.log('preferPriority', '>', docPriority, '< >', existingPriority, '<', preferPriority) + if (preferLang && preferWorld && preferPriority) { + bestMatchDocuments.set(docCoCID, doc) + } + } + } + + return [...bestMatchDocuments.values()] + } + + /** + * For an array of documents, returns filter out en documents if a translated one exists matching the same eras + * @param documents + * @param langFallback should the system fall back to en incase there is no translation + * @returns + */ + static filterAllCoCID (documents, langFallback) { + if (!langFallback) { + return documents + } + const bestMatchDocuments = new Map() + + for (const doc of documents) { + const docCoCID = doc.getFlag('CoC7', 'cocidFlag')?.id + const docEras = Object.entries(doc.getFlag('CoC7', 'cocidFlag')?.eras ?? {}).filter(e => e[1]).map(e => e[0]).join('/') + if (docCoCID) { + const currentExists = bestMatchDocuments.get(docCoCID)?.id + const docLang = doc.getFlag('CoC7', 'cocidFlag')?.lang ?? 'en' + const existingLang = bestMatchDocuments.get(docCoCID)?.getFlag('CoC7', 'cocidFlag')?.lang ?? 'en' + const preferLang = (!currentExists || existingLang === 'en' || existingLang === docLang) + if (preferLang) { + bestMatchDocuments.set(docCoCID + '/' + docEras, doc) + } + } + } + + return [...bestMatchDocuments.values()] + } + + /** + * Get a list of all documents matching the CoCID regex, language, and era from the world. + * The document list is sorted with the highest priority first. + * @param cocidRegExp regex used on the CoCID + * @param type the first part of the wanted CoCID, for example 'i', 'a', 'je' + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param lang the language to match against ('en', 'es', ...) + * @param langFallback should the system fall back to en incase there is no translation + * @returns array + */ + static async documentsFromWorld ({ cocidRegExp, type, lang = game.i18n.lang, era = false, langFallback = true } = {}) { + if (!cocidRegExp) { + return [] + } + if (lang === '') { + lang = game.i18n.lang + } + if (era === true) { + era = game.settings.get('CoC7', 'worldEra') + } + + const gameProperty = CoCID.getGameProperty(`${type}..`) + + const candidateDocuments = game[gameProperty]?.filter((d) => { + const cocidFlag = d.getFlag('CoC7', 'cocidFlag') + if (typeof cocidFlag === 'undefined') { + return false + } + const eras = (cocidFlag.eras ?? []) + const matchingEras = (era === false || Object.entries(eras).length === 0 || (Object.prototype.hasOwnProperty.call(eras, era) && eras[era])) + return cocidRegExp.test(cocidFlag.id) && [lang, (langFallback ? 'en' : '-')].includes(cocidFlag.lang) && matchingEras + }) + + if (candidateDocuments === undefined) { + return [] + } + + return candidateDocuments.sort(CoCID.compareCoCIDPrio) + } + + /** + * Get a list of all documents matching the CoCID regex, language, and era from the compendiums. + * The document list is sorted with the highest priority first. + * @param cocidRegExp regex used on the CoCID + * @param type the first part of the wanted CoCID, for example 'i', 'a', 'je' + * @param era the eras to match against ('standard', 'modernPulp', ...), true = world default, false = no filter + * @param lang the language to match against ('en', 'es', ...) + * @param langFallback should the system fall back to en incase there is no translation + * @returns array + */ + static async documentsFromCompendia ({ cocidRegExp, type, lang = game.i18n.lang, era = false, langFallback = true }) { + if (!cocidRegExp) { + return [] + } + if (lang === '') { + lang = game.i18n.lang + } + if (era === true) { + era = game.settings.get('CoC7', 'worldEra') + } + const eraText = CoCID.eraText(era) + + const documentType = CoCID.getDocumentType(type).schema.name + const candidateDocuments = [] + + for (const pack of game.packs) { + if (pack.documentName === documentType) { + if (!pack.indexed) { + await pack.getIndex() + } + const indexInstances = pack.index.filter((i) => { + const cocidFlag = i.flags?.CoC7?.cocidFlag + if (typeof cocidFlag === 'undefined') { + return false + } + const eras = (cocidFlag.eras ?? []) + const matchingEras = (era === false || Object.entries(eras).length === 0 || (Object.prototype.hasOwnProperty.call(eras, era) && eras[era])) + return cocidRegExp.test(cocidFlag.id) && [lang, (langFallback ? 'en' : '-')].includes(cocidFlag.lang) && matchingEras + }) + for (const index of indexInstances) { + const document = await pack.getDocument(index._id) + if (!document) { + const msg = game.i18n.format('CoC7.CoCIDFlag.error.document-not-found', { + cocid: cocidRegExp, + lang, + era: eraText + }) + ui.notifications.error(msg) + console.log('CoC7 |', msg, index) + throw new Error() + } else { + candidateDocuments.push(document) + } + } + } + } + return candidateDocuments.sort(CoCID.compareCoCIDPrio) + } + + /** + * Sort a list of document on CoCID priority - the highest first. + * @example + * aListOfDocuments.sort(CoCID.compareCoCIDPrio) + */ + static compareCoCIDPrio (a, b) { + return ( + b.getFlag('CoC7', 'cocidFlag')?.priority - + a.getFlag('CoC7', 'cocidFlag')?.priority + ) + } + + /** + * Translates the first part of a CoCID to what those documents are called in the `game` object. + * @param cocid a single cocid + */ + static getGameProperty (cocid) { + const type = cocid.split('.')[0] + const gameProperty = CoCID.gamePropertyLookup[type] + if (!gameProperty) { + ui.notifications.warn(game.i18n.format('CoC7.CoCIDFlag.error.incorrect.type')) + console.log('CoC7 | ', cocid) + throw new Error() + } + return gameProperty + } + + static get gamePropertyLookup () { + return { + a: 'actors', + c: 'cards', + i: 'items', + je: 'journal', + m: 'macros', + p: 'playlists', + rt: 'tables', + s: 'scenes' + } + } + + /** + * Translates the first part of a CoCID to what those documents are called in the `game` object. + * @param cocid a single cocid + */ + static getDocumentType (cocid) { + const type = cocid.split('.')[0] + const documentType = CoCID.documentNameLookup[type] + if (!documentType) { + ui.notifications.warn(game.i18n.format('CoC7.CoCIDFlag.error.incorrect.type')) + console.log('CoC7 | ', cocid) + throw new Error() + } + return documentType + } + + static get documentNameLookup () { + return { + a: Actor, + c: Card, + i: Item, + je: JournalEntry, + m: Macro, + p: Playlist, + rt: RollTable, + s: Scene + } + } +} diff --git a/module/scripts/compendium-filter.js b/module/scripts/compendium-filter.js index c5f8edc67..4d5bb13d1 100644 --- a/module/scripts/compendium-filter.js +++ b/module/scripts/compendium-filter.js @@ -1,5 +1,6 @@ /* global $, game, Hooks */ import { COC7 } from '../config.js' +import { CoC7Utilities } from '../utilities.js' async function performFilter (e) { const appId = e.currentTarget.name.replace(/^coc7[^0-9]+(\d+)$/, '$1') @@ -33,13 +34,9 @@ async function performFilter (e) { filter = item.type === type } if (filter && era !== '') { - if ( - item.system.eras[era] === false || - item.system.eras[era] === true - ) { - filter = item.system.eras[era] - } else { - filter = item.system.eras[era]?.selected ?? false + const eras = item.flags?.CoC7?.cocidFlag?.eras + if (eras && Object.keys(eras).length > 0 && !(eras[era] ?? false)) { + filter = false } } if (filter) { @@ -135,16 +132,27 @@ export function compendiumFilter () { eras.push( '' ) - for (const [key, value] of Object.entries(COC7.eras)) { + for (const era of Object.entries(COC7.eras).map(e => { return { id: e[0], name: game.i18n.localize(e[1]) } }).sort(CoC7Utilities.sortByNameKey)) { eras.push( '' ) } html.data('packId', app.metadata.id) + let uncommon = game.i18n.localize('CoC7.SkillRarityShort') + if (uncommon === 'CoC7.SkillRarityShort') { + uncommon = '??' + } + html.find('li.directory-item').each(function () { + const row = $(this) + const item = data.index.find(i => i._id === row.data('document-id')) + if (item && item.type === 'skill') { + row.find('a').html(item.name + ' (' + item.system.base + '%' + ((item.system.properties?.rarity ?? false) ? ' ' + uncommon : '') + ')') + } + }) html .find('header.directory-header') .after( diff --git a/module/scripts/register-settings.js b/module/scripts/register-settings.js index 5fba4ec62..6065d4721 100644 --- a/module/scripts/register-settings.js +++ b/module/scripts/register-settings.js @@ -1,4 +1,5 @@ /* global $, CONFIG, game, ui */ +import { COC7 } from '../config.js' import { CoC7DecaderDie } from '../apps/decader-die.js' import { CoC7DecaderDieOther } from '../apps/decader-die-other.js' import { CoC7GameRuleSettings } from './game-rules.js' @@ -36,6 +37,33 @@ export function registerSettings () { default: '[data] worlds/' + game.world.id + '/dhole-images' }) + game.settings.register('CoC7', 'worldEra', { + name: 'CoC7.Settings.WorldEra.Name', + hint: 'CoC7.Settings.WorldEra.Hint', + scope: 'world', + config: true, + default: 'standard', + type: String, + choices: COC7.eras, + onChange: () => { + ui.players.render(true) + } + }) + + game.settings.register('CoC7', 'dropCoCID', { + name: 'CoC7.Settings.DropCoCID.Name', + hint: 'CoC7.Settings.DropCoCID.Hint', + scope: 'world', + config: true, + default: '', + type: String, + choices: { + '': 'CoC7.Settings.DropCoCID.Prompt', + Y: 'CoC7.Settings.DropCoCID.UseCoCID', + N: 'CoC7.Settings.DropCoCID.IgnoreCoCID' + } + }) + /** * Initiative */ diff --git a/module/scripts/register-sheets.js b/module/scripts/register-sheets.js index a77c5e4f5..677b735a3 100644 --- a/module/scripts/register-sheets.js +++ b/module/scripts/register-sheets.js @@ -1,4 +1,4 @@ -/* global Actors, ActorSheet, Items, ItemSheet */ +/* global Actors, ActorSheet, Items, ItemSheet, Journal, JournalSheet, MacroConfig, Macros, PlaylistConfig, Playlists, RollTables, RollTableConfig, Scenes, SceneConfig */ import { CoC7ArchetypeSheet } from '../items/sheets/archetype.js' import { CoC7BookSheet } from '../items/book/sheet.js' import { CoC7CharacterSheet } from '../actors/sheets/character.js' @@ -7,8 +7,13 @@ import { CoC7ChaseSheet } from '../items/chase/sheet.js' import { CoC7CreatureSheet } from '../actors/sheets/creature-sheet.js' import { CoC7ItemSheet } from '../items/sheets/item-sheet.js' import { CoC7ItemSheetV2 } from '../items/sheets/item-sheetV2.js' +import { CoC7JournalSheet } from '../sheets/coc7-journal-sheet.js' +import { CoC7MacroConfig } from '../sheets/coc7-macro-config.js' import { CoC7NPCSheet } from '../actors/sheets/npc-sheet.js' import { CoC7OccupationSheet } from '../items/sheets/occupation.js' +import { CoC7PlaylistConfig } from '../sheets/coc7-playlist-config.js' +import { CoC7RollTableConfig } from '../sheets/coc7-roll-table-config.js' +import { CoC7SceneConfig } from '../sheets/coc7-scene-config.js' import { CoC7SetupSheet } from '../items/sheets/setup.js' import { CoC7SkillSheet } from '../items/sheets/skill.js' import { CoC7SpellSheet } from '../items/spell/sheet.js' @@ -39,6 +44,7 @@ export function registerSheets () { types: ['character'], makeDefault: true }) + Items.unregisterSheet('core', ItemSheet) Items.registerSheet('CoC7', CoC7SkillSheet, { types: ['skill'], @@ -85,4 +91,29 @@ export function registerSheets () { types: ['item'], makeDefault: true }) + + Scenes.unregisterSheet('core', SceneConfig) + Scenes.registerSheet('CoC7', CoC7SceneConfig, { + makeDefault: true + }) + + Journal.unregisterSheet('core', JournalSheet) + Journal.registerSheet('CoC7', CoC7JournalSheet, { + makeDefault: true + }) + + RollTables.unregisterSheet('core', RollTableConfig) + RollTables.registerSheet('CoC7', CoC7RollTableConfig, { + makeDefault: true + }) + + Macros.unregisterSheet('core', MacroConfig) + Macros.registerSheet('CoC7', CoC7MacroConfig, { + makeDefault: true + }) + + Playlists.unregisterSheet('core', PlaylistConfig) + Playlists.registerSheet('CoC7', CoC7PlaylistConfig, { + makeDefault: true + }) } diff --git a/module/sheets/coc7-journal-sheet.js b/module/sheets/coc7-journal-sheet.js new file mode 100644 index 000000000..768d72488 --- /dev/null +++ b/module/sheets/coc7-journal-sheet.js @@ -0,0 +1,10 @@ +/* global JournalSheet */ +import { addCoCIDSheetHeaderButton } from '../scripts/coc-id-button.js' + +export class CoC7JournalSheet extends JournalSheet { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } +} diff --git a/module/sheets/coc7-macro-config.js b/module/sheets/coc7-macro-config.js new file mode 100644 index 000000000..077a07985 --- /dev/null +++ b/module/sheets/coc7-macro-config.js @@ -0,0 +1,10 @@ +/* global MacroConfig */ +import { addCoCIDSheetHeaderButton } from '../scripts/coc-id-button.js' + +export class CoC7MacroConfig extends MacroConfig { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } +} diff --git a/module/sheets/coc7-playlist-config.js b/module/sheets/coc7-playlist-config.js new file mode 100644 index 000000000..c4a651107 --- /dev/null +++ b/module/sheets/coc7-playlist-config.js @@ -0,0 +1,10 @@ +/* global PlaylistConfig */ +import { addCoCIDSheetHeaderButton } from '../scripts/coc-id-button.js' + +export class CoC7PlaylistConfig extends PlaylistConfig { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } +} diff --git a/module/sheets/coc7-roll-table-config.js b/module/sheets/coc7-roll-table-config.js new file mode 100644 index 000000000..3bf08b9d2 --- /dev/null +++ b/module/sheets/coc7-roll-table-config.js @@ -0,0 +1,10 @@ +/* global RollTableConfig */ +import { addCoCIDSheetHeaderButton } from '../scripts/coc-id-button.js' + +export class CoC7RollTableConfig extends RollTableConfig { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } +} diff --git a/module/sheets/coc7-scene-config.js b/module/sheets/coc7-scene-config.js new file mode 100644 index 000000000..8a83109df --- /dev/null +++ b/module/sheets/coc7-scene-config.js @@ -0,0 +1,10 @@ +/* global SceneConfig */ +import { addCoCIDSheetHeaderButton } from '../scripts/coc-id-button.js' + +export class CoC7SceneConfig extends SceneConfig { + _getHeaderButtons () { + const headerButtons = super._getHeaderButtons() + addCoCIDSheetHeaderButton(headerButtons, this) + return headerButtons + } +} diff --git a/module/updater.js b/module/updater.js index 2f66e1ed8..fed872a5e 100644 --- a/module/updater.js +++ b/module/updater.js @@ -345,7 +345,7 @@ export class Updater { Updater._migrateItemKeeperNotes(item, updateData) Updater._migrateItemSpellAutomated(item, updateData) Updater._migrateItemKeeperNotesMerge(item, updateData) - Updater._migrateItemSetupEras(item, updateData) + Updater._migrateItemEras(item, updateData) Updater._migrateItemv10(item, updateData) Updater._migrateItemBookUnits(item, updateData) @@ -461,58 +461,68 @@ export class Updater { } if (item.type === 'setup') { for (const [k, v] of Object.entries(item.system.items)) { - image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) - if (image !== null) { - if (typeof updateData['system.items'] === 'undefined') { - updateData['system.items'] = item.system.items + if (typeof v !== 'string') { + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) + if (image !== null) { + if (typeof updateData['system.items'] === 'undefined') { + updateData['system.items'] = item.system.items + } + updateData['system.items'][k].img = + 'systems/CoC7/assets/icons/' + image[1] } - updateData['system.items'][k].img = - 'systems/CoC7/assets/icons/' + image[1] } } } else if (item.type === 'occupation') { for (const [k, v] of Object.entries(item.system.skills)) { - image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) - if (image !== null) { - if (typeof updateData['system.skills'] === 'undefined') { - updateData['system.skills'] = item.system.skills + if (typeof v !== 'string') { + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) + if (image !== null) { + if (typeof updateData['system.skills'] === 'undefined') { + updateData['system.skills'] = item.system.skills + } + updateData['system.skills'][k].img = + 'systems/CoC7/assets/icons/' + image[1] } - updateData['system.skills'][k].img = - 'systems/CoC7/assets/icons/' + image[1] } } for (const [o, g] of Object.entries(item.system.groups)) { for (const [k, v] of Object.entries(g.skills)) { - image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) - if (image !== null) { - if (typeof updateData['system.groups'] === 'undefined') { - updateData['system.groups'] = item.system.groups + if (typeof v !== 'string') { + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) + if (image !== null) { + if (typeof updateData['system.groups'] === 'undefined') { + updateData['system.groups'] = item.system.groups + } + updateData['system.groups'][o].skills[k].img = + 'systems/CoC7/assets/icons/' + image[1] } - updateData['system.groups'][o].skills[k].img = - 'systems/CoC7/assets/icons/' + image[1] } } } } else if (item.type === 'book') { for (const [k, v] of Object.entries(item.system.spells)) { - image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) - if (image !== null) { - if (typeof updateData['system.spells'] === 'undefined') { - updateData['system.spells'] = item.system.spells + if (typeof v !== 'string') { + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) + if (image !== null) { + if (typeof updateData['system.spells'] === 'undefined') { + updateData['system.spells'] = item.system.spells + } + updateData['system.spells'][k].img = + 'systems/CoC7/assets/icons/' + image[1] } - updateData['system.spells'][k].img = - 'systems/CoC7/assets/icons/' + image[1] } } } else if (item.type === 'archetype') { for (const [k, v] of Object.entries(item.system.skills)) { - image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) - if (image !== null) { - if (typeof updateData['system.skills'] === 'undefined') { - updateData['system.skills'] = item.system.skills + if (typeof v !== 'string') { + image = String(v.img).match(/systems\/CoC7\/artwork\/icons\/(.+)/) + if (image !== null) { + if (typeof updateData['system.skills'] === 'undefined') { + updateData['system.skills'] = item.system.skills + } + updateData['system.skills'][k].img = + 'systems/CoC7/assets/icons/' + image[1] } - updateData['system.skills'][k].img = - 'systems/CoC7/assets/icons/' + image[1] } } } @@ -626,9 +636,11 @@ export class Updater { let changed = false for (const [o, g] of Object.entries(item.system.groups)) { for (const [k, v] of Object.entries(g.skills)) { - if (typeof v.system === 'undefined') { - item.system.groups[o].skills[k].system = v.data - changed = true + if (typeof v !== 'string') { + if (typeof v.system === 'undefined') { + item.system.groups[o].skills[k].system = v.data + changed = true + } } } } @@ -639,9 +651,11 @@ export class Updater { if (['setup'].includes(item.type)) { let changed = false for (const [k, v] of Object.entries(item.system.items)) { - if (typeof v.system === 'undefined') { - item.system.items[k].system = v.data - changed = true + if (typeof v !== 'string') { + if (typeof v.system === 'undefined') { + item.system.items[k].system = v.data + changed = true + } } } if (changed) { @@ -651,9 +665,11 @@ export class Updater { if (['archetype', 'occupation'].includes(item.type)) { let changed = false for (const [k, v] of Object.entries(item.system.skills)) { - if (typeof v.system === 'undefined') { - item.system.skills[k].system = v.data - changed = true + if (typeof v !== 'string') { + if (typeof v.system === 'undefined') { + item.system.skills[k].system = v.data + changed = true + } } } if (changed) { @@ -663,9 +679,11 @@ export class Updater { if (['book'].includes(item.type)) { let changed = false for (const [k, v] of Object.entries(item.system.spells)) { - if (typeof v.system === 'undefined') { - item.system.spells[k].system = v.data - changed = true + if (typeof v !== 'string') { + if (typeof v.system === 'undefined') { + item.system.spells[k].system = v.data + changed = true + } } } if (changed) { @@ -695,115 +713,185 @@ export class Updater { updateData['system.specialization'] = parts.specialization } else if (item.type === 'setup') { for (const [k, v] of Object.entries(item.system.items)) { - if ( - v.type === 'skill' && - (typeof v.system.skillName === 'undefined' || v.system.skillName === '') - ) { - if (typeof updateData['system.items'] === 'undefined') { - updateData['system.items'] = item.system.items - } - updateData['system.items'][k].name = v.name - if (updateData['system.items'][k].name === 'Uniki') { - updateData['system.items'][k].name = 'Unik' + if (typeof v !== 'string') { + if ( + v.type === 'skill' && + (typeof v.system.skillName === 'undefined' || v.system.skillName === '') + ) { + if (typeof updateData['system.items'] === 'undefined') { + updateData['system.items'] = item.system.items + } + updateData['system.items'][k].name = v.name + if (updateData['system.items'][k].name === 'Uniki') { + updateData['system.items'][k].name = 'Unik' + } + const parts = CoC7Item.getNamePartsSpec( + updateData['system.items'][k].name, + typeof v.system.specialization?.group === 'string' + ? v.system.specialization.group + : v.system.specialization + ) + updateData['system.items'][k].name = parts.name + updateData['system.items'][k].system.skillName = parts.skillName + updateData['system.items'][k].system.specialization = parts.specialization } - const parts = CoC7Item.getNamePartsSpec( - updateData['system.items'][k].name, - typeof v.system.specialization?.group === 'string' - ? v.system.specialization.group - : v.system.specialization - ) - updateData['system.items'][k].name = parts.name - updateData['system.items'][k].system.skillName = parts.skillName - updateData['system.items'][k].system.specialization = parts.specialization } } } else if (item.type === 'occupation') { for (const [k, v] of Object.entries(item.system.skills)) { - if ( - v.type === 'skill' && - (typeof v.system.skillName === 'undefined' || v.system.skillName === '') - ) { - if (typeof updateData['system.skills'] === 'undefined') { - updateData['system.skills'] = item.system.skills - } - updateData['system.skills'][k].name = v.name - if (updateData['system.skills'][k].name === 'Uniki') { - updateData['system.skills'][k].name = 'Unik' - } - const parts = CoC7Item.getNamePartsSpec( - updateData['system.skills'][k].name, - typeof v.system.specialization?.group === 'string' - ? v.system.specialization.group - : v.system.specialization - ) - updateData['system.skills'][k].name = parts.name - updateData['system.skills'][k].system.skillName = parts.skillName - updateData['system.skills'][k].system.specialization = - parts.specialization - } - } - for (const [o, g] of Object.entries(item.system.groups)) { - for (const [k, v] of Object.entries(g.skills)) { + if (typeof v !== 'string') { if ( v.type === 'skill' && (typeof v.system.skillName === 'undefined' || v.system.skillName === '') ) { - if (typeof updateData['system.groups'] === 'undefined') { - updateData['system.groups'] = item.system.groups + if (typeof updateData['system.skills'] === 'undefined') { + updateData['system.skills'] = item.system.skills } - updateData['system.groups'][o].skills[k].name = v.name - if (updateData['system.groups'][o].skills[k].name === 'Uniki') { - updateData['system.groups'][o].skills[k].name = 'Unik' + updateData['system.skills'][k].name = v.name + if (updateData['system.skills'][k].name === 'Uniki') { + updateData['system.skills'][k].name = 'Unik' } const parts = CoC7Item.getNamePartsSpec( - updateData['system.groups'][o].skills[k].name, + updateData['system.skills'][k].name, typeof v.system.specialization?.group === 'string' ? v.system.specialization.group : v.system.specialization ) - updateData['system.groups'][o].skills[k].name = parts.name - updateData['system.groups'][o].skills[k].system.skillName = - parts.skillName - updateData['system.groups'][o].skills[k].system.specialization = + updateData['system.skills'][k].name = parts.name + updateData['system.skills'][k].system.skillName = parts.skillName + updateData['system.skills'][k].system.specialization = parts.specialization } } } + for (const [o, g] of Object.entries(item.system.groups)) { + for (const [k, v] of Object.entries(g.skills)) { + if (typeof v !== 'string') { + if ( + v.type === 'skill' && + (typeof v.system.skillName === 'undefined' || v.system.skillName === '') + ) { + if (typeof updateData['system.groups'] === 'undefined') { + updateData['system.groups'] = item.system.groups + } + updateData['system.groups'][o].skills[k].name = v.name + if (updateData['system.groups'][o].skills[k].name === 'Uniki') { + updateData['system.groups'][o].skills[k].name = 'Unik' + } + const parts = CoC7Item.getNamePartsSpec( + updateData['system.groups'][o].skills[k].name, + typeof v.system.specialization?.group === 'string' + ? v.system.specialization.group + : v.system.specialization + ) + updateData['system.groups'][o].skills[k].name = parts.name + updateData['system.groups'][o].skills[k].system.skillName = + parts.skillName + updateData['system.groups'][o].skills[k].system.specialization = + parts.specialization + } + } + } + } } else if (item.type === 'archetype') { for (const [k, v] of Object.entries(item.system.skills)) { - if ( - v.type === 'skill' && - (typeof v.system.skillName === 'undefined' || v.system.skillName === '') - ) { - if (typeof updateData['system.skills'] === 'undefined') { - updateData['system.skills'] = item.system.skills - } - updateData['system.skills'][k].name = v.name - if (updateData['system.skills'][k].name === 'Uniki') { - updateData['system.skills'][k].name = 'Unik' + if (typeof v !== 'string') { + if ( + v.type === 'skill' && + (typeof v.system.skillName === 'undefined' || v.system.skillName === '') + ) { + if (typeof updateData['system.skills'] === 'undefined') { + updateData['system.skills'] = item.system.skills + } + updateData['system.skills'][k].name = v.name + if (updateData['system.skills'][k].name === 'Uniki') { + updateData['system.skills'][k].name = 'Unik' + } + const parts = CoC7Item.getNamePartsSpec( + updateData['system.skills'][k].name, + typeof v.system.specialization?.group === 'string' + ? v.system.specialization.group + : v.system.specialization + ) + updateData['system.skills'][k].name = parts.name + updateData['system.skills'][k].system.skillName = parts.skillName + updateData['system.skills'][k].system.specialization = + parts.specialization } - const parts = CoC7Item.getNamePartsSpec( - updateData['system.skills'][k].name, - typeof v.system.specialization?.group === 'string' - ? v.system.specialization.group - : v.system.specialization - ) - updateData['system.skills'][k].name = parts.name - updateData['system.skills'][k].system.skillName = parts.skillName - updateData['system.skills'][k].system.specialization = - parts.specialization } } } } - static _migrateItemSetupEras (item, updateData) { - if (item.type === 'setup') { + static _migrateItemEras (item, updateData) { + if (typeof item.system.eras !== 'undefined') { + // 1920 => standard + // mdrn => modern / modernPulp + // pulp => pulp + // ddts => downDarkerTrails / downDarkerTrailsPulp + // drka => darkAges / darkAgesPulp + // glit => gasLight + // nvct => invictus + let eras = {} for (const [key, value] of Object.entries(item.system.eras)) { - if (typeof value.selected !== 'undefined') { - updateData['system.eras.' + key] = value.selected + if (value === true || (typeof value !== 'string' && typeof value.selected !== 'undefined')) { + switch (key) { + case '1920': + eras.standard = true + break + case 'mdrn': + eras.modern = true + eras.modernPulp = true + break + case 'pulp': + eras.pulp = true + break + case 'ddts': + eras.downDarkerTrails = true + eras.downDarkerTrailsPulp = true + break + case 'drka': + eras.darkAges = true + eras.darkAgesPulp = true + break + case 'glit': + eras.gasLight = true + break + case 'nvct': + eras.invictus = true + break + } } } + if (item.type === 'setup') { + // If more than one era take the first one only + const key = Object.keys(eras)[0] + if (key) { + eras = { [key]: true } + } else { + // If no eras default to standard + eras = { standard: true } + } + } + const CoC7 = { + cocidFlag: { + id: '', + lang: game.i18n.lang, + priority: 0, + eras + } + } + if (typeof item.flags?.CoC7 === 'undefined') { + item.flags.CoC7 = CoC7 + updateData['flags.CoC7'] = CoC7 + } else if (typeof item.flags?.CoC7?.cocidFlag === 'undefined') { + item.flags.CoC7.cocidFlag = CoC7.cocidFlag + updateData['flags.CoC7.cocidFlag'] = CoC7.cocidFlag + } else { + item.flags.CoC7.cocidFlag.eras = CoC7.cocidFlag.eras + updateData['flags.CoC7.cocidFlag.eras'] = CoC7.cocidFlag.eras + } + updateData['system.-=eras'] = null } } diff --git a/module/utilities.js b/module/utilities.js index 0e2442b61..aef569e1b 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -912,6 +912,19 @@ export class CoC7Utilities { } } + static toKebabCase (s) { + if (!s) { + return '' + } + const match = s.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) + + if (!match) { + return '' + } + + return match.join('-').toLowerCase() + } + static sortByNameKey (a, b) { return a.name .normalize('NFD') diff --git a/packs/examples.db b/packs/examples.db index a97ba9959..01ae2d830 100644 --- a/packs/examples.db +++ b/packs/examples.db @@ -1,5 +1,5 @@ -{"_id":"4kSvDc4n13oFx8RG","name":"Villain example","type":"npc","img":"icons/svg/mystery-man.svg","system":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":10,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":10,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":0,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":0,"value":0,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Be a villain","age":"Very old","sex":""},"flags":{"locked":true,"displayFormula":false},"attacksPerRound":1},"token":{"name":"Villain example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"JKPFlce4fXskHrco","name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.MpvookJWHQs0NX6M"}}},{"_id":"Uyw5Vo86WmxaCbLt","name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.H7yLjkXpmrlhPFRt"}}},{"_id":"75xFKGouCIhczLRe","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"mjNPsr30tOVP1OUa"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"mjNPsr30tOVP1OUa","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"Wc35ZVZlbGvnt4Dk","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.m2pYjKk4Gk3FcEBL"}}},{"_id":"GEX2If3omq2h3kf0","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"CpenApM1POTvS9uc","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"Own","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"7VR4auTMAPfaEqyA","name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"},"alternativ":{"name":"Rifle/Shotgun","id":"Wc35ZVZlbGvnt4Dk"}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"auto":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$5","mdrn":"$6"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.ar306rfjUIZFenWF"}}},{"_id":"gCpN0Jqn85LVYRcD","name":"Torment the PC","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Torment the PC","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.l4vz66H4IkqiXKzB"}}},{"_id":"0AHo1cSc7ueMEg1C","name":"Takeover the world","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Takeover the world","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DuQXiLwoHb7JnNGv"}}},{"_id":"gtLHe6r4xczLReMd","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"0","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}},{"_id":"tzxgO3tPQTvSHXKv","name":"Bark orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Bark orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.M4Q1ps8ecPWKfnI0"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.KIFjLTP875sS5weT"}}} -{"_id":"JuI2aWDSEuQNKeUI","name": "1920 Character","type": "character","img": "icons/svg/mystery-man.svg","system": {"characteristics": {"str": {"value": 50,"tempValue": null,"short": "CHARAC.STR","label": "CHARAC.Strength","formula": "(3D6)*5"},"con": {"value": 50,"tempValue": null,"short": "CHARAC.CON","label": "CHARAC.Constitution","formula": "(3D6)*5"},"siz": {"value": 50,"tempValue": null,"short": "CHARAC.SIZ","label": "CHARAC.Size","formula": "(2D6+6)*5"},"dex": {"value": 50,"tempValue": null,"short": "CHARAC.DEX","label": "CHARAC.Dexterity","formula": "(3D6)*5"},"app": {"value": 50,"tempValue": null,"short": "CHARAC.APP","label": "CHARAC.Appearance","formula": "(3D6)*5"},"int": {"value": 50,"tempValue": null,"short": "CHARAC.INT","label": "CHARAC.Intelligence","formula": "(2D6+6)*5"},"pow": {"value": 50,"tempValue": null,"short": "CHARAC.POW","label": "CHARAC.Power","formula": "(3D6)*5"},"edu": {"value": 50,"tempValue": null,"short": "CHARAC.EDU","label": "CHARAC.Education","formula": "(2D6+6)*5"}},"attribs": {"hp": {"value": 10,"max": 10,"short": "HP","label": "Hit points","auto": true},"mp": {"value": 10,"max": 10,"short": "HP","label": "Magic points","auto": true},"lck": {"value": 50,"short": "LCK","label": "Luck","max": 99},"san": {"value": 50,"max": 99,"short": "SAN","label": "Sanity","auto": true,"dailyLoss": 0,"oneFifthSanity": " / 0","dailyLimit": 10},"mov": {"value": null,"max": null,"short": "MOV","label": "Movement rate","auto": true},"db": {"value": null,"short": "DB","label": "Damage bonus","auto": true},"build": {"current": null,"value": null,"short": "BLD","label": "Build","auto": true},"armor": {"value": "","localized": false,"locations": [],"auto": false}},"conditions": {"criticalWounds": {"value": false},"unconscious": {"value": false},"dying": {"value": false},"dead": {"value": false},"prone": {"value": false},"tempoInsane": {"value": false},"indefInsane": {"value": false}},"infos": {"occupation": "","age": "26","sex": "","residence": "","birthplace": "","archetype": "","organization": "","playername": ""},"flags": {"locked": true,"manualCredit": false},"credit": {"monetarySymbol": "","multiplier": null,"spent": "","assetsDetails": ""},"development": {"personal": null,"occupation": null,"archetype": null},"biography": [{"title": "Personal Description","value": null},{"title": "Ideology/Beliefs","value": null},{"title": "Significant People","value": null},{"title": "Meaningful Locations","value": null},{"title": "Treasured Possessions","value": null},{"title": "Traits","value": null}],"sanityLossEvents": [],"backstory": "","indefiniteInsanityLevel": {"value": 0,"max": 0},"description": {"keeper": ""},"notes": ""},"token": {"vision": true,"dimSight": 30,"brightSight": 0,"actorLink": true,"disposition": 1,"name": "1920 Character","displayName": 0,"width": 1,"height": 1,"scale": 1,"mirrorX": false,"mirrorY": false,"lockRotation": false,"rotation": 0,"alpha": 1,"sightAngle": 0,"light": {"alpha": 0.5,"angle": 0,"bright": 0,"coloration": 1,"dim": 0,"gradual": true,"luminosity": 0.5,"saturation": 0,"contrast": 0,"shadows": 0,"animation": {"speed": 5,"intensity": 5,"reverse": false},"darkness": {"min": 0,"max": 1}},"displayBars": 0,"bar1": {"attribute": "attribs.hp"},"bar2": {"attribute": "attribs.san"},"flags": {},"randomImg": false,"img": "icons/svg/mystery-man.svg"},"items": [{"_id": "O1NxgQyl1TVEcFpv","name": "Accounting","type": "skill","img": "systems/CoC7/assets/icons/skills/accounting.svg","system": {"skillName": "Accounting","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.UOuN0gESXPp2HXwH"}}},{"_id": "6ahs1BVypf0LG2ui","name": "Anthropology","type": "skill","img": "systems/CoC7/assets/icons/skills/anthropology.svg","system": {"skillName": "Anthropology","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.ovIp66Luwfwbq28F"}}},{"_id": "nZp5VsP8lJjxK53F","name": "Appraise","type": "skill","img": "systems/CoC7/assets/icons/skills/appraise.svg","system": {"skillName": "Appraise","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.wOs3gryeGRPkGoWD"}}},{"_id": "2qbA452TZDxEvBgo","name": "Archaeology","type": "skill","img": "systems/CoC7/assets/icons/skills/archaeology.svg","system": {"skillName": "Archaeology","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.GHhkcJUqjcP4lToY"}}},{"_id": "HUSs3Z1WMKy2WU8Q","name": "Art/Craft (Acting)","type": "skill","img": "systems/CoC7/assets/icons/skills/art_craft_acting.svg","system": {"skillName": "Acting","specialization": "Art/Craft","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"special": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.m6V53lyfz7zh95FE"}}},{"_id": "2M1xXSNW68KZuhTR","name": "Charm","type": "skill","img": "systems/CoC7/assets/icons/skills/charm.svg","system": {"skillName": "Charm","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "15","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.JgtxiN3KzooOWIQV"}}},{"_id": "M33sgqZolcplbGET","name": "Climb","type": "skill","img": "systems/CoC7/assets/icons/skills/climb.svg","system": {"skillName": "Climb","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.oh5eFj00Wohnx1My"}}},{"_id": "wtw9jEO0gGzoQa0Q","name": "Credit Rating","type": "skill","img": "systems/CoC7/assets/icons/skills/credit_rating.svg","system": {"skillName": "Credit Rating","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "0","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"noxpgain": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.vYrJ5h9cIQBzvw8E"}}},{"_id": "HyZbjOCgYlryFfID","name": "Cthulhu Mythos","type": "skill","img": "systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","system": {"skillName": "Cthulhu Mythos","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "0","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"noadjustments": true,"noxpgain": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.WJky66ezt2ef5ksH"}}},{"_id": "7zb3datkgo38MgkY","name": "Disguise","type": "skill","img": "systems/CoC7/assets/icons/skills/disguise.svg","system": {"skillName": "Disguise","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.gzNPM9gbx0EZffBV"}}},{"_id": "5phV0BmF8L9zc76p","name": "Dodge","type": "skill","img": "systems/CoC7/assets/icons/skills/dodge.svg","system": {"skillName": "Dodge","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": 25,"adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.wK8XxNj9QwXlGFEb"}}},{"_id": "aV1HPa6T0ao5KxIC","name": "Drive Auto","type": "skill","img": "systems/CoC7/assets/icons/skills/drive_auto.svg","system": {"skillName": "Drive Auto","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.Og2OWQH93aSDWAMZ"}}},{"_id": "e9TkwUb9I707qhri","name": "Electrical Repair","type": "skill","img": "systems/CoC7/assets/icons/skills/electrical_repair.svg","system": {"skillName": "Electrical Repair","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.NBkq8oCGM1FjmsyF"}}},{"_id": "eFKUznsTG8LAMni9","name": "Fast Talk","type": "skill","img": "systems/CoC7/assets/icons/skills/fast_talk.svg","system": {"skillName": "Fast Talk","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.ld78TITwKNFPpanQ"}}},{"_id": "28W5Wr09jltOPNY0","name": "Fighting (Brawl)","type": "skill","img": "systems/CoC7/assets/icons/skills/fighting_brawl.svg","system": {"skillName": "Brawl","specialization": "Fighting","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": true,"firearm": false,"combat": true,"special": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}}},{"_id": "s25rvwAwBR4fOsWr","name": "Fighting (Throw)","type": "skill","img": "systems/CoC7/assets/icons/skills/fighting_throw.svg","system": {"skillName": "Throw","specialization": "Fighting","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": true,"firearm": false,"combat": true,"special": true,"push": false},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.sWt5Q3ZXd6NlwhXU"}}},{"_id": "BSyRMN21TZXSXs1D","name": "Firearms (Handgun)","type": "skill","img": "systems/CoC7/assets/icons/skills/firearms_handgun.svg","system": {"skillName": "Handgun","specialization": "Firearms","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": false,"firearm": true,"combat": true,"special": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.KmDGtn7ukUFVb265"}}},{"_id": "DVWmLyQsxED935JM","name": "Firearms (Rifle/Shotgun)","type": "skill","img": "systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system": {"skillName": "Rifle/Shotgun","specialization": "Firearms","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"fighting": false,"firearm": true,"combat": true,"special": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.m2pYjKk4Gk3FcEBL"}}},{"_id": "iTHGs2zn58m6d0uu","name": "First Aid","type": "skill","img": "systems/CoC7/assets/icons/skills/first_aid.svg","system": {"skillName": "First Aid","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "30","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.nZ8rdL4PLb7A7f5B"}}},{"_id": "ACERhi4RMPrdugNC","name": "History","type": "skill","img": "systems/CoC7/assets/icons/skills/history.svg","system": {"skillName": "History","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.URo2NSSJSNdvOqXU"}}},{"_id": "C8893ykdL7FyvzEI","name": "Intimidate","type": "skill","img": "systems/CoC7/assets/icons/skills/intimidate.svg","system": {"skillName": "Intimidate","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "15","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.hDr4eUbS398oniTa"}}},{"_id": "4DJfICiq17xUj7mL","name": "Jump","type": "skill","img": "systems/CoC7/assets/icons/skills/jump.svg","system": {"skillName": "Jump","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.c5utlFbDM7J8TA8b"}}},{"_id": "zwh2alzxQ4nDML3E","name": "Language (Own)","type": "skill","img": "systems/CoC7/assets/icons/skills/language.svg","system": {"skillName": "Own","specialization": "Language","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": 50,"adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true,"special": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id": "HRl7kuG4fRwn7FvH","name": "Law","type": "skill","img": "systems/CoC7/assets/icons/skills/law.svg","system": {"skillName": "Law","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.64hnBZNC8FM7oTkg"}}},{"_id": "rYpQ2fCwgMRluTXM","name": "Library Use","type": "skill","img": "systems/CoC7/assets/icons/skills/library_use.svg","system": {"skillName": "Library Use","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.BcWHh8EhmyKj7bNk"}}},{"_id": "itXQ18v2e9EkTIbZ","name": "Listen","type": "skill","img": "systems/CoC7/assets/icons/skills/listen.svg","system": {"skillName": "Listen","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MoAB0NRNlpEc2qWr"}}},{"_id": "GusblC5ZOVXJEpcz","name": "Locksmith","type": "skill","img": "systems/CoC7/assets/icons/skills/locksmith.svg","system": {"skillName": "Locksmith","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MRbFH52Zh9TzhLBh"}}},{"_id": "osBrI5BZsEZn1r2S","name": "Mechanical Repair","type": "skill","img": "systems/CoC7/assets/icons/skills/mechanical_repair.svg","system": {"skillName": "Mechanical Repair","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.0qCTuRFUCACSEsWj"}}},{"_id": "6nJe6CryCPhGEGU2","name": "Medicine","type": "skill","img": "systems/CoC7/assets/icons/skills/medicine.svg","system": {"skillName": "Medicine","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.Xmg7oAy70DKpv4kq"}}},{"_id": "qPXnOlg3n92R7O85","name": "Natural World","type": "skill","img": "systems/CoC7/assets/icons/skills/natural_world.svg","system": {"skillName": "Natural World","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.jTcu6Ni2ek7Yz5q3"}}},{"_id": "GtVW9kz8j6mD8m58","name": "Navigate","type": "skill","img": "systems/CoC7/assets/icons/skills/navigate.svg","system": {"skillName": "Navigate","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.1c3fdvpQtvZf5YXK"}}},{"_id": "MeSZfeUgsHUE9F9m","name": "Occult","type": "skill","img": "systems/CoC7/assets/icons/skills/occult.svg","system": {"skillName": "Occult","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.6pSfZVS68jSHxa5T"}}},{"_id": "01wRdHg6uK4TQD1m","name": "Operate Heavy Machinery","type": "skill","img": "systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","system": {"skillName": "Operate Heavy Machinery","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.cuExWy1130KUwuWz"}}},{"_id": "RcLYCAd4zn4ucfrt","name": "Persuade","type": "skill","img": "systems/CoC7/assets/icons/skills/persuade.svg","system": {"skillName": "Persuade","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.uMzSNURmZqjxr7mU"}}},{"_id": "VpsprviqIXRc3EAF","name": "Psychoanalysis","type": "skill","img": "systems/CoC7/assets/icons/skills/psychoanalysis.svg","system": {"skillName": "Psychoanalysis","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.rXBU2GofiO2qOsGv"}}},{"_id": "JOw0IOr7IOwzKyJ5","name": "Psychology","type": "skill","img": "systems/CoC7/assets/icons/skills/psychology.svg","system": {"skillName": "Psychology","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.MFR4eR79niGaLfph"}}},{"_id": "1diyhnSEoVUP7cUX","name": "Ride","type": "skill","img": "systems/CoC7/assets/icons/skills/ride.svg","system": {"skillName": "Ride","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "5","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.o7TdzbuSP7ticONf"}}},{"_id": "jnwwvXj9PfpMeyfa","name": "Science (Chemistry)","type": "skill","img": "systems/CoC7/assets/icons/skills/science_chemistry.svg","system": {"skillName": "Chemistry","specialization": "Science","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "1","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"special": true,"push": true},"eras": {"1920": true,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.8twBT7nbyh5dEp3J"}}},{"_id": "MsuFtn5Mlzr9ZmH5","name": "Sleight of Hand","type": "skill","img": "systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system": {"skillName": "Sleight of Hand","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "10","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.KKFNX5M4LtEtiuxs"}}},{"_id": "Ma2wIagNCMHCZPtc","name": "Spot Hidden","type": "skill","img": "systems/CoC7/assets/icons/skills/spot_hidden.svg","system": {"skillName": "Spot Hidden","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "25","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.nHaWNwtW3Lg0sqYJ"}}},{"_id": "6OiGCnzzSfZn4n73","name": "Stealth","type": "skill","img": "systems/CoC7/assets/icons/skills/stealth.svg","system": {"skillName": "Stealth","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.DcV524K0jNfjDEZC"}}},{"_id": "0oGWHuK8BnQ5B6ho","name": "Swim","type": "skill","img": "systems/CoC7/assets/icons/skills/swim.svg","system": {"skillName": "Swim","specialization": "","description": {"value": "

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty": "","pushedFaillureConsequences": "","chat": "","keeper": ""},"base": "20","adjustments": {"personal": null,"occupation": null,"archetype": null,"experience": null},"value": null,"attributes": {},"properties": {"push": true},"eras": {"1920": true,"nvct": true,"drka": true,"ddts": true,"glit": true,"pulp": true,"mdrn": true},"flags": {}},"effects": [],"folder": null,"sort": 0,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Compendium.CoC7.skills.1zSIeY0eat2AxQok"}}},{"_id": "4uoHnRl7akCDPogc","name": "Fists","type": "weapon","img": "systems/CoC7/assets/icons/skills/fighting_brawl.svg","system": {"description": {"value": "","chat": "","special": "","keeper": ""},"wpnType": "","skill": {"main": {"name": "Brawl","id": "28W5Wr09jltOPNY0"},"alternativ": {"name": "","id": ""}},"range": {"normal": {"value": 0,"units": "","damage": "1D3"},"long": {"value": 0,"units": "","damage": ""},"extreme": {"value": 0,"units": "","damage": ""}},"usesPerRound": {"normal": "1","max": "","burst": null},"bullets": "","ammo": 0,"malfunction": "","blastRadius": null,"properties": {"addb": true,"ahdb": false,"melee": true,"rngd": false,"shotgun": false,"brst": false,"auto": false,"dbrl": false},"eras": {"1920": false,"nvct": false,"drka": false,"ddts": false,"glit": false,"pulp": false,"mdrn": false},"price": {}},"effects": [],"folder": null,"sort": 100000,"permission": {"default": 0,"f2tegjkWyWhBBgnj": 3},"flags": {"core": {"sourceId": "Item.Uldjvs5fvCMri6RN"}}}],"effects": [],"flags": {"CoC7": {"skillListMode": false,"skillShowUncommon": true},"exportSource": {"world": "dholes","system": "CoC7","coreVersion": "9.269","systemVersion": "0.7.11"}}} -{"_id":"KgyqcEJZZztYfpEr","name":"Goon","type":"npc","img":"icons/svg/mystery-man.svg","system":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":null,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":null,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":8,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"occupation":"Obey to the villain","age":"Average","sex":""},"flags":{"locked":true,"displayFormula":false},"attacksPerRound":1},"token":{"name":"Goon","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"nhNyqjmMf2xgLEAh","name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.5lfgKDdff95ONHW5"}}},{"_id":"pjiFo3geRss79cUu","name":"Orders","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.PFxgMt9PmW9JcrS6"}}},{"_id":"dRfkuKnn9Vl7BAnR","name":"Firearms (Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Shotgun","specialization":"Firearms","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"special":true,"fighting":false,"firearm":true,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"x3n4xMyqXSGATZ9L","name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Shotgun","id":"dRfkuKnn9Vl7BAnR"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fnyCgkQluYSM4yTl"}}},{"_id":"bn7QZKctB109130p","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"slnt":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}},{"_id":"coPK7CiB6zbpnofh","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"25","attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.vS8bsPWFlwgOecoB"}}},{"_id":"cYRUJwddg0yvccHL","name":"Club","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"coPK7CiB6zbpnofh"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"ahdb":true,"addb":false,"slnt":true,"stun":true,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":300000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.BZRfjXQ4V43t4fNw"}}},{"_id":"Cy8zEO2hzmxHYe1g","name":"Receive orders","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Receive orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.cOzs5LkYR1icbzo9"}}},{"_id":"bQq5zs3LeTyZ8O57","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"Own","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"@EDU","attributes":{},"properties":{"push":true,"special":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.rhJ1Q9OB3uTUZmjD"}}},{"_id":"AWcXwvVJG779q7fH","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"1/2*@DEX","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Compendium.world.skills.wK8XxNj9QwXlGFEb"}}},{"_id":"U7Nsi0qkuJjemOaf","name":"Try hard","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Try hard","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.aEK9aFa8uoMJLiSg"}}},{"_id":"lm867qysqMBwLEK9","name":"Be a pain","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"eras":{},"flags":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.DGD3CQQWsYIqhLWL"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.0skVq6Pae0GlrSMU"}}} -{"_id":"XE2vjLG03wGfnYLw","name":"Creature example","type":"creature","img":"icons/svg/mystery-man.svg","system":{"characteristics":{"str":{"value":0,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"1d6"},"con":{"value":10,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":10,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":20,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":20,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":0,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":""},"edu":{"value":0,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":6,"max":6,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":0,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":7,"max":7,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":-2,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":-2,"value":-2,"short":"BLD","label":"Build","auto":true},"armor":{"value":null,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":1},"infos":{"type":""},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

Clicking the lock will allow modification of the sheet.

\n

When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

\n

In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

\n

You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

"}}},"token":{"name":"Creature example","displayName":0,"actorLink":false,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/mystery-man.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"uThvps46yrs3LyNw","name":"Pile of junk","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.r8S7V9kUWpjtMxaX"}}},{"_id":"jc6aXhzjXLKREJIy","name":"Fighting (Fighting)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Fighting","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"50","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ddI3EOxhNRDrbiWW","name":"Innate attack","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Creature's natural attack

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1d3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.i9tOh6fwndVIGwHR"}}},{"_id":"qMUYPKo3mj4zOPjA","name":"Fighting (Slice PCs in small cubes)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Slice PCs in small cubes","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"75","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":75,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wxRnkgFqjB1A0dOY","name":"Deadly claws","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

","keeper":""},"wpnType":"","skill":{"main":{"name":"Slice PCs in small cubes","id":"qMUYPKo3mj4zOPjA"},"alternativ":{"name":"Fighting","id":"jc6aXhzjXLKREJIy"}},"range":{"normal":{"value":0,"units":"","damage":"10d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"brst":true,"spcl":true,"melee":true,"rngd":false,"shotgun":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NWkpD68urH6gwHkU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.ExVcSKXT23bi0A4u"}}} -{"_id":"r7bDSY4OYKxQYEas","name":"Cupboard","type":"container","img":"icons/svg/chest.svg","system":{"description":{"value":"

The lock on the door was removed years ago leaving a hole. You have to poke something in the hole to pull the door open.

","keeper":""},"flags":{"locked":false}},"token":{"actorLink":true,"name":"Floor safe","displayName":0,"width":1,"height":1,"scale":1,"mirrorX":false,"mirrorY":false,"lockRotation":false,"rotation":0,"alpha":1,"vision":false,"dimSight":0,"brightSight":0,"dimLight":0,"brightLight":0,"sightAngle":0,"lightAngle":0,"lightAlpha":0.25,"lightAnimation":{"speed":5,"intensity":5},"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"flags":{},"randomImg":false,"img":"icons/svg/chest.svg","light":{"alpha":0.5,"angle":0,"bright":0,"coloration":1,"dim":0,"gradual":true,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}}},"items":[{"_id":"L7F6PDH2dK7ZNYxZ","name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills.svg","system":{"skillName":"Sword","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":20,"attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ZtIdjmVil351PsA2","name":"Rapier","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Sword","id":"L7F6PDH2dK7ZNYxZ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6+1"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"$15","mdrn":"$100"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.h57LwHlUKVT0oQvU"}}}],"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Actor.M8hvUblNcgImyozT"}}} +{"name":"Goon","type":"npc","img":"systems/CoC7/assets/icons/cultist.svg","system":{"characteristics":{"str":{"value":null,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"5*2d6+6"},"con":{"value":null,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"5*3d6"},"siz":{"value":null,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":null,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"5*3d6"},"app":{"value":null,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5*1d6"},"int":{"value":null,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"5*1d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":null,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":null,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":null,"max":null,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":null,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":null,"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":0,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":null},"infos":{"occupation":"Obey to the villain","age":"30","sex":""},"flags":{"locked":true,"displayFormula":false}},"prototypeToken":{"name":"Goon","displayName":0,"actorLink":false,"texture":{"src":"systems/CoC7/assets/icons/cultist.svg","scaleX":1,"scaleY":1,"offsetX":0,"offsetY":0,"rotation":0,"tint":null},"width":1,"height":1,"lockRotation":false,"rotation":0,"alpha":1,"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"light":{"alpha":0.5,"angle":360,"bright":0,"color":null,"coloration":1,"dim":0,"attenuation":0.5,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"type":null,"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}},"sight":{"enabled":false,"range":null,"angle":360,"visionMode":"basic","color":null,"attenuation":0.1,"brightness":0,"saturation":0,"contrast":0},"detectionModes":[],"flags":{},"randomImg":false},"items":[{"name":"Orders","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.WVlaVdqBfy61m5Rz"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826067740,"modifiedTime":1673826070154,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"QXaAdZrzIlpR65b4"},{"name":"Secret documents","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.eBSUG76BJNCyafIH"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826080755,"modifiedTime":1673826084510,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"3GYcAo139cyCy9fA"},{"name":"Be a pain","type":"skill","system":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.1omGoNxwmDVKSY4x"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826108764,"modifiedTime":1673826117281,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"PSkJAIU89V7wn2Bb"},{"_id":"AvGHgRlHt0R3Ed4S","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":32,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":32,"attributes":{},"properties":{},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.dodge","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.wK8XxNj9QwXlGFEb"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826149345,"modifiedTime":1673826149345,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"PR4ptRvBvRso7GLJ","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"fighting":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826154980,"modifiedTime":1673826154980,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"3fVH7wgc0f7cYPS6","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"firearm":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-rifle-shotgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.m2pYjKk4Gk3FcEBL"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826161027,"modifiedTime":1673826161027,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"aHoy9l8GnDaUZOYW","name":"Language (English)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"English","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":0,"attributes":{},"properties":{"push":true,"special":true,"requiresname":true,"keepbasevalue":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.language-own","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.rhJ1Q9OB3uTUZmjD"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826170394,"modifiedTime":1673826170394,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"name":"Receive orders","type":"skill","system":{"skillName":"Receive orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"95","attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.J6OA3KltHJocsLwR"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826179387,"modifiedTime":1673826198752,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"uPgX46VUlJXStTpn"},{"name":"Try hard","type":"skill","system":{"skillName":"Try hard","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"10","attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.jGnS0MP0CHVrnxXl"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826209565,"modifiedTime":1673826217311,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"UoYy6krp3cyOCqSk"},{"name":"Club","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"PR4ptRvBvRso7GLJ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D4"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"ahdb":true,"addb":false,"slnt":true,"stun":true},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.kPwAwXYUPNvHoPje"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826261603,"modifiedTime":1673826285245,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"Jlewd3ifpDQ8VBuI"},{"_id":"kbiJM1yWKYP1tVdK","name":"Punch","type":"weapon","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"PR4ptRvBvRso7GLJ"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":1,"max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"addb":true},"price":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.weapon.brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.items.3elxAwnv7WCUNwng"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826293939,"modifiedTime":1673826293939,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"name":"Shotgun","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

selecting 'Area of effect' will enable 3 different damage and range

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

selecting 'Special' will activate the special input field

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"3fVH7wgc0f7cYPS6"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.DlN5IzHhoE0K97G3"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826314139,"modifiedTime":1673826358332,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"Hhs2rs3HsTO3opFQ"}],"effects":[],"flags":{"core":{"sourceId":"Actor.TE1Ef6LWAuahPXaB"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825973729,"modifiedTime":1673827493268,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"folder":null,"sort":0,"ownership":{"default":0},"_id":"KgyqcEJZZztYfpEr"} +{"name":"Villain example","type":"npc","img":"systems/CoC7/assets/icons/cultist.svg","system":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":50,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":50,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":10,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":99,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":8,"max":null,"short":"MOV","label":"Movement rate","auto":false},"db":{"value":null,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":null,"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":0,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"sanLoss":{"checkPassed":"","checkFailled":""},"attacksPerRound":null},"infos":{"occupation":"Be a villain","age":"100","sex":""},"flags":{"locked":true,"displayFormula":false}},"prototypeToken":{"name":"Villain example","displayName":0,"actorLink":false,"texture":{"src":"systems/CoC7/assets/icons/cultist.svg","scaleX":1,"scaleY":1,"offsetX":0,"offsetY":0,"rotation":0,"tint":null},"width":1,"height":1,"lockRotation":false,"rotation":0,"alpha":1,"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"light":{"alpha":0.5,"angle":360,"bright":0,"color":null,"coloration":1,"dim":0,"attenuation":0.5,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"type":null,"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}},"sight":{"enabled":false,"range":null,"angle":360,"visionMode":"basic","color":null,"attenuation":0.1,"brightness":0,"saturation":0,"contrast":0},"detectionModes":[],"flags":{},"randomImg":false},"items":[{"name":"Very mean sidekick","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.JjtKdZXH587B3X2I"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826479459,"modifiedTime":1673826482347,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"L8smYdMt8ikmRHx6"},{"name":"Plan to enslave humanity","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.urxjEnSA6PydzCIO"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826489016,"modifiedTime":1673826491624,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"8g01NwyUAwvTHb3E"},{"name":"Bark orders","type":"skill","system":{"skillName":"Bark orders","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"45","attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.jbgEwBWSE4Toj9X9"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826596873,"modifiedTime":1673826605906,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"QGfaG02IPLjpBpJL"},{"name":"Be a pain","type":"skill","system":{"skillName":"Be a pain","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":0,"attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.OmsWMP3erS5OAS5s"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826615437,"modifiedTime":1673826620356,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"KyVm9jlTiIu9vNVv"},{"_id":"xxHO1lJYyljaLS0O","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.dodge","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.wK8XxNj9QwXlGFEb"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826628633,"modifiedTime":1673826628633,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"dWPhIcippT9C8LlO","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"fighting":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826632544,"modifiedTime":1673826632544,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"f9JPK6nDSjQXHfmQ","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":25,"attributes":{},"properties":{"firearm":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-rifle-shotgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.m2pYjKk4Gk3FcEBL"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826637710,"modifiedTime":1673826637710,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"qU4YmV9PIBsvBi2B","name":"Language (English)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"English","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":50,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":50,"attributes":{},"properties":{"push":true,"special":true,"requiresname":true,"keepbasevalue":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.language-own","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.rhJ1Q9OB3uTUZmjD"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826645704,"modifiedTime":1673826645704,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"name":"Takeover the world","type":"skill","system":{"skillName":"Takeover the world","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"80","attributes":{},"properties":{},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.dSRYNFc0OmWL2kjn"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826656879,"modifiedTime":1673826662706,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"qPH6Yf5B82vN4RHu"},{"name":"Torment the PC","type":"skill","system":{"skillName":"Torment the PC","specialization":"","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"push":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.a4lHurvtiDInw1o5"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826670358,"modifiedTime":1673826678301,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"CxqOOhOKLcEi2hRQ"},{"_id":"DP1t8zpvBW8OQB5Q","name":"Punch","type":"weapon","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"dWPhIcippT9C8LlO"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":1,"max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"addb":true},"price":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.weapon.brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.items.3elxAwnv7WCUNwng"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826689566,"modifiedTime":1673826689566,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"name":"My test weapon","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

selecting 'Area of effect' will enable 3 different damage and range

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

selecting 'Special' will activate the special input field

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

Edit the weapon and select the correct skill.

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Rifle/Shotgun","id":"f9JPK6nDSjQXHfmQ"},"alternativ":{"name":"Rifle/Shotgun","id":"f9JPK6nDSjQXHfmQ"}},"range":{"normal":{"value":"15ft","units":"","damage":"1D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":1,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true,"brst":true,"auto":true},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.Hze7eb3aLGlPbde6"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826704970,"modifiedTime":1673826755126,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"ZlhAHCkDQrp9cyxt"}],"effects":[],"flags":{"core":{"sourceId":"Actor.ZQnVwutLxIFHMLhg"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673826457315,"modifiedTime":1673827507990,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"folder":null,"sort":0,"ownership":{"default":0},"_id":"4kSvDc4n13oFx8RG"} +{"name":"1920 Character","type":"character","prototypeToken":{"actorLink":true,"disposition":1,"sight":{"enabled":true,"range":null,"angle":360,"visionMode":"basic","color":null,"attenuation":0.1,"brightness":0,"saturation":0,"contrast":0},"detectionModes":[{"id":"basicSight","range":30,"enabled":true}],"name":"1920 Character","displayName":0,"texture":{"src":"icons/svg/mystery-man.svg","scaleX":1,"scaleY":1,"offsetX":0,"offsetY":0,"rotation":0,"tint":null},"width":1,"height":1,"lockRotation":false,"rotation":0,"alpha":1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"light":{"alpha":0.5,"angle":360,"bright":0,"color":null,"coloration":1,"dim":0,"attenuation":0.5,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"type":null,"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}},"flags":{},"randomImg":false},"img":"icons/svg/mystery-man.svg","system":{"characteristics":{"str":{"value":50,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":null},"con":{"value":50,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":null},"siz":{"value":65,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":null},"dex":{"value":50,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":null},"app":{"value":50,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":null},"int":{"value":65,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":null},"pow":{"value":50,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":null},"edu":{"value":65,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":null}},"attribs":{"hp":{"value":11,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":10,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":50,"short":"LCK","label":"Luck","max":99},"san":{"value":50,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0","dailyLimit":10},"mov":{"value":null,"max":null,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":null,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":null,"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":"","localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"infos":{"occupation":"","age":"26","sex":"","residence":"","birthplace":"","archetype":"","organization":"","playername":""},"flags":{"locked":true,"manualCredit":false},"credit":{"monetarySymbol":"","multiplier":"","spent":"","assetsDetails":""},"development":{"personal":null,"occupation":null,"archetype":null},"biography":[{"title":"Personal Description","value":null},{"title":"Ideology/Beliefs","value":null},{"title":"Significant People","value":null},{"title":"Meaningful Locations","value":null},{"title":"Treasured Possessions","value":null},{"title":"Traits","value":null}],"sanityLossEvents":[],"backstory":"","indefiniteInsanityLevel":{"value":0,"max":0},"description":{"keeper":""},"notes":""},"items":[{"_id":"VGDa3cyX0pfNnFcp","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","system":{"skillName":"Accounting","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.accounting","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.UOuN0gESXPp2HXwH"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824672261,"modifiedTime":1673824672261,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"mkIOTh8lbYcZTrO0","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","system":{"skillName":"Anthropology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.anthropology","lang":"en","eras":{"standard":true,"modern":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.ovIp66Luwfwbq28F"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824679848,"modifiedTime":1673824679848,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"5wBgNhPotJY9VHn8","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","system":{"skillName":"Appraise","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.appraise","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.wOs3gryeGRPkGoWD"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824683281,"modifiedTime":1673824683281,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"M4IRqHantc5SGnnF","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","system":{"skillName":"Archaeology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.archaeology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.GHhkcJUqjcP4lToY"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824686170,"modifiedTime":1673824686170,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"Uwkwk01IKS0hZ7mG","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","system":{"skillName":"Acting","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-acting","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.m6V53lyfz7zh95FE"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824689057,"modifiedTime":1673824689057,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"iEXbSGeNxQghbf7u","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"skillName":"Charm","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":15,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.charm","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.JgtxiN3KzooOWIQV"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824691490,"modifiedTime":1673824691490,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"5fypo9n5rdFi9ctr","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","system":{"skillName":"Climb","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.climb","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.oh5eFj00Wohnx1My"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824695319,"modifiedTime":1673824695319,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"T05NZJPq8mv2HBwj","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","system":{"skillName":"Credit Rating","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noxpgain":true,"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.credit-rating","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.vYrJ5h9cIQBzvw8E"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824698880,"modifiedTime":1673824698880,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"KsDyalenyQxdzpJx","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","system":{"skillName":"Cthulhu Mythos","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":0,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.cthulhu-mythos","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.WJky66ezt2ef5ksH"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824702440,"modifiedTime":1673824702440,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"rjDIVVL0gQSAwauc","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","system":{"skillName":"Disguise","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.disguise","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"darkAges":true,"darkAgesPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.gzNPM9gbx0EZffBV"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824705003,"modifiedTime":1673824705003,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"sQlfn9WGQ2qKSwyx","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.dodge","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.wK8XxNj9QwXlGFEb"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824708689,"modifiedTime":1673824708689,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"W3CxJlUkySvpywzA","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"skillName":"Drive Auto","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.drive-auto","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.Og2OWQH93aSDWAMZ"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824711991,"modifiedTime":1673824711991,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"OsSGhLt9V9KUl6pF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","system":{"skillName":"Electrical Repair","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.electrical-repair","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.NBkq8oCGM1FjmsyF"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824714899,"modifiedTime":1673824714899,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"kugcvQmERxF7H8oy","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"skillName":"Fast Talk","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fast-talk","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.ld78TITwKNFPpanQ"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824717716,"modifiedTime":1673824717716,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"MhTsp0d1S1rytTKP","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824720616,"modifiedTime":1673824720616,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"onar4AcJE183V4lL","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","system":{"skillName":"Throw","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"fighting":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-throw","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.sWt5Q3ZXd6NlwhXU"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824726776,"modifiedTime":1673824726776,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"yLtVc6IqoHcbQtP3","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"skillName":"Handgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"firearm":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-handgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.KmDGtn7ukUFVb265"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824729920,"modifiedTime":1673824729920,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"GdWuOvB1KpNuJR8T","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"firearm":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-rifle-shotgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.m2pYjKk4Gk3FcEBL"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824732594,"modifiedTime":1673824732594,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"U7sfeJHKrd3AN4sm","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","system":{"skillName":"First Aid","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":30,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.first-aid","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.nZ8rdL4PLb7A7f5B"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824737146,"modifiedTime":1673824737146,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"TGjnVbAFWV7oM0tp","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","system":{"skillName":"History","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.history","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.URo2NSSJSNdvOqXU"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824739479,"modifiedTime":1673824739479,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"Q9BN7zcSyvkGislf","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","system":{"skillName":"Intimidate","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":15,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.intimidate","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.hDr4eUbS398oniTa"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824742748,"modifiedTime":1673824742748,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"R1YhBqr2vYJarNcj","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","system":{"skillName":"Jump","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.jump","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.c5utlFbDM7J8TA8b"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824747474,"modifiedTime":1673824747474,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"Blk22r9FRJetJ0e8","name":"Language (English)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"English","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":65,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true,"special":true,"requiresname":true,"keepbasevalue":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.language-own","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.rhJ1Q9OB3uTUZmjD"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824756422,"modifiedTime":1673824756422,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"B5bbxHCgvFU97wax","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","system":{"skillName":"Law","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.law","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.64hnBZNC8FM7oTkg"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824764658,"modifiedTime":1673824764658,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"jzWislVF9Ymc9nYf","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","system":{"skillName":"Library Use","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.library-use","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.BcWHh8EhmyKj7bNk"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824768688,"modifiedTime":1673824768688,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"PGJJMd1H01zMHxVW","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"skillName":"Listen","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.listen","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.MoAB0NRNlpEc2qWr"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824772685,"modifiedTime":1673824772685,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"gJUJPFFFciT7g3ru","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","system":{"skillName":"Locksmith","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.locksmith","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.MRbFH52Zh9TzhLBh"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824775536,"modifiedTime":1673824775536,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"B2l1hajoSiu0220k","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","system":{"skillName":"Mechanical Repair","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.mechanical-repair","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.0qCTuRFUCACSEsWj"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824778778,"modifiedTime":1673824778778,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"YAuSpd2dmbRN3H0N","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","system":{"skillName":"Medicine","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.medicine","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.Xmg7oAy70DKpv4kq"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824781748,"modifiedTime":1673824781748,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"PsoY9j8Dl7xWvZva","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","system":{"skillName":"Natural World","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.natural-world","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.jTcu6Ni2ek7Yz5q3"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824787964,"modifiedTime":1673824787964,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"PQWj9ojsPiyv9x38","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","system":{"skillName":"Navigate","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.navigate","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.1c3fdvpQtvZf5YXK"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824790175,"modifiedTime":1673824790175,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"j8zIi59ivXeMBIGQ","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","system":{"skillName":"Occult","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.occult","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.6pSfZVS68jSHxa5T"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824793143,"modifiedTime":1673824793143,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"YkuhgbOXhjipGTBQ","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","system":{"skillName":"Operate Heavy Machinery","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.operate-heavy-machinery","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.cuExWy1130KUwuWz"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824794964,"modifiedTime":1673824794964,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"sEepDbo9oLuvj3YR","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","system":{"skillName":"Persuade","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.persuade","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.uMzSNURmZqjxr7mU"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824797480,"modifiedTime":1673824797480,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"XYeMvKx4OvJTdUHN","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","system":{"skillName":"Psychoanalysis","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.psychoanalysis","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.rXBU2GofiO2qOsGv"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824802793,"modifiedTime":1673824802793,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"E0IfQkmTqgn78Hwh","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","system":{"skillName":"Psychology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.psychology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.MFR4eR79niGaLfph"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824804672,"modifiedTime":1673824804672,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"GwpLgucdPiJCWfQA","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","system":{"skillName":"Ride","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":5,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.ride","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.o7TdzbuSP7ticONf"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824808921,"modifiedTime":1673824808921,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"4PPrFyIHfqGPgOQ4","name":"Science (Chemistry)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_chemistry.svg","system":{"skillName":"Chemistry","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":1,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"special":true,"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-chemistry","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.8twBT7nbyh5dEp3J"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824813051,"modifiedTime":1673824813051,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"21P4CJb0d9k14Aik","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system":{"skillName":"Sleight of Hand","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":10,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.sleight-of-hand","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.KKFNX5M4LtEtiuxs"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824817840,"modifiedTime":1673824817840,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"mxt5DkfzMKQY0mqm","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","system":{"skillName":"Spot Hidden","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.spot-hidden","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.nHaWNwtW3Lg0sqYJ"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824820554,"modifiedTime":1673824820554,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"8dipKbgFF9U5LXBE","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"skillName":"Stealth","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.stealth","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"darkAges":true,"darkAgesPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.DcV524K0jNfjDEZC"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824823540,"modifiedTime":1673824823540,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"XFz0IurSpvaHPQVg","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","system":{"skillName":"Swim","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":20,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":null,"attributes":{},"properties":{"push":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.swim","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.1zSIeY0eat2AxQok"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824825711,"modifiedTime":1673824825711,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"_id":"EQypGKaUOTSYUFJT","name":"Punch","type":"weapon","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":"MhTsp0d1S1rytTKP"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":1,"max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"addb":true},"price":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.weapon.brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.items.3elxAwnv7WCUNwng"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824843603,"modifiedTime":1673824843603,"lastModifiedBy":"KDSEMVnv2FYscKdW"}}],"effects":[],"flags":{"CoC7":{"skillListMode":false,"skillShowUncommon":true},"core":{"sourceId":"Actor.fZvitWcuDHiRVvqQ"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824167510,"modifiedTime":1673827487772,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"folder":null,"sort":0,"ownership":{"default":0},"_id":"JuI2aWDSEuQNKeUI"} +{"name":"Cupboard","type":"container","img":"icons/svg/chest.svg","prototypeToken":{"actorLink":true,"name":"Cupboard","displayName":0,"texture":{"src":"icons/svg/chest.svg","scaleX":1,"scaleY":1,"offsetX":0,"offsetY":0,"rotation":0,"tint":null},"width":1,"height":1,"lockRotation":false,"rotation":0,"alpha":1,"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"light":{"alpha":0.5,"angle":360,"bright":0,"color":null,"coloration":1,"dim":0,"attenuation":0.5,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"type":null,"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}},"sight":{"enabled":false,"range":null,"angle":360,"visionMode":"basic","color":null,"attenuation":0.1,"brightness":0,"saturation":0,"contrast":0},"detectionModes":[],"flags":{},"randomImg":false},"system":{"description":{"value":"","keeper":""},"flags":{"locked":false}},"items":[{"name":"Rapier","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Sword","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D6+1"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825675613,"modifiedTime":1673825686834,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"Zf5qG2ADNdIVdSTi"}],"effects":[],"flags":{"core":{"sourceId":"Actor.dRQ62ogaUuZzp6ot"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825647165,"modifiedTime":1673827491287,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"folder":null,"sort":0,"ownership":{"default":0},"_id":"r7bDSY4OYKxQYEas"} +{"name":"Creature example","type":"creature","img":"systems/CoC7/assets/icons/floating-tentacles.svg","system":{"characteristics":{"str":{"value":1,"tempValue":null,"short":"CHARAC.STR","label":"CHARAC.Strength","formula":"1d6"},"con":{"value":10,"tempValue":null,"short":"CHARAC.CON","label":"CHARAC.Constitution","formula":"2d6"},"siz":{"value":50,"tempValue":null,"short":"CHARAC.SIZ","label":"CHARAC.Size","formula":"5*3d6"},"dex":{"value":10,"tempValue":null,"short":"CHARAC.DEX","label":"CHARAC.Dexterity","formula":"4d6"},"app":{"value":20,"tempValue":null,"short":"CHARAC.APP","label":"CHARAC.Appearance","formula":"5d6"},"int":{"value":20,"tempValue":null,"short":"CHARAC.INT","label":"CHARAC.Intelligence","formula":"6d6"},"pow":{"value":null,"tempValue":null,"short":"CHARAC.POW","label":"CHARAC.Power","formula":"0"},"edu":{"value":null,"tempValue":null,"short":"CHARAC.EDU","label":"CHARAC.Education","formula":"0"}},"attribs":{"hp":{"value":6,"max":null,"short":"HP","label":"Hit points","auto":true},"mp":{"value":0,"max":null,"short":"HP","label":"Magic points","auto":true},"lck":{"value":0,"short":"LCK","label":"Luck","max":99},"san":{"value":0,"max":99,"short":"SAN","label":"Sanity","auto":true,"dailyLoss":0,"oneFifthSanity":" / 0"},"mov":{"value":null,"max":null,"short":"MOV","label":"Movement rate","auto":true},"db":{"value":null,"short":"DB","label":"Damage bonus","auto":true},"build":{"current":null,"value":null,"short":"BLD","label":"Build","auto":true},"armor":{"value":0,"localized":false,"locations":[],"auto":false}},"conditions":{"criticalWounds":{"value":false},"unconscious":{"value":false},"dying":{"value":false},"dead":{"value":false},"prone":{"value":false},"tempoInsane":{"value":false},"indefInsane":{"value":false}},"personalDescription":{"type":"string","value":""},"description":{"keeper":""},"special":{"attribs":{"move":{"primary":{"enabled":false,"value":null,"type":null},"secondary":{"enabled":false,"value":null,"type":null}}},"sanLoss":{"checkPassed":"1d2","checkFailled":"1d6"},"attacksPerRound":null},"infos":{"type":"Phorusrhacid"},"flags":{"locked":true,"displayFormula":false},"biography":{"personalDescription":{"value":"

Clicking the lock will allow modification of the sheet.

When sheet is unlock you can modify things directly from the sheet. You can also open the entities sheets and delete things.

In that mode you can create skills/possessions by clicking the + icon. Holding shift will bypass the opening of the corresponding sheet.

You can enter characteristics as numbers and as formulas. Click the right icon to toggle modes. Clicking the red dice will roll the formula when possible. So you can have your creature with defined values, or roll/reroll the value on demand.

"}},"pannel":{"inventory":{"expanded":true}}},"prototypeToken":{"name":"Creature example","displayName":0,"actorLink":false,"texture":{"src":"systems/CoC7/assets/icons/floating-tentacles.svg","scaleX":1,"scaleY":1,"offsetX":0,"offsetY":0,"rotation":0,"tint":null},"width":1,"height":1,"lockRotation":false,"rotation":0,"alpha":1,"disposition":-1,"displayBars":0,"bar1":{"attribute":"attribs.hp"},"bar2":{"attribute":"attribs.san"},"light":{"alpha":0.5,"angle":360,"bright":0,"color":null,"coloration":1,"dim":0,"attenuation":0.5,"luminosity":0.5,"saturation":0,"contrast":0,"shadows":0,"animation":{"type":null,"speed":5,"intensity":5,"reverse":false},"darkness":{"min":0,"max":1}},"sight":{"enabled":false,"range":null,"angle":360,"visionMode":"basic","color":null,"attenuation":0.1,"brightness":0,"saturation":0,"contrast":0},"detectionModes":[],"flags":{},"randomImg":false},"items":[{"name":"Pile of junk","type":"item","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"quantity":1,"weight":0,"attributes":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.rOZl9mZIYdV4gjnx"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825252832,"modifiedTime":1673825263343,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"0oDo0HjUAx36Grvo"},{"_id":"4rNQ59tXBG8vv1wt","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":25,"adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"50","attributes":{},"properties":{"fighting":true,"combat":true,"special":true},"flags":{}},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-brawl","lang":"en","priority":0}},"core":{"sourceId":"Compendium.CoC7.skills.vS8bsPWFlwgOecoB"}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825281504,"modifiedTime":1673825338205,"lastModifiedBy":"KDSEMVnv2FYscKdW"}},{"name":"Fighting (Slice PCs in small cubes)","type":"skill","system":{"skillName":"Slice PCs in small cubes","specialization":"Fighting","description":{"value":"","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":"75","attributes":{},"properties":{"special":true,"fighting":true,"firearm":false,"combat":true},"flags":{}},"img":"systems/CoC7/assets/icons/skills.svg","effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.EXC0vQHsNEO8NnE7"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825316762,"modifiedTime":1673825343268,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"nGg2vYB9ij5jUpWN"},{"name":"Deadly beak","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"

You can add special description or slugs there :

Slug 1 : [[/r 2d17kh]]

","keeper":""},"wpnType":"","skill":{"main":{"name":"Slice PCs in small cubes","id":"nGg2vYB9ij5jUpWN"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"10D6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"spcl":true},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.NpSD7RCpjfRsY2Dm"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825400070,"modifiedTime":1673825519501,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"H0nWT8ljuKqVkcgc"},{"name":"Innate attack","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Creature's natural attack

","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Fighting (Brawl)","id":"4rNQ59tXBG8vv1wt"},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false,"slnt":true},"price":{}},"effects":[],"folder":null,"sort":0,"ownership":{"default":0},"flags":{"core":{"sourceId":"Item.DloZLwbcNEsoPH74"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673825547087,"modifiedTime":1673825585642,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"_id":"0KsCeV1S9WmxNq5M"}],"effects":[],"flags":{"core":{"sourceId":"Actor.YHNSOR6jgVsSUyYW"}},"_stats":{"systemId":"CoC7","systemVersion":"0.9.2","coreVersion":"10.291","createdTime":1673824963947,"modifiedTime":1673827489483,"lastModifiedBy":"KDSEMVnv2FYscKdW"},"folder":null,"sort":0,"ownership":{"default":0},"_id":"XE2vjLG03wGfnYLw"} diff --git a/packs/items.db b/packs/items.db index 57bd0bf75..9b5b55a21 100644 --- a/packs/items.db +++ b/packs/items.db @@ -1,12 +1,12 @@ -{"_id":"2dqgtyGfwr8M60he","name":"Phobia 2","type":"status","img":"icons/svg/aura.svg","system":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":false,"phobia":true}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.b5DeLy1KETMeE8ZC"}}} -{"_id":"3elxAwnv7WCUNwng","name":"Punch","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"addb":true,"ahdb":false,"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.Uldjvs5fvCMri6RN"}}} -{"_id":"CcH7CdXGtGTjMSCg","name":"1920's Setup Example","type":"setup","img":"icons/svg/item-bag.svg","system":{"description":{"value":"

Default setup for 1920's character.

","keeper":""},"characteristics":{"points":{"enabled":false,"value":460},"rolls":{"enabled":true,"enableIndividualRolls":true,"str":"(3D6)*5","con":"(3D6)*5","siz":"(2D6+6)*5","dex":"(3D6)*5","app":"(3D6)*5","int":"(2D6+6)*5","pow":"(3D6)*5","edu":"(2D6+6)*5","luck":"(3D6)*5"},"values":{"str":null,"con":null,"siz":null,"dex":null,"app":null,"int":null,"pow":null,"edu":null,"luck":null}},"source":"Keeper's rule book","enableCharacterisitics":true,"items":[{"_id":"R8GJXPMc4LC3bn1D","name":"Unarmed","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"Brawl","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":0,"units":"","damage":"1D3"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":true,"rngd":false,"shotgun":false,"brst":false,"auto":false,"dbrl":false,"addb":true,"ahdb":false},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{"1920":"0","nvct":"0","drka":"0","ddts":"0","glit":"0","pulp":"0","mdrn":"0"}},"effects":[],"folder":"WdotG7nzDUJKNBCF","sort":100000,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.R8GJXPMc4LC3bn1D"}}},{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Accounting"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Anthropology"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Appraise"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Archaeology"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Charm"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Credit Rating"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Cthulhu Mythos"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Disguise"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Dodge"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Drive Auto"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Electrical Repair"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Fast Talk"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Brawl"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","system":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Throw"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Handgun"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Rifle/Shotgun"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"First Aid"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"History"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Intimidate"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Jump"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Own"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Law"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Library Use"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Listen"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Locksmith"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Mechanical Repair"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Medicine"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Natural World"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Navigate"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Occult"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Operate Heavy Machinery"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Persuade"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","system":{"specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Psychoanalysis"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Psychology"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Ride"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","system":{"specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Sleight of Hand"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Spot Hidden"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Stealth"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","system":{"specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Swim"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Track"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Climb"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"bioSections":["Personal Description","Ideology/Beliefs","Significant People","Meaningful Locations","Treasured Possessions","Traits"],"backstory":"","attributes":{},"properties":{},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.K8145914TxcC70wL"}}} -{"_id":"DVdvEDizPZPux1pK","name":"Mania 1","type":"status","img":"icons/svg/aura.svg","system":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":true,"phobia":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.956QyPlpQ1ED4VQw"}}} -{"_id":"NOsh6EdNSjpjahDF","name":"Occupation Example","type":"occupation","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"source":"","type":{"classic":true,"lovecraftian":false,"modern":false,"pulp":false},"related":null,"occupationSkillPoints":{"str":{"multiplier":null,"selected":false,"optional":false,"active":false},"con":{"multiplier":null,"selected":false,"optional":false,"active":false},"siz":{"multiplier":null,"selected":false,"optional":false,"active":false},"dex":{"multiplier":null,"selected":false,"optional":false,"active":false},"app":{"multiplier":2,"selected":true,"optional":false,"active":false},"int":{"multiplier":null,"selected":false,"optional":false,"active":false},"pow":{"multiplier":null,"selected":false,"optional":false,"active":false},"edu":{"multiplier":2,"selected":true,"optional":false,"active":false}},"creditRating":{"min":"10","max":"80"},"suggestedContacts":"","skills":[{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Drive Auto"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Listen"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Stealth"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"groups":[{"options":"2","skills":[{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Charm"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Fast Talk"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Intimidate"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Persuade"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]},{"options":"1","skills":[{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Brawl"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Handgun"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}]}],"personal":1,"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.VV21NKX0pHuShVr0"}}} -{"_id":"NVz7eCFnoH8J12qH","name":"Talent 2","type":"talent","img":"icons/svg/item-bag.svg","system":{"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"type":{"physical":false,"mental":true,"combat":false,"miscellaneous":false,"basic":false,"insane":false,"other":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"9N2eSs3Ws41QyPkT":3},"flags":{"core":{"sourceId":"Item.gk9dv6JwXm04asge"}}} -{"_id":"PFpgtSKUcBDLVLY6","name":"Phobia 1","type":"status","img":"icons/svg/aura.svg","system":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":false,"phobia":true}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.LIabvJunZPiq0brc"}}} -{"_id":"Vm9OzZnAVOpDdwfB","name":"Mania 2","type":"status","img":"icons/svg/aura.svg","system":{"active":false,"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"duration":{"permanent":true,"hours":null,"minutes":null,"rounds":null},"type":{"mania":true,"phobia":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.4gH7MiriVDWx31YF"}}} -{"_id":"lu04TIRrg9P3vRqY","name":"Archetype Example","type":"archetype","img":"icons/svg/item-bag.svg","system":{"description":{"value":"","keeper":""},"source":"","type":{"classic":false,"lovecraftian":false,"modern":false},"bonusPoints":100,"coreCharacteristics":{"str":false,"con":false,"siz":false,"dex":false,"app":true,"int":true,"pow":false,"edu":false},"coreCharacteristicsFormula":{"enabled":true,"value":"(1D6+13)*5"},"suggestedOccupations":"","suggestedTraits":"","talents":2,"skills":[{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Appraise"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"m6V53lyfz7zh95FE","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","system":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Acting"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Any"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Charm"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Disguise"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Drive Auto"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Fast Talk"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Brawl"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Handgun"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Listen"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Psychology"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Sleight of Hand"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}},{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{},"skillName":"Stealth"},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}}],"attributes":{},"properties":{},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.CrhRlgbg1O6F4vaY"}}} -{"_id":"uWQYNsMURpspTetM","name":"Experimental weapon","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

\n

selecting 'Area of effect' will enable 3 different damage and range

\n

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

\n

selecting 'Special' will activate the special input field

\n

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

\n

Edit the weapon and select the correct skill.

","chat":"","special":"

You can add special description or slugs there :

\n

Slug 1 : 2d17kh

","keeper":""},"wpnType":"","skill":{"main":{"name":"To be selected once the weapon is owned","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"15ft","units":"","damage":"3d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":""},"bullets":"","ammo":0,"malfunction":"85","blastRadius":null,"properties":{"melee":false,"rngd":true,"spcl":true,"brst":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"price":{"1920":"5$","mdrn":"6$"}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.NzTqCxAlJVfdUmxR"}}} -{"_id":"yqvwz769ZeJplOW7","name":"Talent 1","type":"talent","img":"icons/svg/item-bag.svg","system":{"source":"","description":{"value":"","chat":"","notes":"","keeper":""},"type":{"physical":true,"mental":false,"combat":false,"miscellaneous":false,"basic":false,"insane":false,"other":false}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"9N2eSs3Ws41QyPkT":3},"flags":{"core":{"sourceId":"Item.iE7vj2dK7klaHSZT"}}} -{"_id":"zyCszwqyTg21l9E2","name":"Death ray (prototype)","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"","chat":"","special":"","keeper":""},"wpnType":"","skill":{"main":{"name":"","id":""},"alternativ":{"name":"","id":""}},"range":{"normal":{"value":"50ft","units":"","damage":"5d6"},"long":{"value":0,"units":"","damage":""},"extreme":{"value":0,"units":"","damage":""}},"usesPerRound":{"normal":"1","max":"","burst":null},"bullets":"","ammo":0,"malfunction":"","blastRadius":null,"properties":{"melee":false,"rngd":true,"slnt":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":false},"price":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{"core":{"sourceId":"Item.fkfXxQQKhfMfUWGE"}}} +{"_id":"CcH7CdXGtGTjMSCg","name":"1920's Setup Example","type":"setup","img":"icons/svg/item-bag.svg","system":{"description":{"value":"

Default setup for 1920's character.

"},"source":"","items":["i.skill.accounting","i.skill.anthropology","i.skill.appraise","i.skill.archaeology","i.skill.art-craft-any","i.skill.charm","i.skill.climb","i.skill.credit-rating","i.skill.cthulhu-mythos","i.skill.disguise","i.skill.dodge","i.skill.drive-auto","i.skill.electrical-repair","i.skill.fast-talk","i.skill.fighting-brawl","i.skill.fighting-throw","i.skill.firearms-handgun","i.skill.firearms-rifle-shotgun","i.skill.first-aid","i.skill.history","i.skill.intimidate","i.skill.jump","i.skill.language-own","i.skill.law","i.skill.library-use","i.skill.listen","i.skill.locksmith","i.skill.mechanical-repair","i.skill.medicine","i.skill.natural-world","i.skill.navigate","i.skill.occult","i.skill.operate-heavy-machinery","i.skill.persuade","i.skill.pilot-any","i.skill.psychoanalysis","i.skill.psychology","i.skill.ride","i.skill.science-any","i.skill.sleight-of-hand","i.skill.spot-hidden","i.skill.stealth","i.skill.survival-any","i.skill.swim","i.skill.track","i.weapon.brawl"],"bioSections":["Personal Description","Ideology/Beliefs","Significant People","Meaningful Locations","Treasured Possessions","Traits"]},"flags":{"CoC7":{"cocidFlag":{"id":"i.setup.standard","lang":"en","eras":{"standard":true},"priority":0}}}} +{"_id":"lu04TIRrg9P3vRqY","name":"Archetype Example","type":"archetype","img":"icons/svg/item-bag.svg","system":{"source":"","coreCharacteristics":{"app":true,"int":true},"skills":["i.skill.appraise","i.skill.art-craft-acting","i.skill.art-craft-any","i.skill.charm","i.skill.disguise","i.skill.drive-auto","i.skill.fast-talk","i.skill.fighting-brawl","i.skill.firearms-handgun","i.skill.listen","i.skill.psychology","i.skill.sleight-of-hand","i.skill.stealth"]},"flags":{}} +{"_id":"zyCszwqyTg21l9E2","name":"Death ray (prototype)","type":"weapon","img":"icons/svg/sword.svg","system":{"range":{"normal":{"value":"50ft","damage":"5d6"}},"usesPerRound":{"max":"","burst":""},"bullets":"","malfunction":"","properties":{"rngd":true,"slnt":true}},"flags":{}} +{"_id":"uWQYNsMURpspTetM","name":"Experimental weapon","type":"weapon","img":"icons/svg/sword.svg","system":{"description":{"value":"

Description of the weapon

selecting 'Area of effect' will enable 3 different damage and range

selecting 'Full-auto' will allow 2 different skills to be selected for the weapon

selecting 'Special' will activate the special input field

In the combat tab, if the icons are with a red background, it means that no skill have been selected for that weapon

Edit the weapon and select the correct skill.

","special":"

You can add special description or slugs there:

Slug 1: [[/r 2d17kh]]

"},"skill":{"main":{"name":"To be selected once the weapon is owned"}},"range":{"normal":{"value":"15ft","damage":"3d6"}},"usesPerRound":{"max":"","burst":""},"bullets":"","malfunction":85,"properties":{"rngd":true,"brst":true,"spcl":true}},"flags":{}} +{"_id":"DVdvEDizPZPux1pK","name":"Mania 1","type":"status","img":"icons/svg/aura.svg","system":{"source":"","type":{"mania":true}},"flags":{}} +{"_id":"Vm9OzZnAVOpDdwfB","name":"Mania 2","type":"status","img":"icons/svg/aura.svg","system":{"source":"","type":{"mania":true}},"flags":{}} +{"_id":"NOsh6EdNSjpjahDF","name":"Occupation Example","type":"occupation","img":"icons/svg/item-bag.svg","system":{"source":"","type":{"classic":true},"occupationSkillPoints":{"app":{"multiplier":2,"selected":true},"edu":{"multiplier":2,"selected":true}},"creditRating":{"min":10,"max":80},"skills":["i.skill.art-craft-any","i.skill.art-craft-any","i.skill.drive-auto","i.skill.listen","i.skill.stealth"],"groups":[{"options":2,"skills":["i.skill.charm","i.skill.fast-talk","i.skill.intimidate","i.skill.persuade"]},{"options":1,"skills":["i.skill.fighting-brawl","i.skill.firearms-handgun"]}],"personal":1},"flags":{}} +{"_id":"PFpgtSKUcBDLVLY6","name":"Phobia 1","type":"status","img":"icons/svg/aura.svg","system":{"source":"","type":{"phobia":true}},"flags":{}} +{"_id":"2dqgtyGfwr8M60he","name":"Phobia 2","type":"status","img":"icons/svg/aura.svg","system":{"source":"","type":{"phobia":true}},"flags":{}} +{"_id":"3elxAwnv7WCUNwng","name":"Punch","type":"weapon","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skill":{"main":{"name":"Brawl"}},"range":{"normal":{"damage":"1D3"}},"usesPerRound":{"max":""},"bullets":"","malfunction":"","properties":{"melee":true,"addb":true}},"flags":{"CoC7":{"cocidFlag":{"id":"i.weapon.brawl","lang":"en","priority":0}}}} +{"_id":"yqvwz769ZeJplOW7","name":"Talent 1","type":"talent","img":"icons/svg/item-bag.svg","system":{"source":"","type":{"physical":true}},"flags":{}} +{"_id":"NVz7eCFnoH8J12qH","name":"Talent 2","type":"talent","img":"icons/svg/item-bag.svg","system":{"source":"","type":{"mental":true}},"flags":{}} \ No newline at end of file diff --git a/packs/skills.db b/packs/skills.db index 26fd514e8..a9426c360 100644 --- a/packs/skills.db +++ b/packs/skills.db @@ -1,93 +1,94 @@ -{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","system":{"skillName":"Mechanical Repair","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"0rlp7EuZDzQGjIYf","name":"Science (Zoology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_zoology.svg","system":{"skillName":"Zoology","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","system":{"skillName":"Navigate","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","system":{"skillName":"Swim","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"23vdyJDDfjyneH3I","name":"Firearms (Heavy Weapons)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg","system":{"skillName":"Heavy Weapons","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"35dvJDsrY8JipXRU","name":"Firearms (Flamethrower)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg","system":{"skillName":"Flamethrower","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"4lN6yD6zwbjX6BFp","name":"Diving","type":"skill","img":"systems/CoC7/assets/icons/skills/diving_helmet.svg","system":{"skillName":"Diving","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","system":{"skillName":"Law","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","system":{"skillName":"Occult","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"8twBT7nbyh5dEp3J","name":"Science (Chemistry)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_chemistry.svg","system":{"skillName":"Chemistry","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"9zy7PLmTLXknFce4","name":"Science (Engineering)","type":"skill","img":"systems/CoC7/assets/icons/skills/spanner.svg","system":{"skillName":"Engineering","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.Ib9GlNN6XslsALb5"}}} -{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","system":{"skillName":"Track","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","system":{"skillName":"Library Use","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"skillName":"Stealth","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Dh6sHWep0qKQmi3I","name":"Science (Physics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_physics.svg","system":{"skillName":"Physics","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"EMA6uEtQBgJtBcPl","name":"Rope Use","type":"skill","img":"systems/CoC7/assets/icons/skills/lasso.svg","system":{"skillName":"Rope Use","specialization":"","description":{"value":"

See Down Darker Trails

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.5FI0WRz1GunnTulZ"}}} -{"_id":"Ed8OShyl7D834Ihk","name":"Fighting (Chainsaw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg","system":{"skillName":"Chainsaw","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","system":{"skillName":"Archaeology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"skillName":"Any","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"HzOGu2yLcL9obry3","name":"Trap","type":"skill","img":"systems/CoC7/assets/icons/skills/wolf-trap.svg","system":{"skillName":"Trap","specialization":"","description":{"value":"

See Down Darker Trails

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.FmcnC1p98W3HNBZi"}}} -{"_id":"I80gmmo830LuOBKl","name":"Civics","type":"skill","img":"systems/CoC7/assets/icons/skills/shaking-hands.svg","system":{"skillName":"Civics","specialization":"","description":{"value":"

See the Cthulhu Invictus

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.46Io2IFPcZcbtH9f"}}} -{"_id":"IBSDR6U4dE1uejVp","name":"Science (Biology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_biology.svg","system":{"skillName":"Biology","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"IttOdCAGTeE6VU3F","name":"Fighting (Spear)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_spear.svg","system":{"skillName":"Spear","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"skillName":"Charm","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system":{"skillName":"Sleight of Hand","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"skillName":"Handgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","system":{"skillName":"Any","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","system":{"skillName":"Psychology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","system":{"skillName":"Locksmith","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"skillName":"Listen","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","system":{"skillName":"Electrical Repair","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Nw5tSvi2Knxlqmg1","name":"Science (Forensics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_forensics.svg","system":{"skillName":"Forensics","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"OcnZzOYWaP4VsjXS","name":"Fighting (Flail)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_flail.svg","system":{"skillName":"Flail","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"skillName":"Drive Auto","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Pb3QI7x9xJVeXi8a","name":"Fighting (Whip)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_whip.svg","system":{"skillName":"Whip","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"QcomAOgmOS5g3dsh","name":"Firearms (Machine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg","system":{"skillName":"Machine Gun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"QwaL3UC3Gvjd3hmF","name":"Science (Geology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_geology.svg","system":{"skillName":"Geology","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"SL2OorS0Xx6ty02A","name":"Read Lips","type":"skill","img":"systems/CoC7/assets/icons/skills/read_lips.svg","system":{"skillName":"Read Lips","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"SflwB1bbjaQebiPQ","name":"Gambling","type":"skill","img":"systems/CoC7/assets/icons/skills/poker-hand.svg","system":{"skillName":"Gambling","specialization":"","description":{"value":"

See Down Darker Trails

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.w5ueQbbIvTpmjHh9"}}} -{"_id":"ShPoibiLsd07AtZv","name":"Science (Botany)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_botany.svg","system":{"skillName":"Botany","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Sxviv60td6kbS4kp","name":"Drive Carriage","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"skillName":"Drive Carriage","specialization":"","description":{"value":"

See the Cthulhu by Gaslight

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"glit":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.Yp9weSMp46Mgkfex"}}} -{"_id":"T8fSLCwSD8C0iK8t","name":"Fighting (Axe)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_axe.svg","system":{"skillName":"Axe","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"TPOu48DT4QIrqE68","name":"Fighting (Garrote)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg","system":{"skillName":"Garrote","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"TwYYqLHe1PXnOCDF","name":"Science (Mathematics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_mathematics.svg","system":{"skillName":"Mathematics","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"UASTWOvgCYi8G1QQ","name":"Science (Cryptography)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_cryptography.svg","system":{"skillName":"Cryptography","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","system":{"skillName":"Accounting","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","system":{"skillName":"History","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"V9ulAwDyLVqqQ0su","name":"Science (Pharmacy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg","system":{"skillName":"Pharmacy","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"VZSv9eodMQ4ZPcrO","name":"Computer Use","type":"skill","img":"systems/CoC7/assets/icons/skills/computer_use.svg","system":{"skillName":"Computer Use","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"VwGWZ2LBOwtMaw08","name":"Firearms (Bow)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_bow.svg","system":{"skillName":"Bow","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","system":{"skillName":"Cthulhu Mythos","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noadjustments":true,"noxpgain":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"WLYZNASZ2YP8zN3g","name":"Art/Craft (Photography)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg","system":{"skillName":"Photography","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","system":{"skillName":"Any","specialization":"Survival","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","system":{"skillName":"Medicine","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"Yu3Xk8kZBlz0G82y","name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"Any","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"bJt90h73GqdP7ti6","name":"Demolitions","type":"skill","img":"systems/CoC7/assets/icons/skills/demolitions.svg","system":{"skillName":"Demolitions","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","system":{"skillName":"Jump","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","system":{"skillName":"Operate Heavy Machinery","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"dQ4zUjSteT3sgwKx","name":"Animal Handling","type":"skill","img":"systems/CoC7/assets/icons/skills/animal_handling.svg","system":{"skillName":"Animal Handling","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"rarity":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"gRUXG91zIJXOLye1","name":"Firearms (Submachine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg","system":{"skillName":"Submachine Gun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","system":{"skillName":"Disguise","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","system":{"skillName":"Intimidate","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"15","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"hRPbMl2N0t6aBlyc","name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_sword.svg","system":{"skillName":"Sword","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"hhvqA2BOljk1FHVg","name":"Science (Astronomy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_astronomy.svg","system":{"skillName":"Astronomy","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","system":{"skillName":"Natural World","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"skillName":"Fast Talk","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"skillName":"Rifle/Shotgun","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"m6V53lyfz7zh95FE","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","system":{"skillName":"Acting","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"m8sBJxvuUdtQ2mDU","name":"Art/Craft (Fine Art)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg","system":{"skillName":"Fine Art","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"mEblnQjptKvKCeIg","name":"Hypnosis","type":"skill","img":"systems/CoC7/assets/icons/skills/hypnosis.svg","system":{"skillName":"Hypnosis","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"rarity":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","system":{"skillName":"Spot Hidden","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","system":{"skillName":"First Aid","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"30","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","system":{"skillName":"Ride","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"oEfvPMTx0cgyPlgV","name":"Electronics","type":"skill","img":"systems/CoC7/assets/icons/skills/electronics.svg","system":{"skillName":"Electronics","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":false,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","system":{"skillName":"Climb","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","system":{"skillName":"Anthropology","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"qET2wCGGdy3z18Gc","name":"Firearms (Artillery)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg","system":{"skillName":"Artillery","specialization":"Firearms","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":false,"firearm":true,"combat":true,"special":true,"rarity":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"rAK5soSX1n3jXj2A","name":"Drive Horse / Oxen","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"skillName":"Drive Horse / Oxen","specialization":"","description":{"value":"

See the Cthulhu Invictus

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true,"drka":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.LGuvwdjDRA8PwtsI"}}} -{"_id":"rCJKGay6D0ucqgeg","name":"Lore (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/classical_knowledge.svg","system":{"skillName":"Any","specialization":"Lore","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"rarity":true,"push":true},"eras":{},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"dlPHDbfKH31liGgB":3},"flags":{"core":{"sourceId":"Item.5heqjvvagdYUF8LG"}}} -{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","system":{"skillName":"Psychoanalysis","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"skillName":"Own","specialization":"Language","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"@EDU","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true,"special":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","system":{"skillName":"Throw","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true,"push":false},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"sqenne0VZoF54W5k","name":"Drive Wagon / Coach","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"skillName":"Drive Wagon / Coach","specialization":"","description":{"value":"

See Down Darker Trails

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"20","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"ddts":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.w09bofuMbG6Yu3UB"}}} -{"_id":"t7uiYybrk8dHFdjp","name":"Empire","type":"skill","img":"systems/CoC7/assets/icons/skills/laurel_crown.svg","system":{"skillName":"Empire","specialization":"","description":{"value":"

See the Cthulhu Invictus

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"nvct":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0,"YajcPNfJMTNwSvTe":3},"flags":{"core":{"sourceId":"Item.LtUVhOkVCwqJsjrb"}}} -{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","system":{"skillName":"Persuade","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","system":{"skillName":"Any","specialization":"Pilot","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"skillName":"Brawl","specialization":"Fighting","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"25","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"fighting":true,"firearm":false,"combat":true,"special":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","system":{"skillName":"Credit Rating","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"0","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"noxpgain":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"w0eY2fJe6CEHY9pq","name":"Track (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","system":{"skillName":"Any","specialization":"Track","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"10","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"w7hWVU14syjweIH2","name":"Science (Meteorology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_meteorology.svg","system":{"skillName":"Meteorology","specialization":"Science","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"skillName":"Dodge","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"1/2*@DEX","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","system":{"skillName":"Appraise","specialization":"","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"push":true},"eras":{"1920":true,"nvct":true,"drka":true,"ddts":true,"glit":true,"pulp":true,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} -{"_id":"zcvnv8qY4GrVwwTL","name":"Art/Craft (Forgery)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg","system":{"skillName":"Forgery","specialization":"Art/Craft","description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

","opposingDifficulty":"","pushedFaillureConsequences":"","chat":"","keeper":""},"base":"5","adjustments":{"personal":null,"occupation":null,"archetype":null,"experience":null},"value":-1,"attributes":{},"properties":{"special":true,"push":true},"eras":{"1920":true,"nvct":false,"drka":false,"ddts":false,"glit":false,"pulp":false,"mdrn":true},"flags":{}},"effects":[],"folder":null,"sort":0,"permission":{"default":0},"flags":{}} +{"_id":"0qCTuRFUCACSEsWj","name":"Mechanical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/mechanical_repair.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Mechanical Repair","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.mechanical-repair","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"0rlp7EuZDzQGjIYf","name":"Science (Zoology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_zoology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Zoology","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-zoology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"1c3fdvpQtvZf5YXK","name":"Navigate","type":"skill","img":"systems/CoC7/assets/icons/skills/navigate.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Navigate","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.navigate","lang":"en","priority":0}}}} +{"_id":"1zSIeY0eat2AxQok","name":"Swim","type":"skill","img":"systems/CoC7/assets/icons/skills/swim.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Swim","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.swim","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"23vdyJDDfjyneH3I","name":"Firearms (Heavy Weapons)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_heavy_weapons.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Heavy Weapons","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-heavy-weapons","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"35dvJDsrY8JipXRU","name":"Firearms (Flamethrower)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_flamethrower.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Flamethrower","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-flamethrower","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"4lN6yD6zwbjX6BFp","name":"Diving","type":"skill","img":"systems/CoC7/assets/icons/skills/diving_helmet.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true,"rarity":true},"skillName":"Diving","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.diving","lang":"en","eras":{"standard":true,"modern":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"64hnBZNC8FM7oTkg","name":"Law","type":"skill","img":"systems/CoC7/assets/icons/skills/law.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Law","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.law","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"6pSfZVS68jSHxa5T","name":"Occult","type":"skill","img":"systems/CoC7/assets/icons/skills/occult.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Occult","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.occult","lang":"en","priority":0}}}} +{"_id":"8twBT7nbyh5dEp3J","name":"Science (Chemistry)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_chemistry.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Chemistry","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-chemistry","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"9zy7PLmTLXknFce4","name":"Science (Engineering)","type":"skill","img":"systems/CoC7/assets/icons/skills/spanner.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Engineering","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-engineering","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"AcUIbZFhfoXqQP2m","name":"Track","type":"skill","img":"systems/CoC7/assets/icons/skills/track.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Track","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.track","lang":"en","priority":0}}}} +{"_id":"BcWHh8EhmyKj7bNk","name":"Library Use","type":"skill","img":"systems/CoC7/assets/icons/skills/library_use.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Library Use","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.library-use","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"DcV524K0jNfjDEZC","name":"Stealth","type":"skill","img":"systems/CoC7/assets/icons/skills/stealth.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Stealth","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.stealth","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"darkAges":true,"darkAgesPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"Dh6sHWep0qKQmi3I","name":"Science (Physics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_physics.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Physics","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-physics","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"EMA6uEtQBgJtBcPl","name":"Rope Use","type":"skill","img":"systems/CoC7/assets/icons/skills/lasso.svg","system":{"description":{"value":"

See the Down Darker Trails Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Rope Use","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.rope-use","lang":"en","eras":{"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"Ed8OShyl7D834Ihk","name":"Fighting (Chainsaw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_chainsaw.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Chainsaw","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-chainsaw","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"GHhkcJUqjcP4lToY","name":"Archaeology","type":"skill","img":"systems/CoC7/assets/icons/skills/archaeology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Archaeology","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.archaeology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"HAuFBG4ZT2yO9yn7","name":"Art/Craft (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_any.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"special":true,"requiresname":true,"push":true},"skillName":"Any","specialization":"Art/Craft"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-any","lang":"en","priority":0}}}} +{"_id":"HzOGu2yLcL9obry3","name":"Trap","type":"skill","img":"systems/CoC7/assets/icons/skills/wolf-trap.svg","system":{"description":{"value":"

See the Down Darker Trails Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Trap","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.trap","lang":"en","eras":{"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"I80gmmo830LuOBKl","name":"Civics","type":"skill","img":"systems/CoC7/assets/icons/skills/shaking-hands.svg","system":{"description":{"value":"

See the Cthulhu Invictus

"},"base":10,"properties":{"push":true},"skillName":"Civics","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.civics","lang":"en","eras":{"invictus":true},"priority":0}}}} +{"_id":"IBSDR6U4dE1uejVp","name":"Science (Biology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_biology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Biology","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-biology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"IttOdCAGTeE6VU3F","name":"Fighting (Spear)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_spear.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Spear","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-spear","lang":"en","priority":0}}}} +{"_id":"JgtxiN3KzooOWIQV","name":"Charm","type":"skill","img":"systems/CoC7/assets/icons/skills/charm.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"push":true},"skillName":"Charm","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.charm","lang":"en","priority":0}}}} +{"_id":"KKFNX5M4LtEtiuxs","name":"Sleight of Hand","type":"skill","img":"systems/CoC7/assets/icons/skills/sleight_of_hand.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Sleight of Hand","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.sleight-of-hand","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"KmDGtn7ukUFVb265","name":"Firearms (Handgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Handgun","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-handgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"KvZuYcg3AmVrwKi2","name":"Science (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_any.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"requiresname":true,"push":true},"skillName":"Any","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-any","lang":"en","priority":0}}}} +{"_id":"MFR4eR79niGaLfph","name":"Psychology","type":"skill","img":"systems/CoC7/assets/icons/skills/psychology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Psychology","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.psychology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"MRbFH52Zh9TzhLBh","name":"Locksmith","type":"skill","img":"systems/CoC7/assets/icons/skills/locksmith.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Locksmith","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.locksmith","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"MoAB0NRNlpEc2qWr","name":"Listen","type":"skill","img":"systems/CoC7/assets/icons/skills/listen.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Listen","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.listen","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"NBkq8oCGM1FjmsyF","name":"Electrical Repair","type":"skill","img":"systems/CoC7/assets/icons/skills/electrical_repair.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Electrical Repair","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.electrical-repair","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"Nw5tSvi2Knxlqmg1","name":"Science (Forensics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_forensics.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Forensics","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-forensics","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"OcnZzOYWaP4VsjXS","name":"Fighting (Flail)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_flail.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Flail","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-flail","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"Og2OWQH93aSDWAMZ","name":"Drive Auto","type":"skill","img":"systems/CoC7/assets/icons/skills/drive_auto.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Drive Auto","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.drive-auto","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"Pb3QI7x9xJVeXi8a","name":"Fighting (Whip)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_whip.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Whip","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-whip","lang":"en","priority":0}}}} +{"_id":"QcomAOgmOS5g3dsh","name":"Firearms (Machine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_machine_gun.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Machine Gun","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-machine-gun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"QwaL3UC3Gvjd3hmF","name":"Science (Geology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_geology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Geology","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-geology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"SL2OorS0Xx6ty02A","name":"Read Lips","type":"skill","img":"systems/CoC7/assets/icons/skills/read_lips.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"rarity":true,"push":true},"skillName":"Read Lips","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.read-lips","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"SflwB1bbjaQebiPQ","name":"Gambling","type":"skill","img":"systems/CoC7/assets/icons/skills/poker-hand.svg","system":{"description":{"value":"

See the Down Darker Trails Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Gambling","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.gambling","lang":"en","eras":{"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"ShPoibiLsd07AtZv","name":"Science (Botany)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_botany.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Botany","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-botany","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"Sxviv60td6kbS4kp","name":"Drive Carriage","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"description":{"value":"

See the Cthulhu by Gaslight

"},"base":20,"properties":{"push":true},"skillName":"Drive Carriage","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.drive-carriage","lang":"en","eras":{"gasLight":true},"priority":0}}}} +{"_id":"T8fSLCwSD8C0iK8t","name":"Fighting (Axe)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_axe.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Axe","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-axe","lang":"en","priority":0}}}} +{"_id":"TPOu48DT4QIrqE68","name":"Fighting (Garrote)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_garrote.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Garrote","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-garrote","lang":"en","priority":0}}}} +{"_id":"TwYYqLHe1PXnOCDF","name":"Science (Mathematics)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_mathematics.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"special":true,"push":true},"skillName":"Mathematics","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-mathematics","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"UASTWOvgCYi8G1QQ","name":"Science (Cryptography)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_cryptography.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Cryptography","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-cryptography","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"UOuN0gESXPp2HXwH","name":"Accounting","type":"skill","img":"systems/CoC7/assets/icons/skills/accounting.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Accounting","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.accounting","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"URo2NSSJSNdvOqXU","name":"History","type":"skill","img":"systems/CoC7/assets/icons/skills/history.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"History","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.history","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"V9ulAwDyLVqqQ0su","name":"Science (Pharmacy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_pharmacy.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Pharmacy","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-pharmacy","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"VZSv9eodMQ4ZPcrO","name":"Computer Use","type":"skill","img":"systems/CoC7/assets/icons/skills/computer_use.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Computer Use","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.computer-use","lang":"en","eras":{"modern":true,"modernPulp":true},"priority":0}}}} +{"_id":"VwGWZ2LBOwtMaw08","name":"Firearms (Bow)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_bow.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Bow","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-bow","lang":"en","priority":0}}}} +{"_id":"WJky66ezt2ef5ksH","name":"Cthulhu Mythos","type":"skill","img":"systems/CoC7/assets/icons/skills/cthulhu_mythos.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":0,"properties":{"noadjustments":true,"noxpgain":true},"skillName":"Cthulhu Mythos","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.cthulhu-mythos","lang":"en","priority":0}}}} +{"_id":"WLYZNASZ2YP8zN3g","name":"Art/Craft (Photography)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_photography.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"special":true,"push":true},"skillName":"Photography","specialization":"Art/Craft"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-photography","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"_id":"X99v5MtRlfTNjL3B","name":"Survival (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/survival_any.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"special":true,"requiresname":true,"push":true},"skillName":"Any","specialization":"Survival"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.survival-any","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"Xmg7oAy70DKpv4kq","name":"Medicine","type":"skill","img":"systems/CoC7/assets/icons/skills/medicine.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Medicine","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.medicine","lang":"en","priority":0}}}} +{"_id":"Yu3Xk8kZBlz0G82y","name":"Language (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"requiresname":true,"push":true},"skillName":"Any","specialization":"Language"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.language-any","lang":"en","priority":0}}}} +{"_id":"bJt90h73GqdP7ti6","name":"Demolitions","type":"skill","img":"systems/CoC7/assets/icons/skills/demolitions.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"rarity":true,"push":true},"skillName":"Demolitions","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.demolitions","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"c5utlFbDM7J8TA8b","name":"Jump","type":"skill","img":"systems/CoC7/assets/icons/skills/jump.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Jump","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.jump","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"cuExWy1130KUwuWz","name":"Operate Heavy Machinery","type":"skill","img":"systems/CoC7/assets/icons/skills/operate_heavy_machinery.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Operate Heavy Machinery","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.operate-heavy-machinery","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"dQ4zUjSteT3sgwKx","name":"Animal Handling","type":"skill","img":"systems/CoC7/assets/icons/skills/animal_handling.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true,"rarity":true},"skillName":"Animal Handling","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.animal-handling","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"gRUXG91zIJXOLye1","name":"Firearms (Submachine Gun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_submachine_gun.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Submachine Gun","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-submachine-gun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"gzNPM9gbx0EZffBV","name":"Disguise","type":"skill","img":"systems/CoC7/assets/icons/skills/disguise.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Disguise","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.disguise","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"darkAges":true,"darkAgesPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"hDr4eUbS398oniTa","name":"Intimidate","type":"skill","img":"systems/CoC7/assets/icons/skills/intimidate.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":15,"properties":{"push":true},"skillName":"Intimidate","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.intimidate","lang":"en","priority":0}}}} +{"_id":"hRPbMl2N0t6aBlyc","name":"Fighting (Sword)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_sword.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Sword","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-sword","lang":"en","priority":0}}}} +{"_id":"hhvqA2BOljk1FHVg","name":"Science (Astronomy)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_astronomy.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true,"special":true},"skillName":"Astronomy","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-astronomy","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"jTcu6Ni2ek7Yz5q3","name":"Natural World","type":"skill","img":"systems/CoC7/assets/icons/skills/natural_world.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Natural World","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.natural-world","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"_id":"ld78TITwKNFPpanQ","name":"Fast Talk","type":"skill","img":"systems/CoC7/assets/icons/skills/fast_talk.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Fast Talk","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fast-talk","lang":"en","priority":0}}}} +{"_id":"m2pYjKk4Gk3FcEBL","name":"Firearms (Rifle/Shotgun)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_rifle_shotgun.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":25,"properties":{"firearm":true,"combat":true,"special":true},"skillName":"Rifle/Shotgun","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-rifle-shotgun","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"m6V53lyfz7zh95FE","name":"Art/Craft (Acting)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_acting.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"special":true,"push":true},"skillName":"Acting","specialization":"Art/Craft"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-acting","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"_id":"m8sBJxvuUdtQ2mDU","name":"Art/Craft (Fine Art)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_fine_art.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"special":true,"push":true},"skillName":"Fine Art","specialization":"Art/Craft"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-fine-art","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"_id":"mEblnQjptKvKCeIg","name":"Hypnosis","type":"skill","img":"systems/CoC7/assets/icons/skills/hypnosis.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"rarity":true,"push":true},"skillName":"Hypnosis","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.hypnosis","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"nHaWNwtW3Lg0sqYJ","name":"Spot Hidden","type":"skill","img":"systems/CoC7/assets/icons/skills/spot_hidden.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":25,"properties":{"push":true},"skillName":"Spot Hidden","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.spot-hidden","lang":"en","priority":0}}}} +{"_id":"nZ8rdL4PLb7A7f5B","name":"First Aid","type":"skill","img":"systems/CoC7/assets/icons/skills/first_aid.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":30,"properties":{"push":true},"skillName":"First Aid","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.first-aid","lang":"en","priority":0}}}} +{"_id":"o7TdzbuSP7ticONf","name":"Ride","type":"skill","img":"systems/CoC7/assets/icons/skills/ride.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Ride","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.ride","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"_id":"oEfvPMTx0cgyPlgV","name":"Electronics","type":"skill","img":"systems/CoC7/assets/icons/skills/electronics.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Electronics","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.electronics","lang":"en","eras":{"modern":true,"modernPulp":true},"priority":0}}}} +{"_id":"oh5eFj00Wohnx1My","name":"Climb","type":"skill","img":"systems/CoC7/assets/icons/skills/climb.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Climb","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.climb","lang":"en","priority":0}}}} +{"_id":"ovIp66Luwfwbq28F","name":"Anthropology","type":"skill","img":"systems/CoC7/assets/icons/skills/anthropology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Anthropology","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.anthropology","lang":"en","eras":{"standard":true,"modern":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"qET2wCGGdy3z18Gc","name":"Firearms (Artillery)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_artillery.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"firearm":true,"combat":true,"special":true,"rarity":true},"skillName":"Artillery","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-artillery","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"rAK5soSX1n3jXj2A","name":"Drive Horse / Oxen","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"description":{"value":"

See the Cthulhu Invictus

"},"base":20,"properties":{"push":true},"skillName":"Drive Horse / Oxen","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.drive-horse-oxen","lang":"en","eras":{"darkAges":true,"darkAgesPulp":true,"invictus":true},"priority":0}}}} +{"_id":"rCJKGay6D0ucqgeg","name":"Lore (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/classical_knowledge.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"requiresname":true,"rarity":true,"push":true},"skillName":"Any","specialization":"Lore"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.lore-any","lang":"en","eras":{"standard":true,"modern":true},"priority":0}}}} +{"_id":"rXBU2GofiO2qOsGv","name":"Psychoanalysis","type":"skill","img":"systems/CoC7/assets/icons/skills/psychoanalysis.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"push":true},"skillName":"Psychoanalysis","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.psychoanalysis","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"rhJ1Q9OB3uTUZmjD","name":"Language (Own)","type":"skill","img":"systems/CoC7/assets/icons/skills/language.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":"@EDU","properties":{"push":true,"special":true,"requiresname":true,"keepbasevalue":true},"skillName":"Own","specialization":"Language"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.language-own","lang":"en","priority":0}}}} +{"_id":"sWt5Q3ZXd6NlwhXU","name":"Fighting (Throw)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_throw.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":20,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Throw","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-throw","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"sqenne0VZoF54W5k","name":"Drive Wagon / Coach","type":"skill","img":"systems/CoC7/assets/icons/skills/cartwheel.svg","system":{"description":{"value":"

See the Down Darker Trails Rulebook

"},"base":20,"properties":{"push":true},"skillName":"Drive Wagon / Coach","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.drive-wagon-coach","lang":"en","eras":{"downDarkerTrails":true,"downDarkerTrailsPulp":true},"priority":0}}}} +{"_id":"t7uiYybrk8dHFdjp","name":"Empire","type":"skill","img":"systems/CoC7/assets/icons/skills/laurel_crown.svg","system":{"description":{"value":"

See the Cthulhu Invictus

"},"base":25,"properties":{"push":true},"skillName":"Empire","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.empire","lang":"en","eras":{"invictus":true},"priority":0}}}} +{"_id":"uMzSNURmZqjxr7mU","name":"Persuade","type":"skill","img":"systems/CoC7/assets/icons/skills/persuade.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":10,"properties":{"push":true},"skillName":"Persuade","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.persuade","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"uQsVn8K6XRXQmtaI","name":"Pilot (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/pilot_any.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"requiresname":true,"push":true},"skillName":"Any","specialization":"Pilot"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.pilot-any","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"vS8bsPWFlwgOecoB","name":"Fighting (Brawl)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":25,"properties":{"fighting":true,"combat":true,"special":true},"skillName":"Brawl","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-brawl","lang":"en","priority":0}}}} +{"_id":"vYrJ5h9cIQBzvw8E","name":"Credit Rating","type":"skill","img":"systems/CoC7/assets/icons/skills/credit_rating.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":0,"properties":{"noxpgain":true,"push":true},"skillName":"Credit Rating","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.credit-rating","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"downDarkerTrails":true,"downDarkerTrailsPulp":true,"gasLight":true},"priority":0}}}} +{"_id":"w7hWVU14syjweIH2","name":"Science (Meteorology)","type":"skill","img":"systems/CoC7/assets/icons/skills/science_meteorology.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":1,"properties":{"special":true,"push":true},"skillName":"Meteorology","specialization":"Science"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.science-meteorology","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true},"priority":0}}}} +{"_id":"wK8XxNj9QwXlGFEb","name":"Dodge","type":"skill","img":"systems/CoC7/assets/icons/skills/dodge.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":"1/2*@DEX","skillName":"Dodge","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.dodge","lang":"en","priority":0}}}} +{"_id":"wOs3gryeGRPkGoWD","name":"Appraise","type":"skill","img":"systems/CoC7/assets/icons/skills/appraise.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"push":true},"skillName":"Appraise","specialization":""},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.appraise","lang":"en","priority":0}}}} +{"_id":"zcvnv8qY4GrVwwTL","name":"Art/Craft (Forgery)","type":"skill","img":"systems/CoC7/assets/icons/skills/art_craft_forgery.svg","system":{"description":{"value":"

See the Call of Cthulhu - 7th Ed Core Rulebook

"},"base":5,"properties":{"special":true,"push":true},"skillName":"Forgery","specialization":"Art/Craft"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.art-craft-forgery","lang":"en","eras":{"standard":true,"modern":true,"modernPulp":true,"pulp":true,"gasLight":true},"priority":0}}}} +{"name":"Fighting (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/fighting_brawl.svg","system":{"base":0,"description":{"value":"

Use in occupations / archetypes to prompt to select one Fighting skill

"},"properties":{"fighting":true,"combat":true,"special":true,"picknameonly":true},"skillName":"Any","specialization":"Fighting"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.fighting-any","lang":"en","priority":0}}},"_id":"4y7D44TpkHVKxA7s"} +{"name":"Firearms (Any)","type":"skill","img":"systems/CoC7/assets/icons/skills/firearms_handgun.svg","system":{"base":0,"description":{"value":"

Use in occupations / archetypes to prompt to select one Firearms skill

"},"properties":{"firearm":true,"combat":true,"special":true,"picknameonly":true},"skillName":"Any","specialization":"Firearms"},"flags":{"CoC7":{"cocidFlag":{"id":"i.skill.firearms-any","lang":"en","priority":0}}},"_id":"YPiD2ubZensxjKGU"} \ No newline at end of file diff --git a/styles/sheets/sheet.less b/styles/sheets/sheet.less index 33e7ba067..82b7c46ce 100644 --- a/styles/sheets/sheet.less +++ b/styles/sheets/sheet.less @@ -5,33 +5,83 @@ top: 2.2rem; right: 1rem; } + .editor { width: 100%; height: 100%; } + .editor-content { height: 100%; overflow-y: auto; word-break: break-word; } } + +.coc7.coc-id-editor { + a.copy-to-clipboard { + flex: 0 0 20px; + align-self: center; + text-align: right; + } + + fieldset.item-sheet-properties { + label { + height: auto; + white-space: break-spaces; + } + + span.warning { + outline: 2px dashed rgba(255, 100, 0, 0.3); + background-color: rgba(255, 100, 0, 0.3); + } + + td.eracolumn { + width: 18px; + + a { + cursor: help; + } + + a:hover { + text-shadow: none; + } + } + + td.shorttext { + text-align: center; + } + } +} + +.sheetV2, +.sheet { + .header-button.edit-coc-id-warning { + color: red; + } +} + .coc7.sheet { .inventory { height: 100%; } + .inventory-list, .effects-list { list-style: none; margin: 0; padding: 0 5px; scrollbar-width: thin; + .item { line-height: 16px; padding: 0 2px; border-bottom: 1px solid @colorFaint; + &:last-child { border-bottom: none; } + .item-name { // cursor: pointer; max-height: 16px; @@ -39,38 +89,47 @@ text-overflow: ellipsis; overflow: hidden; } + .item-image { flex: 0 0 16px; background-size: 16px; margin: 0 5px 0 0; height: 16px; border: none; + &:hover { background-image: none !important; cursor: default; } } + h4 { margin: 0; white-space: nowrap; overflow: hidden; } + &.rollable:hover .item-image { background-image: url('/icons/svg/d20-grey.svg') !important; } + &.rollable .item-image:hover { background-image: url('/icons/svg/d20-black.svg') !important; } + i.attuned { color: @colorTan; } + .item-uses input { width: 24px; text-align: center; } + .item-properties { margin-top: 3px; } + .item-recharge { flex: 0 0 80px; text-align: right; @@ -79,6 +138,7 @@ white-space: nowrap; } } + .inventory-header, .items-header { margin: 2px 0; @@ -87,16 +147,19 @@ border: @borderGroove; font-weight: bold; line-height: 25px; + h3 { margin: 0 -5px 0 0; padding-left: 5px; font-size: 1.125em; border-bottom: none; } + .item-controls a.item-create { flex: 0 0 100%; } } + .item-detail { flex: 0 0 70px; font-size: 12px; @@ -106,38 +169,46 @@ word-break: break-word; white-space: nowrap; overflow: hidden; + &:last-child { border-right: none; } + &.item-action { flex: 0 0 100px; } } + .item-weight { flex: 0 0 60px; border-left: 1px solid @colorFaint; border-right: 1px solid @colorFaint; } + .item-list { list-style: none; margin: 0 0 10px; padding: 0; } + .item-controls { flex: 0 0 48px; .flexrow(); justify-content: flex-end; height: 16px; + a { flex: 0 0 16px; font-size: 10px; text-align: center; color: @colorTan; + &.effect-control { flex: 1; } } } + .item-summary { flex: 0 0 100%; font-size: 12px; @@ -146,6 +217,7 @@ border-top: @borderGroove; } } + nav.sheet-tabs a.item { line-height: 27px; font-size: 18px; diff --git a/styles/sheets/sheets.less b/styles/sheets/sheets.less index 5418a5e57..3843911d8 100644 --- a/styles/sheets/sheets.less +++ b/styles/sheets/sheets.less @@ -28,70 +28,72 @@ html { // line-height: 2rem; // } -.tabs { - display: flex; - flex-direction: row; - flex-wrap: wrap; - justify-content: flex-start; -} +.coc7 { + .tabs { + display: flex; + flex-direction: row; + flex-wrap: wrap; + justify-content: flex-start; + } -.tabs>* { - flex: 1; -} + .tabs>* { + flex: 1; + } -.tabs>.flex0 { - display: block; - flex: 0; -} + .tabs>.flex0 { + display: block; + flex: 0; + } -.tabs>.flex1 { - flex: 1; -} + .tabs>.flex1 { + flex: 1; + } -.tabs>.flex2 { - flex: 2; -} + .tabs>.flex2 { + flex: 2; + } -.tabs>.flex3 { - flex: 3; -} + .tabs>.flex3 { + flex: 3; + } -.tabs .item { - text-align: center; -} + .tabs .item { + text-align: center; + } -.tabs .item.active { - text-shadow: 0 0 10px red; -} + .tabs .item.active { + text-shadow: 0 0 10px red; + } -.tab[data-tab] { - display: none; -} + .tab[data-tab] { + display: none; + } -.tab[data-tab].active { - display: block; -} + .tab[data-tab].active { + display: block; + } -.tab[data-tab].active.flexrow, -.tab[data-tab].active.flexcol { - display: flex; -} + .tab[data-tab].active.flexrow, + .tab[data-tab].active.flexcol { + display: flex; + } -a.keeper-only-tab { - flex: 0 0 30px; - color: @colorGreen; -} + a.keeper-only-tab { + flex: 0 0 30px; + color: @colorGreen; + } -h3.keeper-only-tab i { - color: @colorGreen; -} + h3.keeper-only-tab i { + color: @colorGreen; + } -.permission-limited img { - height: auto !important; - width: 580px !important; - max-width: none !important; - margin: 0 !important; - flex: none !important; + .permission-limited img { + height: auto !important; + width: 580px !important; + max-width: none !important; + margin: 0 !important; + flex: none !important; + } } .sheetV2 { diff --git a/template.json b/template.json index f08d40812..38c2725da 100644 --- a/template.json +++ b/template.json @@ -352,7 +352,6 @@ "malfunction": null, "blastRadius": null, "properties": {}, - "eras": {}, "price": {} }, "skill": { @@ -375,7 +374,6 @@ "value": -1, "attributes": {}, "properties": {}, - "eras": {}, "flags": {} }, "occupation": { @@ -451,7 +449,6 @@ "personal": null, "attributes": {}, "properties": {}, - "eras": {}, "flags": {} }, "archetype": { @@ -486,7 +483,6 @@ "skills": [], "attributes": {}, "properties": {}, - "eras": {}, "flags": {} }, "setup": { @@ -531,7 +527,6 @@ "backstory": "", "attributes": {}, "properties": {}, - "eras": {}, "flags": {} }, "spell": { diff --git a/templates/actors/parts/character-development-v2.html b/templates/actors/parts/character-development-v2.html index a30212ffd..6cd4b4d11 100644 --- a/templates/actors/parts/character-development-v2.html +++ b/templates/actors/parts/character-development-v2.html @@ -22,7 +22,7 @@ {{/unless}} - {{#if skill.system.properties.special}}{{skill.system.specialization}} :{{/if}}{{skill.name}} + {{skill.name}}
{{skill.system.base}}
diff --git a/templates/actors/parts/development-controls.html b/templates/actors/parts/development-controls.html index 29a9077e4..65eb0f5be 100644 --- a/templates/actors/parts/development-controls.html +++ b/templates/actors/parts/development-controls.html @@ -51,8 +51,8 @@
{{#if allowCharCreation}} {{#if data.system.infos.occupationSet}} -
- +
+
{{/if}} {{#if data.system.infos.archetypeSet}} diff --git a/templates/apps/coc-id-editor.hbs b/templates/apps/coc-id-editor.hbs new file mode 100644 index 000000000..7917a7049 --- /dev/null +++ b/templates/apps/coc-id-editor.hbs @@ -0,0 +1,168 @@ +
+

{{localize 'CoC7.CoCIDFlag.title'}}

+

{{{localize 'CoC7.CoCIDFlag.summary' type=object.type}}}

+ +
+ +
+ {{#if existingKeys.length}} + + {{else}} + {{idPrefix}} + + {{/if}} + {{#if options.editable}} + + {{/if}} +
+
+ {{#if (and existingKeys.length (not isSystemID))}} +
+ +
+ {{idPrefix}} + +
+
+ {{/if}} +
+ + +
+
+ +
+ {{#each eras as |era key|}} + {{era.name}} + {{/each}} +
+
+
+ +
+ +
+
+ +
+ Info +
+ +
+
+ {{localize 'CoC7.CoCIDFlag.documents-in-world' count=worldDuplicates}}{{#if warnDuplicateWorldPriority}} {{localize 'CoC7.CoCIDFlag.error.duplicate'}}{{/if}} + + + {{#each usedEras as |era|}} + + {{/each}} + + + + + + {{#each worldDocumentInfo}} + + {{#each ../usedEras as |era|}} + + {{/each}} + + + + + + {{/each}} +
PriorityLangLinkFolder
+ {{#if (lookup ../eras era.id)}} + + {{else}} + + {{/if}} + {{priority}}{{lang}}{{{link}}}{{folder}}
+
+
+ {{localize 'CoC7.CoCIDFlag.documents-in-compendiums' count=compendiumDuplicates}}{{#if warnDuplicateCompendiumPriority}} {{localize 'CoC7.CoCIDFlag.error.duplicate'}}{{/if}} + + + {{#each usedEras as |era|}} + + {{/each}} + + + + + + {{#each compendiumDocumentInfo}} + + {{#each ../usedEras as |era|}} + + {{/each}} + + + + + + {{/each}} +
PriorityLangLinkFolder
+ {{#if (lookup ../eras era.id)}} + + {{else}} + + {{/if}} + {{priority}}{{lang}}{{{link}}}{{folder}}
+
+
+
+
+ +
+ + + + +
+
+
+ +
+ + + + +
+
+
+ +
+ + + + +
+
+ {{#if (or id)}} +
+ +
+ + + + +
+
+ {{/if}} +
+
diff --git a/templates/apps/skill-specialization-select.hbs b/templates/apps/skill-specialization-select.hbs new file mode 100644 index 000000000..90968292e --- /dev/null +++ b/templates/apps/skill-specialization-select.hbs @@ -0,0 +1,39 @@ +
+
+ {{#if object.allowSelect}} +
+ +
+
+ {{/if}} + + {{#if (and object.allowCustom (eq object.selected ''))}} +
+ {{log object}} + +
+ +
+ +
+ + {{#if object.fixedBaseValue}} +
+
+ + +
+ {{/if}} +
+ {{/if}} + + +
+
diff --git a/templates/items/occupation.html b/templates/items/occupation.html index 254af9f10..6fbb562cf 100644 --- a/templates/items/occupation.html +++ b/templates/items/occupation.html @@ -165,7 +165,7 @@

{{ localize "CoC7.OccupationPoints" }}

{{/if}}
-

{{ localize "CoC7.CreditRatingSkillName" }}

+

{{ localize "CoC7.CoCIDFlag.keys.i.skill.credit-rating" }}

diff --git a/templates/items/setup.html b/templates/items/setup.html index 84b8da94a..6eb4ec717 100644 --- a/templates/items/setup.html +++ b/templates/items/setup.html @@ -36,7 +36,7 @@

    {{#each _eras as |era key|}} {{#if era.isEnabled}} -
  1. {{localize era.name}}
  2. +
  3. {{era.name}}
  4. {{/if}} {{/each}}
diff --git a/templates/items/skill-sheet.html b/templates/items/skill-sheet.html index 5f6dd82f2..ea0bee9a2 100644 --- a/templates/items/skill-sheet.html +++ b/templates/items/skill-sheet.html @@ -34,7 +34,7 @@
{{#each _eras as |era key|}} - {{localize era.name}} + {{era.name}} {{/each}}

diff --git a/templates/items/weapon-sheet.html b/templates/items/weapon-sheet.html index d5ba75a0e..249e8fc65 100644 --- a/templates/items/weapon-sheet.html +++ b/templates/items/weapon-sheet.html @@ -95,7 +95,7 @@

{{ localize "CoC7.EraAvailability" }}

{{#each _eras as |era key|}} - {{localize era.name}} + {{era.name}} {{/each}}
From 0d12347a2bd0812145d8444fa81fded13fe94843 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 16 Jan 2023 10:26:31 +0000 Subject: [PATCH 09/78] Updated translations list --- .github/TRANSLATIONS.md | 357 ++++++++++++++-------------------------- 1 file changed, 128 insertions(+), 229 deletions(-) diff --git a/.github/TRANSLATIONS.md b/.github/TRANSLATIONS.md index b6dc34932..2451480b8 100644 --- a/.github/TRANSLATIONS.md +++ b/.github/TRANSLATIONS.md @@ -2,216 +2,119 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. Feel free to create a new `*.json` file for a language that is not shown here! -The following translations are currently up to date **de**, **fr**, **it** +The following translations have more than 100 untranslated strings **cn**, **cs**, **es**, **ja**, **pt-BR**, **ru**, **sv**, [are you able to help?](./ABANDONED.md) -The following translations have more than 100 untranslated strings **cn**, **cs**, **es**, **ja**, **ru**, **sv**, [are you able to help?](./ABANDONED.md) - -|Key|ko|pl|pt-BR|zh-TW| -|:---|:---:|:---:|:---:|:---:| -|**Remaining**:|**14**|**2**|**84**|**3**| -|[CoC7.ActorDataLinked](#coc7actordatalinked)|✅|✅|❌|✅| -|[CoC7.ActorDataNotLinked](#coc7actordatanotlinked)|✅|✅|❌|✅| -|[CoC7.ActorImported](#coc7actorimported)|✅|✅|❌|✅| -|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|❌|✅|❌|✅| -|[CoC7.ActorIsSyntheticActor](#coc7actorissyntheticactor)|✅|✅|❌|✅| -|[CoC7.ActorIsTokenHint](#coc7actoristokenhint)|✅|✅|❌|✅| -|[CoC7.Add](#coc7add)|✅|✅|❌|✅| -|[CoC7.AdjustedMovement](#coc7adjustedmovement)|✅|✅|❌|✅| -|[CoC7.AlreadyEncounteredInformation](#coc7alreadyencounteredinformation)|✅|✅|❌|✅| -|[CoC7.ArmorIgnored](#coc7armorignored)|✅|✅|❌|✅| -|[CoC7.BonusDieAssailantReason](#coc7bonusdieassailantreason)|✅|✅|❌|✅| -|[CoC7.CheckFailed](#coc7checkfailed)|✅|✅|❌|✅| -|[CoC7.CheckMemoryRepressed](#coc7checkmemoryrepressed)|✅|✅|❌|✅| -|[CoC7.CheckPassed](#coc7checkpassed)|✅|✅|❌|✅| -|[CoC7.CleanSkillList](#coc7cleanskilllist)|✅|✅|❌|✅| -|[CoC7.CleanSkillListHint](#coc7cleanskilllisthint)|✅|✅|❌|✅| -|[CoC7.ClearAllConditions](#coc7clearallconditions)|✅|✅|❌|✅| -|[CoC7.Damage](#coc7damage)|❌|✅|❌|✅| -|[CoC7.DamageDealTo](#coc7damagedealto)|✅|✅|❌|✅| -|[CoC7.DefinitelyInsane](#coc7definitelyinsane)|✅|✅|❌|✅| -|[CoC7.DholeHouseActorImporter](#coc7dholehouseactorimporter)|✅|✅|❌|✅| -|[CoC7.DholeHouseActorImporterSource](#coc7dholehouseactorimportersource)|✅|✅|❌|✅| -|[CoC7.DholeHouseActorImporterSummary](#coc7dholehouseactorimportersummary)|✅|✅|❌|✅| -|[CoC7.DholeHouseImportingName](#coc7dholehouseimportingname)|✅|✅|❌|✅| -|[CoC7.DholeHouseInvalidActor](#coc7dholehouseinvalidactor)|✅|✅|❌|✅| -|[CoC7.DholeHousePickYourJSONFile](#coc7dholehousepickyourjsonfile)|✅|✅|❌|✅| -|[CoC7.Disable](#coc7disable)|✅|✅|❌|✅| -|[CoC7.Duration](#coc7duration)|✅|✅|❌|✅| -|[CoC7.EffectAppliedCantOverride](#coc7effectappliedcantoverride)|✅|✅|❌|✅| -|[CoC7.EffectNew](#coc7effectnew)|✅|✅|❌|✅| -|[CoC7.Enable](#coc7enable)|✅|✅|❌|✅| -|[CoC7.ErrorActorHasNoWeaponNamed](#coc7erroractorhasnoweaponnamed)|✅|✅|❌|✅| -|[CoC7.ErrorActorHasTooManyWeaponsNamed](#coc7erroractorhastoomanyweaponsnamed)|✅|✅|❌|✅| -|[CoC7.ErrorEvaluatingDamage](#coc7errorevaluatingdamage)|✅|✅|❌|✅| -|[CoC7.ErrorNoTokensSelected](#coc7errornotokensselected)|✅|✅|❌|✅| -|[CoC7.ErrorUnableToParseArmorFormula](#coc7errorunabletoparsearmorformula)|✅|✅|❌|✅| -|[CoC7.ErrorUnableToParseFormula](#coc7errorunabletoparseformula)|✅|✅|❌|✅| -|[CoC7.ErrorUnableToParseSkillFormula](#coc7errorunabletoparseskillformula)|✅|✅|❌|✅| -|[CoC7.ErrorUnexpectedSkillsText](#coc7errorunexpectedskillstext)|✅|✅|❌|✅| -|[CoC7.ErrorUnexpectedWeaponText](#coc7errorunexpectedweapontext)|✅|✅|❌|✅| -|[CoC7.FINISH](#coc7finish)|✅|✅|❌|✅| -|[CoC7.FileUploadError](#coc7fileuploaderror)|❌|✅|❌|✅| -|[CoC7.Initiative](#coc7initiative)|✅|✅|❌|✅| -|[CoC7.LuckNotEnough](#coc7lucknotenough)|✅|✅|❌|✅| -|[CoC7.MessageRollingCharacteristic](#coc7messagerollingcharacteristic)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorActor](#coc7migrateerroractor)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorDocumentPack](#coc7migrateerrordocumentpack)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorItem](#coc7migrateerroritem)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorMacro](#coc7migrateerrormacro)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorScene](#coc7migrateerrorscene)|✅|✅|❌|✅| -|[CoC7.Migrate.ErrorTable](#coc7migrateerrortable)|✅|✅|❌|✅| -|[CoC7.MovementAction](#coc7movementaction)|✅|✅|❌|✅| -|[CoC7.PenaltyDice](#coc7penaltydice)|✅|✅|❌|✅| -|[CoC7.PenaltyDieSelfReason](#coc7penaltydieselfreason)|✅|✅|❌|✅| -|[CoC7.PickDirectory](#coc7pickdirectory)|✅|✅|❌|✅| -|[CoC7.RemoveParticipant](#coc7removeparticipant)|❌|✅|❌|✅| -|[CoC7.RemoveParticipantHint](#coc7removeparticipanthint)|❌|✅|❌|✅| -|[CoC7.Reset](#coc7reset)|✅|✅|❌|✅| -|[CoC7.Restart](#coc7restart)|✅|✅|❌|✅| -|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|❌|✅|❌|✅| -|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|❌|✅|❌|✅| -|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|❌|✅|❌|✅| -|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|❌|✅|❌|✅| -|[CoC7.Sane](#coc7sane)|✅|✅|❌|✅| -|[CoC7.Settings.DholeUpload.Directory.Hint](#coc7settingsdholeuploaddirectoryhint)|✅|✅|❌|✅| -|[CoC7.Settings.DholeUpload.Directory.Name](#coc7settingsdholeuploaddirectoryname)|✅|✅|❌|✅| -|[CoC7.SkillXpGainDisabled](#coc7skillxpgaindisabled)|✅|✅|❌|✅| -|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|❌|✅|❌|✅| -|[CoC7.UnableToUploadDholeImage](#coc7unabletouploaddholeimage)|✅|✅|❌|✅| -|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|❌|✅|❌|✅| -|[CoC7.Update](#coc7update)|✅|✅|❌|✅| -|[CoC7.UpgradeSuccessWithLuck](#coc7upgradesuccesswithluck)|✅|✅|❌|✅| -|[CoC7.WeaponSkillMain](#coc7weaponskillmain)|✅|✅|❌|✅| -|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|❌|✅|❌|✅| -|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|❌|✅|❌|❌| -|[SETTINGS.ChaseShowTokenMovement](#settingschaseshowtokenmovement)|✅|✅|❌|✅| -|[SETTINGS.ChaseShowTokenMovementHint](#settingschaseshowtokenmovementhint)|✅|✅|❌|✅| -|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|❌|✅|✅|✅| -|[SETTINGS.TitleChaseSettings](#settingstitlechasesettings)|✅|✅|❌|✅| -|[SETTINGS.TrustedCanModfyChatCard](#settingstrustedcanmodfychatcard)|✅|✅|❌|✅| -|[SETTINGS.TrustedCanModfyChatCardHint](#settingstrustedcanmodfychatcardhint)|✅|✅|❌|✅| -|[SETTINGS.TrustedCanSeeChatCard](#settingstrustedcanseechatcard)|✅|✅|❌|✅| -|[SETTINGS.TrustedCanSeeChatCardHint](#settingstrustedcanseechatcardhint)|✅|✅|❌|✅| -|[SETTINGS.UseContextMenus](#settingsusecontextmenus)|✅|❌|❌|❌| -|[SETTINGS.UseContextMenusHint](#settingsusecontextmenushint)|✅|❌|❌|❌| -##### CoC7.ActorDataLinked -``` "CoC7.ActorDataLinked": "Actor data are linked",``` -##### CoC7.ActorDataNotLinked -``` "CoC7.ActorDataNotLinked": "Actor data are NOT linked",``` -##### CoC7.ActorImported -``` "CoC7.ActorImported": "New {actorType} imported: {actorName}",``` +|Key|de|fr|it|ko|pl|zh-TW| +|:---|:---:|:---:|:---:|:---:|:---:|:---:| +|**Remaining**:|**36**|**36**|**36**|**50**|**38**|**39**| +|[CoC7.ActorImporterUploadError](#coc7actorimporteruploaderror)|✅|✅|✅|❌|✅|✅| +|[CoC7.CoCIDFlag.documents-in-compendiums](#coc7cocidflagdocumentsincompendiums)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.documents-in-world](#coc7cocidflagdocumentsinworld)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.error.document-not-found](#coc7cocidflagerrordocumentnotfound)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.error.documents-not-found](#coc7cocidflagerrordocumentsnotfound)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.error.duplicate](#coc7cocidflagerrorduplicate)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.error.incorrect.type](#coc7cocidflagerrorincorrecttype)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.error.unknown-era](#coc7cocidflagerrorunknownera)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.foundry-id](#coc7cocidflagfoundryid)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.foundry-uuid](#coc7cocidflagfoundryuuid)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.get-document-like-this](#coc7cocidflaggetdocumentlikethis)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.get-this-document](#coc7cocidflaggetthisdocument)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.guess](#coc7cocidflagguess)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.id](#coc7cocidflagid)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.key](#coc7cocidflagkey)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.new](#coc7cocidflagnew)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.others](#coc7cocidflagothers)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.priority](#coc7cocidflagpriority)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.summary](#coc7cocidflagsummary)|❌|❌|❌|❌|❌|❌| +|[CoC7.CoCIDFlag.title](#coc7cocidflagtitle)|❌|❌|❌|❌|❌|❌| +|[CoC7.CustomSpecialisationLabel](#coc7customspecialisationlabel)|❌|❌|❌|❌|❌|❌| +|[CoC7.Damage](#coc7damage)|✅|✅|✅|❌|✅|✅| +|[CoC7.EraDarkAgesPulp](#coc7eradarkagespulp)|❌|❌|❌|❌|❌|❌| +|[CoC7.EraDownDarkerTrailsPulp](#coc7eradowndarkertrailspulp)|❌|❌|❌|❌|❌|❌| +|[CoC7.EraModernPulp](#coc7eramodernpulp)|❌|❌|❌|❌|❌|❌| +|[CoC7.FileUploadError](#coc7fileuploaderror)|✅|✅|✅|❌|✅|✅| +|[CoC7.RemoveParticipant](#coc7removeparticipant)|✅|✅|✅|❌|✅|✅| +|[CoC7.RemoveParticipantHint](#coc7removeparticipanthint)|✅|✅|✅|❌|✅|✅| +|[CoC7.RollDifficultyCriticalTitle](#coc7rolldifficultycriticaltitle)|✅|✅|✅|❌|✅|✅| +|[CoC7.RollDifficultyExtremeTitle](#coc7rolldifficultyextremetitle)|✅|✅|✅|❌|✅|✅| +|[CoC7.RollDifficultyHardTitle](#coc7rolldifficultyhardtitle)|✅|✅|✅|❌|✅|✅| +|[CoC7.RollDifficultyRegularTitle](#coc7rolldifficultyregulartitle)|✅|✅|✅|❌|✅|✅| +|[CoC7.Settings.DropCoCID.Dialog](#coc7settingsdropcociddialog)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.Hint](#coc7settingsdropcocidhint)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.IgnoreCoCID](#coc7settingsdropcocidignorecocid)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.Name](#coc7settingsdropcocidname)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.Prompt](#coc7settingsdropcocidprompt)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.Remember](#coc7settingsdropcocidremember)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.DropCoCID.UseCoCID](#coc7settingsdropcocidusecocid)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.WorldEra.Hint](#coc7settingsworlderahint)|❌|❌|❌|❌|❌|❌| +|[CoC7.Settings.WorldEra.Name](#coc7settingsworlderaname)|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillKeepBaseValue](#coc7skillkeepbasevalue)|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillPickNameOnly](#coc7skillpicknameonly)|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillRarityShort](#coc7skillrarityshort)|❌|❌|❌|❌|❌|❌| +|[CoC7.SkillRequiresName](#coc7skillrequiresname)|❌|❌|❌|❌|❌|❌| +|[CoC7.TextFieldInvalidJSON](#coc7textfieldinvalidjson)|✅|✅|✅|❌|✅|✅| +|[CoC7.UnarmedWeaponName](#coc7unarmedweaponname)|✅|✅|✅|❌|✅|✅| +|[CoC7.combatCard.automaticSuccess](#coc7combatcardautomaticsuccess)|✅|✅|✅|❌|✅|✅| +|[CoC7.rangeCombatCard.SurprisedTargetTitle](#coc7rangecombatcardsurprisedtargettitle)|✅|✅|✅|❌|✅|❌| +|[SETTINGS.DefaultDifficulty](#settingsdefaultdifficulty)|✅|✅|✅|❌|✅|✅| +|[SETTINGS.UseContextMenus](#settingsusecontextmenus)|✅|✅|✅|✅|❌|❌| +|[SETTINGS.UseContextMenusHint](#settingsusecontextmenushint)|✅|✅|✅|✅|❌|❌| ##### CoC7.ActorImporterUploadError ``` "CoC7.ActorImporterUploadError": "Import stopped, unable to write image",``` -##### CoC7.ActorIsSyntheticActor -``` "CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)",``` -##### CoC7.ActorIsTokenHint -``` "CoC7.ActorIsTokenHint": "Actor is a token",``` -##### CoC7.Add -``` "CoC7.Add": "Add",``` -##### CoC7.AdjustedMovement -``` "CoC7.AdjustedMovement": "Adjusted movement",``` -##### CoC7.AlreadyEncounteredInformation -``` "CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}",``` -##### CoC7.ArmorIgnored -``` "CoC7.ArmorIgnored": "Armor Ignored",``` -##### CoC7.BonusDieAssailantReason -``` "CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)",``` -##### CoC7.CheckFailed -``` "CoC7.CheckFailed": "Check failed",``` -##### CoC7.CheckMemoryRepressed -``` "CoC7.CheckMemoryRepressed": "Memory repressed",``` -##### CoC7.CheckPassed -``` "CoC7.CheckPassed": "Check passed",``` -##### CoC7.CleanSkillList -``` "CoC7.CleanSkillList": "Clean skill list",``` -##### CoC7.CleanSkillListHint -``` "CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

",``` -##### CoC7.ClearAllConditions -``` "CoC7.ClearAllConditions": "Clear All Conditions",``` +##### CoC7.CoCIDFlag.documents-in-compendiums +``` "CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums",``` +##### CoC7.CoCIDFlag.documents-in-world +``` "CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world",``` +##### CoC7.CoCIDFlag.error.document-not-found +``` "CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.",``` +##### CoC7.CoCIDFlag.error.documents-not-found +``` "CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting.",``` +##### CoC7.CoCIDFlag.error.duplicate +``` "CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!",``` +##### CoC7.CoCIDFlag.error.incorrect.type +``` "CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.",``` +##### CoC7.CoCIDFlag.error.unknown-era +``` "CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"",``` +##### CoC7.CoCIDFlag.foundry-id +``` "CoC7.CoCIDFlag.foundry-id": "Foundry ID",``` +##### CoC7.CoCIDFlag.foundry-uuid +``` "CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID",``` +##### CoC7.CoCIDFlag.get-document-like-this +``` "CoC7.CoCIDFlag.get-document-like-this": "Get document like this",``` +##### CoC7.CoCIDFlag.get-this-document +``` "CoC7.CoCIDFlag.get-this-document": "Get this document",``` +##### CoC7.CoCIDFlag.guess +``` "CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.",``` +##### CoC7.CoCIDFlag.id +``` "CoC7.CoCIDFlag.id": "ID",``` +##### CoC7.CoCIDFlag.key +``` "CoC7.CoCIDFlag.key": "System ID (CoC ID)",``` +##### CoC7.CoCIDFlag.new +``` "CoC7.CoCIDFlag.new": "- Custom System ID -",``` +##### CoC7.CoCIDFlag.others +``` "CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)",``` +##### CoC7.CoCIDFlag.priority +``` "CoC7.CoCIDFlag.priority": "System ID Priority",``` +##### CoC7.CoCIDFlag.summary +``` "CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.",``` +##### CoC7.CoCIDFlag.title +``` "CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)",``` +##### CoC7.CustomSpecialisationLabel +``` "CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}",``` ##### CoC7.Damage ``` "CoC7.Damage": "Damage",``` -##### CoC7.DamageDealTo -``` "CoC7.DamageDealTo": "Damage {name} {damage}HP",``` -##### CoC7.DefinitelyInsane -``` "CoC7.DefinitelyInsane": "Good for the asylum",``` -##### CoC7.DholeHouseActorImporter -``` "CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON",``` -##### CoC7.DholeHouseActorImporterSource -``` "CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor",``` -##### CoC7.DholeHouseActorImporterSummary -``` "CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.",``` -##### CoC7.DholeHouseImportingName -``` "CoC7.DholeHouseImportingName": "About to import: ",``` -##### CoC7.DholeHouseInvalidActor -``` "CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character",``` -##### CoC7.DholeHousePickYourJSONFile -``` "CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House",``` -##### CoC7.Disable -``` "CoC7.Disable": "Disable",``` -##### CoC7.Duration -``` "CoC7.Duration": "Duration",``` -##### CoC7.EffectAppliedCantOverride -``` "CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.",``` -##### CoC7.EffectNew -``` "CoC7.EffectNew": "New effect",``` -##### CoC7.Enable -``` "CoC7.Enable": "Enable",``` -##### CoC7.ErrorActorHasNoWeaponNamed -``` "CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}",``` -##### CoC7.ErrorActorHasTooManyWeaponsNamed -``` "CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`",``` -##### CoC7.ErrorEvaluatingDamage -``` "CoC7.ErrorEvaluatingDamage": "Error evaluating damage",``` -##### CoC7.ErrorNoTokensSelected -``` "CoC7.ErrorNoTokensSelected": "No tokens selected",``` -##### CoC7.ErrorUnableToParseArmorFormula -``` "CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.",``` -##### CoC7.ErrorUnableToParseFormula -``` "CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula",``` -##### CoC7.ErrorUnableToParseSkillFormula -``` "CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}",``` -##### CoC7.ErrorUnexpectedSkillsText -``` "CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import",``` -##### CoC7.ErrorUnexpectedWeaponText -``` "CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import",``` -##### CoC7.FINISH -``` "CoC7.FINISH": "--F-I-N-I-S-H--",``` +##### CoC7.EraDarkAgesPulp +``` "CoC7.EraDarkAgesPulp": "Dark Ages - Pulp",``` +##### CoC7.EraDownDarkerTrailsPulp +``` "CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp",``` +##### CoC7.EraModernPulp +``` "CoC7.EraModernPulp": "Modern - Pulp",``` ##### CoC7.FileUploadError ``` "CoC7.FileUploadError": "Unable to write image, file upload error",``` -##### CoC7.Initiative -``` "CoC7.Initiative": "Initiative",``` -##### CoC7.LuckNotEnough -``` "CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check",``` -##### CoC7.MessageRollingCharacteristic -``` "CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}",``` -##### CoC7.Migrate.ErrorActor -``` "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}",``` -##### CoC7.Migrate.ErrorDocumentPack -``` "CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}",``` -##### CoC7.Migrate.ErrorItem -``` "CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}",``` -##### CoC7.Migrate.ErrorMacro -``` "CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}",``` -##### CoC7.Migrate.ErrorScene -``` "CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}",``` -##### CoC7.Migrate.ErrorTable -``` "CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}",``` -##### CoC7.MovementAction -``` "CoC7.MovementAction": "Movement action",``` -##### CoC7.PenaltyDice -``` "CoC7.PenaltyDice": "Penalty Dice",``` -##### CoC7.PenaltyDieSelfReason -``` "CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)",``` -##### CoC7.PickDirectory -``` "CoC7.PickDirectory": "Pick Directory",``` ##### CoC7.RemoveParticipant ``` "CoC7.RemoveParticipant": "Remove participant",``` ##### CoC7.RemoveParticipantHint ``` "CoC7.RemoveParticipantHint": "Participant will be completely removed from the chase",``` -##### CoC7.Reset -``` "CoC7.Reset": "Reset",``` -##### CoC7.Restart -``` "CoC7.Restart": "Restart",``` ##### CoC7.RollDifficultyCriticalTitle ``` "CoC7.RollDifficultyCriticalTitle": "Critical difficulty",``` ##### CoC7.RollDifficultyExtremeTitle @@ -220,46 +123,42 @@ The following translations have more than 100 untranslated strings **cn**, **cs* ``` "CoC7.RollDifficultyHardTitle": "Hard difficulty",``` ##### CoC7.RollDifficultyRegularTitle ``` "CoC7.RollDifficultyRegularTitle": "Regular difficulty",``` -##### CoC7.Sane -``` "CoC7.Sane": "Sane",``` -##### CoC7.Settings.DholeUpload.Directory.Hint -``` "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.",``` -##### CoC7.Settings.DholeUpload.Directory.Name -``` "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory",``` -##### CoC7.SkillXpGainDisabled -``` "CoC7.SkillXpGainDisabled": "XP Gain disabled.",``` +##### CoC7.Settings.DropCoCID.Dialog +``` "CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.",``` +##### CoC7.Settings.DropCoCID.Hint +``` "CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item",``` +##### CoC7.Settings.DropCoCID.IgnoreCoCID +``` "CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID",``` +##### CoC7.Settings.DropCoCID.Name +``` "CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops",``` +##### CoC7.Settings.DropCoCID.Prompt +``` "CoC7.Settings.DropCoCID.Prompt": "Prompt each time",``` +##### CoC7.Settings.DropCoCID.Remember +``` "CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings",``` +##### CoC7.Settings.DropCoCID.UseCoCID +``` "CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible",``` +##### CoC7.Settings.WorldEra.Hint +``` "CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.",``` +##### CoC7.Settings.WorldEra.Name +``` "CoC7.Settings.WorldEra.Name": "Era for the world",``` +##### CoC7.SkillKeepBaseValue +``` "CoC7.SkillKeepBaseValue": "Keep Base Value",``` +##### CoC7.SkillPickNameOnly +``` "CoC7.SkillPickNameOnly": "Select Specialization",``` +##### CoC7.SkillRarityShort +``` "CoC7.SkillRarityShort": "[UC]",``` +##### CoC7.SkillRequiresName +``` "CoC7.SkillRequiresName": "Requires Name",``` ##### CoC7.TextFieldInvalidJSON ``` "CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again",``` -##### CoC7.UnableToUploadDholeImage -``` "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.",``` ##### CoC7.UnarmedWeaponName ``` "CoC7.UnarmedWeaponName": "Unarmed",``` -##### CoC7.Update -``` "CoC7.Update": "Update",``` -##### CoC7.UpgradeSuccessWithLuck -``` "CoC7.UpgradeSuccessWithLuck": "Upgrade to {difficultyName} success for {luckToSpend} luck.",``` -##### CoC7.WeaponSkillMain -``` "CoC7.WeaponSkillMain": "Main skill",``` ##### CoC7.combatCard.automaticSuccess ``` "CoC7.combatCard.automaticSuccess": "Automatic Success",``` ##### CoC7.rangeCombatCard.SurprisedTargetTitle ``` "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target",``` -##### SETTINGS.ChaseShowTokenMovement -``` "SETTINGS.ChaseShowTokenMovement": "Show token movement.",``` -##### SETTINGS.ChaseShowTokenMovementHint -``` "SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.",``` ##### SETTINGS.DefaultDifficulty ``` "SETTINGS.DefaultDifficulty": "Default check difficulty",``` -##### SETTINGS.TitleChaseSettings -``` "SETTINGS.TitleChaseSettings": "Chase Settings",``` -##### SETTINGS.TrustedCanModfyChatCard -``` "SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card",``` -##### SETTINGS.TrustedCanModfyChatCardHint -``` "SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them",``` -##### SETTINGS.TrustedCanSeeChatCard -``` "SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections",``` -##### SETTINGS.TrustedCanSeeChatCardHint -``` "SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!",``` ##### SETTINGS.UseContextMenus ``` "SETTINGS.UseContextMenus": "Use context menus",``` ##### SETTINGS.UseContextMenusHint From 9aa27790a519d7e1bef04e9b8bbd88c552624d21 Mon Sep 17 00:00:00 2001 From: snap01 Date: Mon, 16 Jan 2023 10:26:31 +0000 Subject: [PATCH 10/78] [create-pull-request] automated change --- .github/ABANDONED.md | 400 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 371 insertions(+), 29 deletions(-) diff --git a/.github/ABANDONED.md b/.github/ABANDONED.md index a7efe1f0c..91d38c25c 100644 --- a/.github/ABANDONED.md +++ b/.github/ABANDONED.md @@ -2,21 +2,23 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry VTT better! Below is a list of translations keys on existing files that still need translated, based on `en.json`. -[cn.json (232 untranslated strings)](#cnjson) +[cn.json (268 untranslated strings)](#cnjson) -[cs.json (417 untranslated strings)](#csjson) +[cs.json (453 untranslated strings)](#csjson) -[es.json (214 untranslated strings)](#esjson) +[es.json (250 untranslated strings)](#esjson) -[ja.json (202 untranslated strings)](#jajson) +[ja.json (238 untranslated strings)](#jajson) -[ru.json (1079 untranslated strings)](#rujson) +[pt-BR.json (120 untranslated strings)](#ptbrjson) -[sv.json (200 untranslated strings)](#svjson) +[ru.json (1115 untranslated strings)](#rujson) + +[sv.json (236 untranslated strings)](#svjson) ## cn.json -232 untranslated strings +268 untranslated strings ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -28,6 +30,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.FINISH": "--F-I-N-I-S-H--", "CoC7.days": "days(s)", "CoC7.months": "months(s)", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.Restart": "Restart", "CoC7.Reset": "Reset", "CoC7.Initiative": "Initiative", @@ -52,7 +55,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.CheckPassed": "Check passed", "CoC7.CheckMemoryRepressed": "Memory repressed", "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.ErrorInvalidCardType": "Card Type", "CoC7.ErrorInvalidRollType": "Roll Type", "CoC7.UnarmedWeaponName": "Unarmed", @@ -235,6 +245,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.ClearAllConditions": "Clear All Conditions", "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", "CoC7.ToolTipSanity": "
  1. Left click roll check with options
  2. Alt/Option + Left click roll sanity loss with options
  3. Shift + Left click Immediate regular difficulty roll
  4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
  1. Right click Opposed check with options
  2. Shift + Right click Immediate opposed check
  1. Alt/Option + Right click Combined check with options
  2. Shift + Alt/Option + Right click Immediate combined check
", @@ -249,10 +268,29 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.UseContextMenus": "Use context menus", "SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` ## cs.json -417 untranslated strings +453 untranslated strings ``` "CoC7.Entities.Character": "Character", "CoC7.Entities.Container": "Container", @@ -283,6 +321,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.days": "days(s)", "CoC7.weeks": "week(s)", "CoC7.months": "months(s)", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.AttacksPerRound": "Attacks per round", "CoC7.Restart": "Restart", "CoC7.Reset": "Reset", @@ -325,11 +364,17 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.meleeCombatDamageFrom": "from", "CoC7.meleeCombatDamageDeals": "deals", "CoC7.meleeCombatDamageWith": "with", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.EraAvailability": "Availability", "CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.ErrorInvalidCardType": "Card Type", "CoC7.ErrorInvalidRollType": "Roll Type", -"CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.CleanSkillList": "Clean skill list", "CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

", @@ -609,6 +654,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.ClearAllConditions": "Clear All Conditions", @@ -670,10 +724,30 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.getTheExample": "Copy Example", "CoC7.Copied": "Copied the Example Text to Clipboard", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Drive Auto", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` ## es.json -214 untranslated strings +250 untranslated strings ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -685,6 +759,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.FINISH": "--F-I-N-I-S-H--", "CoC7.days": "days(s)", "CoC7.months": "months(s)", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.Restart": "Restart", "CoC7.Reset": "Reset", "CoC7.Initiative": "Initiative", @@ -709,7 +784,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.CheckPassed": "Check passed", "CoC7.CheckMemoryRepressed": "Memory repressed", "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.ErrorInvalidCardType": "Card Type", "CoC7.ErrorInvalidRollType": "Roll Type", "CoC7.UnarmedWeaponName": "Unarmed", @@ -874,6 +956,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.ClearAllConditions": "Clear All Conditions", "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", "CoC7.ToolTipSanity": "
  1. Left click roll check with options
  2. Alt/Option + Left click roll sanity loss with options
  3. Shift + Left click Immediate regular difficulty roll
  4. Shift + Alt/Option + Left click roll sanity loss without dice pool options
  1. Right click Opposed check with options
  2. Shift + Right click Immediate opposed check
  1. Alt/Option + Right click Combined check with options
  2. Shift + Alt/Option + Right click Immediate combined check
", @@ -888,10 +979,29 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.UseContextMenus": "Use context menus", "SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` ## ja.json -202 untranslated strings +238 untranslated strings ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -901,6 +1011,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.AdjustedMovement": "Adjusted movement", "CoC7.DefinitelyInsane": "Good for the asylum", "CoC7.FINISH": "--F-I-N-I-S-H--", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.Restart": "Restart", "CoC7.Reset": "Reset", "CoC7.Initiative": "Initiative", @@ -920,7 +1031,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.CheckPassed": "Check passed", "CoC7.CheckMemoryRepressed": "Memory repressed", "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.CleanSkillList": "Clean skill list", "CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

", @@ -1082,6 +1200,139 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", +"CoC7.ClearAllConditions": "Clear All Conditions", +"CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", +"SETTINGS.TitleChaseSettings": "Chase Settings", +"SETTINGS.TrustedCanModfyChatCard": "Allow trusted user to modify chat card", +"SETTINGS.TrustedCanModfyChatCardHint": "Enabling this setting will give permission to trusted users to select options on chat card. The GM only section will still not be visible to them", +"SETTINGS.TrustedCanSeeChatCard": "Allow trusted user to see GM only sections", +"SETTINGS.TrustedCanSeeChatCardHint": "Enabling this setting will give permission to trusted users to see GM only section on chat card. Use this with caution!", +"SETTINGS.ChaseShowTokenMovement": "Show token movement.", +"SETTINGS.ChaseShowTokenMovementHint": "Show movement on the grid when a token is moved to the next location.", +"SETTINGS.UseContextMenus": "Use context menus", +"SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", +"CoC7.EffectNew": "New effect", +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." +``` +## pt-BR.json +120 untranslated strings +``` +"CoC7.ActorIsTokenHint": "Actor is a token", +"CoC7.ActorDataLinked": "Actor data are linked", +"CoC7.ActorDataNotLinked": "Actor data are NOT linked", +"CoC7.ActorIsSyntheticActor": "Actor is a synthetic actor (instance of an actor)", +"CoC7.MovementAction": "Movement action", +"CoC7.AdjustedMovement": "Adjusted movement", +"CoC7.DefinitelyInsane": "Good for the asylum", +"CoC7.FINISH": "--F-I-N-I-S-H--", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", +"CoC7.Restart": "Restart", +"CoC7.Reset": "Reset", +"CoC7.Initiative": "Initiative", +"CoC7.PenaltyDice": "Penalty Dice", +"CoC7.LuckNotEnough": "{name} didn't have enough luck to pass the check", +"CoC7.UpgradeSuccessWithLuck": "Upgrade to {difficultyName} success for {luckToSpend} luck.", +"CoC7.BonusDieAssailantReason": "Add 1 bonus die (assailant is prone, restrained...)", +"CoC7.PenaltyDieSelfReason": "Add 1 penalty die (for being prone, restrained...)", +"CoC7.RollDifficultyRegularTitle": "Regular difficulty", +"CoC7.RollDifficultyHardTitle": "Hard difficulty", +"CoC7.RollDifficultyExtremeTitle": "Extreme difficulty", +"CoC7.RollDifficultyCriticalTitle": "Critical difficulty", +"CoC7.ArmorIgnored": "Armor Ignored", +"CoC7.combatCard.automaticSuccess": "Automatic Success", +"CoC7.Damage": "Damage", +"CoC7.CheckFailed": "Check failed", +"CoC7.CheckPassed": "Check passed", +"CoC7.CheckMemoryRepressed": "Memory repressed", +"CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", +"CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", +"CoC7.UnarmedWeaponName": "Unarmed", +"CoC7.CleanSkillList": "Clean skill list", +"CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

", +"CoC7.WeaponSkillMain": "Main skill", +"CoC7.AlreadyEncounteredInformation": "Already encountered: {reason} lost {lost}/{max}", +"CoC7.RemoveParticipant": "Remove participant", +"CoC7.RemoveParticipantHint": "Participant will be completely removed from the chase", +"CoC7.Sane": "Sane", +"CoC7.ErrorUnableToParseFormula": "{value} is not a valid formula", +"CoC7.ErrorUnableToParseArmorFormula": "Unable to process armor value: {value}. Ignoring armor.", +"CoC7.ErrorUnableToParseSkillFormula": "Unable to parse formula: {value} for skill {name}", +"CoC7.ErrorActorHasNoWeaponNamed": "Actor {actorName} has no weapon named {weaponName}", +"CoC7.ErrorActorHasTooManyWeaponsNamed": "`Actor {actorName} has more than one weapon named {weaponName}. The first found will be used`", +"CoC7.ErrorUnexpectedWeaponText": "Unexpected weapons text, please raise a bug report with the text you are attempting to import", +"CoC7.ErrorUnexpectedSkillsText": "Unexpected skills text, please raise a bug report with the text you are attempting to import", +"CoC7.ErrorNoTokensSelected": "No tokens selected", +"CoC7.ErrorEvaluatingDamage": "Error evaluating damage", +"CoC7.MessageRollingCharacteristic": "Rolling characteristic {label}: {formula}", +"CoC7.DamageDealTo": "Damage {name} {damage}HP", +"CoC7.Add": "Add", +"CoC7.Update": "Update", +"CoC7.Enable": "Enable", +"CoC7.Disable": "Disable", +"CoC7.Duration": "Duration", +"CoC7.TextFieldInvalidJSON": "Unable to parse the JSON, please try again", +"CoC7.ActorImporterUploadError": "Import stopped, unable to write image", +"CoC7.FileUploadError": "Unable to write image, file upload error", +"CoC7.PickDirectory": "Pick Directory", +"CoC7.ActorImported": "New {actorType} imported: {actorName}", +"CoC7.DholeHouseActorImporter": "The Dhole's House Actor Importer JSON", +"CoC7.DholeHouseActorImporterSummary": "Export your DholeHouse's character as JSON and upload it here.", +"CoC7.DholeHouseImportingName": "About to import: ", +"CoC7.DholeHousePickYourJSONFile": "Pick the JSON file exported from The Dhole's House", +"CoC7.DholeHouseActorImporterSource": "Imported from The Dhole's House Actor", +"CoC7.DholeHouseInvalidActor": "The selected JSON doesn't seem to be a valid Dhole's House exported character", +"CoC7.Migrate.ErrorDocumentPack": "Failed CoC7 system migration for document {name} in pack {collection}: {message}", +"CoC7.Migrate.ErrorScene": "Failed CoC7 system migration for Scene {name}: {message}", +"CoC7.Migrate.ErrorMacro": "Failed CoC7 system migration for Macro {name}: {message}", +"CoC7.Migrate.ErrorTable": "Failed CoC7 system migration for Table {name}: {message}", +"CoC7.Migrate.ErrorItem": "Failed CoC7 system migration for Item {name}: {message}", +"CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", +"CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", +"CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.ClearAllConditions": "Clear All Conditions", "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", "SETTINGS.TitleChaseSettings": "Chase Settings", @@ -1094,10 +1345,29 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.UseContextMenus": "Use context menus", "SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` ## ru.json -1079 untranslated strings +1115 untranslated strings ``` "CoC7.title": "Call of Cthulhu 7h Edition (Unofficial)", "CoC7.Entities.Character": "Character", @@ -1212,6 +1482,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.All": "All", "CoC7.Success": "Success", "CoC7.CustomLabel": "Custom label", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.SpecificLocations": "Specific locations", "CoC7.ArmourPlating": "Armour plating", "CoC7.Location": "Location", @@ -1442,13 +1713,16 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.WeaponSpecial": "Special", "CoC7.ItemPrice": "Price", "CoC7.Armor": "Armor", -"CoC7.EraNvct": "Invictus", -"CoC7.EraDrka": "Dark Ages", -"CoC7.EraDdts": "Down Darker Trails", -"CoC7.EraGlit": "Cthulhu by Gaslight", -"CoC7.Era1920": "1920s", +"CoC7.EraInvictus": "Invictus", +"CoC7.EraDarkAges": "Dark Ages - Standard", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrails": "Down Darker Trails - Standard", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraGasLight": "Cthulhu by Gaslight", +"CoC7.Era1920": "1920s - Standard", "CoC7.EraPulp": "Pulp Cthulhu", -"CoC7.EraMdrn": "Modern", +"CoC7.EraModern": "Modern - Standard", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.Eras": "Cthulhu Flavors", "CoC7.EraAvailability": "Availability", "CoC7.SkillNoAdjustments": "No adjustment", @@ -1456,10 +1730,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.SkillXpGainDisabled": "XP Gain disabled.", "CoC7.SkillSpecial": "Specialization", "CoC7.SkillRarity": "Uncommon", +"CoC7.SkillRarityShort": "[UC]", "CoC7.SkillPush": "Pushed", "CoC7.SkillCombat": "Combat", "CoC7.SkillFighting": "Fighting", "CoC7.SkillFirearm": "Firearms", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.WeaponRngd": "Range", "CoC7.WeaponProperyManeuver": "Maneuver", "CoC7.WeaponTouch": "Touch", @@ -1489,10 +1767,6 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Validate": "Validate", "CoC7.Apply": "Apply", "CoC7.NewBioSectionName": "New Section", -"CoC7.DodgeSkillName": "Dodge", -"CoC7.CthulhuMythosName": "Cthulhu Mythos", -"CoC7.CreditRatingSkillName": "Credit Rating", -"CoC7.DriveAutoSkillName": "Drive Auto", "CoC7.FightingSpecializationName": "Fighting", "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.FirearmSpecializationName": "Firearms", @@ -2030,6 +2304,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.Maximize": "Maximize", "CoC7.Summarize": "Summarize", "CoC7.ClearAllConditions": "Clear All Conditions", @@ -2177,10 +2460,33 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.getTheExample": "Copy Example", "CoC7.Copied": "Copied the Example Text to Clipboard", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.keys.i.skill.drive-auto": "Drive Auto", +"CoC7.CoCIDFlag.keys.i.skill.dodge": "Dodge", +"CoC7.CoCIDFlag.keys.i.skill.cthulhu-mythos": "Cthulhu Mythos", +"CoC7.CoCIDFlag.keys.i.skill.credit-rating": "Credit Rating", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` ## sv.json -200 untranslated strings +236 untranslated strings ``` "CoC7.ActorIsTokenHint": "Actor is a token", "CoC7.ActorDataLinked": "Actor data are linked", @@ -2190,6 +2496,7 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.AdjustedMovement": "Adjusted movement", "CoC7.DefinitelyInsane": "Good for the asylum", "CoC7.FINISH": "--F-I-N-I-S-H--", +"CoC7.CustomSpecialisationLabel": "Custom label - {specialisation}", "CoC7.Restart": "Restart", "CoC7.Reset": "Reset", "CoC7.Initiative": "Initiative", @@ -2209,7 +2516,14 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.CheckPassed": "Check passed", "CoC7.CheckMemoryRepressed": "Memory repressed", "CoC7.rangeCombatCard.SurprisedTargetTitle": "1 bonus die for surprised target", +"CoC7.EraDarkAgesPulp": "Dark Ages - Pulp", +"CoC7.EraDownDarkerTrailsPulp": "Down Darker Trails - Pulp", +"CoC7.EraModernPulp": "Modern - Pulp", "CoC7.SkillXpGainDisabled": "XP Gain disabled.", +"CoC7.SkillRarityShort": "[UC]", +"CoC7.SkillRequiresName": "Requires Name", +"CoC7.SkillKeepBaseValue": "Keep Base Value", +"CoC7.SkillPickNameOnly": "Select Specialization", "CoC7.UnarmedWeaponName": "Unarmed", "CoC7.CleanSkillList": "Clean skill list", "CoC7.CleanSkillListHint": "

This will Clean your skill list by removing specialization from skill name.

This will avoid to display skill as : 'specialization(specialization(skill))'

", @@ -2369,6 +2683,15 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "CoC7.Migrate.ErrorActor": "Failed CoC7 system migration for Actor {name}: {message}", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", +"CoC7.Settings.WorldEra.Name": "Era for the world", +"CoC7.Settings.WorldEra.Hint": "Skills can vary slightly between eras, please select the era for this world so system searches for skills find the correct ones.", +"CoC7.Settings.DropCoCID.Name": "Use CoC ID on item drops", +"CoC7.Settings.DropCoCID.Hint": "When dropping items with a CoC ID prompt to store the CoC ID instead of the item", +"CoC7.Settings.DropCoCID.Dialog": "Use the CoC ID for dropped items where possible? This allows the system to select the correct item for your world era.", +"CoC7.Settings.DropCoCID.Remember": "Remember this selection, you can change this under settings", +"CoC7.Settings.DropCoCID.Prompt": "Prompt each time", +"CoC7.Settings.DropCoCID.UseCoCID": "Use CoC ID Where Possible", +"CoC7.Settings.DropCoCID.IgnoreCoCID": "Do Not Use CoC ID", "CoC7.ClearAllConditions": "Clear All Conditions", "CoC7.UnableToUploadDholeImage": "You do not have permission to upload images, if you import the default avatar will be used.", "SETTINGS.TitleChaseSettings": "Chase Settings", @@ -2381,5 +2704,24 @@ Thank you for being interested in making Call of Cthulhu 7th Edition for Foundry "SETTINGS.UseContextMenus": "Use context menus", "SETTINGS.UseContextMenusHint": "[EXPERIMENTAL] Use context menus for rolls instead of key combination.", "CoC7.EffectNew": "New effect", -"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value." +"CoC7.EffectAppliedCantOverride": "An active effect is applies. You can't modify [{name}]. Deactivate the corresponding effect to modify this value.", +"CoC7.CoCIDFlag.id": "ID", +"CoC7.CoCIDFlag.title": "Edit System ID (CoC ID)", +"CoC7.CoCIDFlag.summary": "Set a group identifier that can be used to find the the most up to date version of this {type}. The System ID should use the English translation of the {type} to support localization across all languages.", +"CoC7.CoCIDFlag.key": "System ID (CoC ID)", +"CoC7.CoCIDFlag.new": "- Custom System ID -", +"CoC7.CoCIDFlag.guess": "Create System ID (CoC ID) based on current document.", +"CoC7.CoCIDFlag.priority": "System ID Priority", +"CoC7.CoCIDFlag.others": "Other documents with this CoC ID and language (excluding documents in other actors and items)", +"CoC7.CoCIDFlag.documents-in-world": "{count} documents in the world", +"CoC7.CoCIDFlag.documents-in-compendiums": "{count} documents in compendiums", +"CoC7.CoCIDFlag.foundry-id": "Foundry ID", +"CoC7.CoCIDFlag.foundry-uuid": "Foundry UUID", +"CoC7.CoCIDFlag.get-this-document": "Get this document", +"CoC7.CoCIDFlag.get-document-like-this": "Get document like this", +"CoC7.CoCIDFlag.error.duplicate": "Warning: Multiple System IDs with same priority!", +"CoC7.CoCIDFlag.error.unknown-era": "Unknown Era "{era}"", +"CoC7.CoCIDFlag.error.incorrect.type": "Tried to convert CoC ID with non existing document type. See console log.", +"CoC7.CoCIDFlag.error.document-not-found": "Document not found in world or Compendia matching the CoC ID "{cocid}", language "{lang}", and era "{era}". Please check your Era for the world setting.", +"CoC7.CoCIDFlag.error.documents-not-found": "Documents were not found in world or Compendia matching the CoC IDs ({cocids}), language "{lang}", and era "{era}". Please check your Era for the world setting." ``` From adb6c67760cfa025289641afe62d658e6344da8b Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 16 Jan 2023 16:26:54 +0000 Subject: [PATCH 11/78] separate link and parser logic, remove duplication for function, and fix v10 link issues --- module/actors/sheets/base.js | 41 +- module/actors/sheets/container.js | 4 +- module/actors/sheets/npc-sheet.js | 4 +- module/apps/canvas.js | 111 ++--- module/apps/coc7-chat-message.js | 66 +-- module/apps/coc7-content-link-dialog.js | 328 +++++++++++++ module/apps/coc7-link.js | 594 +++++++++++++++++++++++ module/apps/coc7-parser.js | 57 +++ module/apps/link-creation-dialog.js | 428 ----------------- module/apps/link.js | 514 -------------------- module/apps/parser.js | 595 ------------------------ module/chat.js | 8 +- module/coc7.js | 4 +- module/hooks/init.js | 2 + module/hooks/render-chat-message.js | 10 +- module/items/item.js | 2 +- module/menu.js | 4 +- module/utilities.js | 19 +- templates/apps/link-creation.html | 200 ++++---- 19 files changed, 1179 insertions(+), 1812 deletions(-) create mode 100644 module/apps/coc7-content-link-dialog.js create mode 100644 module/apps/coc7-link.js create mode 100644 module/apps/coc7-parser.js delete mode 100644 module/apps/link-creation-dialog.js delete mode 100644 module/apps/link.js delete mode 100644 module/apps/parser.js diff --git a/module/actors/sheets/base.js b/module/actors/sheets/base.js index b83fedfbc..6f5c75964 100644 --- a/module/actors/sheets/base.js +++ b/module/actors/sheets/base.js @@ -3,17 +3,16 @@ import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' import { RollDialog } from '../../apps/roll-dialog.js' import { CoC7ChatMessage } from '../../apps/coc7-chat-message.js' import { CoC7Check } from '../../check.js' +import { CoC7ContentLinkDialog } from '../../apps/coc7-content-link-dialog.js' import { COC7 } from '../../config.js' import { CoC7Item } from '../../items/item.js' import { CoC7MeleeInitiator } from '../../chat/combat/melee-initiator.js' import { CoC7RangeInitiator } from '../../chat/rangecombat.js' import { CoC7ConCheck } from '../../chat/concheck.js' import { chatHelper, isCtrlKey } from '../../chat/helper.js' -import { CoC7Parser } from '../../apps/parser.js' +import { CoC7Link } from '../../apps/coc7-link.js' import { DamageCard } from '../../chat/cards/damage.js' -import { CoC7LinkCreationDialog } from '../../apps/link-creation-dialog.js' import CoC7ActiveEffect from '../../active-effect.js' -import { CoC7Link } from '../../apps/link.js' import { CoC7ContextMenu } from '../../context-menu.js' import { CoC7Utilities } from '../../utilities.js' @@ -818,10 +817,7 @@ export class CoC7ActorSheet extends ActorSheet { } }) - html.find('a.coc7-link').on('click', event => CoC7Parser._onCheck(event)) - html - .find('a.coc7-link') - .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) + CoC7Link.bindEventsHandler(html) /** * This is used for dev purposes only ! @@ -1284,13 +1280,13 @@ export class CoC7ActorSheet extends ActorSheet { async _onDrop (event) { const dataString = event.dataTransfer.getData('text/plain') + if (dataString === '') { + return false + } const data = JSON.parse(dataString) - if (data.linkType === 'coc7-link') { - if (data.type === 'effect') { - const link = await CoC7Link.fromData(data) - if (link._linkData.effect) { - this.actor.createEmbeddedDocuments('ActiveEffect', [link._linkData.effect]) - } + if (data.type === 'CoC7Link') { + if (data.check === CoC7Link.CHECK_TYPE.EFFECT) { + CoC7Link._onLinkActorClick(this.actor, data) } } await super._onDrop(event) @@ -1456,7 +1452,7 @@ export class CoC7ActorSheet extends ActorSheet { div.append(props) li.append(div.hide()) - CoC7Parser.bindEventsHandler(div) + CoC7Link.bindEventsHandler(div) div.slideDown(200, () => li.toggleClass('expanded')) } // $(event.currentTarget).toggleClass('expanded'); @@ -1556,10 +1552,7 @@ export class CoC7ActorSheet extends ActorSheet { const effectId = event.currentTarget.closest('li').dataset.effectId const effect = this.actor.effects.get(effectId) if (isCtrlKey(event) && game.user.isGM) { - const link = new CoC7Link() - await link.setData({ type: 'effect', object: effect }) - const linkDialog = new CoC7LinkCreationDialog(link) - linkDialog.render(true) + CoC7ContentLinkDialog.create({ type: 'CoC7Link', check: CoC7Link.CHECK_TYPE.EFFECT, object: effect }) } } @@ -1584,16 +1577,10 @@ export class CoC7ActorSheet extends ActorSheet { if (isCtrlKey(event) && game.user.isGM) { const linkData = { - check: 'item', - type: 'weapon', - name: weapon.name, - hasPlayerOwner: this.actor.hasPlayerOwner, - actorKey: this.actor.actorKey + check: CoC7Link.CHECK_TYPE.ITEM, + name: weapon.name } - - CoC7LinkCreationDialog.fromLinkData(linkData).then(dlg => - dlg.render(true) - ) + CoC7ContentLinkDialog.create(linkData, { actors: [this.actor] }) } else { let proceedWithoutTarget if (game.user.targets.size <= 0) { diff --git a/module/actors/sheets/container.js b/module/actors/sheets/container.js index a43d4f838..91a6388c5 100644 --- a/module/actors/sheets/container.js +++ b/module/actors/sheets/container.js @@ -1,6 +1,6 @@ /* global $, ActorSheet, CONST, Dialog, FormData, game, mergeObject, TextEditor */ import { addCoCIDSheetHeaderButton } from '../../scripts/coc-id-button.js' -import { CoC7Parser } from '../../apps/parser.js' +import { CoC7Link } from '../../apps/coc7-link.js' import { CoC7Utilities } from '../../utilities.js' export class CoC7ContainerSheet extends ActorSheet { @@ -269,7 +269,7 @@ export class CoC7ContainerSheet extends ActorSheet { div.append(props) li.append(div.hide()) - CoC7Parser.bindEventsHandler(div) + CoC7Link.bindEventsHandler(div) div.slideDown(200) } li.toggleClass('expanded') diff --git a/module/actors/sheets/npc-sheet.js b/module/actors/sheets/npc-sheet.js index 3448ffb3f..65d0cbd9e 100644 --- a/module/actors/sheets/npc-sheet.js +++ b/module/actors/sheets/npc-sheet.js @@ -1,7 +1,7 @@ /* global game, mergeObject, TextEditor */ import { CoC7ActorSheet } from './base.js' import { RollDialog } from '../../apps/roll-dialog.js' -import { CoC7Parser } from '../../apps/parser.js' +import { CoC7Link } from '../../apps/coc7-link.js' import { chatHelper, isCtrlKey } from '../../chat/helper.js' import { SanCheckCard } from '../../chat/cards/san-check.js' import { CoC7ContextMenu } from '../../context-menu.js' @@ -175,7 +175,7 @@ export class CoC7NPCSheet extends CoC7ActorSheet { } if (typeof modifier !== 'undefined') linkData.modifier = modifier if (typeof difficulty !== 'undefined') linkData.difficulty = difficulty - const link = CoC7Parser.createCoC7Link(linkData) + const link = (new CoC7Link())._createDocumentLink(linkData) if (link) { chatHelper.createMessage( null, diff --git a/module/apps/canvas.js b/module/apps/canvas.js index f8c8825aa..789fddd5c 100644 --- a/module/apps/canvas.js +++ b/module/apps/canvas.js @@ -1,19 +1,17 @@ -/* global game, ui */ -import { chatHelper } from '../chat/helper.js' -import { CoC7Utilities } from '../utilities.js' -import { CoC7Link } from './link.js' +/* global game */ +import { CoC7Link } from './coc7-link.js' export class CoC7Canvas { static get COC7_TYPES_SUPPORTED () { - return ['link', 'chase'] + return ['CoC7Link'] } static async onDropSomething (canvas, data) { if ( - data.CoC7Type && - CoC7Canvas.COC7_TYPES_SUPPORTED.includes(data.CoC7Type) + data.type && + CoC7Canvas.COC7_TYPES_SUPPORTED.includes(data.type) ) { - const gridSize = canvas.scene.grid + const gridSize = canvas.scene.grid.size const x = data.x - gridSize / 2 const y = data.y - gridSize / 2 const height = gridSize @@ -26,80 +24,41 @@ export class CoC7Canvas { ) }) // Find drop target. if (!dropTargetTokens.length) dropTargetTokens = canvas.tokens.controlled // If no target whisper to selected token - switch (data.CoC7Type) { - case 'link': - { - const link = await CoC7Link.fromData(data) - if (!link.link) { - ui.notifications.error('Invalid link') - } - - const option = {} - option.speaker = { - alias: game.user.name - } - - if (link.is.effect) { - if (!dropTargetTokens.length) { - // Apply to everyone ? or only players ? or nobody - } else { - for (const t of dropTargetTokens) { - await t.actor.createEmbeddedDocuments('ActiveEffect', [ - link._linkData.effect - ]) - } + switch (data.type) { + case 'CoC7Link': + if (data.check === CoC7Link.CHECK_TYPE.EFFECT) { + if (dropTargetTokens.length) { + for (const token of dropTargetTokens) { + CoC7Link._onLinkActorClick(token.actor, data) } } else { - if (!dropTargetTokens.length) { - const whisperTargets = game.users.players.filter( - u => !!u.character - ) // User with at least a character - for (const u of whisperTargets) { - option.whisper = [u] - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageTargetCheckRequested', { - name: u.character.name, - check: link.link - }), - option - ) - } - } else { - for (const t of dropTargetTokens) { - if (t.actor.hasPlayerOwner) { - option.whisper = t.actor.owners - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageTargetCheckRequested', { - name: t.actor.name, - check: link.link - }), - option - ) - } - } - } + // Apply to everyone ? or only players ? or nobody } + } else if (dropTargetTokens.length) { + CoC7Link.toWhisperMessage(data, dropTargetTokens.filter(t => t.actor.owners.length).map(t => t.actor)) + } else { + CoC7Link.toWhisperMessage(data, game.users.players.filter(u => !!u.character).map(u => u.character)) } break - default: - if (data.docUuid && data.callBack) { - const doc = CoC7Utilities.SfromUuid(data.docUuid) - if ( - doc[data.callBack] && - typeof doc[data.callBack] === 'function' - ) { - try { - data.scene = canvas.scene.uuid - doc[data.callBack](data) - } catch (error) { - console.warn(error.message) - } - } - } - break + // This does not appear to be called in FoundryVTT v10, remove if not needed + // COC7_TYPES_SUPPORTED chase has been removed because of this + // default: + // if (data.docUuid && data.callBack) { + // const doc = CoC7Utilities.SfromUuid(data.docUuid) + // if ( + // doc[data.callBack] && + // typeof doc[data.callBack] === 'function' + // ) { + // try { + // data.scene = canvas.scene.uuid + // doc[data.callBack](data) + // } catch (error) { + // console.warn(error.message) + // } + // } + // } + // break } } } diff --git a/module/apps/coc7-chat-message.js b/module/apps/coc7-chat-message.js index 539dbfd28..f1fd17dfc 100644 --- a/module/apps/coc7-chat-message.js +++ b/module/apps/coc7-chat-message.js @@ -1,13 +1,14 @@ /* global game, ui */ import { CoC7Check } from '../check.js' -import { CoC7LinkCreationDialog } from './link-creation-dialog.js' +import { CoC7ContentLinkDialog } from './coc7-content-link-dialog.js' import { isCtrlKey } from '../chat/helper.js' import { RollDialog } from './roll-dialog.js' import { CombinedCheckCard } from '../chat/cards/combined-roll.js' import { OpposedCheckCard } from '../chat/cards/opposed-roll.js' import { SanCheckCard } from '../chat/cards/san-check.js' import { SanDataDialog } from './sandata-dialog.js' -import { CoC7Link } from './link.js' +import { CoC7Link } from './coc7-link.js' +import { CoC7Utilities } from '../utilities.js' export class CoC7ChatMessage { static get ROLL_TYPE_ATTRIBUTE () { @@ -356,54 +357,35 @@ export class CoC7ChatMessage { case CoC7ChatMessage.ROLL_TYPE_ENCOUNTER: { const linkData = { - check: 'check', - type: '', - name: '', - hasPlayerOwner: config.options.hasPlayerOwner, - actorKey: config.options.actor.actorKey, - forceModifiers: config.options.shiftKey + type: 'CoC7Link' } - if ( - config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_SKILL - ) { - linkData.type = 'skill' - linkData.name = config.options.actor.items.get( - config.options.skillId - )?.shortName + if (config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_SKILL) { + linkData.check = CoC7Link.CHECK_TYPE.CHECK + linkData.linkType = CoC7Link.LINK_TYPE.SKILL + linkData.name = config.options.actor.items.get(config.options.skillId)?.shortName if (!linkData.name) return - } else if ( - config.dialogOptions.rollType === - CoC7ChatMessage.ROLL_TYPE_CHARACTERISTIC - ) { - linkData.type = 'characteristic' + } else if (config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_CHARACTERISTIC) { + linkData.check = CoC7Link.CHECK_TYPE.CHECK + linkData.linkType = CoC7Link.LINK_TYPE.CHARACTERISTIC linkData.name = config.options.characteristic - } else if ( - config.dialogOptions.rollType === - CoC7ChatMessage.ROLL_TYPE_ATTRIBUTE - ) { + } else if (config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_ATTRIBUTE) { if ((config.options.altKey || config.options.createEncounter) && config.options.attribute === 'san') { - linkData.check = 'sanloss' + linkData.check = CoC7Link.CHECK_TYPE.SANLOSS } else { - linkData.type = 'attribute' + linkData.check = CoC7Link.CHECK_TYPE.CHECK + linkData.linkType = CoC7Link.LINK_TYPE.ATTRIBUTE linkData.name = config.options.attribute } - } else if ( - config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_COMBAT - ) { - linkData.check = 'item' - linkData.type = 'weapon' + } else if (config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_COMBAT) { + linkData.check = CoC7Link.CHECK_TYPE.ITEM linkData.name = config.options.weaponName - } else if ( - config.dialogOptions.rollType === - CoC7ChatMessage.ROLL_TYPE_ENCOUNTER - ) { - linkData.check = 'sanloss' + } else if (config.dialogOptions.rollType === CoC7ChatMessage.ROLL_TYPE_ENCOUNTER) { + linkData.check = CoC7Link.CHECK_TYPE.SANLOSS linkData.sanMin = config.options.actor?.system?.special?.sanLoss?.checkPassed linkData.sanMax = config.options.actor?.system?.special?.sanLoss?.checkFailled linkData.sanReason = config.options.actor.system.infos.type?.length ? config.options.actor.system.infos.type : config.options.actor.name - linkData.tokenKey = config.options.actor.actorKey } else { return } @@ -411,13 +393,13 @@ export class CoC7ChatMessage { linkData.blind = true } if (config.options.sendToChat) { - CoC7Link.fromData(linkData).then(link => link.sendToChat()) + CoC7Link.toChatMessage(linkData) } else if (config.options.sendToClipboard) { - CoC7Link.fromData(linkData).then(link => link.sendToClipboard()) + CoC7Link.fromDropData(linkData).then(link => { + CoC7Utilities.copyToClipboard(link.link) + }) } else { - CoC7LinkCreationDialog.fromLinkData(linkData).then(dlg => - dlg.render(true) - ) + CoC7ContentLinkDialog.create(linkData, { actors: [config.options.actor].filter(a => a.owners.length), hasModifiers: config.options.shiftKey }) } } break diff --git a/module/apps/coc7-content-link-dialog.js b/module/apps/coc7-content-link-dialog.js new file mode 100644 index 000000000..ae7a367ac --- /dev/null +++ b/module/apps/coc7-content-link-dialog.js @@ -0,0 +1,328 @@ +/* global canvas, CONST, FormApplication, game, mergeObject, ui */ +import { CoCActor } from '../actors/actor.js' +import { CoC7Check } from '../check.js' +import { CoC7Link } from './coc7-link.js' +import { CoC7Utilities } from '../utilities.js' + +export class CoC7ContentLinkDialog extends FormApplication { + static get defaultOptions () { + return mergeObject(super.defaultOptions, { + id: 'link-creation', + classes: ['coc7', 'active-effect-sheet'], + title: game.i18n.localize('CoC7.CreateLink'), + dragDrop: [{ dragSelector: null, dropSelector: '.container' }], + template: 'systems/CoC7/templates/apps/link-creation.html', + closeOnSubmit: false, + width: 560, + height: 'auto', + tabs: [ + { + navSelector: '.tabs', + contentSelector: '.effect-options', + initial: 'details' + } + ] + }) + } + + async getData () { + const sheetData = await super.getData() + + // Prepare check type + sheetData.checkType = [ + { + key: CoC7Link.CHECK_TYPE.CHECK, + label: game.i18n.localize('CoC7.Check') + }, + { + key: CoC7Link.CHECK_TYPE.SANLOSS, + label: game.i18n.localize('CoC7.SanityCheck') + }, + { + key: CoC7Link.CHECK_TYPE.ITEM, + label: game.i18n.localize('CoC7.ItemWeapon') + }, + { + key: CoC7Link.CHECK_TYPE.EFFECT, + label: game.i18n.localize('EFFECT.TabEffects') + } + ] + + // Prepare 'check' link type + sheetData.linkType = [ + { + key: CoC7Link.LINK_TYPE.CHARACTERISTIC, + label: game.i18n.localize('CoC7.Characteristic') + }, + { + key: CoC7Link.LINK_TYPE.ATTRIBUTE, + label: game.i18n.localize('CoC7.Attribute') + }, + { + key: CoC7Link.LINK_TYPE.SKILL, + label: game.i18n.localize('CoC7.Skill') + } + ] + + // Prepare 'check' 'attribute' types + sheetData.attributeType = [ + { + key: 'lck', + label: game.i18n.localize('CoC7.Luck') + }, + { + key: 'san', + label: game.i18n.localize('CoC7.Sanity') + } + ] + + // Prepare effect mode types + sheetData.effectModes = Object.entries(CONST.ACTIVE_EFFECT_MODES).reduce( + (obj, e) => { + obj[e[1]] = game.i18n.localize('EFFECT.MODE_' + e[0]) + return obj + }, + {} + ) + + // Prepare 'check' 'characteristic' types + sheetData.characteristicType = CoCActor.getCharacteristicDefinition() + + sheetData.link = sheetData.object.link + + sheetData.fromGame = sheetData.link.isItemCheck || sheetData.link.isSkillCheck + + sheetData.fromDirectory = (sheetData.object.hasID === 'fromDirectory') + sheetData.fromCompendium = (sheetData.object.hasID === 'fromCompendium') + + sheetData.isSetFromGame = (sheetData.link.id && (sheetData.fromDirectory || sheetData.fromCompendium)) + + sheetData.difficultyLevel = CoC7Check.difficultyLevel + + sheetData.actorNames = sheetData.object.actors.map(a => a.name).join(', ') + + return sheetData + } + + activateListeners (html) { + super.activateListeners(html) + + html + .find('select[name=type],select[name=check],select[name=attributeKey],select[name=characteristicKey],input[type=checkbox]') + .change(this._onChangeSubmit.bind(this)) + + // Handling effects + html.find('.effect-control').click(this._onEffectControl.bind(this)) + } + + _onChangeSubmit (event) { + switch (event.currentTarget.name) { + case 'fromCompendium': + case 'fromDirectory': + this.object.hasID = (event.currentTarget.name === this.object.hasID ? '' : event.currentTarget.name) + break + } + this._onSubmit(event) + } + + _onEffectControl (event) { + event.preventDefault() + const button = event.currentTarget + switch (button.dataset.action) { + case 'add': + return this._addEffectChange() + case 'delete': + button.closest('.effect-change').remove() + this._onSubmit(event) + } + } + + async _addEffectChange () { + const idx = this.object.link.effect.changes.length + return this.submit({ + preventClose: true, + updateData: { + [`effect.changes.${idx}`]: { + key: '', + mode: CONST.ACTIVE_EFFECT_MODES.ADD, + value: '' + } + } + }) + } + + async _updateObject (event, formData) { + let hasEffect = false + const effect = { + duration: {}, + changes: [] + } + for (const key in formData) { + switch (key) { + case 'checkName': + this.object.link.setValue('name', formData.checkName) + break + case 'blind': + case 'difficulty': + case 'displayName': + case 'icon': + case 'id': + case 'modifier': + case 'pack': + case 'sanMin': + case 'sanMax': + case 'sanReason': + this.object.link.setValue(key, formData[key]) + break + case 'hasModifiers': + case 'hasLabel': + case 'hasIcon': + this.object[key] = formData[key] + break + case 'effect.label': + effect.label = formData[key] + hasEffect = true + break + case 'effect.icon': + effect.icon = formData[key] + hasEffect = true + break + case 'effect.tint': + effect.tint = formData[key] + hasEffect = true + break + case 'effect.disabled': + effect.disabled = formData[key] + hasEffect = true + break + case 'effect.duration.seconds': + effect.duration.seconds = formData[key] + hasEffect = true + break + case 'effect.duration.rounds': + effect.duration.rounds = formData[key] + hasEffect = true + break + case 'effect.duration.turns': + effect.duration.turns = formData[key] + hasEffect = true + break + default: { + const match = key.match(/^effect\.changes\.(\d+)\.key$/) + if (match) { + effect.changes.push({ + key: formData[key], + mode: formData['effect.changes.' + match[1] + '.mode'], + value: formData['effect.changes.' + match[1] + '.value'] + }) + hasEffect = true + } + } + } + } + if (hasEffect) { + this.object.link.setValue('object', effect) + } + const target = event.currentTarget + if (target) { + switch (target.name) { + case 'type': + this.object.link.setValue('check', target.value) + break + case 'check': + this.object.link.setValue('linkType', target.value) + break + case 'attributeKey': + case 'characteristicKey': + this.object.link.setValue('name', target.value) + break + } + if (event.type === 'submit') { + switch (event.submitter.dataset.action) { + case 'clipboard': + CoC7Utilities.copyToClipboard(this.object.link.link) + break + case 'chat': + CoC7Link.toChatMessage(this.object.link.object) + break + case 'whisper-owner': + CoC7Link.toWhisperMessage(this.object.link.object, this.object.actors) + break + case 'whisper-selected': + if (!canvas.tokens.controlled.length) { + ui.notifications.warn( + game.i18n.localize('CoC7.ErrorNoTokensSelected') + ) + return + } + CoC7Link.toWhisperMessage(this.object.link.object, canvas.tokens.controlled.filter(t => t.actor.owners.length).map(t => t.actor)) + break + } + return + } + } + this.render(true) + } + + async _onDrop (event) { + const dataString = event.dataTransfer.getData('text/plain') + const data = JSON.parse(dataString) + if (data.type === 'CoC7Link') { + this.setLink(await CoC7Link.fromDropData(data)) + this.render(true) + } else { + if ((data.type === 'Folder' && data.documentName === 'Actor') || ['Item', 'Actor'].includes(data.type)) { + const dataList = await CoC7Utilities.getDataFromDropEvent(event, data.documentName ?? data.type) + if (data.documentName ?? data.type === 'Actor') { + this.object.actors = dataList.filter(a => a.owners.length) + this.render(true) + } else if (dataList.length === 1) { + if (['skill', 'weapon'].includes(dataList[0].type)) { + if (dataList[0].pack) { + this.object.hasID = 'fromCompendium' + this.object.link.setValue('pack', dataList[0].pack) + } else { + this.object.hasID = 'fromDirectory' + } + this.object.link.setValue('id', dataList[0].id) + this.object.link.setValue('name', dataList[0].name) + this.render(true) + } + } + } + } + } + + setLink (link) { + this.object.link = link + if (link.pack !== '') { + this.object.hasID = 'fromCompendium' + } else if (link.id !== '') { + this.object.hasID = 'fromDirectory' + } + if (link.difficulty !== CoC7Check.difficultyLevel.regular || parseInt(link.modifier, 10) !== 0) { + this.object.hasModifiers = true + } + if (link.displayName !== '') { + this.object.hasLabel = true + } + if (link.icon !== '') { + this.object.hasIcon = true + } + return '' + } + + static async create (linkData = {}, option = {}) { + const object = mergeObject({ + link: null, + hasID: '', + hasModifiers: false, + hasLabel: false, + hasIcon: false, + actors: [] + }, option) + const dialog = new CoC7ContentLinkDialog(object, {}) + dialog.setLink(await CoC7Link.fromDropData(linkData)) + dialog.render(true) + } +} diff --git a/module/apps/coc7-link.js b/module/apps/coc7-link.js new file mode 100644 index 000000000..7f54340c9 --- /dev/null +++ b/module/apps/coc7-link.js @@ -0,0 +1,594 @@ +/* global canvas, ChatMessage, CONFIG, CONST, duplicate, game, mergeObject, ui */ +import { CoCActor } from '../actors/actor.js' +import { CoC7Check } from '../check.js' +import { CoC7ContentLinkDialog } from './coc7-content-link-dialog.js' +import { CoC7Utilities } from '../utilities.js' +import { SanCheckCard } from '../chat/cards/san-check.js' +import { chatHelper, isCtrlKey } from '../chat/helper.js' + +/** + * Allow for parsing of CoC7 elements in chat message and sheets. + * Format is : + * @coc7.TYPE_OF_REQUEST[OPTIONS]{DISPLAYED_NAME} + * TYPE_OF_REQUEST : + * - sanloss: trigger a san check, upon failure will propose to deduct the corresponding SAN. + * - check: trigger a check depending on the options. + * - item: Trigger a weapon check + * - effect: Add an effect + * + * OPTIONS: [] = optional + * sanloss: + * sanMax: max SAN loss + * sanMin: min SAN loss + * sanReason: Reason + * check: + * type: type of check (characteristic, skill, attrib). + * name: name of the skill/characteristic. + * [difficulty]: ? (blind), 0 (regular), + (hard), ++ (extreme), +++ (critical). + * [modifier]: -x (x penalty dice), +x (x bonus dice), 0 (no modifier). + * [icon]: icon tu use (font awsome). + * [blind]: will trigger a blind roll. + * + * [DISPLAYED_NAME: name to display.] + * + * To add/edit a new link update these sections + * fromDropData => Add all defaults here + * _createLink => Create HTML from document data + * _createDocumentLink => Create @link from document data + * _onLinkActorClick => Process link + */ +export class CoC7Link { + static get CHECK_TYPE () { + return { + CHECK: 'check', + SANLOSS: 'sanloss', + ITEM: 'item', + EFFECT: 'effect' + } + } + + static get LINK_TYPE () { + return { + CHARACTERISTIC: 'characteristic', + ATTRIBUTE: 'attribute', + SKILL: 'skill' + } + } + + static init () { + CONFIG.CoC7Link = { + documentClass: CoC7Link + } + } + + static bindEventsHandler (html) { + html + .find('a.coc7-link') + .on('click', event => CoC7Link._onLinkClick(event)) + html + .find('a.coc7-link') + .on('dragstart', event => CoC7Link._onDragCoC7Link(event)) + } + + static _linkFromEvent (event) { + const a = event.currentTarget + const i = a.querySelector('[data-link-icon]') + const data = duplicate(a.dataset) + + const oldType = data.type + + data.type = 'CoC7Link' + data.icon = null + + if (oldType) { + data.linkType = oldType + } + + if ( + data.object && + (typeof data.object === 'string' || data.object instanceof String) + ) { + data.object = JSON.parse(data.object) + // data.linkType = CoC7Link.LINK_TYPE.EFFECT + } + + if ( + i.dataset && + i.dataset.linkIcon && + i.dataset.linkIcon !== 'fas fa-dice' + ) { + data.icon = i.dataset.linkIcon + } + data.displayName = a.dataset.displayName ? a.innerText : null + if (data.difficulty) { + data.difficulty = CoC7Utilities.convertDifficulty(data.difficulty) + } + return data + } + + static _onDragCoC7Link (event) { + const data = CoC7Link._linkFromEvent(event) + event.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(data)) + } + + /** + * A helper function to handle obtaining the relevant Document from dropped data provided via a DataTransfer event. + * The dropped data could have: + * 1. A data object explicitly provided + * @memberof ClientDocumentMixin + * + * @param {object} data The data object extracted from a DataTransfer event + * @param {object} options Additional options which affect drop data behavior + * @returns {Promise} The resolved Document + * @throws If a Document could not be retrieved from the provided data. + */ + static async fromDropData (data, options = {}) { + const cls = new CoC7Link() + cls.object = mergeObject({ + type: 'CoC7Link', + check: CoC7Link.CHECK_TYPE.CHECK, + linkType: CoC7Link.LINK_TYPE.SKILL, + difficulty: CoC7Check.difficultyLevel.regular, + modifier: 0, + object: { + label: game.i18n.localize('CoC7.EffectNew'), + icon: 'icons/svg/aura.svg', + changes: [] + } + }, data) + for (const key of ['name', 'displayName', 'icon', 'id', 'pack', 'sanMin', 'sanMax', 'sanReason']) { + cls.object[key] = cls.object[key] ?? '' + } + cls.options = options + return cls + } + + static _createLink (match) { + const name = match[4] ?? undefined + const options = match[3] ?? undefined + const type = match[2] ?? undefined + + const data = { + cls: ['coc7-link'], + dataset: { check: type }, + icon: null, + blind: false, + name + } + + if (type === CoC7Link.CHECK_TYPE.EFFECT) { + data.effect = JSON.parse(options) + data.dataset.object = options + } else { + const matches = options.matchAll(/[^,]+/gi) + for (const match of Array.from(matches)) { + let [key, value] = match[0].split(':') + if (key === 'icon') { + data.icon = value + } + if (key === 'blind' && typeof value === 'undefined') { + value = true + data.blind = true && [CoC7Link.CHECK_TYPE.CHECK].includes(type.toLowerCase()) + } + data.dataset[key] = value + } + } + + let title + const difficulty = CoC7Check.difficultyString(data.dataset.difficulty) + + switch (type.toLowerCase()) { + case CoC7Link.CHECK_TYPE.CHECK: { + let humanName = data.dataset.name + if (['attributes', 'attribute', 'attrib', 'attribs'].includes(data.dataset.type?.toLowerCase())) { + if (data.dataset.name === 'lck') { + humanName = game.i18n.localize('CoC7.Luck') + } + if (data.dataset.name === 'san') { + humanName = game.i18n.localize('CoC7.Sanity') + } + } + if (['charac', 'char', 'characteristic', 'characteristics'].includes(data.dataset.type?.toLowerCase())) { + humanName = CoC7Utilities.getCharacteristicNames(data.dataset.name)?.label + } + title = game.i18n.format( + `CoC7.LinkCheck${!data.dataset.difficulty ? '' : 'Diff'}${!data.dataset.modifier ? '' : 'Modif'}`, + { + difficulty, + modifier: data.dataset.modifier, + name: humanName + } + ) + break + } + + case CoC7Link.CHECK_TYPE.SANLOSS: + title = game.i18n.format( + `CoC7.LinkSanLoss${!data.dataset.difficulty ? '' : 'Diff'}${!data.dataset.modifier ? '' : 'Modif'}`, + { + difficulty, + modifier: data.dataset.modifier, + sanMin: data.dataset.sanMin, + sanMax: data.dataset.sanMax + } + ) + break + + case CoC7Link.CHECK_TYPE.ITEM: + title = game.i18n.format( + `CoC7.LinkItem${!data.dataset.difficulty ? '' : 'Diff'}${!data.dataset.modifier ? '' : 'Modif'}`, + { + difficulty, + modifier: data.dataset.modifier, + name: data.dataset.name + } + ) + break + + case CoC7Link.CHECK_TYPE.EFFECT: + title = data.effect.label + break + } + + if (!name) { + data.name = title + } else { + data.dataset.displayName = true + } + + const a = document.createElement('a') + a.title = game.user.isGM ? data.name : title + a.classList.add(...data.cls) + for (const [k, v] of Object.entries(data.dataset)) { + a.dataset[k] = v + } + a.draggable = true + data.icon = data.icon ?? data.effect?.icon ?? 'fas fa-dice' + // check if it's an image or an icon + if (data.icon.includes('\\') || data.icon.includes('.')) { + data.img = data.icon + } + if (data.blind) { + a.innerHTML += '' + } + if (data.img) { + a.innerHTML += `` + } else { + a.innerHTML += `` + } + a.innerHTML += `${data.name}` + + return a + } + + /** + * Create a content link for this document. + * @param {object} eventData The parsed object of data provided by the drop transfer event. + * @param {object} [options] Additional options to configure link generation. + * @param {ClientDocument} [options.relativeTo] A document to generate a link relative to. + * @param {string} [options.label] A custom label to use instead of the document's name. + * @returns {string} + * @internal + */ + _createDocumentLink (eventData, { relativeTo, label } = {}) { + if (!eventData.check) { + return '' + } + switch (eventData.check.toLowerCase()) { + case CoC7Link.CHECK_TYPE.CHECK: { + // @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)} + // @coc7.check[blind,type:characteristic,name:str,difficulty:1,modifier:0,icon:fa fa-link]{Strength} + // @coc7.check[blind,type:attribute,name:lck,difficulty:1,modifier:0,icon:fa fa-link]{Luck} + // @coc7.check[blind,type:skill,name:Law,difficulty:1,modifier:0,icon:fa fa-link]{Law} + if (!eventData.linkType || !eventData.name) { + return '' + } + let options = `${eventData.blind ? 'blind,' : ''}type:${eventData.linkType},name:${eventData.name}` + if (typeof eventData.difficulty !== 'undefined' && eventData.difficulty !== CoC7Check.difficultyLevel.regular) { + options += `,difficulty:${eventData.difficulty}` + } + if (typeof eventData.modifier !== 'undefined' && eventData.modifier !== 0) { + options += `,modifier:${eventData.modifier}` + } + if (eventData.icon) { + options += `,icon:${eventData.icon}` + } + if (eventData.pack) { + options += `,pack:${eventData.pack}` + } + if (eventData.id) { + options += `,id:${eventData.id}` + } + let link = `@coc7.check[${options}]` + const displayName = eventData.displayName ?? (label ?? '') + if (displayName) { + link += `{${displayName}}` + } + return link + } + + case CoC7Link.CHECK_TYPE.SANLOSS: { + // @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6} + if (!eventData.sanMax || !eventData.sanMin) { + return '' + } + let options = `${eventData.blind ? 'blind,' : ''}sanMax:${eventData.sanMax},sanMin:${eventData.sanMin}` + if (eventData.sanReason) { + options += `,sanReason:${eventData.sanReason}` + } + if (eventData.difficulty && eventData.difficulty !== CoC7Check.difficultyLevel.regular) { + options += `,difficulty:${eventData.difficulty}` + } + if (eventData.modifier && eventData.modifier !== 0) { + options += `,modifier:${eventData.modifier}` + } + if (eventData.icon) { + options += `,icon:${eventData.icon}` + } + let link = `@coc7.sanloss[${options}]` + const displayName = eventData.displayName ?? (label ?? '') + if (displayName) { + link += `{${displayName}}` + } + return link + } + + case CoC7Link.CHECK_TYPE.ITEM: { + // @coc7.item[type:optional,name:Shotgun,difficulty:+,modifier:-1]{Hard Shitgun check(-1)} + if (!eventData.name) { + return '' + } + let options = `${eventData.blind ? 'blind,' : ''}name:${eventData.name}` + if (eventData.icon) { + options += `,icon:${eventData.icon}` + } + if (eventData.pack) { + options += `,pack:${eventData.pack}` + } + if (eventData.id) { + options += `,id:${eventData.id}` + } + let link = `@coc7.item[${options}]` + const displayName = eventData.displayName ?? (label ?? '') + if (displayName) { + link += `{${displayName}}` + } + return link + } + + case CoC7Link.CHECK_TYPE.EFFECT: { + // @coc7.effect[{"label":"Kapow","icon":"icons/svg/aura.svg","changes":[{"key":"system.unknown.test","mode":2,"value":"5"}],"tint":"#e91616","duration":{"seconds":null,"rounds":6,"turns":null}}]{Kapowing} + // const effectData = foundry.utils.deepClone(eventData) + // if (!this.effectIsTemp) delete effectData.duration + // if (effectData.changes?.length === 0) delete effectData.changes + // if (!effectData.disabled) delete effectData.disabled + // if (!effectData.tint) delete effectData.tint + let link = `@coc7.effect[${JSON.stringify(eventData.object)}]` + const displayName = eventData.displayName ?? (label ?? '') + if (displayName) { + link += `{${displayName}}` + } + return link + } + } + return '?' + } + + static async _onLinkActorClick (actor, options, { shiftKey = false } = {}) { + switch (options.check) { + case CoC7Link.CHECK_TYPE.CHECK: + if (['charac', 'char', 'characteristic', 'characteristics'].includes(options.linkType.toLowerCase())) { + return actor.characteristicCheck( + options.name, + shiftKey, + options + ) + } + if (['skill'].includes(options.type.toLowerCase())) { + return actor.skillCheck(options, shiftKey, options) + } + if (['attributes', 'attribute', 'attrib', 'attribs'].includes(options.type.toLowerCase())) { + return actor.attributeCheck(options.name, shiftKey, options) + } + break + + case CoC7Link.CHECK_TYPE.SANLOSS: + SanCheckCard.create(actor.actorKey, options, { + fastForward: shiftKey + }) + return + + case CoC7Link.CHECK_TYPE.ITEM: + return actor.weaponCheck(options, shiftKey) + + case CoC7Link.CHECK_TYPE.EFFECT: + await actor.createEmbeddedDocuments('ActiveEffect', [{ + label: options.object.label, + icon: options.object.icon, + changes: options.object.changes + }]) + break + } + } + + static toChatMessage (options) { + const option = { + speaker: { + alias: game.user.name + } + } + let message + const link = (new CoC7Link())._createDocumentLink(options) + if (options.check === CoC7Link.CHECK_TYPE.EFFECT) { + message = `
${link}
` + } else { + message = game.i18n.format('CoC7.MessageCheckRequestedWait', { + check: link + }) + } + chatHelper.createMessage(null, message, option) + } + + static toWhisperMessage (options, actors) { + for (const actor of actors) { + const option = { + speaker: { + alias: game.user.name + }, + whisper: actor.owners.map(a => a.id) + } + let message + const link = (new CoC7Link())._createDocumentLink(options) + if (options.check === CoC7Link.CHECK_TYPE.EFFECT) { + message = `
${link}
` + } else { + message = game.i18n.format('CoC7.MessageTargetCheckRequested', { + name: actor.name, + check: link + }) + } + chatHelper.createMessage(null, message, option) + } + } + + /** + * Trigger a check when a link is clicked. + * Depending the origin + * @param {*} event + * + */ + static async _onLinkClick (event) { + const options = CoC7Link._linkFromEvent(event) + + if (game.user.isGM) { + if (isCtrlKey(event)) { + CoC7ContentLinkDialog.create(options) + return + } + if (canvas.tokens.controlled.length) { + for (const token of canvas.tokens.controlled) { + CoC7Link._onLinkActorClick(token.actor, options, { shiftKey: event.shiftKey }) + } + return + } + const speaker = ChatMessage.getSpeaker() + const actor = ChatMessage.getSpeakerActor(speaker) + if (actor) { + CoC7Link._onLinkActorClick(actor, options, { shiftKey: event.shiftKey }) + return + } + CoC7Link.toChatMessage(options) + return + } else { + const speaker = ChatMessage.getSpeaker() + let actor = ChatMessage.getSpeakerActor(speaker) + if (!actor) { + const actors = game.actors.filter(a => (a.ownership[game.user.id] ?? a.ownership.default) >= CONST.DOCUMENT_OWNERSHIP_LEVELS.OBSERVER) + if (actors.length === 1) { + actor = actors[0] + } + } + if (actor) { + CoC7Link._onLinkActorClick(actor, options, { shiftKey: event.shiftKey }) + return + } + } + ui.notifications.warn(game.i18n.localize('CoC7.WarnNoControlledActor')) + } + + setValue (key, value) { + this.object[key] = value + } + + get link () { + return this._createDocumentLink(this.object) + } + + get id () { + return this.object.id + } + + get pack () { + return this.object.pack + } + + get checkType () { + return this.object.check + } + + get difficulty () { + return this.object.difficulty + } + + get icon () { + return this.object.icon + } + + get displayName () { + return this.object.displayName + } + + get modifier () { + return this.object.modifier + } + + get linkType () { + return this.object.linkType + } + + get sanMin () { + return this.object.sanMin + } + + get sanMax () { + return this.object.sanMax + } + + get sanReason () { + return this.object.sanReason + } + + get effect () { + return this.object.object + } + + get checkName () { + if (this.isCharacteristicCheck) { + const characteristics = CoCActor.getCharacteristicDefinition() + return characteristics.find(c => c.key === this.object.name || c.shortName === this.object.name || c.label === this.object.name)?.key ?? '' + } + return this.object.name + } + + get isCheck () { + return this.object.check === CoC7Link.CHECK_TYPE.CHECK + } + + get isCharacteristicCheck () { + return this.isCheck && this.object.linkType === CoC7Link.LINK_TYPE.CHARACTERISTIC + } + + get isAttributeCheck () { + return this.isCheck && this.object.linkType === CoC7Link.LINK_TYPE.ATTRIBUTE + } + + get isSkillCheck () { + return this.isCheck && this.object.linkType === CoC7Link.LINK_TYPE.SKILL + } + + get isItemCheck () { + return this.object.check === CoC7Link.CHECK_TYPE.ITEM + } + + get isSanLossCheck () { + return this.object.check === CoC7Link.CHECK_TYPE.SANLOSS + } + + get isEffect () { + return this.object.check === CoC7Link.CHECK_TYPE.EFFECT + } + + get isBlind () { + return this.isCheck && this.object.blind + } +} diff --git a/module/apps/coc7-parser.js b/module/apps/coc7-parser.js new file mode 100644 index 000000000..2f4e3f8d7 --- /dev/null +++ b/module/apps/coc7-parser.js @@ -0,0 +1,57 @@ +/* global TextEditor */ +import { CoC7Link } from './coc7-link.js' + +export class CoC7Parser { + static enrichHTML (content) { + const html = document.createElement('div') + html.innerHTML = String(content) + + let text = [] + + text = TextEditor._getTextNodes(html) + const rgx = new RegExp('@(coc7)\\.' + '([^\\]]+?)' + '\\[((?:[^\\]\\[]+|\\[(?:[^\\]\\[]+|\\[[^\\]\\[]*\\])*\\])*)\\]' + '(?:{([^}]+)})?', 'gi') + TextEditor._replaceTextContent(text, rgx, CoC7Link._createLink) + return html.innerHTML + } + + static ParseSheetContent (app, html) { + // Check in all editors content for a link. + for (const element of html.find('div.editor-content > *, p')) { + if (element.outerHTML.toLocaleLowerCase().includes('@coc7')) { + element.outerHTML = CoC7Parser.enrichHTML(element.outerHTML) + } + } + + // Bind the click to execute the check. + CoC7Link.bindEventsHandler(html) + } + + /** + * A hook event that fires for each ChatMessage which is rendered for addition to the ChatLog. + * This hook allows for final customization of the message HTML before it is added to the log. + * @function renderChatMessage + * @memberof hookEvents + * @param {ChatMessage} app The ChatMessage document being rendered + * @param {jQuery} html The pending HTML as a jQuery object + * @param {object} data The input data provided for template rendering + */ + static ParseMessage (app, html, data) { + // @coc7.sanloss[sanMax:1D6,sanMin:1,sanReason:Ghouls,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6} + // @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)} + // @coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]{Hard luck check(-1)} + // @coc7.check[type:skill,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} + // @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} + // @coc7.item[name:Shotgun,icon:fas fa-bullseye,difficulty:+,modifier:-1]{Use shotgun} + // [TBI]@coc7.damage[formula:1D6]{Damage 1D6} + // [TBI]@coc7.roll[threshold:50]{Simple roll} + + if (!app.isContentVisible) return + + if (data.message.content.toLocaleLowerCase().includes('@coc7')) { + const parsedContent = CoC7Parser.enrichHTML(data.message.content) + html.find('.message-content').html(parsedContent) + data.message.content = parsedContent + } + return true // allow message to be published ! + } +} diff --git a/module/apps/link-creation-dialog.js b/module/apps/link-creation-dialog.js deleted file mode 100644 index 1cb735013..000000000 --- a/module/apps/link-creation-dialog.js +++ /dev/null @@ -1,428 +0,0 @@ -/* global canvas, CONST,diffObject, expandObject, FormApplication, FormDataExtended, foundry, game, mergeObject, ui */ -import { CoCActor } from '../actors/actor.js' -import { chatHelper } from '../chat/helper.js' -import { CoC7Check } from '../check.js' -import { CoC7Link } from './link.js' -import { CoC7Utilities } from '../utilities.js' - -export class CoC7LinkCreationDialog extends FormApplication { - /** @override */ - static get defaultOptions () { - return mergeObject(super.defaultOptions, { - id: 'link-creation', - classes: ['coc7', 'active-effect-sheet'], - title: game.i18n.localize('CoC7.CreateLink'), - dragDrop: [{ dragSelector: null, dropSelector: '.container' }], - template: 'systems/CoC7/templates/apps/link-creation.html', - closeOnSubmit: false, - submitOnClose: true, - submitOnChange: true, - width: 560, - height: 'auto', - choices: {}, - allowCustom: true, - minimum: 0, - maximum: null, - tabs: [ - { - navSelector: '.tabs', - contentSelector: '.effect-options', - initial: 'details' - } - ] - }) - } - - static async fromLinkData (linkData, options = {}) { - const link = await CoC7Link.fromData(linkData) - return new CoC7LinkCreationDialog(link, options) - } - - static get attributes () { - return [ - { - key: 'lck', - label: game.i18n.localize('CoC7.Luck'), - selected: false - }, - { - key: 'san', - label: game.i18n.localize('CoC7.Sanity'), - selected: false - } - ] - } - - /** @override */ - async getData () { - const data = await super.getData() - - data.link = this.link - data.data = this.link.data - data.data.effect.modes = Object.entries(CONST.ACTIVE_EFFECT_MODES).reduce( - (obj, e) => { - obj[e[1]] = game.i18n.localize('EFFECT.MODE_' + e[0]) - return obj - }, - {} - ) - data.fromGame = - this.link.is.item || - (this.link.is.check && this.link.check === CoC7Link.CHECK_TYPE.SKILL) - data.askId = - data.fromGame && - (this.link.data.fromDirectory || this.link.data.fromCompendium) - data.askPack = data.fromGame && this.link.data.fromCompendium - data.isSetFromGame = data.askId || data.askPack - - // Prepare difficulty select data - data.difficultyLevel = CoC7Check.difficultyLevel - data.selectedDifficulty = { - unknown: CoC7Check.difficultyLevel.unknown === this.link.data.difficulty, - regular: CoC7Check.difficultyLevel.regular === this.link.data.difficulty, - hard: CoC7Check.difficultyLevel.hard === this.link.data.difficulty, - extreme: CoC7Check.difficultyLevel.extreme === this.link.data.difficulty, - critical: CoC7Check.difficultyLevel.critical === this.link.data.difficulty - } - if (!this.link.data.difficulty) { - if (game.settings.get('CoC7', 'defaultCheckDifficulty') === 'unknown') { - data.selectedDifficulty.unknown = true - } else { - data.selectedDifficulty.regular = true - } - } - - // Prepare link type - data.linkType = [ - { - key: CoC7Link.LINK_TYPE.CHECK, - label: game.i18n.localize('CoC7.Check'), - selected: this.link.is.check - }, - { - key: CoC7Link.LINK_TYPE.SANLOSS, - label: game.i18n.localize('CoC7.SanityCheck'), - selected: this.link.is.sanloss - }, - { - key: CoC7Link.LINK_TYPE.ITEM, - label: game.i18n.localize('CoC7.ItemWeapon'), - selected: this.link.is.item - }, - { - key: CoC7Link.LINK_TYPE.EFFECT, - label: game.i18n.localize('EFFECT.TabEffects'), - selected: this.link.is.effect - } - ] - - // Prepare check type data - data.checkType = CoC7Link.CHECK_TYPE - data.selectedCheckType = { - characteristic: CoC7Link.CHECK_TYPE.CHARACTERISTIC === this.link.check, - attribute: CoC7Link.CHECK_TYPE.ATTRIBUTE === this.link.check, - skill: CoC7Link.CHECK_TYPE.SKILL === this.link.check - } - if (!this.link.check) data.selectedCheckType.characteristic = true - - // Prepare characteristics - data.characteristics = CoCActor.getCharacteristicDefinition() - for (let i = 0; i < data.characteristics.length; i++) { - if ( - data.data.characteristicKey === data.characteristics[i].key || - data.data.characteristicKey === data.characteristics[i].shortName || - data.data.characteristicKey === data.characteristics[i].label - ) { - data.characteristics[i].selected = true - } else { - data.characteristics[i].selected = false - } - } - - // Prepare characteristics - data.attributes = CoC7LinkCreationDialog.attributes.map(e => { - e.selected = data.data.attributeKey === e.key - return e - }) - - return data - } - - get link () { - return this.object - } - - activateListeners (html) { - html.find('.submit-button').click(this._onClickSubmit.bind(this)) - - // Replaced in options by dragDrop: [{dragSelector: null, dropSelector: '.container'}] - // const dragDrop = new DragDrop({ - // dropSelector: '.container', - // callbacks: { drop: this._onDrop.bind(this) } - // }); - // const test = dragDrop.bind(html[0]); - - super.activateListeners(html) - - // Handling effects - html.find('.effect-control').click(this._onEffectControl.bind(this)) - } - - _onEffectControl (event) { - event.preventDefault() - const button = event.currentTarget - switch (button.dataset.action) { - case 'add': - return this._addEffectChange() - case 'delete': - button.closest('.effect-change').remove() - return this.submit({ preventClose: true }).then(() => this.render()) - } - } - - async _addEffectChange () { - const idx = this.link.data.effect.changes.length - return this.submit({ - preventClose: true, - updateData: { - [`effect.changes.${idx}`]: { - key: '', - mode: CONST.ACTIVE_EFFECT_MODES.ADD, - value: '' - } - } - }) - } - - /** @inheritdoc */ - _getSubmitData (updateData = {}) { - const fd = new FormDataExtended(this.form, { editors: this.editors }) - const data = foundry.utils.expandObject(fd.object) - if (updateData) foundry.utils.mergeObject(data, updateData) - if (data.effect) { - data.effect.changes = Array.from(Object.values(data.effect.changes || {})) - } - return data - } - - async _onDrop (event) { - const dataString = event.dataTransfer.getData('text/plain') - const data = JSON.parse(dataString) - if (data.CoC7Type === 'link') { - await this.link.updateFromLink(data) - this.render(true) - } else { - if (data.actorId) { - const actorKey = - data.sceneId && data.tokenId - ? `${data.sceneId}.${data.tokenId}` - : data.actorId - const actor = chatHelper.getActorFromKey(actorKey) - if (actor.hasPlayerOwner) { - this.link.hasPlayerOwner = true - this.link.actorKey = actor.actorKey - } else this.link.hasPlayerOwner = false - } - if (data.type === 'Item') { - if (!data.data) { - if (data.id) { - this.link._linkData.id = data.id - this.link._linkData.fromDirectory = true - } - if (data.pack) { - this.link._linkData.pack = data.pack - this.link._linkData.fromDirectory = false - this.link._linkData.fromCompendium = true - } - await this.link.fetchItem() - this.render(true) - } else { - switch (data.data.type) { - case 'skill': - this.link._linkData.fromDirectory = false - this.link._linkData.fromCompendium = false - this.link.type = CoC7Link.LINK_TYPE.CHECK - this.link.check = CoC7Link.CHECK_TYPE.SKILL - this.link.name = data.data.name - this.render(true) - break - case 'weapon': - this.link._linkData.fromDirectory = false - this.link._linkData.fromCompendium = false - this.link.type = CoC7Link.LINK_TYPE.ITEM - this.link.name = data.data.name - this.render(true) - - break - default: - break - } - } - } - } - } - - async _onClickSubmit (event) { - const action = event.currentTarget.dataset.action - // if( action === 'create-effect'){ - // let item = game.items.find(i => i.name === '__CoC7InternalItem__') - // if (!item) - // item = await Item.create({ - // name: '__CoC7InternalItem__', - // type: 'item' - // }) - // for( const e of item.effects){ - // await e.delete() - // } - // const effects = await item.createEmbeddedDocuments('ActiveEffect', [ - // { - // label: game.i18n.localize('CoC7.EffectNew'), - // icon: 'icons/svg/aura.svg', - // origin: null, - // 'duration.rounds': undefined, - // disabled: true - // } - // ]) - // const effect = effects[0] - // await effect.sheet.render(true) - // } - if (!this.link.link) { - // ui.notifications.warn( 'Link is invalid !'); - return - } - switch (action) { - case 'clipboard': - CoC7Utilities.copyToClipboard(this.link.link) - break - - case 'chat': - { - const option = {} - let message - option.speaker = { - alias: game.user.name - } - if (this.link.is.effect) { - message = `
${this.link.link}
` - } else { - message = game.i18n.format('CoC7.MessageCheckRequestedWait', { - check: this.link.link - }) - } - chatHelper.createMessage(null, message, option) - } - break - - case 'whisper-owner': - { - const option = {} - option.speaker = { - alias: game.user.name - } - option.whisper = this.link.actor.owners - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageTargetCheckRequested', { - name: this.link.actor.name, - check: this.link.link - }), - option - ) - } - break - - case 'whisper-selected': - { - if (!canvas.tokens.controlled.length) { - ui.notifications.warn( - game.i18n.localize('CoC7.ErrorNoTokensSelected') - ) - return - } - const option = {} - option.speaker = { - alias: game.user.name - } - for (const t of canvas.tokens.controlled) { - if (t.actor.hasPlayerOwner) { - option.whisper = t.actor.owners - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageTargetCheckRequested', { - name: t.actor.name, - check: this.link.link - }), - option - ) - } - } - } - break - - default: - break - } - this.close() - } - - /** @override - * A subclass of the FormApplication must implement the _updateObject method. - */ - async _updateObject (event, formData) { - const target = event.currentTarget - const group = target?.closest('.form-group') - const groupName = group?.dataset.group - if (groupName === 'origin') { - // Deprecated - if (target.name === 'fromCompendium') { - this.link._linkData.fromCompendium = !this.link._linkData.fromCompendium - if (this.link._linkData.fromCompendium) { - this.link._linkData.fromDirectory = false - } - } - if (target.name === 'fromDirectory') { - this.link._linkData.fromDirectory = !this.link._linkData.fromDirectory - if (this.link._linkData.fromDirectory) { - this.link._linkData.fromCompendium = false - } - } - await this.link.fetchItem() - } else { - const formDataEx = expandObject(formData) - if (formDataEx.check) formDataEx.check = Number(formDataEx.check) - if (formDataEx.difficulty) { - formDataEx.difficulty = Number(formDataEx.difficulty) - } - if (formDataEx.type) formDataEx.type = Number(formDataEx.type) - const diffData = diffObject(this.link.data, formDataEx) - await this.link.update(diffData) - } - this.render(true) - } - - // /** @override */ - // _getSubmitData(updateData={}) { - // ui.notifications.info(`_getSubmitData: ${updateData}`); - - // // Create the expanded update data object - // const fd = new FormDataExtended(this.form, {editors: this.editors}); - // let data = fd.toObject(); - // if ( updateData ) data = mergeObject(data, updateData); - // else data = expandObject(data); - - // // Handle Damage array - // const damage = data.data?.damage; - // if ( damage ) damage.parts = Object.values(damage?.parts || {}).map(d => [d[0] || '', d[1] || '']); - - // // Return the flattened submission data - // return flattenObject(data); - // } - - // /** @override */ - // _onSubmit - - static async create () { - const link = new CoC7Link() - new CoC7LinkCreationDialog(link, {}).render(true) - } -} diff --git a/module/apps/link.js b/module/apps/link.js deleted file mode 100644 index 0a29ffc92..000000000 --- a/module/apps/link.js +++ /dev/null @@ -1,514 +0,0 @@ -/* global duplicate, foundry, game, mergeObject */ - -import { chatHelper } from '../chat/helper.js' -import { CoCActor } from '../actors/actor.js' -import { CoC7LinkCreationDialog } from './link-creation-dialog.js' -import { CoC7Utilities } from '../utilities.js' - -export class CoC7Link { - constructor () { - this._linkData = { - type: CoC7Link.LINK_TYPE.CHECK, - check: CoC7Link.CHECK_TYPE.SKILL, - effect: { - label: game.i18n.localize('CoC7.EffectNew'), - icon: 'icons/svg/aura.svg', - changes: [] - } - } - } - - static async fromData (linkData) { - const label = CoC7LinkCreationDialog.attributes - .concat(CoCActor.getCharacteristicDefinition()) - .filter(e => e.key === linkData.name) - .map(e => e.label) - if (label.length > 0) { - linkData.label = label[0] - } - const link = new CoC7Link() - await link.setData(linkData) - return link - } - - static get TYPE_KEYWORD () { - return ['check', 'sanloss', 'item'] - } - - static get CHARAC_KEYWORD () { - return ['charac', 'char', 'characteristic', 'characteristics'] - } - - static get ATTRIB_KEYWORD () { - return ['attributes', 'attribute', 'attrib', 'attribs'] - } - - static get SKILL_KEYWORD () { - return ['skill'] - } - - static get EFFECT_KEYWORD () { - return ['effect', 'effects'] - } - - static get LINK_TYPE () { - return { - CHECK: 1, - SANLOSS: 2, - ITEM: 3, - EFFECT: 4 - } - } - - static get CHECK_TYPE () { - return { - CHARACTERISTIC: 1, - ATTRIBUTE: 2, - SKILL: 3, - EFFECT: 4 - } - } - - get actor () { - if (this.actorKey) { - return chatHelper.getActorFromKey(this.actorKey) // REFACTORING (2) - } - return null - } - - get data () { - const data = duplicate(this._linkData) - data.isCheck = this.is.check - data.isSanloss = this.is.sanloss - data.isItem = this.is.item - data.isEffect = this.is.effect - return data - } - - async fetchItem () { - this._linkData.validItem = false - if (!this._linkData.fromCompendium && !this._linkData.fromDirectory) { - this._item = undefined - return false - } - - if (this._linkData.fromCompendium) { - const pack = game.packs.get(this._linkData.pack) - if (!pack) return false - if (pack.metadata.entity !== 'Item') return undefined - this._item = await pack.getDocument(this._linkData.id) - } - - if (this._linkData.fromDirectory) { - this._item = game.items.get(this._linkData.id) - } - - this._linkData.skillName = null - this._linkData.itemName = null - - if (this._item) { - if (this._item.data.type === 'weapon') { - this.type = CoC7Link.LINK_TYPE.ITEM - this._linkData.itemName = this._item.data.name - this._linkData.validItem = true - return true - } - - if (this._item.data.type === 'skill') { - this.type = CoC7Link.LINK_TYPE.CHECK - this.check = CoC7Link.CHECK_TYPE.SKILL - this._linkData.skillName = this._item.data.name - this._linkData.validItem = true - return true - } - } - return false - } - - async setData (x) { - // this._linkData = x; - // this._linkData.forceModifiers = false; - this._linkData.fromCompendium = false - this._linkData.fromDirectory = false - this.hasPlayerOwner = false - - if (x.hasPlayerOwner) { - this.hasPlayerOwner = true - this.actorKey = x.actorKey - } - - // Retrieve item - if (x.pack && x.id) { - this._linkData.fromCompendium = true - this._linkData.pack = x.pack - this._linkData.id = x.id - } - - if (x.id && !x.pack) { - this._linkData.fromDirectory = true - this._linkData.id = x.id - } - - const linkSet = await this.fetchItem() - - if (!linkSet) { - // Link definition - if (x.check) this.type = x.check - else this.type = CoC7Link.LINK_TYPE.CHECK // check, sanloss, item - if (x.type) this.check = x.type - // attrib, charac, skill - else if (this.type) this.check = CoC7Link.CHECK_TYPE.CHARACTERISTIC - - // Link name - if (x.name) { - this._linkData.itemName = null - this._linkData.skillName = null - this._linkData.characteristicKey = null - this._linkData.attributeKey = null - if (this.is.check) { - switch (this.check) { - case CoC7Link.CHECK_TYPE.SKILL: - this._linkData.skillName = x.name - break - case CoC7Link.CHECK_TYPE.CHARACTERISTIC: - this._linkData.characteristicKey = x.name - break - case CoC7Link.CHECK_TYPE.ATTRIBUTE: - this._linkData.attributeKey = x.name - break - default: - break - } - } else if (this.is.item) this._linkData.itemName = x.name - } - } - - // Modifiers - if (x.difficulty || !isNaN(Number(x.difficulty))) { - this._linkData.difficulty = Number(x.difficulty) - } - if (x.modifier || !isNaN(Number(x.modifier))) { - this._linkData.modifier = Number(x.modifier) - } - if ( - typeof x.difficulty !== 'undefined' || - typeof x.modifier !== 'undefined' - ) { - this._linkData.forceModifiers = true - } - if (x.forceModifiers) this._linkData.forceModifiers = true - - // Force displayed name - if (x.displayName === 'true' || x.displayName === true) { - this._linkData.displayName = true - } - if (x.label) { - this._linkData.hasLabel = true - this._linkData.label = x.label - } - - // Icon - if (x.icon) { - this._linkData.hasIcon = true - this._linkData.icon = x.icon - } - - // Blind - if (x.blind === 'true' || x.blind === true) this._linkData.blind = true - - // San Data - this._linkData.sanMin = x.sanMin - this._linkData.sanMax = x.sanMax - this._linkData.sanReason = x.sanReason - - // Effect - if (this.is.effect || x.object) { - if ( - x.object && - (typeof x.object === 'string' || x.object instanceof String) - ) { - this._linkData.effect = JSON.parse(x.object) - } else this._linkData.effect = foundry.utils.deepClone(x.object) - if (!this._linkData.effect.changes) this._linkData.effect.changes = [] - } - } - - get type () { - return this._linkData.type - } - - get checkType () { - switch (this.check) { - case CoC7Link.CHECK_TYPE.CHARACTERISTIC: - return 'characteristic' - case CoC7Link.CHECK_TYPE.ATTRIBUTE: - return 'attribute' - case CoC7Link.CHECK_TYPE.SKILL: - return 'skill' - case CoC7Link.CHECK_TYPE.EFFECT: - return 'effect' - default: - return undefined - } - } - - set type (x) { - if (!isNaN(Number(x))) this._linkData.type = x - else { - switch (x.toLowerCase()) { - case 'check': - this._linkData.type = CoC7Link.LINK_TYPE.CHECK - break - case 'sanloss': - this._linkData.type = CoC7Link.LINK_TYPE.SANLOSS - break - case 'item': - this._linkData.type = CoC7Link.LINK_TYPE.ITEM - break - case 'effect': - this._linkData.type = CoC7Link.LINK_TYPE.EFFECT - break - default: - this._linkData.type = undefined - break - } - } - } - - get check () { - return !isNaN(Number(this._linkData.check)) - ? Number(this._linkData.check) - : undefined - } - - set check (x) { - if (!isNaN(Number(x))) this._linkData.check = Number(x) - else { - this._linkData.check = undefined - if (CoC7Link.CHARAC_KEYWORD.includes(x)) { - this.type = CoC7Link.LINK_TYPE.CHECK - this._linkData.check = CoC7Link.CHECK_TYPE.CHARACTERISTIC - } - if (CoC7Link.ATTRIB_KEYWORD.includes(x)) { - this.type = CoC7Link.LINK_TYPE.CHECK - this._linkData.check = CoC7Link.CHECK_TYPE.ATTRIBUTE - } - if (CoC7Link.SKILL_KEYWORD.includes(x)) { - this.type = CoC7Link.LINK_TYPE.CHECK - this._linkData.check = CoC7Link.CHECK_TYPE.SKILL - } - if (CoC7Link.EFFECT_KEYWORD.includes(x)) { - this.type = CoC7Link.LINK_TYPE.EFFECT - this._linkData.check = CoC7Link.CHECK_TYPE.EFFECT - } - } - } - - get name () { - if (this.is.check) { - switch (this.check) { - case CoC7Link.CHECK_TYPE.CHARACTERISTIC: - return this._linkData.characteristicKey - case CoC7Link.CHECK_TYPE.ATTRIBUTE: - return this._linkData.attributeKey - case CoC7Link.CHECK_TYPE.SKILL: - return this._linkData.skillName - - default: - return undefined - } - } else if (this.is.item) return this._linkData.itemName - return undefined - } - - set name (x) { - if (this.is.check) { - switch (this.check) { - case CoC7Link.CHECK_TYPE.CHARACTERISTIC: - this._linkData.characteristicKey = x - break - case CoC7Link.CHECK_TYPE.ATTRIBUTE: - this._linkData.attributeKey = x - break - case CoC7Link.CHECK_TYPE.SKILL: - this._linkData.skillName = x - break - - default: - break - } - } else if (this.is.item) this._linkData.itemName = x - } - - get is () { - const link = this - return { - get check () { - return link.type === CoC7Link.LINK_TYPE.CHECK - }, - set check (x) { - if (x === true) link.type = CoC7Link.LINK_TYPE.CHECK - }, - get sanloss () { - return link.type === CoC7Link.LINK_TYPE.SANLOSS - }, - set sanloss (x) { - if (x === true) link.type = CoC7Link.LINK_TYPE.SANLOSS - }, - get item () { - return link.type === CoC7Link.LINK_TYPE.ITEM - }, - set item (x) { - if (x === true) link.type = CoC7Link.LINK_TYPE.ITEM - }, - get effect () { - return link.type === CoC7Link.LINK_TYPE.EFFECT - }, - set effect (x) { - if (x === true) link.type = CoC7Link.LINK_TYPE.EFFECT - } - } - } - - async update (updateData) { - this._linkData = mergeObject(this._linkData, updateData) - if (this._linkData.fromDirectory || this._linkData.fromCompendium) { - await this.fetchItem() - } - } - - async updateFromLink (linkData) { - await this.setData(linkData) - if (this._linkData.fromDirectory || this._linkData.fromCompendium) { - await this.fetchItem() - } - } - - get link () { - if (!this.type) return null - switch (this.type) { - case CoC7Link.LINK_TYPE.CHECK: { - // @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)} - if (!this.type || !this.name) return null - let options = `${this._linkData.blind ? 'blind,' : ''}type:${ - this.checkType - },name:${this.name}` - if (typeof this._linkData.difficulty !== 'undefined') { - options += `,difficulty:${this._linkData.difficulty}` - } - if (typeof this._linkData.modifier !== 'undefined') { - options += `,modifier:${this._linkData.modifier}` - } - if (this._linkData.icon) options += `,icon:${this._linkData.icon}` - - // TODO: Check if needed - if (this._linkData.fromCompendium) { - options += `,pack:${this._linkData.pack}` - } - if (this._linkData.fromCompendium || this._linkData.fromDirectory) { - options += `,id:${this._linkData.id}` - } - - let link = `@coc7.check[${options}]` - if (this._linkData.hasLabel && this._linkData.label) { - link += `{${this._linkData.label}}` - } else if (this.name) { - link += `{${this.name}}` - } - return link - } - - case CoC7Link.LINK_TYPE.SANLOSS: { - // @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6} - if (!this._linkData.sanMax || !this._linkData.sanMin) return null - - // TODO : Blind SAN test ?? - // let options = `${this._linkData.blind?'blind,':''}sanMax:${this._linkData.sanMax},sanMin:${this._linkData.sanMin}`; - let options = `sanMax:${this._linkData.sanMax},sanMin:${this._linkData.sanMin}` - - if (this._linkData.difficulty) { - options += `,difficulty:${this._linkData.difficulty}` - } - if (this._linkData.sanReason) { - options += `,sanReason:${this._linkData.sanReason}` - } - if (this._linkData.modifier) { - options += `,modifier:${this._linkData.modifier}` - } - if (this._linkData.icon) options += `,icon:${this._linkData.icon}` - let link = `@coc7.sanloss[${options}]` - if (this._linkData.hasLabel) link += `{${this._linkData.label}}` - return link - } - - // Do we need that ??? - case CoC7Link.LINK_TYPE.ITEM: { - // @coc7.item[type:optional,name:Shotgun,difficulty:+,modifier:-1]{Hard Shitgun check(-1)} - if (!this.type || !this.name) return null - let options = `name:${this.name}` - if (this._linkData.icon) options += `,icon:${this._linkData.icon}` - - // TODO: Check if needed - if (this._linkData.fromCompendium) { - options += `,pack:${this._linkData.pack}` - } - if (this._linkData.fromCompendium || this._linkData.fromDirectory) { - options += `,id:${this._linkData.id}` - } - - let link = `@coc7.item[${options}]` - if (this._linkData.hasLabel) link += `{${this._linkData.label}}` - return link - } - - case CoC7Link.LINK_TYPE.EFFECT: { - const effectData = foundry.utils.deepClone(this._linkData.effect) - if (!this.effectIsTemp) delete effectData.duration - if (effectData.changes?.length === 0) delete effectData.changes - if (!effectData.disabled) delete effectData.disabled - if (!effectData.tint) delete effectData.tint - let link = `@coc7.effect[${JSON.stringify(effectData)}]` - if ( - this._linkData.hasLabel && - typeof this._linkData.label !== 'undefined' - ) { - link += `{${this._linkData.label}}` - } - return link - } - - default: - return null - } - } - - get effectIsTemp () { - if (!this._linkData.effect.duration) return false - const duration = - this._linkData.effect.duration.seconds ?? - (this._linkData.effect.duration.rounds || - this._linkData.effect.duration.turns) ?? - 0 - return duration > 0 - } - - sendToChat () { - const option = {} - let message - option.speaker = { - alias: game.user.name - } - if (this.is.effect) { - message = `
${this.link}
` - } else { - message = game.i18n.format('CoC7.MessageCheckRequestedWait', { - check: this.link - }) - } - chatHelper.createMessage(null, message, option) - } - - sendToClipboard () { - CoC7Utilities.copyToClipboard(this.link) - } -} diff --git a/module/apps/parser.js b/module/apps/parser.js deleted file mode 100644 index ba5d3def0..000000000 --- a/module/apps/parser.js +++ /dev/null @@ -1,595 +0,0 @@ -/* global canvas, ChatMessage, duplicate, game, NodeFilter, TextEditor, ui */ - -/** - * Allow for parsing of CoC7 elements in chat message and sheets. - * Format is : - * @coc7.TYPE_OF_REQUEST[OPTIONS]{DISPLAYED_NAME} - * TYPE_OF_REQUEST : - * - sanloss : trigger a san check, upon failure will propose to deduct the corresponding SAN. - * - check : trigger a check depending on the options. - * - * OPTIONS: [] = optional - * sanloss: - * sanMax: max SAN loss - * sanMin: min SAN loss - * check: - * type: type of check (characteristic, skill, attrib). - * name: name of the skill/characteristic. - * [difficulty]: ? (blind), 0 (regular), + (hard), ++ (extreme), +++ (critical). - * [modifier]: -x (x penalty dice), +x (x bonus dice), 0 (no modifier). - * [icon]: icon tu use (font awsome). - * [blind]: will trigger a blind roll. - * - * [DISPLAYED_NAME: name to display.] - * - */ - -import { SanCheckCard } from '../chat/cards/san-check.js' -import { isCtrlKey, chatHelper } from '../chat/helper.js' - -// import { CoC7SanCheck } from '../chat/sancheck.js'; -import { CoC7Check } from '../check.js' -import { CoC7Utilities } from '../utilities.js' -import { CoC7LinkCreationDialog } from './link-creation-dialog.js' -import { CoC7Link } from './link.js' -import { RollDialog } from './roll-dialog.js' - -export class CoC7Parser { - static async onEditorDrop (event, editor) { - // TODO: MANAGE FLAT MODIFIER THERE - event.preventDefault() - - // check key pressed (CTRL ?) - // if CTRL check if item is skill/weapon - // if item from game or pack add ref to the link ! - // const dataString = event.dataTransfer.getData('text/plain'); - const dataString = event.dataTransfer.getData('text/plain') - const data = JSON.parse(dataString) - if (data.linkType === 'coc7-link') { - event.stopPropagation() - if (data.type !== 'effect') { - if ( - !event.shiftKey && - (typeof data.difficulty === 'undefined' || - typeof data.modifier === 'undefined') - ) { - const usage = await RollDialog.create({ - disableFlatDiceModifier: true - }) - if (usage) { - data.modifier = usage.get('bonusDice') - data.difficulty = usage.get('difficulty') - } - } - if (game.settings.get('core', 'rollMode') === 'blindroll') { - data.blind = true - } - const link = CoC7Parser.createCoC7Link(data) - if (link) { - editor.insertContent(link) - } - } else { - const link = await CoC7Link.fromData(data) - editor.insertContent(link.link) - } - } else if (isCtrlKey(event)) { - event.stopPropagation() - - if (data.type !== 'Item') return - - let item - const linkData = {} - - if (data.pack) { - const pack = game.packs.get(data.pack) - if (pack.metadata.entity !== 'Item') return - item = await pack.getDocument(data.id) - } else if (data.data) { - item = data.data - } else { - item = game.items.get(data.id) - } - - if (!item) return - - linkData.name = item.name - if (data.pack) linkData.pack = data.pack - if (data.id) linkData.id = data.id - - if (item.type === 'skill') { - if (!event.shiftKey) { - const usage = await RollDialog.create({ - disableFlatDiceModifier: true - }) - if (usage) { - linkData.modifier = usage.get('bonusDice') - linkData.difficulty = usage.get('difficulty') - } - } - linkData.check = 'check' - linkData.type = 'skill' - if (game.settings.get('core', 'rollMode') === 'blindroll') { - linkData.blind = true - } - } else if (item.type === 'weapon') { - linkData.check = 'item' - linkData.type = 'weapon' - } else return - - const link = CoC7Parser.createCoC7Link(linkData) - if (link) { - editor.insertContent(link) - } - } - } - - static ParseMessage ( - message, - html, - data /* chatMessage, data/*, option, user */ - ) { - // @coc7.sanloss[sanMax:1D6,sanMin:1,sanReason:Ghouls,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6} - // @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)} - // @coc7.check[type:attrib,name:lck,difficulty:+,modifier:-1]{Hard luck check(-1)} - // @coc7.check[type:skill,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} - // @coc7.check[type:skill,icon:fas fa-arrow-alt-circle-right,name:anthropology,difficulty:+,modifier:-1]{Hard Anthropology check(-1)} - // @coc7.item[name:Shotgun,icon:fas fa-bullseye,difficulty:+,modifier:-1]{Use shotgun} - // [TBI]@coc7.damage[formula:1D6]{Damage 1D6} - // [TBI]@coc7.roll[threshold:50]{Simple roll} - - if (!message.isContentVisible) return - - if (data.message.content.toLocaleLowerCase().includes('@coc7')) { - const parsedContent = CoC7Parser.enrichHTML(data.message.content) - html.find('.message-content').html(parsedContent) - // chatMessage.data.content = parsedContent; - data.message.content = parsedContent - } - return true // allow message to be published ! - } - - static createCoC7Link (data) { - if (!data.check) return - switch (data.check.toLowerCase()) { - case 'check': { - // @coc7.check[type:charac,name:STR,difficulty:+,modifier:-1]{Hard STR check(-1)} - if (!data.type || !data.name) return - let options = `${data.blind ? 'blind,' : ''}type:${data.type},name:${ - data.name - }` - if (typeof data.difficulty !== 'undefined') { - options += `,difficulty:${data.difficulty}` - } - if (typeof data.modifier !== 'undefined') { - options += `,modifier:${data.modifier}` - } - if (data.icon) options += `,icon:${data.icon}` - if (data.pack) options += `,pack:${data.pack}` - if (data.id) options += `,id:${data.id}` - let link = `@coc7.check[${options}]` - if (data.displayName) link += `{${data.displayName}}` - return link - } - - case 'sanloss': { - // @coc7.sanloss[sanMax:1D6,sanMin:1,difficulty:++,modifier:-1]{Hard San Loss (-1) 1/1D6} - if (!data.sanMax || !data.sanMin) return - let options = `${data.blind ? 'blind,' : ''}sanMax:${ - data.sanMax - },sanMin:${data.sanMin}` - if (data.difficulty) options += `,difficulty:${data.difficulty}` - if (data.modifier) options += `,modifier:${data.modifier}` - if (data.icon) options += `,icon:${data.icon}` - let link = `@coc7.sanloss[${options}]` - if (data.displayName) link += `{${data.displayName}}` - return link - } - - // Do we need that ??? - case 'item': { - // @coc7.item[type:optional,name:Shotgun,difficulty:+,modifier:-1]{Hard Shitgun check(-1)} - if (!data.type || !data.name) return - let options = `${data.blind ? 'blind,' : ''}type:${data.type},name:${ - data.name - }` - // if( data.difficulty) options += `,difficulty:${data.difficulty}`; - // if( data.modifier) options += `,modifier:${data.modifier}`; - if (data.icon) options += `,icon:${data.icon}` - if (data.pack) options += `,pack:${data.pack}` - if (data.id) options += `,id:${data.id}` - let link = `@coc7.item[${options}]` - if (data.displayName) link += `{${data.displayName}}` - return link - } - - default: - break - } - } - - static ParseSheetContent (app, html) { - // Check in all editors content for a link. - for (const element of html.find('div.editor-content > *, p')) { - if (element.outerHTML.toLocaleLowerCase().includes('@coc7')) { - element.outerHTML = CoC7Parser.enrichHTML(element.outerHTML) - } - } - - // Bind the click to execute the check. - // html.on('click', 'a.coc7-link', CoC7Parser._onCheck.bind(this)); - html - .find('a.coc7-link') - .on('click', async event => await CoC7Parser._onCheck(event)) - html - .find('a.coc7-link') - .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) - } - - static _getTextNodes (parent) { - const text = [] - const walk = document.createTreeWalker( - parent, - NodeFilter.SHOW_TEXT, - null, - false - ) - while (walk.nextNode()) text.push(walk.currentNode) - return text - } - - static enrichHTML (content) { - const html = document.createElement('div') - html.innerHTML = String(content) - - let text = [] - - text = TextEditor._getTextNodes(html) - // Alternative regex : '@(coc7).([^\[]+)\[([^\]]+)\](?:{([^}]+)})?' - // Before active effect : '@(coc7).(.*?)\\[([^\\]]+)\\]' + '(?:{([^}]+)})?', - const rgx = new RegExp('@(coc7)\\.' + '([^\\]]+?)' + '\\[((?:[^\\]\\[]+|\\[(?:[^\\]\\[]+|\\[[^\\]\\[]*\\])*\\])*)\\]' + '(?:{([^}]+)})?', 'gi') - TextEditor._replaceTextContent(text, rgx, CoC7Parser._createLink) - return html.innerHTML - } - - static bindEventsHandler (html) { - html - .find('a.coc7-link') - .on('click', async event => await CoC7Parser._onCheck(event)) - html - .find('a.coc7-link') - .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) - } - - static _onDragCoC7Link (event) { - const a = event.currentTarget - const i = a.querySelector('[data-link-icon]') - const data = duplicate(a.dataset) - data.linkType = 'coc7-link' - data.CoC7Type = 'link' - data.icon = null - - if ( - data.object && - (typeof data.object === 'string' || data.object instanceof String) - ) { - data.object = JSON.parse(data.object) - data.type = 'effect' - } - - if ( - i.dataset && - i.dataset.linkIcon && - i.dataset.linkIcon !== 'fas fa-dice' - ) { - data.icon = i.dataset.linkIcon - } - data.displayName = a.dataset.displayName ? a.innerText : null - event.originalEvent.dataTransfer.setData('text/plain', JSON.stringify(data)) - } - - static _createLink (match) { - const name = match[4] ?? undefined - const options = match[3] ?? undefined - const type = match[2] ?? undefined - // const tag = match[1] ?? undefined - - const data = { - cls: ['coc7-link'], - dataset: { check: type }, - icon: null, - blind: false, - name - } - - const matches = options.matchAll(/[^,]+/gi) - if (type === 'effect') { - data.effect = JSON.parse(options) - data.dataset.object = options - } else { - for (const match of Array.from(matches)) { - let [key, value] = match[0].split(':') - if (key === 'icon') data.icon = value - if (key === 'blind' && typeof value === 'undefined') { - value = true - data.blind = true && ['check'].includes(type.toLowerCase()) - } - data.dataset[key] = value - } - } - - let title - const difficulty = CoC7Check.difficultyString(data.dataset.difficulty) - - switch (type.toLowerCase()) { - case 'check': { - let humanName = data.dataset.name - if ( - ['attributes', 'attribute', 'attrib', 'attribs'].includes( - data.dataset.type?.toLowerCase() - ) - ) { - if (data.dataset.name === 'lck') { - humanName = game.i18n.localize('CoC7.Luck') - } - if (data.dataset.name === 'san') { - humanName = game.i18n.localize('CoC7.Sanity') - } - } - if ( - ['charac', 'char', 'characteristic', 'characteristics'].includes( - data.dataset.type?.toLowerCase() - ) - ) { - humanName = CoC7Utilities.getCharacteristicNames( - data.dataset.name - )?.label - } - title = game.i18n.format( - `CoC7.LinkCheck${!data.dataset.difficulty ? '' : 'Diff'}${ - !data.dataset.modifier ? '' : 'Modif' - }`, - { - difficulty, - modifier: data.dataset.modifier, - name: humanName - } - ) - break - } - case 'sanloss': - title = game.i18n.format( - `CoC7.LinkSanLoss${!data.dataset.difficulty ? '' : 'Diff'}${ - !data.dataset.modifier ? '' : 'Modif' - }`, - { - difficulty, - modifier: data.dataset.modifier, - sanMin: data.dataset.sanMin, - sanMax: data.dataset.sanMax - } - ) - break - case 'item': - title = game.i18n.format( - `CoC7.LinkItem${!data.dataset.difficulty ? '' : 'Diff'}${ - !data.dataset.modifier ? '' : 'Modif' - }`, - { - difficulty, - modifier: data.dataset.modifier, - name: data.dataset.name - } - ) - break - case 'effect': - title = data.effect.label - break - default: - break - } - - if (!name) { - data.name = title - } else data.dataset.displayName = true - - const a = document.createElement('a') - a.title = game.user.isGM ? data.name : title - a.classList.add(...data.cls) - for (const [k, v] of Object.entries(data.dataset)) { - a.dataset[k] = v - } - a.draggable = true - data.icon = data.icon ?? data.effect?.icon ?? 'fas fa-dice' - // check if it's an image or an icon - if (data.icon.includes('\\') || data.icon.includes('.')) { - data.img = data.icon - } - if (data.blind) a.innerHTML += '' - if (data.img) { - a.innerHTML += `` - } else { - a.innerHTML += `` - } - a.innerHTML += `${data.name}` - - return a - } - - /** - * Trigger a check when a link is clicqued. - * Depending the origin - * @param {*} event - * - */ - static async _onCheck (event) { - const options = event.currentTarget.dataset - - if (options.difficulty) { - options.difficulty = CoC7Utilities.convertDifficulty(options.difficulty) - } - - // Click origin (from message or from sheet) - // const fromSheet = event.currentTarget.closest('.chat-message')?false:true; - - if (game.user.isGM) { - if (isCtrlKey(event)) { - if (options.displayName) options.label = event.currentTarget.innerText - const link = await CoC7Link.fromData(options) - const linkDialog = new CoC7LinkCreationDialog(link) - linkDialog.render(true) - return - } - if (canvas.tokens.controlled.length) { - const link = await CoC7Link.fromData(options) - - for (const token of canvas.tokens.controlled) { - switch (options.check) { - case 'check': - if ( - [ - 'charac', - 'char', - 'characteristic', - 'characteristics' - ].includes(options.type.toLowerCase()) - ) { - return token.actor.characteristicCheck( - options.name, - event.shiftKey, - options - ) - } - if (['skill'].includes(options.type.toLowerCase())) { - return token.actor.skillCheck(options, event.shiftKey, options) - } - if ( - ['attributes', 'attribute', 'attrib', 'attribs'].includes( - options.type.toLowerCase() - ) - ) { - return token.actor.attributeCheck( - options.name, - event.shiftKey, - options - ) - } - break - - case 'sanloss': { - SanCheckCard.create(token.actor.actorKey, options, { - fastForward: event.shiftKey - }) - break - } - - case 'item': { - return token.actor.weaponCheck(options, event.shiftKey) - } - - case 'effect': - await token.actor.createEmbeddedDocuments('ActiveEffect', [ - link.data.effect - ]) - break - - default: - } - } - } else { - if (game.user.data.document.character?.data) { - await Promise.all( - game.user.data.document.character.data.items.map(async v => { - if (v.name === options.name) { - const check = new CoC7Check() - check._rawValue = v.data.data.base - await check.roll() - check.toMessage() - } - return false - }) - ) - } else if (game.user.isGM) { - const option = { - speaker: { - alias: game.user.name - } - } - chatHelper.createMessage( - null, - game.i18n.format('CoC7.MessageCheckRequestedWait', { - check: (await CoC7Link.fromData(options)).link - }), - option - ) - } - } - } else { - const speaker = ChatMessage.getSpeaker() - const actor = ChatMessage.getSpeakerActor(speaker) - if (actor) { - switch (options.check) { - case 'check': - if ( - ['charac', 'char', 'characteristic', 'characteristics'].includes( - options.type.toLowerCase() - ) - ) { - return actor.characteristicCheck( - options.name, - event.shiftKey, - options - ) - } - if (['skill'].includes(options.type.toLowerCase())) { - return actor.skillCheck(options, event.shiftKey, options) - } - if ( - ['attributes', 'attribute', 'attrib', 'attribs'].includes( - options.type.toLowerCase() - ) - ) { - return actor.attributeCheck(options.name, event.shiftKey, options) - } - break - - case 'sanloss': { - SanCheckCard.create(actor.id, options, { - fastForward: event.shiftKey - }) - // const check = new CoC7SanCheck( - // actor.id, - // options.sanMin, - // options.sanMax, - // undefined != options.difficulty?CoC7Utilities.convertDifficulty(options.difficulty):CoC7Check.difficultyLevel.regular, - // undefined != options.modifier?Number(options.modifier):0); - // check.toMessage( event.shiftKey); - break - } - - case 'item': { - return actor.weaponCheck(options, event.shiftKey) - } - default: - } - } else { - if (game.user.data.document.character?.data) { - await Promise.all( - game.user.data.document.character.data.items.map(async v => { - if (v.name === options.name) { - const check = new CoC7Check() - check._rawValue = v.data.data.base - await check.roll() - check.toMessage() - } - return false - }) - ) - } else { - ui.notifications.warn( - game.i18n.localize('CoC7.WarnNoControlledActor') - ) - } - } - } - } -} diff --git a/module/chat.js b/module/chat.js index 1f84fe448..58ebe4273 100644 --- a/module/chat.js +++ b/module/chat.js @@ -1,6 +1,7 @@ /* global $, ChatMessage, CONST, game, Token, tokenData, ui */ import { CoC7Check } from './check.js' import { COC7 } from './config.js' +import { CoC7Link } from './apps/coc7-link.js' import { CoC7MeleeInitiator } from './chat/combat/melee-initiator.js' import { CoC7MeleeTarget } from './chat/combat/melee-target.js' import { CoC7MeleeResoltion } from './chat/combat/melee-resolution.js' @@ -8,7 +9,6 @@ import { CoC7RangeInitiator } from './chat/rangecombat.js' import { CoC7Roll, chatHelper, isCtrlKey } from './chat/helper.js' // import { CoC7DamageRoll } from './chat/damagecards.js'; import { CoC7ConCheck } from './chat/concheck.js' -import { CoC7Parser } from './apps/parser.js' import { SanCheckCard } from './chat/cards/san-check.js' import { OpposedCheckCard } from './chat/cards/opposed-roll.js' import { CombinedCheckCard } from './chat/cards/combined-roll.js' @@ -21,9 +21,6 @@ const CHAT_COC7_MESSAGE = { '
???

?

' } export class CoC7Chat { - // static createChatMessageHook(chatMessage, options, user){ - // } - static renderChatMessageHook (chatMessage, html) { if (chatMessage.getFlag('CoC7', 'GMSelfRoll') && !game.user.isGM) { html.find('.whisper-to').remove() @@ -134,8 +131,7 @@ export class CoC7Chat { html.on('dblclick', '.open-actor', CoC7Chat._onOpenActor.bind(this)) - html.on('click', '.coc7-link', await CoC7Parser._onCheck.bind(this)) - html.on('dragstart', 'a.coc7-link', CoC7Parser._onDragCoC7Link.bind(this)) + CoC7Link.bindEventsHandler(html) html.on('click', 'coc7-inline-result', CoC7Chat._onInline.bind(this)) diff --git a/module/coc7.js b/module/coc7.js index ac991bcf1..bcc65e2ef 100644 --- a/module/coc7.js +++ b/module/coc7.js @@ -7,7 +7,7 @@ import { CoC7Combat, rollInitiative } from './combat.js' import { COC7 } from './config.js' import { Updater } from './updater.js' import { CoC7Utilities } from './utilities.js' -import { CoC7Parser } from './apps/parser.js' +import { CoC7Parser } from './apps/coc7-parser.js' import { CoC7Check } from './check.js' import { CoC7Menu } from './menu.js' import { DamageCard } from './chat/cards/damage.js' @@ -287,7 +287,7 @@ Hooks.on('changeSidebarTab', directory => { } }) -Hooks.on('hotbarDrop', async (bar, data, slot) => { +Hooks.on('hotbarDrop', (bar, data, slot) => { return CoC7Utilities.createMacro(bar, data, slot) }) diff --git a/module/hooks/init.js b/module/hooks/init.js index 0ce1ae617..81a30f931 100644 --- a/module/hooks/init.js +++ b/module/hooks/init.js @@ -6,6 +6,7 @@ import { registerSheets } from '../scripts/register-sheets.js' import { handlebarsHelper } from '../scripts/handlebars-helper.js' import { compendiumFilter } from '../scripts/compendium-filter.js' import { CoCID } from '../scripts/coc-id.js' +import { CoC7Link } from '../apps/coc7-link.js' export function listen () { Hooks.once('init', async () => { @@ -16,5 +17,6 @@ export function listen () { handlebarsHelper() compendiumFilter() CoCID.init() + CoC7Link.init() }) } diff --git a/module/hooks/render-chat-message.js b/module/hooks/render-chat-message.js index db064d1c1..deaa08711 100644 --- a/module/hooks/render-chat-message.js +++ b/module/hooks/render-chat-message.js @@ -1,17 +1,13 @@ /* global Hooks */ import { CoC7Chat } from '../chat.js' -import { CoC7Parser } from '../apps/parser.js' +import { CoC7Link } from '../apps/coc7-link.js' +import { CoC7Parser } from '../apps/coc7-parser.js' export function listen () { Hooks.on('renderChatMessage', (app, html, data) => { CoC7Chat.renderMessageHook(app, html, data) CoC7Chat.renderChatMessageHook(app, html, data) CoC7Parser.ParseMessage(app, html, data) - html - .find('a.coc7-link') - .on('click', async event => await CoC7Parser._onCheck(event)) - html - .find('a.coc7-link') - .on('dragstart', event => CoC7Parser._onDragCoC7Link(event)) + CoC7Link.bindEventsHandler(html) }) } diff --git a/module/items/item.js b/module/items/item.js index 855921444..2519366cc 100644 --- a/module/items/item.js +++ b/module/items/item.js @@ -1,5 +1,5 @@ /* global CONFIG, duplicate, game, getProperty, Item, Roll, TextEditor, Token, ui */ -import { CoC7Parser } from '../apps/parser.js' +import { CoC7Parser } from '../apps/coc7-parser.js' import { COC7 } from '../config.js' import { CoC7Utilities } from '../utilities.js' import { CoCIDEditor } from '../apps/coc-id-editor.js' diff --git a/module/menu.js b/module/menu.js index 1d29b6f09..4b9b27198 100644 --- a/module/menu.js +++ b/module/menu.js @@ -2,7 +2,7 @@ import { CoC7Chat } from './chat.js' import { CoC7Utilities } from './utilities.js' import { CoC7ActorImporterDialog } from './apps/actor-importer-dialog.js' -import { CoC7LinkCreationDialog } from './apps/link-creation-dialog.js' +import { CoC7ContentLinkDialog } from './apps/coc7-content-link-dialog.js' class CoC7MenuLayer extends PlaceablesLayer { constructor () { @@ -145,6 +145,6 @@ export class CoC7Menu { .click(event => CoC7Utilities.rollDice(event)) html .find('.coc7-menu.coc7-create-link') - .click(event => CoC7LinkCreationDialog.create(event)) + .click(event => CoC7ContentLinkDialog.create(event)) } } diff --git a/module/utilities.js b/module/utilities.js index aef569e1b..c79e7c3a5 100644 --- a/module/utilities.js +++ b/module/utilities.js @@ -1,4 +1,4 @@ -/* global canvas, ChatMessage, CONFIG, CONST, Dialog, duplicate, Folder, fromUuid, game, getDocumentClass, Hooks, Macro, Roll, Token, ui */ +/* global canvas, ChatMessage, CONFIG, CONST, Dialog, duplicate, Folder, fromUuid, fromUuidSync, game, getDocumentClass, Hooks, Macro, Roll, Token, ui */ import { COC7 } from './config.js' import { CoC7Check } from './check.js' import { CoC7Item } from './items/item.js' @@ -195,6 +195,11 @@ export class CoC7Utilities { short: game.i18n.localize('CHARAC.EDU'), label: game.i18n.localize('CHARAC.Education') } + case 'luck': + return { + short: game.i18n.localize('CoC7.Luck'), + label: game.i18n.localize('CoC7.Luck') + } default: { for (const [, value] of Object.entries( game.system.template.Actor.templates.characteristics.characteristics @@ -277,10 +282,10 @@ export class CoC7Utilities { await CoC7Utilities.rollDice(event, { threshold }) } - static async createMacro (bar, data, slot) { + static createMacro (bar, data, slot) { if (data.type !== 'Item') return - const item = await fromUuid(data.uuid) + const item = fromUuidSync(data.uuid, bar) if (!item) { return ui.notifications.warn( @@ -310,18 +315,22 @@ export class CoC7Utilities { if (command !== '') { // Create the macro command - let macro = game.macros.contents.find( + const macro = game.macros.contents.find( m => m.name === item.name && m.command === command ) if (!macro) { - macro = await Macro.create({ + Macro.create(duplicate({ name: item.name, type: 'script', img: item.img, command + })).then(macro => { + game.user.assignHotbarMacro(macro, slot) }) + return false } game.user.assignHotbarMacro(macro, slot) + return false } return true } diff --git a/templates/apps/link-creation.html b/templates/apps/link-creation.html index 35697cf0c..d15ad8026 100644 --- a/templates/apps/link-creation.html +++ b/templates/apps/link-creation.html @@ -4,75 +4,83 @@
- {{#if link.is.check}} + {{#if link.isCheck}}
- +
- {{#if selectedCheckType.characteristic}} + {{#if link.isCharacteristicCheck}}
{{/if}} - {{#if selectedCheckType.attribute}} + {{#if link.isAttributeCheck}}
{{/if}} - {{#if selectedCheckType.skill}} + {{#if link.isSkillCheck}}
- +
{{/if}} {{/if}} - {{#if link.is.item}} + {{#if link.isItemCheck}}
- +
{{/if}} - {{#if link.is.sanloss}} + {{#if link.isSanLossCheck}}
- +
- +
- +
{{/if}} - {{#if link.is.effect}} + {{#if link.isEffect}}
{{!-- Effect Configuration Tabs --}} @@ -88,7 +96,7 @@
- +
@@ -96,48 +104,30 @@
{{filePicker target="effect.icon" type="image"}} - +
- - + +
- +
- {{#if isActorEffect}} -
- -
- -
-
- {{/if}} - - {{#if isItemEffect}} -
- -
- -
-
- {{/if}} -
- {{#if data.hasLabel}} + {{#if object.hasLabel}}
- +
{{/if}}
@@ -148,7 +138,7 @@
- +

@@ -156,9 +146,9 @@
- + - +
@@ -174,14 +164,14 @@
    - {{#each data.effect.changes as |change i|}} + {{#each link.effect.changes as |change i|}}
  1. @@ -195,63 +185,65 @@
- {{/if}} - - {{#if fromGame}} -
- - -
-
- {{#if askId}} -
- - -
- {{/if}} - {{#if askPack}} -
- - -
- {{/if}} -
- {{/if}} + {{else}} + {{!-- This is no longer used except in the @link format + {{#if fromGame}} +
+ + +
+
+ {{#if (or fromDirectory fromCompendium)}} +
+ + +
+ {{/if}} + {{#if fromCompendium}} +
+ + +
+ {{/if}} +
+ {{/if}} + --}} - {{#unless link.is.effect}}
- {{#unless link.is.item}} + {{#unless link.isItemCheck}} {{/unless}} - {{#if link.is.check}} + {{#if link.isCheck}} {{/if}}
- {{#if data.forceModifiers}} + {{#if object.hasModifiers}}
@@ -268,36 +260,38 @@ +2
- +
{{/if}} - {{#if data.hasLabel}} + {{#if object.hasLabel}}
- +
{{/if}} - {{#if data.hasIcon}} + {{#if object.hasIcon}}
- +
{{/if}} - {{/unless}} + {{/if}} + {{!-- This is no longer needed as the bluring input boxes no longer submits the form, remove if people don't want it back {{#if link.link}}
{{link.link}}
{{/if}} + --}} - {{#if link.hasPlayerOwner}} - + {{#if object.actors}} + {{/if}} \ No newline at end of file From 086c17ed79477c131ade60f7d82fc596b8d39333 Mon Sep 17 00:00:00 2001 From: snap01 <43982555+snap01@users.noreply.github.com> Date: Mon, 16 Jan 2023 19:12:52 +0000 Subject: [PATCH 12/78] Add Pulp rule to ignore age, minor fixes --- lang/en.json | 2 ++ module/actors/actor.js | 2 +- module/scripts/game-rules.js | 8 ++++++++ templates/actors/character-sheet-v2.html | 2 +- templates/actors/npc-sheet.html | 2 +- templates/items/skill-sheet.html | 2 +- templates/system/rule-settings.html | 7 +++++++ 7 files changed, 21 insertions(+), 4 deletions(-) diff --git a/lang/en.json b/lang/en.json index 02e7e9fda..e49b3633d 100644 --- a/lang/en.json +++ b/lang/en.json @@ -991,6 +991,8 @@ "CoC7.Settings.PulpRules.FasterRecovery.Hint": "Natural healing is increased to two hit points per day", "CoC7.Settings.PulpRules.IgnoreMajorWounds.Name": "Ignore Major Wounds", "CoC7.Settings.PulpRules.IgnoreMajorWounds.Hint": "", + "CoC7.Settings.PulpRules.IgnoreAgePenalties.Name": "Ignore Age Penalties", + "CoC7.Settings.PulpRules.IgnoreAgePenalties.Hint": "Do not alter movement rate based on age. When creating an investigator improvements and characteristic deductions are made", "CoC7.Settings.DholeUpload.Directory.Name": "The Dhole's House image upload directory", "CoC7.Settings.DholeUpload.Directory.Hint": "Upload path for The Dhole's House avatars, relative to the Foundry/Data directory.", "CoC7.Settings.WorldEra.Name": "Era for the world", diff --git a/module/actors/actor.js b/module/actors/actor.js index e8e963015..dea20849b 100644 --- a/module/actors/actor.js +++ b/module/actors/actor.js @@ -2212,7 +2212,7 @@ export class CoCActor extends Actor { } else { MOV = 7 } - if (this.system.type !== 'creature') { + if (this.system.type !== 'creature' && !game.settings.get('CoC7', 'pulpRuleIgnoreAgePenalties')) { if (!isNaN(parseInt(this.system.infos.age))) { MOV = parseInt(this.system.infos.age) >= 40 diff --git a/module/scripts/game-rules.js b/module/scripts/game-rules.js index 7cec36724..6b396c061 100644 --- a/module/scripts/game-rules.js +++ b/module/scripts/game-rules.js @@ -85,6 +85,14 @@ const SETTINGS = { default: false, type: Boolean }, + pulpRuleIgnoreAgePenalties: { + name: 'CoC7.Settings.PulpRules.IgnoreAgePenalties.Name', + hint: 'CoC7.Settings.PulpRules.IgnoreAgePenalties.Hint', + scope: 'world', + config: false, + default: false, + type: Boolean + }, opposedRollTieBreaker: { name: 'SETTINGS.OpposedRollTieBreaker', hint: 'SETTINGS.OpposedRollTieBreakerHint', diff --git a/templates/actors/character-sheet-v2.html b/templates/actors/character-sheet-v2.html index abe279dc3..63df8f8cc 100644 --- a/templates/actors/character-sheet-v2.html +++ b/templates/actors/character-sheet-v2.html @@ -191,7 +191,7 @@

{{localize 'CoC7.Armor'}}:

{{localize 'CoC7.Background'}}
- +
{{#if isKeeper}} diff --git a/templates/actors/npc-sheet.html b/templates/actors/npc-sheet.html index 3a326031b..bec1d586c 100644 --- a/templates/actors/npc-sheet.html +++ b/templates/actors/npc-sheet.html @@ -324,7 +324,7 @@

{{loc {{#if data.system.flags.locked}}
{{data.system.special.attacksPerRound}}
{{else}} - + {{/if}} diff --git a/templates/items/skill-sheet.html b/templates/items/skill-sheet.html index ea0bee9a2..61ea68838 100644 --- a/templates/items/skill-sheet.html +++ b/templates/items/skill-sheet.html @@ -45,7 +45,7 @@