xenotropicdev / theoracle Goto Github PK
View Code? Open in Web Editor NEWA Discord bot the the Ironsworn game system
License: Creative Commons Zero v1.0 Universal
A Discord bot the the Ironsworn game system
License: Creative Commons Zero v1.0 Universal
from the sounds of things this isn't in the immediate future, but here's some notes on the topic for when the time comes
steps to creating a delve site:
the delve worksheet includes the following information:
possible interactivity for delve site's embed once generated:
:four_leaf_clover:
or ๐ฎ :crystal_ball:
(though the latter might be better used on some other function, because it'd be a fun way to evoke the oracle theme):warning:
:regional_indicator_t:
:regional_indicator_d:
other concerns:
presumably this would take the form of another property in the json file.
i might word the embed's footer output as something like: "More information: p. ###", if only so the bot subtly reminds people there's much more detailed guidance available if needed; i figure if that can slip my mind when looking at a hardcopy move sheet, the same could happen to someone using the digital equivalent.
move categories might also warrant having page references. e.g. the combat category having a page reference number for the start of that section.
this is probably something i'll do, just adding it so i don't forget
For Starforged:
For Ironsworn:
Currently the bot only supports Ask commands that exactly match the expected syntax. It would be nice if they could be matched any where in the sent message.
Steps to Reproduce
Expected behaviour
The first option only is checked, with reacts for parts 2 and 3.
Current behaviour
Option 1 and 2 are checked, and there's only a react for 3.
Tried deleting the response and re-running the command, got the same result.
i have a few ideas on how this could work. really, this is almost entirely reminder text. but since rarities are essentially a form of situational bonus, it's easy for play to get bogged down as you go to look up the move to double check the mechanics (which i guess we've obviated some with the move lookup, but i think there's value in having a way to automate it a little bit), or to simply forget to use them.
!action
command!action
commandWield a Rarity
When you make a move aided by an augmented asset, roll your rarity die in place of your action die.
On any result with 6 showing on the rarity die, the power of the rarity manifests in a dramatic and obvious way. You score an automatic strong hit and take +1 momentum.
On a hit with 5 showing on the rarity die, the power of the rarity manifests in a subtle way. Take +1 momentum.
On a miss with 1 showing on the rarity die, the rarityโs power fails or works against you.
:ring:
, ๐ :gem:
, ๐ :crown:
?this is another "would be convenient but not immediately necessary" one, similar to #43 . it might also create enough differences between the IS/SF to justify having, say, an interactive post to ask which profile the user wants: ironsworn or starforged.
effectively legacy tracks are epic tracks; their rank doesn't need to be specified, which lets us cut down on some clutter:
next to a fully generated planet card, that's not too bad, honestly.
as far as tracking XP...
the current SF rules give a flat 2xp per filled box on the legacy tracks (or 1xp per filled box for those PCs progressing past the initial 10 boxes).
from that, the PC's total earned XP could be derived and displayed, perhaps with an indicator of the XP they've spent, too.
a tickbox labelled with +10 is used on the SF character sheet to indicate the track has been filled previously, so i've used something similar here. when rolling the challenge dice against a progress track that has exceeded 10, the action score is treated as though it were 10 (probably similar to the similar rule capping rolled action scores)
and all that seems straightforward, but actual interacting with them is another problem.
if we were still marking 1-5 ticks on legacy tracks at once, it'd probably be fine just to have them use the single increment/decrement arrows used for other stats... but the current iteration of starforged (which reminds me, i gotta update the move/asset data to reflect it ๐ ) changes the amount of Legacy track progress marked per completed vow/bond/expedition:
which means a total of 8/12 clicks on a resolving an Extreme/Epic task. oof.
admittedly, marking a legacy track is way less common than manipulating any other PC stat, and i'd wager that the majority of tasks are Troublesome, Dangerous, or Formidable, so it probably won't come up that often. and perhaps there's something satisfying about marking that many ticks at once when you finally overcome that Epic vow... but it could still really suck for ppl for whom repetitive clicking is difficult due to mobility concerns, or people who get distracted and lose count with some frequency (like me).
if that seems like it'd clutter things up with too many emoji reacts, it might be possible to make incrementing a legacy track an interactive post of some kind. perhaps a single emoji react that, when selected, prompts the user for the rank/number of ticks (there's a couple assets that add ticks - not progress - to an additional track, e.g. Diplomat). this level of interactivity would be onerous for adjusting something like health or momentum, but legacy tracks come up much less frequency.
Ironsworn has much looser guidelines for settlement generation and fewer oracles to do it with, but i reckon something like:
looking at this i start to wonder wonder what oracles could be backported from starforged (Authority in particular - maybe it'd work as an emoji react? hm), but that's definitely a nonstandard use and probably beyond the scope of this project, haha.
Probably similar to the progress tracker, with ship name, supply track, integrity track.
analogous to danger/feature on delve site embeds. suggested emoji reacts: ๐ for opportunity, and
the logic could probably go something like:
Life
is unset, generate a Life
result and set it (or return an appropriate error message)Life
is "None"
or "Extinct"
, use the Lifeless Planetside Opportunity
/Lifeless Planetside Complication
oraclesLife
is "Simple"
, "Sparse"
, "Diverse"
, "Bountiful"
, or "Overrun"
, use the Lifebearing Planetside Opportunity
/ Lifebearing Planetside Complication
oracles.Life
is some other value (maybe due to someone editing the field, or some typo ive left in the json), return an appropriate error messageIf I select multiple Player Card stats and use one of the arrow reactions it gives me an error message ("Too many stats are active, please disable all but one.")
It would be cleaner for it to remove the previous selection. For example, selecting Health then Spirit would remove the user's Health reaction so only Spirit remains.
The fleet is an additional role kind of like starship mission.
An interactive embed things like health, spirit, and supply would help players tightly integrate their game on one platform.
ive got them in Dataforged, they just need to be formatted properly
Use buttons over reactions
i'd like to take a crack at these, building on the Progress classes established in my Clocks PR. Starforged's only source of XP is via legacies, so total XP earned could be calculated from that.
interactivity required per track (buttons/menu options):
that means there needs to be at least 21 interactive elements to cover all standard legacy functions. for incrementing/decrementing, that could be handled by using a select menu to pick which legacy track to manipulate + how to manipulate it, then an ephemeral follow-up with buttons to pick the amount.
questions to answer:
i've already started on this, just noting it here for the sake of record keeping
concise explanation of rules elements not covered in the moves, with page references for easier lookup of more detailed information, whether as some sort of glossary or folded into the reference command.
Ironsworn's index and glossary are probably good places to start with deciding what email to compile.
challenges (w/r/t the rules data)
discussed on the SF playtest discord, but noting it here on the off chance someone else comes looking for it
page 18, SF playtest rules (Chapter-1-The-Basics-Ironsworn-Starforged-121320.pdf):
pref with some kind of feedback message so it's clear to ppl that this is what's happening, and that it's supposed to happen.
the oracles in question are currently aliased as delve edge
, delve shadow
, and delve wits
as far as which emoji to use, i'm liking :regional_indicator_e:
:regional_indicator_s:
:regional_indicator_w:
, respectively
the shared shape/color signals these reacts as both separate from the other emoji reacts, and as related to each other, which might make their purpose more discoverable w/o recourse to documentation.
the downside is that they probably wouldn't localize well (unless localization strings were added for emoji, assuming they're not already in the works).
that said, it's entirely possible that more symbolic emoji won't translate well either, as the nuances of some emoji can vary wildly from language to language. but that's probably a point in favour of localizable emoji than any recommendation against the symbolic approach.
:runner:
:spy:
:brain:
my concern would be that more concrete imagery creates a narrower notion of what those stats mean than something more abstract would, but admittedly, i may just be overthinking it. also, they might be trickier to 'read' at a glance than the initials above.
obviously this isn't an especially pressing need, since people can just use a normal progress track for this, but i think there's a case to be made for the convenience of tracks being bundled with their relevant embeds.
alternate version with compact (single field) progress display:
i figure this should only be displayed after a specific emoji react is hit (:handshake: :handshake:
, perhaps), triggering an interactive post for selecting the rank of the bonded NPC in question and adding the progress track to the post.
one complication: a miss on Forge a Bond can mean clearing all but one box of progress and increase the rank of the track (a mechanic it shares with several other progress moves). theOracle's current approach to this is to have the user create a brand new progress track, which isn't too onerous in most cases, but given the number of generated attributes for NPCs,
it'd also be useful to be able to note it as a connection so that searching (connection)
with discord's search tool turns up all generated connection NPCs. so maybe a parenthetical subtype to "Non-Player Character", like this:
with it changing to (bond)
upon completing the track or some other user input.
ref: ironsworn, p. 234.
:green_square:
and โ :negative_squared_cross_mark:
would work for that.:negative_squared_cross_mark:
to mark the countdown track, and perhaps ๐ฉ :green_square:
to remove it (to my knowledge there's no mechanic that removes marks from the countdown track, but it's probably a good idea to make it reversible in case someone misclicks)useful to have in general; also provides some delve support in the mean time, while remaining useful even after more full-featured delve embeds are implemented
mockups with two approaches to output:
on one hand, the long form description could be a bit much. on the other hand, maybe it'd be possible to gate it behind a ๐ react or something (and perhaps add a react that does the reverse to collapse the description back to the one-liner from the card)? personally, i'd find it useful (if i'm looking for ideas i often go to the long-form descriptions to see what they offer), but i'm not sure how often others would refer to them.
but, then again, if referring to it was as easy as typing a command (and possibly clicking an emoji), maybe more people would refer to the long description? like, that's definitely quicker than paging through the book, or even pulling up the right page via bookmarks in the pdf. i reckon the bot has a lot of potential as a reference tool on those grounds alone!
anyways. i don't think i included the long-form description in the data (and i'm not 100% sure i included the page references, for that matter), but that wouldn't take very long to fix.
If you add the โ reaction to a message the bot will add the โ๏ธ reaction even if the bot isn't the owner of the message.
my understanding is this is the designer intent of the oracle tables for planets, creatures, etc is to reroll duplicate results (i can dig up the discord messages from shawn to this effect if needed), so the default for cards (or perhaps just new/unset channels) should be to reroll duplicates.
the procedure outlined in Delve (p. 214):
i suspect emulating the roll/pick of characteristics/abilities to its full extent (the final selections made by the player) wouldn't be worth the effort.
maybe starting them off with a 1 each of Characteristics and Abilities and have emoji reacts to add more, up to a maximum of 4. it might also be worth including brief text note on the embed template, that reminds users pick up to three of those generated characteristics/abilities. not especially elegant, but it'd probably work, at least.
(this is another situation where i'd be tempted to bolt these together with starforged's creature oracles, but again, that's probably outside the scope of the bot, ha)
since exploration, discovery, and 'playing to find out' are a big part of the game, i think it'd be on-theme to have some way of setting the name of the npc/creature/ship/planet cards after they've been generated. this would also make it easier to locate them in the chat log using discord's search function, too, rather than approaching the search 'sideways' by trying to remember the contents of the fields or something. as well as covering those situations where there's a typo or maybe interference from autocorrect, haha.
โ๏ธ :pencil2:
is a pretty common metaphor for this sort of thing, so i think it'd be a solid choice for a react. i figure using that react could trigger the kind of text-based interaction currently used in Delve Site posts?
the 'dream'/expanded version of this feature would be being able to set/remove any field after the fact, but that's probably a separate feature request.
noticed this when i was updating the readme. "Initiative"/"No Initiative" is a little awkward, but it's at least pretty clear what it is, and is probably the most compact way to describe it.
at this point i often resort to copy-pasting the !oraclelist output to a text editor to find the entry i'm looking for. i'm not sure what the solution here is, honestly; it's a lot of text in the first place because ironsworn/starforged has a lot of oracles, and there's only so much that can be done to compress that.
one way to approach it might be: accept that it's going to be long no matter what, and just make it as readable as possible even if it takes up more space to do so (and it almost certainly will). as it is, the post already takes up about half the vertical space on my 15" laptop screen, and it'll probably only expand as i get around to adding better aliases and as starforged adds more oracles. maybe automatically populate the "delete post" โ emoji react to remind people that they can dismiss the humongous post when they're done looking at it.
now that i'm flooding the issues tab ๐ it might be a good idea to add some labels. i'm certain the list below isn't exhaustive but it'd be a good start.
probably included in both interactive post and as an argument on the command, like setting Region for settlements
currently there's no emoji react to add additional 'first look' results if there's fewer than 3, and the revealed aspects don't seem to be capped at 3.
my current opinion after playing the game with the bot more is that first look should be initially populated to the minimum (2), rather than the bot picking 2-3 for me, because the 'discovery experience' with oracles that's so central to starforged feels better to me if i'm making a decision to roll that third first look (and, sometimes, two is more than enough). other people might vary on that, though.
initial
: the number of results that are automatically populated.
max
: the maximum number of fields of this type
:eyes:
(initial = 2, max = 3):butterfly:
(initial = 0, max = 3)
:mag:
, following the precedent of "closer look"-type results for NPCs, planets, etc.It would be really convenient if the arrow_double_down reaction would be added by default to more posts, especially progress trackers, assets, and character cards. Thanks!
Looks like any use of filter/search options for !assetlist command returns an "Object reference not set to an instance of an object." error if default game for the channel is set to "Starforged". Options work OK for "Ironsworn" setting.
How to reproduce:
ref: p. 151, Ironsworn: Delve
information needed: Threat name, threat's goal, 10-box track (boxes are either filled or empty, not ticked like progress boxes are), associated vow
i think the best way to track this would be to integrate it into the progress track module. having it consist of three fields means it would line up nicely with the progress track (on desktop, anyways).
this prototype uses ๐ฉ :green_square
and โ :negative_squared_cross_mark:
like the prototype for scene challenges (#30), but under normal rules a scene challenge can't also have a Threat attached to it anyways (since they only attach to Vows), so we ought to be fine.
like the countdown track proposal in #30, menace might be incremented/decremented with the same emoji used for the boxes' off/on states.
these threat fields should probably remain hidden until a specific command or emoji react is used. some candidates:
:hourglass_flowing_sand:
(has conceptual overlap with scene challenges (#30), though, which would be an emoji react on the same embed, so we might want something more obviously, er, threatening):warning:
(logical enough, but this is a candidate as a react for rolling theme/domain dangers, so we might want to avoid overlap):vs:
:bomb:
(in the sense of a ticking time bomb):supervillain:
(perhaps a bit silly, but i have to admit the emoji does give off villain energy):imp:
, ๐ :smiling_imp:
(ditto)alternately/additionally, !progress
might include arguments for the threat and its parameters.
rolling against the progress track could include some reminder text when a threat is active (ref: p. 159)
this reminder text is longer than most of the similar text that the bot outputs, but it might warrant it in this case. rationale:
Alternately, it could be compressed down to something like The threat achieves their goal! See p. 159 of Ironsworn: Delve for more information on resolving a threat.
, or including the equivalent command once rules reference is expanded.
here's the basic format i'm using:
{
"Foes": [
{
"Category": "Ironlanders",
"Description": "Ironlanders are the human inhabitants of these lands. Unless your story emphasizes adventures well outside of the settled regions, the majority of your interactions will be with fellow Ironlanders.\nThis section covers a few broad categories of Ironlanders. They are not representative of the variety of people and cultures in these lands. When you are forced to fight an Ironlander and need to determine their rank, you can _Ask the Oracle_, or follow these guidelines:\nโข A common citizen or brute is **troublesome**.\nโข A trained warrior is **dangerous**.\nโข A powerful or veteran warrior is **formidable**.",
"Foes": [{
"Name": "Raider",
"Rank": "Dangerous",
"Source": "Ironsworn",
"Page": "140",
"Features": [
"Geared for war",
"Battle fervor"
],
"Drives": [
"What is theirs will be ours",
"Stand with my kin",
"Die a glorious death"
],
"Tactics": [
"Intimidate",
"Shield Wall",
"Burn it Down"
],
"Description": "Raiders survive by seizing what they need from others. Our grain. Our meat. Our animals. Our iron. Theyโll take it all, and leave us facing the long winter with nothing to sustain us but prayers to indifferent gods.",
"Quest": "You were raised as a raider, born to battle, but long ago left that life. Troubled by your past, you vow to wipe this powerful clan from the Ironlands. How can you defeat them? What will happen when you must face your former shield-kin?",
"Truth": "A large raider clan is known and feared throughout the Ironlands. What is it called? Who leads it?"
}
]
}
]
}
i'm not sure we have a need for Quest
or Truth
, but it could be useful for someone else once i get around to putting together a generic ironsworn data repo, and it's not that much more work to add. heck, Quest
might be useful to pull from to as a broad quest prompt feature
to make text searching this easier:
i remember this coming up, and it sounded like it wasn't in the cards for the time being; still, i reckon it's worth posting here to have a record of it in case it comes up again. feel free to label it wontfix or something. :)
perhaps unsurprisingly, i made a bunch of notes too.
Ironsworn, p. 36:
- Each marked debility reduces your max momentum by 1.
- If you have one marked debility, your momentum reset is +1 instead of +2.
- If you have more than one marked debility, your momentum reset is 0.
:dizzy:
, ๐ :broken_heart:
, and ๐ฉธ :drop_of_blood:
as candidates for the emoji react for managing debilities because they're more abstract/symbolic (and so they'd be the least obtrusive on the game's mood, if that makes sense? it's quite possible i'm overthinking this, ha), but there's no shortage of smiley-type emoji to depict various state of distress: ๐ต ๐ฑ ๐ค ๐ฌ ๐ :four_leaf_clover:
might actually make more sense for Find an Opportunity than it does for Features. maybe Features could be moved to ๐ :eyes:
, since Features generally represent the 'at-a-glance' appearance of a Delve Site Area?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.