Merge pull request #933 from argonui/parallel-mateo

Added Parallel Mateo
This commit is contained in:
dscarpac 2024-11-01 02:20:28 -05:00 committed by GitHub
commit 7323b55d70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 480 additions and 26 deletions

View File

@ -355,6 +355,7 @@
"PowderofIbnGhazi.f96ed0",
"YourWorstNightmare.406ab2",
"TheCodexofAges.df9809",
"TheCodexofAges.df9810",
"WrittenintheStars.320bbe",
"LivredEibon.55001f",
"LuckyPenny2.aae31c",
@ -881,6 +882,7 @@
"SurprisingFind1.ff59dd",
"TristanBotley2.1fd630",
"SerpentsofYig.678391",
"SerpentsofYig.678392",
"Rolands38Special.dbdaff",
"ChicagoTypewriter4.ecfa42",
"HealingWords.bba97a",
@ -1130,6 +1132,9 @@
"TrishScarborough.333fe7",
"LukeRobinson.c59b75",
"FatherMateo.eb96e6",
"FatherMateoParallel.eb96e7",
"FatherMateoParallelBack.eb96e8",
"FatherMateoParallelFront.eb96e9",
"BobJenkins.419b0c",
"WilliamYorick.7e4c56",
"CalvinWright.b02a1e",

View File

@ -12,7 +12,9 @@
"signatures": [
{
"04013": 1,
"04014": 1
"04014": 1,
"90082": 1,
"90083": 1
}
]
}

View File

@ -5,19 +5,19 @@
"z": 0
},
"Autoraise": true,
"CardID": 449601,
"CardID": 4004100,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"4496": {
"40041": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/1656727981627737648/F371339538812F68E38AAC0D520C525250DAC5C0/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/1656727981627737050/3CFF9E3825033909543AD1CF843361D9243538EE/",
"NumHeight": 2,
"NumWidth": 4,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2453991328897621258/BDB321594063924D7C3E6EDC3BDAE553AB63C3D7/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2453991328897621318/D69A572C94A5612D66A3816640B7B6C86A99124A/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": true
}
@ -36,7 +36,7 @@
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "Card",
"Name": "CardCustom",
"Nickname": "Father Mateo",
"SidewaysCard": true,
"Snap": true,

View File

@ -0,0 +1,20 @@
{
"id": "04004-p",
"type": "Investigator",
"class": "Mystic",
"traits": "Believer. Warden.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 2,
"agilityIcons": 3,
"cycle": "Aura of Faith",
"extraToken": "FreeTrigger",
"signatures": [
{
"04013": 1,
"04014": 1,
"90082": 1,
"90083": 1
}
]
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 4004200,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"40042": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869388381839/BF4CDDC0E9AD9A705D230089E9B47876DAC5202B/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869388381873/EDCD13A5D7C229DDCC1B41750238EC8409D9F689/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Priest",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/FatherMateoParallel.eb96e7.gmnotes",
"GUID": "eb96e7",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"playercards/cards/FatherMateoParallel\")",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "Father Mateo (Parallel)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 18.448,
"posY": 1.943,
"posZ": -73.087,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,20 @@
{
"id": "04004-pb",
"type": "Investigator",
"class": "Mystic",
"traits": "Believer. Warden.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 2,
"agilityIcons": 3,
"cycle": "Aura of Faith",
"extraToken": "None",
"signatures": [
{
"04013": 1,
"04014": 1,
"90082": 1,
"90083": 1
}
]
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 4004300,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"40043": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869388381839/BF4CDDC0E9AD9A705D230089E9B47876DAC5202B/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2453991328897621318/D69A572C94A5612D66A3816640B7B6C86A99124A/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Priest",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/FatherMateoParallelBack.eb96e8.gmnotes",
"GUID": "eb96e8",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "Father Mateo (Parallel Back)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 18.448,
"posY": 1.943,
"posZ": -73.087,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,20 @@
{
"id": "04004-pf",
"type": "Investigator",
"class": "Mystic",
"traits": "Believer. Warden.",
"willpowerIcons": 4,
"intellectIcons": 3,
"combatIcons": 2,
"agilityIcons": 3,
"cycle": "Aura of Faith",
"extraToken": "FreeTrigger",
"signatures": [
{
"04013": 1,
"04014": 1,
"90082": 1,
"90083": 1
}
]
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 4004400,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"40044": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2453991328897621258/BDB321594063924D7C3E6EDC3BDAE553AB63C3D7/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869388381873/EDCD13A5D7C229DDCC1B41750238EC8409D9F689/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": true
}
},
"Description": "The Priest",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/FatherMateoParallelFront.eb96e9.gmnotes",
"GUID": "eb96e9",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": false,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"playercards/cards/FatherMateoParallel\")",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "Father Mateo (Parallel Front)",
"SidewaysCard": true,
"Snap": true,
"Sticky": true,
"Tags": [
"Investigator",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 18.448,
"posY": 1.943,
"posZ": -73.087,
"rotX": 0,
"rotY": 180,
"rotZ": 0,
"scaleX": 1.15,
"scaleY": 1,
"scaleZ": 1.15
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,8 @@
{
"id": "90083",
"type": "Enemy",
"class": "Neutral",
"traits": "Humanoid. Monster. Serpent.",
"weakness": true,
"cycle": ""
}

View File

@ -0,0 +1,61 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 171300,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"1713": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869388381950/88C8A1CCF5D560702965D1A5E239A8F14A030C7D/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": false
}
},
"Description": "Humanoid. Monster. Serpent. (Advanced)",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/SerpentsofYig.678392.gmnotes",
"GUID": "678392",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"playercards/cards/SerpentsofYigAdvanced\")",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "Serpents of Yig",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 9.146,
"posY": 3.681,
"posZ": -16.726,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -0,0 +1,12 @@
{
"id": "90082",
"type": "Asset",
"slot": "Hand",
"class": "Neutral",
"cost": 2,
"traits": "Item. Relic. Tome. Blessed.",
"intellectIcons": 1,
"willpowerIcons": 1,
"wildIcons": 1,
"cycle": ""
}

View File

@ -0,0 +1,62 @@
{
"AltLookAngle": {
"x": 0,
"y": 0,
"z": 0
},
"Autoraise": true,
"CardID": 171200,
"ColorDiffuse": {
"b": 0.71324,
"g": 0.71324,
"r": 0.71324
},
"CustomDeck": {
"1712": {
"BackIsHidden": true,
"BackURL": "https://steamusercontent-a.akamaihd.net/ugc/2342503777940352139/A2D42E7E5C43D045D72CE5CFC907E4F886C8C690/",
"FaceURL": "https://steamusercontent-a.akamaihd.net/ugc/2398822869389830502/6F4D416CC189AF39A65EBA917764ACA0E824E026/",
"NumHeight": 1,
"NumWidth": 1,
"Type": 0,
"UniqueBack": false
}
},
"Description": "finis omnium nunc est (Advanced)",
"DragSelectable": true,
"GMNotes_path": "AllPlayerCards.15bb07/TheCodexofAges.df9810.gmnotes",
"GUID": "df9810",
"Grid": true,
"GridProjection": false,
"Hands": true,
"HideWhenFaceDown": true,
"IgnoreFoW": false,
"LayoutGroupSortIndex": 0,
"Locked": false,
"LuaScript": "require(\"playercards/cards/TheCodexofAgesAdvanced\")",
"LuaScriptState": "",
"MeasureMovement": false,
"Name": "CardCustom",
"Nickname": "The Codex of Ages",
"SidewaysCard": false,
"Snap": true,
"Sticky": true,
"Tags": [
"Asset",
"PlayerCard"
],
"Tooltip": true,
"Transform": {
"posX": 8.99,
"posY": 3.789,
"posZ": -16.692,
"rotX": 0,
"rotY": 270,
"rotZ": 0,
"scaleX": 1,
"scaleY": 1,
"scaleZ": 1
},
"Value": 0,
"XmlUI": ""
}

View File

@ -389,6 +389,8 @@ end
function addMenuOptions(parameters)
local playerColor = parameters.playerColor
local hoveredObject = parameters.hoveredObject
local noCurse = parameters.noCurse or false
if hoveredObject == nil or hoveredObject.type ~= "Card" then
broadcastToColor("Right-click seal options can only be added to cards.", playerColor)
return
@ -407,15 +409,17 @@ function addMenuOptions(parameters)
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Seal Curse", function(color)
sealToken("Curse", color, hoveredObject)
tokenArrangerApi.layout()
end, true)
if not noCurse then
hoveredObject.addContextMenuItem("Seal Curse", function(color)
sealToken("Curse", color, hoveredObject)
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Release Curse", function(color)
releaseToken("Curse", color, hoveredObject)
tokenArrangerApi.layout()
end, true)
hoveredObject.addContextMenuItem("Release Curse", function(color)
releaseToken("Curse", color, hoveredObject)
tokenArrangerApi.layout()
end, true)
end
broadcastToColor("Right-click seal options added to " .. hoveredObject.getName(), playerColor)
hoveredObject.setVar("MENU_ADDED", true)
@ -423,12 +427,14 @@ function addMenuOptions(parameters)
end
function sealToken(type, playerColor, hoveredObject)
local chaosBag = chaosBagApi.findChaosBag()
if not chaosBagApi.canTouchChaosTokens() then return end
local chaosBag = chaosBagApi.findChaosBag()
for i, token in ipairs(chaosBag.getObjects()) do
if token.name == type then
return chaosBag.takeObject({
position = hoveredObject.getPosition() + Vector(0, 1, 0),
rotation = hoveredObject.getRotation(),
index = i - 1,
smooth = false,
callback_function = function(obj)

View File

@ -51,8 +51,9 @@ do
-- adds bless / curse sealing to the hovered card
---@param playerColor string Color of the player to show the broadcast to
---@param hoveredObject tts__Object Hovered object
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject })
---@param noCurse? boolean True if just Bless sealing should be added (Parallel Mateo)
BlessCurseManagerApi.addBlurseSealingMenu = function(playerColor, hoveredObject, noCurse)
getManager().call("addMenuOptions", { playerColor = playerColor, hoveredObject = hoveredObject, noCurse = noCurse })
end
-- adds bless / curse to the chaos bag

View File

@ -134,12 +134,16 @@ function generateContextMenu()
end
if RESOLVE_TOKEN then
local firstTokenType
local label
for tokenType, val in pairs(VALID_TOKENS) do
firstTokenType = tokenType
break
if label and label ~= tokenType then
label = "sealed token"
break
else
label = tokenType
end
end
self.addContextMenuItem("Resolve " .. firstTokenType, resolveSealed)
self.addContextMenuItem("Resolve " .. label, resolveSealed)
end
if SHOW_MULTI_RETURN then
@ -152,7 +156,7 @@ function generateContextMenu()
-- main context menu options to seal tokens
for _, map in pairs(ID_URL_MAP) do
if (VALID_TOKENS[map.name] ~= nil) or (UPDATE_ON_HOVER and tokensInBag[map.name] and not INVALID_TOKENS[map.name]) then
if (VALID_TOKENS[map.name] ~= nil) or (UPDATE_ON_HOVER and tokensInBag[map.name] and INVALID_TOKENS and not INVALID_TOKENS[map.name]) then
if not SHOW_MULTI_SEAL then
self.addContextMenuItem("Seal " .. map.name, function(playerColor)
sealToken(map.name, playerColor)

View File

@ -343,9 +343,9 @@ INVESTIGATORS["Finn Edwards"] = {
starterDeck = "2625003"
}
INVESTIGATORS["Father Mateo"] = {
cards = { "04004" },
cards = { "04004", "04004-p", "04004-pf", "04004-pb" },
minicards = { "04004-m" },
signatures = { "04013", "04014" },
signatures = { "04013", "04014", "90082", "90083" },
starterDeck = "2625005"
}
INVESTIGATORS["Calvin Wright"] = {

View File

@ -0,0 +1,13 @@
local blessCurseManagerApi = require("chaosbag/BlessCurseManagerApi")
local playermatApi = require("playermat/PlayermatApi")
function onLoad()
self.addContextMenuItem("Enable menus", addSealingMenus)
end
function addSealingMenus(playerColor)
self.clearContextMenu()
for _, obj in ipairs(playermatApi.getUsedInvestigatorCards()) do
blessCurseManagerApi.addBlurseSealingMenu(playerColor, obj, true)
end
end

View File

@ -0,0 +1,10 @@
VALID_TOKENS = {
["Bless"] = true,
["Elder Sign"] = true
}
KEEP_OPEN = true
UPDATE_ON_HOVER = true
MAX_SEALED = 11
require("playercards/CardsThatSealTokens")

View File

@ -0,0 +1,11 @@
VALID_TOKENS = {
["Bless"] = true,
["Elder Sign"] = true
}
KEEP_OPEN = true
UPDATE_ON_HOVER = true
RESOLVE_TOKEN = true
MAX_SEALED = 3
require("playercards/CardsThatSealTokens")

View File

@ -289,6 +289,19 @@ do
return usedColors
end
-- Returns a list of investigator card objects
PlayermatApi.getUsedInvestigatorCards = function()
local usedCards = {}
for _, mat in pairs(getMatForColor("All")) do
local searchPos = mat.positionToWorld(localInvestigatorPosition)
local searchResult = searchLib.atPosition(searchPos, "isCardOrDeck")
if #searchResult > 0 then
table.insert(usedCards, searchResult[1])
end
end
return usedCards
end
-- Returns investigator name
---@param matColor string Color of the playmat - White, Orange, Green or Red (does not support "All")
PlayermatApi.getInvestigatorName = function(matColor)